From a29b7ca1a02437800d5739411c530d919b61e84b Mon Sep 17 00:00:00 2001 From: kerem Date: Sat, 4 Nov 2023 16:48:21 +0100 Subject: [PATCH] the implementation of the first working example with uart.h & uart.c from STM using void* --- Software/.metadata/.ide.log | 1112 +++ Software/.metadata/.lock | 0 Software/.metadata/.log | 202 + Software/.metadata/.log4j2.xml | 18 + .../2.2.0.202306231147 | 0 .../.plugins/org.eclipse.cdt.core/.log | 0 .../reflow_oven.1699107928342.pdom | Bin 0 -> 2379776 bytes .../reflow_oven.language.settings.xml | 1 + .../org.eclipse.cdt.make.core/specs.c | 1 + .../org.eclipse.cdt.make.core/specs.cpp | 1 + .../spec.c | 0 .../spec.cpp | 0 .../org.eclipse.cdt.ui/global-build.log | 14 + .../org.eclipse.cdt.ui/reflow_oven.build.log | 17 + .../13/80ac86ef1e7b001e1ce1cc78c47163e2 | 181 + .../14/1008be4d257b001e1ce1cc78c47163e2 | 24 + .../1b/106d8d6b1e7b001e1ce1cc78c47163e2 | 2 + .../1d/c009551e257b001e1ce1cc78c47163e2 | 12 + .../30/d064e4831f7b001e1ce1cc78c47163e2 | 181 + .../38/109c44ea277b001e1ce1cc78c47163e2 | 13 + .../38/60e8c1d5277b001e1ce1cc78c47163e2 | 0 .../3a/00acb3a0257b001e1ce1cc78c47163e2 | 0 .../45/30628988277b001e1ce1cc78c47163e2 | 77 + .../5/6047c06e277b001e1ce1cc78c47163e2 | 77 + .../55/7019ff461f7b001e1ce1cc78c47163e2 | 0 .../5c/501a5a4d1e7b001e1ce1cc78c47163e2 | 0 .../5f/9023afc4267b001e1ce1cc78c47163e2 | 9 + .../6/b0ceb956287b001e1ce1cc78c47163e2 | 16 + .../76/8012e6831f7b001e1ce1cc78c47163e2 | 8 + .../8e/70685a4d1e7b001e1ce1cc78c47163e2 | 0 .../94/d073495c287b001e1ce1cc78c47163e2 | 16 + .../9a/20f787a3247b001e1ce1cc78c47163e2 | 0 .../9b/d0a489a3247b001e1ce1cc78c47163e2 | 14 + .../9e/602861c71f7b001e1ce1cc78c47163e2 | 13 + .../a4/901080bb267b001e1ce1cc78c47163e2 | 4 + .../ab/20ca8688277b001e1ce1cc78c47163e2 | 13 + .../ad/b06f002d1f7b001e1ce1cc78c47163e2 | 0 .../b7/202c3932287b001e1ce1cc78c47163e2 | 9 + .../be/90cd559e1f7b001e1ce1cc78c47163e2 | 181 + .../c9/10d87ebb267b001e1ce1cc78c47163e2 | 7 + .../ca/d0f9438e257b001e1ce1cc78c47163e2 | 0 .../ce/50bf2c57297b001e1ce1cc78c47163e2 | 11 + .../d3/20b19c56257b001e1ce1cc78c47163e2 | 16 + .../d6/4091b9e1277b001e1ce1cc78c47163e2 | 9 + .../d7/1072e7831f7b001e1ce1cc78c47163e2 | 6 + .../df/c0b23a32287b001e1ce1cc78c47163e2 | 16 + .../e0/90cc3732287b001e1ce1cc78c47163e2 | 1 + .../ec/d0ab1148287b001e1ce1cc78c47163e2 | 16 + .../f1/60fe54681e7b001e1ce1cc78c47163e2 | 0 .../reflow_oven/.indexes/af/history.index | Bin 0 -> 70 bytes .../.indexes/bf/4a/77/history.index | Bin 0 -> 85 bytes .../.indexes/bf/4a/9/2c/77/history.index | Bin 0 -> 155 bytes .../reflow_oven/.indexes/bf/4a/history.index | Bin 0 -> 187 bytes .../.indexes/bf/6d/4a/77/history.index | Bin 0 -> 101 bytes .../.indexes/bf/6d/4a/77/properties.index | Bin 0 -> 162 bytes .../.indexes/bf/6d/4a/9/2c/77/history.index | Bin 0 -> 195 bytes .../bf/6d/4a/9/2c/77/properties.index | Bin 0 -> 184 bytes .../.indexes/bf/6d/4a/history.index | Bin 0 -> 243 bytes .../.indexes/bf/6d/4a/properties.index | Bin 0 -> 240 bytes .../reflow_oven/.indexes/bf/6d/history.index | Bin 0 -> 457 bytes .../.indexes/bf/6d/properties.index | Bin 0 -> 342 bytes .../reflow_oven/.indexes/bf/be/history.index | Bin 0 -> 73 bytes .../.indexes/bf/be/properties.index | Bin 0 -> 301 bytes .../reflow_oven/.indexes/bf/c4/history.index | Bin 0 -> 97 bytes .../.indexes/bf/c4/properties.index | Bin 0 -> 211 bytes .../reflow_oven/.indexes/bf/history.index | Bin 0 -> 83 bytes .../d5/13/76/61/15/78/properties.index | Bin 0 -> 174 bytes .../.indexes/d5/2/be/properties.index | Bin 0 -> 281 bytes .../.indexes/d5/2/c4/properties.index | Bin 0 -> 167 bytes .../reflow_oven/.indexes/properties.index | Bin 0 -> 344 bytes .../.projects/reflow_oven/.location | Bin 0 -> 105 bytes .../.projects/reflow_oven/.markers.snap | Bin 0 -> 4343 bytes .../.projects/reflow_oven/.syncinfo.snap | Bin 0 -> 144 bytes .../.projects/reflow_oven/1.tree | Bin 0 -> 166 bytes .../.root/.indexes/properties.index | Bin 0 -> 61 bytes .../.root/.markers.snap | Bin 0 -> 160 bytes .../.safetable/org.eclipse.core.resources | Bin 0 -> 479 bytes .../org.eclipse.core.resources/0.snap | Bin 0 -> 27121 bytes .../com.st.stm32cube.ide.mcu.ide.oss.prefs | 2 + ...org.eclipse.cdt.core.prj-reflow_oven.prefs | 16 + .../org.eclipse.cdt.debug.core.prefs | 2 + .../org.eclipse.cdt.managedbuilder.core.prefs | 3 + .../.settings/org.eclipse.cdt.ui.prefs | 5 + .../org.eclipse.core.resources.prefs | 2 + .../.settings/org.eclipse.debug.core.prefs | 5 + .../.settings/org.eclipse.debug.ui.prefs | 3 + .../.settings/org.eclipse.ui.browser.prefs | 2 + .../.settings/org.eclipse.ui.navigator.prefs | 2 + .../.settings/org.eclipse.ui.prefs | 2 + .../.settings/org.eclipse.ui.workbench.prefs | 8 + .../.settings/org.eclipse.urischeme.prefs | 2 + .../org.eclipse.e4.workbench/workbench.xmi | 2090 +++++ .../org.eclipse.ui.ide/dialog_settings.xml | 6 + .../org.eclipse.ui.workbench/workingsets.xml | 4 + Software/.metadata/version.ini | 3 + Software/ked_submodule/ked.c | 0 Software/ked_submodule/ked.h | 0 .../ked_third_parties/stm/peripherals/uart.c | 0 Software/ked_submodule/peripherals/uart.h | 0 Software/reflow_oven/.cproject | 172 + Software/reflow_oven/.mxproject | 29 + Software/reflow_oven/.project | 32 + .../.settings/language.settings.xml | 25 + .../.settings/stm32cubeide.project.prefs | 3 + Software/reflow_oven/Core/Inc/gpio.h | 49 + Software/reflow_oven/Core/Inc/main.h | 77 + .../reflow_oven/Core/Inc/stm32f0xx_hal_conf.h | 322 + Software/reflow_oven/Core/Inc/stm32f0xx_it.h | 62 + Software/reflow_oven/Core/Inc/usart.h | 52 + Software/reflow_oven/Core/Src/gpio.c | 82 + Software/reflow_oven/Core/Src/main.c | 181 + .../reflow_oven/Core/Src/stm32f0xx_hal_msp.c | 82 + Software/reflow_oven/Core/Src/stm32f0xx_it.c | 145 + Software/reflow_oven/Core/Src/syscalls.c | 176 + Software/reflow_oven/Core/Src/sysmem.c | 79 + .../reflow_oven/Core/Src/system_stm32f0xx.c | 249 + Software/reflow_oven/Core/Src/usart.c | 116 + .../Core/Startup/startup_stm32f031k6tx.s | 264 + .../Core/reflow_oven_src/ked/ked.c | 0 .../Core/reflow_oven_src/ked/ked.h | 2 + .../ked_third_parties/stm/peripherals/uart.c | 12 + .../reflow_oven_src/ked/peripherals/uart.h | 4 + .../Core/reflow_oven_src/ked_config.h | 13 + .../Core/reflow_oven_src/reflow_main.c | 16 + .../Core/reflow_oven_src/reflow_main.h | 13 + .../reflow_oven/Debug/Core/Src/gpio.cyclo | 1 + Software/reflow_oven/Debug/Core/Src/gpio.d | 57 + Software/reflow_oven/Debug/Core/Src/gpio.o | Bin 0 -> 504476 bytes Software/reflow_oven/Debug/Core/Src/gpio.su | 1 + .../reflow_oven/Debug/Core/Src/main.cyclo | 3 + Software/reflow_oven/Debug/Core/Src/main.d | 62 + Software/reflow_oven/Debug/Core/Src/main.o | Bin 0 -> 506348 bytes Software/reflow_oven/Debug/Core/Src/main.su | 3 + .../Debug/Core/Src/stm32f0xx_hal_msp.cyclo | 1 + .../Debug/Core/Src/stm32f0xx_hal_msp.d | 56 + .../Debug/Core/Src/stm32f0xx_hal_msp.o | Bin 0 -> 503396 bytes .../Debug/Core/Src/stm32f0xx_hal_msp.su | 1 + .../Debug/Core/Src/stm32f0xx_it.cyclo | 5 + .../reflow_oven/Debug/Core/Src/stm32f0xx_it.d | 58 + .../reflow_oven/Debug/Core/Src/stm32f0xx_it.o | Bin 0 -> 504004 bytes .../Debug/Core/Src/stm32f0xx_it.su | 5 + Software/reflow_oven/Debug/Core/Src/subdir.mk | 48 + .../reflow_oven/Debug/Core/Src/syscalls.cyclo | 18 + .../reflow_oven/Debug/Core/Src/syscalls.d | 1 + .../reflow_oven/Debug/Core/Src/syscalls.o | Bin 0 -> 82380 bytes .../reflow_oven/Debug/Core/Src/syscalls.su | 18 + .../reflow_oven/Debug/Core/Src/sysmem.cyclo | 1 + Software/reflow_oven/Debug/Core/Src/sysmem.d | 1 + Software/reflow_oven/Debug/Core/Src/sysmem.o | Bin 0 -> 47196 bytes Software/reflow_oven/Debug/Core/Src/sysmem.su | 1 + .../Debug/Core/Src/system_stm32f0xx.cyclo | 2 + .../Debug/Core/Src/system_stm32f0xx.d | 55 + .../Debug/Core/Src/system_stm32f0xx.o | Bin 0 -> 504276 bytes .../Debug/Core/Src/system_stm32f0xx.su | 2 + .../reflow_oven/Debug/Core/Src/usart.cyclo | 3 + Software/reflow_oven/Debug/Core/Src/usart.d | 57 + Software/reflow_oven/Debug/Core/Src/usart.o | Bin 0 -> 509240 bytes Software/reflow_oven/Debug/Core/Src/usart.su | 3 + .../Core/Startup/startup_stm32f031k6tx.d | 2 + .../Core/Startup/startup_stm32f031k6tx.o | Bin 0 -> 4260 bytes .../reflow_oven/Debug/Core/Startup/subdir.mk | 27 + .../Debug/Core/reflow_oven_src/ked/ked.cyclo | 0 .../Debug/Core/reflow_oven_src/ked/ked.d | 1 + .../Debug/Core/reflow_oven_src/ked/ked.o | Bin 0 -> 19460 bytes .../Debug/Core/reflow_oven_src/ked/ked.su | 0 .../stm/peripherals/subdir.mk | 27 + .../stm/peripherals/uart.cyclo | 1 + .../ked_third_parties/stm/peripherals/uart.d | 12 + .../ked_third_parties/stm/peripherals/uart.o | Bin 0 -> 29856 bytes .../ked_third_parties/stm/peripherals/uart.su | 1 + .../Debug/Core/reflow_oven_src/ked/subdir.mk | 27 + .../Core/reflow_oven_src/reflow_main.cyclo | 1 + .../Debug/Core/reflow_oven_src/reflow_main.d | 70 + .../Debug/Core/reflow_oven_src/reflow_main.o | Bin 0 -> 507440 bytes .../Debug/Core/reflow_oven_src/reflow_main.su | 1 + .../Debug/Core/reflow_oven_src/subdir.mk | 27 + .../Src/stm32f0xx_hal.cyclo | 23 + .../STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.d | 56 + .../STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o | Bin 0 -> 514204 bytes .../STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.su | 23 + .../Src/stm32f0xx_hal_cortex.cyclo | 21 + .../Src/stm32f0xx_hal_cortex.d | 56 + .../Src/stm32f0xx_hal_cortex.o | Bin 0 -> 513324 bytes .../Src/stm32f0xx_hal_cortex.su | 21 + .../Src/stm32f0xx_hal_dma.cyclo | 14 + .../Src/stm32f0xx_hal_dma.d | 56 + .../Src/stm32f0xx_hal_dma.o | Bin 0 -> 513272 bytes .../Src/stm32f0xx_hal_dma.su | 14 + .../Src/stm32f0xx_hal_exti.cyclo | 9 + .../Src/stm32f0xx_hal_exti.d | 56 + .../Src/stm32f0xx_hal_exti.o | Bin 0 -> 508456 bytes .../Src/stm32f0xx_hal_exti.su | 9 + .../Src/stm32f0xx_hal_flash.cyclo | 14 + .../Src/stm32f0xx_hal_flash.d | 56 + .../Src/stm32f0xx_hal_flash.o | Bin 0 -> 511452 bytes .../Src/stm32f0xx_hal_flash.su | 14 + .../Src/stm32f0xx_hal_flash_ex.cyclo | 16 + .../Src/stm32f0xx_hal_flash_ex.d | 56 + .../Src/stm32f0xx_hal_flash_ex.o | Bin 0 -> 513852 bytes .../Src/stm32f0xx_hal_flash_ex.su | 16 + .../Src/stm32f0xx_hal_gpio.cyclo | 8 + .../Src/stm32f0xx_hal_gpio.d | 56 + .../Src/stm32f0xx_hal_gpio.o | Bin 0 -> 509204 bytes .../Src/stm32f0xx_hal_gpio.su | 8 + .../Src/stm32f0xx_hal_i2c.cyclo | 81 + .../Src/stm32f0xx_hal_i2c.d | 56 + .../Src/stm32f0xx_hal_i2c.o | Bin 0 -> 579860 bytes .../Src/stm32f0xx_hal_i2c.su | 81 + .../Src/stm32f0xx_hal_i2c_ex.cyclo | 6 + .../Src/stm32f0xx_hal_i2c_ex.d | 56 + .../Src/stm32f0xx_hal_i2c_ex.o | Bin 0 -> 509744 bytes .../Src/stm32f0xx_hal_i2c_ex.su | 6 + .../Src/stm32f0xx_hal_pwr.cyclo | 12 + .../Src/stm32f0xx_hal_pwr.d | 56 + .../Src/stm32f0xx_hal_pwr.o | Bin 0 -> 507608 bytes .../Src/stm32f0xx_hal_pwr.su | 12 + .../Src/stm32f0xx_hal_pwr_ex.cyclo | 5 + .../Src/stm32f0xx_hal_pwr_ex.d | 56 + .../Src/stm32f0xx_hal_pwr_ex.o | Bin 0 -> 504688 bytes .../Src/stm32f0xx_hal_pwr_ex.su | 5 + .../Src/stm32f0xx_hal_rcc.cyclo | 13 + .../Src/stm32f0xx_hal_rcc.d | 56 + .../Src/stm32f0xx_hal_rcc.o | Bin 0 -> 515924 bytes .../Src/stm32f0xx_hal_rcc.su | 13 + .../Src/stm32f0xx_hal_rcc_ex.cyclo | 3 + .../Src/stm32f0xx_hal_rcc_ex.d | 56 + .../Src/stm32f0xx_hal_rcc_ex.o | Bin 0 -> 506132 bytes .../Src/stm32f0xx_hal_rcc_ex.su | 3 + .../Src/stm32f0xx_hal_tim.cyclo | 0 .../Src/stm32f0xx_hal_tim.d | 56 + .../Src/stm32f0xx_hal_tim.o | Bin 0 -> 501516 bytes .../Src/stm32f0xx_hal_tim.su | 0 .../Src/stm32f0xx_hal_tim_ex.cyclo | 0 .../Src/stm32f0xx_hal_tim_ex.d | 56 + .../Src/stm32f0xx_hal_tim_ex.o | Bin 0 -> 501524 bytes .../Src/stm32f0xx_hal_tim_ex.su | 0 .../Src/stm32f0xx_hal_uart.cyclo | 66 + .../Src/stm32f0xx_hal_uart.d | 56 + .../Src/stm32f0xx_hal_uart.o | Bin 0 -> 568384 bytes .../Src/stm32f0xx_hal_uart.su | 66 + .../Src/stm32f0xx_hal_uart_ex.cyclo | 11 + .../Src/stm32f0xx_hal_uart_ex.d | 56 + .../Src/stm32f0xx_hal_uart_ex.o | Bin 0 -> 515240 bytes .../Src/stm32f0xx_hal_uart_ex.su | 11 + .../STM32F0xx_HAL_Driver/Src/subdir.mk | 75 + Software/reflow_oven/Debug/makefile | 97 + Software/reflow_oven/Debug/objects.list | 29 + Software/reflow_oven/Debug/objects.mk | 9 + Software/reflow_oven/Debug/reflow_oven.elf | Bin 0 -> 655128 bytes Software/reflow_oven/Debug/reflow_oven.list | 5306 ++++++++++++ Software/reflow_oven/Debug/reflow_oven.map | 3772 ++++++++ Software/reflow_oven/Debug/sources.mk | 31 + .../Device/ST/STM32F0xx/Include/stm32f031x6.h | 5692 ++++++++++++ .../Device/ST/STM32F0xx/Include/stm32f0xx.h | 269 + .../ST/STM32F0xx/Include/system_stm32f0xx.h | 103 + .../CMSIS/Device/ST/STM32F0xx/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 + .../reflow_oven/Drivers/CMSIS/LICENSE.txt | 201 + .../Inc/Legacy/stm32_hal_legacy.h | 4329 ++++++++++ .../STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h | 584 ++ .../Inc/stm32f0xx_hal_cortex.h | 131 + .../Inc/stm32f0xx_hal_def.h | 179 + .../Inc/stm32f0xx_hal_dma.h | 561 ++ .../Inc/stm32f0xx_hal_dma_ex.h | 809 ++ .../Inc/stm32f0xx_hal_exti.h | 373 + .../Inc/stm32f0xx_hal_flash.h | 350 + .../Inc/stm32f0xx_hal_flash_ex.h | 445 + .../Inc/stm32f0xx_hal_gpio.h | 320 + .../Inc/stm32f0xx_hal_gpio_ex.h | 797 ++ .../Inc/stm32f0xx_hal_i2c.h | 840 ++ .../Inc/stm32f0xx_hal_i2c_ex.h | 190 + .../Inc/stm32f0xx_hal_pwr.h | 185 + .../Inc/stm32f0xx_hal_pwr_ex.h | 455 + .../Inc/stm32f0xx_hal_rcc.h | 1683 ++++ .../Inc/stm32f0xx_hal_rcc_ex.h | 2082 +++++ .../Inc/stm32f0xx_hal_tim.h | 2157 +++++ .../Inc/stm32f0xx_hal_tim_ex.h | 267 + .../Inc/stm32f0xx_hal_uart.h | 1672 ++++ .../Inc/stm32f0xx_hal_uart_ex.h | 593 ++ .../Inc/stm32f0xx_ll_bus.h | 842 ++ .../Inc/stm32f0xx_ll_cortex.h | 318 + .../Inc/stm32f0xx_ll_crs.h | 780 ++ .../Inc/stm32f0xx_ll_dma.h | 2234 +++++ .../Inc/stm32f0xx_ll_exti.h | 1014 +++ .../Inc/stm32f0xx_ll_gpio.h | 938 ++ .../Inc/stm32f0xx_ll_pwr.h | 549 ++ .../Inc/stm32f0xx_ll_rcc.h | 2258 +++++ .../Inc/stm32f0xx_ll_system.h | 1851 ++++ .../Inc/stm32f0xx_ll_usart.h | 3849 +++++++++ .../Inc/stm32f0xx_ll_utils.h | 272 + .../Drivers/STM32F0xx_HAL_Driver/LICENSE.txt | 6 + .../STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c | 515 ++ .../Src/stm32f0xx_hal_cortex.c | 339 + .../Src/stm32f0xx_hal_dma.c | 899 ++ .../Src/stm32f0xx_hal_exti.c | 547 ++ .../Src/stm32f0xx_hal_flash.c | 691 ++ .../Src/stm32f0xx_hal_flash_ex.c | 981 +++ .../Src/stm32f0xx_hal_gpio.c | 539 ++ .../Src/stm32f0xx_hal_i2c.c | 7278 ++++++++++++++++ .../Src/stm32f0xx_hal_i2c_ex.c | 362 + .../Src/stm32f0xx_hal_pwr.c | 450 + .../Src/stm32f0xx_hal_pwr_ex.c | 271 + .../Src/stm32f0xx_hal_rcc.c | 1362 +++ .../Src/stm32f0xx_hal_rcc_ex.c | 961 +++ .../Src/stm32f0xx_hal_tim.c | 7627 +++++++++++++++++ .../Src/stm32f0xx_hal_tim_ex.c | 2392 ++++++ .../Src/stm32f0xx_hal_uart.c | 4183 +++++++++ .../Src/stm32f0xx_hal_uart_ex.c | 841 ++ Software/reflow_oven/STM32F031K6TX_FLASH.ld | 185 + Software/reflow_oven/reflow_oven.ioc | 100 + 330 files changed, 118212 insertions(+) create mode 100644 Software/.metadata/.ide.log create mode 100644 Software/.metadata/.lock create mode 100644 Software/.metadata/.log create mode 100644 Software/.metadata/.log4j2.xml create mode 100644 Software/.metadata/.plugins/com.st.stm32cube.ide.mcu.informationcenter/2.2.0.202306231147 create mode 100644 Software/.metadata/.plugins/org.eclipse.cdt.core/.log create mode 100644 Software/.metadata/.plugins/org.eclipse.cdt.core/reflow_oven.1699107928342.pdom create mode 100644 Software/.metadata/.plugins/org.eclipse.cdt.core/reflow_oven.language.settings.xml create mode 100644 Software/.metadata/.plugins/org.eclipse.cdt.make.core/specs.c create mode 100644 Software/.metadata/.plugins/org.eclipse.cdt.make.core/specs.cpp create mode 100644 Software/.metadata/.plugins/org.eclipse.cdt.managedbuilder.core/spec.c create mode 100644 Software/.metadata/.plugins/org.eclipse.cdt.managedbuilder.core/spec.cpp create mode 100644 Software/.metadata/.plugins/org.eclipse.cdt.ui/global-build.log create mode 100644 Software/.metadata/.plugins/org.eclipse.cdt.ui/reflow_oven.build.log create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.history/13/80ac86ef1e7b001e1ce1cc78c47163e2 create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.history/14/1008be4d257b001e1ce1cc78c47163e2 create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.history/1b/106d8d6b1e7b001e1ce1cc78c47163e2 create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.history/1d/c009551e257b001e1ce1cc78c47163e2 create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.history/30/d064e4831f7b001e1ce1cc78c47163e2 create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.history/38/109c44ea277b001e1ce1cc78c47163e2 create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.history/38/60e8c1d5277b001e1ce1cc78c47163e2 create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.history/3a/00acb3a0257b001e1ce1cc78c47163e2 create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.history/45/30628988277b001e1ce1cc78c47163e2 create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.history/5/6047c06e277b001e1ce1cc78c47163e2 create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.history/55/7019ff461f7b001e1ce1cc78c47163e2 create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.history/5c/501a5a4d1e7b001e1ce1cc78c47163e2 create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.history/5f/9023afc4267b001e1ce1cc78c47163e2 create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.history/6/b0ceb956287b001e1ce1cc78c47163e2 create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.history/76/8012e6831f7b001e1ce1cc78c47163e2 create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.history/8e/70685a4d1e7b001e1ce1cc78c47163e2 create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.history/94/d073495c287b001e1ce1cc78c47163e2 create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.history/9a/20f787a3247b001e1ce1cc78c47163e2 create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.history/9b/d0a489a3247b001e1ce1cc78c47163e2 create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.history/9e/602861c71f7b001e1ce1cc78c47163e2 create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.history/a4/901080bb267b001e1ce1cc78c47163e2 create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.history/ab/20ca8688277b001e1ce1cc78c47163e2 create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.history/ad/b06f002d1f7b001e1ce1cc78c47163e2 create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.history/b7/202c3932287b001e1ce1cc78c47163e2 create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.history/be/90cd559e1f7b001e1ce1cc78c47163e2 create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.history/c9/10d87ebb267b001e1ce1cc78c47163e2 create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.history/ca/d0f9438e257b001e1ce1cc78c47163e2 create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.history/ce/50bf2c57297b001e1ce1cc78c47163e2 create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.history/d3/20b19c56257b001e1ce1cc78c47163e2 create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.history/d6/4091b9e1277b001e1ce1cc78c47163e2 create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.history/d7/1072e7831f7b001e1ce1cc78c47163e2 create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.history/df/c0b23a32287b001e1ce1cc78c47163e2 create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.history/e0/90cc3732287b001e1ce1cc78c47163e2 create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.history/ec/d0ab1148287b001e1ce1cc78c47163e2 create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.history/f1/60fe54681e7b001e1ce1cc78c47163e2 create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/af/history.index create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/bf/4a/77/history.index create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/bf/4a/9/2c/77/history.index create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/bf/4a/history.index create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/bf/6d/4a/77/history.index create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/bf/6d/4a/77/properties.index create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/bf/6d/4a/9/2c/77/history.index create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/bf/6d/4a/9/2c/77/properties.index create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/bf/6d/4a/history.index create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/bf/6d/4a/properties.index create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/bf/6d/history.index create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/bf/6d/properties.index create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/bf/be/history.index create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/bf/be/properties.index create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/bf/c4/history.index create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/bf/c4/properties.index create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/bf/history.index create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/d5/13/76/61/15/78/properties.index create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/d5/2/be/properties.index create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/d5/2/c4/properties.index create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/properties.index create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.location create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.markers.snap create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.syncinfo.snap create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/1.tree create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.root/.markers.snap create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources create mode 100644 Software/.metadata/.plugins/org.eclipse.core.resources/0.snap create mode 100644 Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/com.st.stm32cube.ide.mcu.ide.oss.prefs create mode 100644 Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.core.prj-reflow_oven.prefs create mode 100644 Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.debug.core.prefs create mode 100644 Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.managedbuilder.core.prefs create mode 100644 Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.ui.prefs create mode 100644 Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs create mode 100644 Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.core.prefs create mode 100644 Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.ui.prefs create mode 100644 Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.browser.prefs create mode 100644 Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.navigator.prefs create mode 100644 Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.prefs create mode 100644 Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.workbench.prefs create mode 100644 Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.urischeme.prefs create mode 100644 Software/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi create mode 100644 Software/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml create mode 100644 Software/.metadata/.plugins/org.eclipse.ui.workbench/workingsets.xml create mode 100644 Software/.metadata/version.ini create mode 100644 Software/ked_submodule/ked.c create mode 100644 Software/ked_submodule/ked.h create mode 100644 Software/ked_submodule/ked_third_parties/stm/peripherals/uart.c create mode 100644 Software/ked_submodule/peripherals/uart.h create mode 100644 Software/reflow_oven/.cproject create mode 100644 Software/reflow_oven/.mxproject create mode 100644 Software/reflow_oven/.project create mode 100644 Software/reflow_oven/.settings/language.settings.xml create mode 100644 Software/reflow_oven/.settings/stm32cubeide.project.prefs create mode 100644 Software/reflow_oven/Core/Inc/gpio.h create mode 100644 Software/reflow_oven/Core/Inc/main.h create mode 100644 Software/reflow_oven/Core/Inc/stm32f0xx_hal_conf.h create mode 100644 Software/reflow_oven/Core/Inc/stm32f0xx_it.h create mode 100644 Software/reflow_oven/Core/Inc/usart.h create mode 100644 Software/reflow_oven/Core/Src/gpio.c create mode 100644 Software/reflow_oven/Core/Src/main.c create mode 100644 Software/reflow_oven/Core/Src/stm32f0xx_hal_msp.c create mode 100644 Software/reflow_oven/Core/Src/stm32f0xx_it.c create mode 100644 Software/reflow_oven/Core/Src/syscalls.c create mode 100644 Software/reflow_oven/Core/Src/sysmem.c create mode 100644 Software/reflow_oven/Core/Src/system_stm32f0xx.c create mode 100644 Software/reflow_oven/Core/Src/usart.c create mode 100644 Software/reflow_oven/Core/Startup/startup_stm32f031k6tx.s create mode 100644 Software/reflow_oven/Core/reflow_oven_src/ked/ked.c create mode 100644 Software/reflow_oven/Core/reflow_oven_src/ked/ked.h create mode 100644 Software/reflow_oven/Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.c create mode 100644 Software/reflow_oven/Core/reflow_oven_src/ked/peripherals/uart.h create mode 100644 Software/reflow_oven/Core/reflow_oven_src/ked_config.h create mode 100644 Software/reflow_oven/Core/reflow_oven_src/reflow_main.c create mode 100644 Software/reflow_oven/Core/reflow_oven_src/reflow_main.h create mode 100644 Software/reflow_oven/Debug/Core/Src/gpio.cyclo create mode 100644 Software/reflow_oven/Debug/Core/Src/gpio.d create mode 100644 Software/reflow_oven/Debug/Core/Src/gpio.o create mode 100644 Software/reflow_oven/Debug/Core/Src/gpio.su create mode 100644 Software/reflow_oven/Debug/Core/Src/main.cyclo create mode 100644 Software/reflow_oven/Debug/Core/Src/main.d create mode 100644 Software/reflow_oven/Debug/Core/Src/main.o create mode 100644 Software/reflow_oven/Debug/Core/Src/main.su create mode 100644 Software/reflow_oven/Debug/Core/Src/stm32f0xx_hal_msp.cyclo create mode 100644 Software/reflow_oven/Debug/Core/Src/stm32f0xx_hal_msp.d create mode 100644 Software/reflow_oven/Debug/Core/Src/stm32f0xx_hal_msp.o create mode 100644 Software/reflow_oven/Debug/Core/Src/stm32f0xx_hal_msp.su create mode 100644 Software/reflow_oven/Debug/Core/Src/stm32f0xx_it.cyclo create mode 100644 Software/reflow_oven/Debug/Core/Src/stm32f0xx_it.d create mode 100644 Software/reflow_oven/Debug/Core/Src/stm32f0xx_it.o create mode 100644 Software/reflow_oven/Debug/Core/Src/stm32f0xx_it.su create mode 100644 Software/reflow_oven/Debug/Core/Src/subdir.mk create mode 100644 Software/reflow_oven/Debug/Core/Src/syscalls.cyclo create mode 100644 Software/reflow_oven/Debug/Core/Src/syscalls.d create mode 100644 Software/reflow_oven/Debug/Core/Src/syscalls.o create mode 100644 Software/reflow_oven/Debug/Core/Src/syscalls.su create mode 100644 Software/reflow_oven/Debug/Core/Src/sysmem.cyclo create mode 100644 Software/reflow_oven/Debug/Core/Src/sysmem.d create mode 100644 Software/reflow_oven/Debug/Core/Src/sysmem.o create mode 100644 Software/reflow_oven/Debug/Core/Src/sysmem.su create mode 100644 Software/reflow_oven/Debug/Core/Src/system_stm32f0xx.cyclo create mode 100644 Software/reflow_oven/Debug/Core/Src/system_stm32f0xx.d create mode 100644 Software/reflow_oven/Debug/Core/Src/system_stm32f0xx.o create mode 100644 Software/reflow_oven/Debug/Core/Src/system_stm32f0xx.su create mode 100644 Software/reflow_oven/Debug/Core/Src/usart.cyclo create mode 100644 Software/reflow_oven/Debug/Core/Src/usart.d create mode 100644 Software/reflow_oven/Debug/Core/Src/usart.o create mode 100644 Software/reflow_oven/Debug/Core/Src/usart.su create mode 100644 Software/reflow_oven/Debug/Core/Startup/startup_stm32f031k6tx.d create mode 100644 Software/reflow_oven/Debug/Core/Startup/startup_stm32f031k6tx.o create mode 100644 Software/reflow_oven/Debug/Core/Startup/subdir.mk create mode 100644 Software/reflow_oven/Debug/Core/reflow_oven_src/ked/ked.cyclo create mode 100644 Software/reflow_oven/Debug/Core/reflow_oven_src/ked/ked.d create mode 100644 Software/reflow_oven/Debug/Core/reflow_oven_src/ked/ked.o create mode 100644 Software/reflow_oven/Debug/Core/reflow_oven_src/ked/ked.su create mode 100644 Software/reflow_oven/Debug/Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/subdir.mk create mode 100644 Software/reflow_oven/Debug/Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.cyclo create mode 100644 Software/reflow_oven/Debug/Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.d create mode 100644 Software/reflow_oven/Debug/Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.o create mode 100644 Software/reflow_oven/Debug/Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.su create mode 100644 Software/reflow_oven/Debug/Core/reflow_oven_src/ked/subdir.mk create mode 100644 Software/reflow_oven/Debug/Core/reflow_oven_src/reflow_main.cyclo create mode 100644 Software/reflow_oven/Debug/Core/reflow_oven_src/reflow_main.d create mode 100644 Software/reflow_oven/Debug/Core/reflow_oven_src/reflow_main.o create mode 100644 Software/reflow_oven/Debug/Core/reflow_oven_src/reflow_main.su create mode 100644 Software/reflow_oven/Debug/Core/reflow_oven_src/subdir.mk create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.cyclo create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.d create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.su create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.cyclo create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.d create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.su create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.cyclo create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.d create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.su create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.cyclo create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.d create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.su create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.cyclo create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.d create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.su create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.cyclo create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.d create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.su create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.cyclo create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.d create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.su create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.cyclo create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.d create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.su create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.cyclo create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.d create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.su create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.cyclo create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.d create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.su create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.cyclo create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.d create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.su create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.cyclo create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.d create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.su create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.cyclo create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.d create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.su create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.cyclo create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.d create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.su create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.cyclo create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.d create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.su create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.cyclo create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.d create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.su create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.cyclo create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.d create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.su create mode 100644 Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/subdir.mk create mode 100644 Software/reflow_oven/Debug/makefile create mode 100644 Software/reflow_oven/Debug/objects.list create mode 100644 Software/reflow_oven/Debug/objects.mk create mode 100755 Software/reflow_oven/Debug/reflow_oven.elf create mode 100644 Software/reflow_oven/Debug/reflow_oven.list create mode 100644 Software/reflow_oven/Debug/reflow_oven.map create mode 100644 Software/reflow_oven/Debug/sources.mk create mode 100644 Software/reflow_oven/Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f031x6.h create mode 100644 Software/reflow_oven/Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h create mode 100644 Software/reflow_oven/Drivers/CMSIS/Device/ST/STM32F0xx/Include/system_stm32f0xx.h create mode 100644 Software/reflow_oven/Drivers/CMSIS/Device/ST/STM32F0xx/LICENSE.txt create mode 100644 Software/reflow_oven/Drivers/CMSIS/Include/cmsis_armcc.h create mode 100644 Software/reflow_oven/Drivers/CMSIS/Include/cmsis_armclang.h create mode 100644 Software/reflow_oven/Drivers/CMSIS/Include/cmsis_compiler.h create mode 100644 Software/reflow_oven/Drivers/CMSIS/Include/cmsis_gcc.h create mode 100644 Software/reflow_oven/Drivers/CMSIS/Include/cmsis_iccarm.h create mode 100644 Software/reflow_oven/Drivers/CMSIS/Include/cmsis_version.h create mode 100644 Software/reflow_oven/Drivers/CMSIS/Include/core_armv8mbl.h create mode 100644 Software/reflow_oven/Drivers/CMSIS/Include/core_armv8mml.h create mode 100644 Software/reflow_oven/Drivers/CMSIS/Include/core_cm0.h create mode 100644 Software/reflow_oven/Drivers/CMSIS/Include/core_cm0plus.h create mode 100644 Software/reflow_oven/Drivers/CMSIS/Include/core_cm1.h create mode 100644 Software/reflow_oven/Drivers/CMSIS/Include/core_cm23.h create mode 100644 Software/reflow_oven/Drivers/CMSIS/Include/core_cm3.h create mode 100644 Software/reflow_oven/Drivers/CMSIS/Include/core_cm33.h create mode 100644 Software/reflow_oven/Drivers/CMSIS/Include/core_cm4.h create mode 100644 Software/reflow_oven/Drivers/CMSIS/Include/core_cm7.h create mode 100644 Software/reflow_oven/Drivers/CMSIS/Include/core_sc000.h create mode 100644 Software/reflow_oven/Drivers/CMSIS/Include/core_sc300.h create mode 100644 Software/reflow_oven/Drivers/CMSIS/Include/mpu_armv7.h create mode 100644 Software/reflow_oven/Drivers/CMSIS/Include/mpu_armv8.h create mode 100644 Software/reflow_oven/Drivers/CMSIS/Include/tz_context.h create mode 100644 Software/reflow_oven/Drivers/CMSIS/LICENSE.txt create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_cortex.h create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_def.h create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma_ex.h create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_exti.h create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash.h create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash_ex.h create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio.h create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio_ex.h create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c.h create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c_ex.h create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr.h create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr_ex.h create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc.h create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_tim.h create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_tim_ex.h create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart.h create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_bus.h create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_cortex.h create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_crs.h create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_dma.h create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_exti.h create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_gpio.h create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_pwr.h create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_rcc.h create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_system.h create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_usart.h create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_utils.h create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/LICENSE.txt create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.c create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.c create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.c create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.c create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.c create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.c create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.c create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.c create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.c create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.c create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.c create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.c create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c create mode 100644 Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.c create mode 100644 Software/reflow_oven/STM32F031K6TX_FLASH.ld create mode 100644 Software/reflow_oven/reflow_oven.ioc diff --git a/Software/.metadata/.ide.log b/Software/.metadata/.ide.log new file mode 100644 index 0000000..6a0b89f --- /dev/null +++ b/Software/.metadata/.ide.log @@ -0,0 +1,1112 @@ +2023-11-04 15:20:51,075 [INFO] Activator:176 - + + +2023-11-04 15:20:51,077 [INFO] Activator:177 - !SESSION log4j initialized +2023-11-04 15:20:52,501 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] +2023-11-04 15:20:54,130 [INFO] ApplicationProperties:184 - Using Application install path: /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412 +2023-11-04 15:20:54,147 [INFO] DbMcusXml:78 - Set database path to: /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//mcu/ +2023-11-04 15:20:54,147 [INFO] ApiDb:274 - Set plugin database path to: /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/boardmanager/ +2023-11-04 15:20:54,147 [WARN] ApiDb:259 - Overriding images path with different value: => /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/mcufinder/images/ +2023-11-04 15:20:54,816 [WARN] ApiFinderProperties:113 - /home/key/.stmcufinder/plugins/mcufinder/mcu/mcuFinder.mfd doesn't exist +2023-11-04 15:20:54,817 [INFO] ApiDb:250 - Set database path to: /home/key/.stmcufinder/plugins/mcufinder//mcu/ +2023-11-04 15:20:54,818 [INFO] DbMcusAds:125 - Set database path to: /home/key/.stmcufinder/plugins/mcufinder//mcu/ +2023-11-04 15:20:54,819 [INFO] CrossReferenceDbSqlite:203 - Set database path to: /home/key/.stmcufinder/plugins/mcufinder//mcu/cs/ +2023-11-04 15:20:54,940 [INFO] RulesReader:64 - Compatibility file has been processed (293 Rules) +2023-11-04 15:20:54,984 [INFO] DbMcusXml:78 - Set database path to: /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//mcu/ +2023-11-04 15:20:54,984 [INFO] ApiDb:274 - Set plugin database path to: /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/boardmanager/ +2023-11-04 15:20:54,984 [INFO] ApiDb:261 - Set plugin images path to: /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/mcufinder/images/ +2023-11-04 15:20:54,984 [WARN] DbFile:41 - Overriding database path with different value: /home/key/.stmcufinder/plugins/mcufinder/ => /home/key/.stmcufinder/plugins/mcufinder +2023-11-04 15:20:54,985 [INFO] ApiDb:250 - Set database path to: /home/key/.stmcufinder/plugins/mcufinder//mcu/ +2023-11-04 15:20:54,985 [WARN] DbFile:41 - Overriding database path with different value: /home/key/.stmcufinder/plugins/mcufinder/ => /home/key/.stmcufinder/plugins/mcufinder +2023-11-04 15:20:54,985 [INFO] DbMcusAds:125 - Set database path to: /home/key/.stmcufinder/plugins/mcufinder//mcu/ +2023-11-04 15:20:54,985 [WARN] DbFile:41 - Overriding database path with different value: /home/key/.stmcufinder/plugins/mcufinder/ => /home/key/.stmcufinder/plugins/mcufinder +2023-11-04 15:20:54,985 [WARN] DbFile:41 - Overriding database path with different value: /home/key/.stmcufinder/plugins/mcufinder/ => /home/key/.stmcufinder/plugins/mcufinder +2023-11-04 15:20:54,985 [INFO] CrossReferenceDbSqlite:203 - Set database path to: /home/key/.stmcufinder/plugins/mcufinder//mcu/cs/ +2023-11-04 15:20:55,039 [INFO] MainPanel:262 - HeapMemory: 268435456 +2023-11-04 15:20:55,102 [INFO] DbMcusXml:78 - Set database path to: /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//mcu/ +2023-11-04 15:20:55,103 [INFO] ApiDb:274 - Set plugin database path to: /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/boardmanager/ +2023-11-04 15:20:55,103 [INFO] ApiDb:261 - Set plugin images path to: /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db//plugins/mcufinder/images/ +2023-11-04 15:20:55,103 [WARN] DbFile:41 - Overriding database path with different value: /home/key/.stmcufinder/plugins/mcufinder/ => /home/key/.stmcufinder/plugins/mcufinder +2023-11-04 15:20:55,103 [INFO] ApiDb:250 - Set database path to: /home/key/.stmcufinder/plugins/mcufinder//mcu/ +2023-11-04 15:20:55,103 [WARN] DbFile:41 - Overriding database path with different value: /home/key/.stmcufinder/plugins/mcufinder/ => /home/key/.stmcufinder/plugins/mcufinder +2023-11-04 15:20:55,103 [INFO] DbMcusAds:125 - Set database path to: /home/key/.stmcufinder/plugins/mcufinder//mcu/ +2023-11-04 15:20:55,103 [WARN] DbFile:41 - Overriding database path with different value: /home/key/.stmcufinder/plugins/mcufinder/ => /home/key/.stmcufinder/plugins/mcufinder +2023-11-04 15:20:55,103 [WARN] DbFile:41 - Overriding database path with different value: /home/key/.stmcufinder/plugins/mcufinder/ => /home/key/.stmcufinder/plugins/mcufinder +2023-11-04 15:20:55,104 [INFO] CrossReferenceDbSqlite:203 - Set database path to: /home/key/.stmcufinder/plugins/mcufinder//mcu/cs/ +2023-11-04 15:20:55,114 [INFO] ApplicationProperties:184 - Using Application install path: /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412 +2023-11-04 15:20:55,115 [INFO] PluginManage:196 - Search for loadable plugins [exclusion list=, ] +2023-11-04 15:20:55,116 [INFO] PluginManage:310 - Check plugin analytics +2023-11-04 15:20:55,247 [INFO] AnalyticsPlugin:253 - Accepted Software Licenses: +2023-11-04 15:20:55,248 [INFO] AnalyticsPlugin:255 - Accepted CMSIS Pack Licenses: +2023-11-04 15:20:55,248 [INFO] AnalyticsPlugin:257 - Accepted Firmware Licenses: +2023-11-04 15:20:55,250 [INFO] PluginManage:359 - Loaded plugin analytics (category:tool,tabindex:-1) +2023-11-04 15:20:55,250 [INFO] PluginManage:310 - Check plugin cadmodel +2023-11-04 15:20:55,385 [INFO] CADModel:105 - Init CAD model plugin +2023-11-04 15:20:55,385 [INFO] PluginManage:359 - Loaded plugin cadmodel (category:power,tabindex:5) +2023-11-04 15:20:55,385 [INFO] PluginManage:310 - Check plugin clock +2023-11-04 15:20:55,391 [INFO] PluginManage:359 - Loaded plugin clock (category:base,tabindex:2) +2023-11-04 15:20:55,391 [INFO] PluginManage:310 - Check plugin ddr +2023-11-04 15:20:55,392 [INFO] PluginManage:359 - Loaded plugin ddr (category:tool,tabindex:6) +2023-11-04 15:20:55,392 [INFO] PluginManage:310 - Check plugin filemanager +2023-11-04 15:20:55,475 [INFO] PluginManage:359 - Loaded plugin filemanager (category:base,tabindex:10) +2023-11-04 15:20:55,476 [INFO] PluginManage:310 - Check plugin ipmanager +2023-11-04 15:20:55,479 [INFO] PluginManage:359 - Loaded plugin ipmanager (category:base,tabindex:5) +2023-11-04 15:20:55,479 [INFO] PluginManage:310 - Check plugin lpbam +2023-11-04 15:20:55,485 [INFO] PluginManage:359 - Loaded plugin lpbam (category:base,tabindex:0) +2023-11-04 15:20:55,485 [INFO] PluginManage:310 - Check plugin memorymap +2023-11-04 15:20:55,492 [INFO] PluginManage:359 - Loaded plugin memorymap (category:base,tabindex:4) +2023-11-04 15:20:55,492 [INFO] PluginManage:310 - Check plugin pinoutandconfiguration +2023-11-04 15:20:55,497 [INFO] PluginManage:359 - Loaded plugin pinoutandconfiguration (category:base,tabindex:1) +2023-11-04 15:20:55,497 [INFO] PluginManage:310 - Check plugin pinoutconfig +2023-11-04 15:20:55,560 [WARN] SupportedApi:132 - Cannot load RTOS API schema: s4s-elt-must-match.1: The content of 'definitions' must match (annotation?, (simpleType | complexType)?, (unique | key | keyref)*)). A problem was found starting at: attribute. +2023-11-04 15:20:55,665 [INFO] PluginManage:359 - Loaded plugin pinoutconfig (category:base,tabindex:0) +2023-11-04 15:20:55,665 [INFO] PluginManage:310 - Check plugin power +2023-11-04 15:20:55,670 [INFO] PluginManage:359 - Loaded plugin power (category:power,tabindex:4) +2023-11-04 15:20:55,670 [INFO] PluginManage:310 - Check plugin projectmanager +2023-11-04 15:20:55,689 [INFO] PluginManage:359 - Loaded plugin projectmanager (category:projectmanager,tabindex:3) +2023-11-04 15:20:55,689 [INFO] PluginManage:310 - Check plugin thirdparty +2023-11-04 15:20:55,788 [INFO] PluginManage:359 - Loaded plugin thirdparty (category:base,tabindex:-1) +2023-11-04 15:20:55,788 [INFO] PluginManage:310 - Check plugin tools +2023-11-04 15:20:55,788 [WARN] IntegrityCheckThread:84 - waiting for thirdparty lock release [integrity check] +2023-11-04 15:20:55,788 [INFO] IntegrityCheckThread:86 - entering critical section [integrity check] +2023-11-04 15:20:55,789 [INFO] ThirdPartyUpdaterWithRetryManager:70 - Updater plugin not ready yet. [1/15] +2023-11-04 15:20:55,790 [INFO] PluginManage:359 - Loaded plugin tools (category:base,tabindex:7) +2023-11-04 15:20:55,790 [INFO] PluginManage:310 - Check plugin tutovideos +2023-11-04 15:20:55,932 [INFO] PluginManage:359 - Loaded plugin tutovideos (category:base,tabindex:-1) +2023-11-04 15:20:55,932 [INFO] PluginManage:310 - Check plugin updater +2023-11-04 15:20:55,939 [INFO] PluginManage:359 - Loaded plugin updater (category:base,tabindex:12) +2023-11-04 15:20:55,940 [INFO] PluginManage:310 - Check plugin userauth +2023-11-04 15:20:55,943 [INFO] UserAuth:113 - Init User Auth plugin +2023-11-04 15:20:55,943 [INFO] PluginManage:359 - Loaded plugin userauth (category:base,tabindex:14) +2023-11-04 15:20:55,943 [INFO] PluginManage:283 - PluginManage : Loaded plugins [17] +2023-11-04 15:20:56,062 [INFO] PinOutPanel:1499 - setPackage(No Configuration,No Configuration) +2023-11-04 15:20:56,126 [INFO] CADModel:165 - CPN selected for project level +2023-11-04 15:20:56,126 [INFO] CADModel:114 - Register for checkConnection events +2023-11-04 15:20:56,135 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:20:56,135 [INFO] PluginManager:220 - loadIPPluginJar : add opamp +2023-11-04 15:20:56,136 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:20:56,136 [INFO] PluginManager:220 - loadIPPluginJar : add ltdc +2023-11-04 15:20:56,137 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:20:56,137 [INFO] PluginManager:220 - loadIPPluginJar : add lorawan +2023-11-04 15:20:56,140 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:20:56,140 [INFO] PluginManager:220 - loadIPPluginJar : add gic +2023-11-04 15:20:56,143 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:20:56,143 [INFO] PluginManager:220 - loadIPPluginJar : add stm32_wpan +2023-11-04 15:20:56,146 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:20:56,146 [INFO] PluginManager:220 - loadIPPluginJar : add freertos +2023-11-04 15:20:56,149 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:20:56,149 [INFO] PluginManager:220 - loadIPPluginJar : add fmc +2023-11-04 15:20:56,150 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:20:56,150 [INFO] PluginManager:220 - loadIPPluginJar : add gfxmmu +2023-11-04 15:20:56,151 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:20:56,151 [INFO] PluginManager:220 - loadIPPluginJar : add cryp +2023-11-04 15:20:56,155 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:20:56,157 [INFO] PluginManager:220 - loadIPPluginJar : add plateformsettings +2023-11-04 15:20:56,158 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:20:56,158 [INFO] PluginManager:220 - loadIPPluginJar : add pdm2pcm +2023-11-04 15:20:56,160 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:20:56,160 [INFO] PluginManager:220 - loadIPPluginJar : add dma3 +2023-11-04 15:20:56,161 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:20:56,161 [INFO] PluginManager:220 - loadIPPluginJar : add gtzc +2023-11-04 15:20:56,162 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:20:56,162 [INFO] PluginManager:220 - loadIPPluginJar : add comp +2023-11-04 15:20:56,163 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:20:56,163 [INFO] PluginManager:220 - loadIPPluginJar : add quadspi +2023-11-04 15:20:56,167 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:20:56,167 [INFO] PluginManager:220 - loadIPPluginJar : add linkedlist +2023-11-04 15:20:56,169 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:20:56,169 [INFO] PluginManager:220 - loadIPPluginJar : add usart +2023-11-04 15:20:56,172 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:20:56,173 [INFO] PluginManager:220 - loadIPPluginJar : add dma +2023-11-04 15:20:56,175 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:20:56,175 [INFO] PluginManager:220 - loadIPPluginJar : add nvic +2023-11-04 15:20:56,177 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:20:56,177 [INFO] PluginManager:220 - loadIPPluginJar : add touchsensing +2023-11-04 15:20:56,178 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:20:56,178 [INFO] PluginManager:220 - loadIPPluginJar : add ts +2023-11-04 15:20:56,179 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:20:56,179 [INFO] PluginManager:220 - loadIPPluginJar : add i3c +2023-11-04 15:20:56,180 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:20:56,180 [INFO] PluginManager:220 - loadIPPluginJar : add hash +2023-11-04 15:20:56,182 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:20:56,182 [INFO] PluginManager:220 - loadIPPluginJar : add sai +2023-11-04 15:20:56,183 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:20:56,183 [INFO] PluginManager:220 - loadIPPluginJar : add openamp +2023-11-04 15:20:56,187 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:20:56,187 [INFO] PluginManager:220 - loadIPPluginJar : add mdma +2023-11-04 15:20:56,189 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:20:56,189 [INFO] PluginManager:220 - loadIPPluginJar : add i2s +2023-11-04 15:20:56,190 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:20:56,190 [INFO] PluginManager:220 - loadIPPluginJar : add usbx +2023-11-04 15:20:56,191 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:20:56,192 [INFO] PluginManager:220 - loadIPPluginJar : add can +2023-11-04 15:20:56,193 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:20:56,193 [INFO] PluginManager:220 - loadIPPluginJar : add ipddr +2023-11-04 15:20:56,195 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:20:56,195 [INFO] PluginManager:220 - loadIPPluginJar : add gpio +2023-11-04 15:20:56,197 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:20:56,197 [INFO] PluginManager:220 - loadIPPluginJar : add resmgrutility +2023-11-04 15:20:56,198 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:20:56,198 [INFO] PluginManager:220 - loadIPPluginJar : add tsc +2023-11-04 15:20:56,199 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:20:56,199 [INFO] PluginManager:220 - loadIPPluginJar : add i2c +2023-11-04 15:20:56,200 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:20:56,200 [INFO] PluginManager:220 - loadIPPluginJar : add aes +2023-11-04 15:20:56,203 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:20:56,204 [INFO] PluginManager:220 - loadIPPluginJar : add adc +2023-11-04 15:20:56,204 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:20:56,205 [INFO] PluginManager:220 - loadIPPluginJar : add tracer_emb +2023-11-04 15:20:56,205 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:20:56,205 [INFO] PluginManager:220 - loadIPPluginJar : add tim +2023-11-04 15:20:56,207 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:20:56,207 [INFO] PluginManager:220 - loadIPPluginJar : add dfsdm +2023-11-04 15:20:56,207 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:20:56,208 [INFO] PluginManager:220 - loadIPPluginJar : add fatfs +2023-11-04 15:20:56,208 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:20:56,209 [INFO] PluginManager:220 - loadIPPluginJar : add ucpd +2023-11-04 15:20:56,209 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:20:56,209 [INFO] PluginManager:220 - loadIPPluginJar : add genericplugin +2023-11-04 15:20:56,211 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:20:56,211 [INFO] PluginManager:220 - loadIPPluginJar : add spi +2023-11-04 15:20:56,306 [INFO] CADModel:165 - CPN selected for project level +2023-11-04 15:20:56,307 [INFO] CADModel:114 - Register for checkConnection events +2023-11-04 15:20:56,307 [FATAL] Updater:308 - Updater called before beeing initialized +2023-11-04 15:20:56,307 [ERROR] CADModel:125 - Updater not yet initialized, retry later +2023-11-04 15:20:56,422 [INFO] CADModel:165 - CPN selected for project level +2023-11-04 15:20:56,422 [INFO] CADModel:114 - Register for checkConnection events +2023-11-04 15:20:56,422 [FATAL] Updater:308 - Updater called before beeing initialized +2023-11-04 15:20:56,422 [ERROR] CADModel:125 - Updater not yet initialized, retry later +2023-11-04 15:20:56,424 [FATAL] Updater:308 - Updater called before beeing initialized +2023-11-04 15:20:56,479 [FATAL] Updater:308 - Updater called before beeing initialized +2023-11-04 15:20:56,483 [INFO] DbMcusAds:53 - JSON generation date=Thu Sep 30 08:55:09 CEST 2021 (1632984909247) +2023-11-04 15:20:56,483 [FATAL] Updater:308 - Updater called before beeing initialized +2023-11-04 15:20:56,510 [WARN] DetailPanel:346 - Failed to get advertising image, set to default +2023-11-04 15:20:56,591 [FATAL] Updater:308 - Updater called before beeing initialized +2023-11-04 15:20:56,592 [FATAL] Updater:308 - Updater called before beeing initialized +2023-11-04 15:20:56,592 [FATAL] Updater:308 - Updater called before beeing initialized +2023-11-04 15:20:56,593 [WARN] DetailPanel:346 - Failed to get advertising image, set to default +2023-11-04 15:20:56,593 [FATAL] Updater:308 - Updater called before beeing initialized +2023-11-04 15:20:56,618 [ERROR] Updater:1120 - MainUpdater not yet initialized. External WinMGr cannot be set. +2023-11-04 15:20:56,619 [INFO] Updater:1056 - Updater Version found : 6.9.2 +2023-11-04 15:20:56,629 [INFO] ApplicationProperties:184 - Using Application install path: /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412 +2023-11-04 15:20:56,646 [INFO] MainUpdater:521 - Copy updater definitions from MX database +2023-11-04 15:20:56,668 [INFO] MainUpdater:554 - Copy flag file definitions from MX database +2023-11-04 15:20:56,668 [INFO] MainUpdater:570 - Copy thirdparty index definitions from MX database +2023-11-04 15:20:56,668 [INFO] MainUpdater:589 - Copy default thirdparty db definitions from MX database +2023-11-04 15:20:56,685 [INFO] MainUpdater:2868 - connection check result : 10 +2023-11-04 15:20:56,685 [INFO] MainUpdater:3562 - Updater definition file requires update +2023-11-04 15:20:56,686 [INFO] MainUpdater:285 - Updater Check For Update Now. +2023-11-04 15:20:56,686 [INFO] MicroXplorer:498 - Change Database Version : DB.6.0.92 +2023-11-04 15:20:56,689 [INFO] McuFinderGlobals:63 - Set McuFinder mode to 2 (CubeIDE integrated) +2023-11-04 15:20:56,689 [INFO] UserAuth:179 - activating auth plugin +2023-11-04 15:20:56,691 [INFO] UserAuth:393 - Internet connection configuration mode: 1 +2023-11-04 15:20:56,698 [INFO] JxBrowserEngine:151 - Initiate JxBrowser Engine with user profile folder +2023-11-04 15:20:56,738 [INFO] ServerAccessManage:473 - Download File updaters.zip +2023-11-04 15:20:56,804 [INFO] FileExtend:240 - Unzip File : updaters.zip +2023-11-04 15:20:56,804 [INFO] FileExtend:255 - Standard Zip Deflate +2023-11-04 15:20:56,909 [INFO] ServerAccessManage:473 - Download File PacksControlFlags.xml +2023-11-04 15:20:56,971 [INFO] ServerAccessManage:473 - Download File cubemx.pidx +2023-11-04 15:20:57,063 [INFO] ServerAccessManage:473 - Download File STMicroelectronics.FP-ATR-ASTRA1.pdsc +2023-11-04 15:20:57,242 [INFO] ServerAccessManage:473 - Download File STMicroelectronics.FP-ATR-SIGFOX1.pdsc +2023-11-04 15:20:57,321 [INFO] ServerAccessManage:473 - Download File STMicroelectronics.FP-SNS-FLIGHT1.pdsc +2023-11-04 15:20:57,465 [INFO] ServerAccessManage:473 - Download File STMicroelectronics.FP-SNS-MOTENV1.pdsc +2023-11-04 15:20:57,674 [INFO] ServerAccessManage:473 - Download File STMicroelectronics.FP-SNS-SMARTAG2.pdsc +2023-11-04 15:20:57,749 [INFO] ServerAccessManage:473 - Download File STMicroelectronics.X-CUBE-AI.pdsc +2023-11-04 15:20:58,324 [INFO] ServerAccessManage:473 - Download File STMicroelectronics.X-CUBE-ALS.pdsc +2023-11-04 15:20:58,430 [INFO] ServerAccessManage:473 - Download File STMicroelectronics.X-CUBE-BLE1.pdsc +2023-11-04 15:20:58,797 [WARN] MainUpdater:1189 - Updater busy. Cannot search thirdparties +2023-11-04 15:20:58,797 [INFO] ThirdPartyUpdaterWithRetryManager:96 - Updater plugin is busy. [1/15] +2023-11-04 15:20:58,971 [ERROR] ServerAccessManage:1089 - Problem, file not found on Server +2023-11-04 15:20:59,008 [INFO] ServerAccessManage:473 - Download File STMicroelectronics.X-CUBE-BLE2.pdsc +2023-11-04 15:20:59,344 [INFO] ServerAccessManage:473 - Download File STMicroelectronics.X-CUBE-BLEMGR.pdsc +2023-11-04 15:20:59,345 [INFO] WebApp:157 - Instantiating new browser for Auth +2023-11-04 15:20:59,635 [INFO] ServerAccessManage:473 - Download File STMicroelectronics.X-CUBE-DISPLAY.pdsc +2023-11-04 15:20:59,867 [INFO] ServerAccessManage:473 - Download File STMicroelectronics.X-CUBE-EEPRMA1.pdsc +2023-11-04 15:20:59,895 [INFO] WebApp:753 - Register for checkConnection events +2023-11-04 15:20:59,896 [INFO] WebApp:390 - Apply proxy settings +2023-11-04 15:20:59,896 [INFO] WebApp:475 - Chromium requires no authentication +2023-11-04 15:20:59,901 [INFO] WebApp:418 - Direct internet connection detected +2023-11-04 15:21:00,007 [INFO] WebApp:188 - Starting web application +2023-11-04 15:21:00,007 [INFO] WebApp:520 - Web application path used /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412/db/plugins/mcufinder/reactClient1/index.html +2023-11-04 15:21:00,110 [ERROR] ServerAccessManage:1089 - Problem, file not found on Server +2023-11-04 15:21:00,233 [INFO] ServerAccessManage:473 - Download File STMicroelectronics.X-CUBE-FREERTOS.pdsc +2023-11-04 15:21:00,369 [INFO] ServerAccessManage:473 - Download File STMicroelectronics.X-CUBE-GNSS1.pdsc +2023-11-04 15:21:00,970 [ERROR] ServerAccessManage:1089 - Problem, file not found on Server +2023-11-04 15:21:01,187 [ERROR] ServerAccessManage:1089 - Problem, file not found on Server +2023-11-04 15:21:01,369 [ERROR] ServerAccessManage:1089 - Problem, file not found on Server +2023-11-04 15:21:01,550 [ERROR] ServerAccessManage:1089 - Problem, file not found on Server +2023-11-04 15:21:01,732 [ERROR] ServerAccessManage:1089 - Problem, file not found on Server +2023-11-04 15:21:01,798 [WARN] MainUpdater:1189 - Updater busy. Cannot search thirdparties +2023-11-04 15:21:01,798 [INFO] ThirdPartyUpdaterWithRetryManager:96 - Updater plugin is busy. [2/15] +2023-11-04 15:21:01,919 [ERROR] ServerAccessManage:1089 - Problem, file not found on Server +2023-11-04 15:21:01,953 [INFO] ServerAccessManage:473 - Download File STMicroelectronics.X-CUBE-ISPU.pdsc +2023-11-04 15:21:02,050 [INFO] ServerAccessManage:473 - Download File STMicroelectronics.X-CUBE-MEMS1.pdsc +2023-11-04 15:21:02,955 [INFO] ServerAccessManage:473 - Download File STMicroelectronics.X-CUBE-NFC4.pdsc +2023-11-04 15:21:03,473 [INFO] ServerAccessManage:473 - Download File STMicroelectronics.X-CUBE-NFC6.pdsc +2023-11-04 15:21:03,549 [INFO] ServerAccessManage:473 - Download File STMicroelectronics.X-CUBE-NFC7.pdsc +2023-11-04 15:21:03,656 [INFO] ServerAccessManage:473 - Download File STMicroelectronics.X-CUBE-SFXS2LP1.pdsc +2023-11-04 15:21:03,793 [INFO] McuFinderGlobals:63 - Set McuFinder mode to 2 (CubeIDE integrated) +2023-11-04 15:21:03,855 [INFO] ServerAccessManage:473 - Download File STMicroelectronics.X-CUBE-SUBG2.pdsc +2023-11-04 15:21:04,151 [INFO] ServerAccessManage:473 - Download File STMicroelectronics.X-CUBE-SMBUS.pdsc +2023-11-04 15:21:04,394 [ERROR] ServerAccessManage:1089 - Problem, file not found on Server +2023-11-04 15:21:04,427 [INFO] ServerAccessManage:473 - Download File STMicroelectronics.X-CUBE-TOF1.pdsc +2023-11-04 15:21:04,799 [WARN] MainUpdater:1189 - Updater busy. Cannot search thirdparties +2023-11-04 15:21:04,799 [INFO] ThirdPartyUpdaterWithRetryManager:96 - Updater plugin is busy. [3/15] +2023-11-04 15:21:04,833 [ERROR] ServerAccessManage:1089 - Problem, file not found on Server +2023-11-04 15:21:04,900 [INFO] ServerAccessManage:473 - Download File STMicroelectronics.X-CUBE-TOUCHGFX.pdsc +2023-11-04 15:21:05,468 [INFO] ServerAccessManage:473 - Download File STMicroelectronics.X-CUBE-ALGOBUILD.pdsc +2023-11-04 15:21:05,645 [INFO] ServerAccessManage:473 - Download File STMicroelectronics.X-CUBE-AZRTOS-H7.pdsc +2023-11-04 15:21:05,908 [INFO] ServerAccessManage:473 - Download File STMicroelectronics.X-CUBE-AZRTOS-F4.pdsc +2023-11-04 15:21:06,046 [INFO] ServerAccessManage:473 - Download File STMicroelectronics.X-CUBE-AZRTOS-F7.pdsc +2023-11-04 15:21:06,191 [INFO] ServerAccessManage:473 - Download File STMicroelectronics.X-CUBE-AZRTOS-L4.pdsc +2023-11-04 15:21:06,327 [INFO] ServerAccessManage:473 - Download File STMicroelectronics.X-CUBE-AZRTOS-L5.pdsc +2023-11-04 15:21:06,497 [INFO] ServerAccessManage:473 - Download File STMicroelectronics.X-CUBE-AZRTOS-G0.pdsc +2023-11-04 15:21:06,624 [INFO] ServerAccessManage:473 - Download File STMicroelectronics.X-CUBE-AZRTOS-G4.pdsc +2023-11-04 15:21:06,757 [INFO] ServerAccessManage:473 - Download File STMicroelectronics.X-CUBE-AZRTOS-WB.pdsc +2023-11-04 15:21:06,885 [INFO] ServerAccessManage:473 - Download File STMicroelectronics.X-CUBE-AZRTOS-WL.pdsc +2023-11-04 15:21:07,630 [INFO] ServerAccessManage:473 - Download File wolfSSL.I-CUBE-wolfSSL.pdsc +2023-11-04 15:21:07,799 [WARN] MainUpdater:1189 - Updater busy. Cannot search thirdparties +2023-11-04 15:21:07,800 [INFO] ThirdPartyUpdaterWithRetryManager:96 - Updater plugin is busy. [4/15] +2023-11-04 15:21:09,825 [ERROR] ServerAccessManage:1089 - Problem, file not found on Server +2023-11-04 15:21:10,123 [ERROR] ServerAccessManage:1089 - Problem, file not found on Server +2023-11-04 15:21:10,420 [ERROR] ServerAccessManage:1089 - Problem, file not found on Server +2023-11-04 15:21:10,800 [WARN] MainUpdater:1189 - Updater busy. Cannot search thirdparties +2023-11-04 15:21:10,800 [INFO] ThirdPartyUpdaterWithRetryManager:96 - Updater plugin is busy. [5/15] +2023-11-04 15:21:11,148 [ERROR] ServerAccessManage:1096 - Problem, Http access forbiden +2023-11-04 15:21:11,150 [ERROR] ServerAccessManage:651 - Problem, Http access forbiden : RoweBots.I-CUBE-UNISONRTOS.pdsc. +2023-11-04 15:21:11,302 [ERROR] ServerAccessManage:1172 - Problem during Server Connection : IO error PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target +2023-11-04 15:21:11,303 [ERROR] ServerAccessManage:651 - Problem during Server Connection : : SEGGER.I-CUBE-embOS.pdsc. +2023-11-04 15:21:11,554 [INFO] ServerAccessManage:473 - Download File portGmbH.I-Cube-SoM-uGOAL.pdsc +2023-11-04 15:21:11,689 [ERROR] ServerAccessManage:1089 - Problem, file not found on Server +2023-11-04 15:21:11,702 [ERROR] ServerAccessManage:1089 - Problem, file not found on Server +2023-11-04 15:21:11,715 [ERROR] ServerAccessManage:1089 - Problem, file not found on Server +2023-11-04 15:21:12,185 [INFO] ServerAccessManage:473 - Download File emotas.I-CUBE-CANOPEN.pdsc +2023-11-04 15:21:13,242 [INFO] ServerAccessManage:473 - Download File WES.I-CUBE-Cesium.pdsc +2023-11-04 15:21:13,801 [WARN] MainUpdater:1189 - Updater busy. Cannot search thirdparties +2023-11-04 15:21:13,801 [INFO] ThirdPartyUpdaterWithRetryManager:96 - Updater plugin is busy. [6/15] +2023-11-04 15:21:15,025 [ERROR] ServerAccessManage:1089 - Problem, file not found on Server +2023-11-04 15:21:15,653 [ERROR] ServerAccessManage:1089 - Problem, file not found on Server +2023-11-04 15:21:16,482 [INFO] ServerAccessManage:473 - Download File ITTIA_DB.I-CUBE-ITTIADB.pdsc +2023-11-04 15:21:16,801 [WARN] MainUpdater:1189 - Updater busy. Cannot search thirdparties +2023-11-04 15:21:16,801 [INFO] ThirdPartyUpdaterWithRetryManager:96 - Updater plugin is busy. [7/15] +2023-11-04 15:21:19,058 [INFO] ServerAccessManage:473 - Download File Infineon.AIROC-Wi-Fi-Bluetooth-STM32.pdsc +2023-11-04 15:21:19,802 [WARN] MainUpdater:1189 - Updater busy. Cannot search thirdparties +2023-11-04 15:21:19,802 [INFO] ThirdPartyUpdaterWithRetryManager:96 - Updater plugin is busy. [8/15] +2023-11-04 15:21:20,049 [WARN] CheckServerUpdateThread:151 - Open CheckUpdateFile Fail +2023-11-04 15:21:20,054 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-ATR-ASTRA1.2.0.0 +2023-11-04 15:21:20,061 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-ATR-SIGFOX1.3.2.0 +2023-11-04 15:21:20,067 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-SNS-FLIGHT1.5.0.2 +2023-11-04 15:21:20,075 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-SNS-MOTENV1.4.3.2 +2023-11-04 15:21:20,084 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-SNS-SMARTAG2.1.2.0 +2023-11-04 15:21:20,088 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AI.8.1.0 +2023-11-04 15:21:20,094 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-ALS.1.0.1 +2023-11-04 15:21:20,101 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-BLE1.7.0.0 +2023-11-04 15:21:20,106 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-BLE2.3.3.0 +2023-11-04 15:21:20,121 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-BLEMGR.3.0.0 +2023-11-04 15:21:20,132 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-DISPLAY.3.0.0 +2023-11-04 15:21:20,141 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-EEPRMA1.4.2.0 +2023-11-04 15:21:20,146 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-FREERTOS.1.1.0 +2023-11-04 15:21:20,150 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-GNSS1.6.0.0 +2023-11-04 15:21:20,153 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-ISPU.1.1.0 +2023-11-04 15:21:20,173 [INFO] CheckServerUpdateThread:120 - End of CheckServer Thread +2023-11-04 15:21:20,202 [INFO] MainUpdater:2868 - connection check result : 10 +2023-11-04 15:21:20,203 [INFO] McuFinderGlobals:76 - Set McuFinderConnectedMode to true +2023-11-04 15:21:20,217 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-MEMS1.10.0.0 +2023-11-04 15:21:20,365 [INFO] ServerAccessManage:473 - Download File mcusAds.json._tmp_ +2023-11-04 15:21:20,458 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-NFC4.3.0.0 +2023-11-04 15:21:20,467 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-NFC6.3.0.0 +2023-11-04 15:21:20,470 [INFO] LoadUrlFilesThread:156 - End of LoadUrlFiles Thread +2023-11-04 15:21:20,478 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-NFC7.1.0.1 +2023-11-04 15:21:20,486 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-SFXS2LP1.4.0.0 +2023-11-04 15:21:20,499 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-SUBG2.5.0.0 +2023-11-04 15:21:20,509 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-SMBUS.2.1.0 +2023-11-04 15:21:20,520 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-TOF1.3.3.1 +2023-11-04 15:21:20,537 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-TOUCHGFX.4.22.1 +2023-11-04 15:21:20,543 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-ALGOBUILD.1.3.0 +2023-11-04 15:21:20,563 [WARN] ConditionMgr:438 - getConditionDescription Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-11-04 15:21:20,563 [WARN] ConditionMgr:438 - getConditionDescription Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-11-04 15:21:20,568 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-H7.3.1.0 +2023-11-04 15:21:20,570 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-11-04 15:21:20,570 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-11-04 15:21:20,571 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-11-04 15:21:20,572 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-11-04 15:21:20,572 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-11-04 15:21:20,594 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-F4.1.1.0 +2023-11-04 15:21:20,616 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-F7.1.1.0 +2023-11-04 15:21:20,627 [INFO] ServerAccessManage:473 - Download File cube-finder-db.zip +2023-11-04 15:21:20,647 [WARN] ConditionMgr:438 - getConditionDescription Invalid condition id : LAN8742 Phy interface Condition cause : null +2023-11-04 15:21:20,648 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-L4.2.0.0 +2023-11-04 15:21:20,650 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : LAN8742 Phy interface Condition cause : null +2023-11-04 15:21:20,651 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : LAN8742 Phy interface Condition cause : null +2023-11-04 15:21:20,652 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : LAN8742 Phy interface Condition cause : null +2023-11-04 15:21:20,676 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-L5.2.0.0 +2023-11-04 15:21:20,705 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-G0.1.1.0 +2023-11-04 15:21:20,727 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-G4.2.0.0 +2023-11-04 15:21:20,746 [WARN] ConditionMgr:438 - getConditionDescription Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-11-04 15:21:20,746 [WARN] ConditionMgr:438 - getConditionDescription Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-11-04 15:21:20,749 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-WB.2.0.0 +2023-11-04 15:21:20,750 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-11-04 15:21:20,750 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-11-04 15:21:20,751 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-11-04 15:21:20,751 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-11-04 15:21:20,751 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-11-04 15:21:20,761 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null +2023-11-04 15:21:20,761 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null +2023-11-04 15:21:20,762 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null +2023-11-04 15:21:20,762 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null +2023-11-04 15:21:20,762 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null +2023-11-04 15:21:20,767 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-WL.2.0.0 +2023-11-04 15:21:20,772 [WARN] PackLoader:240 - Cannot read IP mode file for wolfSSL.I-CUBE-wolfSSL.5.6.4 +2023-11-04 15:21:20,776 [WARN] PackLoader:240 - Cannot read IP mode file for portGmbH.I-Cube-SoM-uGOAL.1.1.0 +2023-11-04 15:21:20,780 [WARN] PackLoader:240 - Cannot read IP mode file for emotas.I-CUBE-CANOPEN.1.3.0 +2023-11-04 15:21:20,786 [WARN] PackLoader:240 - Cannot read IP mode file for WES.I-CUBE-Cesium.1.3.0 +2023-11-04 15:21:20,791 [WARN] PackLoader:240 - Cannot read IP mode file for ITTIA_DB.I-CUBE-ITTIADB.8.8.0 +2023-11-04 15:21:20,804 [WARN] PackLoader:240 - Cannot read IP mode file for Infineon.AIROC-Wi-Fi-Bluetooth-STM32.1.5.1 +2023-11-04 15:21:20,816 [INFO] PopulateThirdPartyThread:66 - Ending populate Thread +2023-11-04 15:21:20,818 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-ISPU 1.1.0 +2023-11-04 15:21:20,818 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-DISPLAY 3.0.0 +2023-11-04 15:21:20,818 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-GNSS1 6.0.0 +2023-11-04 15:21:20,818 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-F4 1.1.0 +2023-11-04 15:21:20,818 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-ATR-SIGFOX1 3.2.0 +2023-11-04 15:21:20,818 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-BLE1 7.0.0 +2023-11-04 15:21:20,818 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :wolfSSL I-CUBE-wolfSSL 5.6.4 +2023-11-04 15:21:20,818 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-SMBUS 2.1.0 +2023-11-04 15:21:20,818 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-WB 2.0.0 +2023-11-04 15:21:20,818 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :emotas I-CUBE-CANOPEN 1.3.0 +2023-11-04 15:21:20,818 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-MEMS1 10.0.0 +2023-11-04 15:21:20,818 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-FREERTOS 1.1.0 +2023-11-04 15:21:20,818 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-NFC7 1.0.1 +2023-11-04 15:21:20,819 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-TOUCHGFX 4.22.1 +2023-11-04 15:21:20,819 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-F7 1.1.0 +2023-11-04 15:21:20,819 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-L5 2.0.0 +2023-11-04 15:21:20,819 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-NFC6 3.0.0 +2023-11-04 15:21:20,819 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-ALS 1.0.1 +2023-11-04 15:21:20,819 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :portGmbH I-Cube-SoM-uGOAL 1.1.0 +2023-11-04 15:21:20,819 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-EEPRMA1 4.2.0 +2023-11-04 15:21:20,819 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :ITTIA_DB I-CUBE-ITTIADB 8.8.0 +2023-11-04 15:21:20,819 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-SNS-SMARTAG2 1.2.0 +2023-11-04 15:21:20,819 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-SNS-MOTENV1 4.3.2 +2023-11-04 15:21:20,819 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-ALGOBUILD 1.3.0 +2023-11-04 15:21:20,819 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-WL 2.0.0 +2023-11-04 15:21:20,819 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-G0 1.1.0 +2023-11-04 15:21:20,819 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AI 8.1.0 +2023-11-04 15:21:20,820 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-NFC4 3.0.0 +2023-11-04 15:21:20,820 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-SUBG2 5.0.0 +2023-11-04 15:21:20,820 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-L4 2.0.0 +2023-11-04 15:21:20,820 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-ATR-ASTRA1 2.0.0 +2023-11-04 15:21:20,820 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :WES I-CUBE-Cesium 1.3.0 +2023-11-04 15:21:20,820 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-SFXS2LP1 4.0.0 +2023-11-04 15:21:20,820 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-SNS-FLIGHT1 5.0.2 +2023-11-04 15:21:20,820 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-BLE2 3.3.0 +2023-11-04 15:21:20,820 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-TOF1 3.3.1 +2023-11-04 15:21:20,820 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-G4 2.0.0 +2023-11-04 15:21:20,820 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-H7 3.1.0 +2023-11-04 15:21:20,820 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :Infineon AIROC-Wi-Fi-Bluetooth-STM32 1.5.1 +2023-11-04 15:21:20,820 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-BLEMGR 3.0.0 +2023-11-04 15:21:20,821 [INFO] LoadServerUpdatesThread:373 - End of LoadServerUpdate Thread +2023-11-04 15:21:20,931 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". +2023-11-04 15:21:20,931 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] SLF4J: Defaulting to no-operation (NOP) logger implementation +2023-11-04 15:21:20,931 [ERROR] LogOutputStream:75 - [STDERR_REDIRECT] SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. +2023-11-04 15:21:21,498 [INFO] FileExtend:240 - Unzip File : cube-finder-db.zip +2023-11-04 15:21:21,498 [INFO] FileExtend:255 - Standard Zip Deflate +2023-11-04 15:21:22,170 [INFO] LoadUrlFilesThread:156 - End of LoadUrlFiles Thread +2023-11-04 15:21:22,655 [INFO] ServerAccessManage:473 - Download File crdb.zip +2023-11-04 15:21:22,701 [INFO] FileExtend:240 - Unzip File : crdb.zip +2023-11-04 15:21:22,701 [INFO] FileExtend:255 - Standard Zip Deflate +2023-11-04 15:21:22,802 [WARN] MainUpdater:1189 - Updater busy. Cannot search thirdparties +2023-11-04 15:21:22,803 [INFO] ThirdPartyUpdaterWithRetryManager:96 - Updater plugin is busy. [9/15] +2023-11-04 15:21:22,824 [INFO] LoadUrlFilesThread:156 - End of LoadUrlFiles Thread +2023-11-04 15:21:22,956 [INFO] ServerAccessManage:473 - Download File tutoVideoDB.zip +2023-11-04 15:21:22,959 [INFO] FileExtend:240 - Unzip File : tutoVideoDB.zip +2023-11-04 15:21:22,959 [INFO] FileExtend:255 - Standard Zip Deflate +2023-11-04 15:21:23,075 [INFO] LoadUrlFilesThread:156 - End of LoadUrlFiles Thread +2023-11-04 15:21:23,077 [WARN] DbFile:41 - Overriding database path with different value: /home/key/.stmcufinder/plugins/mcufinder/ => /home/key/.stmcufinder/plugins/mcufinder +2023-11-04 15:21:23,202 [INFO] ServerAccessManage:473 - Download File api_config.json +2023-11-04 15:21:23,315 [INFO] LoadUrlFilesThread:156 - End of LoadUrlFiles Thread +2023-11-04 15:21:23,316 [INFO] DbMcusAds:53 - JSON generation date=Tue Mar 07 09:50:55 CET 2023 (1678179055335) +2023-11-04 15:21:23,357 [INFO] ServerAccessManage:473 - Download File +2023-11-04 15:21:23,358 [INFO] LoadUrlFilesThread:185 - End of LoadServerUrlFiles without Thread +2023-11-04 15:21:23,358 [INFO] TargetSelectorAdapter:259 - Refresh data is successful +2023-11-04 15:21:23,483 [INFO] ApiDb:581 - Connected to CubeFinder SQLite database (/home/key/.stmcufinder/plugins/mcufinder/mcu/cube-finder-db.db) +2023-11-04 15:21:23,532 [INFO] ApiDb:668 - CubeFinder database Data Model version=2.1 +2023-11-04 15:21:23,532 [INFO] ApiDb:669 - CubeFinder database Configuration version=3.0.37 +2023-11-04 15:21:23,532 [INFO] ApiDb:670 - CubeFinder database generation date=2023-10-13 (1697197505) +2023-11-04 15:21:23,532 [INFO] ApiDb:671 - CubeFinder database FW Pack versions=[FP-ATR-ASTRA1_V2.0.0, FP-SNS-FLIGHT1_V5.0.1, FP-SNS-FLIGHT1_V5.0.2, FP-SNS-MOTENV1_V4.3.1, FP-SNS-MOTENV1_V4.3.2, FP-SNS-SMARTAG2_V1.2.0, I-CUBE-ITTIADB_V8.6.3-1, STM32Cube_FW_C0_V1.1.0, STM32Cube_FW_F4_V1.27.1, STM32Cube_FW_F7_V1.17.0, STM32Cube_FW_G0_V1.6.1, STM32Cube_FW_G4_V1.5.1, STM32Cube_FW_H5_V0.5.1, STM32Cube_FW_H5_V1.1.1, STM32Cube_FW_H7_V1.11.0, STM32Cube_FW_L0_V1.12.2, STM32Cube_FW_L5_V1.5.0, STM32Cube_FW_U5_V1.3.0, STM32Cube_FW_U5_V1.3.0RC4, STM32Cube_FW_WBA_V1.0.0RC1, STM32Cube_FW_WBA_V1.1.0RC1, STM32Cube_FW_WBA_V1.1.1, STM32Cube_FW_WB_V1.15.0RC1, STM32Cube_FW_WB_V1.16.0, STM32Cube_FW_WB_V1.16.0RC2, STM32Cube_FW_WB_V1.17.3, STM32Cube_FW_WL_V1.3.0, X-CUBE-ALGOBUILD_V1.3.0, X-CUBE-ALS_V1.0.1, X-CUBE-AZRTOS-F4_V1.1.0, X-CUBE-AZRTOS-F7_V1.1.0, X-CUBE-AZRTOS-G0_V1.1.0, X-CUBE-AZRTOS-G4_V2.0.0, X-CUBE-AZRTOS-H7_V3.1.0, X-CUBE-AZRTOS-L4_V1.0.0, X-CUBE-AZRTOS-L4_V2.0.0, X-CUBE-AZRTOS-L5_V1.1.0, X-CUBE-AZRTOS-WB_V2.0.0, X-CUBE-AZRTOS-WL_V2.0.0, X-CUBE-BLE1_V7.0.0, X-CUBE-BLE2_V3.3.0, X-CUBE-BLEMGR_V2.0.0, X-CUBE-EEPRMA1_V4.1.0, X-CUBE-FREERTOS_V1.1.0, X-CUBE-GNSS1_V6.0.0, X-CUBE-MEMS1_V10.0.0, X-CUBE-MEMS1_V9.1.0, X-CUBE-MEMS1_V9.4.0, X-CUBE-MEMS1_V9.6.0, X-CUBE-NFC4_V3.0.0, X-CUBE-NFC7_V1.0.1, X-CUBE-SFXS2LP1_V4.0.0, X-CUBE-SUBG2_V5.0.0, X-CUBE-TOF1_V3.3.1] +2023-11-04 15:21:25,456 [INFO] ApiDb:240 - Found 323 in-development CPN: [B-G473E-ZEST1S, B-WB1M-WPAN1, B-WL5M-SUBG1, NUCLEO-C031C6, NUCLEO-H503RB, NUCLEO-H563ZI, NUCLEO-U545RE-Q, NUCLEO-U5A5ZJ-Q, NUCLEO-WBA52CG, STEVAL-PROTEUS1, STEVAL-SMARTAG2, STEVAL-STWINBX1, STM320518-EVAL, STM32C0116-DK, STM32C011D6Y3TR, STM32C011D6Y6TR, STM32C011F4P3, STM32C011F4P6, STM32C011F4U3, STM32C011F4U6TR, STM32C011F6P3, STM32C011F6P6, STM32C011F6U3, STM32C011F6U6TR, STM32C011J4M3, STM32C011J4M6, STM32C011J6M3, STM32C011J6M6, STM32C0316-DK, STM32C031C4T3, STM32C031C4T6, STM32C031C4U3, STM32C031C4U6, STM32C031C6T3, STM32C031C6T6, STM32C031C6U3, STM32C031C6U6, STM32C031F4P3, STM32C031F4P6, STM32C031F6P3, STM32C031F6P6, STM32C031G4U3, STM32C031G4U6, STM32C031G6U3, STM32C031G6U6, STM32C031K4T3, STM32C031K4T6, STM32C031K4U3, STM32C031K4U6, STM32C031K6T3, STM32C031K6T6, STM32C031K6U3, STM32C031K6U6, STM32G071K8TXN, STM32G071K8UXN, STM32G081GBU6N, STM32G081KBT6N, STM32G081KBUXN, STM32G0B1CCT6N, STM32G0B1KCT6, STM32G0B1NEY6TR, STM32G0B1RCT6N, STM32G0C1CCT6, STM32G0C1CCT6N, STM32G0C1CCU6N, STM32G0C1CET6N, STM32G0C1CEU6N, STM32G0C1KCT6, STM32G0C1NEY6TR, STM32G0C1RCI6N, STM32G0C1RCT6N, STM32G0C1REI6N, STM32G0C1RET6N, STM32G0C1VCI6, STM32G0C1VEI6, STM32G471CCT6, STM32G471CCU6, STM32G471CET3, STM32G471CET6, STM32G471CEU3, STM32G471CEU6, STM32G471MCT6, STM32G471MET3, STM32G471MET6, STM32G471MEY6TR, STM32G471QCT6, STM32G471QET3, STM32G471RCT6, STM32G471RET3, STM32G471RET6, STM32G471VCH6, STM32G471VCI6, STM32G471VCT6, STM32G471VEH3, STM32G471VEH6, STM32G471VEI3, STM32G471VEI6, STM32G471VET3, STM32G471VET6, STM32G474CCT6, STM32H503CBT6, STM32H503CBU6, STM32H503EBY6TR, STM32H503KBU6, STM32H503RBT6, STM32H562AGI6, STM32H562AII6, STM32H562IGK6, STM32H562IGT6, STM32H562IIK6, STM32H562IIT6, STM32H562RGT6, STM32H562RGV6, STM32H562RIT6, STM32H562RIV6, STM32H562VGT6, STM32H562VIT6, STM32H562ZGT6, STM32H562ZIT6, STM32H563AGI6, STM32H563AII3Q, STM32H563AII6, STM32H563IGK6, STM32H563IGT6, STM32H563IIK3Q, STM32H563IIK6, STM32H563IIT3Q, STM32H563IIT6, STM32H563MIY3QTR, STM32H563RGT6, STM32H563RGV6, STM32H563RIT6, STM32H563RIV6, STM32H563VGT6, STM32H563VIT3Q, STM32H563VIT6, STM32H563ZGT6, STM32H563ZIT3Q, STM32H563ZIT6, STM32H573AII3Q, STM32H573AII6, STM32H573I-DK, STM32H573IIK3Q, STM32H573IIK6, STM32H573IIT3Q, STM32H573IIT6, STM32H573MIY3QTR, STM32H573RIT6, STM32H573RIV6, STM32H573VIT3Q, STM32H573VIT6, STM32H573ZIT3Q, STM32H573ZIT6, STM32L4R5QGI6STR, STM32MP131AAE3, STM32MP131AAF3, STM32MP131AAG3, STM32MP131CAE3, STM32MP131CAF3, STM32MP131CAG3, STM32MP131DAE7, STM32MP131DAF7, STM32MP131DAG7, STM32MP131FAE7, STM32MP131FAF7, STM32MP131FAG7, STM32MP133AAE3, STM32MP133AAF3, STM32MP133AAG3, STM32MP133CAE3, STM32MP133CAF3, STM32MP133CAG3, STM32MP133DAE7, STM32MP133DAF7, STM32MP133DAG7, STM32MP133FAE7, STM32MP133FAF7, STM32MP133FAG7, STM32MP135AAE3, STM32MP135AAF3, STM32MP135AAG3, STM32MP135CAE3, STM32MP135CAF3, STM32MP135CAG3, STM32MP135DAE7, STM32MP135DAF7, STM32MP135DAG7, STM32MP135F-DK, STM32MP135FAE7, STM32MP135FAF7, STM32MP135FAF7T, STM32MP135FAF7U, STM32MP135FAG7, STM32U535CBT6, STM32U535CBT6Q, STM32U535CBU6, STM32U535CBU6Q, STM32U535CCT6, STM32U535CCT6Q, STM32U535CCU6, STM32U535CCU6Q, STM32U535CET6, STM32U535CET6Q, STM32U535CEU6, STM32U535CEU6Q, STM32U535JEY6QTR, STM32U535NCY6QTR, STM32U535NEY6QTR, STM32U535RBI6, STM32U535RBI6Q, STM32U535RBT6, STM32U535RBT6Q, STM32U535RCI6, STM32U535RCI6Q, STM32U535RCT6, STM32U535RCT6Q, STM32U535REI6, STM32U535REI6Q, STM32U535RET6, STM32U535RET6Q, STM32U535VCI6, STM32U535VCI6Q, STM32U535VCT6, STM32U535VCT6Q, STM32U535VEI6, STM32U535VEI6Q, STM32U535VET6, STM32U535VET6Q, STM32U545CET6, STM32U545CET6Q, STM32U545CEU6, STM32U545CEU6Q, STM32U545JEY6QTR, STM32U545NEY6QTR, STM32U545REI6, STM32U545REI6Q, STM32U545RET6, STM32U545RET6Q, STM32U545VEI6, STM32U545VEI6Q, STM32U545VET6, STM32U545VET6Q, STM32U595AIH6, STM32U595AIH6Q, STM32U595AJH6, STM32U595AJH6Q, STM32U595QII6, STM32U595QII6Q, STM32U595QJI6, STM32U595QJI6Q, STM32U595RIT6, STM32U595RIT6Q, STM32U595RJT6, STM32U595RJT6Q, STM32U595VIT6, STM32U595VIT6Q, STM32U595VJT6, STM32U595VJT6Q, STM32U595ZIT6, STM32U595ZIT6Q, STM32U595ZIY6QTR, STM32U595ZJT6, STM32U595ZJT6Q, STM32U595ZJY6QTR, STM32U599BJY6QTR, STM32U599NIH6Q, STM32U599NJH6Q, STM32U599VIT6Q, STM32U599VJT6, STM32U599VJT6Q, STM32U599ZIT6Q, STM32U599ZIY6QTR, STM32U599ZJT6Q, STM32U599ZJY6QTR, STM32U5A5AJH6, STM32U5A5AJH6Q, STM32U5A5QJI6, STM32U5A5QJI6Q, STM32U5A5RJT6, STM32U5A5RJT6Q, STM32U5A5VJT6, STM32U5A5VJT6Q, STM32U5A5ZJT6, STM32U5A5ZJT6Q, STM32U5A5ZJY6QTR, STM32U5A9BJY6QTR, STM32U5A9J-DK, STM32U5A9NJH6Q, STM32U5A9VJT6Q, STM32U5A9ZJT6Q, STM32U5A9ZJY6QTR, STM32U5F7VIT6, STM32U5F7VIT6Q, STM32U5F7VJT6, STM32U5F7VJT6Q, STM32U5F9BJY6QTR, STM32U5F9NJH6Q, STM32U5F9VIT6Q, STM32U5F9VJT6Q, STM32U5F9ZIJ6QTR, STM32U5F9ZIT6Q, STM32U5F9ZJJ6QTR, STM32U5F9ZJT6Q, STM32U5G7VJT6, STM32U5G7VJT6Q, STM32U5G9BJY6QTR, STM32U5G9J-DK1, STM32U5G9J-DK2, STM32U5G9NJH6Q, STM32U5G9VJT6Q, STM32U5G9ZJJ6QTR, STM32U5G9ZJT6Q, STM32WB1MMCH6, STM32WBA52CEU6, STM32WBA52CEU6T, STM32WBA52CGU6, STM32WBA52CGU6T, STM32WBA52KEU6, STM32WBA52KEU6T, STM32WBA52KGU6, STM32WBA52KGU6T, STM32WL5MOCH6, STM32WL5MOCH6TR] +2023-11-04 15:21:25,460 [INFO] DbMcus:217 - Found 3848 MCUs, 3848 are supported +2023-11-04 15:21:25,460 [INFO] ApiDb:414 - User favorites file not found: /home/key/.stm32cubeide/favorites.mcus.txt +2023-11-04 15:21:25,460 [INFO] DbMcus:223 - Set 0 / 0 favorites MCUs +2023-11-04 15:21:25,699 [INFO] ApiDb:668 - CubeFinder database Data Model version=2.1 +2023-11-04 15:21:25,699 [INFO] ApiDb:669 - CubeFinder database Configuration version=3.0.37 +2023-11-04 15:21:25,699 [INFO] ApiDb:670 - CubeFinder database generation date=2023-10-13 (1697197505) +2023-11-04 15:21:25,699 [INFO] ApiDb:671 - CubeFinder database FW Pack versions=[FP-ATR-ASTRA1_V2.0.0, FP-SNS-FLIGHT1_V5.0.1, FP-SNS-FLIGHT1_V5.0.2, FP-SNS-MOTENV1_V4.3.1, FP-SNS-MOTENV1_V4.3.2, FP-SNS-SMARTAG2_V1.2.0, I-CUBE-ITTIADB_V8.6.3-1, STM32Cube_FW_C0_V1.1.0, STM32Cube_FW_F4_V1.27.1, STM32Cube_FW_F7_V1.17.0, STM32Cube_FW_G0_V1.6.1, STM32Cube_FW_G4_V1.5.1, STM32Cube_FW_H5_V0.5.1, STM32Cube_FW_H5_V1.1.1, STM32Cube_FW_H7_V1.11.0, STM32Cube_FW_L0_V1.12.2, STM32Cube_FW_L5_V1.5.0, STM32Cube_FW_U5_V1.3.0, STM32Cube_FW_U5_V1.3.0RC4, STM32Cube_FW_WBA_V1.0.0RC1, STM32Cube_FW_WBA_V1.1.0RC1, STM32Cube_FW_WBA_V1.1.1, STM32Cube_FW_WB_V1.15.0RC1, STM32Cube_FW_WB_V1.16.0, STM32Cube_FW_WB_V1.16.0RC2, STM32Cube_FW_WB_V1.17.3, STM32Cube_FW_WL_V1.3.0, X-CUBE-ALGOBUILD_V1.3.0, X-CUBE-ALS_V1.0.1, X-CUBE-AZRTOS-F4_V1.1.0, X-CUBE-AZRTOS-F7_V1.1.0, X-CUBE-AZRTOS-G0_V1.1.0, X-CUBE-AZRTOS-G4_V2.0.0, X-CUBE-AZRTOS-H7_V3.1.0, X-CUBE-AZRTOS-L4_V1.0.0, X-CUBE-AZRTOS-L4_V2.0.0, X-CUBE-AZRTOS-L5_V1.1.0, X-CUBE-AZRTOS-WB_V2.0.0, X-CUBE-AZRTOS-WL_V2.0.0, X-CUBE-BLE1_V7.0.0, X-CUBE-BLE2_V3.3.0, X-CUBE-BLEMGR_V2.0.0, X-CUBE-EEPRMA1_V4.1.0, X-CUBE-FREERTOS_V1.1.0, X-CUBE-GNSS1_V6.0.0, X-CUBE-MEMS1_V10.0.0, X-CUBE-MEMS1_V9.1.0, X-CUBE-MEMS1_V9.4.0, X-CUBE-MEMS1_V9.6.0, X-CUBE-NFC4_V3.0.0, X-CUBE-NFC7_V1.0.1, X-CUBE-SFXS2LP1_V4.0.0, X-CUBE-SUBG2_V5.0.0, X-CUBE-TOF1_V3.3.1] +2023-11-04 15:21:25,779 [INFO] DbBoardsSqlite:226 - include board P-NUCLEO-WB55-NUCLEO as a kit item of type 'Nucleo-64' +2023-11-04 15:21:25,779 [INFO] DbBoardsSqlite:226 - include board P-NUCLEO-WB55-USBDONGLE as a kit item of type 'Nucleo USB Dongle' +2023-11-04 15:21:25,779 [INFO] DbBoardsSqlite:226 - include board STEVAL-IDP005V1 as a kit item of type 'Evaluation Board' +2023-11-04 15:21:25,779 [INFO] DbBoardsSqlite:226 - include board STEVAL-IDP005V2 as a kit item of type 'Evaluation Board' +2023-11-04 15:21:25,813 [INFO] ApiDb:240 - Found 323 in-development CPN: [B-G473E-ZEST1S, B-WB1M-WPAN1, B-WL5M-SUBG1, NUCLEO-C031C6, NUCLEO-H503RB, NUCLEO-H563ZI, NUCLEO-U545RE-Q, NUCLEO-U5A5ZJ-Q, NUCLEO-WBA52CG, STEVAL-PROTEUS1, STEVAL-SMARTAG2, STEVAL-STWINBX1, STM320518-EVAL, STM32C0116-DK, STM32C011D6Y3TR, STM32C011D6Y6TR, STM32C011F4P3, STM32C011F4P6, STM32C011F4U3, STM32C011F4U6TR, STM32C011F6P3, STM32C011F6P6, STM32C011F6U3, STM32C011F6U6TR, STM32C011J4M3, STM32C011J4M6, STM32C011J6M3, STM32C011J6M6, STM32C0316-DK, STM32C031C4T3, STM32C031C4T6, STM32C031C4U3, STM32C031C4U6, STM32C031C6T3, STM32C031C6T6, STM32C031C6U3, STM32C031C6U6, STM32C031F4P3, STM32C031F4P6, STM32C031F6P3, STM32C031F6P6, STM32C031G4U3, STM32C031G4U6, STM32C031G6U3, STM32C031G6U6, STM32C031K4T3, STM32C031K4T6, STM32C031K4U3, STM32C031K4U6, STM32C031K6T3, STM32C031K6T6, STM32C031K6U3, STM32C031K6U6, STM32G071K8TXN, STM32G071K8UXN, STM32G081GBU6N, STM32G081KBT6N, STM32G081KBUXN, STM32G0B1CCT6N, STM32G0B1KCT6, STM32G0B1NEY6TR, STM32G0B1RCT6N, STM32G0C1CCT6, STM32G0C1CCT6N, STM32G0C1CCU6N, STM32G0C1CET6N, STM32G0C1CEU6N, STM32G0C1KCT6, STM32G0C1NEY6TR, STM32G0C1RCI6N, STM32G0C1RCT6N, STM32G0C1REI6N, STM32G0C1RET6N, STM32G0C1VCI6, STM32G0C1VEI6, STM32G471CCT6, STM32G471CCU6, STM32G471CET3, STM32G471CET6, STM32G471CEU3, STM32G471CEU6, STM32G471MCT6, STM32G471MET3, STM32G471MET6, STM32G471MEY6TR, STM32G471QCT6, STM32G471QET3, STM32G471RCT6, STM32G471RET3, STM32G471RET6, STM32G471VCH6, STM32G471VCI6, STM32G471VCT6, STM32G471VEH3, STM32G471VEH6, STM32G471VEI3, STM32G471VEI6, STM32G471VET3, STM32G471VET6, STM32G474CCT6, STM32H503CBT6, STM32H503CBU6, STM32H503EBY6TR, STM32H503KBU6, STM32H503RBT6, STM32H562AGI6, STM32H562AII6, STM32H562IGK6, STM32H562IGT6, STM32H562IIK6, STM32H562IIT6, STM32H562RGT6, STM32H562RGV6, STM32H562RIT6, STM32H562RIV6, STM32H562VGT6, STM32H562VIT6, STM32H562ZGT6, STM32H562ZIT6, STM32H563AGI6, STM32H563AII3Q, STM32H563AII6, STM32H563IGK6, STM32H563IGT6, STM32H563IIK3Q, STM32H563IIK6, STM32H563IIT3Q, STM32H563IIT6, STM32H563MIY3QTR, STM32H563RGT6, STM32H563RGV6, STM32H563RIT6, STM32H563RIV6, STM32H563VGT6, STM32H563VIT3Q, STM32H563VIT6, STM32H563ZGT6, STM32H563ZIT3Q, STM32H563ZIT6, STM32H573AII3Q, STM32H573AII6, STM32H573I-DK, STM32H573IIK3Q, STM32H573IIK6, STM32H573IIT3Q, STM32H573IIT6, STM32H573MIY3QTR, STM32H573RIT6, STM32H573RIV6, STM32H573VIT3Q, STM32H573VIT6, STM32H573ZIT3Q, STM32H573ZIT6, STM32L4R5QGI6STR, STM32MP131AAE3, STM32MP131AAF3, STM32MP131AAG3, STM32MP131CAE3, STM32MP131CAF3, STM32MP131CAG3, STM32MP131DAE7, STM32MP131DAF7, STM32MP131DAG7, STM32MP131FAE7, STM32MP131FAF7, STM32MP131FAG7, STM32MP133AAE3, STM32MP133AAF3, STM32MP133AAG3, STM32MP133CAE3, STM32MP133CAF3, STM32MP133CAG3, STM32MP133DAE7, STM32MP133DAF7, STM32MP133DAG7, STM32MP133FAE7, STM32MP133FAF7, STM32MP133FAG7, STM32MP135AAE3, STM32MP135AAF3, STM32MP135AAG3, STM32MP135CAE3, STM32MP135CAF3, STM32MP135CAG3, STM32MP135DAE7, STM32MP135DAF7, STM32MP135DAG7, STM32MP135F-DK, STM32MP135FAE7, STM32MP135FAF7, STM32MP135FAF7T, STM32MP135FAF7U, STM32MP135FAG7, STM32U535CBT6, STM32U535CBT6Q, STM32U535CBU6, STM32U535CBU6Q, STM32U535CCT6, STM32U535CCT6Q, STM32U535CCU6, STM32U535CCU6Q, STM32U535CET6, STM32U535CET6Q, STM32U535CEU6, STM32U535CEU6Q, STM32U535JEY6QTR, STM32U535NCY6QTR, STM32U535NEY6QTR, STM32U535RBI6, STM32U535RBI6Q, STM32U535RBT6, STM32U535RBT6Q, STM32U535RCI6, STM32U535RCI6Q, STM32U535RCT6, STM32U535RCT6Q, STM32U535REI6, STM32U535REI6Q, STM32U535RET6, STM32U535RET6Q, STM32U535VCI6, STM32U535VCI6Q, STM32U535VCT6, STM32U535VCT6Q, STM32U535VEI6, STM32U535VEI6Q, STM32U535VET6, STM32U535VET6Q, STM32U545CET6, STM32U545CET6Q, STM32U545CEU6, STM32U545CEU6Q, STM32U545JEY6QTR, STM32U545NEY6QTR, STM32U545REI6, STM32U545REI6Q, STM32U545RET6, STM32U545RET6Q, STM32U545VEI6, STM32U545VEI6Q, STM32U545VET6, STM32U545VET6Q, STM32U595AIH6, STM32U595AIH6Q, STM32U595AJH6, STM32U595AJH6Q, STM32U595QII6, STM32U595QII6Q, STM32U595QJI6, STM32U595QJI6Q, STM32U595RIT6, STM32U595RIT6Q, STM32U595RJT6, STM32U595RJT6Q, STM32U595VIT6, STM32U595VIT6Q, STM32U595VJT6, STM32U595VJT6Q, STM32U595ZIT6, STM32U595ZIT6Q, STM32U595ZIY6QTR, STM32U595ZJT6, STM32U595ZJT6Q, STM32U595ZJY6QTR, STM32U599BJY6QTR, STM32U599NIH6Q, STM32U599NJH6Q, STM32U599VIT6Q, STM32U599VJT6, STM32U599VJT6Q, STM32U599ZIT6Q, STM32U599ZIY6QTR, STM32U599ZJT6Q, STM32U599ZJY6QTR, STM32U5A5AJH6, STM32U5A5AJH6Q, STM32U5A5QJI6, STM32U5A5QJI6Q, STM32U5A5RJT6, STM32U5A5RJT6Q, STM32U5A5VJT6, STM32U5A5VJT6Q, STM32U5A5ZJT6, STM32U5A5ZJT6Q, STM32U5A5ZJY6QTR, STM32U5A9BJY6QTR, STM32U5A9J-DK, STM32U5A9NJH6Q, STM32U5A9VJT6Q, STM32U5A9ZJT6Q, STM32U5A9ZJY6QTR, STM32U5F7VIT6, STM32U5F7VIT6Q, STM32U5F7VJT6, STM32U5F7VJT6Q, STM32U5F9BJY6QTR, STM32U5F9NJH6Q, STM32U5F9VIT6Q, STM32U5F9VJT6Q, STM32U5F9ZIJ6QTR, STM32U5F9ZIT6Q, STM32U5F9ZJJ6QTR, STM32U5F9ZJT6Q, STM32U5G7VJT6, STM32U5G7VJT6Q, STM32U5G9BJY6QTR, STM32U5G9J-DK1, STM32U5G9J-DK2, STM32U5G9NJH6Q, STM32U5G9VJT6Q, STM32U5G9ZJJ6QTR, STM32U5G9ZJT6Q, STM32WB1MMCH6, STM32WBA52CEU6, STM32WBA52CEU6T, STM32WBA52CGU6, STM32WBA52CGU6T, STM32WBA52KEU6, STM32WBA52KEU6T, STM32WBA52KGU6, STM32WBA52KGU6T, STM32WL5MOCH6, STM32WL5MOCH6TR] +2023-11-04 15:21:25,899 [INFO] BoardInfo:880 - No configuration file found for board P-NUCLEO-WB55 +2023-11-04 15:21:25,899 [INFO] DbBoards:157 - Kit is not supported: P-NUCLEO-WB55 +2023-11-04 15:21:25,903 [INFO] BoardInfo:880 - No configuration file found for board STEVAL-BFA001V1B +2023-11-04 15:21:25,903 [INFO] DbBoards:157 - Kit is not supported: STEVAL-BFA001V1B +2023-11-04 15:21:25,904 [INFO] BoardInfo:880 - No configuration file found for board STEVAL-BFA001V2B +2023-11-04 15:21:25,904 [INFO] DbBoards:157 - Kit is not supported: STEVAL-BFA001V2B +2023-11-04 15:21:25,926 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-SMBUS.2.1.0 +2023-11-04 15:21:25,939 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-F7.1.1.0 +2023-11-04 15:21:25,944 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-SNS-MOTENV1.4.3.2 +2023-11-04 15:21:25,948 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-SNS-FLIGHT1.5.0.2 +2023-11-04 15:21:25,951 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-DISPLAY.3.0.0 +2023-11-04 15:21:25,957 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-BLE1.7.0.0 +2023-11-04 15:21:25,960 [WARN] PackLoader:240 - Cannot read IP mode file for emotas.I-CUBE-CANOPEN.1.3.0 +2023-11-04 15:21:25,962 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-TOUCHGFX.4.22.1 +2023-11-04 15:21:25,964 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-SNS-SMARTAG2.1.2.0 +2023-11-04 15:21:25,970 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null +2023-11-04 15:21:25,970 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null +2023-11-04 15:21:25,970 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null +2023-11-04 15:21:25,970 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null +2023-11-04 15:21:25,971 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] 1 : Invalid condition id : UX_CORESTACK_Condition cause : null +2023-11-04 15:21:25,973 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-WL.2.0.0 +2023-11-04 15:21:25,977 [WARN] PackLoader:240 - Cannot read IP mode file for WES.I-CUBE-Cesium.1.3.0 +2023-11-04 15:21:25,980 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-BLE2.3.3.0 +2023-11-04 15:21:25,983 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-ALGOBUILD.1.3.0 +2023-11-04 15:21:25,996 [INFO] DbBoards:161 - Found 190 boards, 187 are supported +2023-11-04 15:21:25,996 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-G0.1.1.0 +2023-11-04 15:21:25,998 [INFO] ApiDb:414 - User favorites file not found: /home/key/.stm32cubeide/favorites.boards.txt +2023-11-04 15:21:25,999 [INFO] DbBoards:190 - Set 0 / 0 favorites Boards +2023-11-04 15:21:26,000 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-NFC4.3.0.0 +2023-11-04 15:21:26,001 [INFO] ApiDb:668 - CubeFinder database Data Model version=2.1 +2023-11-04 15:21:26,001 [INFO] ApiDb:669 - CubeFinder database Configuration version=3.0.37 +2023-11-04 15:21:26,001 [INFO] ApiDb:670 - CubeFinder database generation date=2023-10-13 (1697197505) +2023-11-04 15:21:26,001 [INFO] ApiDb:671 - CubeFinder database FW Pack versions=[FP-ATR-ASTRA1_V2.0.0, FP-SNS-FLIGHT1_V5.0.1, FP-SNS-FLIGHT1_V5.0.2, FP-SNS-MOTENV1_V4.3.1, FP-SNS-MOTENV1_V4.3.2, FP-SNS-SMARTAG2_V1.2.0, I-CUBE-ITTIADB_V8.6.3-1, STM32Cube_FW_C0_V1.1.0, STM32Cube_FW_F4_V1.27.1, STM32Cube_FW_F7_V1.17.0, STM32Cube_FW_G0_V1.6.1, STM32Cube_FW_G4_V1.5.1, STM32Cube_FW_H5_V0.5.1, STM32Cube_FW_H5_V1.1.1, STM32Cube_FW_H7_V1.11.0, STM32Cube_FW_L0_V1.12.2, STM32Cube_FW_L5_V1.5.0, STM32Cube_FW_U5_V1.3.0, STM32Cube_FW_U5_V1.3.0RC4, STM32Cube_FW_WBA_V1.0.0RC1, STM32Cube_FW_WBA_V1.1.0RC1, STM32Cube_FW_WBA_V1.1.1, STM32Cube_FW_WB_V1.15.0RC1, STM32Cube_FW_WB_V1.16.0, STM32Cube_FW_WB_V1.16.0RC2, STM32Cube_FW_WB_V1.17.3, STM32Cube_FW_WL_V1.3.0, X-CUBE-ALGOBUILD_V1.3.0, X-CUBE-ALS_V1.0.1, X-CUBE-AZRTOS-F4_V1.1.0, X-CUBE-AZRTOS-F7_V1.1.0, X-CUBE-AZRTOS-G0_V1.1.0, X-CUBE-AZRTOS-G4_V2.0.0, X-CUBE-AZRTOS-H7_V3.1.0, X-CUBE-AZRTOS-L4_V1.0.0, X-CUBE-AZRTOS-L4_V2.0.0, X-CUBE-AZRTOS-L5_V1.1.0, X-CUBE-AZRTOS-WB_V2.0.0, X-CUBE-AZRTOS-WL_V2.0.0, X-CUBE-BLE1_V7.0.0, X-CUBE-BLE2_V3.3.0, X-CUBE-BLEMGR_V2.0.0, X-CUBE-EEPRMA1_V4.1.0, X-CUBE-FREERTOS_V1.1.0, X-CUBE-GNSS1_V6.0.0, X-CUBE-MEMS1_V10.0.0, X-CUBE-MEMS1_V9.1.0, X-CUBE-MEMS1_V9.4.0, X-CUBE-MEMS1_V9.6.0, X-CUBE-NFC4_V3.0.0, X-CUBE-NFC7_V1.0.1, X-CUBE-SFXS2LP1_V4.0.0, X-CUBE-SUBG2_V5.0.0, X-CUBE-TOF1_V3.3.1] +2023-11-04 15:21:26,011 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-BLEMGR.3.0.0 +2023-11-04 15:21:26,014 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-ATR-SIGFOX1.3.2.0 +2023-11-04 15:21:26,017 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-GNSS1.6.0.0 +2023-11-04 15:21:26,028 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-F4.1.1.0 +2023-11-04 15:21:26,032 [WARN] PackLoader:240 - Cannot read IP mode file for wolfSSL.I-CUBE-wolfSSL.5.6.4 +2023-11-04 15:21:26,048 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-L5.2.0.0 +2023-11-04 15:21:26,056 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-EEPRMA1.4.2.0 +2023-11-04 15:21:26,061 [WARN] PackLoader:240 - Cannot read IP mode file for ITTIA_DB.I-CUBE-ITTIADB.8.8.0 +2023-11-04 15:21:26,082 [WARN] ConditionMgr:438 - getConditionDescription Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-11-04 15:21:26,082 [WARN] ConditionMgr:438 - getConditionDescription Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-11-04 15:21:26,087 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-H7.3.1.0 +2023-11-04 15:21:26,088 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-11-04 15:21:26,088 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-11-04 15:21:26,089 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-11-04 15:21:26,090 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-11-04 15:21:26,090 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-11-04 15:21:26,096 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-NFC7.1.0.1 +2023-11-04 15:21:26,104 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-NFC6.3.0.0 +2023-11-04 15:21:26,114 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AI.8.1.0 +2023-11-04 15:21:26,135 [WARN] ConditionMgr:438 - getConditionDescription Invalid condition id : LAN8742 Phy interface Condition cause : null +2023-11-04 15:21:26,136 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-L4.2.0.0 +2023-11-04 15:21:26,137 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : LAN8742 Phy interface Condition cause : null +2023-11-04 15:21:26,138 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : LAN8742 Phy interface Condition cause : null +2023-11-04 15:21:26,138 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : LAN8742 Phy interface Condition cause : null +2023-11-04 15:21:26,145 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-SFXS2LP1.4.0.0 +2023-11-04 15:21:26,150 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-ISPU.1.1.0 +2023-11-04 15:21:26,164 [WARN] ConditionMgr:438 - getConditionDescription Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-11-04 15:21:26,165 [WARN] ConditionMgr:438 - getConditionDescription Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-11-04 15:21:26,168 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-WB.2.0.0 +2023-11-04 15:21:26,168 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-11-04 15:21:26,169 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-11-04 15:21:26,169 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-11-04 15:21:26,169 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-11-04 15:21:26,170 [WARN] ConditionMgr:1039 - genDependencies : Invalid condition id : UX DEVICE CLASS RTOS Condition cause : null +2023-11-04 15:21:26,180 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-SUBG2.5.0.0 +2023-11-04 15:21:26,194 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-TOF1.3.3.1 +2023-11-04 15:21:26,219 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-AZRTOS-G4.2.0.0 +2023-11-04 15:21:26,232 [WARN] PackLoader:240 - Cannot read IP mode file for Infineon.AIROC-Wi-Fi-Bluetooth-STM32.1.5.1 +2023-11-04 15:21:26,278 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-MEMS1.10.0.0 +2023-11-04 15:21:26,376 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-FREERTOS.1.1.0 +2023-11-04 15:21:26,385 [WARN] PackLoader:240 - Cannot read IP mode file for portGmbH.I-Cube-SoM-uGOAL.1.1.0 +2023-11-04 15:21:26,387 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.X-CUBE-ALS.1.0.1 +2023-11-04 15:21:26,389 [WARN] PackLoader:240 - Cannot read IP mode file for STMicroelectronics.FP-ATR-ASTRA1.2.0.0 +2023-11-04 15:21:26,389 [INFO] ThirdParty:978 - Integrity check success = true +2023-11-04 15:21:26,390 [INFO] IntegrityCheckThread:100 - exiting critical section [integrity check] +2023-11-04 15:21:26,390 [INFO] IntegrityCheckThread:103 - End integrity checks thread +2023-11-04 15:21:26,949 [ERROR] DbExamplesSqlite:437 - Missing JSON key: board_cpn +2023-11-04 15:21:26,949 [ERROR] DbExamplesSqlite:437 - Missing JSON key: board_cpn +2023-11-04 15:21:26,949 [ERROR] DbExamplesSqlite:437 - Missing JSON key: board_cpn +2023-11-04 15:21:26,949 [ERROR] DbExamplesSqlite:437 - Missing JSON key: board_cpn +2023-11-04 15:21:26,958 [INFO] DbExamplesSqlite:395 - Ignored 27 examples not supported by CubeIDE +2023-11-04 15:21:26,958 [INFO] DbExamplesSqlite:396 - Found 7221 examples active +2023-11-04 15:21:26,958 [INFO] DbExamplesSqlite:397 - Found 777 examples obsolete +2023-11-04 15:21:26,958 [INFO] DbExamplesSqlite:398 - Found 0 examples under development +2023-11-04 15:21:26,958 [INFO] DbExamplesSqlite:399 - Found 74 examples not building +2023-11-04 15:21:26,960 [INFO] DbExamples:125 - Found 7268 examples +2023-11-04 15:21:26,973 [INFO] DbExamples:222 - Found 93 boards with related examples +2023-11-04 15:21:26,974 [INFO] DbExamples:235 - Found 79 MCUs with related examples +2023-11-04 15:21:26,998 [INFO] ApiDb:414 - User favorites file not found: /home/key/.stm32cubeide/favorites.examples.txt +2023-11-04 15:21:26,998 [INFO] DbExamples:250 - Set 0 / 0 favorites Examples +2023-11-04 15:21:27,075 [INFO] McuFinderGlobals:76 - Set McuFinderConnectedMode to true +2023-11-04 15:21:27,081 [INFO] MultiScanPanel:200 - Auto-refresh data requested => check proxy status ongoing +2023-11-04 15:21:27,084 [INFO] FinderPluginLoader:95 - Searching for filters in installed packs +2023-11-04 15:21:28,476 [INFO] LoadUrlFilesThread:185 - End of LoadServerUrlFiles without Thread +2023-11-04 15:21:28,482 [INFO] DetailPanel:341 - Set advertising image to /home/key/STM32Cube/Repository//en.prom-stm32h5-mcu-finder.jpg +2023-11-04 15:21:38,519 [INFO] MultiScanPanel:200 - Auto-refresh data requested => check proxy status ongoing +2023-11-04 15:21:38,637 [INFO] LoadUrlFilesThread:185 - End of LoadServerUrlFiles without Thread +2023-11-04 15:21:38,637 [INFO] DetailPanel:341 - Set advertising image to /home/key/STM32Cube/Repository//en.prom-stm32h5-mcu-finder.jpg +2023-11-04 15:21:38,647 [INFO] DbBoards:634 - Loading board mini-images... +2023-11-04 15:21:41,029 [INFO] DbBoards:657 - Loaded 190 board mini-images +2023-11-04 15:22:00,139 [INFO] BoardResultTable:719 - Mark Board NUCLEO-F031K6 as favorite +2023-11-04 15:22:23,640 [INFO] MainUpdater:2868 - connection check result : 10 +2023-11-04 15:22:23,640 [INFO] MainUpdater:2868 - connection check result : 10 +2023-11-04 15:22:23,659 [INFO] MicroXplorer:468 - Change Database Path : +2023-11-04 15:22:23,660 [INFO] MicroXplorer:498 - Change Database Version : DB.6.0.92 +2023-11-04 15:22:23,668 [WARN] ThirdParty:871 - waiting for thirdparty lock release [close project] +2023-11-04 15:22:23,668 [INFO] ThirdParty:873 - entering critical section [close project] +2023-11-04 15:22:23,670 [INFO] ThirdParty:883 - exiting critical section [close project] +2023-11-04 15:22:23,673 [INFO] PinOutPanel:1499 - setPackage(No Configuration,No Configuration) +2023-11-04 15:22:23,684 [INFO] UtilMem:75 - Begin LoadConfig() Used Memory: 954672080 Bytes (1073741824) +2023-11-04 15:22:23,689 [INFO] OpenFileManager:308 - Change cursor +2023-11-04 15:22:23,717 [INFO] ProjectFactory:402 - No CPN specified for board NUCLEO-F031K6 => set CPN to STM32F031K6T6 +2023-11-04 15:22:23,718 [INFO] Mcu:1946 - Initializing MCU STM32F031K6Tx STM32F031K6Tx STM32F031K6T6 +2023-11-04 15:22:24,296 [INFO] Context:659 - Trying to add GPIOservice into a context which must be forbidden +2023-11-04 15:22:24,551 [INFO] Rule:228 - rule 117617 - U5Cobra4M][GTZC] default value MPCBB3 and MPCBB5 - Not Secured memory - MPCBB1 is applicable +2023-11-04 15:22:24,552 [INFO] Rule:228 - rule 117617 - U5Cobra4M][GTZC] default value MPCBB3 and MPCBB5 - Not Secured memory - MPCBB1 is applicable +2023-11-04 15:22:24,552 [INFO] Rule:228 - rule 117617 - U5Cobra4M][GTZC] default value MPCBB3 and MPCBB5 - Not Secured memory - MPCBB2 is applicable +2023-11-04 15:22:24,552 [INFO] Rule:228 - rule 117617 - U5Cobra4M][GTZC] default value MPCBB3 and MPCBB5 - Not Secured memory - MPCBB2 is applicable +2023-11-04 15:22:24,552 [INFO] Rule:228 - rule 117617 - U5Cobra4M][GTZC] default value MPCBB3 and MPCBB5 - Not Secured memory - MPCBB3 is applicable +2023-11-04 15:22:24,552 [INFO] Rule:228 - rule 117617 - U5Cobra4M][GTZC] default value MPCBB3 and MPCBB5 - Not Secured memory - MPCBB3 is applicable +2023-11-04 15:22:24,552 [INFO] Rule:228 - rule 117617 - U5Cobra4M][GTZC] default value MPCBB3 and MPCBB5 - Not Secured memory - MPCBB4 is applicable +2023-11-04 15:22:24,552 [INFO] Rule:228 - rule 117617 - U5Cobra4M][GTZC] default value MPCBB3 and MPCBB5 - Not Secured memory - MPCBB4 is applicable +2023-11-04 15:22:24,552 [INFO] Rule:228 - rule 117617 - U5Cobra4M][GTZC] default value MPCBB3 and MPCBB5 - Secured memory - MPCBB1 is applicable +2023-11-04 15:22:24,552 [INFO] Rule:228 - rule 117617 - U5Cobra4M][GTZC] default value MPCBB3 and MPCBB5 - Secured memory - MPCBB2 is applicable +2023-11-04 15:22:24,552 [INFO] Rule:228 - rule 117617 - U5Cobra4M][GTZC] default value MPCBB3 and MPCBB5 - Secured memory - MPCBB3 is applicable +2023-11-04 15:22:24,552 [INFO] Rule:228 - rule 117617 - U5Cobra4M][GTZC] default value MPCBB3 and MPCBB5 - Secured memory - MPCBB4 is applicable +2023-11-04 15:22:24,552 [INFO] Rule:228 - rule 117617 - U5Cobra4M][GTZC] default value MPCBB3 and MPCBB5 - Privileged memory - MPCBB1 is applicable +2023-11-04 15:22:24,552 [INFO] Rule:228 - rule 117617 - U5Cobra4M][GTZC] default value MPCBB3 and MPCBB5 - Privileged memory - MPCBB2 is applicable +2023-11-04 15:22:24,552 [INFO] Rule:228 - rule 117617 - U5Cobra4M][GTZC] default value MPCBB3 and MPCBB5 - Privileged memory - MPCBB3 is applicable +2023-11-04 15:22:24,552 [INFO] Rule:228 - rule 117617 - U5Cobra4M][GTZC] default value MPCBB3 and MPCBB5 - Privileged memory - MPCBB4 is applicable +2023-11-04 15:22:24,553 [INFO] Rule:228 - rule 117617 - U5Cobra4M][GTZC] default value MPCBB3 and MPCBB5 - Not Privileged memory - MPCBB1 is applicable +2023-11-04 15:22:24,553 [INFO] Rule:228 - rule 117617 - U5Cobra4M][GTZC] default value MPCBB3 and MPCBB5 - Not Privileged memory - MPCBB2 is applicable +2023-11-04 15:22:24,553 [INFO] Rule:228 - rule 117617 - U5Cobra4M][GTZC] default value MPCBB3 and MPCBB5 - Not Privileged memory - MPCBB3 is applicable +2023-11-04 15:22:24,553 [INFO] Rule:228 - rule 117617 - U5Cobra4M][GTZC] default value MPCBB3 and MPCBB5 - Not Privileged memory - MPCBB4 is applicable +2023-11-04 15:22:24,553 [INFO] Rule:228 - rule 117617 - U5Cobra4M][GTZC] default value MPCBB3 and MPCBB5 - Privileged memory - MPCBB1 is applicable +2023-11-04 15:22:24,553 [INFO] Rule:228 - rule 117617 - U5Cobra4M][GTZC] default value MPCBB3 and MPCBB5 - Privileged memory - MPCBB2 is applicable +2023-11-04 15:22:24,553 [INFO] Rule:228 - rule 117617 - U5Cobra4M][GTZC] default value MPCBB3 and MPCBB5 - Privileged memory - MPCBB3 is applicable +2023-11-04 15:22:24,553 [INFO] Rule:228 - rule 117617 - U5Cobra4M][GTZC] default value MPCBB3 and MPCBB5 - Privileged memory - MPCBB4 is applicable +2023-11-04 15:22:24,553 [INFO] Rule:228 - rule 117617 - U5Cobra4M][GTZC] default value MPCBB3 and MPCBB5 - Privileged memory - MPCBB1 is applicable +2023-11-04 15:22:24,553 [INFO] Rule:228 - rule 117617 - U5Cobra4M][GTZC] default value MPCBB3 and MPCBB5 - Privileged memory - MPCBB2 is applicable +2023-11-04 15:22:24,553 [INFO] Rule:228 - rule 117617 - U5Cobra4M][GTZC] default value MPCBB3 and MPCBB5 - Privileged memory - MPCBB3 is applicable +2023-11-04 15:22:24,553 [INFO] Rule:228 - rule 117617 - U5Cobra4M][GTZC] default value MPCBB3 and MPCBB5 - Privileged memory - MPCBB4 is applicable +2023-11-04 15:22:24,553 [INFO] Rule:228 - rule 117617 - U5Cobra4M][GTZC] default value MPCBB3 and MPCBB5 - Not Privileged memory - MPCBB1 is applicable +2023-11-04 15:22:24,553 [INFO] Rule:228 - rule 117617 - U5Cobra4M][GTZC] default value MPCBB3 and MPCBB5 - Not Privileged memory - MPCBB2 is applicable +2023-11-04 15:22:24,554 [INFO] Rule:228 - rule 117617 - U5Cobra4M][GTZC] default value MPCBB3 and MPCBB5 - Not Privileged memory - MPCBB3 is applicable +2023-11-04 15:22:24,554 [INFO] Rule:228 - rule 117617 - U5Cobra4M][GTZC] default value MPCBB3 and MPCBB5 - Not Privileged memory - MPCBB4 is applicable +2023-11-04 15:22:24,554 [INFO] Rule:228 - rule 117617 - U5Cobra4M][GTZC] default value MPCBB3 and MPCBB5 - Privileged memory - MPCBB1 is applicable +2023-11-04 15:22:24,554 [INFO] Rule:228 - rule 117617 - U5Cobra4M][GTZC] default value MPCBB3 and MPCBB5 - Privileged memory - MPCBB2 is applicable +2023-11-04 15:22:24,554 [INFO] Rule:228 - rule 117617 - U5Cobra4M][GTZC] default value MPCBB3 and MPCBB5 - Privileged memory - MPCBB3 is applicable +2023-11-04 15:22:24,554 [INFO] Rule:228 - rule 117617 - U5Cobra4M][GTZC] default value MPCBB3 and MPCBB5 - Privileged memory - MPCBB4 is applicable +2023-11-04 15:22:24,554 [INFO] Rule:228 - rule Rename SubGHz_Phy SUBGHZ_APPLICATION SUBGHZ_PINGPONG to SUBGHZ_ADV_APPLICATION is applicable +2023-11-04 15:22:24,554 [INFO] Rule:228 - rule Rename Enabled to IBEACON is applicable +2023-11-04 15:22:24,554 [INFO] Rule:228 - rule GTZC_S instance for project manager is applicable +2023-11-04 15:22:24,554 [INFO] Rule:228 - rule GTZC_S instance for context M33S is applicable +2023-11-04 15:22:24,554 [INFO] Rule:228 - rule GTZC_S instance value for IP GTZC is applicable +2023-11-04 15:22:24,554 [INFO] Rule:228 - rule GTZC_S instance for mcu.IP is applicable +2023-11-04 15:22:24,554 [INFO] Rule:228 - rule GTZC_S instance for VP is applicable +2023-11-04 15:22:24,555 [INFO] Rule:228 - rule GTZC_S instance for signal is applicable +2023-11-04 15:22:24,555 [INFO] Rule:228 - rule GTZC_S instance for mcu.Pin is applicable +2023-11-04 15:22:24,555 [INFO] Rule:228 - rule GTZC_S instance for VP is applicable +2023-11-04 15:22:24,555 [INFO] Rule:228 - rule GTZC_S instance for signal is applicable +2023-11-04 15:22:24,555 [INFO] Rule:228 - rule GTZC_S instance for mcu is applicable +2023-11-04 15:22:24,555 [INFO] Rule:228 - rule GTZC_S instance for mcu.Pin is applicable +2023-11-04 15:22:24,555 [INFO] Rule:228 - rule GTZC_S instance value for IP GTZC is applicable +2023-11-04 15:22:24,555 [INFO] Rule:228 - rule GTZC_S instance for project manager is applicable +2023-11-04 15:22:24,555 [INFO] Rule:228 - rule GTZC_S instance for context M33S is applicable +2023-11-04 15:22:24,555 [INFO] Rule:228 - rule GTZC_S instance for VP is applicable +2023-11-04 15:22:24,555 [INFO] Rule:228 - rule GTZC_S instance for signal is applicable +2023-11-04 15:22:24,555 [INFO] Rule:228 - rule SPDIFRX instance for mcu is applicable +2023-11-04 15:22:24,555 [INFO] Rule:228 - rule Rename Tracer Mode is applicable +2023-11-04 15:22:24,555 [INFO] Rule:228 - rule SPDIFRX instance value for IP SPDIFRX is applicable +2023-11-04 15:22:24,555 [INFO] Rule:228 - rule SPDIFRX instance for signal is applicable +2023-11-04 15:22:24,556 [INFO] Rule:228 - rule SPDIFRX instance for project manager is applicable +2023-11-04 15:22:24,556 [INFO] Rule:228 - rule SPDIFRX instance for project manager is applicable +2023-11-04 15:22:24,556 [INFO] Rule:228 - rule ADC Scan fix with FW F7 is applicable +2023-11-04 15:22:24,556 [INFO] Rule:228 - rule ADC Scan fix with FW F7 is applicable +2023-11-04 15:22:24,556 [INFO] Rule:228 - rule DMA-DAC mode for DIE422 is applicable +2023-11-04 15:22:24,556 [INFO] Rule:228 - rule DMA-DAC mode for DIE438 is applicable +2023-11-04 15:22:24,556 [INFO] Rule:228 - rule DMA-DAC mode for DIE432 or DIE446 is applicable +2023-11-04 15:22:24,556 [INFO] Rule:228 - rule DFSDM instance value for IP DFSDM is applicable +2023-11-04 15:22:24,556 [INFO] Rule:228 - rule DFSDM instance for mcu is applicable +2023-11-04 15:22:24,556 [INFO] Rule:228 - rule DFSDM instance for VP is applicable +2023-11-04 15:22:24,556 [INFO] Rule:228 - rule DFSDM instance for signal is applicable +2023-11-04 15:22:24,556 [INFO] Rule:228 - rule DFSDM instance for shared is applicable +2023-11-04 15:22:24,556 [INFO] Rule:228 - rule BreakInputSource parameter for IP Timer is applicable +2023-11-04 15:22:24,556 [INFO] Rule:228 - rule Sourcebreak parameter for IP Timer is applicable +2023-11-04 15:22:24,557 [INFO] Rule:228 - rule Sourcebreak parameter for IP Timer is applicable +2023-11-04 15:22:24,557 [INFO] Rule:228 - rule DFSDM for PCC is applicable +2023-11-04 15:22:24,557 [INFO] Rule:228 - rule Serial_Wire Mode is applicable +2023-11-04 15:22:24,557 [INFO] Rule:228 - rule JTAG_4_pins Mode is applicable +2023-11-04 15:22:24,557 [INFO] Rule:228 - rule JTAG_5_pins Mode is applicable +2023-11-04 15:22:24,557 [INFO] Rule:228 - rule Trace_Asynchronous_SW Mode is applicable +2023-11-04 15:22:24,557 [INFO] Rule:228 - rule Trace_Synchro_1bit_JTAG Mode is applicable +2023-11-04 15:22:24,557 [INFO] Rule:228 - rule Trace_Synchro_2bits_JTAG Mode is applicable +2023-11-04 15:22:24,557 [INFO] Rule:228 - rule Trace_Synchro_4bits_JTAG Mode is applicable +2023-11-04 15:22:24,557 [INFO] Rule:228 - rule Trace_Synchro_1bit_SW Mode is applicable +2023-11-04 15:22:24,557 [INFO] Rule:228 - rule Trace_Synchro_2bits_SW Mode is applicable +2023-11-04 15:22:24,557 [INFO] Rule:228 - rule Trace_Synchro_4bits_SW Mode is applicable +2023-11-04 15:22:24,557 [INFO] Rule:228 - rule SYS_WakeUp0 Mode is applicable +2023-11-04 15:22:24,557 [INFO] Rule:228 - rule SYS_WakeUp0 Mode for STM32F446 is applicable +2023-11-04 15:22:24,558 [INFO] Rule:228 - rule SYS_WakeUp1 Mode is applicable +2023-11-04 15:22:24,558 [INFO] Rule:228 - rule SYS_WakeUp1 Mode for STM32F446 is applicable +2023-11-04 15:22:24,558 [INFO] Rule:228 - rule SYS_WakeUp2 Mode is applicable +2023-11-04 15:22:24,558 [INFO] Rule:228 - rule SYS_WakeUp3 Mode is applicable +2023-11-04 15:22:24,558 [INFO] Rule:228 - rule SYS_WakeUp4 Mode is applicable +2023-11-04 15:22:24,558 [INFO] Rule:228 - rule SYS_WakeUp5 Mode is applicable +2023-11-04 15:22:24,558 [INFO] Rule:228 - rule SYS_WakeUp6 Mode is applicable +2023-11-04 15:22:24,558 [INFO] Rule:228 - rule SYS_WakeUp7 Mode is applicable +2023-11-04 15:22:24,558 [INFO] Rule:228 - rule WakeUp0 Mode is applicable +2023-11-04 15:22:24,558 [INFO] Rule:228 - rule WakeUp0 SIGNAL is applicable +2023-11-04 15:22:24,558 [INFO] Rule:228 - rule WakeUp1 Mode is applicable +2023-11-04 15:22:24,558 [INFO] Rule:228 - rule WakeUp1 SIGNAL is applicable +2023-11-04 15:22:24,558 [INFO] Rule:228 - rule WakeUp2 Mode is applicable +2023-11-04 15:22:24,559 [INFO] Rule:228 - rule WakeUp2 SIGNAL is applicable +2023-11-04 15:22:24,559 [INFO] Rule:228 - rule WakeUp4 Mode is applicable +2023-11-04 15:22:24,559 [INFO] Rule:228 - rule WakeUp4 SIGNAL is applicable +2023-11-04 15:22:24,559 [INFO] Rule:228 - rule WakeUp5 Mode is applicable +2023-11-04 15:22:24,559 [INFO] Rule:228 - rule WakeUp5 SIGNAL is applicable +2023-11-04 15:22:24,559 [INFO] Rule:228 - rule Mode_PVD_Ext is applicable +2023-11-04 15:22:24,559 [INFO] Rule:228 - rule Mode_PVD_Int is applicable +2023-11-04 15:22:24,559 [INFO] Rule:228 - rule Add RTC Activate Clock Source is applicable +2023-11-04 15:22:24,559 [INFO] Rule:228 - rule Add RTC Activate Calendar 1 is applicable +2023-11-04 15:22:24,559 [INFO] Rule:228 - rule Add RTC Activate Calendar 2 is applicable +2023-11-04 15:22:24,559 [INFO] Rule:228 - rule Add RTC Activate Calendar 3 is applicable +2023-11-04 15:22:24,559 [INFO] Rule:228 - rule UART/USART TX Mode is applicable +2023-11-04 15:22:24,559 [INFO] Rule:228 - rule UART/USART RX Mode is applicable +2023-11-04 15:22:24,559 [INFO] Rule:228 - rule UART/USART RX TX Mode is applicable +2023-11-04 15:22:24,559 [INFO] Rule:228 - rule UART/USART PARITY NONE is applicable +2023-11-04 15:22:24,560 [INFO] Rule:228 - rule UART/USART PARITY EVEN is applicable +2023-11-04 15:22:24,560 [INFO] Rule:228 - rule UART/USART PARITY ODD is applicable +2023-11-04 15:22:24,560 [INFO] Rule:228 - rule USART StopBits 1 is applicable +2023-11-04 15:22:24,560 [INFO] Rule:228 - rule USART StopBits 2 is applicable +2023-11-04 15:22:24,560 [INFO] Rule:228 - rule USART StopBits 1.5 is applicable +2023-11-04 15:22:24,560 [INFO] Rule:228 - rule USART StopBits 0.5 is applicable +2023-11-04 15:22:24,560 [INFO] Rule:228 - rule UART/USART WORD LENGTH 7 is applicable +2023-11-04 15:22:24,560 [INFO] Rule:228 - rule UART/USART WORD LENGTH 8 is applicable +2023-11-04 15:22:24,560 [INFO] Rule:228 - rule UART/USART WORD LENGTH 9 is applicable +2023-11-04 15:22:24,560 [INFO] Rule:228 - rule Rename FMC NAND NCE signal is applicable +2023-11-04 15:22:24,560 [INFO] Rule:228 - rule Rename FMC NAND INT signal is applicable +2023-11-04 15:22:24,560 [INFO] Rule:228 - rule Change Default Value for LSE Drive Capability for WB family is applicable +2023-11-04 15:22:24,560 [INFO] Rule:228 - rule Change Default Value for ADC Clock Prescaler G0 family is applicable +2023-11-04 15:22:24,560 [INFO] Rule:228 - rule Change Default Value for ADC ExternalTrigConv L4 family is applicable +2023-11-04 15:22:24,560 [INFO] Rule:228 - rule Change Default Value for ADC ExternalTrigInjecConv L4 family is applicable +2023-11-04 15:22:24,561 [INFO] Rule:228 - rule Change Default Value for ADC ExternalTrigConv F3 family is applicable +2023-11-04 15:22:24,561 [INFO] Rule:228 - rule Change Default Value for ADC ExternalTrigInjecConv F3 family is applicable +2023-11-04 15:22:24,561 [INFO] Rule:228 - rule Change Default Value for ADC ExternalTrigConv Goldfish serie is applicable +2023-11-04 15:22:24,561 [INFO] Rule:228 - rule Change Default Value for ADC ExternalTrigInjecConv Goldfish serie is applicable +2023-11-04 15:22:24,561 [INFO] Rule:228 - rule Change Default Value for ADC ExternalTrigConv L0 family is applicable +2023-11-04 15:22:24,561 [INFO] Rule:228 - rule Change Default Value for ADC ExternalTrigConv F0 family is applicable +2023-11-04 15:22:24,561 [INFO] Rule:228 - rule Change Default Value for ADC ExternalTrigConvn L1 family is applicable +2023-11-04 15:22:24,561 [INFO] Rule:228 - rule Change Default Value for ADC ExternalTrigInjecConv L1 family is applicable +2023-11-04 15:22:24,561 [INFO] Rule:228 - rule Change Default Value for ADC ExternalTrigConv F1 family is applicable +2023-11-04 15:22:24,561 [INFO] Rule:228 - rule Change Default Value for ADC ExternalTrigInjecConv F1 family is applicable +2023-11-04 15:22:24,561 [INFO] Rule:228 - rule Change Default Value for ADC ExternalTrigConv F7 family is applicable +2023-11-04 15:22:24,561 [INFO] Rule:228 - rule Change Default Value for ADC ExternalTrigInjecConv F7 family is applicable +2023-11-04 15:22:24,561 [INFO] Rule:228 - rule Change Default Value for ADC ExternalTrigConv F4 and F2 family is applicable +2023-11-04 15:22:24,561 [INFO] Rule:228 - rule Change Default Value for ADC ExternalTrigInjecConv F4 and F2 family is applicable +2023-11-04 15:22:24,561 [INFO] Rule:228 - rule ADC SamplingTime fix with FW L0 is applicable +2023-11-04 15:22:24,562 [INFO] Rule:228 - rule ADC SamplingTime fix with FW L0 is applicable +2023-11-04 15:22:24,562 [INFO] Rule:228 - rule ADC SamplingTime fix with FW L0 is applicable +2023-11-04 15:22:24,562 [INFO] Rule:228 - rule ADC SamplingTime fix with FW L0 is applicable +2023-11-04 15:22:24,562 [INFO] Rule:228 - rule ADC SamplingTime fix with FW L0 is applicable +2023-11-04 15:22:24,562 [INFO] Rule:228 - rule ADC SamplingTime fix with FW L0 is applicable +2023-11-04 15:22:24,562 [INFO] Rule:228 - rule Rename USB_OE Signal is applicable +2023-11-04 15:22:24,562 [INFO] Rule:228 - rule Rename Activate_OE Mode is applicable +2023-11-04 15:22:24,562 [INFO] Rule:228 - rule Rename DIE462/DIE415 pin PC14/OSC32_IN -> PC14-OSC32_IN (PC14) is applicable +2023-11-04 15:22:24,562 [INFO] Rule:228 - rule Rename DIE462/DIE415 pin PC15/OSC32_OUT -> PC15-OSC32_OUT (PC15) is applicable +2023-11-04 15:22:24,562 [INFO] Rule:228 - rule Rename DIE462/DIE415 pin PH0/OSC_IN -> PH0-OSC_IN (PH0) is applicable +2023-11-04 15:22:24,562 [INFO] Rule:228 - rule Rename DIE462/DIE415 pin PH1/OSC_OUT -> PH1-OSC_OUT (PH1) is applicable +2023-11-04 15:22:24,562 [INFO] Rule:228 - rule Rename DIE462 pin PA13 -> PA13 (JTMS/SWDIO) is applicable +2023-11-04 15:22:24,562 [INFO] Rule:228 - rule Rename DIE415 pin PA13 -> PA13 (JTMS/SWDIO) is applicable +2023-11-04 15:22:24,562 [INFO] Rule:228 - rule Rename DIE462 pin PA14 -> PA14 (JTCK/SWCLK) is applicable +2023-11-04 15:22:24,562 [INFO] Rule:228 - rule Rename DIE415 pin PA14 -> PA14 (JTCK/SWCLK) is applicable +2023-11-04 15:22:24,563 [INFO] Rule:228 - rule Rename DIE462/DIE415 pin PA15 -> PA15 (JTDI) is applicable +2023-11-04 15:22:24,563 [INFO] Rule:228 - rule Rename DIE462 pin PB3 -> PB3 (JTD0/TRACESWO) is applicable +2023-11-04 15:22:24,563 [INFO] Rule:228 - rule Rename DIE415 pin PB3 -> PB3 (JTD0-TRACESWO) is applicable +2023-11-04 15:22:24,563 [INFO] Rule:228 - rule Rename DIE462/DIE415 pin PB4 -> PB4 (NJTRST) is applicable +2023-11-04 15:22:24,563 [INFO] Rule:228 - rule Rename DIE462 pin PH3/BOOT0 -> PH3-BOOT0 (BOOT0) is applicable +2023-11-04 15:22:24,563 [INFO] Rule:228 - rule Rename CRYP DataEncryptionTypesList to Algorithm is applicable +2023-11-04 15:22:24,563 [INFO] Rule:228 - rule Rename AES DataEncryptionTypesList to Algorithm is applicable +2023-11-04 15:22:24,563 [INFO] Rule:228 - rule Rename TDESECB to CRYP_TDES_ECB is applicable +2023-11-04 15:22:24,563 [INFO] Rule:228 - rule Rename TDESCBC to CRYP_TDES_CBC is applicable +2023-11-04 15:22:24,563 [INFO] Rule:228 - rule Rename DESECB to CRYP_DES_ECB is applicable +2023-11-04 15:22:24,563 [INFO] Rule:228 - rule Rename DESCBC to CRYP_DES_CBC is applicable +2023-11-04 15:22:24,563 [INFO] Rule:228 - rule Rename AESECB to CRYP_AES_ECB is applicable +2023-11-04 15:22:24,563 [INFO] Rule:228 - rule Rename AESCBC to CRYP_AES_CBC is applicable +2023-11-04 15:22:24,563 [INFO] Rule:228 - rule Rename AESCTR to CRYP_AES_CTR is applicable +2023-11-04 15:22:24,563 [INFO] Rule:228 - rule Rename AESGCM to CRYP_AES_GCM is applicable +2023-11-04 15:22:24,563 [INFO] Rule:228 - rule Rename AESCCM to CRYP_AES_CCM is applicable +2023-11-04 15:22:24,564 [INFO] Rule:228 - rule Rename CAN TimeSeg1 to BS1 is applicable +2023-11-04 15:22:24,564 [INFO] Rule:228 - rule Rename CAN TimeSeg2 to BS2 is applicable +2023-11-04 15:22:24,564 [INFO] Rule:228 - rule Rename CAN SyncJumpWidth to SJW is applicable +2023-11-04 15:22:24,564 [INFO] Rule:228 - rule TimeTriggeredMode to TTCM is applicable +2023-11-04 15:22:24,564 [INFO] Rule:228 - rule Rename CAN AutoBusOff to ABOM is applicable +2023-11-04 15:22:24,564 [INFO] Rule:228 - rule Rename CAN AutoWakeUp to AWUM is applicable +2023-11-04 15:22:24,564 [INFO] Rule:228 - rule Rename CAN AutoRetransmission to NART is applicable +2023-11-04 15:22:24,564 [INFO] Rule:228 - rule Rename CAN ReceiveFifoLocked to RFLM is applicable +2023-11-04 15:22:24,564 [INFO] Rule:228 - rule Rename CAN TransmitFifoPriority to TXFP is applicable +2023-11-04 15:22:24,564 [INFO] Rule:228 - rule Rename HRTIMER HRTIM_OUTPUTFAULTLEVEL_HIGH in HRTIMER HRTIM_OUTPUTFAULTLEVEL_HIGHZ is applicable +2023-11-04 15:22:24,564 [INFO] Rule:228 - rule Rename TIMER TIM_CLEARINPUTSOURCE_OCREFCLR in TIMER TIM_CLEARINPUTSOURCE_NONE for F7 family is applicable +2023-11-04 15:22:24,564 [INFO] Rule:228 - rule FDCAN_R1 - Rename FDCAN mode Master into Classic is applicable +2023-11-04 15:22:24,564 [INFO] Rule:228 - rule FDCAN_R2 - Rename FDCAN mode Slave into Classic is applicable +2023-11-04 15:22:24,564 [INFO] Rule:228 - rule FDCAN1_R3 - if PA10.Mode=FullDuplex, add Pin PA12 is applicable +2023-11-04 15:22:24,564 [INFO] Rule:228 - rule FDCAN1_R3 - if PA9.Mode=FullDuplex, add Pin PA11 is applicable +2023-11-04 15:22:24,564 [INFO] Rule:228 - rule FDCAN1_R3 - Alternatepin_1 - if PE1.Mode=FullDuplex, add Pin PB9 is applicable +2023-11-04 15:22:24,565 [INFO] Rule:228 - rule FDCAN1_R3 - Alternatepin_1 - if PE0.Mode=FullDuplex, add Pin PB8 is applicable +2023-11-04 15:22:24,565 [INFO] Rule:228 - rule FDCAN1_R3 - Alternatepin_2 - if PD5.Mode=FullDuplex, add Pin PD1 is applicable +2023-11-04 15:22:24,565 [INFO] Rule:228 - rule FDCAN1_R3 - Alternatepin_2 - if PD4.Mode=FullDuplex, add Pin PD0 is applicable +2023-11-04 15:22:24,565 [INFO] Rule:228 - rule FDCAN1_R4 - Rename Mode FullDuplex into Enable FDCAN_TXFD for pin PA10 is applicable +2023-11-04 15:22:24,565 [INFO] Rule:228 - rule FDCAN1_R4 - Rename Mode FullDuplex into Enable FDCAN_TXFD for pin PA9 is applicable +2023-11-04 15:22:24,565 [INFO] Rule:228 - rule FDCAN1_R4 - Alternatepin_1 - Rename Mode FullDuplex into Enable FDCAN_TXFD for pin PE1 is applicable +2023-11-04 15:22:24,565 [INFO] Rule:228 - rule FDCAN1_R4 - Alternatepin_1 - Rename Mode FullDuplex into Enable FDCAN_TXFD for pin PE0 is applicable +2023-11-04 15:22:24,565 [INFO] Rule:228 - rule FDCAN1_R4 - Alternatepin_2 - Rename Mode FullDuplex into Enable FDCAN_TXFD for pin PD5 is applicable +2023-11-04 15:22:24,565 [INFO] Rule:228 - rule FDCAN1_R4 - Alternatepin_2 - Rename Mode FullDuplex into Enable FDCAN_TXFD for pin PD4 is applicable +2023-11-04 15:22:24,565 [INFO] Rule:228 - rule FDCAN2_R3 - if PD10.Mode=FullDuplex, add Pin PB13 is applicable +2023-11-04 15:22:24,565 [INFO] Rule:228 - rule FDCAN2_R3 - if PD9.Mode=FullDuplex, add Pin PB12 is applicable +2023-11-04 15:22:24,565 [INFO] Rule:228 - rule FDCAN2_R3 - Alternatepin_1 - if PB7.Mode=FullDuplex, add Pin PB6 is applicable +2023-11-04 15:22:24,565 [INFO] Rule:228 - rule FDCAN2_R3 - Alternatepin_1 - if PD9.Mode=FullDuplex, add Pin PB12 is applicable +2023-11-04 15:22:24,565 [INFO] Rule:228 - rule FDCAN2_R4 - Rename Mode FullDuplex into Enable FDCAN_TXFD for pin PD10 is applicable +2023-11-04 15:22:24,565 [INFO] Rule:228 - rule FDCAN2_R4 - Rename Mode FullDuplex into Enable FDCAN_TXFD for pin PD9 is applicable +2023-11-04 15:22:24,566 [INFO] Rule:228 - rule FDCAN2_R4 - Alternatepin_1 - Rename Mode FullDuplex into Enable FDCAN_TXFD for pin PB7 is applicable +2023-11-04 15:22:24,566 [INFO] Rule:228 - rule FDCAN2_R4 - Alternatepin_1 - Rename Mode FullDuplex into Enable FDCAN_TXFD for pin PD6 is applicable +2023-11-04 15:22:24,566 [INFO] Rule:228 - rule USART TxPinLevelInvertParam Mode is applicable +2023-11-04 15:22:24,566 [INFO] Rule:228 - rule USART RxPinLevelInvertParam Mode is applicable +2023-11-04 15:22:24,566 [INFO] Rule:228 - rule USART DataInvertParam Mode is applicable +2023-11-04 15:22:24,566 [INFO] Rule:228 - rule USART SwapParam Mode is applicable +2023-11-04 15:22:24,566 [INFO] Rule:228 - rule USART OverrunDisableParam Mode is applicable +2023-11-04 15:22:24,566 [INFO] Rule:228 - rule USART DMADisableonRxErrorParam Mode is applicable +2023-11-04 15:22:24,566 [INFO] Rule:228 - rule USART MSBFirstParam Mode is applicable +2023-11-04 15:22:24,566 [INFO] Rule:228 - rule Update MwName for USB_DEVICE is applicable +2023-11-04 15:22:24,566 [INFO] Rule:228 - rule Change PWR_Regulator_Voltage_Scale Default Value for RCC H7 family is applicable +2023-11-04 15:22:24,566 [INFO] Rule:228 - rule UART/USART IPParameter rename Prescaler parameter to ClockPrescaler is applicable +2023-11-04 15:22:24,566 [INFO] Rule:228 - rule UART/USART Prescaler rename Prescaler parameter to ClockPrescaler is applicable +2023-11-04 15:22:24,566 [INFO] Rule:228 - rule TIM1CLockSelection is applicable +2023-11-04 15:22:24,566 [INFO] Rule:228 - rule TIM15CLockSelection is applicable +2023-11-04 15:22:24,566 [INFO] Rule:228 - rule align RCC SDMMC3CLockSelection default value on MP1 is applicable +2023-11-04 15:22:24,567 [INFO] Rule:228 - rule align RCC SDMMC12CLockSelection default value on MP1 is applicable +2023-11-04 15:22:24,567 [INFO] Rule:228 - rule align RCC QSPICLockSelection default value on MP1 is applicable +2023-11-04 15:22:24,567 [INFO] Rule:228 - rule align RCC QSPICLockSelection default value on MP1 is applicable +2023-11-04 15:22:24,567 [INFO] Rule:228 - rule align RCC SPI6CLockSelection default value on MP1 is applicable +2023-11-04 15:22:24,567 [INFO] Rule:228 - rule align RCC LPTIM23CLockSelection default value on MP1 is applicable +2023-11-04 15:22:24,567 [INFO] Rule:228 - rule align RCC LPTIM1CLockSelection default value on MP1 is applicable +2023-11-04 15:22:24,567 [INFO] Rule:228 - rule align RCC USART1CLockSelection default value on MP1 is applicable +2023-11-04 15:22:24,567 [INFO] Rule:228 - rule align RCC USART24CLockSelection default value on MP1 is applicable +2023-11-04 15:22:24,567 [INFO] Rule:228 - rule align RCC USART6CLockSelection default value on MP1 is applicable +2023-11-04 15:22:24,567 [INFO] Rule:228 - rule align RCC UART78CLockSelection default value on MP1 is applicable +2023-11-04 15:22:24,567 [INFO] Rule:228 - rule align RCC USART35CLockSelection default value on MP1 is applicable +2023-11-04 15:22:24,567 [INFO] Rule:228 - rule align RCC SPI45CLockSelection default value on MP1 is applicable +2023-11-04 15:22:24,567 [INFO] Rule:228 - rule align RCC I2C46CLockSelection BCLK value on MP1 is applicable +2023-11-04 15:22:24,567 [INFO] Rule:228 - rule align RCC SPI45CLockSelection default value on MP1 is applicable +2023-11-04 15:22:24,567 [INFO] Rule:228 - rule align RCC I2C12CLockSelection default value on MP1 is applicable +2023-11-04 15:22:24,568 [INFO] Rule:228 - rule align RCC I2C35CLockSelection default value on MP1 is applicable +2023-11-04 15:22:24,568 [INFO] Rule:228 - rule align RCC LPTIM45CLockSelection default value on MP1 is applicable +2023-11-04 15:22:24,568 [INFO] Rule:228 - rule Rename DCMI PIXCK signal is applicable +2023-11-04 15:22:24,568 [INFO] Rule:228 - rule Change Default Value for I2C46CLockSelection MP1 family is applicable +2023-11-04 15:22:24,568 [INFO] Rule:228 - rule Change Default Value for UART for G4, G0 and WB families is applicable +2023-11-04 15:22:24,568 [INFO] Rule:228 - rule Change Default Value for USART for G4, G0 and WB families is applicable +2023-11-04 15:22:24,568 [INFO] Rule:228 - rule Change Default Value for USART for G4 family is applicable +2023-11-04 15:22:24,568 [INFO] Rule:228 - rule Change USART1CLockSelection refparam name for MP1 is applicable +2023-11-04 15:22:24,568 [INFO] Rule:228 - rule Change USART2CLockSelection refparam name for MP1 is applicable +2023-11-04 15:22:24,568 [INFO] Rule:228 - rule Change USART3CLockSelection refparam name for MP1 is applicable +2023-11-04 15:22:24,568 [INFO] Rule:228 - rule Change UART4CLockSelection refparam name for MP1 is applicable +2023-11-04 15:22:24,568 [INFO] Rule:228 - rule Change UART5CLockSelection refparam name for MP1 is applicable +2023-11-04 15:22:24,568 [INFO] Rule:228 - rule Change LPUART1CLockSelection refparam name for MP1 is applicable +2023-11-04 15:22:24,568 [INFO] Rule:228 - rule Change LPTIM1CLockSelection refparam name for MP1 is applicable +2023-11-04 15:22:24,568 [INFO] Rule:228 - rule Change LPTIM2CLockSelection refparam name for MP1 is applicable +2023-11-04 15:22:24,568 [INFO] Rule:228 - rule Change RCC_MCO1Source refparam name for MP1 is applicable +2023-11-04 15:22:24,569 [INFO] Rule:228 - rule Change LSCOSource1 refparam name for MP1 is applicable +2023-11-04 15:22:24,569 [INFO] Rule:228 - rule Change SMPSCLockSelection refparam name for MP1 is applicable +2023-11-04 15:22:24,569 [INFO] Rule:228 - rule Change LPTIM3CLockSelection refparam name for MP1 is applicable +2023-11-04 15:22:24,569 [INFO] Rule:228 - rule Change MPCBB* Default Template Mode to Parameters is applicable +2023-11-04 15:22:24,569 [INFO] Rule:228 - rule Change MPCWM* or MPCBB* Secure Mode to Parameters is applicable +2023-11-04 15:22:24,569 [INFO] Rule:228 - rule Change MPCWM* or MPCBB* No Secure Mode to Parameters is applicable +2023-11-04 15:22:24,569 [INFO] Rule:228 - rule Change TZSC IP Secure Mode to Parameters is applicable +2023-11-04 15:22:24,569 [INFO] Rule:228 - rule Change TZSC IP No Secure Mode to Parameters is applicable +2023-11-04 15:22:24,569 [INFO] Rule:228 - rule Change TZSC IP Privilege Mode to Parameters is applicable +2023-11-04 15:22:24,569 [INFO] Rule:228 - rule Change TZSC IP No Privilege Mode to Parameters is applicable +2023-11-04 15:22:24,569 [INFO] Rule:228 - rule Change TZIC IT Secure Mode to Parameters is applicable +2023-11-04 15:22:24,569 [INFO] Rule:228 - rule Change TZIC IT No Secure Mode to Parameters is applicable +2023-11-04 15:22:24,569 [INFO] Rule:228 - rule Add MPCBB1_NonSecureArea_Start_Address value with referenced to MPCBB1_NonSecureArea_Start value is applicable +2023-11-04 15:22:24,569 [INFO] Rule:228 - rule Add MPCBB2_NonSecureArea_Start_Address value with referenced to MPCBB2_NonSecureArea_Start value is applicable +2023-11-04 15:22:24,569 [INFO] Rule:228 - rule Add MPCWM1_NonSecureArea*_Start_Address value with referenced to MPCWM1_NonSecureArea*_Start value is applicable +2023-11-04 15:22:24,569 [INFO] Rule:228 - rule Add MPCWM2_NonSecureArea*_Start_Address value with referenced to MPCWM2_NonSecureArea*_Start value is applicable +2023-11-04 15:22:24,570 [INFO] Rule:228 - rule Add MPCWM3_NonSecureArea_Start_Address value with referenced to MPCWM3_NonSecureArea_Start value is applicable +2023-11-04 15:22:24,570 [INFO] Rule:228 - rule Change Default Value for PLL1UserDefinedConfig is applicable +2023-11-04 15:22:24,570 [INFO] Rule:228 - rule Change GPIO_PuPd Default Value for USART in async mode is applicable +2023-11-04 15:22:24,570 [INFO] Rule:228 - rule Change SMPSDivider Default Value is applicable +2023-11-04 15:22:24,570 [INFO] Rule:228 - rule OPAMP is applicable +2023-11-04 15:22:24,570 [INFO] Rule:228 - rule LPUART IPParameter rename Prescaler parameter to ClockPrescaler for STM32H7 is applicable +2023-11-04 15:22:24,570 [INFO] Rule:228 - rule LPUART IPParameter rename Prescaler parameter to ClockPrescaler for STM32H7 is applicable +2023-11-04 15:22:24,570 [INFO] Rule:228 - rule LPUART IPParameter rename Prescaler parameter to ClockPrescaler for STM32WB is applicable +2023-11-04 15:22:24,570 [INFO] Rule:228 - rule LPUART IPParameter rename Prescaler parameter to ClockPrescaler for STM32WB is applicable +2023-11-04 15:22:24,570 [INFO] Rule:228 - rule LPUART IPParameter rename Prescaler parameter to ClockPrescaler for STM32G4 is applicable +2023-11-04 15:22:24,570 [INFO] Rule:228 - rule LPUART IPParameter rename Prescaler parameter to ClockPrescaler for STM32G4 is applicable +2023-11-04 15:22:24,570 [INFO] Rule:228 - rule LPUART IPParameter rename Prescaler parameter to ClockPrescaler for STM32L5 is applicable +2023-11-04 15:22:24,570 [INFO] Rule:228 - rule LPUART IPParameter rename Prescaler parameter to ClockPrescaler for STM32L5 is applicable +2023-11-04 15:22:24,570 [INFO] Rule:228 - rule LPUART IPParameter rename Prescaler parameter to ClockPrescaler for STM32G4 is applicable +2023-11-04 15:22:24,570 [INFO] Rule:228 - rule LPUART IPParameter rename Prescaler parameter to ClockPrescaler for STM32G4 is applicable +2023-11-04 15:22:24,570 [INFO] Rule:228 - rule USB device lib V2.5.3 for L0 rename USBD_SUPPORT_USER_STRING parameter to USBD_SUPPORT_USER_STRING_DESC4 is applicable +2023-11-04 15:22:24,570 [INFO] Rule:228 - rule I2SCLockSelection clock entry align is applicable +2023-11-04 15:22:24,571 [INFO] Rule:228 - rule Assign TIMx context if used as SYS timebase is applicable +2023-11-04 15:22:24,571 [INFO] Rule:228 - rule Change GPIO_Pu Default Value for I2C is applicable +2023-11-04 15:22:24,571 [INFO] Rule:228 - rule Change GPIO_Pu Default Value for SMBus is applicable +2023-11-04 15:22:24,571 [INFO] Rule:228 - rule change FDCAN default value is applicable +2023-11-04 15:22:24,571 [INFO] Rule:228 - rule Change mode sai is applicable +2023-11-04 15:22:24,571 [INFO] Rule:228 - rule **Change sai mode is applicable +2023-11-04 15:22:24,586 [INFO] DbConfProperties:307 - Apply Compatibility (68/292 Rules) +2023-11-04 15:22:24,599 [INFO] ImportTextPane:194 - (OptionalMessage_ERROR) Unable to find key (Mcu.ThirdPartyNb) in loaded IOC file +2023-11-04 15:22:24,674 [INFO] RtosManager:555 - Registered RTOS mode: class=CMSIS, group=RTOS, mode=CMSIS_V1, owner=FREERTOS +2023-11-04 15:22:24,674 [INFO] RtosManager:555 - Registered RTOS mode: class=CMSIS, group=RTOS2, mode=CMSIS_V2, owner=FREERTOS +2023-11-04 15:22:24,674 [INFO] RtosManager:555 - Registered RTOS mode: class=RTOS, group=Core, mode=CMSIS_V1, owner=FREERTOS +2023-11-04 15:22:24,674 [INFO] RtosManager:555 - Registered RTOS mode: class=RTOS, group=Core, mode=CMSIS_V2, owner=FREERTOS +2023-11-04 15:22:24,675 [WARN] ModelIntegratedComponent:184 - Missing modes for component STMicroelectronics:FreeRTOS:0.0.1:STMicroelectronics:RTOS:FreeRTOS:Core:::10.2.0: +2023-11-04 15:22:24,702 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-11-04 15:22:24,703 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-11-04 15:22:24,703 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-11-04 15:22:24,703 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-11-04 15:22:24,703 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-11-04 15:22:24,703 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-11-04 15:22:24,703 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-11-04 15:22:24,703 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-11-04 15:22:24,703 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-11-04 15:22:24,703 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-11-04 15:22:24,703 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-11-04 15:22:24,703 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-11-04 15:22:24,703 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-11-04 15:22:24,703 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-11-04 15:22:24,703 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-11-04 15:22:24,703 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-11-04 15:22:24,703 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-11-04 15:22:24,703 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-11-04 15:22:24,703 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-11-04 15:22:24,704 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-11-04 15:22:24,704 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-11-04 15:22:24,704 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-11-04 15:22:24,704 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-11-04 15:22:24,704 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-11-04 15:22:24,704 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-11-04 15:22:24,704 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-11-04 15:22:24,704 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-11-04 15:22:24,704 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-11-04 15:22:24,704 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-11-04 15:22:24,704 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-11-04 15:22:24,704 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-11-04 15:22:24,704 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-11-04 15:22:24,704 [WARN] ModelIntegratedComponent:63 - No mode defined for component null +2023-11-04 15:22:24,812 [INFO] ThirdPartyModel:298 - Start build external matchings +2023-11-04 15:22:25,138 [INFO] ThirdPartyModel:316 - End build external matchings +2023-11-04 15:22:25,149 [INFO] ImportTextPane:194 - (OptionalMessage_ERROR) IP (RCC) : Invalid parameter (FamilyName) +2023-11-04 15:22:25,150 [INFO] ImportTextPane:194 - (OptionalMessage_ERROR) IP (RCC) : Invalid parameter (HSICECFreq_Value) +2023-11-04 15:22:25,257 [INFO] UtilMem:75 - End LoadConfig() Used Memory: 841833640 Bytes (1073741824) +2023-11-04 15:22:25,267 [WARN] ThirdParty:833 - waiting for thirdparty lock release [change project] +2023-11-04 15:22:25,267 [INFO] ThirdParty:835 - entering critical section [change project] +2023-11-04 15:22:25,268 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-ISPU 1.1.0 +2023-11-04 15:22:25,268 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USBPD 4.1 +2023-11-04 15:22:25,268 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-GNSS1 6.0.0 +2023-11-04 15:22:25,268 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_HOST 2.0.0 +2023-11-04 15:22:25,268 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-F4 1.1.0 +2023-11-04 15:22:25,268 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics LIBJPEG 8.0.0 +2023-11-04 15:22:25,268 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :wolfSSL I-CUBE-wolfSSL 5.6.4 +2023-11-04 15:22:25,268 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-SMBUS 2.1.0 +2023-11-04 15:22:25,268 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_DEVICE 3.0.0 +2023-11-04 15:22:25,268 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-WB 2.0.0 +2023-11-04 15:22:25,268 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-F7 1.1.0 +2023-11-04 15:22:25,268 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-L5 2.0.0 +2023-11-04 15:22:25,268 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_DEVICE 2.0.0 +2023-11-04 15:22:25,268 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-EEPRMA1 4.2.0 +2023-11-04 15:22:25,268 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :ITTIA_DB I-CUBE-ITTIADB 8.8.0 +2023-11-04 15:22:25,269 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-SNS-MOTENV1 4.3.2 +2023-11-04 15:22:25,269 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-ALGOBUILD 1.3.0 +2023-11-04 15:22:25,269 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FreeRTOS 0.0.1 +2023-11-04 15:22:25,269 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-G0 1.1.0 +2023-11-04 15:22:25,269 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-NFC4 3.0.0 +2023-11-04 15:22:25,269 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-SUBG2 5.0.0 +2023-11-04 15:22:25,269 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics STM32_WPAN 1.0.0 +2023-11-04 15:22:25,269 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics lwIP 2.0.3 +2023-11-04 15:22:25,269 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-SNS-FLIGHT1 5.0.2 +2023-11-04 15:22:25,269 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_HOST 1.0.0 +2023-11-04 15:22:25,269 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-TOF1 3.3.1 +2023-11-04 15:22:25,269 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-G4 2.0.0 +2023-11-04 15:22:25,269 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics PDM2PCM 3.1.0 +2023-11-04 15:22:25,269 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-H7 3.1.0 +2023-11-04 15:22:25,269 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :Infineon AIROC-Wi-Fi-Bluetooth-STM32 1.5.1 +2023-11-04 15:22:25,269 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-BLEMGR 3.0.0 +2023-11-04 15:22:25,269 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics PDM2PCM 3.3.0 +2023-11-04 15:22:25,270 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-DISPLAY 3.0.0 +2023-11-04 15:22:25,270 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-BLE1 7.0.0 +2023-11-04 15:22:25,270 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-ATR-SIGFOX1 3.2.0 +2023-11-04 15:22:25,270 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics HAL Drivers 0.0.0 +2023-11-04 15:22:25,270 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics MBEDTLS 2.16.2 +2023-11-04 15:22:25,270 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :emotas I-CUBE-CANOPEN 1.3.0 +2023-11-04 15:22:25,270 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-MEMS1 10.0.0 +2023-11-04 15:22:25,270 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-FREERTOS 1.1.0 +2023-11-04 15:22:25,270 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-NFC7 1.0.1 +2023-11-04 15:22:25,270 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics MBEDTLS 2.14.1 +2023-11-04 15:22:25,270 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-TOUCHGFX 4.22.1 +2023-11-04 15:22:25,270 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-NFC6 3.0.0 +2023-11-04 15:22:25,270 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :portGmbH I-Cube-SoM-uGOAL 1.1.0 +2023-11-04 15:22:25,270 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-ALS 1.0.1 +2023-11-04 15:22:25,270 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics ThreadX 1.0.0 +2023-11-04 15:22:25,270 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-SNS-SMARTAG2 1.2.0 +2023-11-04 15:22:25,270 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-WL 2.0.0 +2023-11-04 15:22:25,271 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics USB_DEVICE 1.0.0 +2023-11-04 15:22:25,271 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AI 8.1.0 +2023-11-04 15:22:25,271 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-AZRTOS-L4 2.0.0 +2023-11-04 15:22:25,271 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics ThreadX 0.0.2 +2023-11-04 15:22:25,271 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :WES I-CUBE-Cesium 1.3.0 +2023-11-04 15:22:25,271 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics FP-ATR-ASTRA1 2.0.0 +2023-11-04 15:22:25,271 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics lwIP 2.1.2 +2023-11-04 15:22:25,271 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-SFXS2LP1 4.0.0 +2023-11-04 15:22:25,271 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics X-CUBE-BLE2 3.3.0 +2023-11-04 15:22:25,271 [INFO] ThirdParty:1030 - CMSIS Pack Vendor :STMicroelectronics PDM2PCM 3.2.0 +2023-11-04 15:22:25,271 [INFO] ThirdParty:841 - exiting critical section [change project] +2023-11-04 15:22:25,496 [INFO] PinOutPanel:1499 - setPackage(No Configuration,No Configuration) +2023-11-04 15:22:25,497 [INFO] PinOutPanel:1499 - setPackage(STM32F031K6Tx,LQFP32) +2023-11-04 15:22:26,206 [INFO] UtilMem:75 - Before build in PCC Used Memory: 759863872 Bytes (1073741824) +2023-11-04 15:22:26,650 [INFO] UtilMem:75 - After build in PCC Used Memory: 876782144 Bytes (1073741824) +2023-11-04 15:22:26,674 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:22:26,674 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:22:26,675 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:22:26,675 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:22:26,675 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:22:26,675 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:22:26,675 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:22:26,676 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:22:26,676 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:22:26,676 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:22:26,676 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:22:26,677 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:22:26,677 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:22:26,678 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:22:26,678 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:22:26,678 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:22:26,678 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:22:26,678 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:22:26,679 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:22:26,679 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:22:26,679 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:22:26,679 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:22:26,679 [INFO] IPUIPlugin:80 - create IPUIPlugin +2023-11-04 15:22:26,799 [INFO] CADModel:165 - CPN selected for project levelSTM32F031K6T6 +2023-11-04 15:22:26,799 [INFO] CADModel:114 - Register for checkConnection events +2023-11-04 15:22:26,838 [INFO] OpenFileManager:328 - Restore cursor +2023-11-04 15:22:27,149 [INFO] UtilMem:75 - End SaveConfig() Used Memory: 744987800 Bytes (1073741824) +2023-11-04 15:22:27,521 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 15:22:27,522 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 15:22:27,522 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 15:22:27,522 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 15:22:27,523 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 15:22:32,258 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 15:22:32,258 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 15:22:32,259 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 15:22:32,259 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 15:22:32,259 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 15:22:32,556 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 15:22:32,556 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 15:22:32,557 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 15:22:32,557 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 15:22:32,557 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 15:22:32,557 [INFO] McuFinderGlobals:76 - Set McuFinderConnectedMode to true +2023-11-04 15:22:32,560 [INFO] ApiDb:448 - Save user favorites file /home/key/.stm32cubeide/favorites.mcus.txt: 0 item(s) +2023-11-04 15:22:32,560 [INFO] ApiDb:452 - User favorites MCUs=[] +2023-11-04 15:22:32,562 [INFO] ApiDb:448 - Save user favorites file /home/key/.stm32cubeide/favorites.boards.txt: 1 item(s) +2023-11-04 15:22:32,562 [INFO] ApiDb:452 - User favorites Boards=[NUCLEO-F031K6] +2023-11-04 15:24:32,362 [INFO] UtilMem:75 - End SaveConfig() Used Memory: 718814696 Bytes (1073741824) +2023-11-04 15:24:33,314 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 15:24:33,315 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 15:24:33,315 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 15:24:33,316 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 15:24:33,316 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 15:24:45,437 [INFO] McuFinderGlobals:63 - Set McuFinder mode to 2 (CubeIDE integrated) +2023-11-04 15:24:45,438 [INFO] UserAuth:179 - activating auth plugin +2023-11-04 15:24:45,441 [INFO] UserAuth:393 - Internet connection configuration mode: 1 +2023-11-04 15:25:04,925 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 15:25:04,926 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 15:25:04,926 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 15:25:04,927 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 15:25:04,927 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 15:25:04,928 [INFO] WebApp:588 - userauth.ini deleted or not created +2023-11-04 15:25:16,500 [INFO] ServerAccessManage:473 - Download File stm32cube_fw_f0_v1110.zip +2023-11-04 15:25:19,590 [ERROR] FileExtend:455 - File entry not found +2023-11-04 15:25:19,590 [INFO] FileExtend:240 - Unzip File : stm32cube_fw_f0_v1110.zip +2023-11-04 15:25:19,590 [INFO] FileExtend:255 - Standard Zip Deflate +2023-11-04 15:25:22,409 [INFO] ServerAccessManage:473 - Download File stm32cube_fw_f0_v1114.zip +2023-11-04 15:25:22,986 [INFO] FileExtend:240 - Unzip File : stm32cube_fw_f0_v1114.zip +2023-11-04 15:25:22,986 [INFO] FileExtend:255 - Standard Zip Deflate +2023-11-04 15:25:24,765 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 15:25:24,766 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 15:25:24,766 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 15:25:24,766 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 15:25:24,766 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 15:25:24,767 [INFO] LoadServerPackagesThread:196 - End of LoadServerPackages Thread +2023-11-04 15:25:24,906 [INFO] ThirdPartyModel:298 - Start build external matchings +2023-11-04 15:25:24,909 [INFO] UtilMem:75 - End SaveConfig() Used Memory: 984922296 Bytes (1073741824) +2023-11-04 15:25:25,238 [INFO] ThirdPartyModel:316 - End build external matchings +2023-11-04 15:25:25,246 [INFO] CheckServerUpdateThread:120 - End of CheckServer Thread +2023-11-04 15:25:25,252 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: NVIC +2023-11-04 15:25:25,252 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: SYS +2023-11-04 15:25:25,252 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: GPIO +2023-11-04 15:25:25,252 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: USART +2023-11-04 15:25:25,252 [INFO] BlockDiagram:2759 - set Specific Code input for plugin: RCC +2023-11-04 15:25:25,253 [INFO] CodeGenerator:799 - code generatio: config db path: /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.common.mx_6.9.2.202309101412//db/ +2023-11-04 15:25:25,379 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 15:25:25,380 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 15:25:25,380 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 15:25:25,381 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 15:25:25,381 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 15:25:25,507 [INFO] CodeEngine:255 - oldGeneratedFile, /home/key/git/dummy_reflow/Software/reflow_oven/MXTmpFiles/license.tmp_save +2023-11-04 15:25:25,801 [INFO] CodeEngine:279 - Generated code: /home/key/git/dummy_reflow/Software/reflow_oven/MXTmpFiles/license.tmp +2023-11-04 15:25:25,927 [INFO] CodeEngine:255 - oldGeneratedFile, /home/key/git/dummy_reflow/Software/reflow_oven/Core/Src/gpio.c_save +2023-11-04 15:25:26,025 [INFO] CodeEngine:279 - Generated code: /home/key/git/dummy_reflow/Software/reflow_oven/Core/Src/gpio.c +2023-11-04 15:25:26,026 [INFO] CodeEngine:255 - oldGeneratedFile, /home/key/git/dummy_reflow/Software/reflow_oven/Core/Inc/gpio.h_save +2023-11-04 15:25:26,091 [INFO] CodeEngine:279 - Generated code: /home/key/git/dummy_reflow/Software/reflow_oven/Core/Inc/gpio.h +2023-11-04 15:25:26,160 [INFO] CodeEngine:255 - oldGeneratedFile, /home/key/git/dummy_reflow/Software/reflow_oven/Core/Src/usart.c_save +2023-11-04 15:25:26,300 [INFO] CodeEngine:279 - Generated code: /home/key/git/dummy_reflow/Software/reflow_oven/Core/Src/usart.c +2023-11-04 15:25:26,301 [INFO] CodeEngine:255 - oldGeneratedFile, /home/key/git/dummy_reflow/Software/reflow_oven/Core/Inc/usart.h_save +2023-11-04 15:25:26,361 [INFO] CodeEngine:279 - Generated code: /home/key/git/dummy_reflow/Software/reflow_oven/Core/Inc/usart.h +2023-11-04 15:25:26,363 [INFO] CodeEngine:255 - oldGeneratedFile, /home/key/git/dummy_reflow/Software/reflow_oven/Core/Src/stm32f0xx_it.c_save +2023-11-04 15:25:26,455 [INFO] CodeEngine:279 - Generated code: /home/key/git/dummy_reflow/Software/reflow_oven/Core/Src/stm32f0xx_it.c +2023-11-04 15:25:26,456 [INFO] CodeEngine:255 - oldGeneratedFile, /home/key/git/dummy_reflow/Software/reflow_oven/Core/Inc/stm32f0xx_it.h_save +2023-11-04 15:25:26,519 [INFO] CodeEngine:279 - Generated code: /home/key/git/dummy_reflow/Software/reflow_oven/Core/Inc/stm32f0xx_it.h +2023-11-04 15:25:26,522 [INFO] CodeEngine:255 - oldGeneratedFile, /home/key/git/dummy_reflow/Software/reflow_oven/Core/Src/stm32f0xx_hal_msp.c_save +2023-11-04 15:25:26,608 [INFO] CodeEngine:279 - Generated code: /home/key/git/dummy_reflow/Software/reflow_oven/Core/Src/stm32f0xx_hal_msp.c +2023-11-04 15:25:26,608 [INFO] CodeEngine:255 - oldGeneratedFile, /home/key/git/dummy_reflow/Software/reflow_oven/MXTmpFiles/system.tmp_save +2023-11-04 15:25:26,662 [INFO] CodeEngine:279 - Generated code: /home/key/git/dummy_reflow/Software/reflow_oven/MXTmpFiles/system.tmp +2023-11-04 15:25:26,664 [INFO] CodeEngine:311 - oldGeneratedFile, /home/key/git/dummy_reflow/Software/reflow_oven/Core/Inc/stm32f0xx_hal_conf.h_save +2023-11-04 15:25:26,733 [INFO] CodeEngine:335 - Generated code: /home/key/git/dummy_reflow/Software/reflow_oven/Core/Inc/stm32f0xx_hal_conf.h +2023-11-04 15:25:26,750 [INFO] CodeEngine:255 - oldGeneratedFile, /home/key/git/dummy_reflow/Software/reflow_oven/Core/Inc/main.h_save +2023-11-04 15:25:26,826 [INFO] CodeEngine:279 - Generated code: /home/key/git/dummy_reflow/Software/reflow_oven/Core/Inc/main.h +2023-11-04 15:25:26,827 [INFO] CodeEngine:255 - oldGeneratedFile, /home/key/git/dummy_reflow/Software/reflow_oven/Core/Src/main.c_save +2023-11-04 15:25:26,932 [INFO] CodeEngine:279 - Generated code: /home/key/git/dummy_reflow/Software/reflow_oven/Core/Src/main.c +2023-11-04 15:25:27,407 [INFO] ProjectBuilder:3064 - Time for Copy HAL[1] : 16mS. +2023-11-04 15:25:27,410 [INFO] ProjectBuilder:4404 - Project Generator version: 4.1.0 +2023-11-04 15:25:27,661 [INFO] ConfigFileManager:1457 - The Die is : DIE444 +2023-11-04 15:25:27,667 [INFO] ApiDbMcu:507 - Load IP Config File for FATFS +2023-11-04 15:25:27,671 [INFO] ApiDbMcu:507 - Load IP Config File for FREERTOS +2023-11-04 15:25:28,296 [INFO] LogOutputStream:77 - [STDOUT_REDIRECT] +2023-11-04 15:25:32,483 [INFO] ProjectBuilder:4626 - Time for Generating toolchain IDE Files: 5073mS. +2023-11-04 15:25:32,484 [INFO] ProjectBuilder:2935 - Time for Copy CMSIS : 1mS. +2023-11-04 15:25:32,484 [INFO] ProjectBuilder:2935 - Time for Copy CMSIS : 0mS. +2023-11-04 15:28:28,263 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 15:28:28,264 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 15:28:28,265 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 15:28:28,266 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 15:28:28,266 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 16:08:48,549 [INFO] NvicIntPanel:101 - NVIC parent = com.st.microxplorer.plugins.ip.nvic.MultiNvicIntPanel[,0,0,1009x395,layout=javax.swing.BoxLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=] +2023-11-04 16:09:15,153 [INFO] NvicIntPanel:101 - NVIC parent = com.st.microxplorer.plugins.ip.nvic.MultiNvicIntPanel[,0,0,1009x395,layout=javax.swing.BoxLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=] +2023-11-04 16:20:07,573 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 16:20:07,574 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 16:20:07,575 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 16:20:07,576 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 16:20:07,577 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 16:39:39,676 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 16:39:39,677 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 16:39:39,678 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 16:39:39,678 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 16:39:39,679 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 16:46:46,246 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 16:46:46,247 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 16:46:46,247 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 16:46:46,248 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused +2023-11-04 16:46:46,249 [ERROR] AdobePublisher:162 - Exception while opening the connection: java.net.ConnectException: Connection refused diff --git a/Software/.metadata/.lock b/Software/.metadata/.lock new file mode 100644 index 0000000..e69de29 diff --git a/Software/.metadata/.log b/Software/.metadata/.log new file mode 100644 index 0000000..9eac180 --- /dev/null +++ b/Software/.metadata/.log @@ -0,0 +1,202 @@ +!SESSION 2023-11-04 15:20:27.952 ----------------------------------------------- +eclipse.buildId=Version 1.13.2 +java.version=17.0.6 +java.vendor=Eclipse Adoptium +BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=en_US +Command-line arguments: -os linux -ws gtk -arch x86_64 + +!ENTRY com.st.stm32cube.ide.mcu.informationcenter 4 4 2023-11-04 15:20:50.925 +!MESSAGE CubeMX plugin appears to be active, Log4j initialization might be too late. + +!ENTRY com.st.stm32cube.ide.mcu.informationcenter 1 1 2023-11-04 15:20:50.926 +!MESSAGE Log4j2 initialized with config file /home/key/git/dummy_reflow/Software/.metadata/.log4j2.xml + +!ENTRY com.st.stm32cube.ide.mcu.ide 1 1 2023-11-04 15:20:53.217 +!MESSAGE Started RMI Server, listening on port 41337 + +!ENTRY org.eclipse.cdt.core 1 0 2023-11-04 15:25:34.143 +!MESSAGE Indexed 'reflow_oven' (25 sources, 85 headers) in 1.8 sec: 4,687 declarations; 28,212 references; 0 unresolved inclusions; 1 syntax errors; 2 unresolved names (0.0061%) + +!ENTRY org.eclipse.core.resources 4 2 2023-11-04 16:38:29.654 +!MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.core.resources". +!STACK 1 +org.eclipse.core.internal.resources.ResourceException(/reflow_oven/Debug/Core/ked)[368]: java.lang.Exception: Resource '/reflow_oven/Debug/Core/ked' does not exist. + at org.eclipse.core.internal.resources.ResourceException.provideStackTrace(ResourceException.java:42) + at org.eclipse.core.internal.resources.ResourceException.(ResourceException.java:38) + at org.eclipse.core.internal.resources.Resource.checkExists(Resource.java:330) + at org.eclipse.core.internal.resources.Resource.checkAccessible(Resource.java:204) + at org.eclipse.core.internal.resources.Container.members(Container.java:244) + at org.eclipse.core.internal.resources.Container.members(Container.java:231) + at com.st.stm32cube.ide.mcu.toolchain.armnone.oss.makefile.MakefileGenerator.generateDependencies(MakefileGenerator.java:630) + at org.eclipse.cdt.managedbuilder.internal.core.CommonBuilder.performPostbuildGeneration(CommonBuilder.java:869) + at org.eclipse.cdt.managedbuilder.internal.core.CommonBuilder.build(CommonBuilder.java:781) + at org.eclipse.cdt.managedbuilder.internal.core.CommonBuilder.build(CommonBuilder.java:521) + at org.eclipse.cdt.managedbuilder.internal.core.CommonBuilder.build(CommonBuilder.java:466) + at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:1020) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:247) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:303) + at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:392) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:395) + at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:506) + at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:454) + at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:536) + at org.eclipse.core.internal.resources.Workspace.buildInternal(Workspace.java:524) + at org.eclipse.core.internal.resources.Workspace.build(Workspace.java:420) + at org.eclipse.ui.actions.BuildAction$1.runInWorkspace(BuildAction.java:291) + at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:43) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +!SUBENTRY 1 org.eclipse.core.resources 4 368 2023-11-04 16:38:29.655 +!MESSAGE Resource '/reflow_oven/Debug/Core/ked' does not exist. +!STACK 0 +java.lang.Exception: Resource '/reflow_oven/Debug/Core/ked' does not exist. + at org.eclipse.core.internal.resources.ResourceException.provideStackTrace(ResourceException.java:42) + at org.eclipse.core.internal.resources.ResourceException.(ResourceException.java:38) + at org.eclipse.core.internal.resources.Resource.checkExists(Resource.java:330) + at org.eclipse.core.internal.resources.Resource.checkAccessible(Resource.java:204) + at org.eclipse.core.internal.resources.Container.members(Container.java:244) + at org.eclipse.core.internal.resources.Container.members(Container.java:231) + at com.st.stm32cube.ide.mcu.toolchain.armnone.oss.makefile.MakefileGenerator.generateDependencies(MakefileGenerator.java:630) + at org.eclipse.cdt.managedbuilder.internal.core.CommonBuilder.performPostbuildGeneration(CommonBuilder.java:869) + at org.eclipse.cdt.managedbuilder.internal.core.CommonBuilder.build(CommonBuilder.java:781) + at org.eclipse.cdt.managedbuilder.internal.core.CommonBuilder.build(CommonBuilder.java:521) + at org.eclipse.cdt.managedbuilder.internal.core.CommonBuilder.build(CommonBuilder.java:466) + at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:1020) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:247) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:303) + at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:392) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:395) + at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:506) + at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:454) + at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:536) + at org.eclipse.core.internal.resources.Workspace.buildInternal(Workspace.java:524) + at org.eclipse.core.internal.resources.Workspace.build(Workspace.java:420) + at org.eclipse.ui.actions.BuildAction$1.runInWorkspace(BuildAction.java:291) + at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:43) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +!SUBENTRY 1 org.eclipse.core.resources 4 368 2023-11-04 16:38:29.655 +!MESSAGE Resource '/reflow_oven/Debug/Core/ked' does not exist. +!STACK 0 +java.lang.Exception: Resource '/reflow_oven/Debug/Core/ked' does not exist. + at org.eclipse.core.internal.resources.ResourceException.provideStackTrace(ResourceException.java:42) + at org.eclipse.core.internal.resources.ResourceException.(ResourceException.java:38) + at org.eclipse.core.internal.resources.Resource.checkExists(Resource.java:330) + at org.eclipse.core.internal.resources.Resource.checkAccessible(Resource.java:204) + at org.eclipse.core.internal.resources.Container.members(Container.java:244) + at org.eclipse.core.internal.resources.Container.members(Container.java:231) + at com.st.stm32cube.ide.mcu.toolchain.armnone.oss.makefile.MakefileGenerator.generateDependencies(MakefileGenerator.java:630) + at org.eclipse.cdt.managedbuilder.internal.core.CommonBuilder.performPostbuildGeneration(CommonBuilder.java:869) + at org.eclipse.cdt.managedbuilder.internal.core.CommonBuilder.build(CommonBuilder.java:781) + at org.eclipse.cdt.managedbuilder.internal.core.CommonBuilder.build(CommonBuilder.java:521) + at org.eclipse.cdt.managedbuilder.internal.core.CommonBuilder.build(CommonBuilder.java:466) + at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:1020) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:247) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:303) + at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:392) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:395) + at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:506) + at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:454) + at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:536) + at org.eclipse.core.internal.resources.Workspace.buildInternal(Workspace.java:524) + at org.eclipse.core.internal.resources.Workspace.build(Workspace.java:420) + at org.eclipse.ui.actions.BuildAction$1.runInWorkspace(BuildAction.java:291) + at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:43) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) + +!ENTRY org.eclipse.core.resources 4 75 2023-11-04 16:38:29.700 +!MESSAGE Errors occurred during the build. +!SUBENTRY 1 org.eclipse.cdt.managedbuilder.core 4 75 2023-11-04 16:38:29.700 +!MESSAGE Errors running builder 'CDT Builder' on project 'reflow_oven'. +!STACK 1 +org.eclipse.core.internal.resources.ResourceException(/reflow_oven/Debug/Core/ked)[368]: java.lang.Exception: Resource '/reflow_oven/Debug/Core/ked' does not exist. + at org.eclipse.core.internal.resources.ResourceException.provideStackTrace(ResourceException.java:42) + at org.eclipse.core.internal.resources.ResourceException.(ResourceException.java:38) + at org.eclipse.core.internal.resources.Resource.checkExists(Resource.java:330) + at org.eclipse.core.internal.resources.Resource.checkAccessible(Resource.java:204) + at org.eclipse.core.internal.resources.Container.members(Container.java:244) + at org.eclipse.core.internal.resources.Container.members(Container.java:231) + at com.st.stm32cube.ide.mcu.toolchain.armnone.oss.makefile.MakefileGenerator.generateDependencies(MakefileGenerator.java:630) + at org.eclipse.cdt.managedbuilder.internal.core.CommonBuilder.performPostbuildGeneration(CommonBuilder.java:869) + at org.eclipse.cdt.managedbuilder.internal.core.CommonBuilder.build(CommonBuilder.java:781) + at org.eclipse.cdt.managedbuilder.internal.core.CommonBuilder.build(CommonBuilder.java:521) + at org.eclipse.cdt.managedbuilder.internal.core.CommonBuilder.build(CommonBuilder.java:466) + at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:1020) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:247) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:303) + at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:392) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:395) + at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:506) + at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:454) + at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:536) + at org.eclipse.core.internal.resources.Workspace.buildInternal(Workspace.java:524) + at org.eclipse.core.internal.resources.Workspace.build(Workspace.java:420) + at org.eclipse.ui.actions.BuildAction$1.runInWorkspace(BuildAction.java:291) + at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:43) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +!SUBENTRY 2 org.eclipse.core.resources 4 368 2023-11-04 16:38:29.700 +!MESSAGE Resource '/reflow_oven/Debug/Core/ked' does not exist. +!STACK 0 +java.lang.Exception: Resource '/reflow_oven/Debug/Core/ked' does not exist. + at org.eclipse.core.internal.resources.ResourceException.provideStackTrace(ResourceException.java:42) + at org.eclipse.core.internal.resources.ResourceException.(ResourceException.java:38) + at org.eclipse.core.internal.resources.Resource.checkExists(Resource.java:330) + at org.eclipse.core.internal.resources.Resource.checkAccessible(Resource.java:204) + at org.eclipse.core.internal.resources.Container.members(Container.java:244) + at org.eclipse.core.internal.resources.Container.members(Container.java:231) + at com.st.stm32cube.ide.mcu.toolchain.armnone.oss.makefile.MakefileGenerator.generateDependencies(MakefileGenerator.java:630) + at org.eclipse.cdt.managedbuilder.internal.core.CommonBuilder.performPostbuildGeneration(CommonBuilder.java:869) + at org.eclipse.cdt.managedbuilder.internal.core.CommonBuilder.build(CommonBuilder.java:781) + at org.eclipse.cdt.managedbuilder.internal.core.CommonBuilder.build(CommonBuilder.java:521) + at org.eclipse.cdt.managedbuilder.internal.core.CommonBuilder.build(CommonBuilder.java:466) + at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:1020) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:247) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:303) + at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:392) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:395) + at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:506) + at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:454) + at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:536) + at org.eclipse.core.internal.resources.Workspace.buildInternal(Workspace.java:524) + at org.eclipse.core.internal.resources.Workspace.build(Workspace.java:420) + at org.eclipse.ui.actions.BuildAction$1.runInWorkspace(BuildAction.java:291) + at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:43) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +!SUBENTRY 1 org.eclipse.core.resources 4 368 2023-11-04 16:38:29.700 +!MESSAGE Resource '/reflow_oven/Debug/Core/ked' does not exist. +!STACK 0 +java.lang.Exception: Resource '/reflow_oven/Debug/Core/ked' does not exist. + at org.eclipse.core.internal.resources.ResourceException.provideStackTrace(ResourceException.java:42) + at org.eclipse.core.internal.resources.ResourceException.(ResourceException.java:38) + at org.eclipse.core.internal.resources.Resource.checkExists(Resource.java:330) + at org.eclipse.core.internal.resources.Resource.checkAccessible(Resource.java:204) + at org.eclipse.core.internal.resources.Container.members(Container.java:244) + at org.eclipse.core.internal.resources.Container.members(Container.java:231) + at com.st.stm32cube.ide.mcu.toolchain.armnone.oss.makefile.MakefileGenerator.generateDependencies(MakefileGenerator.java:630) + at org.eclipse.cdt.managedbuilder.internal.core.CommonBuilder.performPostbuildGeneration(CommonBuilder.java:869) + at org.eclipse.cdt.managedbuilder.internal.core.CommonBuilder.build(CommonBuilder.java:781) + at org.eclipse.cdt.managedbuilder.internal.core.CommonBuilder.build(CommonBuilder.java:521) + at org.eclipse.cdt.managedbuilder.internal.core.CommonBuilder.build(CommonBuilder.java:466) + at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:1020) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:247) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:303) + at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:392) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:395) + at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:506) + at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:454) + at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:536) + at org.eclipse.core.internal.resources.Workspace.buildInternal(Workspace.java:524) + at org.eclipse.core.internal.resources.Workspace.build(Workspace.java:420) + at org.eclipse.ui.actions.BuildAction$1.runInWorkspace(BuildAction.java:291) + at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:43) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) diff --git a/Software/.metadata/.log4j2.xml b/Software/.metadata/.log4j2.xml new file mode 100644 index 0000000..61e5a42 --- /dev/null +++ b/Software/.metadata/.log4j2.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Software/.metadata/.plugins/com.st.stm32cube.ide.mcu.informationcenter/2.2.0.202306231147 b/Software/.metadata/.plugins/com.st.stm32cube.ide.mcu.informationcenter/2.2.0.202306231147 new file mode 100644 index 0000000..e69de29 diff --git a/Software/.metadata/.plugins/org.eclipse.cdt.core/.log b/Software/.metadata/.plugins/org.eclipse.cdt.core/.log new file mode 100644 index 0000000..e69de29 diff --git a/Software/.metadata/.plugins/org.eclipse.cdt.core/reflow_oven.1699107928342.pdom b/Software/.metadata/.plugins/org.eclipse.cdt.core/reflow_oven.1699107928342.pdom new file mode 100644 index 0000000000000000000000000000000000000000..4ec41b2ea8597a8665f01432958bf6988a019b60 GIT binary patch literal 2379776 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%0Da<299J)UEiPJjOTEIEX&c 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%0Dku-8|=9>=&Jq}H|& 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 vJT?QeFNTqz|$&p{5J^xw~+l+ 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%0D1UDhAO0%5m>U`j;3U=@@|i+hU0h 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

+
+ +
+
diff --git a/Software/.metadata/.plugins/org.eclipse.ui.workbench/workingsets.xml b/Software/.metadata/.plugins/org.eclipse.ui.workbench/workingsets.xml new file mode 100644 index 0000000..c952183 --- /dev/null +++ b/Software/.metadata/.plugins/org.eclipse.ui.workbench/workingsets.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Software/.metadata/version.ini b/Software/.metadata/version.ini new file mode 100644 index 0000000..d4aebde --- /dev/null +++ b/Software/.metadata/version.ini @@ -0,0 +1,3 @@ +#Sat Nov 04 15:20:48 CET 2023 +org.eclipse.core.runtime=2 +org.eclipse.platform=4.27.0.v20230302-0300 diff --git a/Software/ked_submodule/ked.c b/Software/ked_submodule/ked.c new file mode 100644 index 0000000..e69de29 diff --git a/Software/ked_submodule/ked.h b/Software/ked_submodule/ked.h new file mode 100644 index 0000000..e69de29 diff --git a/Software/ked_submodule/ked_third_parties/stm/peripherals/uart.c b/Software/ked_submodule/ked_third_parties/stm/peripherals/uart.c new file mode 100644 index 0000000..e69de29 diff --git a/Software/ked_submodule/peripherals/uart.h b/Software/ked_submodule/peripherals/uart.h new file mode 100644 index 0000000..e69de29 diff --git a/Software/reflow_oven/.cproject b/Software/reflow_oven/.cproject new file mode 100644 index 0000000..cedf5fe --- /dev/null +++ b/Software/reflow_oven/.cproject @@ -0,0 +1,172 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Software/reflow_oven/.mxproject b/Software/reflow_oven/.mxproject new file mode 100644 index 0000000..0adff00 --- /dev/null +++ b/Software/reflow_oven/.mxproject @@ -0,0 +1,29 @@ +[PreviousGenFiles] +AdvancedFolderStructure=true +HeaderFileListSize=5 +HeaderFiles#0=../Core/Inc/gpio.h +HeaderFiles#1=../Core/Inc/usart.h +HeaderFiles#2=../Core/Inc/stm32f0xx_it.h +HeaderFiles#3=../Core/Inc/stm32f0xx_hal_conf.h +HeaderFiles#4=../Core/Inc/main.h +HeaderFolderListSize=1 +HeaderPath#0=../Core/Inc +HeaderFiles=; +SourceFileListSize=5 +SourceFiles#0=../Core/Src/gpio.c +SourceFiles#1=../Core/Src/usart.c +SourceFiles#2=../Core/Src/stm32f0xx_it.c +SourceFiles#3=../Core/Src/stm32f0xx_hal_msp.c +SourceFiles#4=../Core/Src/main.c +SourceFolderListSize=1 +SourcePath#0=../Core/Src +SourceFiles=; + +[PreviousLibFiles] +LibFiles=Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_tim.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_tim_ex.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_usart.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_rcc.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_bus.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_crs.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_system.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_utils.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_def.h;Drivers/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c_ex.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio_ex.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_gpio.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma_ex.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_dma.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_cortex.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_cortex.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr_ex.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_pwr.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash_ex.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_exti.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_exti.h;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.c;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_tim.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_tim_ex.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_usart.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_rcc.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_bus.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_crs.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_system.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_utils.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_def.h;Drivers/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c_ex.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio_ex.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_gpio.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma_ex.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_dma.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_cortex.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_cortex.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr_ex.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_pwr.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash_ex.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_exti.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_exti.h;Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f031x6.h;Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h;Drivers/CMSIS/Device/ST/STM32F0xx/Include/system_stm32f0xx.h;Drivers/CMSIS/Device/ST/STM32F0xx/Source/Templates/system_stm32f0xx.c;Drivers/CMSIS/Include/cmsis_iccarm.h;Drivers/CMSIS/Include/core_armv8mbl.h;Drivers/CMSIS/Include/core_cm0.h;Drivers/CMSIS/Include/cmsis_armclang.h;Drivers/CMSIS/Include/core_sc300.h;Drivers/CMSIS/Include/core_cm1.h;Drivers/CMSIS/Include/core_cm3.h;Drivers/CMSIS/Include/core_cm0plus.h;Drivers/CMSIS/Include/cmsis_armcc.h;Drivers/CMSIS/Include/core_cm7.h;Drivers/CMSIS/Include/cmsis_version.h;Drivers/CMSIS/Include/cmsis_compiler.h;Drivers/CMSIS/Include/tz_context.h;Drivers/CMSIS/Include/core_cm4.h;Drivers/CMSIS/Include/core_cm23.h;Drivers/CMSIS/Include/core_sc000.h;Drivers/CMSIS/Include/cmsis_gcc.h;Drivers/CMSIS/Include/core_cm33.h;Drivers/CMSIS/Include/core_armv8mml.h;Drivers/CMSIS/Include/mpu_armv8.h;Drivers/CMSIS/Include/mpu_armv7.h; + +[PreviousUsedCubeIDEFiles] +SourceFiles=Core/Src/main.c;Core/Src/gpio.c;Core/Src/usart.c;Core/Src/stm32f0xx_it.c;Core/Src/stm32f0xx_hal_msp.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.c;Drivers/CMSIS/Device/ST/STM32F0xx/Source/Templates/system_stm32f0xx.c;Core/Src/system_stm32f0xx.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.c;Drivers/CMSIS/Device/ST/STM32F0xx/Source/Templates/system_stm32f0xx.c;Core/Src/system_stm32f0xx.c;;; +HeaderPath=Drivers/STM32F0xx_HAL_Driver/Inc;Drivers/STM32F0xx_HAL_Driver/Inc/Legacy;Drivers/CMSIS/Device/ST/STM32F0xx/Include;Drivers/CMSIS/Include;Core/Inc; +CDefines=USE_HAL_DRIVER;STM32F031x6;USE_HAL_DRIVER;USE_HAL_DRIVER; + diff --git a/Software/reflow_oven/.project b/Software/reflow_oven/.project new file mode 100644 index 0000000..cca594c --- /dev/null +++ b/Software/reflow_oven/.project @@ -0,0 +1,32 @@ + + + reflow_oven + + + + + + 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/Software/reflow_oven/.settings/language.settings.xml b/Software/reflow_oven/.settings/language.settings.xml new file mode 100644 index 0000000..5d630e3 --- /dev/null +++ b/Software/reflow_oven/.settings/language.settings.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Software/reflow_oven/.settings/stm32cubeide.project.prefs b/Software/reflow_oven/.settings/stm32cubeide.project.prefs new file mode 100644 index 0000000..3eb5bf3 --- /dev/null +++ b/Software/reflow_oven/.settings/stm32cubeide.project.prefs @@ -0,0 +1,3 @@ +8DF89ED150041C4CBC7CB9A9CAA90856=682F6ABED0D7165E43A92F4DF340F4DC +DC22A860405A8BF2F2C095E5B6529F12=682F6ABED0D7165E43A92F4DF340F4DC +eclipse.preferences.version=1 diff --git a/Software/reflow_oven/Core/Inc/gpio.h b/Software/reflow_oven/Core/Inc/gpio.h new file mode 100644 index 0000000..21a3b5a --- /dev/null +++ b/Software/reflow_oven/Core/Inc/gpio.h @@ -0,0 +1,49 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file gpio.h + * @brief This file contains all the function prototypes for + * the gpio.c file + ****************************************************************************** + * @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 __GPIO_H__ +#define __GPIO_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* USER CODE BEGIN Private defines */ + +/* USER CODE END Private defines */ + +void MX_GPIO_Init(void); + +/* USER CODE BEGIN Prototypes */ + +/* USER CODE END Prototypes */ + +#ifdef __cplusplus +} +#endif +#endif /*__ GPIO_H__ */ + diff --git a/Software/reflow_oven/Core/Inc/main.h b/Software/reflow_oven/Core/Inc/main.h new file mode 100644 index 0000000..f31e198 --- /dev/null +++ b/Software/reflow_oven/Core/Inc/main.h @@ -0,0 +1,77 @@ +/* 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 "stm32f0xx_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 VCP_TX_Pin GPIO_PIN_2 +#define VCP_TX_GPIO_Port GPIOA +#define SWDIO_Pin GPIO_PIN_13 +#define SWDIO_GPIO_Port GPIOA +#define SWCLK_Pin GPIO_PIN_14 +#define SWCLK_GPIO_Port GPIOA +#define VCP_RX_Pin GPIO_PIN_15 +#define VCP_RX_GPIO_Port GPIOA + +/* USER CODE BEGIN Private defines */ + +/* USER CODE END Private defines */ + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ diff --git a/Software/reflow_oven/Core/Inc/stm32f0xx_hal_conf.h b/Software/reflow_oven/Core/Inc/stm32f0xx_hal_conf.h new file mode 100644 index 0000000..1124b0c --- /dev/null +++ b/Software/reflow_oven/Core/Inc/stm32f0xx_hal_conf.h @@ -0,0 +1,322 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f0xx_hal_conf.h + * @brief HAL configuration file. + ****************************************************************************** + * @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. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F0xx_HAL_CONF_H +#define __STM32F0xx_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_ADC_MODULE_ENABLED */ +/*#define HAL_CRYP_MODULE_ENABLED */ +/*#define HAL_CAN_MODULE_ENABLED */ +/*#define HAL_CEC_MODULE_ENABLED */ +/*#define HAL_COMP_MODULE_ENABLED */ +/*#define HAL_CRC_MODULE_ENABLED */ +/*#define HAL_CRYP_MODULE_ENABLED */ +/*#define HAL_TSC_MODULE_ENABLED */ +/*#define HAL_DAC_MODULE_ENABLED */ +/*#define HAL_I2S_MODULE_ENABLED */ +/*#define HAL_IWDG_MODULE_ENABLED */ +/*#define HAL_LCD_MODULE_ENABLED */ +/*#define HAL_LPTIM_MODULE_ENABLED */ +/*#define HAL_RNG_MODULE_ENABLED */ +/*#define HAL_RTC_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_CORTEX_MODULE_ENABLED +#define HAL_DMA_MODULE_ENABLED +#define HAL_FLASH_MODULE_ENABLED +#define HAL_GPIO_MODULE_ENABLED +#define HAL_EXTI_MODULE_ENABLED +#define HAL_PWR_MODULE_ENABLED +#define HAL_RCC_MODULE_ENABLED +#define HAL_I2C_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 ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */ +#endif /* HSE_VALUE */ + +/** + * @brief In the following line adjust the External High Speed oscillator (HSE) Startup + * Timeout value + */ +#if !defined (HSE_STARTUP_TIMEOUT) + #define HSE_STARTUP_TIMEOUT ((uint32_t)100) /*!< 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)8000000) /*!< Value of the Internal oscillator in Hz*/ +#endif /* HSI_VALUE */ + +/** + * @brief In the following line adjust the Internal High Speed oscillator (HSI) Startup + * Timeout value + */ +#if !defined (HSI_STARTUP_TIMEOUT) + #define HSI_STARTUP_TIMEOUT ((uint32_t)5000) /*!< Time out for HSI start up */ +#endif /* HSI_STARTUP_TIMEOUT */ + +/** + * @brief Internal High Speed oscillator for ADC (HSI14) value. + */ +#if !defined (HSI14_VALUE) +#define HSI14_VALUE ((uint32_t)14000000) /*!< Value of the Internal High Speed oscillator for ADC in Hz. + The real value may vary depending on the variations + in voltage and temperature. */ +#endif /* HSI14_VALUE */ + +/** + * @brief Internal High Speed oscillator for USB (HSI48) value. + */ +#if !defined (HSI48_VALUE) + #define HSI48_VALUE ((uint32_t)48000000) /*!< Value of the Internal High Speed oscillator for USB in Hz. + The real value may vary depending on the variations + in voltage and temperature. */ +#endif /* HSI48_VALUE */ + +/** + * @brief Internal Low Speed oscillator (LSI) value. + */ +#if !defined (LSI_VALUE) + #define LSI_VALUE ((uint32_t)40000) +#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 (LSI) value. + */ +#if !defined (LSE_VALUE) + #define LSE_VALUE ((uint32_t)32768) /*!< Value of the External Low Speed oscillator in Hz */ +#endif /* LSE_VALUE */ + +/** + * @brief Time out for LSE start up value in ms. + */ +#if !defined (LSE_STARTUP_TIMEOUT) + #define LSE_STARTUP_TIMEOUT ((uint32_t)5000) /*!< Time out for LSE start up, in ms */ +#endif /* LSE_STARTUP_TIMEOUT */ + +/* 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 ((uint32_t)3300) /*!< Value of VDD in mv */ +#define TICK_INT_PRIORITY ((uint32_t)0) /*!< tick interrupt priority (lowest by default) */ + /* Warning: Must be set to higher priority for HAL_Delay() */ + /* and HAL_GetTick() usage under interrupt context */ +#define USE_RTOS 0 +#define PREFETCH_ENABLE 1 +#define INSTRUCTION_CACHE_ENABLE 0 +#define DATA_CACHE_ENABLE 0 +#define USE_SPI_CRC 0U + +#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_COMP_REGISTER_CALLBACKS 0U /* COMP register callback disabled */ +#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback disabled */ +#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ +#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ +#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS 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_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ +#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ +#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ +#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ +#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ +#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ +#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ +#define USE_HAL_TSC_REGISTER_CALLBACKS 0U /* TSC register callback disabled */ +#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD 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 */ + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ + +#ifdef HAL_RCC_MODULE_ENABLED + #include "stm32f0xx_hal_rcc.h" +#endif /* HAL_RCC_MODULE_ENABLED */ + +#ifdef HAL_GPIO_MODULE_ENABLED + #include "stm32f0xx_hal_gpio.h" +#endif /* HAL_GPIO_MODULE_ENABLED */ + +#ifdef HAL_EXTI_MODULE_ENABLED + #include "stm32f0xx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + +#ifdef HAL_DMA_MODULE_ENABLED + #include "stm32f0xx_hal_dma.h" +#endif /* HAL_DMA_MODULE_ENABLED */ + +#ifdef HAL_CORTEX_MODULE_ENABLED + #include "stm32f0xx_hal_cortex.h" +#endif /* HAL_CORTEX_MODULE_ENABLED */ + +#ifdef HAL_ADC_MODULE_ENABLED + #include "stm32f0xx_hal_adc.h" +#endif /* HAL_ADC_MODULE_ENABLED */ + +#ifdef HAL_CAN_MODULE_ENABLED + #include "stm32f0xx_hal_can.h" +#endif /* HAL_CAN_MODULE_ENABLED */ + +#ifdef HAL_CEC_MODULE_ENABLED + #include "stm32f0xx_hal_cec.h" +#endif /* HAL_CEC_MODULE_ENABLED */ + +#ifdef HAL_COMP_MODULE_ENABLED + #include "stm32f0xx_hal_comp.h" +#endif /* HAL_COMP_MODULE_ENABLED */ + +#ifdef HAL_CRC_MODULE_ENABLED + #include "stm32f0xx_hal_crc.h" +#endif /* HAL_CRC_MODULE_ENABLED */ + +#ifdef HAL_DAC_MODULE_ENABLED + #include "stm32f0xx_hal_dac.h" +#endif /* HAL_DAC_MODULE_ENABLED */ + +#ifdef HAL_FLASH_MODULE_ENABLED + #include "stm32f0xx_hal_flash.h" +#endif /* HAL_FLASH_MODULE_ENABLED */ + +#ifdef HAL_I2C_MODULE_ENABLED + #include "stm32f0xx_hal_i2c.h" +#endif /* HAL_I2C_MODULE_ENABLED */ + +#ifdef HAL_I2S_MODULE_ENABLED + #include "stm32f0xx_hal_i2s.h" +#endif /* HAL_I2S_MODULE_ENABLED */ + +#ifdef HAL_IRDA_MODULE_ENABLED + #include "stm32f0xx_hal_irda.h" +#endif /* HAL_IRDA_MODULE_ENABLED */ + +#ifdef HAL_IWDG_MODULE_ENABLED + #include "stm32f0xx_hal_iwdg.h" +#endif /* HAL_IWDG_MODULE_ENABLED */ + +#ifdef HAL_PCD_MODULE_ENABLED + #include "stm32f0xx_hal_pcd.h" +#endif /* HAL_PCD_MODULE_ENABLED */ + +#ifdef HAL_PWR_MODULE_ENABLED + #include "stm32f0xx_hal_pwr.h" +#endif /* HAL_PWR_MODULE_ENABLED */ + +#ifdef HAL_RTC_MODULE_ENABLED + #include "stm32f0xx_hal_rtc.h" +#endif /* HAL_RTC_MODULE_ENABLED */ + +#ifdef HAL_SMARTCARD_MODULE_ENABLED + #include "stm32f0xx_hal_smartcard.h" +#endif /* HAL_SMARTCARD_MODULE_ENABLED */ + +#ifdef HAL_SMBUS_MODULE_ENABLED + #include "stm32f0xx_hal_smbus.h" +#endif /* HAL_SMBUS_MODULE_ENABLED */ + +#ifdef HAL_SPI_MODULE_ENABLED + #include "stm32f0xx_hal_spi.h" +#endif /* HAL_SPI_MODULE_ENABLED */ + +#ifdef HAL_TIM_MODULE_ENABLED + #include "stm32f0xx_hal_tim.h" +#endif /* HAL_TIM_MODULE_ENABLED */ + +#ifdef HAL_TSC_MODULE_ENABLED + #include "stm32f0xx_hal_tsc.h" +#endif /* HAL_TSC_MODULE_ENABLED */ + +#ifdef HAL_UART_MODULE_ENABLED + #include "stm32f0xx_hal_uart.h" +#endif /* HAL_UART_MODULE_ENABLED */ + +#ifdef HAL_USART_MODULE_ENABLED + #include "stm32f0xx_hal_usart.h" +#endif /* HAL_USART_MODULE_ENABLED */ + +#ifdef HAL_WWDG_MODULE_ENABLED + #include "stm32f0xx_hal_wwdg.h" +#endif /* HAL_WWDG_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 /* __STM32F0xx_HAL_CONF_H */ + diff --git a/Software/reflow_oven/Core/Inc/stm32f0xx_it.h b/Software/reflow_oven/Core/Inc/stm32f0xx_it.h new file mode 100644 index 0000000..a3fa1b9 --- /dev/null +++ b/Software/reflow_oven/Core/Inc/stm32f0xx_it.h @@ -0,0 +1,62 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f0xx_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 __STM32F0xx_IT_H +#define __STM32F0xx_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 SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +/* USER CODE BEGIN EFP */ + +/* USER CODE END EFP */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F0xx_IT_H */ diff --git a/Software/reflow_oven/Core/Inc/usart.h b/Software/reflow_oven/Core/Inc/usart.h new file mode 100644 index 0000000..f9008d9 --- /dev/null +++ b/Software/reflow_oven/Core/Inc/usart.h @@ -0,0 +1,52 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file usart.h + * @brief This file contains all the function prototypes for + * the usart.c file + ****************************************************************************** + * @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 __USART_H__ +#define __USART_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +extern UART_HandleTypeDef huart1; + +/* USER CODE BEGIN Private defines */ + +/* USER CODE END Private defines */ + +void MX_USART1_UART_Init(void); + +/* USER CODE BEGIN Prototypes */ + +/* USER CODE END Prototypes */ + +#ifdef __cplusplus +} +#endif + +#endif /* __USART_H__ */ + diff --git a/Software/reflow_oven/Core/Src/gpio.c b/Software/reflow_oven/Core/Src/gpio.c new file mode 100644 index 0000000..ad9c30e --- /dev/null +++ b/Software/reflow_oven/Core/Src/gpio.c @@ -0,0 +1,82 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file gpio.c + * @brief This file provides code for the configuration + * of all used GPIO pins. + ****************************************************************************** + * @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 "gpio.h" + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/*----------------------------------------------------------------------------*/ +/* Configure GPIO */ +/*----------------------------------------------------------------------------*/ +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ + +/** Configure pins as + * Analog + * Input + * Output + * EVENT_OUT + * EXTI + * Free pins are configured automatically as Analog (this feature is enabled through + * the Code Generation settings) +*/ +void MX_GPIO_Init(void) +{ + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + + /* GPIO Ports Clock Enable */ + __HAL_RCC_GPIOF_CLK_ENABLE(); + __HAL_RCC_GPIOA_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + + /*Configure GPIO pin : PF1 */ + GPIO_InitStruct.Pin = GPIO_PIN_1; + GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); + + /*Configure GPIO pins : PA0 PA1 PA3 PA4 + PA5 PA6 PA7 PA8 + PA9 PA10 PA11 PA12 */ + GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_3|GPIO_PIN_4 + |GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8 + |GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12; + GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /*Configure GPIO pins : PB0 PB1 PB3 PB4 + PB5 PB6 PB7 */ + GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_3|GPIO_PIN_4 + |GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7; + GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + +} + +/* USER CODE BEGIN 2 */ + +/* USER CODE END 2 */ diff --git a/Software/reflow_oven/Core/Src/main.c b/Software/reflow_oven/Core/Src/main.c new file mode 100644 index 0000000..bba5871 --- /dev/null +++ b/Software/reflow_oven/Core/Src/main.c @@ -0,0 +1,181 @@ +/* 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 "usart.h" +#include "gpio.h" + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ +#include "../reflow_oven_src/reflow_main.h" +/* 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 ---------------------------------------------------------*/ + +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +void SystemClock_Config(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_USART1_UART_Init(); + /* USER CODE BEGIN 2 */ + reflow_main(); + /* USER CODE END 2 */ + + /* Infinite loop */ + /* USER CODE BEGIN WHILE */ + while (1) + { + /* USER CODE END WHILE */ + + /* 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}; + RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; + + /** 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_NONE; + 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_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK) + { + Error_Handler(); + } + PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1; + PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK1; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) + { + Error_Handler(); + } +} + +/* 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/Software/reflow_oven/Core/Src/stm32f0xx_hal_msp.c b/Software/reflow_oven/Core/Src/stm32f0xx_hal_msp.c new file mode 100644 index 0000000..0d38d0a --- /dev/null +++ b/Software/reflow_oven/Core/Src/stm32f0xx_hal_msp.c @@ -0,0 +1,82 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f0xx_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(); + + /* System interrupt init*/ + + /* USER CODE BEGIN MspInit 1 */ + + /* USER CODE END MspInit 1 */ +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ diff --git a/Software/reflow_oven/Core/Src/stm32f0xx_it.c b/Software/reflow_oven/Core/Src/stm32f0xx_it.c new file mode 100644 index 0000000..ced8734 --- /dev/null +++ b/Software/reflow_oven/Core/Src/stm32f0xx_it.c @@ -0,0 +1,145 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f0xx_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 "stm32f0xx_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-M0 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 System service call via SWI instruction. + */ +void SVC_Handler(void) +{ + /* USER CODE BEGIN SVC_IRQn 0 */ + + /* USER CODE END SVC_IRQn 0 */ + /* USER CODE BEGIN SVC_IRQn 1 */ + + /* USER CODE END SVC_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 */ +} + +/******************************************************************************/ +/* STM32F0xx 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_stm32f0xx.s). */ +/******************************************************************************/ + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ diff --git a/Software/reflow_oven/Core/Src/syscalls.c b/Software/reflow_oven/Core/Src/syscalls.c new file mode 100644 index 0000000..d190edf --- /dev/null +++ b/Software/reflow_oven/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/Software/reflow_oven/Core/Src/sysmem.c b/Software/reflow_oven/Core/Src/sysmem.c new file mode 100644 index 0000000..921ecef --- /dev/null +++ b/Software/reflow_oven/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/Software/reflow_oven/Core/Src/system_stm32f0xx.c b/Software/reflow_oven/Core/Src/system_stm32f0xx.c new file mode 100644 index 0000000..50a4beb --- /dev/null +++ b/Software/reflow_oven/Core/Src/system_stm32f0xx.c @@ -0,0 +1,249 @@ +/** + ****************************************************************************** + * @file system_stm32f0xx.c + * @author MCD Application Team + * @brief CMSIS Cortex-M0 Device Peripheral Access Layer System Source File. + * + * 1. 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_stm32f0xx.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) 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. + * + ****************************************************************************** + */ +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f0xx_system + * @{ + */ + +/** @addtogroup STM32F0xx_System_Private_Includes + * @{ + */ + +#include "stm32f0xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F0xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F0xx_System_Private_Defines + * @{ + */ +#if !defined (HSE_VALUE) + #define HSE_VALUE ((uint32_t)8000000) /*!< Default value of the External oscillator in Hz. + This value can be provided and adapted by the user application. */ +#endif /* HSE_VALUE */ + +#if !defined (HSI_VALUE) + #define HSI_VALUE ((uint32_t)8000000) /*!< Default value of the Internal oscillator in Hz. + This value can be provided and adapted by the user application. */ +#endif /* HSI_VALUE */ + +#if !defined (HSI48_VALUE) +#define HSI48_VALUE ((uint32_t)48000000) /*!< Default value of the HSI48 Internal oscillator in Hz. + This value can be provided and adapted by the user application. */ +#endif /* HSI48_VALUE */ +/** + * @} + */ + +/** @addtogroup STM32F0xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F0xx_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 = 8000000; + +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 STM32F0xx_System_Private_FunctionPrototypes + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F0xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* NOTE :SystemInit(): This function is called at startup just after reset and + before branch to main program. This call is made inside + the "startup_stm32f0xx.s" file. + User can setups the default system clock (System clock source, PLL Multiplier + and Divider factors, AHB/APBx prescalers and Flash settings). + */ +} + +/** + * @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. + * + * - If SYSCLK source is HSI48, SystemCoreClock will contain the HSI48_VALUE(***) + * + * (*) HSI_VALUE is a constant defined in stm32f0xx_hal_conf.h file (default value + * 8 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f0xx_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. + * + * (***) HSI48_VALUE is a constant defined in stm32f0xx_hal_conf.h file (default value + * 48 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * - 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, pllmull = 0, pllsource = 0, predivfactor = 0; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case RCC_CFGR_SWS_HSI: /* HSI used as system clock */ + SystemCoreClock = HSI_VALUE; + break; + case RCC_CFGR_SWS_HSE: /* HSE used as system clock */ + SystemCoreClock = HSE_VALUE; + break; + case RCC_CFGR_SWS_PLL: /* PLL used as system clock */ + /* Get PLL clock source and multiplication factor ----------------------*/ + pllmull = RCC->CFGR & RCC_CFGR_PLLMUL; + pllsource = RCC->CFGR & RCC_CFGR_PLLSRC; + pllmull = ( pllmull >> 18) + 2; + predivfactor = (RCC->CFGR2 & RCC_CFGR2_PREDIV) + 1; + + if (pllsource == RCC_CFGR_PLLSRC_HSE_PREDIV) + { + /* HSE used as PLL clock source : SystemCoreClock = HSE/PREDIV * PLLMUL */ + SystemCoreClock = (HSE_VALUE/predivfactor) * pllmull; + } +#if defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx) || defined(STM32F091xC) || defined(STM32F098xx) + else if (pllsource == RCC_CFGR_PLLSRC_HSI48_PREDIV) + { + /* HSI48 used as PLL clock source : SystemCoreClock = HSI48/PREDIV * PLLMUL */ + SystemCoreClock = (HSI48_VALUE/predivfactor) * pllmull; + } +#endif /* STM32F042x6 || STM32F048xx || STM32F071xB || STM32F072xB || STM32F078xx || STM32F091xC || STM32F098xx */ + else + { +#if defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F070x6) \ + || defined(STM32F078xx) || defined(STM32F071xB) || defined(STM32F072xB) \ + || defined(STM32F070xB) || defined(STM32F091xC) || defined(STM32F098xx) || defined(STM32F030xC) + /* HSI used as PLL clock source : SystemCoreClock = HSI/PREDIV * PLLMUL */ + SystemCoreClock = (HSI_VALUE/predivfactor) * pllmull; +#else + /* HSI used as PLL clock source : SystemCoreClock = HSI/2 * PLLMUL */ + SystemCoreClock = (HSI_VALUE >> 1) * pllmull; +#endif /* STM32F042x6 || STM32F048xx || STM32F070x6 || + STM32F071xB || STM32F072xB || STM32F078xx || STM32F070xB || + STM32F091xC || STM32F098xx || STM32F030xC */ + } + break; + default: /* HSI used as system clock */ + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK clock frequency ----------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK clock frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + diff --git a/Software/reflow_oven/Core/Src/usart.c b/Software/reflow_oven/Core/Src/usart.c new file mode 100644 index 0000000..7ece6ec --- /dev/null +++ b/Software/reflow_oven/Core/Src/usart.c @@ -0,0 +1,116 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file usart.c + * @brief This file provides code for the configuration + * of the USART instances. + ****************************************************************************** + * @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 "usart.h" + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +UART_HandleTypeDef huart1; + +/* USART1 init function */ + +void MX_USART1_UART_Init(void) +{ + + /* USER CODE BEGIN USART1_Init 0 */ + + /* USER CODE END USART1_Init 0 */ + + /* USER CODE BEGIN USART1_Init 1 */ + + /* USER CODE END USART1_Init 1 */ + huart1.Instance = USART1; + huart1.Init.BaudRate = 38400; + huart1.Init.WordLength = UART_WORDLENGTH_8B; + huart1.Init.StopBits = UART_STOPBITS_1; + huart1.Init.Parity = UART_PARITY_NONE; + huart1.Init.Mode = UART_MODE_TX_RX; + huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart1.Init.OverSampling = UART_OVERSAMPLING_16; + huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; + huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; + if (HAL_UART_Init(&huart1) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN USART1_Init 2 */ + + /* USER CODE END USART1_Init 2 */ + +} + +void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) +{ + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(uartHandle->Instance==USART1) + { + /* USER CODE BEGIN USART1_MspInit 0 */ + + /* USER CODE END USART1_MspInit 0 */ + /* USART1 clock enable */ + __HAL_RCC_USART1_CLK_ENABLE(); + + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**USART1 GPIO Configuration + PA2 ------> USART1_TX + PA15 ------> USART1_RX + */ + GPIO_InitStruct.Pin = VCP_TX_Pin|VCP_RX_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF1_USART1; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /* USER CODE BEGIN USART1_MspInit 1 */ + + /* USER CODE END USART1_MspInit 1 */ + } +} + +void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle) +{ + + if(uartHandle->Instance==USART1) + { + /* USER CODE BEGIN USART1_MspDeInit 0 */ + + /* USER CODE END USART1_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_USART1_CLK_DISABLE(); + + /**USART1 GPIO Configuration + PA2 ------> USART1_TX + PA15 ------> USART1_RX + */ + HAL_GPIO_DeInit(GPIOA, VCP_TX_Pin|VCP_RX_Pin); + + /* USER CODE BEGIN USART1_MspDeInit 1 */ + + /* USER CODE END USART1_MspDeInit 1 */ + } +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ diff --git a/Software/reflow_oven/Core/Startup/startup_stm32f031k6tx.s b/Software/reflow_oven/Core/Startup/startup_stm32f031k6tx.s new file mode 100644 index 0000000..9884c96 --- /dev/null +++ b/Software/reflow_oven/Core/Startup/startup_stm32f031k6tx.s @@ -0,0 +1,264 @@ +/** + ****************************************************************************** + * @file startup_stm32f031x6.s + * @author MCD Application Team + * @brief STM32F031x4/STM32F031x6 devices vector table for GCC toolchain. + * This module performs: + * - Set the initial SP + * - Set the initial PC == Reset_Handler, + * - Set the vector table entries with the exceptions ISR address + * - Branches to main in the C library (which eventually + * calls main()). + * After Reset the Cortex-M0 processor is in Thread mode, + * priority is Privileged, and the Stack is set to Main. + ****************************************************************************** + * @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. + * + ****************************************************************************** + */ + + .syntax unified + .cpu cortex-m0 + .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 + + .section .text.Reset_Handler + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + ldr r0, =_estack + mov sp, r0 /* set stack pointer */ + +/* Call the clock system initialization function.*/ + bl SystemInit + +/* 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 static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + + +.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 M0. 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 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + .word WWDG_IRQHandler /* Window WatchDog */ + .word PVD_IRQHandler /* PVD through EXTI Line detect */ + .word RTC_IRQHandler /* RTC through the EXTI line */ + .word FLASH_IRQHandler /* FLASH */ + .word RCC_IRQHandler /* RCC */ + .word EXTI0_1_IRQHandler /* EXTI Line 0 and 1 */ + .word EXTI2_3_IRQHandler /* EXTI Line 2 and 3 */ + .word EXTI4_15_IRQHandler /* EXTI Line 4 to 15 */ + .word 0 /* Reserved */ + .word DMA1_Channel1_IRQHandler /* DMA1 Channel 1 */ + .word DMA1_Channel2_3_IRQHandler /* DMA1 Channel 2 and Channel 3 */ + .word DMA1_Channel4_5_IRQHandler /* DMA1 Channel 4 and Channel 5 */ + .word ADC1_IRQHandler /* ADC1 */ + .word TIM1_BRK_UP_TRG_COM_IRQHandler /* TIM1 Break, Update, Trigger and Commutation */ + .word TIM1_CC_IRQHandler /* TIM1 Capture Compare */ + .word TIM2_IRQHandler /* TIM2 */ + .word TIM3_IRQHandler /* TIM3 */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word TIM14_IRQHandler /* TIM14 */ + .word 0 /* Reserved */ + .word TIM16_IRQHandler /* TIM16 */ + .word TIM17_IRQHandler /* TIM17 */ + .word I2C1_IRQHandler /* I2C1 */ + .word 0 /* Reserved */ + .word SPI1_IRQHandler /* SPI1 */ + .word 0 /* Reserved */ + .word USART1_IRQHandler /* USART1 */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + +/******************************************************************************* +* +* 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 SVC_Handler + .thumb_set SVC_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 RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak RCC_IRQHandler + .thumb_set RCC_IRQHandler,Default_Handler + + .weak EXTI0_1_IRQHandler + .thumb_set EXTI0_1_IRQHandler,Default_Handler + + .weak EXTI2_3_IRQHandler + .thumb_set EXTI2_3_IRQHandler,Default_Handler + + .weak EXTI4_15_IRQHandler + .thumb_set EXTI4_15_IRQHandler,Default_Handler + + .weak DMA1_Channel1_IRQHandler + .thumb_set DMA1_Channel1_IRQHandler,Default_Handler + + .weak DMA1_Channel2_3_IRQHandler + .thumb_set DMA1_Channel2_3_IRQHandler,Default_Handler + + .weak DMA1_Channel4_5_IRQHandler + .thumb_set DMA1_Channel4_5_IRQHandler,Default_Handler + + .weak ADC1_IRQHandler + .thumb_set ADC1_IRQHandler,Default_Handler + + .weak TIM1_BRK_UP_TRG_COM_IRQHandler + .thumb_set TIM1_BRK_UP_TRG_COM_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 TIM14_IRQHandler + .thumb_set TIM14_IRQHandler,Default_Handler + + .weak TIM16_IRQHandler + .thumb_set TIM16_IRQHandler,Default_Handler + + .weak TIM17_IRQHandler + .thumb_set TIM17_IRQHandler,Default_Handler + + .weak I2C1_IRQHandler + .thumb_set I2C1_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak USART1_IRQHandler + .thumb_set USART1_IRQHandler,Default_Handler + + + diff --git a/Software/reflow_oven/Core/reflow_oven_src/ked/ked.c b/Software/reflow_oven/Core/reflow_oven_src/ked/ked.c new file mode 100644 index 0000000..e69de29 diff --git a/Software/reflow_oven/Core/reflow_oven_src/ked/ked.h b/Software/reflow_oven/Core/reflow_oven_src/ked/ked.h new file mode 100644 index 0000000..27b76df --- /dev/null +++ b/Software/reflow_oven/Core/reflow_oven_src/ked/ked.h @@ -0,0 +1,2 @@ +#include +#include "../ked_config.h" diff --git a/Software/reflow_oven/Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.c b/Software/reflow_oven/Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.c new file mode 100644 index 0000000..5741e38 --- /dev/null +++ b/Software/reflow_oven/Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.c @@ -0,0 +1,12 @@ +#include "../../../ked.h" + +#ifdef KED_STM +#include "../../../peripherals/uart.h" + + +void usartSendChar(void* obj, uint8_t ch) +{ + +} + +#endif diff --git a/Software/reflow_oven/Core/reflow_oven_src/ked/peripherals/uart.h b/Software/reflow_oven/Core/reflow_oven_src/ked/peripherals/uart.h new file mode 100644 index 0000000..72e509c --- /dev/null +++ b/Software/reflow_oven/Core/reflow_oven_src/ked/peripherals/uart.h @@ -0,0 +1,4 @@ + +#include "../ked.h" + +void usartSendChar(void* obj, uint8_t ch); diff --git a/Software/reflow_oven/Core/reflow_oven_src/ked_config.h b/Software/reflow_oven/Core/reflow_oven_src/ked_config.h new file mode 100644 index 0000000..5a34885 --- /dev/null +++ b/Software/reflow_oven/Core/reflow_oven_src/ked_config.h @@ -0,0 +1,13 @@ +/* + * ked_config.h + * + * Created on: Nov 4, 2023 + * Author: key + */ + +#ifndef REFLOW_OVEN_SRC_KED_CONFIG_H_ +#define REFLOW_OVEN_SRC_KED_CONFIG_H_ + +#define KED_STM 1 + +#endif /* REFLOW_OVEN_SRC_KED_CONFIG_H_ */ diff --git a/Software/reflow_oven/Core/reflow_oven_src/reflow_main.c b/Software/reflow_oven/Core/reflow_oven_src/reflow_main.c new file mode 100644 index 0000000..0acb70b --- /dev/null +++ b/Software/reflow_oven/Core/reflow_oven_src/reflow_main.c @@ -0,0 +1,16 @@ +/* + * reflow_main.c + * + * Created on: Nov 4, 2023 + * Author: key + */ + +#include "reflow_main.h" +#include "ked/ked.h" +#include "../Inc/usart.h" +#include "ked/peripherals/uart.h" + +void reflow_main() +{ + usartSendChar(&huart1, 'e'); +} diff --git a/Software/reflow_oven/Core/reflow_oven_src/reflow_main.h b/Software/reflow_oven/Core/reflow_oven_src/reflow_main.h new file mode 100644 index 0000000..299ca44 --- /dev/null +++ b/Software/reflow_oven/Core/reflow_oven_src/reflow_main.h @@ -0,0 +1,13 @@ +/* + * reflow_main.h + * + * Created on: Nov 4, 2023 + * Author: key + */ + +#ifndef REFLOW_OVEN_SRC_REFLOW_MAIN_H_ +#define REFLOW_OVEN_SRC_REFLOW_MAIN_H_ + +#define KED_STM 1 + +#endif /* REFLOW_OVEN_SRC_REFLOW_MAIN_H_ */ diff --git a/Software/reflow_oven/Debug/Core/Src/gpio.cyclo b/Software/reflow_oven/Debug/Core/Src/gpio.cyclo new file mode 100644 index 0000000..f931fa1 --- /dev/null +++ b/Software/reflow_oven/Debug/Core/Src/gpio.cyclo @@ -0,0 +1 @@ +../Core/Src/gpio.c:44:6:MX_GPIO_Init 1 diff --git a/Software/reflow_oven/Debug/Core/Src/gpio.d b/Software/reflow_oven/Debug/Core/Src/gpio.d new file mode 100644 index 0000000..a1af46f --- /dev/null +++ b/Software/reflow_oven/Debug/Core/Src/gpio.d @@ -0,0 +1,57 @@ +Core/Src/gpio.o: ../Core/Src/gpio.c ../Core/Inc/gpio.h ../Core/Inc/main.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h \ + ../Core/Inc/stm32f0xx_hal_conf.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f031x6.h \ + ../Drivers/CMSIS/Include/core_cm0.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/system_stm32f0xx.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_exti.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_cortex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h +../Core/Inc/gpio.h: +../Core/Inc/main.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h: +../Core/Inc/stm32f0xx_hal_conf.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h: +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f031x6.h: +../Drivers/CMSIS/Include/core_cm0.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/system_stm32f0xx.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_exti.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_cortex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h: diff --git a/Software/reflow_oven/Debug/Core/Src/gpio.o b/Software/reflow_oven/Debug/Core/Src/gpio.o new file mode 100644 index 0000000000000000000000000000000000000000..a240165c85085b4fd272eee42fab89687dc11bad GIT binary patch literal 504476 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

gCpeBWn3n2#=~Q z>GmY5mok84wSNX~NQ!#d1Hdu0l2U-<>Uhf8PpFmDw>hPrTMl8WdW@QlY3j|WohP4G z*HTrGp?1|GN~U^@Ui~xbJbIV1)IQ6=a@DW8z~QXg?nAJ1>YrK>?7aFoB|~}YC@L*4 zs56SeE~+n4TjY|u)i#N}lhl*RO_qr@D?_#Rux` zPr$m>6?72yP`#cK$R72%-(mS!-8c^y(W~ZDiP5J%^b*(;^%{Se^s9H$qZ&{zq~_+3 z+Jy@KVRiFQ!_WGOD(ubz)5Y8)bmwYKs?u7wQ!|5XD6^PPL(% z=1(fQ-8BO?xE2qM)%OtY)r`?A?5R0P`-8XUuoMnHnuPM z1!xB7*#>F8D1v3MX6G1$A(|8?K&WPAFfMSvX0aXE0Zrx z^bv#!nuFIRB@H?srryfh9=F2*;B+Vc6>L+VvEeA`{lu|~0OjExDa9s0tCg6nT z8()~5)Xb&*@04aIWn`(E!41%*X`b>SOxFbELU>xU?=_5`p$QvAuuM%B?bBy8%E@3^ zn)#;z*_uWfEORuQTL8J5W-8UsYP8OPbD9%>AlP}0b2LI<)O_$CgqJkS-vYa=@uG&t z70uFkuzbxM!?>gZ&DYeQxT+~$hJgw-jZ_8}Y0_x%FV>u+J+(x$WhyL7HHH5{Sf;s6 z54BulLthP4Xbz}gQmNUK4wEWPodR%8IJtfj@jPIKga_|*QgOZ25ZtpHNxbE#w;Et%^EXWE^ca0pN8<3W-YB*w>4w5kloRA z(C*ZtNqqoetLEo_A#BrpMYH&xrYIDwLz7Ii@xEpWl~W?`ZLX&84y0#7%9mZ)x7#Q*b9yRT{yUCw^0h` zs+}4D=BCYX26NYbcNOF9)oy$ZmY&*9+St9cZ%}K_TRYkZp^x@tDlC1qJ}+SDueFZ? z3((#>1-4K7J>{)|+D&wOg0zm*CJfe=(4rHn{e>3l{n`zbqa4uArgb+=`#rTx4r%)+ zSh%);gom}-9zcXPftn9d+Uo+iM{6(8bc)gXQ?nyh>qw_2aoUZv>BnnVP&43&wrvVb zj%xcKf+cG0Xx&ZHu6PfStYv?JE=8O7BOH!v^H`Xi(60Od!A@#_9RW+%UP^<>X)XTA zD9i_K=_Wv?b_K;eqwTMONw!uSj9;6hEnNu6)uyjUu(R6h2cbKsJw*%Id2Rdw2=lb@ zw3T1f?hAqLk~Wx%<;&XDw4GhiCNDwgeC_V<5#_4(ZA#AzwYC*tMcTXr&=qUFngJ!+ zWq-r3RC}-*er4JVRFzk1-=Q_6N^9l>hilqB>%pqEbz@*P+S`c;R;LZihGo6>GBsfv zw5%(lT-T~->uJ=suLLw{U#DhAvzE6Wx8SBWfok7dTIZdxysiDp4Z1s89<9(V+8h_? z+O$42SK760R8Za3{yiPgp?ylH1NXJDv|e{={a=U418pH~v|ZYFZi7A4u51AG;4vcR zBkg28Vm{V-P@k_?8%medr_J7nVEx)}X{{U3ZlW@9P`jxRY)D%)3nL6`zy1Nj5pC#M zM0uul9)!bl?FO1oquQ%A02kej-=K5VZT3QFH=P}=DDJwK*TT<3_x2w!@zm{I4Diy` z{E5)sI>T$Q^wDkq4I}vKKBVQ)Pq&M7{<@#$1NP}WV;~IFrRotZNLSm6V8ObwQs_c- zrg#L~uN$Qqa6nf~9i@Z1&uKP>>9%G=cu2QkFCbi(l?uPZI<+?-O85B$j2Eq|{{<{Y zx0NPrtZuzG+~ahXSHR+Rh5t*eb-ZB+kLYIKLd>JO5=u@Ib)8#alBCa?ZnGA$7EwC>#J z5N7Cn=w-;%eNMaf8QmXUfGpitoiNGP7+e?%ep&sNmq2QPy;Mq*Z2!qfo{((z*XJOUYHc> z(qDpKk?uetgvGkEbHGY;Yv^8=>l7+nV1;hW|2i4EMHISP_d3-;HM)DWzt`&ORsb4w zp0)8pv z4xJ<&quN+?1F=vK9?FV?s|~}#`DlWy9ftQ{Wn^;d+A%~p?d4rQt!z}e-?$jUWPQi~x)u7>?r=Y*57`IdNqr>cQm6FS zsH#iV|3O>pX?>U#AVa^J&i^v?bBkbdM!!f0VV3?9RfG9@%?F55sGqb3CMEhAKZBL) zchj`5(mQvt`L=Im&-9;*;qYAl-A*`+>i?izaZH~^Fs`qlZQ_M~ z@)UrJ;Uvv>SHq;OU~Yz$fpB*>=%}ReFwEsaxYtk-j$odKhxER98T6E%dmC2MU(xGh z*hzbpuc4TVWj{kTtqlH#4YZ^O82+M_cAugB2j~I~wX+d3$S_39Ot4|gQV2r~4Sxed z4S&+&zu%x-0lzTA0$SY;8F~&QSh!)26?BIU7PP=e7-rT1A`Lux?okF?s{f)5{j_Ps z7`9SlH`WmIE?Ar)h(?GvJfIyf!O;8-;E2JSS|&#g8$Sk1G<<&o*OFv7MukeUVf+v1 zQVh8XV8;w+<P{6 zTht=M!Tqo-HteA0dx>HA8|X?6DeD1c26tLb%MA&1q*Y-sQDIwYXrLZvl_BQ@bk__M zGr(#MpVAGfGeppYtv9TuVH*rqkD4#EzD zJJrnh4e`67>onZ(#bbP6_@o5FE<*+#$95am%m906I6$rA9>WwLz#~H*bwC~)&UztA zuVL{#us*}4lYl3Njp&X|?l;V)GHJjNPY29{hF7WSG-TknBiOKE;wG4k7`94b^3<@~ z4)DwnM=i_ehE-PpqlVCY3^ZnVNR{xo;Q{p{Ul?SxM!Fc2cK}?C1JwC)Gv0SWXm{ho z&tU0c?D+<|y~eF}V4lV@H|V^KJv8mTjmlR6K1OXD{Ctg})SvJ(p8X9D{>EiSumEE= z-Lrj0%_OiuqmrIcka68pTyCf_hc?Xp#t+nRIABaW0yt>QJ_HCe@~$BCA>+^n_(d3h zpvGCG(Y+B6W!y#^d$iG~046cU&|E}`H7aQS9WnM@!w5%>$HicYMrRM)i6r9}J#a`i z9;cT*#pqAV%n9R?YcM%!yiHZ)DdR5&uvFtSORzL!A+2EP#y|2PJZjLkpQk3{p5(5Z=6CW4h6Z>MPUH5d<$z~Q=a7cG^I#-)@9HW?RFvT(x~Mu}3hv85E_-83c#LU+p; zvKPAB#xIru?ikoktthwg!Kl0R6N(c&IhxAD#I01u6?ZGc0MF_kPI8QbYGJ~p~hao20yO{Xn= z#yzBaVtg?J!hYk-EL`q@F}N3ggT|G20Yk=r`7jwa4lIXm#5mzwz*D2^4d|X3OQ=)& z+}KLl%&2iXy~1P09$&C=qn6$fSChycq1{Zg?4ffv%FE3nyH?qSK?vf zWoq&Pc$;3P9+{8nGTmKY)94oX`I-K`4oiQN8|{AqrZ;|tZlCGXAP56ZL$tL9nRXw9 zWw2>M6rzNf{-oq2)O7MA2=|+8c0+i;6!sq651K~nAPh6@rFP08Q!ceI!cC*pR6A_? zfzH(;On>|fh%^;Zu@z;yNx5RQN%aqgjWK;%0l!#Nfg^-*roWEEGTszSn_Gfuv;*vj z>Df%MB$JUAfn%o5FW{G9+SLtVrYUC%{LYwse}rY0sW1t;Y}30ww3rc7$8Rhgdr2e@X6eH$j#rcY=quQ4s9 zx~kSBr`~;?>G*YwP;XjK$$Fz{K_P@qCUXz48>S1Vp=&l3QbKpr^xG-;-7@jNgz&a$ z4o%S(Q|>efTTR>txWG2k-*@5HZhCJbuH~+20|R#7bbSt>)0CYA%Py09H!QnNTkgUA zp=lS*;>V`_R1Wl-)YJ{_Gwq_4!PRj;O-gsiDap`zI=1}`=Huu}U6mlmZ!8e(pkoIu zPlp{xeK20MV@@0V;v8S0+jGQmj9P3-j!Tz;9dqp629uMH+a7?WIlfhoi^y;+8iUC> zNB#Qv^9_vfz-jj! zu!l}wJz$TWT&W~|;#9Z*?t@OtX}*s*eQ*Ns+-Zt zyz|er#~pQkg?e3y&T;fEB{{!KrEIcu z^u#MS5b4UqX%}H#FtLiVkHU!?#em|8?e`!oow%1$gz|~g=}uKn{G5eD&BPzyg!|2j z0klMQOlb_>D-W~YPUe$dQn5rko8n?3{_GTZ3{U5?qcdgyY^ zR?@0))@)K5gy+oOszuE6W@eNp=9xu3hsg!AF>0<~G&9|U?vhy=HA^p>J*5o&irKdh zq02XW?gdt0cAjqKRkLJzkBZEO{o!70wqgy0C1z8fkEo1db;zK=C!vFrOLdJT1?l>chH2aHrG&tq{e(1WkdcK+5Z0S7@dGrNZ}Elub@Rkm!5Ynnsmar19{34_`1gAcz^~bSBW>z8&G|zxxn*v2 zfbO>W44R2|%%jTyE#|H?*IUh_sp4rfpB<0U+s*T-K)Y-H=DX0{Gq+y=zYcSI3Vq+4 zbw$ih^SyNR^uYXN283PapM4M3Z9a=m(H@%5r#-sId@`9lGQa&H;Ia8@bX$APPvwL4 znJ;PtJTbp#jw|aoH*di}1LiT^5DuDmS%3|hr%}EzY+kwI5`GPb&`GzJ!r|(q=kG#TI7$4!e%vG#B@xAw&X9Y_B==XqN+&&`5~*y`oeKz7 zK52~h+KNeMsA*O|Ine~mhRL;S!ER4(oDa)8lgF0B($zw_6*@PI7}}%VEl#Y4-vNuA z^wq;bi}z`ggjuYjT=1~P=4sFsTFAN}EVB6S7#xZ%{Aj~3u@FVVq}1ZsEV>Ab4%+m} zEw0lkQ-#H#KXjEAYkeTRW?``#tlC0GOI3|U+aW-$#qb6xcD#Y8SBMmPH|ebjyiU_*}7Ep@v_+rN=g0 zOM#`y73`{I6Q$Timh*3el~`^{1(aHzqqawx0 zPm`qEQcsilp=B%WP(7CQJj8r#sie%X*K#KHH=kHKehSuasdEGywA@KwG7VY283N&m zWd)t{JhKd^AN}0&U%G>%mNEAcCCIAI115=9U0Kj2Sq*K5F4^j=C4?zf0T*C$%xV{< zr^l`M^zFn6tA@$YowRzFa*$J2sW$LSx4Kvklhan~nxV_E`iXM7Oe@FV;gDsujFP}? zt7EAMmSc5!6U$)#BG7thTD4DOzLoFc(m3#a#o`SskF~-eA=? z5AN5knp**lR=-i&e#7ei2w1b#jx@kcE9;*j^s~00cBQ{{B6R@vS${c-D1p{?l*I*E zZ>CEMw)Uo?9skOeGuVFX`X#vBgVwvKpbxXoq%tVhIwBq>an`9@U=nY=o_=kD_4o8% zAFZjD zOF`IVeUg@v8`kerrPOTw4kdCotwmph-Lej5@xyLgUv`J^jX(@21h) ztQWh&z1{k!W|-WyPDp~uJ?q^u5O!Ekq&NA#_0nZvoz|7KS3R)KQQ~sDtpB!yL$~$T z4KR6Vz0D889&0Tv@Qrei~2*cK0w3d%pzjGJ5XV&LvIeczCZ#7IttSdS7>8;3l~vjGmjoXiA@Z3G)ry9=nV;5Ur$%*KZn0T0`^4g&VtX401pp0;m& zje)#u-~1TN+xChLEPZSfsb%16`x|w({A^8>JL4be5d!wv*8i{BW_y=rYLKnF6D~K{ z)@~~NLTuk^1PisTUWj1(Z5t>HI$&E&KjomUrWwL8Thnw1!)?pW0f%jWeiIO3n_~&T zNZZYq08zFd?}0;%?I(}G;%wOm@Jq1We+F>GcH%4ybksJHS{q5W>qBr6DYmQTLwMZw zlMM)V!gk%4U?*)^DveWZr<6mOZae8df@Ru<(vEP(Hh?zaEZfd?5a!x0q}S%0t&{hevj|y1`uRUmAs_tNqNaxCl4<36yxc+g~h#(8KG$2a0s#gaujU8eLlUI5%znF;Sg!>eil)p>_7TntHHh`6egGLm(coh z#eQNqAm4t`Uw{Jp!qu?6YX2RrD24VX5-~!N{YOSXvAugMVwTvOErDgJ{R}x+nSJJK zVCDAH{)R(^{qHO+EA2h^Kv!ko`8IUd>`m2x8hhU;2y5+U9EM4qedtoKdi%fTf;HF| zwZr|o{U_I9*=X-c{o5P%<Zbjtxp25;??{JKckKD6p=+_1Q0d=lf58sA zHhUXtptsvkr543q`wji@yJx?24@^4jHIyvew}0bHSa#ZfOS?>${Xc#*-qfWA=$fY9 zSO>owQyX~@woQGV7OSqQGpJwOJ#{0#-o#(x-&PJ`&(x|U2z#dVWr8t#N_nz|>V6!3L+Uodg)4nnU@uC-440(0TDXOA*DJSN;S-AKquZFp1<9QR6m> zS7Z+s&09t9U?T5VYMmzWnC%!SnYTO?!W7;-AuNyau3$mKUsj(pjHh{mXZt$fB=6Q0 zIGo}Md;zJvx9Jw7@jRx(GM#swp7d$n8uH8FMJci1~yUvIds@yfxNf1H1(K!eo%QjJgy< zyt%(3<}h#F?|>2Bg(ZMzJl+s=&w0I6g^cocr{FG)@hZLnjPnZe055o194uY&MVOhf$K8CKAKa+N#I{q9Ete(Hs z6MonEk2XQr$e&XM%O-w^0@rziZ$q_xGk?YJFuBQpX$fN9;(L4y;cb3A^?mQ~y{5yV zg}=oHx>o-0dl9pZfBz4_vuVqBz;blj8wa5qpY}8b4lWL>>HTzbNLvi%;gB7Ofjk}f zD`4X7u+a#ezr(FX&>eHwOh=Ac4sX)$%XZj8+gXmo#$Z_HI&|j3(#bWqcLsB)O|9Kvf3=IbG>cKDHAsTzlr z1o+iD%%Rk%&SCp}Sk^l<^x+~J9E2%=>kj|E3%?eJuUx=d9gb7l^w`0z3DE1{a|(V> z92{tF_B))I3K(!$N7?qEgD+(e!w#<905`#!c38R#EOdYXK{zd{`vfY=`2q#YcY%cq zHd6v}SnwgGBN2j^srwTt_>|gHQGx(lTyC_W{#CFT!SaKESV7t>3=}6=O202&ur?mT z1i?=F%J+yMjqb})!5;eaQ>lXWRE(qv4CmpHE-3Pb73e z@FPH$V8%i~wxIMPEOP|C)U?eNR8EBOtROK1P z$cP|tH`r6bUx%Q3CMcf=hv$OJW6+HXx~cm!CRi{LY+O)7oxK-=-)Y@-5jHP@rK^zs zc|rVDv)cm!?n2QXfQL}O1Acpjyu)Cg!av7wNnXOcLtx&*@-#3X;j)Er_Z6DNu=EqI zqK31-(2Oe60HJafM%X9ZPOX+eVbN!RAfXpc`(WXpT3Ch%_fb|EDqKS~*M4Ch&D#UQ z>YWI7P$*de7AEAV3OOXyPXP-TMhM||SQtm`q6pzT6&NT|xG@zFB|NExWwg*34qc4! zA4;2Ig&DLs#t9F1B4)hs_UjNP2tQOnctprQ0^w2NWlHuEg?+R4HwQtOD%|M?hcuy(mYH;6e=*o;VV4dp zL+IuP$P`YP3*i}|iSoKE;YLbhvW2k)xau6?q^}^%6{32?D=eHwnejQ{H`K#DFHED( zSDvuoA);Imnlv!EC@ir9yCj_VBXpOAy{lk(McDcQbos)GwCxrMgOH)Q6S@+ihZ4e4;WO&!mI>c7Ay~Q4|2LRa2tRxYF)M}M^es`9uzDqg z*Mvbd1FD60v~Z{q+WijqTA`RS$2#F+354~+M^5l-5H6$s;B}$l2pk%P8tQa62_K(B zup7deg@9&ZSrgoE3b#=bd`oz40xWL}**UPhBW$Bru|@c14NO{vC0-D=3Fk}$v?5ITHgu1L4Yc6)3eVD1>l5m%5$uVuv=}4w3$?j084%v2%y>}9qiH`RY@{zf zhK0VAQI7~$JqA1#encDeGodqOEYF3u^IKSDOz$KLNC#GbnCoD&eT8i5%r&eiLYq+ zk6?bHs+G|Bi>lUx1&Exe$-GabQG*4FW|rfp1c@prSq~OP`#~5YvZ9VesOWEc()&eE zsatqJG@D9=gQ70lsjZwTnn1VUj3{&r!Yt7;N}{qw|5C#(M|6+go?Ow7^!v_=cFhJmC(_Wa zc3!k#4gB&%{SP6$AS$>GlZ&Fwv`SqP&8GIoWl=;HgjYm5I$O#Y&3gz|AlkDIa8>l} zDg4?((Pw`_S0vg&9js!}VoK;rL|=F#W~t~6T3gFRWnyN*!W+6(A=*``TSu0Z2L0BhBphc%%ltODkgQ$2Mp|6WRmW4uahlt)z0`j%fa6K#S;X032FH4eujnn<(u$ zOxi`a*F$($6mSS8_e4+r2I~+#rmEn+C|(2T6g{RtOY%Up=N~|qD9jwtE&7Dk&xay8 zHMM(0&7QD)B-*zDF&~RIXaK#Us0;}EMBB^2o`|@&;ny#EiHe^AQ3$2PgQ8*vCPSjB z2EefBO&bLB5+9I4=PmZQ3-A%YLr2@b;yFLz0{z7OnTX;qofVe#YY@hf|J|IwR zyaosoe?YrTusHBjun=)EbwfkN{~UpEzxcgC2oH!i;YZ-F_4Qwb@xsKZpF(#??BEC% zE-ro>?67#C3YQcizPT5}Mv9Z^Nk@slngm_6_`d|W$A~Y!28b2AIKnbc?9>Zgy!dG= z91_HB{TS$oxHKH>s5l}LkSM-z9*`s!u7qE*_#-+-N)hM04|Yu4Q2};bJT?xK6JpbC z2v3STXl|Yo?`cG^RB;6D;c4QKJP6apZj_Oo7RS+RlOc|vEhJN1l??YY;&*8>XNhyD zKbS4vUJ8>Ov2i0za>bMWhRIp+qHtX9Iq}~AWme)&duu)HcBc?w~n_;qtYk(k*8U9os3ZG$CZ$w>%H z#obgKl!?2)0hEi^X27IE{0^0!mEzav^N}j?PFgXqi3O(+vs%2JI&?K+?iQldigT#~ zs}tYR0qVu&WzaQxd<3FG2`8bo;^uKxt!B3U*EmaY;3wLaV=)_(!qCHJCX=^;5nwZ&e^ zy`6~SDY0(`cuDeGAoP~3x{jDWl89IceI;)$M-)Fvy)(dHVoSd^Kw@AKY@g&>JXoOQ z6>sAv_>?o!adOC4naaVG@?A)8K%G zVmJWdVab02un5Uvs>35CZ@&ZgD9M}05jtA3Z3!So()TAIR#MptU7TdzM{tOj#L^8( zkbJrYa6}SIeVe0_TAHwll4>fzlO*Ppr6)_wsJ=~++xs{dCE+YcM%2nHCCRhJ>MBUZzA62sk4N+5?j;i66aZ z*^&j68Rtk2(e9fo+4~gitmOApz&S}R9}edwX0&kTNxnM_c0tlk%i%>y`!29ck}NZ@ z%aWm3xL=X@UxsDAVU&4XldSw6tXfjN0#GBl{|qD4N^E+;>LhRQ zU{Wu6v<<=riKPH=U6SGgXq3E3-N`1&ygpdokgV;&u+5SQwqQ3UyF`Fnl5Gb8wJp?vKbBol5`Ka4@we$Md%^Pt^lxM$voOZMkFzQV9zAK)5inPC6B1~9hGFCfN)H* zO@}DslIUu%7m^y*=68$` zB26{HBvkrj0J{Csj1K_^qzfqvIw*bT3s{Cp|D=>EM5>+#;Zf=N zS#U^{W-)*yDPsn|Wa;!4uoUTguVJ8L(godM$E82M0yrVv5)8kSQWJf(b4nUl1ePk* zxB$|mA}@@PE*;_!<+M~E1&0i&Io+2`Y0ECKGt$55b<2|K@53Zpdj2g4bEJRgK$t6S zr4;V0^rI=bz;n_&w0E4B`lrD%Pueya?1I#ugULmy1MS6^q<%Ls>}Bae>R(@x9;O?a zFCC*ZjRNV{-@x*!^gf;O6-xW<5VJ^{O=soB(hs+Rl}HQwVOc8OO1W^E)c-?7DVI7` z0xG22r$JaLwWgi9O8OpULD!@edT<&ZcBaWwEB*8gm%#u zsZ$aLYLzM}$#0XkB_mk7^b1?CyVCSHz&&Z_0XTF>Q@;n?muAyW(kacScFF^3BTcm~ z=?dCcx}{E20S~3q7a~fJ^iVk9k#ur4gpZ|rsE6At6>NgAPx|F=U{9n+==8r|>PdZ@ z0cqm}utDh?`G`3rU3LyIEPeMJ97d#TY4?39)n~!vnY4pG2Y)X8#t1elt)B+nm~{I8 zCZ05bN~jmo-PF%=kzITS6Ia=ykHFky+w_R(F1sBI2M?K{9J;--pp_7M$`0CrdC7*K z0K8=rC;{=2{p=1)UzscAk$y6FYJdC7exhDbfb7sP{PxL~TYv@1mdW4{B>VmY2!mxc zo?s!e-vV$gp)wch3GA2keF^siviH|wgoCnLnnz)>sBFL?*-ToO!e#&L13N4;{0@f* zS-U-gManu}f-Xw7oBX0>=jp|aktI-#7b}}t2+KIxPz!`dWM^+ccvNs}f}N0^rDuCm78L^FDOu-4uvD3h3aT`jgnm)FY!f}k z)3Q$5b24NW)NRU?t#pRT8QJ^k&}GS1O@n2&Y}XEqmm{+_K$k0f^eWg{*=rGC=VjUN z!z53}UWda4+1MiJF3J{AeS1mv)DI??W!==ayCVBF5+?bw)wJ~#$OcW&U6t9<;cTI7 z0j&&0GM4UAv8*{6P$IK1hp<%kGJQH!CganxjlaE^giD%6_Cwph{-#KkVvYrPp>5~1m3ane^JQ02mWs0+4J+d6CdLGHX zbi?I7miCTv=PD) z*$>pOdny}z2~nQOJbEB}E{mn@WmIgpaFi-hby7OLgg#n{`%lloR^O2`Zq4SmN{Q-XROOz1! z%X9t%1jr{}hRHtpRR%0j9%~KvAo+IcPXx=$gTO-M>psM=q4HO0ui7u)=nXg^cl-gt z4$9MA!NTM>e}&~C`MZ5!;qq-k2zFSWw;2#2f3_ULNcpy1_+e4E+kQ7YU|$Q6OGJSn%N7v+>Z=`Mt+@~NGGG#AasGe_A!M1%!40rlLHu*(z`&W zRSlD1=J?xi4`Ck70t;nosnpxgXg-I@0cQS1urMa&8CW;%O&VwZ~+v@>IOa*nDl9|`9 z!tWSkSBvqEGcA;~onXGr1)O9WufXyYbACH4QyCt;6KTwJI_pViuB3yVW}dExdj|7k zHdrRJz8g`_Fr#!fpT$i26F)4QSW-h~VU}qWIr|>(+h|hwZXFjCvPagB) zRR}LI9!&^#k(p1UUuBM$1B#hJf)YkW9fDG3h6b#RSx#;9a;Am0`3feIvZqRBoZ3EB zj2Sh3tC^SREw5o_3_w@Q80k6GG3UR4u%4N)2CRV*e1%}wnaB%rC> zhj1_Z&mFjXvh%tzo)@e85#Y^kp^rv<*?BbI{n;sd!2;ODH=zq;pPmK;v4x|6U{?4G zAcS?LA}y5dJ%*V3*$cjagKQhMqr=#Hsn8u_Ioj&N*)|b^9cFEuaAgtf4_^Z!*$;NZ zA&R~44qY@mO#;6dcA+zbvFsDtz~WdJ3qU;kBYkC(z|Lz2JHoEo3^>YuYXwMTA5g)V z#J=?p{F2#5s)$lpfh*uR``b4Vo?wrZ0Zy{lX2IbUE2OqTD!WAlNMrjPah>VxIOX1H ziiLg<<|#5R!2P1)Wf!nZ_}eJ~6^gY~4qQ{j&{r+Bir1~c8WeR;VA-Tt`ZD0QVp$k; zcNCvJ25V8&)3HvgqAC^8rZ_;&oOZ?Ao-nzq7;Heydy0d*038YyWn}ji4+f#@R0Mqt zc%TSNz?F3=KB)tAD_*6{qen5R3Q-;@-25OMQ`FUijVmrv;^L|l84%1(X&8pkU75ZD z4tte4nk$~lemWJpt~~z&mW|4nWUy>f{?dRbH5Z+Nv zkVDw2JWrR~rA(nRsaxsyGE5#SpVA`Gqntpw+aqNXEx3=Bi&>1&s|=x+p-)*wRqHe5 zTa<}ES6b5?8&!5wXix6_NCflZ{)~jBH@D~km=7nXGTx61?Sex9r@sr`KJJ(ggyGz) zAHe-ExBh309>KM30gL3;QB@wzEqxur7;bAQSUk6GG5iv^cj*xyaCv8j9z*23k$ebAD6Q3UF9M-f)#TATmcku`}YHixyU8B z&JymAuMoPFoAAF?kt-;Jdj&U61x_V5mzJ(7PBjxzu5meofNE|Ny^%GXV+L3)7g>*B z_1riujtyM+Aaspf_%Cp8;!NiuY~`Ze0Bzih9SC-pJFx_CkE{F(Cil5jR2M(sdMIn| z;wq^_*Uc@{!Q>(L6)izM-0N|GN1RzcbdR~~T3GgSsd-?1oar;b6Hfdq9QwJa>#!W) z(&;e{aevtZUU2aRxIh<`?E-+S>bV*YZmOf<7}j0&lr~Hc)nRMI+^dr0!o*9p*_Me7 zthPvtCGC25W!WUKk!{&lkY%uBFrkFrOQ<3APUt0+&`Ss%Lhld)0YV8Op_jn>{l1ww zXU-Nua^D{}F*-Z*&CHoI^Uc?1=Gdvr$=HvZdR`Ms9zXR(qUi}!pZh5?Pn>%8ATm#y z`sj-&dGgd*Tj6oa)U#hi)2B}TfL%Im>Mr}C!s$~trMdl#sr$c*)R|L1_%A%pn!0or z8^yox&-*1h&{85-{lRm$;P0MJw~I1+Ih)7WUuXaCqrg7SJO__`olTP{vY)dHIoSTr za|hvZfV1W!y!SxoE6}~7$2l_}MdoGBj6>1(=J!z}?rdF(oPm4znyqfV9X%M%egXOGAKnM~JM~EBjnMr_V&w3Um`)+v#ISX4EZe5;s5b_7Ex(T%w-$Y??$y9cI%jZ|) z_g25AQDp0<-$nV#_AEa*J`*i0i+17n@{j3E9D3>xD6{hBdB|UNBB}Jx1~0o$h^+dA9TF2--Z~`R3n{d9kxQ$-=MPEw)4}C%d1e zIChHrG^y>W?tQe}p5`VvbEmucJJ^_e(PrrKMee~r!Q*0g+iOwb68BeJ^H;go{SEc5 zcAtC~^{#QRr@8YF?obS{TiioP1aEV{x+N;y=f3|mO5X4O>^NjT;I17*>LK@yg(&%y z`|6HJJ?)-68L2ni=eI_MH{EvH!rpS6g?myQnY@-w7x11#-NCx=dc2B}j*f7%VOQ$t^%;rFyq zbP^t?hi?4_U}uCrYDenK(4`0BeP@Nb8O3l>XbXx}7l$@)N4-lzcM~^%8~T_``qI$V zR4A_vm41)v*M+WQm#z=pM@Dr+sQhzOxGi*V5ub8<=<5_^?g;gArtb{h_#G6vE9Bga z$K9bP_`Z8WuM)xj7`mzl748jv^Q*|bFSI9POYRSyKLfA_LNj`h`C#bM|BLrM6ncu- z|8VGoqmcPb=z-Ia`RC9}RH~j0t#})m&xL;Vb!7e})c-GJJ|DU#feJ5#rhbgf7el}O z9p3)eQ1dRxd@1z&!AQLv+KKA(E1^C1$K%z|9TfQf7Ftbd{I$>(H=yL-Lwo%ZjlCCI zPxAVH=w-6r4?=&WMfAha1J9$v-r@U*ru&5d`*^?(32z!h>d^38|H2!N3AgTxlD`gb zbq!L-hUeu0J1&e}s^A#mwxiJW3E_<>@1GbxpLFA-@GElw`%Sq0dZf+{U-=N~ofH0- zi`2Q{_s>Pi^TN@2cXU1Wm-hV}Z$GR7F(5IO2$JZ_A%Bv9n0$aYtw!tWz1 z&O_?v$h-7${vpyuI(tjx(%HzoHL{d;od+U!bfT5VBZtjHkv~V~(5(K~NM?6D{vO%- zMzr}(A(}oCePj=md^9@qPBi^kbgQjU z^6_ZtWMn=OT~A5<$>_B^pyX50;-)C_QgjmSB`-(k-H#%#M0XuUkyoQrcSYvkqTAhv z%-5njkc|F4x`1NN>(M=L!s8#&6;yKm86A2Jk2j)UeIJiEqnpn}^|zvX?1Un3N0&Z_ zH@p+=IRcHn8+~#)itOIJVHS@)n*WRBaL?u=!>F)V^A(fvhP|6NhL{rBw|TIPdiyp1 zq8CN>Z{CAE@qp%Q`%v=0=9aesJFy|d z-MP(g@!QX9-tz=J&Tqbz;XD^KJ2Q~Fu=$olQQ@NIU4M$l#m#qai8uVV`KK?U-lff7 z{R~Q8*1W~%0lU0;_;Eb0Xg=p7)caktLuPYj^W&G{aaD79BUHG$`FCd{b$9cdwBO&; zyy{_8f28@JWDGAh@6?2PuQlJ8Mdl$JwC&8kZ16H$xqXAL^rQM~8-zE+8{XMqWgjv> z*x(6T;y&JBk3m%5Z_+=wxQ?Cl_773=^htj|0I5qS{gZt0h1rx1AXls{1#KYYqJo;GBIWQg1uYbNC-{ zb4&4f%KgWekoni}?;b!4FNIH}l=yP^(c4jBkLa;yA+=|;Oy;>)G+aXF-cfgV^kkpt zYRZiJMo%EQ-7mUubG&Z<=!x4P_3P-Dr=aAq(G&MZ=5f(4wxE^cqj%hc3de7-@e_EQ zzQLEGD0%zjrSuluIr*3a@Hpc$Gv)wx=4U=%M1>nZ_uWmyNaEjyH_*#mn(+<%E7TP(+!r;cw#i_^&R&-*s2e+_wEZ@|+!h5yS5t zuYMMPcN*FdIXi!zpS;Ttskr@OD+YJ%=3KE861zLkP#)RenZ6K>9N?V#fABcad5hA} zkxtXAcpT;IMg{6InMljkh;WKx&$S!axPzlhHr9CUJuwE&V^yX9&~1(ZC;iJgfe=R5a9nTTBAyi4M8v9mOV3YR!jc17wk zXP2Y#xZD~00GU@hhdqJ{S38LvQDKkholErs+wdzRXm-mkl8GPp9f6`hsVqRrt$xvp z-&>!381gH}QY8E7SBPDM;qRl>rRzBc%bur;WBKie;qTDf#IY3_Dvc}8p%-=4owp-@ zc;PO{9|>3Rd%IOz0lNLW<7j8cDDASlo^=PHdpKKP1HgXH%D3@2#F;$})sJv~ay?Q< zI~RWm#ZPoTWKhYe&JSqZJ;#}KJ09mdCsFgc!0Be6e(S8e8zrxG#&1LFI;Wpn$o0;z z=#jY9Suq2dw>eiFgvag9<)rg>IA>pg#{4>@Ar2Cv!sIb-qgJ_dRFEc6hw+e8lztvGWCbtoL%iK_klk?#pc`d5C+_sc7XG z_vvP2p6Es{MTJw`lio(j)7%${2xqv*E<=&a+%t|t>T35;bY7v^gB1IYcBYcN{>nM_ zWIT>>_Lz;wubmtP(qo+sPDPPZoqP7e1BxYG8>c&$P>?;}`P-XFUEsXNfxp~I?Tg11 z&dX^$u6G`xTlEHKhwD)9M&~EHBXzrT@Q0{yhx6QZC~~Lco`Tc^&H)rwA9PM?Lh4E9 z_7Oaua!%VCMV@vxrMu)$&U6~G{_1>pBfwsAe)bMBUv~QGYIwu>1w(S)bk_$N88d)4NW`dq}-S zc*AL-H_t+wXNK+weQXX#Kj#ZPcIdh`dF#emJt*41k`+^;v+u6*--f!yeJC zZq;1lxlq&BQS60KC4%?86#C15qv=;e+vf3jJ+u?G_%}nZZjIF2p`XUk()*!D4#nfB z@aLX4I5x5es?MDEd6aGa2eIg9FE2rxBMI{6(L=ygq({=_Ddpmo-j2eeJU60}gzjXfj z3Sfsh+x!f$!=3$UmpIlrZ#FWIbH?^X<`vHEt5D&3=W5EMcROc&2CxU5KSlAb7o6?i z0PJ;V^FJf?p>zFdD6+4cIZl7qm$p9u`7KAigIE3Va&nL9SGY7kMOtqCNh~Vw(LjAo~y1v&SB0d*W*b}*T#69 z>=dsA=zM4HZYXzw^UStLUFiIN3#2Y`{`fAMyVBYEdq`d7+(bZgVz3$FTyxNa5}d=bE{A-0A$CX5YJ<8~LS=J28^fXPv)qj?_8sFKHn>*WH92 zJI@VKyt>R?xE~t3+&$9XJKSD!iJL43}&T-050d}tQy?4;UdCm~ci03=k(3*3xb4VLXUg&;*2b8?XJtdFF z#qLsym6y29hoj_g-FG;am%3l372!&E(mQ}%<$mGwX!9obYa}bbcTZrEJKZolewX`G zYSIt7*Q^2TA$K8X>tXkuQDi>iKDG?0N8LyH+Q-~W_d&hK-3xBP;|X`lt;l@NJ-P>P z_=~&B!P{STKfePq|K|2?hazveJsackw)?FE(8@>d&*{*LYpMWIV+&b>JF&n=L;B((MZ zNc}c+1UVWizlI}qp>mWVA%%N`RnNUo1)~g(ajjndwg_@p8$43^vxt5Cq)l?5^p#q`d@TBofiGV7D$~N z-S|Uv^8Dzx&oiSioF@(!VcKAj#+x6(4 zfOa2CS!SDFssv-r5VjPX*zIEc*dQUx zbM%)0yTKW!P)*ZQ%E_%oq7%)r@Q;I!a44bNAbAG zy`N!vm%Bfp!g7s!%8&85$^F?yW_0h)qR#d1p&(E=tm}!tqC3BLpM451`GdR1?Rebk zzH~o|-0rTYwsx1>y%t68aa)OfkGN3QNEkY)l04>~xfdRfyKUR!%}=;Dei=ocbRVLY z{FGZFReQJ@jh&*AZ^yPj+EP4}iJQQ_NhuEuy?Hh=j|hG7B(!;CXd#FD_|WIpBXvUP zD0qKB5vH7vFFG@{;X^2SL1@)=NL>{A(+}~uBsBlacw8EKmYLUvzCcoNUFdIPsCP?f z&SQAo8oKMRc>FPR*OyS_-q0~2y#3M8_TR+gvCtQ32>Em9OtOY&L#e0mcscYGX}~L? zJs&}ZH$rEhir2mwT7E22ABK*in((jC8Y0O@p~Jq7k{^dIr53q+_`CGw9S~kfb?m@! zX9lo?!gp_o%!9*U%iwWH_*>`U4Tpx8zl+B&!#D1V%)`QG{Sp-p5C85MG<|INmG=NU zE_}ci$UH6l-kWIp^zfO_19o2cB(9|M!}E#EmxaTdpycJ@Tgi^D3xDprcw8So`A5jS zHC((3MQ#iCt;gfu@Cr&S_l4UT#PV2p{`n~RMELzfk@H&E&L}SDwxZ?#y9*t~9%jMrAXH5m{^~j!CJpK{+E+kTr(8Kme>W#=` z>Vt1a&SsF+TahXMK9CrSg=r@0kdM8Ks;542R9i}#WYV?Nfka=2k^k$^ajm~F<^P+>BA$5LqHyPdN z&;oS#{%Dw9+c%=w7tr*3(F?c2{jLqtm!Zi08$59{T6uJX6MlxKpWdLE zDD{^O{`*1{d1Hf3-$#XgCLJ>$sb5cuQDHuB(pCegaKofWzm1;VI%(Zc(8|4&p4bCL z9-cHrUi##utv3ejxk+E!43F0)-9cIPok@G0kEZvSoTaIA|H(I zO!@Pzc-%bYAj(j8PdS_l_`_3vI~9*-rc50}$=9a5u!gcC{%sgujlVsIzJ%<;zSHn` z$wSAW`j*qEu%GKpnTogW7Y<#EQkR5Nm!QDa;S{VMQhUZ%&%ir&bH4EdRN3A6I}vA3 z=g2w8+{-Ec94+kaxSOJdeViGeMb)F+Idn1|?cPJ7?^yT!^N>2uJ)1~;k~?|{QYX7# z&Y}A0ZiOuW4ENg<$mpkRFD0#Pg6y@Ig++i#9!C>;B%jCa_~PeK>X*-m@zZ8 zX6?|-(%NNBGuLc8K68x!R<|XVty?-YynLtMi9;Gt)!c4==+wm+`N+EsQxT+%)vRX9h=xm(E+6h zYi2CtnyM@xS~0k8WV|xIIiAUp_oKjs%vYEQb}XZSnQ9kpYQTXRKde zSv5FPk(O4G-05Ffx2p$-M^P5P0%ehfVu7s6vNfYC>J+W4UAC-VadfsS8%gwO8K^>K z+3HrLn)wRd{SB<&5E54m4UVr{D_@BZtBelqfQhdV?T6Q}!zfb0caN>x773JCwt8%M z%z~q7l?A%8?eNIZTJ<`W2mH}*-*IewXf?(VL}vvS4sy+?$%u`}93XeH^iF+}^i)@n zQW${B5bM?q8OON+2xM)zUX|sm2ODHJXb9suUjOYYMh3@L)oV-u4VoKH)SXRaH>j}f z4jkK>Pe*ox3hM^f5?^a-FyE`v6an)AeuKYk>_on_X(Y7wBacMB@>pb}`ST+<%jzrJ zL^j$?{aPQ{XjA#+ta8bMa*0$WRg71Xec60A8w(~Yy<^)nCDSO;UCQ(n)uWZUv6j~L z@&2CJym_%&cwx=hG*zuwNv2EXLcJOWB!x>$N~vsDC9}AkV`unms}xdvODq1Dz<>SI zno7xBCEs5z^q14c+@ee+)0gb*$)scT^P5Pz`;*0TB~vWsi&oR(eXA&LxFdRa$0(c^IZ*rO?yUi@~o- zOPNX~l|iYV1-c)xim)UQpE%bfX2xs=PO?~Tvm7~3<^CNnYDOkY+_c-ooa?QmQoVRrJ{8YqsybH;29949SgK`vlBI5r zY$jj8HwBaWi!w4PM7ByX)0HcgGgw?ep3Y=yK`GYS-&CpO%U#)0C7Um%GAL8Zl&zVp zfeEe?;S{PTi#>S@)f4!BE~!eUw^->dwyR-jM{Y$H$gE1PWT8yjdK1@AHCVM(02&q( zRpTgc(GVGoN~NbKnM(EdRx*WBt|#ADsl-4z3e(%-Jv|HXexe1xy1yVFiBIjxBug2q z3w5AsS@xtBV7a6g#M@)CO#QTsGU-wdQXkUFM&lfW)4$y6>Ij|Ea{7BK&XOfgsJCe2D`OX*&rYgKvi z;FP!e6k3*HDGkK#uU(!x-&&VyfeaK2F@CsOoL-(9Z&KK9pd+ZwqIjai|DZHKNZ6fb zUW)e_PDW44fEE0cPSTd$IACuG+CJtyWV^nv`zlT6N>%?vgG4L`auV>m2`ih zC$re_PZ=Q@ATvV6G6uMac~V0p$#OA1yUAW5efjd1nPR?X<>-7h);ZxZ@i`jNWUk12 zvV21s%qK|0WPUuDEC_|L;4MJoL@bb!uj(ly1I1#mQ-RJ%^D0n9X z)=I1`fu5w3DF|$h1co|L)alnk07wD_fElg*VE%j~$SkO=P};cAeSQfTp_Ps5=&yOB zCjt7)rw&xw2I_WIas%nEV#yZUTUt`Y^$cKr>C9rPFc5rWJFC|Nq^o2rox|gO>sBuv zT03o8lbX#U_zeEjN&u!pw19Xvi)Bfq1o7=092-)Srl2l!AkU~A-Abz1Rw<>D#Z+I} z6M4NHnJoX~zjv!9l3 z1jH&$WsH=in3GVLQaN7$f|M%p%B)z67R@n>%m)M9+51SH1s1@;>MUlG3vzu>=M)3d z+`lm>4pbmH)xuLT)0-^xW_t6*C5n-^fIur42r}>}9{b+>*seNDG^cn4<%McuN~t!I zd6dRsJsGQX500$Jt{WK*Z^Zoe^bqw^y{J-GB(DYu238~UTwj)G?I05) zVWhZ>37D%WuL#faxn!Z0ES7tR%|=a*&q}L#!R&y*Q46)`5SJhLi`Ek{cF-{@n8p?W z$j~-c3xet#2&L|9Pp&UhNkGVxuBY;S*<2SU7$RxsIwh|5rt*3^p$1A5$cg(|7{+W7 zjM~r?$`&x0z5dE2;I*N4GA!Pi>8n|Njr9vi?rkb%37@W@a_ga_~ zH<+ZEct?PTcL*)W$;$4^Wwr7brvO-u9wjT9d!WTBma zGNWt;kl+fPrdV7RlV+0H*?OG^lW}2XVEC0%DW4H0W)hkrf-b~o$x!Q|i}~nL1H))* zi5UuIaxsiV#52h5YO-ous0KCV3lJ`7G|KfY$`s4M1R+(GMTJDH5iFMngY3uB6%jq1 zN%bVb$YP>1K$@y_moY3fEyZVJ*ud9{$u5ZND3i%@VPR4AC3`7}t2F_ot1hwO&;?*9 zPh4-vm1}|e4a!tB(WD$f?0`3h8u7j{}Cmmy=SxS19yRJ>t^+p(<%5~6B349*?8=%b;=P@k zKVQfLN~!`q`2mOtJBt$FRjDqdR_DJ_v^&?;{mIQrscBjo&qL4d%;(E-ZCqk{R5H}e zBpMP#3`-SI4?m4?1z4JbGNEDR3MK=~u@m{JcTrYRPYP2=$Xp3mpaziZ)tZD-2WBf; zlgt*oVNES|D;u(=0Fnp$GFTlnX!C*+3^S#&{|=p&GQ^|8qO>q_EYV_bvd7RGk|iLO zVV^-YRQM;ed;;m}fsA?$#e7rTF ze-+?jUecEeC}28Iu$BW1{ee<>1&xu1f`O`mv0>h97?vS+#8ya*p1;LFygsHxhM|!V zCLozzD?{E6QKg*bvdAnhw5*>7?2Uc<+w1XPrDEuEYM?(G(=?jDr5-712A`Zt#k+jW zRFs~*rd6tiE2+}PX#RzfT}f-;y0o4s&YG<+vk{+dkhhZCDj1K3OW8nW zIt4kwx*KA`Bm5Uln4l|X7Q`GR(0ugm>8z$#hsWloX z4GX&k3xO3zv|h3k{FZN_ZLJT>nqog>8|6QPfHXd>g&@dh`J^J{P$ZaB%4f@&K9vPE z%|{=~na~lG)&Wkf(pt3u`$lJT*(GSPOY1QB2(86%(Ut}_rh%@imPRKQFh<{5u&8MX zx3x9P$)ikXF%LFVl?Ce{dRj_jeA*gFZM8t#VrHAPiT-uml7i^<05Z;8G?v|@&7)R{ zKz37l#n|%IsgX6ywkZvb3@sZ+h(Jv8;=xQW)&)UHGj&{r(E9?6I6w*UgBlY^Yb&)7 zHC3b_qzbgZV4%bdBf=E`P%KNb#J&7!F^EupF=!L8UvVWAg^(t!9$r1Hpkt`4kO5LQ8^q(ws0FZFr1NWR(O^aNPemiXKwk`%2I-W=!9-ARosO zkOHDEqd3r5hEA4~=n+KL3@lKveqh*OHLFjMf&gXd?@QzB@JE^YO-eorLQ1i>lFh(y z0slp|fa!su30es9bLH+{*h*7GQ{|FVVo>YiIoWKsFnvxp{c+@%LNl}~UQe>GQ^2CP zsWwCQNN%B$(9%>W=JM#lk{0uWRNqPf2kc^SZw$n=RP5KNE~I4bPb_9h*p1tQj<=+u zrEI#C6fL$j4L?`V0lvotnI)C z_FPuzsY%ErV@O5t>FtNhgJ^`+BfpIXV-grIDVR(zGAKciV4m)sr+IvuItmwn%OYSH zx!<#r#uDw~hwg*(q*5FjTwW;*t{f5`6U?e~EY+lfOE{m!m%`!Fm+29Inw1t>KweT@ zobT&dA_T!tn!!+9ttSblky?VW(7%+wCYZ*E1WH$0y#cUl)s%`08xnWDZ=|YO8Fk@$ zNhxKx*6bkSsVseiF2Sh4K!TttTgLJ*e?B786wfM&`mdaKcK@}f);10YA#7MM9?rM@JFOt@H`b2C~HmmB-haG(AvALuXKtM}-t9blt!s zsUdok@bRF!Uj>xmmM_!6A2vo()s`qG_@*Wxn%0`BF4fex2oVqI;jzJ`BSZLNU{zI) zFiP9ZSKD11D*YwCbS@~g7KMh$FF_2Q-|pqN`|1nLk)2pniU7)&b(YeVQjRe}45NVY zHeHFyD%IA4b`d z8y|!?u+C03LVnuRS>n}MqUxw9wK)yCONJSMDelx+Vn9+!*}a5Dw!->FoMb3;Wn^e@ zj8U8n6UT0bgZUZMjlKsumT4@)Jg3NM~DhTS$b12 z(iKf$M!Yq}7{GqzDa$JFJKX)!nlh;-Kwkp3xFF0Yh1#sxu4ti2c{mT6+S^w*R*l)x zjJNE|o+X7sfV@zJ6vnmosz+GZLL)+23)H3z3I?e%Vi~GFOo=`|R4rqyBx`jAL%*tE zQo)EPG(b~4(Lsa0c%ziSfM|nq!Zk>;HM=p*Q1TJ5KhVN+pls8@L(8cm;xx_|(}iNW zdcJDFeoJal+tiHdgiM$=&J}t}U^0s=D@8j|TUeo*PU(aq!7_Zxai;t{H4-CNP;CL= zU$UIdAq;8}9H9ub#uCYQR=`5wZIHj}ONk1QG9WTBw3*iP^w0_#(3zz194dXP6M86^ zH@&+E!(NPN5>}2A$+_q#aZs6tLL($gA~Q%ObsUyxi;TMlSB2fkhWJrf%90>v2`Luf zkJF}YCK{%qh?#h76K%oxPg_h>wV3!Hx7b$IV%z_?#rCQe+tDJ2S`Wf3+ZbNzTwr_O zm=uGS!*MlMS}1(~NPZNz*aBScZaju7?Bk(7bt6-aADCTd;3LjSLy$bqRKig=zE z{Pw&q`62_|I&;_^(3j3789&tCmWT`M@1!M!vZV+*UP|}7Ut2l6n4<-vPnvKk*x`FT z$ADfvB`|uZ?wYW|EMf_n8YZihI4h<~gor=~M@$KH{3QrR6m8ds=v=ijMSLv>loMZg zl?9=gHpp!TI}H#mr+y@@{wU3eFQ_dgJ);C6EGm)gPv`QGskD6*pAFNP3bJZcKu6gs ze-fSj%H;%Serrq!UzMkc0L(3>7NR_*RZPy%H`N0-ts5O1UP*C-0|bE(4h%%s{Tuox zrd>xtG;-QED52Q3iEZgkmKNwB9+RcRU3OMn$K+Z0sCycj9n@8-u3H89hMkB-l91zp!Xu`Zq-;~RM7Geq5M_iWenHSq%(SuB*tuBjoupz(4Qvt{ zP#z{pW4~0g4`w57K2Qc*YYA6_EbPJ;dbp{--|}RtI9tz^sl#qrr`nYX zx&&W2mLukjixS*N`j+s_Y&6#b#=r5l0I?I290Uu-sae!pQ@l`O&dD71Q2}HfB(hto z7)f22&XY=ZOU5M249}4mPOJx1#yX{eEthIjHfcYpQ3tp`tAWx~4N|lfilEt42%09J zEql<&A!JbS*`)!xz8?X?wuQLC@)EVz3O<5$_+BGF#apS`c4v}AafAb>h1k~Q>KZ~8 zl~h@?O9T4|MJyE`2w$K!a0E7KK!uFK*XZjJ5MBIwL=NE{c35$#Hx*OaI><2)bPQ+> zChGxEp$0%U=ogfEp&={FdRs@6Oe&-GsUT@H2&t==MMIww(!0xQLzUXjLaD?i;c>;Q zH3>&>Gf22mP<5b{nlxX_?Z8*k01`BPkPA{L>*+y2g;tEX#g+LCEm451rSoS%Ow`-8 z1z=9l)1Wr-w#M|ZvDf68e2R%g#*HRe+F{Mwo#RKicp!ze?1v`^s@NHO6PyQ<(hVo9 z1S2ab;PN%Gom9U*MV$DL^e332+~uP`iu344ltV_|*?evlBtGp&v0Zjpg`M>+t=fCW z`9@$gjN;%sW}Dd@Wv5bRD&nGGeD?q%9?Hdh53M7HOW7(gK4_p8QnW%N7n3+8Xr+C!U!Nv<5$>_$98T$hY|dJdXqk}~ z%5|LVOZMcuV58ywVNXJC4D;zqIpqa$>&^9yG#E%O$|y%QW4Y9hd6O?G#gibiBS^bi z^i_kUL9z}ZPD4b5h>E}zs#^?tW+_kJra%OFTS1BSL8b-FoQS6h*n3eviHXW56U3C( zb{XwpmJGQP0x=^!g=ANzBr_$8PPXtUxw|hzrsRp zwvFIkERcnO`dFey=s6d=VwLx{92S_`lvGk_omJ0TM# zY)-Ql?*IZ#@`EsGOi&FRf;-C~m`u=zyIcCdt9gSBVo%i*+@3L-nOOd%QP`WPpM9V)c4ntk{Z zI;PC2;MR4w;Il|m7Z`3T9*?O*onkn~E73X!0gTgEFWYwAe0AQ<^wq6MuNYY~I6fUm zdCebNvtk?>8HhpDVY|JCZd4)# zr;n+K!7=159~>XF)7T5WY@6xp#u)T7eZ{gJmyN7hJvctRY&uUB8W~zYJieozG`cao zAUYCxZDm5BF-Vj)J%QH~+X7`3E%uA2yD~~3wp5UWVkh*#fZB6g1k5UAq!N>XO;kLe zBW6Iv6=QZW(ylsf!9=l<-5d26MxRt%Yv|-xi}F2X@R16(9pi682NzZ4;-hW-uCKor z=N%wQIk^}vK#`n4xbo121H6F}mB|+pC%vQCsDjVcS4u=Xh?H;)24->#e7>(mJ%m7+ zpCD0QDHTYqHnY@&V@|N#jl>5TSHF#einnn%l=Aq=rc0EKw}Z3uxHXy3o=jIVwM03~ zX>Z_$WW|4AX4T?BAXCVElP*A9-3t-v{4 zF%B8Q{g8LycIbl77hrBz&q8vn(IT;cYb+e#Jf4Y;%`xl-D{FA=kX|a1iPgl;V&fU` zjvp`!Q^hEi+GAwuK!pHn5fE&#jQY?FU_X?gL7s;|TOz|7O|YQ{6ZaeGw=Myzu~eEP zqW)&K-i^>tBlS;H&6_3>{Ldz2>mS-d*gy7Lc{%J(ASc;h&cphFVyL*QDOXIx$j2=M z@bUTY`43-;Uc?zC_@8&f7#0MZWaVKUh&>mChdq>W16MVYU{{pYv+*iG2%SSRLinyv1QoV5>vaj z>4&Z_zg9t%WK!khk}a^L6gnzVXlP9tMWLw#drqbT{BN37h*i@lQUL`khrMM60Lc+a z#m^}DW_lBW5P$^7*TVwsUCq!ZV`Ge-K|wa(0~@dgK>f!gX@gld1GA2Df-zKKQ5p`Z zUhH};ED+jPqv?}GJ))ZaVxWCcm2qTI3ceFrp!E&@1k0jeO7W&PsDk9Coi_*>_x!=(Di!9xOMbn*N8|eVs=1vxI}Gle>F_HgdTxT>kfGd zc87aYaG-(}K5dOiHAso&^u!`|+}@;yQH2Ph@-<-~9w|591b*{+CHQr)zsYy3S-pDA zs2$?OTovLZv_jb{v@46^rnRUB(v zo8l9;*i&323)0#aBE~X3E%H|s1N{pGOqY-hZ%af2aD18=HX1<9T5SMso3OGmUNopY zYr@KA(Ko2frEl~Z|EwJh9=3&&%2~r|PF|}&=*A(fsz^u(_DhQvViGd&z~q5KuRa_^ z;arVC)S!frPHb|9QCHb^W0*za3eUClG8Oi#0E$GPGC4{_i%==cEnHWE3BdIl5!nK! z2Ek=tcF-%3Mu^7YUD`r{5U~E9hW0{Z$EZ^ZE1$17X3!LXwp@0u&OoIx|>q;r2 z$XOqbR}q0ne1C4*9Js=IYa(ssvjh zK14^YyQDHWU(X9ngA|1RGFHvg2CX#cO5IvU_S4)x&_=^LYUyAN%ZE!mb+)XJn9$MH zv%U4rtu?TjiHr*_02do6A(2mNS6kL>q!yDJXaRV~D%n_(P?3l&k|#llKlE&RaoCKf z$(A?yP{hhWW-izVZTXvG1s$pu7RJx-5cO%MWDlwAh_zwljJ6R8n`Uq%0aih|LrtgN zf#K~g(Ttl^1CA?rY%0`1aTQv^(iMi7FsByG|$ zo^RUF9;3Gw1k5$Mvf<$}Kt5^aXW2-@Vm{iajmM2_*ox3`BGpnU^%$C=yFw<+dppyJ$vFb!TA94ZgV}yL({Zt@&(JM6EpX0C@6iIY5Q` zj2LoY3Gr5|wLt5${P=obC*_bqhx5YjjKh~m;2}59cdU*(Vl{#Al3qb+E`MFw9W6V@u`6+eH}^<6nc?{ z0@X3qRI3^(0u4$u332q#I`r58oT&H|>W=lvK@}vZa_Qql z+tq61WXsCXA*$rBZCpI)JOouER#?un_JHCeBryP$uNIPExkv&oWuH3HFCUygn{29> z+4=ToD~Elm&<~IDA}qorw>7C{t_?JF=m+7_A@hy2{VVKLUzqSd(T`ZdX#>GFHQhJI zMgcBuis%R~v#6NCfib#0QY(!s1qA#BNf40+3|pKVTHJ$ZiRRSlqcY~CkA1Ww`fH*{ zo3lstaGn;^f`-`dD5u6zYAm%u-&?FV$oUy!+N6HQptpD{UN1AtesXyc0xO`}xoHy8 zwge29ip%8SISW81E&12gyc z&}g8Z*ti2ZGYar|jE*ywkKNIcepYM`Cta~1aW3^Hjb}+t7-I8!!mLuns;Y82OUBQ` zu1=maz$}ZIRRIMZEw&4a4bxi|ac+gA-b62B$+wIBoM&djIM9df8r;lc=bKCm{|v>p z%`8548mM%_Lr9O@)##uaW2*{?R7*2a8pkIt0bXz~4FA_Z!NG`TJ812piQEyYFh>L# ztfvb6^l64wDBVVT1jNaKBANA-%qX}07H}YI|F-;_UbDk!3YY2(uT(>Uuh&P-T3gO! z7~nLy4bphQ_stFx z`OgD!?D{lyi>-*EL6tLS+11?+>jTY*h_w!`(W-UDF`^xh5Z!OCN$h*5LRYKn z^$U0sz2%u!`KiS)M0N>R@RlqeUwl&BKO5`uzrO3ILN>x&H4 zAfTq8Hk@1Dmm8m$KWh|F>Xblbqkl-4mG#P6{?71Lp^8QV(bf+rMQDb{J$Uk`S{?Sb zkGgQwLyU@?O~vDDD=n)BH(ou=1L&-5X2y_P*EV7H29OuCZ|0tyba9blpDNgzAF1Sh zhLqGl4@Th70#ziqpZZ?QuBs{^rmAv2+vmwhM2WYFgfS#uLgo}1*y_vw2-83HY^&{H zGJiE>r3R)J5p`cK)0oI_I?8*t3;}uxM;b#?15tLuIXsXo8JGyXgX4XRyPZY5ySzcK zO9()eNyzQFm{gFK`U}C)<~nu2@=o!qQn)~@p~ovV^$NnIxGZzoT#`?q)eoIG7r6x zlW){UCOZ#&Tr#aiCu+UsbHIAD7PYpo_#cXw5dW(KrS(=y?h&MAzqlBKhT-HxeTK!4 zh0D~GlCSa521!j(0ms{2s^rHO zwbzvTsP~gPXZ_N|U~L36^(HKw`SgVmqkz7FW(j^k7_W0TjN~e0F;_v#+$dY#;!1Z+ zN#sCGUK)j~Q*6{XIIBVacx!8rnkp~kI8zVu{4On)`B2VT9S24Gq)T`XumfI z@d_J~h|@o+nr8(YDpjmNUHtsp=Mz>VojfR16(L+l(7nkZC<;ACyuB zfn94?CVt3I>dDs`+!f)Oh$kpyJWh7QH7yxe@q~qp`)R^LCWLmvLdF+0VWByn=Ic5> zO`*A;rjP_NA&Mz512qE`|5Rfh|5Sq>|5T%n;6QVz_5`yW|5W1+&p*W!F-wcX8^%!Y zG_&B!0eU573GY<#L>Xn#);LcotAegIbuQ2OEYe<6@v?1iUnO;Ds2lYH~&XB10EenoTW$KRB3_5?UHV zEKA)hJC&}0P&*ZLU#Sd^kFOnGx^8?3yRTYeEu(9OM{zUu&@`O+E&`Od2?eYV{CqCO z(o7e2ix?*~j{fQ@=KBlcoURXIB)X^yqw-e^0OoX&AW%50nhZv3W%8Z&xhzb|XHtyB z;K5Ro9$q;-J~)yc9>Lw;6=frlc~W4N5hxTiL93`Ag!$Kr1;Pm*=qzX|<{Uf2>)u9D z4MJ&lF5t4#%Bq?Z-)n`jRhu&EIj$fQ7jO;iL>h1X0_Xs=9$K&XA1|DoV~(5APr1!U zPT?|lY01@AC3W6b)m4>qx{G39RZ(~~r&tq%14mZ#_1qa#f3&JW3dyh!mX`o&RgWoN zzE-7JG%|$iv#3OGBmcw7Nx*?Ufu*292}K|R2T!0&R?KY>alDIqz0*Y7z)Z0|JjH{e zvsyODm0?L({i@-x7@JzS_KIQA=L_8DDD5%03Ln8^D{*`XJW!IW)^@50A-It*uNJ6! zt94(wgTk`x+In$^lFcE{>Un8N;*>swhT-o#m`xaJuI~lrPDkQ}O~WAE*BFlLmk|mO zSd1zz6d`j#=Zbw-uPLG`Yl~m0l+yuWAi22fNv&mN@@+Iib)ZIu=N+9ixf8XF{B9Bf z)eSKomh|4Rh!JA^CTm*prNf4;_%d?CB3?-71aF%CDPD!^Ks{--;maUbesUq4F)y-e zwX?BiP1G-d#Y7}bH;#0w2UeydI;Yg-D*g?3u|$XVFz}qc9w>~BPvKKg!7~`g7>dy- zV6zq|j1ULclm=)alM`P{1Ab&{UvExMvw;1M3%X4<%?XijgsrtegRIIvK}?Kk6_hh3 z#(ExCk%7x)Ap-X#vQuZ|a8@0cByG;z#bUOADY}AJDd#}V992OKl~ktyutD+tbXMye7Qn-!+XB6XzTpW9*_<ui*>4wys=J#Gx5mY!Ej^}BKkDKs9GRv zG`M0K8@m>GHvwVynSDktZ@OTX2nhOC+C>mlwXEuKFoq4syc7<=N$8W8aBBI$Y<=_+ ze^+K3hSYD^5m_O8jb1ES+XS&>IE5RrWd2|)98O!^AiAAka5YlY@EJZMog zTb$CtGlCW3VuM!Q>u7zk61RuQw)KxgG?|Uv3G}{7<%^Nf2st*uKq2XK@j#076h8o>-1 z#>MD3M;N=FjD-S%oPYnR717t45h;qRcY@y616$$Ea@%LsFtI1gcuLVgfjS^JEg-r@K7D- zw`|qmT464VoFmRk4HB%l{7e;%Pg+%1$7lnsDmK-e;R0>)|KCX|{!XiZ|Ev^)nv8U- zf7UJmf;Uo>0WQ3|nkqWThy=W-w2%Q4jnbQgcSG4Dfb;osK7~_mxFK2J;;kn{7N4@q zON=cx%lq4I=%>=AIT9xO_%b=YEH)8PdZT$xqr=Pi;s8u!gg~IRmIwlxlBRS;QaU@h z&QLl5s1XYU>8b^fZ8u_s7XybE!0Q(Wwb#Lp+62NVGm7^lyC4Aw>VcS->OuU5S?oF_ zt4;xFR+fv2)}FoX>nImFt0r6;Yx*^%GYlS`$K#M_|%HVuM(K3~9=b4nqiM zxla%%){f94oAW4^-ynk2uqVHed`qRW!_eS1peL4br=^8?B6Qma!?sLsT^ujOXDu*K zVpG9rZu%e)cBm#-DURAa{LVs4>v|SNs&iN$>qhQ z^YtVNAF5{r-{*;sb(n5FuubzlKT|v)H`F8k-dTS}aurfUex}wbq*k96VuW}mR`sq^ z^iW$E7`fhC>Wy)JBw8H_!CqWLrHzb2>HVZ_|L|-!HeM)KKG;0(5atwF{63+UiXDhZ zWjf)pGaSt4oj`y7Wpe(*T2vm10>VMF&4_nQ3tHfxR7-!_O>>~<|(cSQW>GLLkSpOQs!O>i<-0G zTILKSI1pm$Ln>1pGmGOj8BpVMAm}yfbWKui#u8(wEEM*=sqGB}8{`Yd_}VSqShCDL zf3fmyDa2BDSI+TEsMAB{KmfzO^F}7!Y7k1BwIm@#mf*}!mNmraVbK72=Q=y2Gi3i1 zbwKG5PZLDIoquT~6EdWHfy@T9hkl$ouTTlMCmU*$@FQ(Wt^#@s1q>C3tJV}ld%c*e zIKr^_3ab`}zp8*#ByOrJLwL}Ota(2v-K3=&p+a4_5K`Th31r3HkQgE9ryV}1shmc8 z4oRaT3I}*Uj3w^N&Rgqn03H$KAAf)s`k|Y(Z>oW*S9p;t+FP&Fh+0Xg=>ZZ!_rZn% z9IUNztZL-&85D7=OUdwY4k=$KpHZoYXKPJ-GP=yT7elBIwDi(&6?xO&R?(CXZ-O7j z3lCz1r@CB(^J^UpP}UHI5xU#fp^I%2syRz!OyPRgLiD)JoPg|Bzl6L%b}lRHwU!3` zHG|k~8{#bloL|ceOsjE|T@{|Kpwhfr1at`T5Xj(^1YuGfWS*3}vp8b9MPrp7E0})06VgbZg7tS7+<

QK<r7XJyFDCV@{ocz&5(ekSMFx5B+D@_F46vE!kuJOldu_aJKs)|#!qk&5o zZ3RG0)_Rsr0T}nJSpRC4djRbFK^7r6Q<*_LQZJunPU^wJRnE{LBT&tIK=wK?RlpR0|z+ z4I3*wXDSnV2)v7+J&R!Ak`F!p);WV|!$z#UMlPc{CMcuYNu=&;AiiR{We1BA@pVG_ zCd?Ryq6GyLCu596Bn0|mJ?JK-@ip7_u34_GYSp?*EtHo$;pkXIz2IgEWyV(CZj4(n zR7PS(EMZ%4L)$_;-CUWM%`VIuk*OY7iLgcy1N8`EzX)d*RAx`wvF{0JQ)byfmW-D4 z(vm#&PA$g!2ou0Yj(^iRhis^wH zwi`K&YhX$m#{hfhd<4--)|d^}Lnjx4s_>**^{W;ruMtBO^ccNXJtMgic=fRszyrZW z6G`6Y;a?et&%_lWMu#LN7|4}LX{rH1^TE<}i^tNT=d)F{N#9spNO8EQ4PzhR!=#6` zcW4>krJw?iI1}fP7Q5=?iI|(F+dY*^c()1~?ShAEsOOf)TJ_+xmj6wg6O5t>@&K4I0xpgiI|d227Mw6U0jhP>npuHT)#7 z&*1P+E>3-|g9uMu0BS*3?L5eA4+*ZcX5HFlLl~ttF-AyCqZ(G`2~ts{@qDziKfzEg zau3T$hp={$L9rDlDQEghkk-W6oK50L`2%iCE^{*d7j9x7gGb-7L5sYFY|# z7_P+1)eFgNX&D^ZVQ|MW+*u(}nbTr8W*CPG;{q+FEqxI7*HTxHisw+=5;<{X5jF9Z z>QKtsrCJR#`}}#cn<;JET?A{Y{gC=L$to*6?tIm^d<>8G;jCqtKuJwZCgda>28@ek zmC~nO1MPGTV02*P5WE0`4|u9A3S9*e-;X)rubNlDD&v7Rnq#m2m zp`qoKvEiQ&RmL%I!Vh7hZEzBCJ+QvxB8@}R^@+k}Ii_Rkii+9nz+TUHvQ9uVcw3v!#w_m{Z1%;pOV)DMtc z_oiW%Y*;R8Yp50tC0bb!fh)R1ZCH&S@dL=~8RKS65P3EW3W7O&1j+%3UXWstJ`iCE zk!vSF1=(_iNXYB@Fy(1@w<-SuKC zh%(55vzoNDZu6eGN~+deN@6jI>}AXcXnnq~gmd|E;|JHgvU*Uy)=ok3HmH!>EhY+J z=jyF3&}fx-r>vSQc=&1x_9=+@{xaY|qF4GbvSPaoBs0`uWW{#5F^FE&%s_u3Q8j(^ zSNSlRK<&Krh@0LcX1wF-{1rv_ptJF|tiiFdp|#@`1icNeZh_FqL6QR8PUt1zMdsB@ z3P0@ovVvs-muK|BMwf0`4EDGEn&IWs78`6_DsfLJWgPdhN{4z2 zLDNY!RPaNntqFqg?!?hS5R6Vq=D72k<~ZC9OIg*7E_Dp0Sl2J62ik;t<><1 zLtGhTC_Tw^5D2R3J^pnKC?3q3Ly}HyunDkM+bJu$f!bxm;-0pk>OmEN0B>}7>lzcv zEhapUlnN6q1j}ggCSi2=234W#V%UmhxdcG=8~W{ha#ejV2nm~K3;6UeZe2VlE8BJc zqq?(Zsk*i>i0gU-!l0xDlVo!X=&c`78uR^s^rzY&(4A_*b=D`!t+Pn2(kUEwh1s&+ zV;{g#7mj+=Ej6Vpbt7m??!Dm|)}(k~oIHtyP1cyQu8dEooa@>TEf{D!}L*JEXH(cp8#1n5oEo@W~X$_QiO)fBFfvjq283We9EAx$cd8Mz99ZA9HIVwX2oHm`&&jfrBt8 zIp7csH44NeeeykaPQ-#ql+p1fKq|2%4dlu=jc89ygq zQejR+8k)?MmY!33xX!B}Xw0*mV5Ozvp5;U$-Oyum1EBGH$weIMgNOh)LKlmQVmL^u zqJ3$>j5+{CPm~u!%l=#hs9#Cph#mZ=1YGr7V-qhMrWT=(A;2c93J!FGWled+g!tAD zdd50@L@cCjINm!b3dw8r<>~6|@7nnzZeacbG7fh6icdfVy`cX>B^m!l%d(e1*o`6P zp2}u49-dLDX1n&Bw?&0kJ>|8qT)tJ~QWedGgZ|&3wc^fKfpdnsVKC$nY9SwS&b<=V zvo@QIscGkDaYOt!GnsHe3rhzFbC%$4qGnMf)RzSC^S{V^Q8d zV_G4aabbE_pYbj;nKJCt^gINNqR;o~aVsq9RWDX=(=Q7$Z7$jg%lQ*4#8RV`37gU! zT%9}PQ5bv(r2}||WdW+Bwn8IQp_uW!VHCy1jA_8C;v50vaY!0`0^Ke8Db_CUH{?K7 zOy?MCtHrj)<+P>D!eZR~QngYnoR*#uIf^*((vmJL)Tn}J@}k@nTDK;tB=Il-5o$%X zTDOQ9h>V{sKg-DggTh3{B7miu6+%E+u|fEN2f{~{BuK{WXD6j0z7nIbKB~|9`!ouI zR8#r^46opVN-k+|mqGmkioRH0RU9&;){b>&xLAy34bp~4W1opwHg+!ft=qr{Ch*n+ zEaN7PD^*F~PpuPr4a0t#gJB;*&)ryMJxfF>gMMmmZD|xCR=I zAg*aOyiz5kF=3Mwn$?8}2+Q^@gA#be0&GIT^NSEpVr<}uR=}asmWR2J>Mbql(+)9S z)Zz=(Fq7F4nM}(2F^{Br{$P1$(bXPH=NB>u?HZ;d@qyyx3^rDQ)cGmO7<+}9u6pgz zOolV+)c%CV#UKEDiZY-4Iv~TRd7UZ-6kKEuXPB^SIP=IzTL^opYy2Ps48X{%(jX!= zdu(I=daPeSEqn^>U2q0a>y>>SbA#qrecFw%S#{%^kksn?JZ;@h zOrWvh6}1}Q@c4{@HEWlv`#yOUoFdQI=&K`E<|2k=r$$u^gKKdou2-#~t}%e*jM>~N zaJKdIO?wBy{N(U;gg5lZc-ZyO$k@;XMzcSh)qkXD9GW)v?aE!K3$WZ)!k5g(xvBT~cjt&)}tGXVY6 z=NhZCR+T@GjMpqt+Psf_ ztzr#;CNq-mh7!~IvIX5LAb9#DhqgpzJT|_1+qFY0;XuJ$co$+qT;sMX zbt$G!Xwlif|e5 zWP)Td)m@q03uPd#*oaaZ68hxnggI_X?U+c$L`nmKraM&>FcAyu99CqK2Cg*yp%y@6 z8mi6}OlU-v>KD-KRau#3XCoyr9SGs2Jx`z>1aVgg>Y;a5o)9n`vM+Go#h>zI}3=$Jk9!?upBeK{0&)uLuh zuCNnXy$nj>qZNK<6yel9<#>GoTMU6>>ozow%a50?LbTz=btTV;bnhL-fddij^+VFB zZ=t2F5fw|t6nvXPj4mAFJyc;V^EGRi$O9*#%sPM6H2K4EK|Wlpf5I zl4jY^W~}xZTi8?ul!4~!QnN%eM$PTJ8ba=+G7{|j9J}9 z_1CtSQ;S1ysq=AE5Wg%L(!AOV%END3?SpVy)e;hJB+-OCy2hvU@pZ}s1&qWkQ?M`C z7waYF)bmA>q_8;%W#*^1W7*Cy0+{8C^uRilPs`H5h9;`#*_iyp3UID@PWCJ7wN6#u zyGd1z5)oJ*`V@3STL2kDi{g5F4jU3&slj+^IlL(Lt&wl3q1LhW`pPtulG1@-jfC*} zIkmAGiV9{kxC90yEZdv(x1vBTn8H1Oou707zdMu!HzSeWk?jw8+s1F~I#f)P_`3{Ds68Npp0)lgwh)esu;N1Uf_ScP#2z6L;S*ac5a{lGm zFN`3g#Fh+4ItF&XC( z!k?jSWr5kV0}(9ON8O^Hj@6BO6yV%bW^c7b$ZKHR6K}pY@R`$aY>@N|hGJpe=JJAG z`0sF+K~)|wqQCC-)gT88lu1?g5{OEoFpAbNCIciuorY^MWVQ6moQNWT(j{FVd^go= z?AUU}Fx=?!O{;9>&R$fQ?6%# zLkQyQ04|Zt@DM5ld+{)mpf$Q-fhOTUpy$x{5#OS0I9A+JYyxFPJ66E_yT+W8V2Xz`zjn9Y0N4%5a7|(_qg2E_G67Q5C4x z6x7)k@>426VB*E>WLtqnAM?p-{Q@#Ce&{?*wwx$CL)!OmAFU1s)$|o zt~u#a4&$vl>rzqVcGH%YL2W{biNFRtO(PB5D#tvI8A*)MtES*^$Yg}8* z>z_HeKthaKt=<`clqBAhk4P9i=qyGH zAus){;Qv!Y3B_q*f4O zt4x>^w}fJvK7V34Z4v!c#WRaO-RoKI-)!*Hl~*Sc!b(v}qX5$AW{WCHL{#?hz@ zwIZ}i2m5GHQxqQW1En#arw}LUnzZ#Ln-+^r#UsVOg#|Zx;;IcGwMbAwmm&c?rp4#cjdGYgMU`?o!`EGs|zKUooL4}r@Z*%>+aGO5{dnZbQ!lJt0r9K(V_>-@fhiYW0 z_voq|_2!#AG+-$M0`q`YuCfxk|Mohs@LP&fFI6_U{hL+&Ai zdL99$8wOA9d0##dkNF&`l z2lrn?0hG!=$bUIi;R^eiD0K1H9dQ!1?6DPvvj=|WkUx0aL&qFlrOaTI3KqcD)Q-7Q zDa0KmDUXH|pdo6VSuobhI($__>*a;K`ecu1>j7Pw_NS3?Xjye7O&J{OA3h!u%U4@EDQUrU0<<|V#U$|>JYSNU!5U3f0+Ic60&Oy%H6$TG;553As6nk920 zlHgdIQ;#y&g7!SVm8G86TT{dIXuc>{T*Y4N`l4xPDSNCi;ps&)Hm5TY_kp+iO0ii(aZD6@k}hfTnZtQ zm4el%kW_mlKGajG3NXEZ8PcA#n&6-k$xxx8(G&|;McH+4Sf4{Xu+w_eDb@z8^Fr^L zF7%efe4YO7RKX5LVV;`if{%oawi2hC*J+?dH=MpyD=vPtOBz`@BuHOeiB~WYVi0+g zmZyc7Sbiu}zxjgNIh6 zRv|4xz6`d}d7!dk0vFBMknoB2`*5iGM?jc#G>efJWOcq_yEjm}#Tm?Fn*lT{VH^G1 z)7%!_z1=ET2odPV*LQcf?~ZpTyVD)eVg3B__1&9yD7=HctiT0iDl7ui))ttCqrXV{ z92(kD*wAu56tCJpfmBNSsLVNtrj|jMQmFG)GQN3&-Fo^QcKMe@4_{5uV-k1u%)6SN z&u^~2Xex~i&VVK%1F*p@qV>~sj@mCg1WbY#D9 z4cn2w1N0*g-^S721J(taBaceC+Y%Cy8SOAQWfm3l@k)2c;qQjeMu*QvPoJHf96otE z9G%>L{bZJ{v<$&X?7-hNJy9TkOPK<`u;Q5+?p1|XGK)Vp(MvWHPX&7YW#Nq8S)zwB zRX7uD8t(oaP)fNylaH52F%st}kmpfM?;BZLPwLRl;doMM!Cft2PX@mniJNyuJ@apV z4V&T?>_C>{-HWTCr~Ng6`BI+9tjTvvWU6hBiJRyrGQFOB3le14W8jOAiB8L3wL}Rq z5$b#;{Gu!%Y3v+wZ@>KpqM8A(|A@gnppb_vNjN< zezQroijeAXd5saiLTvgUAq1D(9>>&Y$dKN6Ow&;i1m=_dvtckqdxZQ`piUx}Z3L>f zU})l3o=R%9*P0qfLDfJ04<|y;vC1Csk7Vv0>k-lQNq&~(wxSB>810;4E0lAs-?MQ+ zPH-A6CoZX7l{iv?j02jbL5hUO1TnJIYezJ)OCY+GUlU2Le1u?XXP-WNytf2|-O={L z>${JrD)v$DODICjS;6rFR@$TOdVIY>J@`!^aqxj!+Ds5e3Y9acuv|8Uz&4Jhy+lT0 zX?(H=mniR-<2mVs_^GD-R5h$S*$dy=740s<> zby5mTJZ%U@f!IM^o<~pzu#>{dS1_G*H5nesmxa%U#Kror+MsYqJ7mPNC$8{qa*nW$1mE7$+3*($ry3`Kyo`^!akghWO4_&AdgQ% zl>eQ48NBo(l7*t4DYk^5Hz7L1NH1P&x;xfUfdC3e)+R=9bmwS_?a)I4A|BfTJ2PEf zj1h)*&62q1%Lmzef!;Cr~+nqSUzrwWG^mM%3Wd!ylxeS zhjW*-d$fLyp-s1u%-p>K)6XXs2W=JRCnYmoFTGxWQXDCTI97~uct-~*9ONG*iLXsW z9Q2O*-f#(GHHx$f-3+dP!C$Z#YZg?(f9R4<1~IpYaXlhf?@mJr7m4jdkEm*wE0G}{ zG|zzt3qBGHHrH$z6(LFlOK3%k3pdh01;vA~+s{&fLPqjYuLK+84{kmSMO?N~itfMxR3*4`PKW zO_216k5N}ieyRmFakbnGki;s{2to`CW%;`MS&&F?0LK;)u<6x!1#j7M{Vk&QAyuK# z>D9o_tt)mCHQFiU{8}K&z;36Bth!!|nJH_-so{ z5CU&55r12ExD;YCJQ6-AcJ1su+x=C4R*L}(gGV^p+Nw)Vh&>_lY8PqyH}UQYxtS_B z1QAa{rxg?D(D`&WMl~S3r%~kxm_h#p|3XGks{V?odh!}^uK>xJYM3!Rc>FIt!y^nU zZLOJp)Ia^0({l!&t3Ab5-tF=wTsK*M4Cw;+dBjECW<`ESeL7t>T52 zT_3=V7`KWMJDsXlAgv3Jr=<6@B)72ofl1p+0AeJS#O=dho*jb8#{j+ z=Gl?8wQ7yhzJyK)$ujnv2|GY6lu|xfb>rLXEtc@+dOn-e!kR#9gegF>Kmq`aG&{NM z80@y#4&76cnriSMC5XR`pJ@<*bCXUS!6@LNq6h^R7)-7ZKg<;*xsVJ49R;q+7w00C zJQJ6DKdA?r=y{^Nfn*~(B8?_G{p;y>KfOoshdqE4L)Q7_C-}a!XqQ+{_uM*@ix4em zkNfRt&^M^_1&aX)5>O@|i|GH!39kNQT6S{=dFBT0x6tGLmYDtte(p)z(47xz5?+3A zK)FTKt+89F^f1r9XL0q<(f5l6Lmq%!HI-P!s_wkd_lkp?iE1>Je(x5lk-_zaGDXg| z?)-AY$b6BlZ>C;hAg>)0?7=MP2<=lrCp zMD`7P+ZnIe{Qd5`A3wamd;5P-e)RpF*h&8sF_PlObdki*9+9fRgesH(-Mj_Tyi#)X z@Nfj%7bhd6Xqa)Cd0YISg=Q9Th01t5!rS{LA%hu)qT2Lib%U7goL-D^Iz8=}qvSmF znNc0=-+=u6lS!m_y5MJCeSLZai-@Cu>iWWWy+qo(gJM$*wQ};q zbe-_48WL%;R5J_T3{7-W!ddzko>u!jeB2EVUb9U4yae)(BQ6k^jBQ>_uMtCnH^eK@ zfFhD0UP}9*9TvTvdnF>=Q*`M~V|kW(hlEQBq@UK02HZTUD%^IVx(S~|8g4aV@TQDb zftrRw;#1T@#DDRY2k9?pSDMTzcKV&a`pgJ-Dg}1Rv?n}7*-wna8~oGbfi4uqN0AZs z3e;UeVf3QZbcx*lNy+PEft}QoJ+s~Qu7=Oi*d|Bz`V=dqb!iwN#@+OZa3Cy5<4a5? z&>kRbh*F$atP7lIupVSv0-b6M$|nU5#~SHBzO&(&`jNNPpp+BFSS$5S!_IkQhw%30 zv*0iv_I?)u!Q*Pgi;TX*l>l;drY#*gdVVaOO+}p@L)+<<*rjWeHYwHDmlzq?8^jz$ z&k|3e8P-!l(|afG4x{Lf^mqi8>|up12$GKlRZ(>7ccVh8VtMgP=v9=l+qf&MNr3p4 z+zkPyGpcqx=+-F*wt>yN+uKf$!Y;JSQ_|)~St}f3m;8uRTpD)~g<{&NqBM$W6RErm z(;)mUgiDeuRRrgY9+(#)+H>8i-sJE!9b2+_O?&!gIJ!WmO#P4eMtJR*+!tdCT9_Wd z!)rl{qWl>1+G+Ypy5lOMR!05j&4k;ZU*3T^PICeNZSx#Pfp2#IwvgAbT-t`Mzz1$t zGS-;knhsdwN3^wyXw%4>WudNplk<8EoB57l7jD>?yX*rGd!mKSxx@&?39n|7&V+=k z&Pp2C3yVB;p^1p{TPEw$HHAAstDx-+(6J3U2>{=Oq+z}|Kc6p0$=el-MyVmxn>T=W zj>JhB!l5HLe7 zLz9iBdT{GfK@m=QeN5i|d=RK-usqCcz%|ZSI?u3doLyW^ZuXGDF3^^_VRWPFGzDgo zS>(vxnJ*xzno+^&ZSc3P=E{=Fnc^ReN~_8Ak*eYZ70$1V?#5@8BItT_xzv~Htx}Fh zsBw~(70n~BfwV=-v1{FH2eYc=E0UrxMG_BK0U<-d6exn3ugcA?kHQ*kH=4Iw)gPNm zB;k1Vfjs~KTZ$Iq_ArK4gf$Nge2-iLbA-;JxdD(&gzzK8n^*pT@mS#{roJ+(Nqv~J zM&S6?0SoDhOxf|IRv=B@q2uBG?%nO{kN0S^yF+#b+8w?D_vDr;Ed1*1a&M{{>Vy&K zPvR<2uLzl6VL5xCMj|Cgqfe!_nX|0h{OPBT#AGbbIbN}QCTYs|L4I5u-I9|7qQFL- zAb;x2u8c8n*1o4`Dm z{Mt!?Dww^3ISBy{=X2yx4o;51mROJl`oj70hJM@K;Az&-MpPv{D~DgjUG-wV$DJsf z2B@w2X1zn7A-LMd12y;Mg_2Zu$Xr0v2v-YC1_rLb7(RuPjxTkS)5y+`cA%>D61KYw zd?Y^4mT{@BnTqJMO49Zfbq|CD&c+Be21$)^9Q;JFyO2PI&#>HKtP_j8VoCaZ!5x@k zoExjqr9e2BsKYQ7rdX`bH>olO|JFv4AL3BVa8lUCdiCzpN3#(exU|~0Z**1qRB5fPN!QZov2t$QZ+CpOWNgepams zBMa(S$H#sk!X(Xr2_c0;BG@88`G}nC9P*s$=FiKBh2_G3i0-47d^J_=POh)duc%;aV8c2D53RmK_NWU1NAf z?UzYQ*hm+fQlMD5#Gwx}@vbbm?7hkM&Z6}7`B}?zdT=sAz$7t<7dpurzzNyR5vX!y zB4R3H(!lh&+)hiMK`#KP_I8B5HgE&f4O})H!5g|%xjJMDB$9kMMEx6ZEhBp80}0ib z3%|Q0Jo{6xS!5V`(!HdN-0xxihps(&7KQ~p7exqfhoqcJ@Sqb6FQT4W`&!fKHbW8O zE!_AA!e5%VkWxwum&QGvm1hTytRT(9ZV^?33XqqkIaBe5h;Ze|d6rXRPPHp#$fzf- zZaTpOmF+w&RF;Ic3&Y(`zkQho2z;QS896V=hs~aOz8Yk4d?o+8Tzu;i zc^J{QQFB?~g*LnAH>ml6*dx~W99EhHuyk-x#58CUknF2zfFi7D;HeNtVWHn=jJT(KNvkHfCkBF>zhi|({ ziZ-hEDmfG97u&PykTxJq=QESGc(qeEH}>UL9hDm9+vM`(ev?f9gyc6rL&3mr{=w*{ zTsWoI>0JlLPLTghYxQyhY#=GK=+lmkr3IO!4&HH7Eg_c#0vkqsITj1cbaqcT`(Rf8 zTYY^rTr9rv^A)2A{j4Ke!I5%L;9!|&M_5Ht*V`nyd(G6L+r!i4C~>c75idZ0d!8W= z1Op~2f?WN*%!<9U>+n2eE0 z)?3V#I0JX*;Xw}*I7zM$abVH3W><)v%Ehs;FJ_rwxS6EIaxGbcFDMzOla`-F^pF`%R0e_M z;=|>Cm<@c1j22#GU~P&NTq^~S7T#{tqyC2?fZr|O0$G{;ZBBBVhjV~_PXV%OAavU21{+#o+x*O61rAWzN#s{*$EbI_m zgJgv8zhQw0bJ8KqQ)}>1Haqm*oq{m;+LY&)rWRzWeFJ;Aanmhlihmr$E&` zFE{+m!VN#Oayfo=-}67Sc3_A+vs7#=6Gxx{9hjXC7|c=hifx8 zk|WQZ>h_Gl-#zt(#sw`&3s_;!NJ2o-M$<yvCV*y&stI4F4gTm__(O6kO8~wdWzHa$BncVTTr*B5=4BF*2l#VXc z(L#*4xJ0q#eB;^Ht!~j;%PYY$2XebM+W-v>ueVgfi$;*HO3e-=)|R3jUK+^HBN;op z5ZH;d#8v*vEX7WASyCUEL<#{H2=(mq#kC+?HBTa1FHCvTx0S>q4Hln!3i5XI5Z*eC z2p^r-k$qWcl{3fFY_tzD*Z5|;JR8G!%@|3TO~PenqwQd_=)uHY5`hhy(NuZxR9qJkEL;CIL*>`_4}?)c*XH_rC(2bmwIh@ zI~eR{9?`rc)1zL_8Qj)}baWmiS~_0C>KC#b%y0Kgq?TYJs zK3$Bzot}r*7iY-WhnWD02-6p*PX~D>RL}7aVd@Bzeef3Jn9QeMj}sor0K{0(tE18E z@RwiYGeOqnz`ja_DJG*do5BaTbe{Qb^07LUye5!eD2Jmw&m-ZLd>E8!gkIu&IxrzQ?(WS}X;vIiWBZjs&>kDlA-- z+n4br*-e}hkbXNY3&_$17Ulv~ZhIEnv&sI>qOwHKf7>g#_CRsZVzNJsr~|`%)!Pas zthR7^KRrD~8Xd&iLwQq3TNK}pl~%#GvzyJgh&zE!W(A%N=%aY1LXd+eXi)Uy7KE)p zfknvDuu09AC_wS8ivf_W(WTQ?pR1>3&DEKtpyt3|)MyfUhP15icL>gCiW9I=cCBLB8ky^bzaH%Ua50l*dSLjTM_%N1exRgYb%0@-4D%mj=W-!M?MdhN6` z8K_&36}*Be72OXQpErI5@qD-N!Yb96C??e+MKDljPpBZ~1W4U)J#X_C1$x@Uo%Y#a zdJ$uTC=1dF>y41IXr$d!B;_R?!>x=oWF(L#la8c9DdGa@LR7FrWwG3dFXFa@F9Mkv z1|ta|q&&l8<01;_qDJBD-psee63db^zSN~fduA9>ROe2VxSItP6a1SCx3`dMuvJ6K z!&K-CR^%~R2NKU$dTX4J%maHTB>TYL3CXsycftu|!g30b{8`ezVVlIIHbe*4^mgQW zR9Avqh#z7D6w?KI$*>w+;)@0cyljg!Z$up}Lc?^t)x`$1k;kE*G&T^E@s|`%TJMSR zD6DcP94A7AhUxT)E}G@G8X9uUV~>jNkk5@LM6RNMp-@B&9eGimRiy_fjeF?5{dO*)4?ZW*ysoXS4P4N{E+;TA;8^tpFhj5?@Ow z7;;WPtFOn4<%Q!JW8gK4)&p~NRRa}Dwk5}UW2sWWtEe3{QDYGVZZ=JD>;z)>V3+F3 zRw!&0v?wGT1MlsJ?A>^>y;i7xBeio*wX=}^h!I-S8r1;o}mDqnusv-EFKaQ`s*daR!%-O|RBnY4( zhBCnzVAfNPK4ppFo{}ztuP3e3^DY)4omk!9Kl)|X}ik@BemZ5!*&hoKrf98W65VBR6 zK>7nsdC2JD@eT?h*=2(0k+ptI!a&Kb@`57d<#~FHM}hWC(9;azkwxIzGtB{FZ&|G# zQltuMwi))gF3C;zY6~e|;&3%0I_2wxw1N7w%D7%5N<7XZe2;B?gjNzpG7|cZ62k0e z&1k|u86(MVCdSIRin$vuua`HWPG<9g+cTp>ZDYZbf1nMuqvosWXM4Fq$sMKIo0c82 zU2F4f)h$&!rEGg0$tI7@+%NnpRb4*cTCMzap{Eg5OEx~cx!{Gzh%;pa9_iaydauuW zc!PLT-as=6*yDN|uB}Ql2{Y4`woeCN{rKZoL4QC;%++R6d6jLwSs}rJ+8&W)^DgWW zXmI+vaQtv$VB{*Kjxa-uNSYUy<&4uM8VP|sF^vQYTBf~^|H$*gijAs%yl4KX?}pL- zJ8JsQGR*oB4zov5N81A-V1<{TcI95A1R5b_oO&mBK9i=@lfss$>}O_i@Y7{rjI@zW&SY%}QRnBW9aJuikw%z`r`3AVV@t zjP?^Ih&lUGyP14@@7z8Agnwmaayvhvy1ogayT$O}hpS?&Kk6aFSLUqA4BS z$qsqetqAb?_Vt_8WU(22{nP!Y54Ue#yngrT*0?dV<<70u!Pfp36)co!IT?9whij`1 zNH4DUf}I?h+?m_>^a`ZOMlgp^K_RV7(c9ihXc*Bu7+YFDCqJC6v#8+DZJ~N}ajvQp zZSpGi4%f1nwav*UPgm(HaV<^JFD0IdI0FPMC8?Jpo*dS}fwz4HMcY-spss2d=tSBL zWh|nd zlTkcQz;`DGi<9pg`e4)*$DnX^RWL1iKENxt80X;NRHun_KAMz~qxSxzyH6lQ$a1N4 zs|V~#;rQDPjz&RApDs~|Gt(i^G+x_| zdE#Lm5sokMAo3LZS1wbyLVZV4m2;HBXK%=12}VMA&Q|N$_N>iG=zx6($>qprP@M(U zE#-@{Kdn83I31qpZrmE(sNxlv9@uJJI-_1mDban{HdmM9ypDG1TY#N!j3j}kcY%o! zkuI=@A5?bi^csGj`b{f39jED~IY8(0bUCs83>3bG`J&~r42@~V<32@+u=)Bo2dv~P zY(0scT`y;|yxDtZl$_K434BE+8m^c05)?ZCY73oEx|Qaa8(U~dtIeKEn@c*wHZR~F zTdbzAi#th4=Joz5Wvi*ND>qAr4boORi;TFUmXTy}iu{1V=ZsIE!-{@#g3LlxnOdN2 zB5Hx*Rah$k{2Z1<$oMiOI#)L!{LUSa8H-XFy&?*MY}CIidqaZ_HB2AF4T1ZM#a<;i zTAvbq&iUkOZpz;B#q4T6h}Y|@xp{_zV3~eQ30Fp!wL@`=elwj1Yk-%}gZIM&0*lyJ zjNpmny?RJ{*{jHtKU%H~P7bUQbSof#xZ{Xyp?bSQGWRxw%xMl@Ld*CcblM=+F?OhE z(@-C=r&Q`)VkP4%|2}y8y)^7R=0}@1EOBiAoz0`I90OHzs_7OqnQXC`#M<4r z?>^o>_$(5Me;-)OCe?j-;BlXwg?5i$^sAUR-fX_$E9`;4;#2>he@d!4Eo7_hr##uy zS2Us8dE0_w;s3F3xh*vHL{X=J^Xk4+Gm#c5Ok1oLFHnS}B)X)5Qh-Tl<}_;5dKw#` zo>|U|I3BnPWh~dof|&rWM7boCO;7hpa!4FCb^@+}nU1!T6#kvU(b(Ql$~|auzY&3j z&H@An1FzLJnhmPg?!s}F86>~GL31_+P*Hl_sN$QOgPt+}rH_z#U@mPrTq?FZmia&r9?;NHR2*e1rFz=k-O%PU`|4f)`h0axSW<-uM%Kqy}hMahKR9D&9 z_0}E!jsvIJ88BVSjBMo@VB-b%QFkHyCV~W{4cB9jLKU+hq=Zq^iOMoD%+@dmh*KTW zM2jdfE*79fSQ{LXWTElef)F_%8_drTip!<)9trww;*B_)gfDz=i575`t%VA^HOSO) z=y_}m1i_0j_WXKpD5kt}6lO;TO#;~Jdx?oY9*{uI0iq!>;BH|z>FfmOqfQU~Q|@^@ zTSAjS&LkUa(8h4CG9gr-1kqc%=^jhRGx2PHOm-hQtR8!$4a#!yQhePu((PZK=*&m) zLu}NlXw3d3XVxA=nQUs14T;p#pKtH(H}5}v`0jRh_Tl#RU*wxmB$~%pC=>qC?t1!? zJ$Jl1(cr7&-;I8E_?6_#mvHa1E)^CVn4n|H(8n42_}(CQ-7PEEG??Db84}Q@Dfk@_kaIy z*OOo|r^b`ygS*#%es{ZD@Rk>-?t?HvEUXoD@+n@?shIi}pMx z^b$w;2x!L+GP~i&``zSQFn*vAFOdeMOJ{jBeo*DI{c39ULSHujPs*8X96xAqOi>iH z0S}l#_<&X%%bm?3Q10=?jNpqAP=~S>ck2|F2B!H%k+GcUpvIIWX|w)=0EOUL?p);r zV5l=$AZZ~h{iMaFoC%QqxZAs23{TcCe!8(FtgEsZc@zGZo=MFU*@4Jm*}Rlm7YDR* zo4S-qMoA{GEWHIU!l|CsHYoZ{}gM62!A3XkB})azWxS=8T@%h#@RER&@#!c2mwkc z8HR+8T=`No4rX^JNpKZc(cu4rpe+X0^u3`go7@PyzI z!E|2KhkA3-w(sh~wcPxu6ykSONBp6VB4in|WiLn1@G56qwt5=U0kCgFR)c~+@M^2Gn27$* z&LN@LD5IXMz>~o&(0oi%{-_IX7Gt>Y{NYtS3bC4jd#M`r`=1(!)>__+lvHqP4oWeT z3E2>o4pFM$|60@k1uWLT8H@8(vLUy3U_n*L@>VtCuXwQ zKx+ZUz${3?2O_`$7eyw+Wv#V;r@z@|bQ*%|Q zmxWZJefe95R%b`mp|Fptz`}N0SfPiRcPI&x_5(R`u}WY5FiSJyl&YSko`EHyii8D5 zY{k+FtNMkAk4oL{Vl1iNF%?#ElPfK*T$f86(aWt-3pT|4FNO-!XeXC1YD+X`sB+JCo^`#sK%P@810R?<@;zB+80< z_rZm0r61sGj!x|)JU{|(8o1n`ir$6}PPOC=&QPX41w}I)g$B~koh<}k#fwzoY(IPE zGTY}fXNYV@*zK+GB=1}oMe*39Y5jftu{UuB2@hDas>@M*0DFOes(%@gQvL?HY3Avs zRKX$NvuEBA3aELZB(y*jAVIbfV4PipMr@xaHDfqJ8GdYl2arRkYI#C|=$Is)!XU6A zv=WI3hxs-t&}mchrDo{Z@Z_A$QaNJ&Em%xG+MK}R z_9|o^*}x-wubGXVcA9h)hm3~tFwU~WLU<&=BzO=E2Zaxj;%mfP`_yV%k1s!y$Bda5J8>C@NrDB zM6CZDy@KpB!V>N^^sZm=lZ zbe8Nz<59vs!K6`H;}bW)&yby_%y{xcqioELxTC$$jo6+84didD;?`%jg+4+OGUXW+ zvzBAkZA8_e61^pGz{!Vi8XTDa&3^6yd98nf9=Cl3wVHus_-8;(I}Qjnux^lprwG?T zHT~@+`V8y_Y&1tnq$&LyKC%ajds5}vIWh;}1O66|8VZ?nq_Jg^A}EpZtt28Dl6O5O z(ohLMN`+cXBLX`>%8em@G98?u(Pu~1Z-9EfNFSrk)-PBLAHJifpY$pMAjk`B4X?eq zoX=2vos{QHZD-+$cwqe>n3dT8gLcRVoZ(ZP<>xCNeL0z!?wGH%Grz1rRwz9a7m%W! zbRm=qvZq)>SxOBO{I?gEoBrmwapU}p_BYZksJ}){f$hlO7%$xBrP@q5=Ky%Qy82v` z`aM&kcOV#XOll_e0R?A`!G-5PIh!YgMxwSc@H~5IQpA5!EDv6gSfe{m$Ti~R8Lgld#)bg{=c0~#G0 z{2gPjGHs}#EKp1mmX?JGrz^b*gdJeU?hgNp-tdP#6FO4{Lza8Wp| zSgwcw9f+zlG^|}RU7+|L2!`}b%RHV%lR9~yZjrpqy!#|6RPmUUtqIgm`ko)}F{bdR zDwtkCc>{MpeY)SBzrKIHTi^bC`vGwjd^dm~Bh5QN;tD&_k*T=vWOVl?`c6h@`D4Bl zA%y#Md&@9nm_9)wNMoLc?}UW+Ko*G`5TR803AhEB2GvLs_Q4 zn;fVIvBSohB|_PsI)9y=@hrw8?kbJ7*5ehmG%n{`gdosmnvRGq%brQvUmh)Zd%$i` zX$02oab`Ttpx#A?ROAbl2!d}5R{;xjl1x5H8YCUe4`ie8fH4;Zy1pXs8-_>>$nVwT z88JobY>nlEyHX+5a;ni}n;dfFN)|~L)DaIY!*Xc@vgr4OSoPGginyL3S~RCGJzf-? z#B>%!+}3vsaZsT65q zB&MT*8wFeg6-o0I6ec}{&q$gsO62V83?z_m8h55r9!+a>zM0J2zJ=99M`O?4Qs->4 zS>iM;dZmd7FKs>f83;*XzzzQYS!R2n5@l4p8rLM%nreBK)krybFeW2~g5JjCC#TlM z8T*V<4)F8(iFY3kQ8t78>pcMDYJQCZj;2v@L0TK0HqE!I2@4q_EJV#=zi6*v-{2Zb zQrjT&GS=?K(IN)Gj19_}cR3uM2BQ6!A`0cZ6I6{?mN-n!-12|SrG%d^$>9>(#t_Ee z|IiiG1vDzs@Z8L*V~%fUj+R(b3Iv;-*BwNP&X6qJX@gTT{lQC5ui)~~_%5jLxpdlTsnyHX3jX+mVj z7SrHZ*kQ*&H@Q35rh3QvTiS_wC@WWZp_@&}@WZOW*OC`t;McLtj|c+o8bEURA}i^X zv?7E2NNjTm%IT4_at~_0s;W|HH&VQ_I~S9Q>j>70Rc0x=(uqw-36U21Q*|XcznYRi zg7)Ne@V^D)@8Nxw{7AuqTdDyDI&;8~hZ5ub%A4Gn_~`X=J*omUv|fbB9jrs95m7D- z%)Lz5>PV@jCx!y?K5wBu0bJ^omt1Nm9x=?)sYfUQE2;3oOs-t4s zp;w2aZ$OzBmA4>|2myk!5L{xy0_+rxT1TQQZqkkby@Qy!Q7P~iCs$|@-rqf)0P}-| zqyj?^n2zb%*Za7Z*mBw$rk^hde;Dg24#n>90cddGOq^B=6PeC0p^_j|-(vj`cC;O^ z)O9t?QKQnK%7Padh$CeUlV_B`E zC$+s(bTbcvBzBfs750kH+t00KC8D%B|+7dqWkvKuQ7JRm9NX0~uGNtiSvxRV4!_-vGqJ z;sV7f6X(GXr_N0fJ9dMEuMb}hSLoIBP5vWgfx=#g3`(~rs_$!}aIiFvzlo`eywo8} zGfFkbXjJGzwVotb7REE59M6oD1xgk`nhwhB+vOCM#fg|?fwN3`8)hGfnd3!je3&~Q zRxmwEcp}3{FBNl$Z@Sb4REW?`uIKy;UBT}#Wg+o@t#FnGY`uYl`i_+KA9;+_3$F&C z*UHD4!fw-Nyp!;bW<4NS2--_$HPEd`$bMt9_do>cR4bRRr&8*sFRCMTr_Ie^y&qrL z-RM`FZ;l4dwUCD207?pftA&FMPZ0+kh$=HP%1$9x3QzVtJaIa!>^sDF)yKC1+BUA1 zoB1nmr6NNjDXCZ5LSjo%ChhQ35TZJ!Ulen?xW18vFNJELJq%?r*-x!{FcHOV*HvEw ze&_1!nYOzEU{H*Olo$%CClLFEmMAdr%)gJTc!mBM_RT5&+*e7s)`*KNMc7O{f; zhJ^%s@wpV;dSZMK(Jc8ZvasxiW&f>uif%UR%F(~= zxBM^q_dMDe$-oM#hVKAL6i*MIE!_VRYH#poRaHZ@i|nXSt=M`rbsiPPgy@+=uRC_H zJu`G7fv059DJDQ69roqi!bE>c^%5Fy010hz{{vylzTHiDzSMs%kLq3PE1X=Q=7!5x zS@a^_aY`D1BvNkEATMEp_@fI*f@;ioX?Qf#W9%dHB3n;AbA=FO350oUXM>KmNgf+c(QY{w>#s)iW2%dxj)vbo9(*_W zpZ{}!^d&|{V0Y;TfDymuH#N*ik5|!G7QxkgJ7b;-k3DJ@FtG_$pf%RWnyg5j#Uoxb1ssvr|Y9;#Px47 zSkl;srIE_BH?0 zP!n~0bMY6O)qBT7Me6n0^1Y(e6HWy2H~E7an7)_m2r?a_f+$BJyE;+Vl>01w2Hlc7 zcoRdQ(&1tmBINwJ*cfUnn3)~_4<3KeZRM5ZlD9S%&&K7= zzM}z%K8++OWo=e-D}bglLk$M$_45guS@^~FYO3F(xWFtZ2pBwn@>gbWX>liivR?%~q$HpLwo*TW89%pD_Y3UGbTRWFKKCcWsrzD% zI-p*z0+dubK3sSbxa3xvZQXD0PNw5tdY|MN#BK27Fi^DQxgV7nTG2l zYj47E7ddN~R$TD1G&!4d@YlOd!3Y^k{TDNiBWBvmF1ZCD?{W z10j}(Lcujm`S2ut{fGJ8N2D@-cZ-_hFgd_9l#~l#peaGLH*MyBnpS4#G|M1*lcb=- zg$)@;1GSI>uh3_>Jc`dY%J4;#T3WRmNCUwntCnF!47x;zHMumrXWY8p1q^ zY)>9Ew)IYsI#O&jPM*&PM2XID=ZGXxC!87=b+{CwbO_b+z&z%)iEIBIEHNP2_5J;v|><%meAZcL7tFMQrH){nIDf5(8o{I}u zi*W9V&X$jwM*Rishz0K}29OCx3YHq6cwzWlxn40wz%id`(O;R}C{VqWNteRF>NLa@ zyvQ}EZKAnwL9v)Pe@p-T!HW1XPyk3iVy8jkmPGRKh6%S(?kBwL9-PNcnCCdXEkjS^ z%iC}8*f|E6ArveG7OI;S%GTih{t0(@=OD<7gMWH#ats1I&c5Bka^?yHgXVIvgoFR$ zP2n-HZsH}-Mc%v3*m2|O;Qz2Z`p}rknWK%s{HB2+F-5wzofT$9m`*FV9Pt-NuokAj z#61h*ks9KoX-}J9-z;w|KB+UR=)PuuEuhj^B@*YYt_=(!&r=z&L;qIL7Fnr8EvPzo z1ij-**y;i6YxIF0`ZS0a{!LhDR7Uvf-Mgio z#zA@maxLs0;xf^|eVB5NR||z|4n3w1+{Mw+pJS0d9M(f{)I@L)Z)dRuzdKofeTe_) zQ0vo|SE#<4qxM3iV$&H4lX=3yw?QzAi^Nagpq$4&GmLv;BN!_Ivvb;ql=*^_EJ@y> zdVM>0IM9fQovynr@Gyo~qEo4#i8qjjNGB>^Vw}iB;P@t8*ey0^;wj-;@-3@h>HjGP z@%WS0@kV=1l^ubWCE{S`tMXHt_XI!Pwsbaij2sA-jd_kbPuD^q_GCDOVdn)bfo}15 zk*ct5UXE8TR%H4!LY5u8n>w7S_*icK2infpuSk#`pM>}RoBTi$T5fFX#QChuteYe> zmp&H3Hjkr)paznfXt6J&dWD_^M7)?w{QL}&Ve!fmieZ}*l|V>}i{d?XOMlMZxGx}7ApM9`h$Aa_(><&Blp5x|TYObvcv&|7$IKg$uAoBwD*Hyhx6*zSkQ*3ZuMU<8b802)6OIm)GC;HR! zU8DdG2!q_z@k*tt5!eXH^W>YZ(ipM`JT??{}ZSodWRRQQs864{% zk0iV|jLB0DmA9p6Kz{5K)jppg>{INqd;A46Ztg%S&}2f05o7(OhLAzh2|)c)7V5|y zY%NUQLto*D&!bWEumm{0NxLvzbnMOTZ;@oLMw!FaHI$-}PynK`sJH(?GPQnO(h}Bl=+|q(DJ7GCN-~`}S zj>r^Dz{L<T~Kj4b+01r%EC8@CEx@o7p|V z+BAi3wTlh@Ycw}`8$PVO4SlfJ)sE>HMKM7L zfuj&zt}+RsF45}t?#8HG)K=+@3tGcO`$mco%l>1crUaustax4Qdor7Ds?yUJK2;3bSD9Yh6*Rz z%nB%Wh*}4x1yhLj1{?v!KZO9|2dTf9_ZCa`t5UNK2hnX>XyupsjL8gd$20@cPRR(j zRcr+ggA&rzY1%9+?O)6lq=CTw#o2iB&4$*`^s=(2@VnJ0?JP=+TwKZs=0NgwEEzT+ zl1OFG@dYlA+q)zfJ~$mQDk6Mhq3TxEAUj5zCL5Sb`#4`sf{KN#44Ugq$?=|N(6zb8 z_NO3ybor#0T8r^MT8S=FJ@Yuf7bx^!E{(hLyM^{3$dFVh%*zl8!{R=Cw^ga2x(6mR zxh+v|0`o^N zxDB}2;p%B9Pz!WW{4yyQu@uoIg<4?OYU!~8`5v3N*V@COm1qy5mEQT_h}^5^-Lb=M zE_?m!Uv`gP%dwmUak4%Za|CJS2YU5;r5vcT$o$&4CR9VwPcj$y4~$)k)13Iua0&TQ z^5+FIeI86GE~>cKv4neciZ5Vob1%D&&{=h|%T#>|HO^kkY5a*SSCjR(s~vk_enNOU zqN^uAy}O^he)sOrufO|?0<$;)5!rjD6ssQ4Lw%$D#M5S+fBS0fJ)rHUy~O;>$tA-0 zwgYLP$<|`=7&M$o?C#iFJVc;66obMAAz7e|MC=lxH^fQ0K-J3ybc8^k4-OczoO}4P zz!+Qm{)f<=AiE<3Gvi#4R^(34*^23}+W>`4+;{|F)+L;bFT^eiDDx+|h<5x5MIzxF z=Vcp*oPCbfZoaBv`aQmb;`)~xWV+UepoVGsC0!ficR#$(sk|s=HXeSVoyy;Jn#Vlv=i%-!5ufY5=uK{ReWJCtP=B~7B> zKz>im!SjGT@Vy&SrYq+kB>Afs&`2oDe?bb|gEO(MEPwgSW1J_%egA_0N4^L8Z6F)C z>@$G;RlZvdz|15b04eq*V(yy~iA77O^s)RwxDC8s2c~Fsnt)Fj43cAiYmWVW?_vJ^ zzDa((_`!Z{gbH^kJ0M!-6-z0&6manM z@Nk5T9V z64=1GlLirw69&bOqzWew+s*ep4_y&vxzJ&|qJpjBO zUvFmgO_grS-qdrI;wYS;pwCSzE5`a6SKsW6IUDU>&7+j5NETqzz~i~#j)^R2tM zd~O1#!U{S-$Z?QT5u!t5&J+#@{y%$iac6vUQg{_>qM&s+O;!52RK2dFRV9G7#^Skv zpvY>LPyGls!0{_km#+uFQ^Tl>E!O%XnDhz_&w{CEE8v4`TKwQty+RN{JUWW1D_zNR zr7LaLpefTU#0y~h07=z;NWg=yN(dYNE;MMd;5j+g!Jq*Pe&JS zLAI>L-Em|}SQyY!7)KHbfK#eC$>r1 zwwJ2oyF;0$#AD9ruGfZg%p?aebVP=(E?oakm;NE!OJ<5Ka70o%GkuxN}K9`W7~Rea@j85n|s$je3z4-a$98t zjkZpnlvv@g@qj3rIK`F1x-~(t3l9*_3orD&5~I={e8V9=)g|%N%a2Qi8!{ zfOYE(AIr9mq>I;`h1@tx!>rUeC)D*M?L{JTEVY3C0QF@$6f$k@)i$snP|s_ygdhn7 zAW`VVLDMsdPpFxad1Mi2d!W8ZB#8W-XkaZa1}GE?7tWa)HlRD?W8ktTgZ2vCgv}0X zJnfs|$f|I4Cdr{sySV4!FV;ru`|qv9b23^Ypf^3$qiVRE5$aFGm*m8@zGdhEXTCT_ zBL|~t6dw5liq1s`iH?TW0P}wH^eSM=CfJ4cS~9&wQlR=$=Ybute-F`^6iLP?Ahm*M z6_FRL@{CvHR_6%Yn2^uAb%Q-a1RV28#zW9DFD!5K=iZqPU863_*63?oD1dFVQDeb#mk*e$tS_-Y@R|vvCVl=9eZcu< z`uIQo1B=iFri5sGU}dyBGNT=Y{9NJMn?Ps1>3qrz3#m`L!SU~&9Uq>aoF1P%g*){4 z^yK*V>!Z=}>}d3h2Mt)UKS*23%?lb&oo z3}>Bwk|ZWPWav~ZS=0lU!myqSGSDhFr`v~go71A&5DRm7;$ah>$PnO;4zam8g9<@? zD=BLTV?_i$93yxe$h?3^OK|HpgQK4$Lg)XcPMR(Ot{3L0(n=JmP=ncQhDgC}qQ>11B>{Uf7c5Y$k^4LwNl72FD%%gS#ooPP&WiVe%nn{vQc4Obx^Z)-N}gu zF!ayS?eE^-{V>S2?fHqGS`RLNNw3QRObNfmzmEq6kjDoE1O&90U{e#CAmL2%QeEQ2 zTV1kDBrk*YdZaHXc#y=A9`4!;7q(jdz!nJz?rosfkamY!VDknQNWY$Tg@GUIORv1g zKRr-nL;wf4CL+YKd>F5U zTX;Oqdp2?6N0X(!<|;zo0M% zTKbVyo+!p<6#TsMGPOpOw5W5^S(m7#+GA_PHOZ}kRGZx)n#CoYaFNDRAz(%CH;c)@ z9zc&&DdOcCfxK`o!Fs~TI2E4k3jIU9HfvVO8p|q1q;e#!qIQ=fQ9bjxhf$*!%u7nL zWTLUQbo^MbT8hh`B)YqCtm<&M3gY&10 z8vv6bCS$u8M#8Fl@M!IKXn|o{OOCA3L2S|y^Qe6Ic@S6_M|SM%b9a0Drqt5%jk0KW z*|Ld%wmW6;ky_EXlH&{KL;3`p?%;>+_JSzkP>k>f}Oq@Xx;~22ajJ$@xc^L=9}eilFNgP4q+nj^9oL0d&&QDU zhqIFkoJBDQKffw$=~BA95jd6XaW;zSyUXnb8Y~6U8O~YgtrR9W+J@SqZh#9TTBBZ5 zh4n0;CFOJWjCgu@oM48S7Pu(k;=8Z;O^e!eFzTHr-O=SHr5>K*^ZlEkGSf z@C9^3T3#I3KT^ZepHRf=Nl@@y8GB&LY}Tq=BdJ_Z29@aMgIZXzQT3ijzQ;?m-R$yifb*A&yY3i=G;)j$o&{L;C$_VVPXQTO(svvdU;g^DNA6zmE^QgAAyO z$~PW9FyJC7hz&|oP?XU2RTdJ4=m1zzoZgP=e%$4~fP&;*0+M5f5;_{DLF$L85ljbS z8fxm%sbgfb2Vx{2Mi%1+6GP5&T{dgUyCIt)dM<@!93DdM$mg0IA2x)Z!YC@nE|7Lf z-!Fo>og$XZmq7XluUXt1!Dnclr~f)#N}<;^&`$$oU;Oq1CfxoB`uIxsGlqwuj_x;l zw0VgVth?3QJI5)wT8BqYNw_vC4o?Zul$k6xv_HxBgu0r9HApU#HB2Mcwwbkno_qG# zWO>8P({Qdiu{$B%>pF@S@>Ls*V!~*GY2AX*#8YzCNsQ^4pc};;EUrIzIdsypE^Z7Z zj)4GbP^->JGuCHea7ZHdinJBU1pdLa+;{9d;QS@v8_eS!r8r0zgusF!3Gp`PQ+fjM z*et=~Ti7UC8?;2H0goyfmG|wLVP6zl@UTMX}}2^NT69VI-l7<>O zMGrR1ZUu`9rah&H93CeGAMMW0j7`K5LlRf7bAwn%er2VgIKcftMu|4y6?Q|&& zCBCrz0zy~Z-$@?>QDYKB^`k*&#PORBu4|UuWZ05w7RTV2(TS@&GKV4COF!oqdV*fs z5xefSXZ9^>*3QLLN{NO5NWWx=khN%zfvh^;QXf)Xn*;lY@>co_f!7urfZNz_M&vR% zFFhqBU+SeaL*|FJah6_J;=RY~bG1q{u@_^O3-!nb25(obIQX{Kii4|3tQb@3;!g$| zR>QQ7mF4%evHYHrs77TdSs9Wc_h#`(a?t#G1s5uLrb*QLNs&dyim-izXU9=pnuQ&gWO9*#nOr5& zD+L->f@0+|Bx69KuZ#{vBa_-f0AeTRrEi9oY%@j(APOtdt@Y{SZu-}s?*Bf>gXW-S zq|3Kr7uatoVf!0X5v0dzV^U;G5o;yt)H>^GU8*beRteXH^3XOVYHtl`q(s?UY!IZD zJIKkeZHG_%k8!i#fMrtkOey^(Y1(#0zO&vM)XotL`<>ps{`0$AD_GsBKn;VRwftoT zlslYnph)N@a{zOUNg)D19w1AK`;1k2Jou*p+%X<>mc9E)xz7V|_oL;JRf4f1Vf-*; z>?=qZyEj`eUgW%~kj$PzT4>9sL$uSrP+cx;3kC|mVw0R)bu^p2ULXz_Ep3ZUjGoJ6 zvrj=)agtub#1pCgM{XSC2Bkxja<^;B(?Y}NO!sL1{FVylXR(Aop&I?!#nt3y;OAWz zl&?_%m)`nQoef1#pP``!Up!ri7K>xVnA4=H7!m7${iX371RNH@#ebgDTaZ%#v!tyq zR*EvQGoQvb@(ET-E`?6>#Vs5g(sKU^apD={ao z+2D4BjYMZPFZJCUkB)-@cz(9qd^3G1!T@KQ<3tM4LFHk1(V#bPCzm-mCk|r%hFV~- zC57*9L6}YZ6W3@@Y*`=JB&lTB^V0PBQXfQAq)T@>-yF3a0BV@_Du`dbc0QBLj*Y~p zoxa=-C0cRU@wa}rhs4Vb;z3(IVEsNs0CIl(KdUyCD}>B0*mkp`;=sS7tQJm`+Fa!Q?^ohG5dszRbbzp@f4)=3Jg38*O`Z7vcNmi+& zC@3yP1Wf6`^rNW)<`HTc>I_hXBhJG({#)DoJp>U$oMaGa{JWMw$_;zh!zwSFB0?SVItS zv`q-=IL`_S#An?dSjQ->RL@FBL-lB~VIWFH4iQFiDv8;0Avb{iS&knK2%DQKl*1lw z<9dWKGz#^pU=d1_h%1EajB-F1)U|h%BknTtO;KsgJYpirAdWzh*rHH8hT#lTWP`ab zAe$cr+1v|HQvOE_2hj%BN%`x$PWvLpGABqGVH7TtFwuhT8(~`pHO{V4EdsfUBQyo* z%KYrn1+ZAPVL(I?RGJ$48RK1{%B|XY*_bc`Z-a*LlcOyDBCs33RU~~-;G@VPqMXmp z$d>HQAEgyc79rk(KY*B$ZG)Syr;ktt_5B9v;L@?R!nF=(m*(u7A_`;QM>2v+D?F^E zFRAA{bFuke^V-lI=vfcc$cgml*)|nsadjF+S?U1P=j-#UR~VCF!-S*m2XuisfZ^rd z00u&|Mxt&(qRzcyqm811`_fug>YP$O%55ATS>InAj!4j;1pobTUz= zAgfY|N|sA4Gw_n-b7|F?PIjkvvG4e}4b=4FVYs4nC@s$zWT}L=jKT;J>`- zG0JNE46cv+aCeAj5GBJ2_LTf%3jT|Qxn}%iABqlw4HQWW`CkodFmJ8aJsn$T<9W=e zjZS1msH33Vg*vU7Etcq2M-P%$=h@*nSe+gOk|C=M#_n_2@lxxp=<7VH+{XHe8m!;Y zdrHV#Z{4ctA|JCQdC29SGYg27QBB4!)M^DY2bD_|RkNK#(Izz%B`5x%1Zs$22)Fs; z17Q@N#gmtJ1<`SV(GegMlM=_wQfnXaqhS|ADpi@EaJ=I43i=RUTZdQ{R5hc_x z3Notb2^5>mF)pWUR|FA=`vfh1S6A>&qqK2xDRl@hd34a_gRpWo5 z_W}NW{OI>TzW?j(@Bec9_uv2U_Wt*8KK=Etf8Tw${r=tizx{sm{`>pCz5a0fd%NDf z|M~Xr_vg2N{`3RZ0z`0x4Da5;YaN(qfZp=O@F{o{SQb7b1XSURA1D!!Z>p;VfN|(h z$sJGU3x1bM6#p?Ts{AdNz>v;>o=uCg>*3)^5j#m)ok`-k8A%5Rr9es?uL_ELz)bCS@OrMFj0sBC((7_a>xR&oxbE9Fi(zjc5+iGjU)y zvn|fC+lfZW8vxDLEWL=>ha|M$5==Pup-o{Bd20v3qmbYXHpaJy#M8YEy8Bs9#pN4v zJ1he>9bgFj5s-5Wc9fhShu8BG|^o@%95(p23H(O&)j`|m&A-oO9; zfEKOa!kmU0->i}H=TB&6^Y(6+-~*d5@EOVhXAqAV8j!9kzEAHZB`|V6*uGbw=p#52 zUKs1>Sh6gk?P(od>4TEg;P(J6U=lJY0Wx1KozX7C@&XZIvaFneRX7SGv?#}EfjwZ0 z_b3{rRPavt3@^%Mise!@aXi}2DtK^WHGvmFt4pI|K%6`7<3I$Q?E_5q0T`5O`)y|s zG5xbC96RVVI72~>EH8oFY61u@daJPe!++TgxyorunFKF^LT{G;!2vDBq7;=W9tI%Q zrE%F>erZg!7a;KWy~% zqqUJWgnT_E@9lq?kg!$XS4a*GbpPR&`uftT7qlIde8{@~iM(7~#O7sNww zFSj5{S?C>rc-+d&r764z5Fp<5a)nb3l-OM5W>SNLukPOe^i@IN_{|}{_wbNd4k2{D zp1xFSRiD4N2Wqx4v_nQ`rJRr9u>nL_bzdb&D=+N`hmLmjv>Z5W+X;Spa}Hcar@4wu z;d2s?=!N4x!f9S((;1JXjVh4Dx2z~t3eh!MZ#8K{HBZ;!3K>QDcv~8*9q}(Hz~#gs zopHaz4!QYs;EYC!NUZN2$F+7a7+%fisGWzk&Utz5U_v=8>KGzLBcnJzCZHZ07TD^Q z?y>l~UKmWiKH}Pf8GZTId^sykq@7N2TKb@-D3QU0>oid#96Jk1_}fVwH<&vCT@Llm zHVdSb%V8a^{j>QDERx&i6(s92B=8FSEU5U3%i(@S=KFThAeu#8XS9zy_F0tgd;UWo8r@ zVwHJ}{@x}B?Sm(~%04*kEB=J;Z=d>)@4FY#4EE#QTc3RX)?PCs0*JFI`p85UlZY+o z>A)oingwgPIi>-ce#j~Fh)f?SlX;VRi6 zlLqFg7vc&%<4z_=yK5$nsC*PLEJYoVhVVBXYB))8_VT4W=ZLL?^m4-8*x+rpP3=HZ zc7*a9awDNr{uooJEL@PRjO?CbtbVJq{}z6dgBRQYEKZh##39E~QdE}^?h(6Ms)Xyw zDcY^xz5V#3wob|Btn8YHAEEex_oL^Ve?0N%~CDRL96cujMyP2OX#~)FBBo z>;{$A`JXFmj*O0%9?Dt4v^!4em}(Cdf4Tk^xyR!xCxE_n%C`^DN7xC(44uEK0)w}vv7GShxO$Xvmb}j4kwP=lAW5bH@r58K1JeeNU4C~ zxge2!r;cq>Cb8x21@zBtpxf%l?NK!5E?+zn7**wE(0C z^2|kWgbF=1!)ViT9b+koQ%0pMseCl3u7s(Q2pCj_$f1~b8^^Uw**pJ=f%WF9PIWkw zAC1yNyPR#HNf)li`mEHBw9UTd4{p09OC% z$jdooD|Q9a3Rb!`Db14nBxmb#9 z#q0TrKJcTna|qH+F+U%}Mw>xJOPRv5lVe5FW^lkE#NIHJ#t{*HpajEm&5#i!wg#xB z6^LR9XQ8l~U|_@x zCD^+_-CfBxp#%q)f?k#06Viex`IA^VBc7w$qKtP3`mZE@{|i#RCUT0&7%p1(zHsvS=OHs?f3PjtPWK}x)_bOoy3`Yg7s_Pk4EB{$)e$v4CHuITxbI_|D z3cWl_#;ukLAtxdB1bIog{awQ|sLzZlE2!N2mwO+f-Z||W7YXm zuk2Lh?DfZ6iLytDlF%e!BTf%+GFNCI4)Rpxa+me^hh-W$@<@x3B;5FZ&+}dFKlsh?$>%9M9R} zn=gE#P5%5tk;V0ePsGgpxHq@ozy9>@{tNHCxkk;fIigGR{r@@m&%xh*eEaV90Hx9l zwp7Rp3Wf2L*S_0?{8=)`Bow_NdI$J4B)nEF$Pt%|I-Gto0EV zK3iWP0~?K}y2KCJ&8DsqkowJ_d6$}ggYdWL35k(zx=LZ)qGK(pkb)t4UIB#3 z0ws(Z@}Ob}eW{@*Ry4GRWQxPkG9F2z=OB0SoZ29BZKl^)MXW|sZO6CE*P;PRI`cYP ztrNwEoq|)@(3&_o&g$J{y4l!j^+81QDo0)9z@&T?P(LOb7<6^7Q4~kCC5c(XvA>sB z8%&Q)QY}K%&RrE26G zDW)&iD@jk8&k4Ek>{9a&5i(n5SNH<6EIM#l)zur2qzkj$pz$pmultGcAZ&7;3apjU z`Sq|BZxEcW^!0+P95dSP*kOnBN0pclpL|NIz(WK_c2%!P*UdAIfC2W4h+AF1n0iU) zX?_s8J<DG6)MBe{o4w#1&MJf|0*{POuDpg!_0z&VidgF zq2e9YpM9}a4^2~~6I+N|J}%M0t{C5>BLuS$Qj15|gX&5sfb%@Y_CTJy{$>Op-*h}? zCV9_r)DgTFv~+~ys57rnbi0yEgFXXTIlsEqs|DHLdL0qdWc~IMxB0TnNPV@SL*!^~ z3fx%ILNg|lqwECe5EKD@>ximkIAq#E0OtZqcke4jP@?? zG2S~Zq6Lgoc>dskRwYQrFyx^+%@w{lY#3$3HVNO3Zg7fUc_6T@=q%tZ7zn&lXEJuqaM;5iytO`y~@NE zZI}7^JW$3~f&`wZG@=S{%plN89)|Tv@%*7QEruA+Uza9F;JrJR6!9I%%H>TZmDUiU z3|U|*b^(z9@A@=2=@O*DE?B-gW>`{$3V}j2rOCXwNm?pQPoC$ZwSr3xKO4Dt3RUQa zYzZfg`FY%0C7Pl1wNqag%~I)9Qm-74XsbWHfbYfkshke(PBl46!WP4-c%=iJ0^7&l znK879Q-c~NV<-I(n<~yJ4BJA_7Uv_Rmmhrp_V(QyW(R({mF+GaTx0^;*lz}!f`)|y zBA?u5WyE(a6$i^Xmx_VBLa}zHP`iJ3!PE+Lz$l?5u+5lkXO(ds!^oL?Y3-9esT~-H zY;FCOCrBwpN>NXLWy1udccS>Kr|NmRKgoGIH*N*32(E7gIaIcVRugb%l^}*jiQ%_K zUMk&-T3F=|+gm=8ADU|fC6PTK`o6ZcC@)#numja)_;KK$;k{c>3a+v|UUDM!njSxk zvK)?I0f_Eot#&&-(m5{1DumihU*NSnagiTye@0xS)7WTznQqrSg!q;JHj>Me#&0lR z=KLD?K1V1R)B5x4!vYF)GtG>aI7C+2Zc>H-c4H#oe9Cf6`5py<8mWg&l?(*lJ2FcA z$3-yu63yXVgLP&|C%3LM>SvUoBP1hB#cM>83`(RSy$C~F6^gdkDU_i3my+SyLJRVh zb~Q03?_=Qo#`)EWWrWOdT38`Ye^F+5m}@UW8PE8QH3cF1dHNV~tg%_7QnPoTKK{7= zW%l;__fm2&2J3zp#c{*fNs!k&=AT}8U55k276fB{aoJOh!w9jNjrHv~m&Kh*-#a%{ zX8CjI4%$Ah7k3W_3CJ?U9=b&m_87604nXF|dX4jeJ9APfErk`r#>mWq0UPnylf@cc z_~wvRgl5jv_RZ14lZW7LHq2X0UnGMR4)2(6U1*Uq3|*M~LQ=$A8cO6?LlVftz<<$d zF2va!(iXzCvKpAo7D`9Pzor4|Bk%!ea6$K(m&+{I$_5cfhuOoqXbNLY{IefigyaqM zOP=mcEdpn8CcrZ?rz}q5BV#IizM?ZlHyd|@$;^AX6*?LiM{v+#Ph>05(R&5sHvT}3 zhR|lvt|0b=dC3CgUbk>pGtbTsH05gRECUARxL2v$UFx~1-_U}ht6j3I(N+jt;-{Ij zy>lvCkTLnBUVKEpV;ZiyosE%+D|UT^2BnnO5ubs=c&NHgd}gpxk#2ciVgqL+ttd3~{D ztO-OiC7phDhF;j>+K0Q*4iV)!I?B%C!W;4yKxMQ8sYy&*XbOq|!##8kqz>Jfr!edd z3wfc>Z{D7S%;?1S0)3>c8X$;0J^>c>37MCfR}yC@#jfC5PmVJ11Ln;Vucs>>5pp_r zp9@s%rs9LEOvvq}x>N&|DAtZqTC;^< zd*`$9&H0+iIhHobP3@J~(x4ux+tG$NkTchsObkBO*^Y|gQ)y_}BQ?f}5Ur>l6v_!z zL3QOIy6|F2$vDq2_-3nK=Zy8jqvnx~JP72Db`c}rmR6qZK$xNzbrM?V6rJVd!bajg zV}Fy`6z4nUErANEVTjZT|HDCTFvhH%^b*c z%~B}nc~D+~oGmI9#8D6c%ccg)tBP-_q(NeaU?-K>JE*So!iHoDCh+ik%2s<;_p{*x zz5(e7j~LdMJ<^Q$3lA>#J1+~}xXaP@!F?alPbR~@lq)($9H_;#r<12=-NK^dNG~A< zR7n>`q*S3_$ZNKQHngz<`Ht~t5RtGStNSOoEpmi1&FAN`D=}D+7upGCN?aX{X6Rr& zeKAMjgG9fPUT>ALk-lJ9p+bG6Gqy_2KVM7Hj)2pG1QJi+Ld_ z=p{n&5%)NNAtg5N;|4$`yV+L@iU6%iKK=7qiVzo59zJokjtI7j&Rf*Z!{NYN+_C%8 z-@g0t^@rU(UwI4u^}y2h!bvT8xRx)kQzY#O757mwW3xe`0;}(*zfp`t=5m-#?;q1- z2QGr%J}Hsb2^5c?rI5gxG<~(=i9AGy9(`vffysoC2T;`b#87-iM=_-Q_*)G8#&3yl zOjsA*(bP+ghH=L;6<_6AB*`Vv1eR0F+vy0we; zl(z9drYHrJ)@$1q7!&1yJ}QaXaR3suuwHj*7B7*w^2b4VrpD}`lqWw%5uRp_ z2w>qLo>}nC-P4R{w0Y97)!GTQuae%b)++k&6?;|kud#nCJy~#e>Ah)_&!)s+tMu0k zPOlic;a`$(M8^@s03%|fUax6}3B8;o8ow~{2E1g@KkR3fQWGcWV*(&_jZ zm$8>f+j@?K!g^|iXo=_7{{}M-iu7Hqmp3a#Bi2LWC=4!QhIkUILpoYh=YerHq-2TV zS_s0cC*J69_4Uzk!S+aCs0ekf(nJH2^+0hCk%5dDJZghPp4>f2%o)@pj~fL@u@SHt zkYG!`Q5cYxs@l*ntW`;8zl1K4c=iWrtzv|ePt!wqGS!_`|FKPrV=y47-;RG-v6vgOU3? z+#%+6E7`M~#aE|9KGE&s9dJekcB+9<2d2R+dq>+~fa(@}s1|>L(*~PVeaVe7&0isT zsPU6SZSXz31U^7$I2yg8hX+RvVU8@yOjSsqP5aa4W!;Lc0_Y_u6zhxTh?IOKuB&nh zy0m3?fA4w$YJ(G!zTbVo8g$&GNNFAX=#V}iuT5&NhlG#0_Cr)rbwE?Sh@K^CkhfVd z-M~j=8@HYfkxANl1<~BR7*O2ltEi90|IgaHHn){rS)%+Y2zNvWHLh|H07+5fX-|N7 zkgx~>g@+#gf}kb3O4ll>u0+}8o}T{gcdfN|X6`)afRekfqr1eDJ8>SFJNNt1gz6`W z`=I8mC%q8+CMYaG(+PSg^~&E!G$;098?Z!HOhgVS@4emv>H!SyLExK(D74u^8;F&M zv8k)NHi8*4{#z%to}NkcQMD_f80}MF_%c&QZ8eVDr{ghIQ6yb3T*xRc?~S0O>ll;d z%0Zcsq_d7$xD7FjRo8={6bVBYI6RzSx=};5hNAdCR+JbW^;mTqDR=WFC=bKzNM!kk z77#}o@+zvW^Al;x#g%%khFU6bK7RQ8Abk~hmJM&xS>u3~93M#jYNhbdn-PXJ)vbYM zc}(?EE^Ye*61%2yg39E|teG-WG`Bqk{BOqGimy!56p+Y(0Db~Iq9{Uy0y_C>JO!1= z)E5Q_;{>oB^#I=auY2Z^qF6iPVc#nQcmeafsu&2lI7$)WZ0KgV)*rXB z^%N^!XPj44>{K?8*{)O-YS*fmi8q5}4DLygb~6!!R2s2^{DD*?sD3hEuCNUtI8bG` zz;gBM+P_$w^g03a<%z{H;yzbwoPe7^z@oh@5>nJ8sxP(Lw5FQj(GXw1wH!V4usT?= zvjK9d0!I6|@u@vQG7T3D?cZB*aD2G})7t28B$eGFhNRpgY)H|ZbmPcN1I3q>L(*kT zlfiJA=IJtK1BGF5f&fb^O-_l;E*&o?Iq3A9gvkhHMG1R_26sS%*O=Dx*-Qeyuf7KS zK}odU+&|36t55fz-`u@NPo5%kQ#%JFN#1N$&rG}ZcDK@LM#*tkw1#ZTd4?s@fhRKJ zON$E{_I>w7Crd`T1j%d7XZ}I<8GdCd&E04#LeAw8e|uz=puEak$WGcCQ-KX#nd(Mj zgEvfV;zfMO3~-wuq&4hyxIOU%+yaM>8SS`>5d_rZ>jvN_NtMNKhEYT=ybNYp73D*l zxvDH5e?hl4Zqod5@9=%a;v{3j)O#jP$}lLuZYLtzs16I> z&yuf~i-QTM1ZlDk8(swEJG5>zjk1&n2o~^*-5u-X)I64wQ_XJlk_T2qf8eU#fYvmw z_iBvdsZ7MYU*G@y@!|gE-Cys&{9@ti34|QY2-LFigs@a;gKq*e5=0-+s2ZT2dkyp7 zcyWUAR2yK38?mtsEF9Yyg}1*|TedmHip%Po>9?W+-OE=n|C2(@Ab&>>Nx+XL$aH}0 z;BFcfMD_wyAIvkvU1EE$wANT^7jCV9M~83=GEu?G8k-2l%tDGCLmGxjR$b#od)Y$10x|C=94?i57GdEW@e1H337)ZlPdqcB>U5jwgKU5emaR!ausedi9bx z-y`)XmrhN&cC9eFuoa!~WCk+ojD%)u9^x*%dQ{Kh@uAxsBBYLw|1B8LA)BsEE=#?g z5dM`w+Ei2|;77ncyd!<58I}dr!~3>ihC2;mB}EBQKj-1&`+-HkS&M=*I&;+sJqz5o z!+Jpn6!L{dRx-xEJF*f-4Y5AYk?H@#G5;f}+x`H5F-FHS_W+?L*7cv9xg4DF^(oJB z6O(SS>S%@DZ6*sgGrR{jC>54UMzwD#)J@5f`wV+Tazf+=ACL9*=);-uUuXy7Ka&lx z_A2$0CkbDXy-N5SUL`+#L-~`MB-%+r2d{;MJtpMlin=e1n+y`La!5%hnk_8!5C;T*>Tcmdv_z#U?cFahI0|R4>;#XI zB|#uc0Xl1rxsp`y3lqyn+hJOhF#V#yj3eSf4F(&MKra6_ND_~%lp@K?9}fs-EtsfF%0#gMS(M!F4n-2(N@AMV3d@(G zY&kO1cm5U^=X3k#yltMxI`?G0jyVbX!1F1%w$kDa;n=jRS_!#Ci6xcB&CxS zu_B<$A^e!o5!(zK>yXGef!Om9%{6c z(|+NbU_nu8ilS`$9a^y3nhB>+YGWb;4qi?17vJXYi}ghq?9`1$oSA z!GPj@*<;7<)@EJlxZ5e zk>EofD@(;0SU)iiNE_JOh7+~2CMYD1UF)+sfg}2rnZ_xxco7PoEYzbhX-1*Lwj0bx zhE;!eL#GxH%vY_v19zo+QnnFNT}(zoMnh71QhB*e%cWX@0$G@Sl`M43;2EXYg)}XA z4|?(C+h9j3>baM@&Fh{aNV@cW!^)%M%AwnKK=Cd-AVuA5pVUscS-CwoO!jQ*%I^CT z5y>zu7anc);PH5H*jQ{p{eU>2zzIAaSTU278VB^ndXgOHh%I%qNPLL|%C}5PF}trw zzw{p9o?l^~wLf83qe1Ls)NX4e3kA#yU;s%KC3opoMfFiJ*a%IeXz7L< z0$PV<=%>HU;RXO1(98J*C2ICPwRPcP*Rh~c3RnXM02}>oiIyKI<_D?Ltx_#erj99q z+?T;b65{Bi=-55MHMQ)qm+Mmoag>U}w@Dxg(fi(?Cyw|L66wS7Lsjxt$H8PrIEvPE!kM?||aD|HFZn&AhND_srvT9!5r<+|Gfi9d>(&CmqoEL4&XBszz zi&eP2W?8RFVo8O}sB7^|z_i^zMM^GQ+YHd(vENM31CYXkd573I5|)rRV%CYt1%b9< z5F0EB<7mv55y)PD_i+2==Rd=;p9b=Ck8TlayNCUM_37QmPwyW7fjc#aK*Ly)zB{e6 z0kH!vvf$NY>~Fn!JQz*GV-3^Fl3}mb^Q9O5c$u7(ZY?Cq8;>FTqh`P@zLRI2A=W&Y zO8Qdo-kNCDFnfv^FQcR3g!&WtFgYbkeW9FTgXWYZh>oecnVVueIi@VJ1)>H4mQn|7 zkp+&nDZQ_g*pg5eXXrt-CBNACX@w(cpm7}OBL_WQ2Ggyi%ettx{_I`0?)_ zDn-{Mxd_hd%xbZ=`qYXFlhrCht}34#>$_R}R5N*=zfme*X+>l=gq?2sCnT~1KIoK{ z;sno9umZtYht>A^^mVkIfwU^H1BG)@uYbHo;YyOFIQHq|FHQp>IxTK@_Jv7|0bP)B z0JeCrWmYgOiduqcaT9?W7(PXJaRa33#82k<-Y%(|g8rpGm6Z9lx>y0^BUP&!4u1!< zFs$_iNwb}4>9)pvc>jbn=^DBq5XgG}b`KktL0DqZXS{n-yc9E%#m4A153kuJJjSWn z!+yKjgp-Z0lL86j@pwq>QqLt{gMbX#o@QsT$7N&T=oXUuA8(7^;ki(ncNmx3K^{V- zriRoBb-b$Z4{I?b5>Daxd<+faJd=CD#YL9A3W_Rdc5n$Ov7-i^do{l%a02-vVZeAtY*%!=f`dMJ*!^#s4NdA`FAX<@=9v*nXS47@H37_6ZuJ4o zT24&FhFLt6SrDAPx|6A6f{<)~i4K-8Eyrfx!zWV`Zj>u~`WO43L?mvQ#3bqsI^{gX zHLeb}>!!20V}d=ONgZ?8fw9(C45@rdB^CSX4PZcMDQx)Vp%4!16O%)%w(v>WtMT0m zHAf*hnwbOY`G|H)g0jVxti2@xgVV`D`~%^Fc5cHV?l|ZcD>2*CILLM85;2{#7ccY( zIGWdhcWLc402@I>}9=7 z#>-;+@Vx*Ep@!mPJgfzlVKK!!(Tj$S1cUOpD5LIcGaQ9C96DN?;*67BcHYe%H;Ag3ETsg zDdGy#3<8e#T!g1NkoS+JH(6K)Ey~q-5n``Nm_r6{k&bMZvn^Yd$xn9l`Q48UqWbNL zXfluqG{s}F5R^l{g{JjHaanx;XK@5TgpoKXppZSHp#7=WAOV8xwAyVYKP&W5?nXbD z6ZtA0n}H?EIgsfzm&4WsiByi@>sVgR<~MK{;jK5L%NwNk@q4=<`q<6O)nZ=4*AyD2 zPwfKGHjDikk9UaP@YEM(zO2yW<@&i^0YWwOBt4V5DRm|jauO>r%wq2#V+EpdXeaRH z)8~hq`wu@p{Iu^6x1a7leE!S*r_V+L0p7uOm%0cKQvrqz-p8t3GL-;TKj8x{n3Y0e zxgSL5Tp_3qk#&?NgWwihF~B0JwFDur1K6B_R}nroMZ8|wvrc&M?QEyCBiD*N*|pcx z6jX03YMZj0&8}$&NcG|n1P+5!Hig(_F@!)Q!7*_2T)v=vPE<<%Qf9R3iqy+eOJ`pa z?12zV7Bm5)Y>E& z7rqkN&f%N=iXXk4Y+k}lU)C!Ploe~){Ho-tHdK404`KKMT0lO}O9cssmr)gqspZvzu_}+Q67~h1##;bX?QrB?@)&TinzblC#RFNWRzfLN&%j zT8vSW2NalAUdQ3-*G@yn1f$N1_$3266;YNKAayuEF$X-%Mxm^$aW-tCq6qjyXpv$_^3*wiNUf zIw4X(>$(9oNY5t1S^KXTe^5p>sZF5bx^EZ@ev>`9JiYX zHjBkhgCPTJ<3%T!v`L}3NbrkAu@1lw0&yG^qwMi?iE@MXQfm50yoC<;67{nphK6Ci zOgwN1qpIbl2C)4DUj;o7TkFwVkPuj$YPF@Tq4NXf3EVD^JE6?643Z%qjb-2r84ih_ zo9*+G4)lzLGtit0kum&_OVYn4!;ssD{(>@Vh5uWOLH(^ws6IBadap3)&NcAAP$qrBCqN&)og=%yt}WI#B9ok8jZzq}>+*8uLJF`-goACU{rc|;(S zh)x9>`is%X#-J9jkaoFCh5hLEC+)idE1S$3FYH;w&&oAklvdtg>Q?c9+dS^#@15YI zN8+w85nYI~-RQac%`w;2Pi*}o9ro(?)sPm3B7>@K6gzM*`!u2Dv>V9_2KD{^^7(3; z>MVorBYW>}AK#-#_51tY@o)b8*Iyobzxfv{!z|Luh-TJD0Hs8^Yr`W7R=Il9ufIxk zGNuH{@tXEtB5G-;wnBYm@sReAp2505g{F?5pI!(>8pAgj_aj509`TEa@9#P@1*(Ne zJ`ekr1{f6li8V8iv7M)!hU{_U^se2#-%K zo?9im4&A&B)NyCTiklUY80Om%Do-=a1%SXFuO}+QO0kX7arsIw8d|!|O3gNo^{tUb z{T_OJByP*f5Xrzpf;*W`yr*y~L{Vl6<_DNHiKDTn#WcGoXgwq~@}r^cNDF6Ltsy|+ zV1L~F0Gjt)>Zt#1Hib}Gbg{Xd&B0(3%TBKfGnYe{(949&Y!&07@v&m)vER|Y#nSmL zA9M@sYaoB$?shZ3Lc=!MA4xyuT4DpDi7CU_LRuM;R#Ku#I0~+Ug*{6U5tVkIu3nF2%k)QPS=8~tTG~fs#bm7n$X~D1tZ&F#{gW_qXse{29wIMyE4&kIS*SN*Ak~jCqJZ zsW~dCVuB=os@Dlz5QL1YN_4kZ4KVYlKxJd+c>aTsqxuQb)awa)5b>K&-fmDkrmexf z-Xg0N7WY&##`HRj>c@QTW_oKsMH03xMYfL~1>7``YmYNbx7Scez)L+Lsv+$J#0B*$ zH|GfAG%GD$R!?TxxRYkhGVrb{q0d`4pt3lfHda&mn%kfJj3jN%?Xdat8a10TxZY+k zf8!$V>1pkCV?vV)k?s;RA|ckCq|X;9m3!cZK~WJ3tt}C<;E_qHoG$}0z7BOK8s8lu z{sG8ut<=karcDs&0#_*}&a{|J_XKkoE6l*r+Lu-0t;Y2_PS^47CHjDI%#nb2MP;WS zr%8o8qkh2r?ij$v-`YLdA8-3=w*JA+2#JGkO0i`=yXfVMHER>c;(0MjEG*8UDU_I? zH6BY)`o}N#ll#9QV~KK8-|KNWQMyFLfB92e3M5gwSTcR+!q#q-G=zRks`LOVqJy62 zkus)m*DKwII|3XeO8<=5Zn2ehXDg#}k4o-e`PpN_dp<2Z50KR)wwTmH8$&wbwAM6f zX$`Ywp!&laSPa|oTCB#gVS0i`1fej#oNfbe0CkfVjc!I9cTDh2FduK=2m#YtFd!)2 z7LM@Wy#I~%JvYlj04Mi3Tnn#~*48fbX8ZsGCf>v35%&g29YEI125ug_wuHVgCZuH8 zX**QiM)h4fR4LcOnG^Pgjv(q(ta#>X7l&9fs~#4OgDG45os@-t`F+fg#4~Tfa&6OD z3x;)zZ3?05(ZGjMRvhn+HE%$&LI891CP?fnBgtT6aAP5!@@l&254KA>Z?lJuFHEFO z<_vstvS!FxY%If!7#5(y^@a+eWmklqfZzXNvqlC#15_LWY`2K=`2;SgDFi)q&7GtY zhpCQY=bUc59X61?g||a)f(4Jcmkj}AO|wOTw2+}r!%?0Owt*XVa$qA`Fw7_AlD4I+ zT2{o|Asm;nW1XYf)jOGNdPF#A7c2a&BO-DFzHgk%m9|37g9XS@N@jRU!8 zr4zi?BjjOA)$SLF1xii|$ljLt)As10IubS#>j$d3MZjXb&^Aa4vuclv>12+qqc9@l zm<>ng?*fsX2XK!deI7&^kO?IA+#+6RpyrtQ3YcVtbFOeYA!6eETpfRU()-Q7z5h)Q ze*n%enIZ3U2N(Z%3CGmf#4jKWio6hCdI^F2T3=(L2g4?5JArnSNk$$iUro|yba4%m z=GzrpbJi2OcP)#phjvZbktKW7)dM6{h4?b;jjfv2zJ6?U2X%nUNvA4+^K62Z>jg<4 z+rCQ9CelRkAe=-{i&2xwRv_KFtY}P@@l|R7^#f6rL&Y$GeiaBit#7)9>A*G^UcJ34 zk<0DsQFvMO5JZomNU`81o85|)5nU1;GSH1+I-gLV2`MGW-qmA*k^NbP!ELA>0`ZUs zW;lRxb-AOT3~~T{l;i2)Y+?KYG3q+Ka{Z&A@ol?Ya~rNF`Ub#YpAgdVDgbOEbr(6y ztMF;wmhu1=CN+IRUZde!gy|mqHXJB~ELe{N&=H`AQQsHn766$?$FnAzF0XV<2wKB- zJxC5_-cxdk!mDmCd&9w(8-L1rx)`lc5NWx7O_`u)&-N!YfVPG4aAdA|=+HXXgv%Hk zN74bA3voAk8&BS}h4H?-OY+_V~NU6{h5DC)`X#a>I+|j8SQarijCBpjR&*EQY zV1IGh{;E^G=CMSS)`8D_=+GxSA97xO8*E9)f`2Uk9LRt=V+AcyRd90ix~Jp|vrN1k zG5J#I5{DF6mYhF3xwee}j`U_OwSDczDupEsVQj_d3{FvV^)gHVR$p@@%4SC?h(Q8*)YP3isQ%gZ zv6%X2F{GYBwkqZ&7gn#n3`b(TsA9l*sjX}=>}&`>bb!U~lhmcJUZ{!13cLIn zP6BG6cT8|JX!!}%9g-<1#o>Ojv!f_W=W5(PRT!pA9~SSCOqKksS#r@OM*w|O-lRL(omXI$FRA-Ig zR708xvBru#bepBxK;opV9_T7Id5LCHFb*wWvMR%Ny}W^~$p6YQ3E>)t(0=+d4I=*w z!hz(3>X+@AFvEY_M8ubU+eF-v!DwLB;tep$wlXOTqdE;tYmZiHNG3zddF7P|BPMFs z5g&=9dYVNIM8XBhSL$Y;=JM5OESSS*d3N@!$1*a+$v<`*aGN0Gt1B>{3EHOx6QP++ zez|+|SL8rdaStq_XXDsFK3>>q!tDVE#eo@_Kgm30K}dXs%C5~Ge=uGFD!dmNNx9Me zL9cNwjMdqs{zSajvyq5kZL`PMXF3hipxQ7OoMAa-{(q90)1@68EOv6JQ^73J15AWU z{qvHhGaO(rnrtp-h{|IZX_8aa_PAb5!8b7}5fnM~>A-WY_1_9u;>{lQdbHz}@=qS~ zc<79VSPL$+z3=jN{YrGXP*cz6FiTr2Ae#a}25F1A5~g+-fhPsf-OxRjo@_~?+gGq* zaYF*aG@-iN1ENLMA4AsuV$kvRC>U~qQw6tdn0{u!L~Pw&4Uo?OgOk%(eCtBy=x z?pDsBX++nFq~C5`wL_&=nBSFIr8iBZMS4{SI!VV`;65Oq-2cQ(dIdK+;lLfxnHeir z?0Z8ZA*Z2vvfakECAJ>v0^?WK@esju=-Jo35VTG3$5wT(qHJW(O^_XL9AB6;jd#)q zn#7mnE3UV&2`y*dgO%6UULZFFFU!N`wvsKPrKaoo>blG31!I%jyGCfVxp@hFAP81o zWdxsL2np*CJQ#R`-Z4X}_<2vQ%)>DpC$VIf%08f<;i)W263VDC#dro|dn|lt1q!O` zf0e7OU9Ow;4s|04wRIuy-oK)gutZq!Nxv&bnoouQ=b4Eaoe*QIjaTWqN&n>FT>$#l z+gu{RuLr)}eiuN#`6j4*d*CKdzx^f`2XB(X6u-VImj{;?kZ=4PEJgpos|fV%w;3G1 z4L}vC%GN<=w1JAbU9dHDi3%l}3@oe}P_{~aW*AV`hO^y_-YA%L-Tq0&6ZzxnYNRyC#u!QZXnh4^ zHR{W;tTpn!B_86XpB|3DYXOg7^_fhjv;DPuA{d-`%ltx_fN{lCL-HNAeeHjc{QfpNEcA z>w|IetnDuvZh9NnlwoRzSZpU8-}Xc9O7k>ueGed%1Rw+4k;R3XQpU%gS~6?O4?JC1 z)||U<${|^f0n+E=-OPD^Oy|97dfOjf{8oV_JDlhydL*|3nQXDPARkqquR^zEuUIMc zB9W^wFu$+2M=|GOk)`kk*+g~iYpn1%y;sRA_B4(#pu?eA7TXBtkq0??Vp1dI@fp^i zIu6n^?CoulH>i{e*=M$yfCxcgI-q=XPcY*vl6sJcx&C$bZuU`U2+dPqam{16f0D~# zC9~*`e_k%{3N7O89+k`={n2BxxxKR770bl}@y+~mxxGf2#je34>-aGpt%VqCcz)L? zL!sQPY7lEdw^y=Xro=Rta~afzB=+?WJv;9C+LR{Xqe4SjWh=#oGI-rymdD`g{$c$7 z;}XEZkG1rUy~>hpups62mW2P2qXy4;Sz2MIb(R2w-*PSYhr5OA4J(g@vM z=Id}IK>q2Wa|4HYdQyv$Di^VPh7NPFyfD8Q-hL=brE-I8*jNLo-zZFiXbxZ8S1DsT z{k!`9925ghWQmQ*;u6zAC@i$)DvlnJ075x9Mkv8|_*bT>=@pg(aXY*=ksR8C_f;%W zi$xfR;o>!njl!Q`tZWJrZMYU8DLeSw6q9cxDRI0?eK=%y*jXMULZ6A@F@)^1u;^gdc@ z=$9}07f>}7_0#?-70@u@@P{0T9QV`4XVLuul4;6=A2lEML1Ql^*;|f53u;u$cxuG- zE28}ZT+}aT^Y+Pc)6fuH_>oG~4KO(O06)0G!DbKFf{pSbaE*%*6?s*XLFyq<9OJCu zEYRYb%6ARZGM1`g2e?S89TveUhC~6v^>(>?B83j8&|lI(R7r`IKX|D(M$AIjXOjex zYJ`{#%0iw8T0{I(NF?};AgQA-4zyEkgBVHZ{MPO?@Y|C;qY0D93l_0O95~NU^ z5<^+gbi6Yg&d7A^f9qS!26-KYtbk;^V+E5Sf#3`#dHXs(EyXh&5I&BW%3i-D1LpFe z#a*JJC>VjtFt$}pFHSS$zz%8MFDD>oI;7=ND3Zu25s|rdjcd)Rxuwgu6dQ=$ z*3XL}bT|&FDp>^RMRW_CIH2w{xQf%d1N2*|LDyf)@~GN89gazL>xu zy!prH?YlRBg=b+6hh=iwNlG7B2o9*8+4@V+zOGqq6eu=AR#{fcdUk%3NjwxA;fk`H zE|uUDBvZz01VdF41k!PaJL>`NolKsG>I18Z21!l`d5mpSavpF`TY*bU19pv-;U{cr zo{zbob5q|kR9oj5#up2YWt!tsHmGtEZ)c7>$WOdAQVOkLfe$~hrwx!8H>EoS3|MDt z=EKI?CYQiCVK_A>uBI>!_CAVdfNAMSA*siksoEGN@^-!HiHK;!c#(|{|Et$O|03zi z@-h%w)NNlJATWo@FNh3tIEZM6>?qw6j=Zp*QGP4I!a{q_35w{xW`0T#<#p``MzgY+ z+Aty7mpkEFKn6viVsa~ol8aklPUxlaZBcgx`9w=-9zYsNb`0F|w(w=YO2Ta1#X(Tj zJ8ObSaX&YHX7sY<%Wcrh7Ce6#@Ev;T!Eei8eV$N8K?VaD&2&Xm#Tua%s;t&O1wv?; z0eI6z%2)GnyuK6xmHS)YzrXwVR?2I-2Df+V&04x8?K&?(^td;4ZC?z^FDO5~hi6c= z4n3Ewa~SAI+Hi=awO~4MqOASSo^iI9hb9a}XV#LIz?Tv^NYqKkuq!0X&n(l)$w5@A zh0@rIq(fkk@c<3m$bu1;y1lsSaq zIPzAb4E5pgEL1{d=Z8YjQFKoiWcgMl^WuxcL$)#UD)eK;c}Y5G+Ct9{7$Yzaii=Vp z!@=yt>&@r}R&FM(wa60Ap6K4W$s>4Af+1a~iVbCiq(N6hhAF_EqI!A2r!h%notX?CYlJsCfPJSCn({f{!*0TY8nRL~=9xT8I?PV3P&hr=su zz+y94sXZYcR$!lS-|A17!-~&?Q5;E}It}ScpI2^=^PET_tWd^ovK1=XpzPc)Z}UfS zdB*GV?X&RhrBr|w-9eK_dp*bfgqGd_QfS$kQfoAZJ<60)*EvVO&Zpga(|c?B+?hdq zFUWC&mSksAp}m+ix%Fd}a$tFco)nIg1$v>p=L;z^cE-wJ;#yW+g-78j(^_g~!Ec~( z9T1p%(i}ZRxad_HLXjk)d+|%=Y#W!rT43D^cQ&4M`8;I~Qf5#~s_hu&!OP2xE}(iE z@N>#HE@`kdBeoj5S?kKm&P_LsF=Vu4tF(9WKTJKoeV zO-EZe@`5fiXeYLmbMiHmN=OP@r$Y7cI6t%1=}+z9V#0vD$Zk4Yb!xI`krA1dcB-Ms zVv4@d6+`ttM9UFgQWHZlZ48|rF^*k`CdA{FS25KfIp%79dQi7*1D&DB*{Pa*`tAYM z1S1(dOXx&H!M(H3$N`w>b7-Km`Q`4@{pi#EoxOMIwvz$YUI*wJ`#@9{J>p|0+}1p# z0Vyn~cT9?lgR9P1NIF*#>v%EgF{iRQ7(Q2Jgs|+E^IX#or9r3j9i-Ck!yPARcZt#@ zk~hh*Skr_SSU(bKLHA*%oNbELwS?P${PAZlY_A$d?-XQ$AduapzNCsP`wlprCBG7q z*!Kk!CX4#`k2*Ej4Aa{wwiZvDZ(ld2?PU$`B}$S+=H@&xS+H@Ph2)kjw6zaq)lGkh)BCMW5*wR^z4A< z)CB2ebL|uw@UySo?MAc@G$v>bKL7Ob(?jpKeZy53x#Y3~s^$P(w_C|~2P%+Me;q_b zba_ESGX#j8VK9{`v{A7mX!)R}W;OTL&l1ZLGO$F|`lj7kz>gijfqpz_VeZD`xw}P~ zz5V_>dD1|IQGYoF`xWSux*uwv88-C~6yVVs``<`WGcJ zi%3akg92Mf;gOW?m#(9VxXh5a8_5u}62@#2FK+tXOb zAmtuwDs3rGzU!4>%*GF}Ler}q!V&jZ>*a2xgHw%Ul42NRB7VdoV5$Z~iN1EwTmm7paCL1tYA?mDCkkc}`tcZB;nx8a)I&e6;IO@kFz}w=l+EM-|_&on?BXQc-! z{K7;?$Jd@+%D;r6jg>AT_FiL7ML--kv}*4EGp3J%*PyB9P3i#H-i8Q*ysFU;QNi`4 zJSWziktukD>*&-&dVQ_1RryF8Hk!&pXi{o~>(+3~X&tR^vNvI77-<>}y_thVw|=?n zxsHP)hbukZT>eH6&^?rAXpIW)G?BH$ts0P(Xw?0jd72(>tSi5@lvo9^I$@-EI>qry zbdvF0;R+?09_}9QQIv^d3BE{-oXJqf>&1$b?O%k&Wr#Q%ug2G@%&+EFbM)N|cW{$R zs`qno4-zOsC+KdvVn`dmNdF+34aNhgNn_;3UcTN= z2TE5ZVv0I9M@?gs9i|)_v&&pMrVAM=`*B)yFeh<&1)*1~KmYLg;qJqmd+;Zim+R74 z$k^o>tt>%#ESZ8TtUt5F)0zl%%`noS>?o?=FLy0Jq~mP@>IYx~;AkZb#$<;olT^fG z3(_GH5mbUCQV`8Z`!);Qdb&mVG29xW25G5&6At#U(p=k6JDU&+(BTt1T*^F$Yn=-% z0sE7qT%2fTDvM8&;p4hl^Q})4eTbwde3dJW%~$h0!|*9)@PG>m#-&37L<=T4Ar_HC zrgEnlBh;DG6nzUxflyK;00&?+d7ZQDplLYPnnb`TK2)$(fn)TOfCHTob$^7;1`qSs zr)W#5STT3Y(a)ERo1GxGVdze>xI|6z(alYFIBpemORobZFFX9*F&Zsck!GihrzXl6 z6Mfo3vWs4G_ss41Nbdp{bSAw#2V(7L4?7J+qnpv|DN3I#w^%!ti%ye`dq=BSS}0di z#J?-JmMa_KQ&a;D@gUU5GBw(+GcQW*e}N8LMu2U+zkpNK?m5PIKn=NDa-mF6gTw5B zZVjv;>CGq&A9CbN9aXAw@YR;2gQz0Bp1l`K{Iag^yvWu zQY$V<%F`I4JwoGJw>Ng|sl~)(=SxqchoKsGi#xh3z)q}(QKQs3W_IBcLNPV{>-p7n zKFk#A_AraD4DGYlo`M1Lz;xYbas(bY=$1Dc5aJov!I(KDl&p5S#%EboK+)w6YfQZh z$k*`;H5DjL1HL-lbVf(nZ@4|A*KeN;3w-j(xhcg=635)t%Gx-PuK^uEvbmkr<%t|% z98kyx(BX)_9Kr@5J9{)n&nd0#p-8JoX0=F!Gfk@DG)<)+rPm%3&Oz1ya}Dp% zk}5ml9&v~8u2i&%f9j5I+NB?OKl>AXMix+JWE^s^0H(x?hos zS&4eJ!m<4-+9E$`q(bs|RI~z1Qyz9w4JykNcp5BIAj0Bq zOh51a;SY%RWcnV`GgH4pCEXu?fAXroLWjbe=jE>yj6&wvk!BDO$Xle_`&NcQ$+T{# z7T(Ibfd&O$`ZgImPUK@yUApO%9q*6{cY};9c^I_f7$Df7g4waK!|su4exV}lwE`K+;f-j#US1*tqWq0-ond#a&g&x~y4@3K zmWOK!`2!51n4>1k_hw+oW9qT|eGfu3bz%e+BPi^aU7aKPN?is)BG{M>z5eK&vlu~i zBBu%0+AHE?orTu!pLsrH5?WKf?x+|VG$lD)-9$>WGmNCl9=5&mvc{9k8yM|#<+bDE zw;#X!`ThNq{_mbXdwTwC*dLx=oDYWmv!^J*c5>kfz}Aj$gMSbsbETS3G~(DnSF64X zhD~9La;x;XoBYQwcR5JX33P;L%P(OwEfrsMMOz#?gihB-t_8(@+qN-a?WQ2LK_-@( z6l&$9L$BT%YqzW(9*?!(*n_n&l%%B9wZ<{ZmRY;KN@T!8wz(8N}0DPc`o zFhdCxb^_Y4gwpv5iYUQSI_TIJ+#ghe)Ps>@fkCfdEum_!ci{bslZFx;s)@lr7=!?@ zyXJQkA}*jlgGsqStnt`VarLKOiQ(AnNsr2Af<1 z-&|g%M+nxwYNFmOkC3m}`D69KwtalHIDYjtSNnw#$grpoh z;I~TzpTJ!Vmx`f6I{7VtHWT-R?14Z*qH?-Gsx7dRT!8gsE)bwGLEAi(_OZzKtjz1s zrX!2hDQdpEEVdb z(cfy5d44#r^?cDea!!R}N|Z@i2^2aqL_26o8`jyix8RcU5lbRVGO0>B)`Ct2(oOjW zh2WnFUHRO|2F~o1Wd*#xr%qso6$H&e1SX^kEkhUu9^f8QGt8j<$)<|@A>Id&Zmco9 z8)5+ZZjPe;h(`*NeQc|e=>l!w9WQJ|!c$_1L0lTc9|YGI0?QUY%@c(Hh*pSFkcuom zg7}|KI^HcDbx30?VpYJp_Q5zbC5W-82_4Tp*TyaN9)K4xu%t*DM)EpiphWLuNFqV_ z?s?&>6GjR$F|DW<+qIi%{U}-6GNCfI22}6#qES8XDb`}M0BaqiY@|!HAc{Ss104{N zP)L*e#qP#>r0OhK2;+rQ_RG=jbHtb-!IVno$q8lJ-HjH=OBD}1(1Wsz76TIfRg7un zg_c3mAfPM)C(N|MVD^Hfe>73F%t+@{Zm*r4mC>+5oNj`#OUXtuyO{&M_-XicVt8MveX8FyYM)9h z2l`Vm|6w;*N(;--rRc2H3sjM2?Mo~4ow8Hw^T5q{d?N8HMSHYNXbs3wuH=ZA2x6_5 zIa11j#l=dIOeld2+GXB9lcFn-)|>Y+L#W$JfvQ-#Oiodej@prtl14bAdo`M)!b?&m z>@ZRtZl-HAD|d5)u8=LfRRt(}q;YP^c1XkoJ#vkiVy(Gkw3)5t0o^c5nL#>VF$ZZy z-&*5^Jy5H|C=1i*Wg)2ws)J<}(Khhty`uaf$%Cgjb%bq6Az$kg<85NnxpE2CRzMzr zrbJ0&2g^+Qa-<*TjwuQj!`7R0bJhqhJ;RDBx;CYr|789MjW#8s>cAzG9jUQ^wKpmz;SIz!+Hr0U<)vdx?+OlULxA^{f{3v_wVoDJfLV28o!*u zT*u*?EBepeXNh571@myS*wV)@A0D7`+v4~zBVE-$;u!*M4sXVaTd{e)Jln;ZB};A!AbIKAK8%-x*SbyrB; z@1HKhR(|zZ6}I%{L!{>>TLRSteh181wBhhinva!Y6eZGO@;yt=8yXSoqRt(KdK&aw z^pva}hEJ6*HzTVY4yV6+c6xGtc7A$xaoQi8o}aPY@!*u@j?>!@Ad-w+K9*J8s6|OA zgO+a$#kbJ8OPo-As|w#UFDuEiJp{3s@cW}JM?S2T_*=k+hg`F)@hU?-t6>-BwbgBL zqD?F{)*Xe~PIypWk#k=M%fi8DlCpK1t;NoSvlUF6Ia(uz1plvdXs-rU@1pmcpMLs{ zBejX;(5z>&8C~vXGiqnN7_na8(~m zSrbqw*pMay8LOlTc!4avoL@&zI|oR@n4l*2AB7T0oF0YhQl{NM0YV_EBL>%TGGA&P z516Am;YML#)Md*xAtmXNv=m(5ls=S5jjE+4F!cr}ieIXPyGn4f6g>VaeX6P;tzcw9 zLD~&IfS*oXn|@X9RB)`u&`M0{Bal)~R7}yHvgbe&8dI)GiC4}e{s~6*76@&}XCueI zcQ!m)panZxZ5B698URYTC&%~TmIY_RyOH1gA0`?EXRkb@|0W;lPV=Xe-}nCS-+y}d z{@$cO@<`$zodQkMe+@JA0+CQ#kI?@2@j}AGuf)6$O*ehdmU^fZGTt}FBv>9X71&``JqGXK%E`pB*P1K>x~$p|1GMd(?)`T znl~Vjt=mz=iD2CjNIG7?X`k(M5l3qX7KI4U$H==>1d3b=mifle$W0t(Ab=(^Jze-m zJ2jQ6s1tCENBYST3;7u{QEj2+c<^ZJ7DDyA=n6ufPIL?nbdW`DUf%un{>v}pyZ7(^ zjOH^&SFu$HJ*gq-G*EF)<>6>lFGeIPr4)U+7`eioG1+2QHnX9Zzso?UWOVE12!acj zCAgIYT!^e%nJR3HoAelAD#^YHSYb}^;Gtl=5lD&E(*E5&(szQFgO7v0EnPNQBuF}H*26rAcJZ{efO-##GS&zf2PKLK z@WoXEL&*@Kjm)CMcm%x=raMv0_4F)pYBzlePZCHkn~F&yer-SAtVn zF7S+76D?Ti)3Pt&@!)ah^T>KGQ-huBOYjZ$@v(vAXk>*JIvOeKpl}mZP^{;i-OAJH zKLn}yg_WHc#F{fhu?s^MTG6cJrQVJKG~(K{Jg7Ea6xnJBeh_+^pXCB~+dVbl-Nr)f zrYHr-^k5bT?ytVT*j=xA5?%~u1v&!npU+q&R4I4gDJ70&v%Z5s!GE9hED@9wl#Pc}VE%#D9sV0M zrvY~S=W+fiYG|Q2+Htx;R*1EjYkWmn#=YRM36y2VA{{IuV{O{Zm{duZ84*uJBgyFfmy4OIzC#Rp_w*pOGMieT`w3E3g_}pI4r2* zsPhxjUM+;ctk?YLM<|DNy;Z#d;(=G4(1cDUgr@+IFlyr^EVJylbhB;fxOeKY#tT!v)|C<1Z#*9 za?yXY>p~N8121Bt!+01jLIPqDU@TZCu|^kZ$Z?#!py-nCKYsYJmk3Gk-G_%H@ozzT z>T~T9KLJ__Q@rRsL=?jGcKq6CP8M2F>39#V3~%i_=2dGUT3F54Tt$Yxt#^%7p*r3g z&2OpK(v}Rz?iIqgo?T`u5@HjNl&}hoMqWSa$;j^O)q_?_C);hVVYiX>ixqDwyA2`w zLOag1c!}N6*y*+~XH(8Bdu3v@iMjF5=SC|UzL#ikF)}O?$3A7NPxqhS+%ajTg1X8L zHh>~w2*(SCQWRki1`D^XiuR=%?J`?XGO(Z#20-1iyG*^a4WPc=Ze#HR&5Vv3md}N; zl>NZ651i!;xVijTvIVK^q|CkQN}rU|5d7Vu^(DjfENzBl@%1)k2Pe^-o^^9>dD%m3 z5fT~Z+s$gZnKM|%eOrgX!hfFM&Go8fNO#AZK+RPeG*>mO5@4FnuSUZ+m_x0E(gj{D zoemga8CyeUhYy^tk=aG`LdpyT>G9Yqq(%q>gA>r1a?*{oyhT;g$=9lxohLYubgWFw zLZ=BoQY`qgMO2#6m0W&0yeXqQ%QnE+=>ZPD4Smbf7UPB`cT!?8oUlenUPut)s%F_> z`-gnwWbC&us1$DVU(l7IY|DJJHyd2wgTLB-(|%E$*06W*Ze(t;{66HhujSg2+V0F{ovFnqvnrPpN6$=ZfYpp8FQXrlL$DJuM$6nIpIQ{Xz zP)4bMSty0-be_+U_j-UGhUyVIG_YhQxxgt=%!NwKEF*SKOpeh?_P>bR==i{43Zo>d zb*OSHg)s=+(Nq<1t^sjTgQuKcg3Jx=Qp;$Bm%A$Mml$nYm@KWuz$CjGwJc198;=;^ zjyxd)k$v-$HR>x>dnm35S~6-N2-!&}MA4*+EwBiHy(>xxBCJ(r%lY^@bp>xIC@B%f zOpJ1QHXpxydgJc-F0@5bV|Xc2EAz1{{W&?@*;yC@aF-ZheT7cp$Prk_x^z6%^#@$hRrzU zZ=Gj_fHkxd(K)P!!rAdC=KBYl1<({JN@h4ybSNw*N3O#0jpcD5-kR{|KhP0ufQ&A% zw!w7aU7xMc0d?}O5-_bh9-d_CmIZfIp?DNP(0NbtK?T5|XeP=lOu(+dz|nO8nuGNs zAT<>P?Ty2@NHNhBwL;m_Pi|BpY+|zDz3#N4YQd+IUb$nE>&!Fe9Ha@=>FS_3@X03; z(d72-Ir=#qt_u{qzeLposxRfzPJKuW%q9f4DvBypaNUr1;TJRZ3UvVEmC&Y%O-fI} zM`~5f??N*iDlq|1`-2O^g5;=o|69J)Eh#-Dce3eHu>nzn*yr9bQXf%gQ!oVMtT?o| zm``ikZQd%pT$6T#)^Pt11uwOMk$eVKbpWE%MOcAYOv2jz@Wb9CCQob$Bss3PLpzTy zM-E#@;VXy0zQ#XX=MY}F*r0IVk zW!WkdH9}5_3zl{GVfCP{g;V`+<2F`xXgoytOnrjLiULq?$PJ}UraSbY1;f(C29q;} zSiXP-26UBW#jY1quwalE&l6dEe0#rVO)HpjJV!(_Acrz%T%h7#T*t&QIqvU>p@HFC zYlE90S7pJwUM+8L+~{E0UCih+8rofFH^cN)*?mf;bYm@>P=8U&P&~xcJD`T$fxmdg z-Z-LTF0TSCVo>S&m#RI!4A&gEIJYfwwBbC#ki3tNdAO@L|*Dr+ao9~zNujN%Zz zoQ|IN8ttC`et-8@$RN@NgE`x~&#)DOGaX2C5V?ag$AlM8XLV%+ZEe%HHu|L(^R_ivBkTz16{j8{QJrM=0Uprb4^YQd8&$+njB0Uffi~paN)#wLY{OARq`fKa5$Clq40!=VFPe z84z1d8j3)@R4(p3w1QlGwZ>S%g{H;z0D{>^%guO>#0+pPNuNUda!)Y}VHwoh?3DG@@%F(ju&s+>F%q2( zEv;cx!axORHe#9rf?E7$0}fpbZa$zeNgzU7=8QmMW3!t}9Cg%`-zCA#>>-gE&}fv1 zTQ^iYl1VvG-;11z?CY}NOHJvr7K?>IQK)d#!xyz+De#MLvmZZ4Ez(}p_BE2<2~l0@ zz5=93wO8Ya&5Nh?OdPHjd8*@V6SPxA%jw_lKRlSFV88q2EsL0In8@ee=-mo-9Ph&7 z5@^3JGtq}$B(;T=%9E~4Vto4oeT0$rxXkjmSoFY(u4}% z+;Bpi4xz3?ndZ2xfn+^8RX0;C-Lr!W1SD<%qfSwjFe(*Y+zaDkjmWlmy>s*-C8Nj- z6ADsPtkhJYnDVspBvX4w5M5VF=4mEt8(W zW>!}@_0I}Nuw2;zqEkbTRIF))#6okR>xl5n<$rvHY)2Jl+O&N2c_wgTc-oO zN1!d0v5b>fqh~$67h;CVmsU6Q-H)ENg4$t;X>+6fm4#YTeY&r>EHKGBF7qm!*OaoQ8JtTmxpstQj%CJ%CBGfgJoK_N+JodoI3 z*c#5%VE;!nKb_4i51S0q1e@`5@qTm()otA_x4yOm62}-aB=>!`6I{+G^Q;?N$0~{e zDq6LH2_hnI1<=>Jn+A@kDt{~X0rrxrs7p(s9x5(!8Bu#_^y&#J%QA_PYK-|F7!v-&Zi;%q4Ro!TdyUwN5iV>$aj2ZOW;}{Am0r5x z`N5gh(t~QJ$ov^gSzK)|6R&qA%R-GZP#CoblSP`zi}_~G61y~q0@33}v{*+cJc)Ze zk11R1*yLJ;E~Y=d-hP}$66_U59-ozJ=07$I2!ZFr%0MinkOoV_xW8zfs{rzKAbsVJ zEH;+{@@|7;P!GGy(v*1y$}MoXVg#*JfCTV62m5Owt$u6q;$ojIa0x&z!FU1NT;CZ~ z7h?5B^`(tt;@yjuno{o6&NSKs%~yexExa`vV({LIT@7EDcUxW48h8-zlz~ykt+qz$7sx`Gv1rX$QJE|?6 zr=9jsas#ih3eK@P1+9POQCBi4Y2fI^cm-8L9#gytI!y8 zRKj?FA0^vWCE0>|&FV_cwL9bT5+4LCw57VegbaK&-Jsd1n(2Obd#P)RF+TL5Yc6$xjbtfpqQ(Yxfx56rhA#a94}snd|^3$MKW#jdMZj1s*@nu zFO8;ZZU2=jZf)K1@*;7C2JOG}zMf>ctn8EvTlu#TTf~nI=-bT`FB)Y+bxMEIm0Z>A z`@*a5|FB|D5rox57)0W1du1I8>fe<}*8$d(vpBZdb&F{j53gu00WX(Omt(CYh-#ie zTzruzqqn7^vfj9MYaXl}!f5ALxAd8T#lo3QCVPDM_U$Lh$ZtNPyJGM2!>2EA9(vn2 zr}sae92@j+AK$&@m41X~EPq2sNb9@!?&0>!&wutV1FgP``~4maW&i&E?(+j4{IGv} z|Ce`g$>l1vg&r3f6twu8E6|BNTc92ykeDEyNcHb~4?q9%>HbHwi>zb&Y~F$2JXU>< zyUOLYk|e$QQY4Pmlvt05-*QOdJTL?Dg7Kw8!>)L`H!O~_ifT<<1 z)6?Qzw<7({w8#`~hDAgUn6MK_Fv2YL%jt}cQn6Poks~Iey2F^l5@c>hXpY(V8HYVz zRO$99PCkZ|gp7mz^a}AF?Sum`L5N3HEe?N)D&c@H$Rp$_XfNKrefM#&Kux2EkDug> z0FcdiEJLjV8zC^gON_wHksvz|Yzpe8PsZvuK}RE+I?cC?oV3hba#1Jpx5)GqF2aEL zDlvnlHk@?O0FY}u_?AV}Sts1q-lIU8xjrI(85SrM(TT|n1u;rmB4Dh09FK0ofQ&)@EWhXFe$K|Ck$D!vk(BFyqKR7d=-R7 z^BO&4<13h!NZemG(_Zu8`LC2dWYvHJw_~B5!ZxIX- zFl$yikISZ=u7C0+(ZGsJ`x~d6De-BL)pB}F`k;feGpV=8(S=4MiW!|$T-Kw+-2~}; z(E`p|Vr$e@_P?A*AqaZ?SoRy&N)52m{+CDu(y0CZ?{9v(`vhi=T5X2Bp2kn?IAeS? zQiC07TE- zPf`If5N})Vm{@G7qg#XcJxHF4HFs5`EI4Y>nR90bN4eHikuCt*XoQIcsXv6kF`)xWM zRS`=SZCHVxgYB7q>Tw|fphqS_h+=0=!Xrdep zE_4SdwL9+sUAV2c1H|a~|3KLkd!PC}hL1e${E^2Ytl6!>F#-eqC1h(8vYR~__;)HN z8_9-c|6cxe_sbfBtII18Nvd&~W=Nm7j6ffuYF6HfInfL~ANOZ^rkS33DQxF9;Lzj( zszV%+=I(V(u^qQPggEfRd?3DSl;3d39&zV&K+Uu&YK+j%Dljf_0~Sh!XOXEUvOZhZ zET|6^8irNI{xdvSC1o0^)6@Bjm7ycusotQ3B5>PW{&)rX@-{c%$fdwq6ZG|Et3cV4fn1xaYvEj(V{J0b zimplCHv{COEm6eqp0q#I^ziom(-f^qU$rqKlMU!kVLp6yg&9C3C=g>RC&)E^`1J10 z14a)ksZyd4=1^G+@ndN_*u_pb?)drLzu)g4dZM^g8b|A!rAeKvK$zkj7xOvvnbGYA zN&Wi~TA>3|nWm}UKVSiT3Zu$F14;)!?XzOd%UGilka#}i?Nk_u>q^X^$5kCnl3%1x zQ@VJuC_Qv^>?X|njD^vsA$^^N1zy0Hd%K-)HY4{iHixyrFo{AIF@-2r*a_>^JwfMA zT#J@Y96FcXzA1~-e=_UL?Aep%fw4?=8q>Kfz zvylA=kakT3nVr~wd}UL%dIi(x;PeptQnE6F->w-Cp=47UWaYX>X*2yRks$vKcFdpJ zFF>&u$sOB01LYG@iUF+5rWz+y>O5PW!^@*h1nSEP9+_~{(N(2HYOzf(S>2Gm=LSvabqUJZgGC6Eus5);jDpTwqt zT8BI(1pfoJTu#WsO71Xkmd8?MZu$p7qtHYKk?AoOqyp$=xM-LPsRe-+^}AOfO*S%F z$UZY2=eIl5Q4XZP4BAP--O>GVcG}a)NLNB$r~Xz7o#g+Vq@r_F^R)|Z;YJai`cgB5 zqdzA|W-AO;Sy5%k$FpciT+bn7|nw?m8Ju{r-%Q_AQ zN|fU3oyC9_<@B>=S7xuyWAQ`wrt4F@+uCGk{-G=Fqrn+>Aqh7cWf~y8u^Tao5WEfl zh2dgVd|;?%leU=qgAibtoPv-|AyUh*fsVcC>d9;4dKyK0;1AjXuw^G|GKj_Fd`|fg ztzJ;%s>qryBh<4_)0Cn#74Wrv1&tqvi2rbL_`Fm~#-Z0he zH5?-8Po!snDK`c{otr;VMI=|K>R)$FzF8uv-j<+YYU}9q*qULl4ffy%7u{_|mis4l zQ4x!$z5Dbt6Hal&VtU_XvpQ;&J>dTECp=t*nYc&-%gMtNLUIN#7=g=B-p+B=)y}b> zs;u(2rEZv8?KxN#6f^Py6#+8d2N4SXp%ZKAjmt$VDw~)dfLfgvcJ(U_s{^c`X;(}6 zYF}TIO^vl+8JVwPv`ihEdqpbF@$N26WF-Wu;dsbUlgMS#3C%!z1uqtbFyQ57>sw7Y z<&qh+d~5?taIPcm>N-$7`qC{W)$eZITIG#EO(^h>a|xj_hi=@sV%b!LQ1v# zMP)4$(e;ZQ5RZz4AgqXpZweFQt^wM$LBJa@?hbQf-X6|KuVE%#9yImc8KFQ}@MXnF zc9_4({oIy83~%|?aAQ+*41&2-)o!*hYTt}rqfkouQ)DC?-D;7^jy?QnklhUjU7viE zk_^4Q1J?+vx4(S78f`X(t(?&BE1dwH5)qUM3kQ}Da1JMq3py6k@K~UOCD9~yP?O%` zjCP;x2E;$TSa=7WTN2vOzlQny;2lq)vUFE8X#*4X@m^Wfz#%E3hK1V{HIO~42PXXH%xt|GRvMnQ ztJu&uof0_SGpqNPuRwZtj?m=iwv%Bih@xXcStHp82AxZkK$^@wv@|7@Y+Cf{OPwoG z%F*P-3?er>Yo!=w1es0KNh@0gyY=)|h7kRZ_B`p0w13@B(A7BLeU~`Zk(m*MEzio3 zieeGgpl%JcX#n+=#Wp)akI26vuWtFb`%jZk@BVf#^9)43Y`4vj%mpc>4%$7WlZh4} zJp`L&9tJDd9{z6F6b5#_X|yTI7M)kEEpCDJAd;c&D@d&P4{AE4?@tPS6Rh8q9pX>e z(6uIQZMc5sgc4iW8S`veN)`;AqMi+fOfT{HcbTogbQy{P0JJAMwGaz6*;%M!4?xN1 zhbB1LBFa-d$MizyCv+=izY@<2V}s)9;P#?_X{mP{*eY7xnWmYzDygYzJ3K-)aIh*U zezVE>NW;{#nXiCb!Aj@vn`|}J3$sr^cwt`Juk^|gJybyNC5aapKNRcvXG+xCvjFJUN{!eCPd08f%VNgQgU+Qy3B4NYqaM!M|zj@jiETqi(W z#a`TlU;IL^Y3DZlYmCVKWsBvHBBk{^0=nVZIM$z6#W^k}vNouGv> zDPXD`aX_M@HzLS-$--Q9yiS(oYEW-Z0x|~?Mggpp8&30>?*%?Ny>B}rtU$!j)+h_Q zN*)!&#Zx94Un44{G=iukcAeC|PeddzA4=my_*QA^!Gg`jZ8a35y7S$+nW*e&K@TKLVzzVy4FqJk#&kv6h0upG=|C8mfDy#4qERqnAmA_R1nrS?RK9_kp=3rO`@j>n2e z3HZUs7npE^i$yJGw)Rk8>f0q)h$5Nd1QD`M2=9Q?q$cvPzVy;Ho5`%SljT|qx6o_Q$fhegk1?1t)U z^^%Ui@1G113>L%{WDr)4W>6EaLxW!{W1@(3y}}wA5K-k2v={YJ66pZa%G+VZdtqYX zTC(VJrNd9IccSusgKJA3w~a%~G^aVD)ih(J0nrP4+ppW9su^Z7gu_I=uX&$wLc$(N84E6+*g;|M2 zNceM<)IC2rJ9|d58a@`UQSGfZQlBpCn;EW&QwV-w-D!LP=zzt&;9-rn!{KPOff8oK zm-&_;8!)(uE1%0kVH`USm)D%n+`6bYdx{TR!+60Xc_=i#6Rxggv-xbfdANJ{@_9e} z;mh5phx<>TXJ6jGS1VQll{gC^Y3p>2RG^z|ltrcoL`s?q#?z3u(#T;kVS?*lb;E_p z`>Ffjvcxb{an_(HP;<~OKbLTqj2JS(LD=)_PB#ZKo@_6p($F+va|hkuG@?ytHSV8w zl=8AMy@(Dl>)ojM6We6U;BF@vX}1mItd-gr>{qjFO*zv^Cn{U1FsjggJcNtTF4YGVz+UQyQOw*mzl8uYga{QQ+k z{GwX0rQX0($A8pJsCUdF0(wtNR_MEC@2vu}X_-?}E*&gN(IiDtST70OU*F%o{YPrT z8kI1ajEMc3F}ZuV%d_IN?|P|Tbq`hH-+uggIQa9s2coQaS|tGW%G$Jn_(gPqksxoE zCW7Gm$HS$C41xmcLc41MlR}x=fu+9xU~Z2kBy@p`;Ipk`|FAbE^k7`*Zy&^s5($N` zkA<-(b1QFiU_47cp-Xmu>oxVW7=(txTkomSPeCe2X6V3cOr|vHPmpoD^*$^7W!l<8HJyDlcDD%^cSC64a{YS0MF^k% zih9(ss5qGpm@57sN-vKQ)C|UYF*xBwPDkn=APZqw%pVA!)945LE&gwPwUpH;La;sT z&LChBDG()bi`IutdtnwiGF-cEGHpm}-cOc0)QnI|Z8~asz$jD^S=ZxSLMchT$rOFM zsx>oQ3u!(4;a6NCd_ove4`B=NvTAmpMEKHSv>vW){mJ3w^u5kbHHwj@1pLm`w#OfT z{^jn|eb08I zX7oh{6bQO%4gzUc!b3D~Rb7%~)_y99u0@rw;t}GiDNZLg0bz>dh<38m5I8#txp0e# zyh=d9;`WXeib}5x3@#`dz!-$f;bb03 zL?4ea&JLtp2*U9+R6(aPo(N^%cSx2!Fay7pG(bz2(`UR5`qOGP9M%2(BwV*AN!>s& zIq2Q!W?}hfEHS4vLCR|d=E%80Gv82ar*Lv+-8sJSJf|c)5f?cLXk)0b_Yqtj(4tx_ zb^jSOoMSsO@N**`0Veizd5!pl{t3H^q!INh*@OWIHE4bs2PRM>;d@E($+UvNM=0A) zElQ_@P~ch*GFTQCV2djVbl@R!r?Znn1Zi&GE0R3j58iFlf1U;fr~x^msWFvAZ^VBp z0}N~4SsT4dSJhc{O_!`HDDxFaFG^fb?n7jFL?cE6r0FE4Koy7$9=ZsVf%tu@iV6{U zk1twM|S154cmrP6F37COwD z_sKcgQ2He5-3SP%2|xqri%V)nUye}Ki|xVe=G#q($D1`K7%PRKM^7 zFhS4M0@Koj(%9|rX=ITU?HR_sUOYqmqWoaUmG)%(Av(l|#X-%6mZS%I=syakFdqP# z2w0T<&T)46Dh1l57?YH2kb~!1Ga*V$5ORXb{5iuw$${Y!>86Vv0#?L$zB+YnffX}U z$h`jgjXeybo}FmUSsf`54m0UZ0~$=Vj0f3V-H6FqES!(zonU1u$X!_X7QSKsBUGE8 zb>6S4y5|@F6$Sa+&M!STAm1A>wZhRAFxQu$g5wCo33@t8h#(c<1x_?^<&3H|wPSZR zHtQp_;P~D6=1(Ta(3!s9|M|g5=FbLaDg>y0HKwwEa*8|&B1;| z!gXMZmQxCj2b)LlU>w&(SqRMGxu?SS_0so`?&vk+fHNVuvsU5-wpvlP1P%N+YP=>%-+>F^7`EInNdT z#x840$hx3)U|Mp=q2l}%3$d)uW(R9HWCUb^rNx0IlI$E zrekeRg(J#yA_HfZFkqZ2&ES zb(S~_nioXVXJ5=dr~`tffx*Ebr{?o_8`~}npN_d3b4(iM4?W$K_>ZaTp zq96MP)M8MC=w=cROvr&?aE%ZG>a_f*EbZYm+owj)r+0(xGdI_m49h_;7V95OxU&S3 zXfxl8w&DilitEJ-S4`w==N4|67xZ#s9^iDLui>J)5v*9ll%x8^<`#^lS_7k#(AEAfyBqZ7LBiNb`zyF^iPJ6AT_TQVy}N}x>wjg5He4t1GblC* zYT9HLZqqPQw;uVCvm8(*C!APb;^O20ai_i7p{JG(}ytxV^Le=1J_NSNmGrvCh=_S6-P76cnAP~rXk<=k;l|h^YG{YjumC};Egy|8SHW#_lFxrn8m2BD3yz&<+nGwLqu56Y# z!MGnaE*ME&$f33vN*KUy8|&&hbMpQ6AncUr~uT`&5nHCJs^}r$4or38- z1?vn?o~E=u@^8?y?H(DpG;`p8Fu2)Em%BLcv=u8yhrU}hsMI4I1qm;Wl;$#+ za+=NgZvJ>b;!J`xGie0+ch^E9A})&KKjq*erXXn`aIG{2?+T=wa=G@Yr;u`rxB%`b zX#fpVuvgkvw^rLCWvOMcLf3c+D*Q__8fUA8gM_qvC0dl}E+kso^NL4LGOjg1$$h|b z;~<2J(5EJPBqP=bsS~Em@6?YEbbDZCHm808%Udw{7vWq)APfJyM90N|Q3b2acp0ZT zZsCs44oHzrkR5O+EMxqC=TqJovz?#Oi?6v&jzS+h6@t!8sr| zAQj&brg)x;5uq7TXOJSdxq_Kkm_kxIlZ+M6 z*kC*jJQ9uSAw@#(n4`zsD|#XruW!Y~0I~U1c@rUlDM9@tg-9jpt1@m&Gkj`hpP(x~ z)mDoN%^|Czrk&B|6XYplo0vQ9XX(1iLi(*s(u@Y=St5$jVW;3WElm|Pvsib={u;VT z>?ZX9BN{#?-gd&1*s-<-8@6HkAb9II2BN1yM_?WVC<2DEcA+(ZNu&4M636YW8~p5f z%`>fc>FXd&rvqe8`5*U!2+K}|b~^lQbiwV13f^td39LVs-NnyVls$K+5Sq?ey7g*2 zMoJtC${~mWDWMW+e8?1hhon#ivk1Y-Xm-qKcdBegd4`@M?GTniir52blw>+W`LHR>AQ^y=28#rjCwg=MR1O?K!OPE6@yA$(I z_4`-vKJ@gmT#`YBmOw#Id6sHu+|0MH$aO=;U)U%L&?6mX_9q2k_(YBb#lN9*x*?_2~iS0aTz_gWP(qAM|x%oWI| zseN??rsSwR3_IHVo&1p0#JuTdXb;6< zvLA26f?e~J2REcK3)}`tUd=QEUlXG7YnpiRukCj#MB`Hg)-r zfgZJmO45gp8Od^7k&sH{vQ~pd&eFB8xGCQ=PCt(AF<`+WXp8lFwYf$dg|CWV>NaqA zpt2F1wvLg=Wcyy~12$j)s0v{ym@yh~Au`FGmZr z6^I2*mnd9JBdysi3buisQvTw;HbEXkP+S`bK7~?%sCS9sjN9Nz_0%D_)}s@#hWN{D zMli!dih~4#==<+aUiDW`ub-!XjUh^M0q(d4!-wGAC|%I6&oJ>;AZf=0J+KlEi3DuK z0!Zn_=TWpnNZdU3DRphq8O^r|)Vq5Y((q;Aq7_ zEz;OeD6MD`;gha=mXO{*qXE>r6BFzpm|l;xT<(u0g{2!tpGtFWbkll5zA=Q+ej^f1 z&!Wi6Ftki&kdQU(RaZhMzMR<`_DMuTw*r_SAe818Eo(ZMTYKsrW_dU=6JYx^_9-P} zPmCe8R5M!6QKU_X{xMF<1Z*2f1_vQKBxVEwj$gx;NJfS7aR{b{loAH)u@$R|YOP+N zf(i?{(F>*=saFoydS)pGC8Cv6Wa&`(X|xg0*L#Gf=engUVWn;H*(3I$3f5ZgW^8?P zwOw%NIOyP~C6nt!`Hq2WAW6{~E*g;}6Dl#cglJP^9Nkp zb+ri;n+SJm)PU%#1_NwqJDR*WG2W?N_~Czk>x1F0ee}T!RsPR^?!jd}8ecK|C%>Ym zy%#<0s#9XrybMus#fM z^nEum&nl#m14NDyDTNGgMkGPROMz4)cVJeINJbH(AxzsxdyS@PG#>lx-;L|wL;#|uRTV6Zy`@7n zK}QN!QZ+X4h8V3B#&FECVG0Fr;1+d_TLo`$>D0$6$x_IKOjxCEkd;6VWK{I{W{t|r zSN|Vv@7ml(a%GG1r{MZTIH+T{4*^o7bZ5pBARZ(vf`kB&RL>WL++w>Gqn7$el*hg^ z$G`oqwf4@;ommBTd*+NI++yX&rHo_`N43ATV$wWV1q@`+ln%ehr*Z=4E^4jyhDRolZ#v}5lRcEb1xaPL z=>5rL*bQ|KAU(XZvb|UsSJqLH`0gn);8x|{c^dOOnU)2gas-bztg4mBWM)}9CE}{DAvglqV%m|HuurV$?4I_OZ1mQX^`Q=H^Wo4m6Bu$zcd2#SCw>K0TM;L>Ja$O zGG=!`B&`vFB*U1ZTvDEryK!$iR4RM3`uzUW=l73)z4-j;>rd}L{%KGu;==SOfk$sQfo+G64DsXi07}jel%PHX#7xCY{nANiE}0I9^L~FPGjt= z4g+*freH*AH;xzDp(sDtOxiHN*;iZ6&E;awfc)EYbU~ohj*mIZ!4ty$I71Jn`2c54 z$>!U?{`4??_#Pc22fC(U-*ZrUJw$PbT?x~N<8``b5Wb|SyVbmarI=b3j9Qb@H#`l9 zXe3s}kRc-(igl2^nk)<@-vSHc595& !hYJupICf~6H``vKzN0JFXVg@{w*8U&&l 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 PZ#Ok=VyNGNuB-nKI(w0N literal 0 HcmV?d00001 diff --git a/Software/reflow_oven/Debug/Core/Src/gpio.su b/Software/reflow_oven/Debug/Core/Src/gpio.su new file mode 100644 index 0000000..b987a4f --- /dev/null +++ b/Software/reflow_oven/Debug/Core/Src/gpio.su @@ -0,0 +1 @@ +../Core/Src/gpio.c:44:6:MX_GPIO_Init 48 static diff --git a/Software/reflow_oven/Debug/Core/Src/main.cyclo b/Software/reflow_oven/Debug/Core/Src/main.cyclo new file mode 100644 index 0000000..c1595f1 --- /dev/null +++ b/Software/reflow_oven/Debug/Core/Src/main.cyclo @@ -0,0 +1,3 @@ +../Core/Src/main.c:65:5:main 1 +../Core/Src/main.c:109:6:SystemClock_Config 4 +../Core/Src/main.c:155:6:Error_Handler 1 diff --git a/Software/reflow_oven/Debug/Core/Src/main.d b/Software/reflow_oven/Debug/Core/Src/main.d new file mode 100644 index 0000000..edfa478 --- /dev/null +++ b/Software/reflow_oven/Debug/Core/Src/main.d @@ -0,0 +1,62 @@ +Core/Src/main.o: ../Core/Src/main.c ../Core/Inc/main.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h \ + ../Core/Inc/stm32f0xx_hal_conf.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f031x6.h \ + ../Drivers/CMSIS/Include/core_cm0.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/system_stm32f0xx.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_exti.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_cortex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h \ + ../Core/Inc/usart.h ../Core/Inc/main.h ../Core/Inc/gpio.h \ + ../Core/Src/../reflow_oven_src/reflow_main.h +../Core/Inc/main.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h: +../Core/Inc/stm32f0xx_hal_conf.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h: +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f031x6.h: +../Drivers/CMSIS/Include/core_cm0.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/system_stm32f0xx.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_exti.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_cortex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h: +../Core/Inc/usart.h: +../Core/Inc/main.h: +../Core/Inc/gpio.h: +../Core/Src/../reflow_oven_src/reflow_main.h: diff --git a/Software/reflow_oven/Debug/Core/Src/main.o b/Software/reflow_oven/Debug/Core/Src/main.o new file mode 100644 index 0000000000000000000000000000000000000000..9c320a132d926cd4ab92c74ff73503bb3376c33b GIT binary patch literal 506348 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%0D^v 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

    8>d5v068C-8OWCY_P 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 z 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в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 J92AV>{sSy{@X!DN literal 0 HcmV?d00001 diff --git a/Software/reflow_oven/Debug/Core/Src/stm32f0xx_hal_msp.su b/Software/reflow_oven/Debug/Core/Src/stm32f0xx_hal_msp.su new file mode 100644 index 0000000..6d711b0 --- /dev/null +++ b/Software/reflow_oven/Debug/Core/Src/stm32f0xx_hal_msp.su @@ -0,0 +1 @@ +../Core/Src/stm32f0xx_hal_msp.c:64:6:HAL_MspInit 16 static diff --git a/Software/reflow_oven/Debug/Core/Src/stm32f0xx_it.cyclo b/Software/reflow_oven/Debug/Core/Src/stm32f0xx_it.cyclo new file mode 100644 index 0000000..617e0d2 --- /dev/null +++ b/Software/reflow_oven/Debug/Core/Src/stm32f0xx_it.cyclo @@ -0,0 +1,5 @@ +../Core/Src/stm32f0xx_it.c:69:6:NMI_Handler 1 +../Core/Src/stm32f0xx_it.c:84:6:HardFault_Handler 1 +../Core/Src/stm32f0xx_it.c:99:6:SVC_Handler 1 +../Core/Src/stm32f0xx_it.c:112:6:PendSV_Handler 1 +../Core/Src/stm32f0xx_it.c:125:6:SysTick_Handler 1 diff --git a/Software/reflow_oven/Debug/Core/Src/stm32f0xx_it.d b/Software/reflow_oven/Debug/Core/Src/stm32f0xx_it.d new file mode 100644 index 0000000..cdaeb76 --- /dev/null +++ b/Software/reflow_oven/Debug/Core/Src/stm32f0xx_it.d @@ -0,0 +1,58 @@ +Core/Src/stm32f0xx_it.o: ../Core/Src/stm32f0xx_it.c ../Core/Inc/main.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h \ + ../Core/Inc/stm32f0xx_hal_conf.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f031x6.h \ + ../Drivers/CMSIS/Include/core_cm0.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/system_stm32f0xx.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_exti.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_cortex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h \ + ../Core/Inc/stm32f0xx_it.h +../Core/Inc/main.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h: +../Core/Inc/stm32f0xx_hal_conf.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h: +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f031x6.h: +../Drivers/CMSIS/Include/core_cm0.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/system_stm32f0xx.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_exti.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_cortex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h: +../Core/Inc/stm32f0xx_it.h: diff --git a/Software/reflow_oven/Debug/Core/Src/stm32f0xx_it.o b/Software/reflow_oven/Debug/Core/Src/stm32f0xx_it.o new file mode 100644 index 0000000000000000000000000000000000000000..4cd379ce4e9a8c903eb0fef2efd96411f952e687 GIT binary patch literal 504004 zcmY)W2Yk=x_dbs2HJ-1%_XxGCt*xb~QB|u|)ZSXOsx?}wMXMPSi4|fb5ebsmBqBs2 zwje|Vv55>jL_~-TNq*NAdH=tkzehc<`X=b`Ri}b?u(Ouj<;pfM3_O zdjtE_wfh45)wTNrzo~0~3mj0_{th^>u004ixUT&@a7bNyC~#O^dpK}JU3(;OR9$;C za7j>rl*Q$A2UGrYbgoofEk^(#=6L3H4Sr>~v z>Q{<9G*tbcKO&LrewoxmBvP#XUF0DW3--B?#Pa`S^cUu+3G#lIVN(d-FM_0ycdnLr zNTtFrGv?4Xx*eV}g*4np;vsxeDe(|D5L;!V=>D&a9qI5_v_X9Fwb+9f)I;@Nwr5Ie zZ`l9jP8N{|9}EvVf&cXYQSC!mCwqvRc&OFg)DnafxAN%jl;}D)6m?N|YAE~AX%v}c zJsk6$I9a2psm=_RTQ|&Z6dCOE>>eJ{I#&fQN}a2^i_l5^q4Nv4$o_vSHC69p{R2bo zdn4wMJZdjwZL9W_(E1U`x?%Kpz$Roi}l)PYvpQLRqmA(B`n zf_=?DA`eM@v0$73LhK=_Cw*@`Arb`3v%NS~w@k3rv<0W0{JqH=_lDg_rYeO7?G8vh zB#l%OrCLx;|6A%I(P#u&6Mr-mTERB$GOV7uTKfCIbw`O-|6VE48UC+T&^Em)@{mfp z8~=}1GTS7$>OVw}ZOrf0|BLdAMX2A~6OYONWmk#BQmLfA^}SB=f$jeo-xDP_H1@hc zlG7qbZBw#T?EIhZoXGXQDajDI-&^-eJm0J843|aq>RN@O`tK>h;t$@dq>^G$gZH{i z(uVJK?~f8caijN!1&!Zpq>|0zCht{m)lKVk!XfdEL(>1hvyw_|%>mU$sawM?WSh7%Sy;k)(ALyI>{U=WxM`X zT6Kv$R$pec4;0i_l+xGy8QVW%o`J7{Uejh#qxgu?R7=VEY6dmwYuP^Dn#}0EWTssp zM^wi4;-`$fC4g~JPo?cDnGl9|mK3qHgVQe?` zWBb-`^m<%-7RMxPulbn#(E)5ruk!e0KQ-@K(5rzTk8kEupAf|eN%g5YfmK5A*ceC6 z&f2q!sMRPslbO7Y`XbD}f=BzQY!_bQG5<9+OC3CReo1Bt=0?GzW*m?0GkF})i2B80 zlfFW;>$x`lN5B=H?AXyA)3So*=f1k5d0v z?LFFoiAV4lA5Q(6H`G6Q!1l?5Y?n#co{B60_q}$sW#!~w8Az)V^S9v9cXsU=Rq@zq zJ4aPhLu>EzwA$yf9oUT4#PJ+|ASM~yola~ou6;@^v9t~wM7^~3c_?hp_KWGY$1iDZ zH=U6WE?~5o_o)v_qW&LDlY+-jk<|b8EA@STVdQbOS3cNH>xd^j-tNfbsByF!-_W`H6c8+x_B#bX~Ya;`q(aeeLkTlN{F^+CpnvyP*F;VHJq zV*bW^G>YwgEg0vyiIKHV9{&ra=8*?ExBYosq~|fo#a2a3FwHfsKw05qL^k>XrA28aC$>jH~ptT2b9L%?;88fx^ z`OK<)XQ!>A{$lNHv+W!5MR$2@UVD{7+A!KN1HJy+$~c+dvB#opwh!0N9x1)aS8K=| z^MY+{6s;|hBjYXZOU<0_w8qxX)z-0$aH|vb|86IzZz+$SwX=Fn?VR~^FgerTGS0+T zw0=v$e72RVsaJnb&gj}Xt@Bh`V`6GK zwa;g%gPfFsJYKAAPus}$v46=~QOzDl4q;!9C-P{0PR;L+X+1QFnnt(TmwyB54YhCX zKVH;)u#gze;|NBWUVBZv z%~G1w@^9C!#p%&fB*S0KlHlllkH@i5JdR$2&U6>VvAt3`*ls+?)DQr#S}q6pktwZ->mo)QIhj5RSH8ZNInLvHj;hp6SV5 z^es6=uRE(4|K!qI<{9dD*FI_WBWU%!!(+4AJiBl_T{4di$ZcdEYn!q?yN2UYV@{KK z6xF9D=ySGbe$IA_vpoKYwFYO=nqGxA_TFPE$JXp5W3H`zZZ*w#rd@v~C+;1+USS51 zd90~zKfy?39*qvyo-dwcnaA9bYoPww~dy=Iy9Q|-8d)Tu_@d5R{Yk9YxAFL_yjMU>xH(zXb5hUuw2x0Fg!v;2JHTX zP|>x!^uR-i5xF^) zZV`Pj3b0j_hYKfc6a8=+J!}_EDgb4N$nzo`c8Y>$z_v?N{1D3BqGUdxdqn3eV2c%b zaM6zwB_yJUy`rzrL5ddz^atz{=|99K3D-<$D*g z@?y^{hf^)PaeXO5xBhNBv~7OjgxNN08rbcAGIQkkPx|d$*km=MaFj1mfT7SVKwBAI zUdL$IraiRH$NY@j>nk$-fQ}c5`eI`$3lMn*fEp-T)CAHJQ8C^GVX0`~GCUNKqOZho z+bC*?&AISa^hHZ_RwWvYeYoH!p2h5BiFnjaz*=#0WagBBoCzlMFaD5(fih^WI? zfGE)eF35XCH_xEoM9~8z_p&5W?bwq=wSzw-svUibsCM{=MYZEUBI2NBCq=dAaZ1D! zd4CBU#RzLn9EYgR?Qbze_Xm6#8*bNPC`~srVf`@a2k2XVTZMMpNKUEkzaD~iryqFv zx^50ZySslf+P#Wf!Kkaq`+Q!`mqWw|%R6{~qTjy-M2XHaqmCB! z;S?4lijhDWD~e(PB~EmpKDyc~TGkxOB+<4KK(c7ZRM-xQ4xNNUsz`JSl+&VP3t&4V zk}1){RnfR+pj;Dm`V*AvqF)YRERRHIxePrPnVADU5&iBDTd7Fk3A`2cd{Mvc-$~fpSkAKMj<8abF{(N8)Y% zusstmYzwJWJTwRA=OuA-^X4a++8t4rNy2|a56dNsxSt7?%=d;eOtSU{9AYFbIiqZm zw7Lu_UXt4Y(msii56KBhF{W_gq(uE^-AvxV!wf~^q?0%{dB>Nq>5G~=ThANA;q%qr zD#YoPF$~@J>HGr0^DTTNTyY(viS-q&&#%aiXmK)ZS4WLC0pMX$_w)B06>ZS&kc3Y@_!Au zT11J~xWI}LwT(oCEut}dFxKrN?*Xvw5b3fZ?G!B-iY~8-5=H~Ai?*uZa8s1?D@Jxp z)Vdv{J0jOfNOwgqnY7 SMe%BWlnXwwIzo+@BYVa+X305U*zo2|B*7-qMC>}ip$|CW{ z%-~;&2XR^|5f4BuS$Hju9*roa;$y=AZ^c`XiU{T6=G-k*i2L#BeJAd62<}zlk=-HH zi2Wae=_Ogrm)l3Op0A~^qz5NaKgl%YFoM5i%QYwiBuz0x3xSfuTq2fA<}y29Ch5Nh zlpslNOGqmvk!#@>Ecq}E%GHuC+W~7Oql*xFo#fLW;1?>n&0SuY3M_1p zlzs|nqoe^R+D(#1oY$fx`W|qPmQ)@`%qNH%Rf4oR_ejla!T0IxqRWA7WmR%wVpVAqnaPW~QWo^{PvfSQJ8qE0SG% zLCKOF6M=GF(rzZC8#4=1IqSvNc-J%SuXNR|433F)*nZ$BK)NG;4R)1-T+ zA?7)$x(VFROJnCinI&zR0OnO`+v`x?kaqe7a7WscTd=#*!NcL6EzM{*CM^g7C^!HeL;ceXuxnFXWo7@AEFKR$blr(J$>7XRNDcFZ35C2AIDUwE* zkA%aL{mjvhNm?HU<+xZ?b zd9YPUj&UbhE%BZNWsRhuK9pY4UnWEHmbQBb$w&J6Q*`7jJyHT#B#j*mrJwZvN>Kcz z7g#V_EbY!}Zh-VIXVgGxAa+E;5@}8@q@~iI`PMCyc6LBoE=_-cC@Z8BzJwGc^?VHo zmlknk`=sm20SBadmID%{>p6=ZlsYdVSdujTQ}`uIt(>e6Ne8!pGDVts8kED*Ynx#^ zB7HU#gE%T3!+q>A>5Mgyj!PpJLOLOR$}Ik*w0jRor=)jt5hYdHlQrMd(gQ2d-x;Zx zv)DOlCAV1TrBAr(W=J#gp}Z*l_zwIsrO%o6Uy?>;LAorpM?ktF^==JHmUINS>Q|+D zrbySM&HjS>b?MUoK)E6Pk=N{|bO0-kx1`=Iq1=}Ga{9U>)iI^LD=qyOQns|$5xC!z z2CycSC+)ickS|Tw(pN1I^RaXX3z|=)$H#*5RO;0Seg)DFsjxkh8oL6X zO9%1=DwK9&x$1?qkg0c(bUD-Vm(qoDK(TZ>=jB(@1SNu%NGFwnQYziG0=Bo(8w1c^ zne=)fpj_(A1hYaqoprxTshG>bJ84o7LRU#QZi0KYRK}`@mypO!v$wF&55atd9B(Ln zg$t7)EfN$~*!+dOL2y_s%;WSNAXNQ|U`vF-BEVANYi`t*32{tjmJ7e|hOZFr@+Idp& z@rB<8VeC(U2w^zuHjzU6zX2PCN!(U#64ot&v{|^!?;laZcifsr3p2RH#0Uo?(Zd#@ zoRz=%|C=aiL@^Y^Q_`yn?C1GQQKNg>~HjoDoKMfbFcHXD)kQI5`gP z=|Watz(t{BBS5AwxeIKUgy?bvyDZFL)$58do^NrMFk=JYy0C-m@eRRs6)|rLN-vE1 zmN4sgNOy(&A#lhRp0f&dPdIo9QjTzg`BbhDZ3pBDPZV&^7fz!{A>0?*bb#`K(1nTL zLt)B#_&pL5TS9s)gmnQt5q{)@@>F>CCu{}6x&pXA7xr;$Qz(S=h3$n9&SbktuvA0& zQW(zfC&fZIci^vtbNJpWln67g0bUD(z2WdiSkV`uONE64A-xrz`~oNw7Jr1XlnZBr z!K@I5uYpu0s5$9W3l?U2HA3YSbmS#-vx?^{JIfN+B3bjnQ2NRGumtZfi{1@svFySI z^bjC>D1kCiwvG$`5?Q+sU|TBti)-gH*#}(#%Vl;am@8zztb#2__G3rHTq*O3gmRUv z0$W@mST>I7%4(UO8`3qh&LQ3zwF)!MA^U>fP=C@{D7Dw zYknP&EX(4fct{q_i9lNlA283zPF#ZWtSos4lxec_Jil|Yhv~4Lmnm4=N|#*_;Z!cj?#R$lhRlt^ zn{ZLKflpSZ%(fYnOEM#0wac>n>5#6-3bw)_OE%UB<_%d0lk%Igl3{SaCHs`??QNOo zE%bLs=AHuSuIvl^)Y zdMRtl(sQvaoO{q$vH-qEB{D|^9A3-nF|&LlGpvAADjUz7=&kH&BT&j@O+G-Ba#_pY zK&g-!e}+^g!z6`=U6$GlBdd|!YLCGO$Xhed3X~t`x0WUH~>*T&~KnaoW=86z1 z*KjWxCa-rBw)OHyX$TfBkL6X`ARqS!Vn)c1a=4LlPfov^;v~0 zc_jz9MgEA1_f~mKJHQV4eD0BU%4gbfM!V#mOrUqm%PRqUKi!94qCEb4z(ILmPI*c4;nN@`%R6#A zbVyz~6;g^kd>*93^0CQ)BXZRXbaY%kejscoFFixWE~w@gOwsq*?Uu$`9w z$-Ll%W`KXY**y7m`Z2KcW*_MtMWhc0N3PuWPt1P zh~co^kQa7>`%U>5oVIVt%U{5DTkg`r{f_)cK3R9=DlQ?}au4Rv_vHDUQF7$XSm(-> z_hkJfPhJ)WO1^v-O5wtN`5&B79>`yCPJSr&`3w$^%>K^6M#p7xMc%0Y&ohIe?e)$8X?XEN}HILcfwf=E_wfS2DGI zE$_=r{Eb{d7A2I*4+OyWRz7MHVwTBwFm$_%R z4JAM^khS4J#Y|2?OB7Qc1C}b5d4aM*u~mQ+r1&cfuu>7sNp+RtSLS@diW)8&s}-L$ zMd&q(HuYdztN7as(mF+N9Uw$;CKb$3MafVw!xR^K0M;v}{{UsU;^-%E*r2${U37$^ z!4=pd6}`TPv{7++F8bS~@L(RYS)t*6J4&%`Bcy0W3x3atQCu4W<`%{7BM7!t@y$Lc zw<&tCI=@}<^^brZihGTq+^HDO{BxJ0`fo_P6@PP?*rQn51(aCDQ(m4pMO!{~dlmf! z*y0tFsu6RaqKyg41jVI0VD48m-wovf#dcn$M8)TJC=V)T;~R~Tr1*gar)0%$zAJ|m z55Gms6h-z9C=V;59e^W>si_EdR58c~>6l_n8+3GBk-`1L2}O(M2z^p9uM^x)De@{I zr7BizLzL5sZ~Y*hQ4DSh+gU{nr@S=9be0a!DgNMB(F+P`H$aAB7K?=!75_2c%~Y%n z0_BpTC7-&>3dK-#bVU)*>@Z6)gIV5HMfVyguPO3)$F3`aHvw)aj0(U_#dklTqg#r} zy}`V#=*vg{j^eBF=;5wnC_jy6D;lz(b5HSl6>K?*X8%E%t2oIeGEdRFc8jQZ^)Hn7 z71OvYc&MoC2j(Ni#B{`btQgDu?1^H;CQzO#e&?hAOi{z9;JKpzVL+k6z^w9xqHztN zNb%|f{E8K$h5%kEytt7rQOv)Mn6DKhxg@_)%ztH-KtICeu)FWgGV3qfERAKVRiURzdug1A^hOSlK@q%mC$M-nf-YXFb3wrGe$v zVC9%mkX9?}{RLQ~^kUMsR+$=xv8+>OF9sz<`Diheq00R45iCsE?IXZ?Wfs?faAhUu zi4Dp_UQk9T2k?Vaq;dgs#f{3;dr)ptUd@2}W@VSL7(|pZzXNR1$_Os(G0Flb+_xyt zvP`&D8OX}QHs#9$aM-R49uM~&${40;JC)ugVD3`>$F0|Hx*Z^Cm@_ZpeUs4*lyS}WPyA*Im`8mHqW-0r10_Cc*{{u+Zl-pQdy{=4| z1Ii6$Su5CXD_`G*?T*s15uxuYEBip1t&Eul(TZDZ8;M_*mJ1tJ)J~Su7||l}|Y#6(}c6h2Jyf$dMS! zbEV)3WudaVJ}57g+y8~FNa_7EY%i66ehgc&vVb#miL&2i1beN#oey}UY@PvSxv~)} ze-+BCws5FaN|-XfQ|4@jvP!vvo6u_IO)fSy%Ct8CFI6>n4Bo1VQHbKB>dOV%SLMGD zut*i(0=@gGFe1Dpsu|p`ELNrb1BU=rIcqb4s_k4RmZ+SKVOy%|zZc47s$pDHm#ez* zeP5ya&IVhMDzY1TSgDF)Mz%^dYZjEjs{9WitycBnMrDm^5fhNLs-ba+xlT3g6&ylT zV?RN#P?anTlrYsJ)_>QlJb8ZMDuJv022~=n<_OhSA)rL6=E~u>QT1Rpq)n=^+;47H zbshtVQeE%^M5~t12E?fT;oHAOmEenRx2nYV;I~bc;fI*pRjrOexkL3;KPY#qvhpGA zQeA5TX}2nVKcqdX{+zvIRTu4$;#3d$nPji3!*xRa0$szx)jN>cgyKuT7%w&7F`sl52xn-mqwet4@?lfD8RQMFVe^ikEM zFF`q`is2e?T=mmY_?=RX<|Lk~n#y|5Y1MO{<{4GnQb=c2k^cbFR0`Im&Z$ay`_HS6 zJVDHKReSE{FQ{g+4wj+v+X%R*YE}bgrYdJL;F4-AldsFF`Ko4E zxw!Mbrs^LFzw4@ybD-Q%%@%=jQ`P2M*lwv_?t$&L>h%Hy%T_I`T|!j%`DGzT70GgS zt}4q8W}YgR(`deG3RlDXs!YBX4^;h_7d%ugXbR;c)vPoqAFGaLfcZo7RTj(DC93?L zpuAS?WhU@O_0kJas!Hc{|5g=w9LzG+lj~5HtLoiFlnPb#7T79PM(!ftsrpZWRHb^$ z1f*KE-wb7qYW4*vz0@0@A+)zTcoE!v)Rpx>@l{{q482G_jXOm@^&8F_{_2BbP!_AV zaE1<0FS!W_R1ak`v_#$D0UVa9n=|oTrf&8dV7WS*wY(MT9~e4F-HO}zmFnUAJ<2L| zUM`fu>Q|gRR;x>x<*iXic>~s}>+xk?r(VNtV2HZkFi4?lALbfiYEd<$^=eBTAY2_g z4iKqs#YAbNdNo(BP3rJ8FgL5k9RX459<1m_tEZHK8Kdsbd3TH2xem;&Y70}UZR*a< z$hNDce5ZG)vv~=2sy8=-`!01Cp5|`#2QT2TM_scLlvwpZE(~$%@44aMtDf>45U)=1 zN0fc)exE=(ptg4gGf_Q-H~gTwRXC(1_1jQDvRV>@n1|F++W{%+oaay;R_|ez_=viK z6_BIq4qXuCm|DyU{|>ZNxO^PKtyleY8f|9qiLSI=$)xS)wZK&O(``9?oD_)m=xy;hOpgCy(puulqoGL%kyr(oOZ>%K*33NnFuytJQi$ zxud?uio{*DSO>^fpWsSzPko!0E=O(Q?lV_Cis?_DTF25=zWU-sQ0}WovNHQXJ!Uri z9;zMJ5&Drj^BS0s)fG%wpQx*O(ofZWxVHsa^t$NjbL@85C`Iwfg{l5lOsQ-vS zluGr#%v9g0{~ZCSQcvK`saAi?OHiXu=DyfV^8r7zcx#L%IQVGd)ClIQ>BUXqB258v zc0bK=2W85~w%79DA#FL@Y_>}CXthIs75vhQNlD;^PpU> zN#70#*W~_!C>u1#EOzkp~>-xB!6 zX!bFm*rJ)V57Ji6UDn;UX>z#&ZP%RTGPpx? zfkUijUM6gDnt7Z<_GXK&An786Et3@0sA!{cS6hqnn2cD6E%U%tPW~U zYY`<$6MGiQWDWkc4c;-$zVUz*&7xCK9@cC-0p=0SSUzA!H3N=7c}%mYJ>a+|^crj@ zG{2pJbW-z}zsx$N`7jDns%GUmz-i5I4M91hX)z2#I;;7l5Xv-7Df7s4n&Sy@IIp?S z`b)azq6E@KjSnaPOpS3l260KVcPOOGnnS!iS2R9Xpv=-#g+X~$BjUZirdg|k?YgEd zU;7&xUk!rY)O^$!(k)GEmTzurLgz!eqcJ>zbXT)13sSb`Y!A5K({yi)6U)(Te-34? zX8$uN^EB0+A?0g+;Tb*D+&6>rNHfj@(qoNP1KSf#(o86yYC3UyRiJV4T0hhL%mnMX zW-1e`LXC{oiWizyfsl$cD|W;0r6zzUU98!4AIevn5>iSuWeuQwt%+fU=Z)rLe?Y0m zn?<#^n&X@c$~3prAeC!8n0ZuahVTnjrRM%4xWB`b3}uxjkN3S=^E0>3HJTZmg}tj|2-RL>rW&R_$WLMGwIxl_QMfkK1ZjizJC@NRv@RE- zL~5I7z+t0y(h5kMwEdrgxmmm7b10*<)Bgf9TDzX>%2w@lj&qx~K|CniwJVt@?a=
      ?Sm4Q-MC9( zhtIAZ%+_4Ib}$c8qP{tjVMzcbjy(M|hSfv+ScUX;uV4ohzd_C)GP%&U3pvDC5d<6c z`-8br>#)5xQ;18++PZH+TLjV;l@5WurnM;5#EcEqiN+@cPn5Z#0vaBTj57+m8$J$$U_ zdDH*)$G|1U*nj-w_IEjkO#B+xc7K}qW0(QP}K}G8Ny+rme;&bL1RQr5-bZM zrK8=?8^0n*4?|3%{wLZs@qYm4O<-JxKggw?8m0%SkO4!IAT_TUkM?TCtOvi&avjX~ zE@3&hl|+@{ko!yk^HXOK(>@JgfAfuGb%9evLcIQhHn`U7@Np_E;q<5AX<~CQ*b__^W)%)0;m=SB z_w3~HX$fBnDbXniba7~;-@B_<5;{)JMu(%gItkG?_I2vuBgco{ zVi>BXYN04lbI>k7lW-SC44L2{?D=)4n4-V zqbN^y!j!??PB7ALg=Z*m_|SGtyWk=Xo@xRAQp>==2UlR7o=na6IEls_9~}r%M)f-( zw5!i$a<^+*v1eJfSnE1`%82I{>qdA5j2=t=dh*mAGH$d9kafG z-qZ3J`mXeQqrhZ!=9EaYgR!Z!R#8gUOX66pZ(qOpd$eFJ^)p$McrY|${QCZNnpIBw zx)&9wd#LmN=EE<;!JpsWbC<>LD%q%)*QO1`FG}wiY4vt#(h0tQG+bIVA&8?cglr~D zDaxrGbE+AT5{s6TF7}tX3SHnV6K(6TKvj1N(R%k``M7SVnBt5mU$Mc~Pg zz;E&Y(1&@bp@A?Aj6n(~y^s%Jcr1n`7XaZ?hW%i_#s96ZmbM241lz-Y3j$_o0|68_ zXnfc-CC1Yjt7UNQx{13*#`Au>+@YL=nrzdD%L7Jvi^vL61tDCVFa+YTQlGABr483Y z+7W&NEdLExh^!Ds)I-<;yetFbl60T@i`K)n8z6jPE;-eSt41+mN`c?0e)j0YFTcLN zyY1Od`!FqU3xsS=+~34nZP>{cfeue|K#K=(oq^Oa!xUnDNh}q3lN&RYA@+>K0j3al zLaIvkunwupJ+6f}7HjQnZ`c{%K$SpxUh!_e0>Y1G|EbFPXyx@;KOhre>psfwJw<2_ zJ{)op;_(}f=^CiT$}8CNN>`v_Wu@`e#z#A?B@IW`>*VsXBkRcJ0g zk(E&DRl!aO!e#bIJB36R?>^-b=WX@D4b-I^L%Ycj3*H(pO=P6(CcX z2{b7@OX!+vL^z%n_04IgCqmix9TIa7%)oCY4bTYY^cio1?zEzFj_Uq?lDpfJq=_KT z9AxWazOX1Lv}&=SABv9|=E%80E8n6FPv+!I$a8$*d5-)%5f}LnXnv@$_W@i*(`{tT zgoN_wABFOBY)1wzaD*zr`W~0p2wmu(uun*gsQbvK7=TcN)~Dsb7#b$rGP!ucfN3u> z`_xKm9E1$ldXV3;<^Y>kL7)Q3(p0n`-o=(2W|9qcXL%5gMv` zG+6V_BIs2ntInz`!DLm1o?n6VqQv#^EFv_nv~M&(n$EKVRDsywQH`)B=m15*REWTP zjM-r*T&XUoGqi�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 (Hr4*jKy+$plU%{X5Q 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 RFz4+SAae4)C_U-z{x{^41z7+9 literal 0 HcmV?d00001 diff --git a/Software/reflow_oven/Debug/Core/Src/syscalls.su b/Software/reflow_oven/Debug/Core/Src/syscalls.su new file mode 100644 index 0000000..1b5bca2 --- /dev/null +++ b/Software/reflow_oven/Debug/Core/Src/syscalls.su @@ -0,0 +1,18 @@ +../Core/Src/syscalls.c:44:6:initialise_monitor_handles 8 static +../Core/Src/syscalls.c:48:5:_getpid 8 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 20 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/Software/reflow_oven/Debug/Core/Src/sysmem.cyclo b/Software/reflow_oven/Debug/Core/Src/sysmem.cyclo new file mode 100644 index 0000000..0090c10 --- /dev/null +++ b/Software/reflow_oven/Debug/Core/Src/sysmem.cyclo @@ -0,0 +1 @@ +../Core/Src/sysmem.c:53:7:_sbrk 3 diff --git a/Software/reflow_oven/Debug/Core/Src/sysmem.d b/Software/reflow_oven/Debug/Core/Src/sysmem.d new file mode 100644 index 0000000..74fecf9 --- /dev/null +++ b/Software/reflow_oven/Debug/Core/Src/sysmem.d @@ -0,0 +1 @@ +Core/Src/sysmem.o: ../Core/Src/sysmem.c diff --git a/Software/reflow_oven/Debug/Core/Src/sysmem.o b/Software/reflow_oven/Debug/Core/Src/sysmem.o new file mode 100644 index 0000000000000000000000000000000000000000..c8b130991e718bed4c7a311d1ecc339d7fdab572 GIT binary patch literal 47196 zcmd753w&HvwLgB&OeSqUP zTtVb50`icDJVXH%5kV0Vynu+PT=gO#_&`MdKEa=Ixd`Y*{@?G~YtNjSBrW&z|9w7x zPn+{Sd!K#wW9_xqT6^t%&U_@@(dxRcV-MGW#yQzJN$wwx@Dcc9 z+8X@T>h+Pp<$ApWSf|(Zzy`ez0mFJ70Y>$jWyJM50c_OkB(O=Zj{+X8*T(=?>h-a} zZ>U9^eTd#Y7C*bd#`!D#4bIwa@H#R_?4VN9Pu;UAoy>?t6NVwR;}F->D1N?zj1@&Cl$6)Rr4o&-%%GZ~gN< zzcX*yey6&JoV0q*uV*9eKTe$`X@0VAVC{aV{$umL&bL~tzjDsEkbT)P2to%Ow~CRo zuAS>R2fPe2U)1Y3^UBgW&g`ndmXQg^cg8`EQ(Qa#^s{LA+(Fr7Plgy0K&5^Z#SvwpP^P!(9W5b54sigeveE;ISPgwA(o&&q+G zbE@#%$@?Km5LB(&cM%?Psy~O5@9g!62<>$)Bksq^--doXaF6G48SvxeR596ZuP#7% z(fmI!g7ux-09JA1vu?ySkFEG~KRo~v%=W0s)7hdaDAYY+FZ z-4`LlrMvep-ostEc*kP&k(M$W)I%od&fV&r;Wo+hs-_DjdTr|2PEWoT>rk+=5kITFy{t#_}p26 zx&H;4`{&ON%>DvKqJOtJfmzGQGrR33X{*fHKX-1xcS8p8Rr53^FyEU%BX{@d#e&`C z!oRPLSh^rk{ht`e{#kyLL~}ODmMt`qCiG4J9{xGAy$STX%D-e!|C~jE-9}DEPV@IN z5BYa5OB$H}ET~Xbh34abqMzp<9maDCG9}<#fG!F+N1=BD&L<(c0!}YvLBJWqa0@sm z?Zfk-kN^QE2f7EG8c4%{vt$L&1E=tO;1N9kehtsz^*p~sHgV1X*9V+t^liYoPD<(9 zi`UKt&6Lmvd3n;`cB&QJH?Ifzjla9-Y% z=LaRtT#UnjGZ)N``b#T*A@zS@En`lUTE(S4Z%7^9m8UvEtAMixk}%+WO6u^5Ag@oY z;W@L8=dVZ&UzKvN*vOc^7M|bz0MCDyTD>Ku|C^N93LyoWNcsyT{_j!7Y?E4TfYt~& zi#G6_k(!Kv=K{`EkhTHmPC0+~KwdAFetAi#@jEH&<&zliK#&ETxKOpXf!C)>tqzy- z&oR&g&W9xBLa=PWIUf8KaGIobZ%WTTBK3*y#`qse8&8?X>pw`Xk{C|`XLmVIO1b|o zZCNT5yZr>-UAT}ThSz_S)_uQ@*Z;uSM1Kjlj0mT-%lY?m{+_gAht&B+ zY41DW-hlI~LwMdt`14%JVY6^c3_>#Cye@qamJ+klYsX3t9w@ZE6B0b&d`UR-N~i*G zuk=)d^vKzg=aE9yf3D%(u+XPjYIvCR#buEC0p~`c%$U&RHA!=qaL!GV+r1KV5j1ze zxn~Z~2MG@xBs}9v{`(3Y_BfPxUza}0ui*8i5Gw&^So-3=G_RkMoL`jEPZh3yTH2D7 zyY~riydiCQTd4F0>4oEk0tfHI9F_=&-zYuh6Z-581pp~Gm*>Ap+b$={1y^nn-V%7 zB6a@kDy9ibzg!?S`E(s)Zj;ilI+)iR7x4UsX|MG1mxN1S5!&u0Ib19w-IbViQu@zj zq`Y|wpIt05LrGqLPja|H>JT`QF>9oh*}_Yo6FM9x6nH>tb+YvJV{xW@Pw07;aQ=s+ zy=_w4SLAN1aQla)jT6$3ugUd;NAcO832)qeGOy1T?#g%Y+L80sLg8OaP3{+(f8luE zy%`ET;B1lnm&ho)OE_VzaLWZknSV<9a}Qz4Inw*DHuCy0;emePkQb#D<3iyPY3a}8 z{86FUS;B`4q;+$a@Y!z)9p(z>zaw>cMyU678I>(kZc<8#H!%Iz5Ig95)yP3i?s9!>9xpVjQOBY>F<)}hmy}+ z>G4g{_D7a8O{4Vtm*nnU(#!8i{eQTOcSoeJXG?wlTX^ytlKx7m^IxRBKNXIBM@nB0 z%2YdN#CYyT-&H$TfwtAoao~z-hjY1V=Q*^i+W8LBS38s7!)oW~!+CxT6svX`B~2W? zU+tWB49_=VWK}zNpjOq+b;8NpWh|U6Pkl^EKVP`$FNm*p9+uwxiS*7XM>6JP((fMu zm8zW+W$c8|@6}FP+WSYL^WpN;{U|-)Y)9`@J9|ni+ND0{uVTysY28WS`D$l9WOcQ3 z1o*Am39jM!1E6iS^H)fNYUfJn{ab|E$9FT&Dxv2e(c{(58{mOz=ZbxK-dkGn9ki?3 z$wC((XY^OKvpmc51Zr6AYy~%h8q$_p;hYsmGtUKRMZo#@UY=iB!1F~1@cbTnAK(Oh z`!2@0`p38@;i@rG1s#F&tVQIS**B3kbN&ncBPo`Ci7Adao>X1_HfkHFf0^lC@#SU% ze&<_Eef65Jf$aJh-^1kB|MES`!r%1$hO**q--)cymHyF2z>WSVZPuNykbMVEC;R5( zO*sG4e*mM-t;&JHr1*U`fQv<&C6fx|=ejeFsPM@l_bV z^2`yR=D4l-14rGFTkCN?&;4l>@G7nve`9zAE^t4{mR;z6m`N^jcSBu4p9P>u z;1c&p^7f_f2pRWA_m*yi?sxBFL0@;DV23{7KFTEDaPMUoKIraV3;3q{4s&_Pt>a*S z*nNpS@h$g!HsasiF>=f!ZViil)Llsqd(1tA<$c?oWax4CF?QK^+^;a@Q|@+>@AvL^ zn9Ij}1q^NU$JapKzy-duRsk;b&Ema_e9y9ki+wM|0hjo`&d{a4S2=P%?mLgHcA4*- zHozx*-)F5a_bp&SSNN_w9&n}a2keqh`o50AQGJVV^?JawzGvqEF7W?g9`0T0zy45! zuJj*HPPx|q){%f4{VOq|h30#`z>eGJrx>4s#pi;>7^{TS7HE!vpZUJPQT%J)9q9R; zFSyQw~S`)$Up3n6J9$lDQvpuO~d}E@R%`clSqAr7C-* zS@7Q7w#~lJk+6q+ac`UtJA+(##3hs~M`jn|yducE^^ucs4t=#2=g2Y4Ft+;vI444E zO7byYAH9(2SAJt3EvNG<91ExZo)o>(Jq%O|+~7M5r3P;Fow)+=Xhf8VPB{l z@Gajw67f3!fhPj)^IrgABb1u^D&rTv#*wq%J|JVDZWyf;iag}+CpSIeZ=~4yk$(v| zCh!ygO7h+F{yV?|f#3Ll%S!&%|LGXuRsVU+;s5xTGW5FtT(b0qRUcu^FR6NxmAtI# z2oxRoMAgHj(B)O%WoKMbb#)wYWmSM={$$nP!C`@`suuI!)m6J60=TB?HFEv6RgD}w zpQ`$H4dA+}T56K(tKxj%hN_1tM{cZYSOxfW)c{55O;zpl0XJ7QQ~_?OdYIDS)~e6X z0(_?GWYXrgs_o>K&sN<{x;+zkjh*mp;NW$D=K_BtYyLE_7lr2Yfh$?;3xV+i0Y3{g zv(`Tke34A}i@)OM%s^0e=cikV=0IJkF-P8|WuroKt-n+2*6w zKW05&uKps(BV^w*$qF3uBbIpBZminj`;$G6_%bO_voeTt?fzu8BfmtJUH(T3i536G zOzY-@;{)}3&BnRmL6#QUlXt@puo;p2ShqwT!z9pn2D?0&*obq}HnQi;N1T<>#*)VmYBPbJv?qD4+bI&;l@CkQ6 zQt)zj$zgyi+Ny?T$^o&r4J)^RX>!~Hp#`$6}ANWE{mK1M#|et@Fr5x0?#Kjt25hwN?_ zkh%+ZM{idz-xrOjUP0kkT}MxGb^SizBVPj@)zzV|p*7Xv4Pd_N$V&Eh^iFboYz4V5 z-mntq#A3F%F;BioeumuFbTjWB)xyd*50lr9?;!{Ewy+ORIe{^o*D#;cZzn~zKTi%l z*L|2>b&-2$AK)r?E;IR*`!V+EZSHG?yWNk@2YlV#3WllvhAVY{P$YNtH(jayL#|Z+ zVOQ$^Eti$9{JT#9tusj@utK3bcQ8H=Hv^F2VU6x9J0bbKOhWYaew_qwu=Uy_bA=y?gg;zzyz` zB-?H7{-oPy-QUaue9k?f1Mp=xx%$y zyEn7)7x+4l23+X-8hQI7-z>KMTHoGe@lW}_&wJPTeg*yt+~Iqi{d=eHX>!l!eQo;# zzV7?cD!>E2dq{$B`0nCJ{;qE&OMlY$9d^@?eYf+u=Y4*5!i&BbY56PP!F>ETz8e|( zoo^v4|EljzKJYi+SJ=#R{J)6;&iA8Y80`MlwSdd~KcNh{&i_>s>w15l*S^_BjXME(c${>3H;Y2^+;1c zoS&>OY@aBMjpVjYjE-&{uirE>StnO@L!)DLlDa+|u8-D_6}E=!w{97k+@6RrZ~Tjd zBGFJ&I2ukw5)JZD!`3YW4V&`$hTPb2-N@)jp{|e{*wP>wgfZarTPFt#|3cL*ucp?o zVK|rHyk+EHzn3SZ-!eL4668lmhPG@nxos&F3Pam)jS`0nxrxa!DIY}^>*Bpes;#5>)6BEE@$teK zD~Ljil|^fc*ND%e3FDJ20NFUOdjm)SnG<&d!LC3&7}zt|5SSMURM!Xg4h0sk3RE8- z2pk)jdrV+nLtu~N0*h7#cH10q5BAN2Y|3_}*LSq9&aO-MX4<>Eg3Ds{k^0awXMKBD zU$(QoD_E1w+Usn#*2!jD(#`Fisg7(*`0!UcXX^RT}d)ln>DD( zZ$+oCAPdw6ja(0oPmE3GCxY25V->Q&LkFaH2 zZ*9$XO8r9H8;8u{;L)x%*_Q5pcF@+*kxjwD(aC|W1w4ZmF?n-MzBZU=ksTdQwjZ(4 z2#Afo?@0BgTY{yOm6>Z9LwGLT+}+jHn{MsT;E8aUoX~edw%ssFsXL}Jl<5w3BKR!R zequTpLGP~}&TS9YjBoi+VRXn~cA_?T%rU_z2x=Z_ZcBr#`rzvR)|xYN=tu8O#;gct z$%eVD*@4NS6~c?bBM~{J*cCx`RloMAa(Fa?IKzFm?Y7PRxRU}Wx298l{k`ez323U5 z#&c_ekwz!oazcN1Uob2guvOiyrX!>`%+P6B-67o-4rS9DdcalD5J!|5C!HxUsTp?h zC}Vq5%`!-l4vbbG@0Anl+|!+D-%uQbkx(cZYC?2>Mw!!a#D-QJJ$1?cwzasKG5KjT zIj)r%*0;CxwV@0SK|`a?)tTPD?)A-?Y^E>Om#!Et!&}Dl7%#&E<6{$}XXeKtc5@R2 zR?ADA)vXvvndTH23i0iIZJp`9_GZ?jj7PeAThhJRo|c|$x~ru3sFx$7W zCyl70V4;C8Vq$%7st2`eK^wAdh_HO6C2v1mM$ zj6@>I#yDhBvQ;{=NK%nrq56;^CQ8HO<*dyf@JO%@>GyK^)gcUktW59M)P+M4iWNh4 z$_tfJhO-ApgJ%_`g{ZFJk=Zdw1G#;4FgsS1UgL$r;7OrVaL>xQOd29GG&NCpN}}-8 zM3E_pB4vq&p?b@U>+DAdlouz7%8HXj<;6*&vf?CBd2x`7piY*EpW$M*jvmKh9Y=C+(;6Uji1Z9DMvXPjG7qVGnO;JdcSyTOO#caX}XH8dsusIyYV8tvx4BIsl2{ncz z!Mfr6w#k)wh?Tm!U~VkGc_rq`XC%h!hJ$sR zqQSauJb;PBO85(qciqs?4aYTl?OTO7o(CaCQ`!zt(>5dq0*xES}0-i1jc-OEr( z;uZ}rnV5*VFL!I5E(jl#sK%NKHEPB$_~K zGgwt%Q?XgrG7`gRXX1HyK+Ga5oKaF%^Ie%ITVTi2MB&51l`Dhn!dh4~rMO@X^Q;}tZH3?z+rJi?Ju9Y8)=ZX*Ip7Y9 zrGEEn_;hy%ZbixS!(25Q;V zG~JShiQUrDi|RsO;qlByD1R}1#jZuR-RKz@lg+}NaBGZ0>U-p9OL}$x8hZ~e6KEBg zp{mph$DMTFhQ8IAjll?Y2j`d|@YX_Zyimgc#q3yNA~&|FFfq+tJkoD6)G-J7R?*2QS8|ox*W!z?!W>hg8Z)b{jnqdX@lYd7fFvLi z3e%+!N_Md4Jan(7E6R;O~?+DcSJHk+H67~3*1IRW(`oH#OSwT0oXmZEz_UBJp3#G6pXhg7dg$Nll`3Z~S?Q84rTur`6_pa~mU8^#uE40A!5^=J$)O4O`J7op~l06%2SJSXsf1!g>O6xWanm?0mI-d5|GjZ_E~!;ruW&P zXJny%m`lMb>+20B#DOI95_FNNt~&5Iv8|}C@!)X|Os0g(VNJTV9aft4Qihy#CnLns zWEH*{G{QbRwvTXonyYWc2rI1*2GfA4YK%RO?v6mEddQxQU{<{y)7u#HQl~Onx2(dFUB+&NgAVi25S22;M5?#B z4T`y2`k|3CvkJ!>oVl5v_8xQ+r?6f<1y0OQ!X1CcE;LqUI%I?HQMNCd|HkK*?(KzU zrO}5}WM1ke3_LIIa>`Vc4sa-AB5Z}SO+MW`R;7%}af%o-mxdh5q6A}R>KJP6=uXkG zPWdeoas&9|efZ0bR0=ew zwRp+PsiX4P<7>7hW#9v7&h!PzFzHlFc0GK4XQ9TTv0 z&QmFdJoZ&l+-2I}+d)?`Ep$(rl~tM{7$;sjlkQzd|67pW2w9*|+fJRw8CrL2MWwW^ zj5F<3Zt;wBR0OV_F3=Y~_*8QnCX?i$p5D}&&J^h00twhfo!Hlvf)b>tGIC*Bj#UnT zOMXqNvqHFT$_)?a#HEg_S_f|W?B+slo1=?7@Q_+x6HG%WH(7TuU2fMMO!h(=&TUSF zfP@Se@BLZEnF)0xi(qi!VX0$$2+qZ$y>~_@>D@E8!sWMM5*KepaO-Rt-X$l|6syA{D?lVRSe@!H(rQQ! z#KKAyu2c!B=_;ahTqrli@#Y^5;?1% zd4sz4;n;_r(A7=L0s|FmWSIP6Rkatoy;nvfx&|JJGC@PTaLO8nRC!`-M|OtlOsV!x z(sE=_9f~O-YEPA;UEhQ)-jVKNr=yNYj0*{XFG?YHH9}=$#4|c5(vG&1=nVuWKi z2Yb#l-+@@tPUlk2lm|p4@R2neHe^$)+pWm~vqEGIYGLH3M;Fjxf+skN$~0*h-r{hi zDH%(|u;82wH)47hi?PqD55OPpGzXuq{X*vpg+k<^#d&xpNl?aovm7Ic_B zO%pRDD^-wc63_h9=vwdM88Rq!b%}pVabni!D!pB`Q)_@Fdou5X&n1h^09j5E`+ED+ z>r!Uzq7w@T#W@4a(N-Z(Bh69J6rDEJPKN7vb*8%`4O<5-Z3|X}!Gf(ROt6&P!A9!g zqUWg06;za`W=K*LS40^R>zRq@DpNEfgS6y?r-cjI1N$c!wdQwEGmLQ*?iKjLZ1lr= zBRzC93}`IERHj*`Y&%DYvz0ZiN z#M6ml3V9hs7C6+z5i=e92~w6xSRGM4*`9c&Lb(ic#=9*(Uh8;?p^P?-PBhc6G}p&k zy4Pc|iS8*dDI}413@PVqm^$D08XxFuPmukbPOV9yaM@Ln>g(%mU)>KDYwzsg#)Fm= zn4mauky$s2wKEryjK#rONditkv*h?J7UbKyxr>Gdt#`UgH1XRev}SkPw5f^bagN0rmNE( z^dq-oqeXGnSJajz$4t>dBaTZiNw64Ix~ZDCWRfB)v#gcs6IX?C5-}M}mXdt4_KONO zFdHP4+04bB3t`_)g!-c>9_<74tU8&#&S<0+zRc|j4F2@$R7-1+(#+f2oP#mS?7K=e z!%y0aIe0~?=I+j(j`RjoQaBM@ws~1;yO;4}6kXq#38FeQWm%3+U36r6C%QB))E7u= zN#&h&BJnO4^gJ{)p0g4=mAQbYx^Be-Jk4^8S#6QU7Hu__i!=Q?ODa+lJ!FRz7rMow zpaLk9+GwNM4_3i%J$2zYciou&)TW?Ej3N@JP0RXJZ!0Y0*7j^F(<#E4j9qCImYKP- zUeqQHXhQ?0nO0;greof&?#G5J**fRg9uu`lKP0`7+Q&iqt-OzQu1nh(dOBONn-4yV z_H>%jr!YLJ&$-94(lyJcja}uDcQy|@97WuvU{#b{T3()!?O)UQ#5wD=Q%vsL zQv1mI$f-7rspZ)XC$hoBz8{Mooi;i&1oL8asD^C0qBGsOI^D~4u7Sxd*vv7KwfBQ2 zK~PhmaI&+AX1hTWJ*Ck_k|?js;G1p)TD|A7KE>oK39jjvnxJsIy2UK-?!hJ^+0y5+ zc<9I#>%wdGc-}c^DDIUua&n4z<@`Mn!#cDqM62lQ#SW2F2CQBZ=gUK8_jIu4$ZS@| zWQ|x~(gkJ_vuu|ghf+m%d40xV`iye}dGXEnw|KVyVaRgZFlp|YXnKM=)3nZ3k6tWB ziD)(2QO#Afr>noGe0agO%jPjz8JXNBgST90TLS??JJAoRZAQ-&GY))VJhM{f3{ypJ z=}MPo>R`%2r}h=?JgP_GiZYg-VSBV{_?-_&yI!6xm<4aZad4r* z!m14gj{^6b1Y$*Tb|Gd*7RGj#>y%l!N@ZaDz!we+Y(?-8^uBaF`U#9zZfId#RC-iX z*qF_+jWI22*Vd%vZliQZcQ;n(X;#RJ3q(6NZ>Rg{0OF20PK|Yp%g%FzO@FR$mMw8R zn*g7gmkn{H8L&(atn#LBwojd(s0ijoX=q#4L>IQL&lp9H4~(708>VTc0V{?pn4=dr zi_0sNt^G`Wf`_N=>XJ3m+C+<`xv86tV5{v0>;P@q2um6c zywak-$J>YEC}z2s5=4DzTv38M=?J$Wi}w$su{YHsW^2S)2qL7=iI$}3BPif0BLvuOx5o%uvs3jVnk3W13cu?nOge?5=R>)DYTgI#FD|oL(EJ@2+-^$i`OPXY5&V zhMQMZr|$kNZbaT%7%_cck5N8438}I&Xt$zHo9K+(*2w}Aqux`Ko|)(F%3Wnxk!q(o z4iA(ZG&`$eS*l&+IQG68U6yKBIhGYaBON`vo6weBd6S3QiG!F{oVx7QVi6Hw26vAgnZ~O-Wty{(^EcBk2^mtnV6T$@4gppt{x>6nKDKb;0A@cHrT1Q5t&#))SY$h@ps) z$&`i)J=@m}<6$)@V;rbr38EgRrg*)9`;bc-%P#*T3haPZO|hg6hgNJg=A=M&F?ilV zgWkjYHP+q7^>bt0ASqYv?Zyw<7~QZjn!BNoxp5bJp_!e>&IxA4BEouEy1fId*m#3S zJk{l^?hYZ!-ltE$HTN6 z%!jvOSGl(*HAj+p%Gz6*Ye^go(EJn&T-=lW)p!MLJN{&`aN5Y#8{u{|yQ8^R$6R%^ z_w`|SjeTPWMH|blWE@Pt=)gfQ;zzcOwL&bQbJ}{l*MkXZJaP*bwq(GFfPJ2ZznTti zijpX-8_eDLG7@6cI`f!qSxzf7T;lZRb*SakMWy^16VRO`7`RPV{HGYVW>*HeGblT- zk(QRBtb1qWeGNVv36XB5w>ww&a^Y;J?@N`GF$?EnUzzP+^k&U83BXfpI=WZGbt`2C zYYw+dklfZSYjQ?X=(@Fv4Jrej)_SKj8ik3MU25>8H;uCX_o+*<9*2ExY2qlOS4~p0 z|G;dRkx6U@FV1zO)?~Z;`+EA}ZQ=T~ZoP)gls&j$4?azM*2=x9D=w@zd>iVL@r3XU zB>eO3HjYH17M{8cw;@mzI3Khk?eK)eBrI+4fQxTPY zMf2Yqt>y*IbdUT)2+Q+$S9^LPh})H7&}I&1FHW-Ad``|hjujJGIt22WDpUzM>WIXL}@lC$>6? zw}RtTHc`QrfF~Meh({-}`QlumHCEglXWvaSOj$Hrr`U8wQwIJSL)MU{dDugB7qk)n54uJy}9B2xRuO?Kk>$8$Be6B0Zc_zS|Sq(Y;~9JiY>B<^)Gwa1&)$6vIBr?A)Wj( zfb3xA_$m%(RvK%psvGFi<9cC#4@?pab0eDU3o0HX-L}VT%My0)o|&edRknb?B8WzCGa4N3M@oWPzQ$vC$v)`a^v6AV zluoRXM~~Ye8lxtj(w_nu$+`AIw>&~qe2>=cC@N3v4YQtU-;nV7%+)>aou`=BuuIhT zZWpmH1C+flf!RdY8i*)x#_E2&TO*6^B5bXPT?9dP>z3gy6R0r6GS1Wl;MB4yLuorm znNwY+TbUm02k*c*!8;9^R4X>Lr#kx0W=?(8UqvGwe>5mPqo`<3&fut))ls#UWa?-> zW`Si(`IH5a16xL}a$0lm#-6@zL>3hb>@W^244{&W(W7^YgR-=WYgx~;tYVfWs2PyY z3@K$^Ra(2!Wg_H1WkX}psO(AgHMe!7*I^kS*y&9M)_2L@`I?F%2_}vk8O?o^)cA16ZtxRvpE4B7Z6*?+J zJ&IDcq|>c$B2T9wOi{X-E~A<*z87ia3{3!TbEk~)%&0gGgV(+|s}=*&u#U%iE@scC z`NC`Y=oK*y!%G>4r3uQ1PyaVF*&cH_}LD;YnfBBxuN zE@SZ4&J-T4m_k_7&r^nRdfW9lL(OS3SM{#n(utdGv?3)?D>U5Byvld6NejJu*=Z@* znN5X4H@jKDu9UN84_dantAiiDQK@O^?qw2=LgcwQcSZrL%_E!m2f4-3QMui8hWGkB zn@mj#)0s5t$~x1kEe~T^Hr5JF^KKXCXqW|=F+@KZCW;%T_mUOA{ZPghBF|)5r5D?| zutcJ?w%5k!^e#mjNhhn;)7mHydAksHrHwa2+jZE#V7D-M-Xr1I@P3>@R016dTnJ5P zxU7TGW~qkMC>Ua{jHbGng`2C>YtU5aKJGeIdUc{)P_6?jkQIJK+2Ursp4ej6-p#i) z%)m05uDP*^GP}K!bQvOb{`Lif?(9eI3e^!W+*gRV1mh zm-o)B{p8iZ)94{P!>Cj!{76GdMhfqi3nOJ`8CK<=?2+|bm0cC_s|up-PHkhl0< z8;=;S7(M0MvP=qNmXz+r`X@L6rGTwH{s!4gFjy$aHbAftxn&9kM74M=IP#j;02EnG zlOD!Dce-f_=8HM>XhfqS`t)f>vIN;Rg*Wop6_Au-?BLpK8_Ax@X+C$>#=HiP;`VQ7KqiIN#&^tC6lf<1a6=Qs|_ zHe?FhN&n!RQPY14Moc7ew91|WybF(#w5b&xK%E1_!82(ou8}0NjqG}Mw@k1SokoP1 zv>l09YMPf-)VQo7;JZ?7MgXZOO5Y)x< zp7(9cyjiRcc93V{T#S=WGMi{heiLjjo#D-TC5H9&HMejUUuF+tI%K;Lx1^jT_KafF zsIik|h}tD52<&{xfw8?H!QvKFGT57NF=bADveJZ@{MLlV8e*U%W6`a zX}b4@`dP8ISaP${c#0*bb+IB{g@;u$*7-dP?c;maeeyXRO4oMm`zAF-Ka|bB!cN2H z(cwbFX@wmPo3>0e3{DOY?|>5pYb$3qWbk2|GjsTCt_f#H&nS#Ev=jy=;d|hAMQ*rN zHBQY=MlqW(gNAE#M<%4Xyp)}=Q(<^uD?emew0H3}7J0qNx<{uB3Tw=nF~OB%a0QE& zp(RUao)8-iRbe+1^UIZ9bt4kbh-h$u`Q!y2;Z{g&JZ^<(;wB+<=muD1TpF-;k+4iA z1A`7O-S*avs4k|nV%Sr}%i8S*?76be$&iC}!!x|AR3+y($TFR5i*WEUGmwOJLS?iW z*3&C8)C|Xx$eexyqkhG+^aYk|7N1nXCs;Us3|rU_v)~nwEn-`gdD+mT*4FWk>#{-C z+id*8R%MkcB?~CU??R}wHSbk|zT(5n;L8FuSLA}@`XJtm164(`w1;6 ze!_^H54w3(loj@#m%Oc1Z0YWUSZtBeQ*Ni&AyKQ_(Suxhu?}0iUz`KWXiV~_^kx}n zqFuUF;~@|fIqHaI56?Ob`$83jwOlHq)NnCcn)gISbMj^fBx+!bD>^qw4bfahsh}Zo zu24N|Zy_B#$mVO6Y8_SZF3ltJz8K~cwrjwOSTdc`HQ20&ccRfXUg3{T4iFQNZFv1V z)zYyx7=y0!?!OlS%^F*;fOcYe|Cua1v0Y*pE84|9Xk-x?;4*MLYPamwe)ga-6Dk^R z-j%S9fr^{z4bXvT4Y@RTbYT5#J!YGHrA2te%Ng1T`-zk3=ECL!C#<{KIb}Gg-$`$1 zNv{irb%6#Vzv#d*;{a>J5b#iU#V1v1Q+)8~#|;wM7(T^CGiF$f2A3%DJtmR)Se@kd zKK!@S`kX9->SR>}jlG8y<#6lp4lhIE$Wq`~JPX3ZG)HBDg{Vl`qrklTdKl=y35N z3Zh~b$jp;p*)3a$MwV)d{PmS_+U3)hmYl9MtT|xx(g5R>uDB>@z6JsfQ=IdcUcZ>Z z=OHg$Sg%*s^JPDLYOAYTSf|L5EQ>nd@P*+FuR6=5`V3RpWdqtVSaprj4q!sgIMnFz z%(pzVb6McA#n`tru%wgf;QB0t0X~gg9P#B7eUED5ASli$%GZ=-`mx+Bf$4WO!N_Wr zVt>1C0T@6Q82#jL@#k1RtQgH^9$9WUXWBbkteIh6W<@5RFChyZuzw`8v8xaC?C)xC zZRbZxA?CXANzAC(W{(xR)VfqV_FVC+H5_Onh;_xNY^q=e&T?9-(%bw>*)Bf^P?4zk zQ8Trd@a7ztu|r;PD|3EZ<)JQ6T6)}DNU4rZ@a$(Qb1@jj4pf(*!%xa}>)TfR1}lt1 zW3(D`&8x&pF-C`(@xJTj3liOoEW6c*Vw4|>1NAs*@fgMu6mHguqI}v2pR=(V#(wAu z4I;mhB`sT8?zadTfK+BIdb^s;!?tkhXPgV=F{X8P247UcMylGv>=-}^d|G5MGW41& z!qS|Ba=hYY+F(Maf!?_sz9-gf=X1zLXRi*-k)wh&P<6pR{y0YvKgki4w=B_>_9r>? zM>ryQnCRouv+bU&nJSmFMyM zFnZu8TRexqBDLSauQGWKzZ3L?SpQ`e;X^CJ_@Nii;dk&OL!QI$9PSA*Km5{<=kPm6 zdP2O9U!n0Feh0r5N5?S5<^p zSA<(C!mSly{(e#E@H@ws0=V+?_kul#-@y+Bc@DpWpAqsLerH`pkGT$hgvfLFoHINj zmT*s5xXSr;SvcVA;bmz2UPnt=c$UMT<0~Drojc0HbDZbP!n--MeWlcnGuJt)EIiK{ zD+|weK35jr-Fdbwyuk6{_dZI;LMKud-owe4h4*x>E(R{DH6H29DvxkkVF;BKhA@7f#B=!hdnum7&)?zp9DWBsT;)0Z&KysO z^(~hse$d~0_#OO+ljrakrHzU7JNPjw&*69QD_ow#?=19$Sl%8LVf@UN=kPm=JRzpX zZF#?3K7u+u}={hvKX76}yfPop8<^ zj@9F*AVLGlM6{5I=8{8Au~;aYY|0f91NlfY--s{Vt^0~oCbfA!oCZeH%L@qic$?**Y{_alchi~d*_3=nkI2<3$72<{1P@=Ih6d4E) z7VuC3zuq#0ee$f1{q>ysNMn6C*_arJga`8RaI|p%pSjN$qVXhN{u~;L=Hsx-_<;Qd zo%+Vc`XQuf!gpIkxp*wmIM5g$Y-$>ahMRIj0|WUy-k{_IrJvb>L%O~(*@P55k0 zQ!F{uIG7vE4@DD+P#%rX4-LvA_7{8bK&(EQjK*T&DDoaGL<^0DoID-LgCtG3W16AA z2UH&o*AEurk=PJECyQ3b!=O{4DKv=h_J?xe#89$e(qjTHzeZFaZK@B)V)>!?;9!0* z9?cKnE8F>KC=zcP%!hM{d=k5B*$VsfK=_fa`oY1_U??`2&qb4HdT20`OJI}a0Fp*? zg98H*d7xNAI3BMD8IuKMJs2*ald(T68H$IR1_qk)(E;SqWQwTxRiyeveN!A?vt{ju zLQRd)SRvOK52H>^g(Qjz4;X3{tAcxg1N$t^@T`NWMC*c5E>}t6Zxh@0bkBVZ$@K{;aEI}uVAwAG_!>l!{EZfFbu(D zWN>H*wLp{d5iGbh4kcpAm?4$T9SqWx3k^g=u`t&Bng$1>AZ|GHArAHoCt~3kLXp_OP*XB77{N!Q8ViQBwt!eHTAz;%pvjH#0sJyibSM&! z=Ogif0kA;0DLjx!n)=(p6i(JB!GO_xI3GtrkwP*T8yd{VP?cO$E{9shOi#eNlwWbG z4~Obw$pP|nA{lK8#q%*Fjl~o3Tr!?36b2<`25w#kL(u_@flwlm zhztzi6AjT^Q>c++Po5|~5Q)}<@j|i2Tp~FH>cqp1jYG-MKr9j&j7J)i@d9LtzS=4c zDeY6OSf3ONW;dt}+GxIwj&myUM8_Ek%+VeeGt#f zh!AYFw0scHw1{|rl_Ko{hG|IcN=0p3KNX<$*;L`Dd zSkyE=obVHdQqEzD^@@#(#}T21(nP4AZjHx}7CJr<`&1&#_#q;c3H6WJlJs_C886*OFYDJ{)2d^-~TtH9OPezoDxl=Ld{O)`GQ)4T^EaqZLz%mTx*WoKXbJN|()iq9)r{(D8k ze^mU7;+u;9P~?wIl3ueE=PNE!T%vf8;$e!*6~l^+iYpbH726fN75f!WQp_oCQXEzs zSKOia5ykTrFIBu!@l%R7DSlS*3ySwB-mmzO;$w!-*mnt5tc!Xk|VpOq7@i@h_;#$QM6xS=BqL^3QqByEJsd$#+xr!Gm zUZ!}J;`NHRDBiAkm*TyO4=8?1@o~lPEB;vVImKTnzO49r#Xl>)q4VqEcP#gyV2#ZJYH;zq@+VnLBVqs(!0y5gCNXDgnkc(LN;iq|OK zsQ4MhI~DI%{Ho%EijOEhq4<>I(~8e4zNq+$;vW_NqWGrbKNMZeA7uP1&R1NdxJ2~KR`Cmp z_bA@4_>kgbicc#3Q1KbXpDDhi_*=zS6<=3;OYvPrKNJ<)Ge>cO;@*l&6%STCLa|OU zs@SA>oMKvWt>Oua>lIH?%qwnD995iDJWKIh#S0ZLQ@l#?dc|85Z&$oa@m|FT6u+hT zxZ?K}f2{bN;x80mR{Xus-Y>6c;NVpm>O4tzv^>T=8hdl;Rr2 zPQ{GkM#ZdRLGd)j(-qHDJX`TR#fud$SG-2?M#ax4-l=%E;#UV1?gA@-_T&@^aY*bvS*sR#D*sa*Fc#>jH zag*Y(;<(}t#g8bSuXw5Am5QHIyh-u1ieFH?NAZ5ehZG-Ed{Xg;iq9ziOz|bf-zvVU z_`2d-itj4=VVKMKS6raDx8hR8gB6cZtW%6CHYpybm{we?c!J`3#ZwgXidz&%6(<$X zQao4jLdDAzuTs2T@fO9~74K5KSMdSGZz(>m_I#+QI#l?yTC?29%tJt6zS3FuVrMO11Q!%5sQ8BAnP&`fXbj33j&sIE7@nXfx z6|YgeQSmd1cPiek_*KOR6(3Q2Lh&iZrxl-9d{OZg#Xl)ZWT| zIz-dk{2F%gd?j7~|EAZqTHl)#Kc{$?;(dyCKL4nOpH%#j;&Y0>RD4D8Pl~TAT7SrU z8m`uPr=7p=rQxND*56dC;gF)8w;!wFv|@*1M)5>NJ73?d;Zenz`uSglj}l6!m5MEj zYZZGHZ9C>^c#$GpU&8+fE7mB^#HTi&xtb0`N1lJbeE+}oQ&pA+m!Omf*PUQc@d!oh z7qsOZqw&p($19$oxIxkS!G<(EtT>@~mf}YhFIKFqUnM>MZ}CZ5%j;0gD4wX8Q{1dL zs(6Ot*@_=iyj1a%iq|XNs(7d3mlf|t@wiCONzf!{IlYJD_TFDPsiCD z#f6HC6%SOj{<#$zjw&9dm{M$0w0^mD8a_pFQ1LXyF~wc=qt&}J$#ctZR*$8$oof_3 z6>Yz5)Uf5df`(61JYDfjMcaSpY1s0g)oa&i{EdpAQMCPdw}!u}Xyx@I8h%3YDMj0# z&ujQa#a9&nsQ4GfHx+Hax=Ppg>wi65)7L4+6pvP1t!VwOJsMuG_yNU&;#NiLZ~c&l z&sDrg@p8p$6|JB3a~i%&@jk@|6(3c!{?#98_&LR2D!!ulCq?U5eOtrW+$3_WTK$0Y z757rK{?ug}u2l>vHY)ya`Pa(#e-*y{wDQkq6~Cx>ui`fpEx&$O!#`AfR`C~#zft_F z;#-RURQ%u4tI~e^zeTtIul0Dp`rpc%Q?>n@6h{;%6+f(K<;*1-zEbfz#ak5bP_**p zYZ`t?@!N{uSNu;!D_4G{;omC0ruc^9-xaMqvFnWsblmKtc!1)eipv!vicN~E6xS$r zDcbd$lQo=I{Gj6LirW?Ky3GX|zD)6I#TylGQ?%EsGn@<;Rdq zDG`7F-R6p#I`#Mo^yT4 ze(6cqxRZ2$@T5!bB;9{|(lzZQ9XHC^`W>~Cbn`svj^0VSeLd-p*-1LePFwEEouuO& z+oq#G#L{mmu5qil+wm9%JO@k_IS$5|xBMpPRHn0!9fA84al1;lVw!ZUlRfNp8WGH! zb21(*cdNOSvrU&mXb%2XNvz|X10`64Ysw9_k?B~ke*D?G;?ns%0-HS%_VNVW^XB(? z{BpRq&*0Koh=xDR3q9<;afIzPZ~X_-1$m)|y*G-mx705|6mK(&M zE%yRk+h=g;yoUT1@j?%K@1qEN^ZQTaM>;USW%#rC-GFQR3@)Abkl%Z}(8J!l7GZCG zFCf3S5y$)v#ov_tl!5+<8~?T&66i4{KTY?aA4h)kO@4^|ma^~`kneH;0`ANrkx{MwKg^E(QEGxbLR!eBk_+heBseGmC%!km?fo|L<32ij*vrcN zzK8s3w7or^{O-cFeTI2_W~t+RnT6?L@6ng%)t7($d`bWI;-0PF1GwfhA^h>^4mwUx zRxahld;I&hqD^yy9A1jgxUb3{%!dcWc3HaF OUvQi^MnbpJ0;z3n&v literal 0 HcmV?d00001 diff --git a/Software/reflow_oven/Debug/Core/Src/sysmem.su b/Software/reflow_oven/Debug/Core/Src/sysmem.su new file mode 100644 index 0000000..12d5f17 --- /dev/null +++ b/Software/reflow_oven/Debug/Core/Src/sysmem.su @@ -0,0 +1 @@ +../Core/Src/sysmem.c:53:7:_sbrk 32 static diff --git a/Software/reflow_oven/Debug/Core/Src/system_stm32f0xx.cyclo b/Software/reflow_oven/Debug/Core/Src/system_stm32f0xx.cyclo new file mode 100644 index 0000000..5e63bca --- /dev/null +++ b/Software/reflow_oven/Debug/Core/Src/system_stm32f0xx.cyclo @@ -0,0 +1,2 @@ +../Core/Src/system_stm32f0xx.c:126:6:SystemInit 1 +../Core/Src/system_stm32f0xx.c:178:6:SystemCoreClockUpdate 6 diff --git a/Software/reflow_oven/Debug/Core/Src/system_stm32f0xx.d b/Software/reflow_oven/Debug/Core/Src/system_stm32f0xx.d new file mode 100644 index 0000000..5397850 --- /dev/null +++ b/Software/reflow_oven/Debug/Core/Src/system_stm32f0xx.d @@ -0,0 +1,55 @@ +Core/Src/system_stm32f0xx.o: ../Core/Src/system_stm32f0xx.c \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f031x6.h \ + ../Drivers/CMSIS/Include/core_cm0.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/system_stm32f0xx.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h \ + ../Core/Inc/stm32f0xx_hal_conf.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_def.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_exti.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_cortex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h: +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f031x6.h: +../Drivers/CMSIS/Include/core_cm0.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/system_stm32f0xx.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h: +../Core/Inc/stm32f0xx_hal_conf.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_def.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_exti.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_cortex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h: diff --git a/Software/reflow_oven/Debug/Core/Src/system_stm32f0xx.o b/Software/reflow_oven/Debug/Core/Src/system_stm32f0xx.o new file mode 100644 index 0000000000000000000000000000000000000000..bf6ed02d3b2424ed36ec8736a713ba82b0579ad2 GIT binary patch literal 504276 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 literal 0 HcmV?d00001 diff --git a/Software/reflow_oven/Debug/Core/Src/system_stm32f0xx.su b/Software/reflow_oven/Debug/Core/Src/system_stm32f0xx.su new file mode 100644 index 0000000..5cfadcb --- /dev/null +++ b/Software/reflow_oven/Debug/Core/Src/system_stm32f0xx.su @@ -0,0 +1,2 @@ +../Core/Src/system_stm32f0xx.c:126:6:SystemInit 8 static +../Core/Src/system_stm32f0xx.c:178:6:SystemCoreClockUpdate 24 static diff --git a/Software/reflow_oven/Debug/Core/Src/usart.cyclo b/Software/reflow_oven/Debug/Core/Src/usart.cyclo new file mode 100644 index 0000000..bd29a55 --- /dev/null +++ b/Software/reflow_oven/Debug/Core/Src/usart.cyclo @@ -0,0 +1,3 @@ +../Core/Src/usart.c:31:6:MX_USART1_UART_Init 2 +../Core/Src/usart.c:61:6:HAL_UART_MspInit 2 +../Core/Src/usart.c:91:6:HAL_UART_MspDeInit 2 diff --git a/Software/reflow_oven/Debug/Core/Src/usart.d b/Software/reflow_oven/Debug/Core/Src/usart.d new file mode 100644 index 0000000..31f2ad5 --- /dev/null +++ b/Software/reflow_oven/Debug/Core/Src/usart.d @@ -0,0 +1,57 @@ +Core/Src/usart.o: ../Core/Src/usart.c ../Core/Inc/usart.h \ + ../Core/Inc/main.h ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h \ + ../Core/Inc/stm32f0xx_hal_conf.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f031x6.h \ + ../Drivers/CMSIS/Include/core_cm0.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/system_stm32f0xx.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_exti.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_cortex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h +../Core/Inc/usart.h: +../Core/Inc/main.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h: +../Core/Inc/stm32f0xx_hal_conf.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h: +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f031x6.h: +../Drivers/CMSIS/Include/core_cm0.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/system_stm32f0xx.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_exti.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_cortex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h: diff --git a/Software/reflow_oven/Debug/Core/Src/usart.o b/Software/reflow_oven/Debug/Core/Src/usart.o new file mode 100644 index 0000000000000000000000000000000000000000..51c7063af4a9ffffd579847045bfc04da7a0f2ab GIT binary patch literal 509240 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%0D&StF5>Tm7t(sd6xT%`>0YcZP zR@#Eqst#%ptWNcaUd(#c7vICLL1kJG)~J%v;cSyCLt{svoG*c&Iu@&%ICOE`o4KwVCp> zVbz9Dp?j>_x*IT}`Y!`8s`{8V_Gc<zQ*ul0k_U0wGHn1{NSHZV{1xC7vj+I0m&d#Sh3%iyinP%7r5PHKdM zulgBffQQwVlst#1mmUQiRlhM85UTz(4(?&X>doym~IB z0B6)yl(U~zi^2fs)K^O(OjMtvuL;kq+bD}oRwqzZkfPqBMU+(a9eVZC)UIEFrK|s3 z0+yvNrcX02s3&{@c2RwZI^CDl8I%lNR)0!a!WH#LMPOIeL-f}ZUsK=t6c=$_J!c~< zbJRcO!6a9`b21=L-9*JtzWN7B5)0I`L*ZAbo<*BYvAQ!GtVFG&rMXmXHXXsr)Z1Tz zuw313ftVHQEgPV_peWp%5T!vKE`v#ivR2Gp<20(+!>(-$U#Y8QG`LuxM;p&zTm^AKf3{aqj|N7ZvZz{b?S76ZoB zA5VebQ?-=ViDznO$^f6M7fyux3-zvD04GgK0ix{JR8raLqS-bT*K$CkplZogGfc0r zn?_EVxVt8ZgM)|W@MBndYW7@(@Q~)4AK>7nd70`XZ_VB}zz%D67sJv|(=h?eUvv9q z=mIo1{cwRtG@g90Kur`6QGztSuR<8CIk*UxAsRWAS4TAql(^hbjV)DDVVbkF%N*0# zWy3FA^XW9OGfw;8IZfa(xF>4rwm^4Y zbBz8jg(S^B>g6SCvZ$ArqFM6?m?KQ*<=Nlt{F`OWN4nV5N2u|?*Oti^9BGH zG|Cx(i<+0Qu1&h6c^rYzS2f}LAiSoD`4H^7=1*#9WNR#9z;ZO9l+EO7{HQ;Xr(tM4 z%hzms2POrYKwA6@HMX>U7HPia!?IZOpEHCdnw9iWOEnRc1ea<2R4^&mgwWbkp;1sJ zbwl%HErgYtIdr&CrO9r9uv$||i~mi{Fukocnob=|YBeL2@YHEU^!(~I*ZaX5G}%os zY1C{w0h1<8^8*N*H5bw#Y|;EnYt}7IH!WnhHQBT~wQ9V(AiSg5zX!rLO&*nq_cV)+ zfOTm8pxM}|NutE;zGflax(AvE)Ya_L6pX;VThmDophxpBwFY`M20D6ssBv`z>(kul zVA-!pdIUD0k@Q0MNHdY%&p}OWIYt=L{QU`H4r_i~1qSLq${c$jFZC(=me6-b+xB6-q(d{{`^`|zW zpSFV*od9h(E!0P}dniW<)JkdH4b~dk0U_F1v^*Wvo+DwXwyPfyroBzghj4AX1Kf{m zFVJ*~&_1COBT}oTQzt84Lu6?Q`%2I0mNzVZG-N# zcJ5DbIHR4ag2`F!wWSD_pzRn3OVWOy1e0W~TL2tVw8K9GQnf!(%rtFeEle`B4gUDG znOe5X8OS|RNgRodWq1iPud6a%QyzC`O;t=9ekbah%g+Is4>MPC6Lw7m~8UXwO< zGfbMb55*9+XjlIW%Ujwu%Ixs;zW_u1)*;0H9qvLc$ zX}!L$O?n$95472|(ROLq-UjQ@F0KRgYIDVi`B1x(O7%YN66*8yYn|wl2DAZw2sWq< z+7986_E#zchqa1gSU%RiM!DOF)@>7nquQa1h%$yd0f%wzw=|ueYFldnPP%=6K;D3F1q>DTRWh8P=XB=tlp-2%frmv>YDNo!<$a zmu{TaB_CaM1cbi2VfbgvDCo`}F z-G*Pl&gnKa0TOlbt*|_=dzm_INxE@s#7x$?tbi~@r}z;uQ+2=5uAQb^+5oyNx+Ukp%5|+YVJmfNs)4F>cW8gF*8Tk@pjMY)2dL8(O^2>t_gxDtn{@heTwt?q zR~B?Fy7wsKY}Kub2fL&5dmXwq-H#st?&%)vgkOj5X(~qV)cwhWdzbFY5jb?~UZJh0 zM`xx3^yz}B@axz8N?F2yPDImwNay?}q73T-=`KCieMIwpMAt(3%c#!%cd#eAPI|;+ zy6j#E$8}Gr5PPb7^BLGPUDte!_gt5<8KCaX zJgm2&mb#ywc?zAsezgyD0eba%z!ANcI(vcoLaMTY^h>t^g7tk_a0u1^L6%|qmepX# z^b2z_P`KXm7=*|5pIhO|BJ|_*93u6X?;%Q*o_`yb(R!gjEMxTPv?QF=fBOMq#_DS+ zGd`uyUI<~FepUf2PwT^7;2y8v>knaq{#(kW>Kw1Ik4G7TQ{q^#|y?nH2p$N8p~S z@1eybP5+V+!gT#Hss?lPiY17Wudn89<}nld`oY{a^3F zvRQx21JI)Xk2cd=`d=1<-PX5P16uXo^oZ~1kE-!g+Vq>XVD0)yYJlC<7t$vd_w--7 zgLUY4XCic`{>N7U_x1Ob&^^%4^MkHSZ$%YKx4xL}V2}RBG3a{r6JCPwp?(T|VAZEL zTLb9V=ThrxKwm6|?vcLpAjTWiXD)(nNWY#3-LSrWF?5ghul@@d(GO5PJ*u~-FFT&- zOQ!lHn{{jLGn`rSrV(9uDe!+$nw7P{D8jd5_ zQNu|a=t2#H^rD0rHrE1<8EWadhZ`ibV0qlI=wp~f80tK9x#yiJMq6~l+L{9ZM*MM8JY zFnkSg-S98v`q>5<^?q{<&jZ174G*tjpgcov30S`2@ORJ^7`%hwUTEN``CeqmrA)lo z5Jru`5<@esrlp2!bfi^gn7jc{ZrC~pQ7R013DDgzTule7HgM5^n+A7!4mE~CON6d9 zR8SIJXITFPBh(ujc0t!*=%VS{Xoyb%YcljxU%%Pla~Q0}kYNqWTZV1)5zcKxB5hf% zhDDSe-ZA*!gkPIsjD=;p;oKl}cMYFXu6WPz>P84V3`0~icN!}9L3iKK=ZVMoz<~ex z6y}&=A$>01Z5VhJtjBPls`*~SY%jn=g9D|SeTF$6h|+KP=`FAU!w=^Gj||K0AsjTM z?|}P|;VK<44;${6L-*KF+ks#shW4#688ry#1CJ+$Vd^rD8O&o~Id0gI19)o4$j3m> z3=?jEJvW5kfZq#)1+9@z##@xlI2$8rrtUXRa7JhsW9o8P9x(Q?Ld%O*eMGiV-r5 z;l;4bG`fTUvWyi}Fvka^sCj7`?)HkS5R#<7XG)P-%Rf4~Hsa%Y3kE<4`N$rm_1=2y2YFgyUrPpoaH9ny< z^p4SyHt05E1brjXZoL0D*j?lAv@zT>*4V+M!`MT8qE6$>9q_wvJVVE$4~(roU|q(N z`(WM1uQvgDjO-RT^coAv@}bd@63;&41_#9KH)hgY88H4rx<^I}N^u5_i!&e`GG- z{2TlZnNk{H>1CQgtw3+ng5RL?F-`V|(AV^i1P+Hye;$RUpXr-$MDaImpyVXL^xhW` z9x;9QAB2IXCv=({WD?gy7;JK;c1nopJ8EGZHT^-$cBn~5MNF7Uw-0d4w3CXhaML~o z;J8WlFNTdUZ7zpjr0JEHA&fE|I19@YraiQ|MVnSV0E;pC(xK8RlNBuj@uu<>@Jlhh z-v?o;=@lFJrI~*D5tiwuggEFjOusbak}^$6%K%xX|DvF~VB%=>izfL_uuG;M6LeQi zZ_(Ow&E)L>cHMM|o>;a?y9F%ApQ0HpW_1COp*8C z*KW$7bM(8WWGPsuseLx!zG>%aSaz9`9>TKQw4ej-J*E-r+V+{wQ900Wa-nYMfJsCv zgR|p7nv^b%59xloIUd>u=HVDiU6sR*i>(nX$Z_FSK&WHB55_z07~BrOC`U2fo*2iq zR0^GPT(}r4-fz?3PL4EJ@j^EMylHzDiXJ8i{`JW?nj$=nEgoTb@@c?Cx%jgui z+A(Pkpx$xyJ`CI9IQt14+8moFBUq>7$E#r3KCIgN>0f;i>$Q_5th@&Ts_tdfA z4usCrKcnWY+jLztz+<}g$Iu;~zF3BsfzuPW!y##U9nGA}(+4yVW=}6z4wHiE_TNKT zFQ7+XoU7-fFO)sa6^WOB;A7F$B)17C7^-TY40IY9%A*~FLrYqiq`|$Lg zG~Y+3&qxG}PamMp!t?2Ehrpa?w7i30E;C$dcDT(L+Y06}LrnSL(HWa)We=Tk+5m^J z8Sw(JV>9;BA`m{~&`+>DJ|j66EMmsqMvNCZW8+_ld1A&++T%{nXnO>c*co@}T{<;m zI+e0(sqB`DfHpnDs~Pz3w`llH+&@OqE>hsS|-GSuuJLQmky(JUcYvZ~RS`faU|07~<7@*^jjl4~;+2r*XBL5J$0FuqSrXj+QvuQo~Y0Y=A-*=2g zcc1v~yHI#c+z)8(?D1v5bsgcr@et3}L9 zW}BiRylgi13?^61W>W!k)olKK=&qT`=*zI{X8n|*XPXK7pvy5c(B#QATSvDt&ujs` zM+Ihcyy0GGmbVVVBC}7&Nof9T6yka6)sks$(|I5t1 z=+2j$_uN913Uk+1INUIgq6t}PK1?SVRp#3$JE}Ifq>qGen*U}CVU77LUqG#Sh&SBp z%-^01R&SoBL(B&Ax4(w4(fki8J(|qd(Wc&P9!RGYE#?b_(A_ehOf&Jed2%VB)qD@l z^*iPcw3)P-Gtn5m-TXeaB=4FxE`;u$`Pc8lufzPpSAb6QYPy#D=9cu_ADE}5L)c}$ zVFOsV`S=Xzdd!c}9^Gs1My>sa=4GD&`pi#K54ztxEEjCR{EY^{BXh^exUxa>Z2Ij( z=Ku9VIBae{8SJrn2jvSR=70VMlTq^=YFIommj`0JG4r1;fQ_3==v4Blc?G2u&&tx3=3!t(YcJL-WsTc-RD-G0k8wD`DK?ph7MK+E4+U=n2MK$9fcav|k{p_ZRc zgD&54M-PMrmJ80oq0sUmZTLl&-$lTr*wXSV z&Y_B~(((gZs;Vq|!vNKmM*1l?E#0U$Ut{^29s|`{ZoUPFI?E5}>x}NnMN~BOO!jQW zu)ULC(Ao6E$;iI(7EC@xFIfL%5ev(K$vc(MJ(_%-rv32bw_kzD6L z5-dZlh8IE?X0`qigvYGf=<9{!R!cuZun4OaR31iJy+y0k39A5lQKGG6^g_p2wcG`q zwDR{tl+#v?iD2s}O>F@yu=4Ci z=prlLc?gTGiq^oP#A=XMzEZ38>tRx6b#M}{rN*jD45+obZi&!!Ru4|Vuik2NGfWz+ zLY)CkR_V79rP*o|<*fIttWv-_th7G>I<212bH8tOW(A^jSxuoy(rxuAP39h}*YAS$ zTA5L5&}UV(8?4{Tj#9!$R(fjE4O*!j!G^6iQy1#7)r$ZKN39k-#kGuC`O=Rbx4K1l z@Tpa17or@tUg`#uSnIe8(4Dfr@(Xlv)~9SBJZ&9%9VYSC5tN>uv0g^sPMo#Qv4Sqa zdL`u`=d2&w!7s_Wx(p`C*1>eMQmj9soG#V++~06Ww;uQfCK=YA$q1HdeSHmBmi6Zh z;DU8&5u)T+->12mYyHX&2=lGSHXurYHTyo?3#~8HYExwW8s+jO*5{5PbgA{%)Q>B( zF8c<;a_g5cgYiEIYkmj9O6v_YMXRjiF9WKrZ&m|tTK`4Qz1I5kxp1$uzR(7!x2~cY z-e|2E18cGtB>|eP=WK!HA)XnvE4_Ffmbfw>ULJj8<;z<|-z^{Jt)ffv;~lGnLjX@k z>F^Prkj}z`ct4tO5y8AOR0c)zo}GY66fd1lB2Msz>DNZ{*3x?&!>fJ@%ac48KL}%a zWusuHcst*RE{@mqJ={<8mQqJ7p7%-}Mo;FI><3HXx%B|jc$t*)rt|inhc1)nSqAqk zUhhO)L?ti754tMe2C}@#+pK~~4X=y#hgx1TjaSD@rIt@U?@1j@8hBZ+K-kE0q)MrY z_cJAO&AfJ6o?3XXso-~uSKtQWZQiT&GPLr-X{Eix`<_N`<9$cHmv-KvTQIrHTO9|J zd%XFP5O(l>r8l{gHcA}-dYQjr#z0jq|bQSG=ZM;9?izEFL;-3z`@BTyA48To0=bCvfsu?bJN8}=MBFD zHt|)^x!MHJ1i0Dk+5_D|8y9kOX}gGq`__8?4BZC-y9 z?2?VF8|<=8`3JDPVzccR1iNapk#^tfHaGZyY@638L(R4M;~QA!+1Lo+mv1xqBV0s* z&3p6!ifqEDqgiazK##b@rb2>Xr8fTCVN!1MH7#8?Y$7PTthCuqX==002{W)3o4xem z<87M?nv|_J=ZE2N-{wb}Bm*{<<$y;v??qtPL7Q=Ek`LLG9tRt?Njd@c*yi8)fDxPU zcQEXzjWwm^Pi&6}8%tLaGY?vyqi+&iayLq+ZVDfQn$*F7bUw(H(0@W^(EV`mpZmNc1gPdxpta0 zu*|b7rxhjNZd)9p6xd0o0}Acp+i>wkc0JT}F1FjvftA>OG7qfO?t}l}P-gd&5|-t5 z5qqJlu&eqQx*K*aHvv_4%V-`|+X;`sHAw zXqQD@g(kaGR8TeBeQ*H|Eq2k?_?fruUP*zj)vjbO;Evr{JLuZ%&Qb5I-OhvV?p?cY zAH(mS-4p5#bl5GM2G(h(SqaPgcIRoA>9YHg%8&Y~|Cpd_nELw<@N1l^aDcFF>P`9} zyKAcbS+MS@9sfetGgVgsVei!a^yy6h)H~(~HZWD{0QW~z?WhAjICZltEQh9=(QZFH zHJYk|=Tq-ce(lEpm$L1H{AZk_GR?x-rU8!|? zif{H828!d)4}$PCUoU}WJl`n>aEAX2Z3SofTi(V)P2l_I!{Ho%f)5~(KZkC?dA{rw zSSImv!XZrNv*ee;fAkS_Y5eXl0qK0lMvRcb&oF~7lRrSM%q)KIHb4%4J!KcU{OqlO zJpOvxN%Hw_9CQWz*@wXj`P*raE8;hI!=#w6dk!e!@1Vq`lb+5{C@(YIw z{{C^8RPxubxaumtpC5G9eBB3dxXJ&8=0gqtiUB7@@GITnaEt#J-PYUu-A4ee{J+%D-Qh2x$I-@*I}V3-es2NX z@ABg)ZR+4xQf}JGmuA88KK}+CXFcF|(Yn;d7yIJMy7>W=8ujq~S3=jzU$hJGkiYQ? zppPF*sn`HNe<@-<;;*CQ)iZd@JfYI0;PeLEqXlmEfEYpYKd?M0Shx!iE7^eL0u$-*90!+5MCF2LQ6@m;GYf9j(WqPMBqvrW|ctn2)b%Pz;6)V6uhGbs}Vdn2){bP7bL6~bXLK#LC_+{bv6n- zXiset3{kSsEGSxlm@R^VuOPf7I6!^h+k$F3;cgWyp~I#-f`8l*vrSO@H(+d9*=|@q zo%U@IbkC<mNcFZ!fEWF5TXS zeqV|gkS4cZS*0}R>gX%il{@1_i5#J;Tu zu-_r`9xPoP1`PmjhyQ3%^>MJHoX^)`_a3mL4sMiyggQ*8bR^87mAXI29QJI*u;C7t zbliH}VeECV2#4h~k0KpDnuCF&96IRtopAVwD*b4OOsZ^R9PZG4Iq6_UUza92`0och z?{M!b9FiQ`-C>#R@XsgEr8q3-;UZEU9#fW==CEfOAl+dHeWa1$;Cc;~nGTk;z-Kwk zwSe$~!_HKUchTYMAJAQL2sjPlWrug(2fO0%9o5BG9eiFz%xs4WS}t-N{Agv!b$E@k z$~=d^sZ_{!Ncs=D0*CZ(peuB+p=M5z1K$w?6+7@B1IirSsMNdRkmm!-N{1U=fGURw zTR^o#3tCM0`);RE24Cawu>!2t;WOHq>l{9%=6b8c=}!T794crnXmgk=!9eW}UQ}t^ zbd|2kk94I66yjxb8xnR<#UHcl)Jrf5Yf8pBphAALTkz@1B8nXL3l)XBN;4EsNRKOK|-6aAPg4f(H9>f z!fiaTqr!I?#0(V{GYA$Y94^B^$Ak;d1Hy%&^zI%P&OQcRgfKE24w1q=v^YiycRoPO z6GG?rAdD7v&`J~|{4)k{QuvILy;x!57l2bj>2(B)6Y9PPJ1tyB`Cz=z;tpb-5$>kl z{;V*}3j-wxA5_BfoN!?Pgo(l$dKJ$LEohlZ5>76Ld$N!-f~5$LxB^n~ciKXjCY(=s zUApk;K7`H?j+x_JhK7Z~|q<7lq?=5O7I&i8^1GgP852gt4^k<_hmD2FnwMUdcntRnVbMwmZwT8=fJ)&5JuIt)t`nfE z7EYqf@uu(>YU0%hSI>lBt?(=A57r4=X$7kn#t<|JmtBTKqi}Ztph?)@h|!ycS11W? z5kCJDez%05&w<}G3 z<$$RC6m+hlwZB2=CYpU2!h@oCx^?cNt<*pB5RGTT#8WhR3)mr1$#UqtL_hop<}Lc} zb?AIVcXVLBqPrFNDThT_l&t%SemV@Hzi8MCEI`yjPx^?c!5$+7ie^)(5G2Z=JuX;u zovu1W^b#$jM@1PaxXw^f5Op%bL>V#&kBKxj7&cr~$%pQ^D6SeTLR3X3BaxytZy{!s zC~H21CqzdnV~H01^cwtPL~$w5ofL_wF&`_6`w1qeL`T-aBu;dYs)ExZ3qFMLqWNZE zXGBNe20JVI;!UswQ5ZE>&WZk^t4db{nlBi}TE-+cNk#1y)h_a|jsiIW6 z1!5Z)AJ6oJ)mt_SXw`O@K-1!Sg)wS6P6D}zi&azK2i32 zFzFYq&VX=0ltCTHN1{vfAsiItQ|DwzWg0QidMRRRu+2WXe^6R-RV%wOEc zgL{DZtyl<;h&TH}7${yJ3Sp4gaskE*7N4OGd5GBQC9tDn)kk2V;<##De3&?pYLa7O z;Y#Sj#UD+E?zlKE7VZ(^uDO6nar#Rzi4wOwg6@P^*^cXs7Jo>KM~t{U6zrrpA{-Da zPPhy>CBD8KesSUhv*34HZ2cKnyg0NH?2OoRBBGoXe@>fJg1Cz2<~eb61A--rduR_o zFJ5*X!X&YnGO}dxBYJI8#M!ikq>9rik4zKKj)E>-97O%W46%C&Oftoneuhbwc)~82 zToCK&F#4i+>;EzQYM~$ z98fOicVP4i@mg9jZ-_@}SF03v(wbEze(M&ZREw+A0r)$DsT8Uax0b@8Rvf?Zl`APkoex82t6!* zpSqKe#Z5xMh&Yd`>rt_Y+HX(9GwJmn6TeIE?zp&x7S*TX-U4TeQz&+@qB*xF-a6;luHzZo}+OL2Z$?^ceNy$^1u(6UZ zD!@-k7Td!iP7*v9a9U!~3zK+BLNnaYNQ%3_&PtpY!68BN{tsa1By*^>lPD>q*?(TL zb1|YMNnWakNwQ@02!tt;fA%0)s${D#qNGXg(035&5`_zHR)!?Q9VVHQVcLDOB(>vU z7bJVn11?Ig(~0IK$z9qoFH1IsfnAX>RHt5*+};g#O)^f$oYy6a7`SIkdb44fBU$q; zAXidB>qMSJR}YpiIr0;REs*S^)5k)|5n3^eB!{R~RxIgS0$qvZ-b;W|$(nY=ER(2Q z!OA5cQ^%!3@)czsHzZp&gH=j$zXDWAwooZsEvXy?yD3Sxhe?g3We0?{5`zd(C#iP< z)Jvw@<02X)FR0DbD0#aN!!}74P6cb06fl4m$+}R$ElEF3%0bE4FK`%=WE_P1u*8x6 z(9vVb3hJMYNM=(}F)I1j2W(98Iek1ZE@||K`%_6UttihVzv&R=xg_f**b9k<_HZZ0 z=WQ@&=6nKRKl9ED__;8@?gcx*_|T5$%ABK(!Hu~>GvFZeU=%Uk8H+lYcrg86<03qn z*$L1cV*aMj8oU_m@8IXn?6rWA>Sy^e^S5IJe`ePVm;^BQMxZ;wa8%d^ zGAeqgLCh3t+XXX!(@9eZG9rxmowk=_jD}Y4aOOBAd&ill{cw+9 zPQL{f$?Vg>B#L=JIo}CpQ!Ol`ncMU|Pz;knE$5TW^4H)H%OofOrxVAk1Q(Qwn#1DWE?=agiydz2g$&k^;-i z%neJhD-2HwldBAm_Tp>IoAgD&b>XTbR%;ZBUMDXjBzb2^Oz?GAk1fe5g=v( zv*R{|g-qH%U`33EGOJ?dP0EE!nDC{DQp)^#15n0@MG%%Vue8CWg4s-2&<*ByI#8=* z#{0mkm=%QxUCp>Q!{H|L=3-n+4YT`unA9?*GWgXo2099>$6t&L%Le8Ejn~LDd<};t zMoI5rGc%RubPK~!HF1mCx)JO)V?n83E7N`o1KnW^l;pQD`DYQVo!Mgtc9&_SseO+r z4~9br<40YiP9}wRlKadfYNtG4CW--FjF|S7ZpLORpog*j5K(%W160&MWa=^?>|>5n zN3fr{ybZzu=AGZc9x;)Q&1c6=P*%zm*97r&p4p<>yE{Wt~= z2iUjEpmSyCt$@&t-7y91AiHV^;Ldi?1oB|l9fYMPyN&Y5L+qQ>{`O-3+X&{(vg7dc zVg0SaeAxgN4u{#4&mr_vLKwp) zH9>fi4W<<56#EyQ5yi1$`ZF4**jb_M8-U7j@H8*`+gJlExO&(v{9Gw1;H|8$%mkCTnScE{kPo zfw;gf4+FczrqJgJm)YV*1iQk1`5|;y+4b~BUSmaGFuBf7r)FF>yE+mkIqW>j*>l+e z6Lfj(ZaSRJXN|Nn6tGpk&=s=B;sHhMrFvm2==Uc!oL*)C;Q%iveWI#0#0^vSh*iA zqLG~z0BBms2yKg`GuPpyi$%fEtdY}C|AMk)J?uJPh`^{>wZZ^amem(5Ii(tL1HRab2 z+0Q65?qg$UruMVD8X+8DU!wQr5xcY$mV;~!z3fBmVk$<4+3@?&J!UshT0g?BdHc}$83Xe zKeuQCLc4G&RCyoZ1m~c0<#f?tZrpEl=MQpQ3@~x$7C1xa!6k6ed2(jHfJ59RN(j8T z%6$NDPMr-CAC6CpoG<4+1@4Erjntp;XK_f0Fypwf2(XKs_ZGk^S33zk|u13N0+IuGul(sHWwk4Yt8Ko~AvL#5?$X&b$! z5mM1bK&138mAO&U?X+v3kglZOeYDik3Bnj@?^Uo^sc${tl=P4u!Z_)QeE7vnU%iR( z&PcPjA@o^kD<$#?(x-W_JSWxef@Pv~FTE4zrGCGHB}t1@!IGs~`Ys_wnsfmyRhrv_ zC~4B){*Sru4ved~_SU_tUAd6F6i6VE?Caz~WWcs|B{#spYKye7%6fNY*|bHLg%QXy zSTdMULI>M46HMEi zm(k0^)#0Czd$jshGMmS$zo07nc=hWvxIIyQ#S9caS-ls-f1j$}b31hQboJM7qwtyP z&Avd*wbg&1ob_z=ALpR6=c@NR3r~2y`V`tjUZ}ouOH_HW`W@oZOV#cDX#R5b^BbV> zmFk=BLxWeV$Baepwd#F8MDF$K_m?7hqk8Ug)O@qL!9eb<>Xj5Z-md;+5t4VR?4TMEFV{QviYag+Y!M&tA4cyg`Zb{ zoJZjo)$b0)gTAc(d@^8PRiC{Wu&=ArbR2zCJ?#xV{oCpl&m#9-_3%xR`@Z_oEm7r% z>d{Sj!jIMeO|te=bsxow18WZF(+{e-`w|o$T=O+exrf%gbSVlCt2vi*eR$2B5AnPs zYR;X5E4EDF!AF-D-uIW?z*kepkyrUg~btJ&~%W0&8$N&y9TkBNRSA^3PnV7e`*mu$z}ge$Se(jJ$@!eRt&D zRFmEtxxpkQh(tEjbpJ8}m~;@^!t zoqO#2kuS3A!>u`|qq8Hd?Wx2ZX^nUnxkc7>DI`m*+de>pqpgGA1nd}V%_0<@Vntfe z{8a01^4rs_clwY!-8yMgbatk714-9e)^;Z$cdoUH*243wJ-EadSQXbHx!hVg6TMt% z-S9H1thD~P5el!eF8LjDS6ic#fL&{?rZe$6>u)CmcD;23QU3<3c?%>rT3eHv-ef)X z7d-Z6>wXIPtF6blsJB>u_!7yj)&?Xcw^^HSjs|yFAJOG=r?nwb_%18ahuqy(-Q7sm zSO?P9e2?`-663trdWoKq`>cMUiq_{3q4|SWir)B#tY@hvJ#1}Khh84BHu?(5qt+T? zTAHBvCf{0=4-9RH>2}{ zSoiIXDsNf0wWIJI>lsST?^+MjLie6^e=VxKZ!I7R`oKCvBEYQfI|2L1`U?rf$JTFd zLGBZ4V_Nn;wdM_=!DrU(&!EBQR_ou9d}($58p%&q=RFwUfukXzQfR9>8O^4XmI?fF+tQk zb=2R<*iRdEX$5MYKI)Siz|I(T*DMsCIqHa6C_HP_%6Cxn>`}2Dk(@KC^F4HZ?x^QD zr1M5yO#AiuqfYq&4K5fpji`U&s6TChKtk;u{d7iOJ1pTxN%7(k|T_h7{YL*G4V0L78#?CMzYv=fiB`DMl*D;&}qgdYf*TO z@p%gdbFI-&(te#$dkS*b8&ls#a)WWpQY5R4aZ`}oXe_5DeUmZ3^|;ws@)snljl=H6 z=x#BNCo#Cys2`2wHlvvVeYYFOeTC!>;~R4QJB>@BiH|^g?m>UzPjx>LJBA&3wyzVzh7MtI^jKU@6q`lC~QRZ#OqxsS1$}C29 zj2U_!uw%{Fn^E&P^I>k)rRIfapvv*)eN&8z&{^iBgDWdSPne;&SrIxsU~*ZO1S%gv zZfW4jacF*GV8jr#J1r2qm(m;lZ87m;{GBq4d~uuUod0dVxEnPa|I&?;&Q0G!^&R(p z5F_Xv_#Mg@es(y@_nmnK$`>0UDv(DTyYGy4=NT&=q_Y?Q# z_v{-f+w^>UH|oq8whhX6eTh_hxBe^9w(o!y_&s-nt?;`){1?=j_dJz}J?`HXt@b>A z4NB&3Lv3i_qT|s2;A@oK7o^TbtG!S9ZM-%hI&UDFK>h{7a3d8RI%7Na0+rq8SnL@!7}3vPShF3W1k>7+t`~9sSAu%$DsK| z#_S_dc(Ji;5A=DN@hF{mR~oBG7EUs+qpR#}a}uqd=a?J+9#zgYSN|EX^UQXx-1%lV z9U&K(UqvzGE6jIyLUN^J2ZIIyyaEYe9Sz8YWL&jMSCIlql?MVFuR-!);A=kbp}-guxrYOPqYC**Ah8h& z9}Rpw8o9>;$uOEf9=MPC;S+(4N8ou+26i)0_*7uS6H)kbAk9#NR|2W~QTS?L4SCXQ zfp;tvz8<*sCltOBcs7DjzZp2zM4xX3e!3CQdplt5kHU8Xx6zpVZeaWM(C)p!S&NXo zA6QF^#Rq|_$wEI2oKMr_M}f7EqO)%TZ<4%z8yNpr6n+;tlorwN1Iyn;gTpH0Wc-I$ zT4w-uOyvormd93ZW1z~(mDNj-oKkr)^`}!SFQ%X9w91vAqvq+A8`1Q0MrGR=R5`P9 z7U{-WmA{z;*hQ7gZbk0m%K1kjcS+^qAactqU%VVOFRfg<6&`z8<-OFDudMuTIbgR{ z9zF`W+bcJ@0uQ>Q@`h*7?ykxoUqQ`#Dj%X*;l9ebG!_uzmpT zjts_6N0noP*n2?5;GHBJX9S;q4Y><~Z_wR-VekQJ4gU_dkepu>Ty!c5FUD=$$Xya# z^BQ_t9{dxDvWyPJah{uQ0w9L$rktqv}r zoOuh3g&6Lw!BtNqxh;4bjo!BhcfJV??g$QChTNUO&*|g5E7(jrdv~yvO3oS}BXW-i z4}S}=XM^W#h2$07IEp^s4z6X4@<+jaZ%3bB1&_KL4ZaS3w>7GK6O12)!f%6rierG^ z1#jl=KO(euCz2yWe^`!WQD|d|zKcUIlfx_t1?X-#D)j0LXmE6B$lgef3Eg%UY91S! zPgC}Bq4#e?&{?Ysx7ydRo>017_{jbP!2q1Q=9KMFNb%=tLY+4hE~z@~YrsyZy7f*JF01;A+v&ur zx3)!cQq`k$KAc?jBysnYst3lP!D&@5?~L5(RjcM8cShC08my>l4I_7X)w#!`!4*}{QIff` z>g4V5gsZBypul%^Rp`G^^O~x|X+FNT>X;XhTvxRrDbe*+8<5%DP<83GNLE#ywILeZ zShdF`$URu~1nu_^Rh{_^nm=8&`*1XPt7=sM&-<|I?Pe4nGi3CE9Lta&*~`5{e&8&9 zIAjdH0ACIHtPO?V4f&duxSxh>*n{Rr4!xGF;MAeJZH}7f4}I4jaRDcwyK)F5IER|Hj>M^zd!( z!jO(19(xV#P8xpV4d~^J;Ya@)xpRi!NL%e)!(aL*n!h~!vI_wFe)!>}<)^Io;MQn& z)_NbzMeg49#w4_iwEor8Q7bkZB3m%^UK_e;{jLwq(_d2v>%9F&{Jz#`rvPx5aq=qU zzBIDksP?#d-E1T;m_MwK!nZ4Xo<8ZUwwbQS8fZO6x){ zGX{Nk{O(9JnEuknDDT`OfdS2Ug~H0ry%yv5cCS!M-TtqP=GkGZCs1d{z{B{vQ^#*n zC%@zrKzH7OKK!nV&(Y_swGefK-P@63^-SPf4)lz~@4<qMj+@CW}BAz~P455ep1>@FVA@`!OYAfVk zGLENg`?9fF1T|kV?jDQ5ziJ%$9tvMGUZOeib>p+&pwBmqm;M_KJ}`D}M(!hH#tmrj zsWJ3PxzLz&4PgH^ zR(*nY7a6I|G5(8<;dGr}V(fS^s$6Eo7XY@xc!R{{N~5I-4OSYf|B2i+M)%1`t~IXy z5rsDxi=Rb<8;wKuL4$)sU(V7SY=eL7fo`{ZoMdAAEoi9N;fhw&+;RN|{NCyAr6|u= zQ6$?rNbKtRWHfr6b=zb3+x_bcP;>SLC*W^SJF#?^FqOtRtuznp`rQL4@2%uu`ntOC zd(U0F0Nv~JLG-iFW>nM;xak2v4>qcA1>i{Iy>E~lW1Pn~{g?6EJCHlk_@lzcN z?=kwQ9NcT1M>>C>aqZwo=Cnm8a7AspNs?kf#!#r!)QcVWPVhSn#Y*^=cAXC&5ehn@Jw^$ zHE3{-dHgr%>^yVxN)%pT?$?7V*O*JsLheTMBMe@l**6nW`9xzl$?Hjmc|MYpjX!RI z+?#siCm?gt2)5x#x}L{YYLgD!7<0 z8n@70@{%#0M%cHF-%)*f$5`_X3g0y@{2sZ_j4NJ7^0~1+711w@d#51z(l~&F_{#W( zGUV6Bs_&8e#^?(m_pR~88yL%X#vxUh%kPcn$;N*$lDDGDkH+5P(b-SN?@mQ82bz~} zi<$?Sm;8j>!RD+tQS%Tp&Luq5yq70P4l_f4LxaQ3Y#PmvFxTvi!XwRdX)#-5nmq2d z*xdJzsItVgDEb^_E;tssqs`B@MAyfdBdB(rYVLdrk~7TX4?!Va<&#B$)w`gnoj6#q83es}b~I(TR=D&H5}iVFQx!NbM^^lC6@0rmw>wjen;^t<~t*LW?Ep>p$P zpf!Z&y%TtDB)Wb-&^Haq$AKHE#eW`nXlLZU4D4W`r*8wFAB$vJkgcXvdeeH)QC_cwy6$ne(B%tyZVjYlzp@bszpJ^rS@0MviXB>bH>K+M^r z1q3m;&*qep{;})J_`7fCQq(`x_|t{R9AH|W2w4dXDsbSgIkPiD33m9JoIb89ycBsif6rPJWam#v9afC$bD~INTc)- z=4NN;_gepxB`B}m=sP@Wv$x1S#`J!GlDf_KxX9JC6i?{>1m%S5Xy zw|<4uUE8j%K>g;wQWg69ll!BemW!`P`BGyB_v2Z{{^O9GZJc=%I=RgF=pfWvVJyEL zxyy|^X$!f+82&A~yTO=Bg1O2_o(kAqMiU)gcN_bEhTIxs8Q<+5 zJb^6qz`#o!=RtvgK4c^6B~d)&0waGrk_(NAmmvAKu_k~~U1XeAfyx&f-4x0$G3LGq z*mC1{ucP-%jZNQ1x0e}t+VQV6{zhZM<>tb@QS%COOd83R=AINQSDK$KL(QwqH|Z6< z+PrsP)V#sm?Q6hRnLjdg;C8cxWaSPs%qsVr$8b3xFdw8Q{e*euo`5}RZp+nr%50|r z_-V6pHgeCHd-Abs&F2=O-LvLnu#tDEz?OY7kYv zF!vve?1(?G^=|_zG2)2A)gevBw9tA_x3e zpgWGj69OlHi{z|8f+XkcKzx5B=LEL91CKp7a5lx?^8#nKqTTs{%@QcQAaK=PNG=Q9 z-Gz250#DI&a(UpTv(V=if&Rx(cx50)UcEA~b{2A11wvb)`PG3t$=$9Atfock+Q4Jn z*VhFGe~sk&!0(?xFE<30Qa69}x)>ys`z{eZ= zlgOW7TyTxv=C1`0r~l&3;F1YQ-U;3q!!te&p0+J=Ux2J3_jRy_Q~F(S8vQdr1wR^w z4i60lk3jCI&=Y-l;IW~%PDFA-Xq(f~?!?d&pQFmjp)>!4!c#(jYedacLzhyDI6bua zPJo>eYNb4VR%qc1c)~fM({fI$c7OJ|!o`vOCpuBF;0E)x6^x_fq zFH&*ZDz`1lr~LW1XuNe3nMCrw+tF>)Lq`DG{CCPSyQioU46J$Irq|X=IP46-LwZNG>;4gi!MeV-6SR zO5^wBv@4B^a_IPG1ZM{& zjzf_=YmTFB^f`0IMyT?7_LF(!cq9h~s{ep02L(R+CvuAd|J)L}#et(qDVGGExDWOWr~9aNze;>>deh973PZ1Tud?vNrI=E=XPp>_FD= zYGCjsB<}_$pMd1OKplDZXMx8k?tdOgpNZV}fj3EdehB=INb+Og=)a=tp91evi#(_@ z--N=&mD^AqTT=NV$=Okrdr*5kx^jEEW{#;GcNw}qw(^>9ksMdq!SLs$mEY1^aD3$* zr=japE4QK$d0OS+e@EeYmA8D2uFtQ$9WfGiOknjp0O2bUR$|>>}Yl6 z%#D%UQaPD4bxq}&H>1iumHY3DcLx8-25W*lpNQN&!D$Dg=Doo+ z_o3Z=!FON86YdXgL?gxn!IPdv?!n-Oi_qYq;4}N6!Nb92M50H6%UjXz(cnf4Q21DI zfCA>@!Hs93<`cm`a$7tJOhfLe;HET2JdKOmQRSK7LRx!23ifOa*vG*;Qb;}tc72Zq zp9Z%-2D#6IU!I7^ejfY-XX%UJqn{)9W$-!fm2ZOmG@E}P+;JKD{4w|$wX*|54^pZ= zC^X>>bbWAW6E48w&^?q=mW2M*g5;>s<6EPbqeI8gvUg1Ak3{`rL;ppC#&MxPRU@}F z^flGF<3p?dj4I1Q7jW<=hpwRzc6R7WF5@|&S=46F4fQTS;d!CsA%KANzRU)fhAxUC zcUkD0-y^psWVB$okA)uM?*A-w?%U}4o6yoclAl6bv;lTl)$7EiB~>Fg;M1!fnuBCz zRf;0;y;Zw?kL2wt^A7ZR#E`rHisY;zryhvp<{^PC(folSJ6($^j}1BQ9`y3ekbm}} z>lcUIbR3e`hulO9%V$Gw{Q(UQANtp=kvnDR_y0of(xDyOqrt61Py8FlIrNYn(90u3 zzdjgMo*H`lPslw#^!{;xy*6|inb3zrH~1q8zZ$x91-d?X*mrlL`J!PLu0XPM*ay$B z>tVlcN0oDit-b`g<-^`5)4gig&TS}MHEhVI$lX3He=3suhW(1d?qkC~-U6LHJM5-Y zQ03KOk(2PC_l7-4-2Hx7{Xxhr8Q%UGs{CvC${tiXZTQKwQJ*(_=O5rs13Jjs|xQf0Q!RgTpVU0{+zS%SR!3dH8SkLd_3{|6@L7Mf}^~fw}nGa`XEr zPG7$n{?6Q-gV^pwN~Oz(jXq}TX2_OXlbj025bHbs+z zj4g;bhZv)`MB$;vn+KqW!;I~>MGuD?9sh-<%gh{|OedP3Qs_I?TzMICrN`JlNS<=#il!~TV_JZ3&b1K>;MF=QKWn0pODgAdI76y%l! z9-z1G*no8?Iy*Hmoiy{3z@}8WRs}Mfq4~Xmx*d@FGVsg}S{~Tyzc`#Jl{x&~I`cAm z+vcStYHm9nGFUJ=mR_jF?&|@K&4Jad;?+<^MW7;!zozlsuYXlx;D4A<{AY|EJ1#bF ze$Tk<{O*cz^Y$1VH^6^$>m%I@X7%*W?#YM8hU>>h#_iF!U`}uUz_{*tbH@%0;-9WE z7IntX?OrgpXW?Ma{Qj=K!Flug2FA|mUob{~joD@1{4r8{Y&bl&e(e07zVO(--u?v( zCp55c{6A6`sjr(Ht`AR$Oc*DP#&yk~JEnhLf6thnu35d~di%Tk7R>G$H@B;M*WUh~ z|MTM<*k_;u^BSMuyI0TrfpM|cY$`i0-m_P4H|9Bqf35YAWZlAr<5KFyyp&Qas-~P_+j{fhgU|;X7adW!63szE4AZ#z_|Mi9ZCF?S-rDsl8H;k(b2D;`C zj_u~A%FpiErE5XoV196)J$eSl?plFun;#gQ-P=Ei4ECe!hh6IG!wV;%03xj}Shz61 zYgZqeqZs7QUp!}z-g%|UXV2{_RlI=Xk#5w`cCEnvpWD^jk3#(N^V^2++*@|iMAXbZq?Qdsm`fR${Wf zd`Y$7C9B9X%2P6VAWJ4b({82F#1E6|9a*jp7d#bjNu&~1VS&7nE^KL!P0hzsS+(RP z3gv}z(Inp~+L}&hV$J%!>hWH=RBJvKYsItLW8q|?U~q*{^){Fwx4&d2F)be<0yU^< z;QSSUrCG8inr-IHCfd_@Cx2GIQ9>4l$d=C}no`+Z0-FoS(-@6S&02LG75RL7t|^(# zC)+cz1nOiHInPQK!35Wda0=Cnt+*0{OYbM{CX;9PBfYQ8dkn#Cc)`K!} z&y%=+3c;$cG|(^;DVRrjiiXH!YN_pm#ZPRP$OBCp^6|!|)>wxgpvvSuaD|501ReQ$uE8V^wn(YWi*FA# z$TkZ{JQR;a59=eFCPku;Y)tF`5SYjcozba@j&xx?wM>nfOujLbpXegwB$CZ| zYZPdQy&6j;!%%$_TxgGOS)x$X5+y4j^cf*%RL)b z?VQd`+Tx3=UF(#og&^r|2A+ZpO%F#Vxi1vw3ke_8Tum`Wo5hifx)dfA3#YTOe4S?@ zi-0mNXHF8SWW=2z<}_+HVUD7?_SO_RbTm^R$>;JyCy9?%SmroJdPw5R?(B@Tcc0oG zi?nK5NvzAq6Uk^tOD>;n?*REhM-KH!wANWprZrOsJV7^+GIXjCRFP`Sg(nadC087VMK+#05Io}!uS)GwgCEN3znN%*3kH&If_MjSdbq(a(ppKpqM8Zs zkvjFclh{4?W>X@kP}82O5}>e#Ih(mTn+i8zJ3D-r{7EQSYkM37Oa6uRUoh(k#nmQcYR# z@spH;P`9x4l z5KAGLVIkjq6EHeYF`8q%_7fcm&)rESpwc%`w<(|Mj5lSnUa`EkHbz`e0M-^y%%F+_ z!PeSOJsu$4B$;pQ9c)`LcUI5*(W5KWYG%ML@Shg)u@oZZhm%QQIgt{3tFddKM@f=` zx-5abqDpixu}pnF8;fRQZ8=AzbxLHh+?N9bZO+3B33jkctk z+VYJvbA`GM$v}$2aI87!a9B4l!|;hsn&8+{l;Sa>KV@_6X&^{8AI^`rYPIN%Rb)B% z*nZAS>LO5bPF7+7Yk!VKYJn9Pp#gbAjBp=BR!g?~0Z|>^bCApxlPt-*z2a)W^@`+gAmKHob z9&1IDk|K8@NHDMvnJ2pIeK;E{w+7MLNKqxg8Z%MT!@)5{tLbqe>ZOK#<78oLD z;{qj)w#M4^azf3ME>IG7i!hDJ40yIpQz#;EoKT4%$7Nd*iL|Z8SuUcNslm=#V`aBT z5lpQLL}I0a#?&jidBJ*emL~AoOe&jdYx0U=8bF>)_C`(*Bnp=nnF}ELH9>V0=`2CW z_>x6%#rd=8L?TW#Vj3_wp6Y1zU{ct|B+bMp`FQvwp#^HEH>HwVxeHT{D@2d+MIwa~ zm!w{MZYD%)2=saAQ{au1v?y<(AD^3+17$D6vpTb7=egq5W&@A757jGs%TF`xS&xe)iynm z$pI6DROP3qBUU+BsvQin16x-l?RX;A5(Oi(MD&L=m2b{rT4*{7Pr$T+uVtc5Aj7DW zNOEIgQ?*4~DNw6D0o|!2vEkJDV5m=AFUysSf%*x`6tu2gSE2^mV!|hSHmtI=S?+!< z39lfh2FFRq<5@iqmdV2Mw=TWO2JbFn~B(8R~H5*cC-{@ z^n`qvNElH%wqTq`V4k2hF~+LcGfY1bn10j>iRliU7gQ1^x4c*sA?Yj2qG$!)+>|Lo zN>Ec(Xld_+NU@*j4o;K8N@^$n2UVL>P0c^wt<)N=CHHoy){X7$xv(}gG2br*Y84}8 zi6^F|0H~LW2Dvn>PJa2(X8Q^z)RA*1vR3Q#q@uJGypWM~6%ImeA=Rq24y8IwP;@Dp z%rwKYnrT+{WKAuk47O&lMJUbo1F|sEWOME_bYAKZ=hD;T!t}A7Gp*4Un=X-r0Re4R z>(@Mm*RsfEw%L6Ka=qQKu+-{bdFoZxreK{4qL7k1JDTuOdC$%$fOzH6`;(j z%$u#Cx!Xu4s9pF3sI*E;pnp*fccp~WgZZ`Qg}{fgqbMB9B)c%FZ(GX}?J-+Rbr^~* zAY$r#)+iaE3v{0gNv)pBcsSdsUWb-PT4!MK1R037v})rJ>_TcpKA3a_6{C5YD^mF8 zNVd5{bD?fP{+I^F4c!q`eUc?IY*Dcwmu>vVUI2#fCZSWHTPIHr7Gz zbi6V)#2I5uBq5p-VGojZ_Y}y}A@Jnl+%T{m)-D_kyte-O*M;~mpSP)dtg|C&X-d!E z(vCDXfme>j!c8vDDt^H?qM-!li1wBa(cO!Su%~RJO0p%DOBV1tivCJ)1&e@+Yi(jN zn^!rg2WXOL8$H?@1wu`0xobOxcuU)9!TX9WRq1pz62la)WIo^#%`u8UCre9y#B?vn z+2i$j%tzTxZbM}`veUuNGt>Gl{OIcIli#u_xV{}?iW#TD^g24>HV_08+vJ=@dQ(>;iY0!zxm{zApI(=hO0{ly1rn@1p?$&TUvC0*cN zr)>taA|@IUrT~D_nU#&}l#jL`GP%{DX~4Ecw9g26lwa~PHk!dt-5HNHLr~OsCk5eH zvsyMz1_TA#-D5Ng35D>NNq53Nw81jGE{i3Ag3t=-Y*9m+J8ucf#DXzfr{(2XNh*jc z4ao#JE38rWj_4S~%ml1cu#5mnU{NbgX8ZtU%x{b1?eIrg^X;6x6oisYYd)EPQ3EcD zWE#r@BNQ|gl&5mdt+1oUh?B}4r^KGR855JqWO~fRX8PjD1%*IpHNBM7U!sDCipJ_~ zae+h>>I$t;=}f8}BbZrh{~#^*WPk(SYVcrmT3QNrTNGAOvh~ka^GMX?`-1*AGq0s; z$|Z{MdNm8TRL}u_$Ek^#`FLm4qA^i2wzDFZ$l|q?pSmL3+6W6%spx=m5SdJBN3n)f zQi!LWkwwOoia68S0sB7D2)jpq+Zv0V!F)-@XneYj5(Ek6>Criw#xH53Z~?e1VuLN` zI~G(c(jd-n)`e>0*gIWujh*uU?33Inft@EU+E9Kiy6c*#XKGYsmWSqtc5Dl8)>h)ZCc_ zp#c?!udFSWsI`BPIJv*MjTogO{&QukFKx2%Sn53$D)Q;}Y-)z>9i-g{V~PN&RhR=( ze`H4qsM>KNfVuo!3;Wb?B~XBjlY|29+KghJPR^Mmlr*M9TqgqP7y?d_2FUcdZUc{F zUfc$fm(JAwZHCdTHQ&@TC~`s?;fdW{2raaH&_pgqhcpIGUWBhVXf8$Wgn4R>!cLq> zBq|gc6|$;Hsv@ys1prCTk*jArY%I}^J7R(jkT7%AY_4gw*TqzG+4HS!isvU1<=jok79twhrI!ebtp-ToGNej`2 zgpd2x`vRa$x4fB-@9<(I6=;cIg5PQ#MANfp3TsugO-E2eymz2$R$mX^7+6(MB8<|G z=%QJ#c(`7ujFMAr^l#7^4F^w5I*h3Vv~3+g1P(^CSuiZ> zO(J{eW~8#BMMp0IBw{t;V)GYAhmfxRJpN z@Ir_IYiv|Aj5*3GJD1SNI#|1ilMIv2_w{rQ zFoKgY<2V{ITkP?+^+6(y$~;bBVJ}drY+98ljEog(72nCSdlnFHg`r@;_`C%?8)Mms6MGNhmgY%%Nt!*Xa)L1Ot zINLtw*hgr-lLxAB!mw6V^$ZJJC`U+(f!c0C!624HoI}BjXRcw4$Qu9Vu zmV|rfwO%cnn&f&JUv43`v2BM-w`9R>rh9A?4a9NbiE3SCG>R6>JSy*+at0NNj@(Mc z6@ZA*Tr!2Qsp;^RBH9{zrM)o^UII6R{8g_^oPh8F*@^MZIvk0Xb7tw=fo>mbghC1~ zP8Tp@v1cIUgpI?*cJ4lk9@MI#*$C~D@C}kn9k(TFBZIHOUSTcrLfoh=Wl|9PgjDk} z%F&~@5mi%>#zffKLYp%Fr#(grdW`(9d#o?$vHpMEV?#lY4d{_mttVl;*VdhFoa%Ma zF)N6t7Kr>B99{N)48l)F`mkIeqd`%@8x88#BTWPCOOxn`a8$Q&7yZ8uA_ta&DB`$W z@LQaMB1&W!7}uD>5rMXND#{?EhWbcYWPnDRL?~p6#N*`jxI47D!wF29DvG5YQw1}7 zi(~iKyC(~d4;@}pSlCBA(x!$1Z%2#1D+WplwqxK4l>M0qUKF+0h3HbXGewTg`Lq;Q zij@taxHsr-0>=#yQm1}IJ>yX-5+6`pOGZXfLU>gq+7VB+g8*r(C|(;jG8Ktcu7ZxJ zRgNS^1Snq1$r0iTNJ_P<)}d1RmBp$c zPAI4e${pl*gGkXGkn?_I0QDe5RLu z|A8WkW!Iq+Kvo+#0s*aT>d%}MiGDps#7(r#9x4iJ94S1a;NWFbfqRH%XWaY7I>d2Km;#%-%; zG0@LGvqzIjhcFVEFU&}GDp;63e=08{5%l%;%~EomGDj7~PD%NK?$vmL(IbwRwV^H? znLMds0_2Q_N#Tj%o-qyMlc>tcoa~Y5J?~lwLTxS-f`fl1^07n>v@LSyBwJg=%;3>| zY^#f$i~!zft4l`<$&>TcVqsq&-GQ)HvZ@H{DaQ8TG-NzGouQ*Lm3ks6s1<+(|F|gX zgeFW(h~7mUQ5c@b!crc^R48u8i%eCbg_D)#6ylKWq(w^pViPD-p>s)qFrFb?EH_gf zw5>>ph#^pbq{jr20CiLHiZ)10^s`KL zp197^lT5@R=VmGv8<}NVglQJG-+7`NM&p2-@wwut3efSM$MZ|7WtTS#n=eT6?0MF{ zYFxh{q=T`+L=e}Knyo*^k9Vc z!M2IYY^JPc#9Y}Q&7Fw0$Yt7FXsof>rdJWi3+-#!N77`^Fyh=>!&TK8gkHb7_HOaa z1o}*1c!jll2gf$=o$Q;pcWkgv@hpXjo+kTS`jtQ!M75xr1sj%-9`O*+phY=HkIjjN zPc&_g5vql-?9FTKF~4_i*TC*u+CQ+f^Z7YFgY;#SSJz^g`TT&Vfb(j1S_|{~XatwA zA!F&rQw|f$7H)c7RUkIYb;ZCIuw(@|O966Na=N^Snd2cOzrs6S1#AFiF zaT7pZ9jwKn0!4yL){)lv{4`OuN=opBAmKz}9g4$BHGvZcd#S`qQp9y2(sL)HI=}@J zoe0A4W@HUS^w7M7?v&6pwPyA*DM$s_Uvn;3$1s*Q1M zI9)^IuYDDOgtjRwFW7g{<_~HP{W_JyCdGk2Z-M#x5-06g%q%pg6@6+8kZ*JFMZ}%A9h}74! zuy=4Dy=df?JWn7SneHMV%BiKox7FdAQgEyZw!19?Lg>{`|Px(1Bd(rBW{{@Zxfc7&$dYQSjKz1<~_9Iy*HwupXk*Z}9hoDvSlR}$^WwZnLV zYG`K-UZj)Lg9c%o2|%Pd@XZATr#RuD5=;k`o|lei6mO@&Zl!#V(mHYe2b*vZ26#5g*O zl#jdEB31wrtZ$)b5qAp^-FcX%g>isfNpD22Z9JyVqI_X zDTNc5HUN?$vaaPm(Hil^BSbi#&Z=uCZ-TBNFNWw96XbFo!9H^U^nc8}wyz}cY82M1gfiGMp#u5-!jJ8{>%}qD}865#VplU3$#b9 z6xv(0O0{Pn5?id^gW^cx$qGz3%SiOVM%~IX1I$9A-$t*5K&4E{H=aWbTNGAN@xtzD z4($+2rl{~T%=>?Hiiev>ygY^RX~IW1#U5L~nh^SFHO|>WKF9#vSBgRF;cIQt@B2VI zy7$U5n_{3XNsyzLlq38x!W@X!Q0&^W8Ys6lrowVtS1K$I+p10xKxsLMS`=fCO?K3j z5St4icxf^i*iP|_rzhP|GNBvd)>l^!@We$C`Qlv|rJZAP7lsFf{?$sbtcbD}f(mRT z(_`=i$>uKYTOe3A6oW@-?8blgfh(N_>Q`uOh}(pAL8gdVcW#iZ!yS@>Ki~nSuA`gO zffFzy)rcV#&EeJc#uOC7WJnkhXu2Mdli_f9&IT7pctXJ~ccBVFN`$8~8FBF5({-3S z%UYDz8%bP@*eZ%&YjoqjnZPNiqaA~qih@6F-OtVvmra<)CT<2 zxCktRmA&JHj*EmyEYr(e2$d$va~{cqAG$w&b`NP%;_ zqYOAaT8toNp!TjU1Fm0ZW82VCrt$c7Hnz8anZ_gnw(jHJDTK+x!BtX7&$QYX#g(3P z+r6%uNK^~XdW*(lXJq1m$(`v|eF=)fxuPvzriKtv9K(ifSDAP%tRiuR_j5Xh3j0+I zNTf|!9wjJ8sFcSCUQ+t;!Sx;yxddhj!DUzO&^wR@i}Dd_+M3~Yj22T`+vZWC7Ir=# zZ<7l!kH6#IvOJXmFmf7SXk}Ll6cy&uaP)$WK5?C47KP9P%dBFWG_{K;3}YtknBd)> z0355nPPO6bMz%je2%Zf{i$odwm0>N2`57ANUIk5z;6m(+iAVFcg47YPMM^7GfrDQ8xZq$6= z*GJhlYU^MR%Zp2FcrvH2$Iy}D6P*1`fd%$8k&nS0;GYB81yo~pp%u=H)M9=EE#Q$6 zIV2KM!IZU9CUKSa-6}Bu!M?1*8RbP)=tbIlp_qHXSJ0tgV`2WJLjfTE2n$C zFmgt(!3hU|aA^W|L2gn-3(g>`HPuH-oZ~W@dy{m)^#$(@?~Kra&z{?OU6>F8c^MdN zW37<n<^xlE8tpZQu|%waVbchpJh zaz<}O?YNL?zhqmnYj6c04(fEI)9vtHI=c#Ykz`slo1x9n-C(%%#`5K4q4=t}W`gr9 zrpzRM5#V8~C98Ot5xK$Nv(qy9zpG=e`nQT&@hH4J2L|gH?e4MW1dPA_$GA#wQAPbQ zn=!#q@0)nfdX}rAb{-i4VgZWTK%VLagBFCU7fArcK+kKr=LB4(mQw~L(1|3}Og2s= zaFCmqSr&%Uv5|z*fyOFRv9p3uvl}yF*YgU|_KLbtnJn4JASJjx*F9&=j4V2IYHa4R zlUNJ{YGX@9;$Eibne`%=Quv|yz#u9HR#$-&{hCVzQR{Mz0EocH z+EWiJryi84Q6W!tZ+di{LvkBAb<5K9p#b7n#B{W3gW8^4ec38H_Lf|?p1TQyhxlp> z8y@#tgHIh28tH?|TMLcwI9Ys7X_s6TEBRhJs)B*1cwbw2^JD1__@t*}S4MeoOYM7Y z@}ali50?Si??~@~LRa;M5$6@%2r1mB;O|p20{bE?z@<+SD8Y87XA-#RM)ybZrI9C% z$VER*qMQxYS==L92!z0i?$q6@GUp_iZL~zXn;|lF@XjL`z&QmS)Zg4=iCZFKPqh`6lSp*G??wzLK$N zcvAWY8DPla=gghxQwQT3dAkCOJRGk8 zC@AXT%^>SA@FfvWmyYVI17t4wbg|0w7EzcH+Hf|7CwIK%cA*C+ZL;n)$ha75LuC*S zk~$=?h*xPWE~p^!_B1HPaiQc)-~|u<@P8faxGK^<1Y3NKB+tPr%n@k^dn^y{f1JS@ zN(-_LWkg+6Ni57K`gzznjVo$9_Tb<6yuJHl_?}Sj95oeqdwuz?=X{+^Ls%Pc6r+Hy z7S}XY9m~@pO?EUWn4UyGH8x^|*p?GK{Gw>GO2S2s=3~TFDT27%0qWd5X2WDj&;A}}pu%$RXj42^RqcXQ+)4EotbOlG^_xO7! z<<{lyo#c9Z9bu#7$zVzw&e>q8>YS&F0uu`xZ-ZE#8 zmaxGm!=KtwS!=;x)bb z+PPhu&+X+Ed7fexS|}}Po3Kwhkn8fX_V<3`ndyq5tGI4b1SRS-{G{~VHUftNsDjSj z+$OaLsHT9}O_ihCdpC|mpEyTi7;oZaWVuj~iR05W@ibxjr(Q^PqD_{jh*%WC)c&B_ z%Pnb%q^6G@O^_+TDB*--JgYAvPxyfYlHC9kfpbB=YjO7$(e5r!&|6LfXUB%u`ae51qU_HNuI!{U(ByyK7)0ae8*4EdUvBdG+ica>l~TmW zB-#~KJ!Qqg-Q$qFnk2T+Eky}FtQf11`?s_lX#duM7q~AtDVt4kP4P9ucx3wlXqmwN z^53o@Mx~-sk(9`KMF>pBrowaU&q@s~HzDez+Z&Ag#F{eg9cl3rmj*F>Tx9ls`RfQ%>OhMhD4bHwHAAiv?Ty|$UYM1)pgf1U zfgvK^JEwQBt1sExhp&_8l?g(YL4j3)uae*DYkwldKBB<4wu5qTTL=aV+K45^f%B4| zzbFKuwziVEk@;F7R8#JHjxe|CBtLmMwsL#ffcOu{*hh9P+ZW&McbeEHY8qO=}N z5&Of@04T$%ZG%#omWXFuMG7hArWme0Q`pn(X`VZj{ut$imyk;|arx6V>p#JabU7Fp@-;osg2_5Kg4L^?^ZBP=0>T9;yT~p} z-0_kzRYxAnorqoY`!l>B|Fx^A#`?OGY&NAMvp`YtaVfQzl|{AO43&V|vN*r( zNsBg7%a+6Kj8BI`u!TnoFI&ZyQQR(zdU2(^vc0&nZrLhMl;%2~G~pLK3ZD^mq|UMr zgM9e&m2gYF$ee}#y`nu)x&k&6kuY99LC&QeS9sKdEO$CTRmcNPoTsnp^p+ z{S;L23|1 zDnkJ=(bA>^u9(=uc|}D69*t>;ppy_wU68`PcifV+>+tH zcxg>fAo*{P!8M6!T@`}vg$n<$!9X+_PYpU}(AsiX=Ui`~%Ww1yD1o@h6K0h6Ds1`*X4#xOh z%gNzhok)cks$;kcy>o&(Y%IU?6KsamVY4H$Lb&prpsxCL1a;wRZv=I@ldUFLeF+!B z46k?6pTFG{6d30tG`HcUjiRCAt_@y1tPmHcs!Dze*A*+*aa{;Nf;Q}yr|Kk>hPxa; zC9&{&T-(2E3qxApt?h?1#|NQn68_gIwR{Ant z0vr+`@ge*MHnnMx1W#V(0bV4KQFsVaa2Y7m0r0my*B-;YGdvNjzXq-sL^hH#cB?zX zyn(9>;Lrh-Br@I`&R}L}Ph0B(+N+|D4VKov_+a1NXTtA&(aV~<`?MZSwKAky-e5JG zY6(Eim@nv6ZC;#Z5m&p|BAkF&w>l`d4j$Cj3I=IWR3{0=c1HXQM7CH9LLFF4^+ZQB zm8c-y$~N+ZUgc1D4HVx@HYF}EZTh#H{0=;~^XNPnS!WBNO1#zAi1&wiX zIF==1k0OthcylunWj}^yL-mT_{TxxS1OqJv_R@UE_Y?m4msfm$+M$O!i0J5|~qD3spKdTkkw{l$wHnkTyS(!;wW zYO8qT_^2319ClW4_YV~nA&vfPe>^O#&E{aFly+^h@7xTqMEuCX;3XafPYz18^s4F= z9fWXN71UD`ESrof0Ow5Z30Tk%JEIntq)_e&fIk5MJJofn>u26zg@tBi~7JjUH@ z9%`U`|Fl;A%Fy*M495n7vG5)V<&P)dxcwe z+`-RM*eq22KW`xEu&Nin@T4RGZuhQ{~yeu3*zpMzBG-kVjWjrE5vH zx#NUY{wArWPs>kqYpClxCPJdcLGW_s*+LL%+ZvtHWMItEd)OCpBibB4*vV+(xfZ37=lJsf{O4mE=lqs6wbv8_uqKG(L>5 zB|gH_sze1JjfVb(n^t7cdoErff2GwK@i$HQ4x~EJ4`jtBAu&TT5^toPo*|9)oRV@? z6b|qMG9J-gj+_Bto5xDTwj1SG{G=k7dV~`WqCMz3k5G_^S{@(~)ExCCSB+x@ zGl$opP+M3_rjKh#`9isOvMs#aYTY-c%ZfWecwwbBJ9*rS>nwkLUQ<3i$s2Q%#jL5X zk8piGC-rk0qA)@a+j9+Ky+k#R*HVkU?F)GAM4#;D*{TjdlKZ1XLyV@BC0a{^?w&#D zvlrrQ1YEDe@0J$gCWk6KTR~;~3eD-<;kAtZCGo?gI>9pb)9os z0CgE?s&$e=3B@uec{D6w4s7FI$(kHq>01h>AMXiSD|cd|ToniT;F5r#W2u>@;KQtt zEssGi0yBksyhpBfl1ZaRi3Ra|?@0pq$hlP{p9dlaAsshguMYu8%&Tk^Iev#*5hcTk zQ&(OzEO6rq7yuO3N9XjxIWk;D#RMeN!ZLh86H=|`o=F#x#AT=kFZz|&A_aQ{aZ8^% z^v3(5xWI6wu!XV0#UDgar7{{d4M6S$^fhlrra0e;fCC)mMBKLXDJI|`+Rx1Sl~Jcu zdd2+GO-j>odj~FY=Y%^JWGNBFvKbe0rFZQbu%kf5Jj24gw^RfXE)1{D1u9UDbF*rk z4wICLERuG~DxHH*r7WMSS;5gKVO1b;xZP9;mgh92H&WLjy?tGK_2jcXdoI9fg5It^ ze5$d#rx!)I4X&t;2Piws{+zV>Dz)#U)HcYoURaYP{u4A&){*Qq_XFO*FhrIiZZ8KD zaK^oM*Hw4?VCk4IYhMe37xt<-1t6)8)s&NG@<$UzJJ8SvQ=Nmb(nLU^grl2K6$k00GVWRQOC!YD+*tk7{xhkcupM}$-YB0S05!!;k$U zoOz(~AnC_@ja|Jm%le9BC1sQz$x|O{V(gBfKDd*+4|GNv5~^+hZ1BzInXyQsU|0{@RLVY(A&r475D0pGz3RMt!S$nTTWJ`eI)^iQ&CMiQ=0Zgxg zBGUBD7po9OFgL0qt?x7>839ujO98fTUfqKlPvm$ZhPr1EJ6>NnXxkXvtZh6%Q)#Ih z+V>OIH99WwU)m(xD5eJxnWsiBmdg|nhp(@mF8@Wh7VIN8c3zJP=&8!?Wuh{LA4+m#`wl7?9)y1GzIPO_d>NE?9={VWf1< zxg1v=dbceuq&PhOg}L|fVbVhwWV~QKBcv*V3b=Dj4*hAdt3;WIxpBJCW3hIBCODlrmvtWDm1=(#rsD2U0$uj{o zrhGV<+ENUD$i>zX`yfCy^WeDflfXWM+c&v6^=BDGcxnPr3%V+tKd~1ixa_<-z zfxY~Awu3{S58ad$-8^tT)wC4gHd^t#=!=L8toB`fdw1gHnGg(DoX=JNT z2vD%2Wf+?$L{G=f74mjJOyiEw8}CJd4L^TTU;`$p18R!CDNjN;i~6bi`F`qT>&a;q zU_TE!d!1ms*&f>h3qeB;ATaYJW$itAA>C@pxCyg8gV6tj6ISfu5gCVMk04nL8K@9*1RtS9Bd_cgPjJyB4P&gMOFfhDv1^%_#FSY*H~l?5 zv-1PJ|LBn$4uz>g0WWi(a4E3<2t^!Mo$Gsn?L8g0)Hf(ffPf-+pLHHDE&$4^hz!W7 zL1W%osRco%&IQqKc?sU+C7ES-lNKep9cYDO3R{%(oj6?dM8tEZU8WnhVq5sbwbi&j zSuX-T9i-f1C&l?{5f`VR+hp2D|9l|SmcYXD*i#DZlf4D26-92L)r^9H`&Fj8Ns4~i zM_=_giRiWhiR*5?1{_bZ%rIjj5ChQ)I+|+l$a2@%rzkw24uIr)aT?~49CI0ME7gLd z#3joLbE{^lE2~j);enNosc!r_V$8+^A+&LkmS9jbztY8xPfR34Uc-l>`f?b!)}o?| zxVCm_Cx;SKu?RSxNH@wzsR}&Q(KQj+7xja4DgswvPk?;#zcetYZhcq$ufxDlvbI`r zFnPEYTXCR7*$O>*c{MLbo2&$W&HE(elUpbUWB>jvWhHF_l{*6 z#9c-QZ=$m!9Vx&ay3$;jCNpG7d{IR*^+_{#wOtU@Nq$y4sL#@Ng=2A<68bYz7K1(!KxUqodKr0*Sy}@qi5J#N!@GW-v*?Y*kuaj-3Lk% z75W>-CuC(nt!ckirw}UmAvD~M&v3q%qntBhD2%3f(wde+e9o3)v^~32f0WM8_?qHs zdZO(}v=qM;gaa=UIm9(a$QvXxy~y-k2&!trR?@cPz&vY6x~*+VK8Ed+M4^c2!#u3+ zC^D)YfY2>$^MdCSCzOWlNIsHDEVNKd+rVIFZ1X~yrqIJNZJC^WAV5wny8ZloQ%#CU zRUI?MFMn{|jEPA(74$!9JAS-s>lHEag<+qFDS5#pIYZ;q1}v9R($(u#6hLGD972I?^*6 zcx{37Pk?MF&82muxSi80CRDJosWsLiQ-SCbSt!t39%|$sQhVg*!c3%<5_EN2F_1y_ zDDqBurnVFq2NdZ2_2Is$^bc4?9)FSOcYByA&8ORd%ne5d!PI zLbN{UkWO2*Qb*YylW?dCUmk|IWEGX@wV&p3qUqfT zDrM^}Aa>5}U@$U!a{kXQhUJi?jp4X+2Ue3AV$C?GOCft~dEOhk79*0ItTx#-ywd(y3@%Tri^qK+z55WRXv4TeaK-6vAS- zItTwLDO&y3*u?K1Q&rKo6X48N9@nqIxTkz@LS&04-FvBs7-{QqZMR?Kk;m%qx~n_A zxqc9E%728R7>E}BhZCEy;y&pIp8yj_hSDDJ#zH?Cv`2HelR>PIP39d<5|@O@j^@3T z3O|bPahsm5(@0VbOSRWwh$W~oq6+>4Dl9PwD%#JchngI#;mP%hN{CN-8K|Y6&DY|L z_+Ua=8G!(Kji-2ILwNFf{e_#uAA*a_Wu|!Hl$Kqz6V?C0GyC#b)c4*ttu-Cp#MZ+o z{m7()X1Hz*dNtbH^t`2~x2gxLrut!icFt|S&U)^`3VGFtXvcbCc4U(Z%%Mqm5y}m4 zXUmpVS#3H;p+Yg+U5Hr}zc|nY`;cpdJp$nrj*RA7or-nM`3(tCRnsLlebxe9`Fd(5 z!G=AETc{cNK=MZUdbnL*!|){XCu# z*g4i^oB~*ydEy?pXUfDpI3Qq1Rw8@s1NEd$#8=`w_DA6jf4@X^kY-AAfT0(BbCT?* zGG8?)T|upk#}yoIP*lcOB>PKtGt@8|7ws@>+pY#@dp)?sIzkKpmU)xqR!Wrq%(c$w zJq&wo3f>4rYByt-wagTC4Ybz&eoMKqw$c@Rh^Jmm0-)7BwZa%7$YE$ojCP_8p|RLI z4%)82ioAvhGz@A03_=dCVofV;0Md{H#BE${Xl?_PyG40t%+2+S=q7lt@q(bj6Oiy#)(*|tmk9VxMmA0qw$Snqq8X2jDa_| zNAM5C!Ea%EP7(CVV$z4zWO7<v4RRao6x37*^=g@HB66IKOKm_uX42&s)p}r3I zDA;k9yB|wea9uUv6d-;0l$@4C$gv$UAeGc6Vj}K z%c<47OR)mkJ26Qcauob<)uMID1P8Bsa=mTQ{snvc)yI?ZsZj~_aKSdG=( z*LSh?n5|p8z!~K>b_8s6SpScQRe4cm7+G0LjWWt?e2971OXB&l7IkE zl=mN$V$rrLGUY2#j&qaU&;EO!=bY|7Ju{%>-My|v#PsQz>FJmA{=!Vxx9>jQKG5$V z_4A(prSU)gpC5l7*XPFn#J}_NUkb{_38@Qaaw(n!cBX6g+R?*yS&8-V(9Y1{#83iS zKa<%8kxwSRG0IEK-D&_IAWjtWI6PIdS(un#qyyO2^B`LSS2H=1OlM8@lM(~F0YgoQ zu(jmn@r+2;Iao2QYE}mhEYT1!BRu@h@n#v)P9`mDI%O1#l2d873N*XzmWE_mbHPTa zeq&is^~a90w0?L9gPu39W^>fvCMQz`^tcTHalKMSfU5)tDR#^WU5|~nK=j>_&d|$b zQx}`-0qZtLUs-*d^bjrV)rQ-)QrYKs?|@2}UIIM3`Gn%E5|1W!p6m#*sXZE;2yHh& zkDircG~C`d_doso;r0huX|NW#LMNCzvMN@k(=U`w{R;LRy8~E+DgVFlo@=w~*sXX* zJY(8MZQq`OAD5PM&)`TBIE*J$ZI*)Zx|(LH?k0B^16o0A#U5|PnO2j-r@zg!13Nu? zc7U+r_Uys|w`iYzC4BqH)bp(_Tp?y;7_TPh+v7{f6$2wWCVwDn1NH}wXG)!A5hLS9 zJRLUZ>4|wkb7SG0Lu*e&!gJ{#8UVi2aO<-Naaex`-%6&+rgj1UACXjLUyvU~KvA9@Ox^A)2-%%es)}1NGaOm@naQOFhUI6 zH||HW01qrr-XkQ0i06l>)63#g(TN+^s|gIKLPl8j*`*M%sUO8nTMbB9r4P+LwOnhe ziH}iWiGde9VkmDSp1y8U&%z8}Pc6 z4-Ma_S_M@_tkySt(r54_O5x+c!lj=%Vmme@b}bk@GuW90=e+9&J#=4ISJ~vBZNP$_ z`SMG&v4nEmGT3^Mfjn39OV=BsyK*$jKQfmdEjSL$7P zp$tXh5vSR9LNVkwn~pcvz+AJ-af!fz?8vNQEF;5HiP9!owOA!=jJ4y-!Upwy4uEZR zbv^nQMFsl2U}>hWB@18PVbE zCx=-BRYJ#HDIuWdw{JsvJVlFcTU15)cA|CCO9)myqA%C#!l}0~$p9DI#LV5Q(F-10V?S}0w$7fSUBzq_* zFLi#5E&_2P?TGCy^3`$#gxuUOw{UM&Fx%b0V#`%Kxt_MPL+sRM{uL<|VG(ihzFNKL z+(uAvAF--URrtE)9 zW=jvFqta95JOB^76u24)kuwoUrbv%Ss7^~wU=rDpZOqO9Q`!%5r{?6E^DU>56 z_C*(~x-vQ-`WG(VX9 z{tjA~;_MH-E*B~`==r6HsVBF{NtAsZst%NJ@xIGtPLG0_yLt&HQ3MYxKfHZU?c3Rh z_n&@#d-p@}T*NQm1khZsSne+(&m^Hc%j9^=UjGHjI>r9UYViN%YMq9W4->j{)-xhX zECk{={ap#3sXk?x;jHqO=E`OFU>9#h^TVld4Jc^>Cp(;h%5c$!>4fR|pl$G{&+LZF zuoXz1-LG+uqJyw#sCLll7DhtQdq#Ab)~dIYZugmPv&>eZC&Ie6C9D%TKA1h!k=GT?o!&PV5zdmL){jq4?k^;oxS{Qm(M)~NWxT^4?hXr9ASU9U+wns zaQErUFMB=vebM{N1HY`lWoCr7VttBSD4+)@?mFRbhZWwPdy)pt zC_qKzEZs^@q+B#DDE^6%No;DdRJ9=z3gR4^KwLx%rP&*a@t{|cTR(gR#TfCLUj4W> z+QvIDF|J;>X#w&R0(=w_9`l^?J7N6LlohRsF^*ssC*MMw}4b$Ug9mK>Y@2B+L{46XRx2-%IgWMn4 zfL?gAZgR@%(S_sE`(3u7z)XI=Y(1zp^+}}O&?RH2N_od&b{3!oNiy7lWpjfl6RS9I zHH+r>jw&KpVNSkvQI^`~(x@3HVP)h4m7^kB&^H=?rh;rRk)*PS5Mk(H1+o6!`@0_y z0e$Z$g9}3qFQqvO^(+4?u7XW6ml}?deT|7!WPP)?4NsqGJQDKO;_?zsSE!T1WqAM7Pw($yo-wwP7};0Lu7S>3 z*~Z5>eo#t?T@GSEQgRS077QeKISK|0UTP`fA%kNK^E(PWV`8Sw)1!daF#vdLQ#iA5 z{sswl@vXqZ$_Mw5@VK)N?!SVpCh5G%zx=#&=3Kle80)tkKBAj!Qx)#92Y%-GJ$Tzg z2M{%^Ot+Jq7N8btx4HbM4LMBw7j+!iUdYB~&Q(h*7gjZ`7H1*KwxQ9HGz_?wdQr+h zbuv)t2I?mD`B5d%*`2y{>D6RQPP zKeVTVJ($W1pp}c&*fpK5K{kD!>$aXskmIKkQv}a7yR@&z5Oq9(7!rbvO#2JTYAXpA*E^-f_h3JsQE6MH znXtuDAQCYF)lG1DnHX8f4bRt=EtvU$H-QR)eN$aSHJMf|wd6&iKah3FC z9+w&Nqs5A`s*&~$5EF+PdQFNsl1?)VGp?*WFF-o8z(W9AfcZi;#Vmq%b9}1qk8z_Y zh%&vJd<#Tm*JEr6Z_{_n^0Yt>G@mJ11heJc2w!4cnTT4 zlZEi?=bb}@wd-Bq;Nir;Xh0nnqL&22iXo~%_Da)nNR)90BYLNLl8fDB4$}{_Voe2g zDnVUOK7IIjZy^uc(dNVJyN^h!_EF;{6mIIwf_VlF?`X3cU#*c-e;u$a45}8W6S$&+ zXbq}^CT&KbT!)gMCb2~aPP*jcDSk7a6IF?@t3nS5JGZBT)IgH1Pi82v)N0U!NVexy zBCJ3O+aMRSfwW+`NEu$qwQ;54*#iCtOKiUM-c-0W05v9)s+W_&NOmxMHdsIA(A5Hs zqWvNa1&dRG>U?UNOI8z7`kcwR`IwqS*nt&6kjYYw_hdw-alOZB3-mJvZLn>SEcDxs z$d?H@!fx_~VjQL%VjQUn2@|u6s=$)zcvDj;FR24Kp3y3OiQ^ab%t-?9^K|$?bUt9( zec1d-T@Q3YHY0I!{ySl7UixXw+*wZ-n?m55;Ob${2^j8ld#IxVP8de8b#w>m_E8sG zp@%qCJhlUNdcHgx!>8?vX@_4z>u90=XoRF;tsT04VCapz)SYS$8_joY@k5kQKK$EX zK>WQrvlzj0X_zVLGAXeXL`YmIiVL;}B2rs3TY#a2g@`OB5i5DyxR?c{m!|53whGm(Z?A);hW1iO(;iAI4_$~Qab2VcYbQF0Hv z)0GriuE)ZDlorfE8YcF+1eMteX5{i)L*#cYHs?SU%1>61;CKuqcnkA5ypV8cUoI{- z^yxKJI_+;a{2Y9M;CM`Kf~ZGyjN(#~6)v!d%f-4GvU(&rcPI;y(aY!E&q4tBZZS_$ z_X}l8w%PLW;AlmGLf=mI)>WgM`Kx|CZAgy|0*c#EzCzjLDg`duQ}}VaeFPHPMiX$A zH+xKD5V!UeJTVw)spaE#a+-|}%8I4$ES``yZ7L!ZTvE6%wLmm1@D59?u4G8y-o#Iq zCRE-TBU6!(6A|tMc-}B_yMuorJuQ{#MF=~YtcW53$$@O>G1!0fFFnmeG%KpD)qT|8 z{gB;rfS*e=MG@aEf~IY3Z2B0C1Gef36u9f_B|>#JDG`-8Pae>eowB9|gw)w99jb+>1PYL6Q6zFq>C=qRKhnQ$%!W~0;^qL&M+h*;sa>LbndaGjNBPvXHA zZB9c^1o&#ARg9n-7V zkHkj&>yJoNw|`)Lyb&WyYIe#`-Ap)?qO}GZ$m#jvNl(3 z#kWtP<2X`--Ac#~5EG?{P^R$s_G*JEyuO;x=G68k&Xo809v$_J&-4*aF9Kc2rDp{tx)6H;@dI|ym#0FNJQL?TKdA?r z@Oi?#0cAsDm0G3D{x9M0eteHi5<39NwXE~zC-}ZJY3Gr?y%D16?6K{Qn!ZMz zFDL_)ZK)iK;;M0p^{cUwrrjJjJi-I_n@4g>i_#PxzrTZ@d*U_}FN6ey!8iM4Nrc^6 zDybZlRs)5vwAJ7)r50?8K_R-G^Jz1gsq>=_cz-=@Y9@<3!DNgsF94Hcdepktl!Fq>aqE;bvd6^q)rM4YY0oHTUe#PVA^2^vHX9XbLTMB4+{0g7!z-}ymu!Xj}9zOakc zw`3wV(@POJm;bC&%E~X+IS?c;CUBx9)`KipcLf&i?YKRN%r*kw;cl{nc(p;`Rm`7* z%vQfy6?_nrlAl8oB3ImY!?J7x@OsHL6hPf5j1f&+)gDOm>vy-eouZ3fXqO74#gE)k zBnggPp&a7WxVeb4=}M*^34JnOwfji9oek-ZM2P5NKFG#tH0j# zsr`}T9hmQFPQbsdUqFn1zWuignefV`E!Yy6`+6z$idY+P@Wfl%0k9&9|Dwh;_Y6Zp3WD;WO@o}o>ZLb%^ScwN8+f zbd4dSijrrem~yss%gqXO4!(jrC$JBk*<|p+QG_?Gs@#_~LGJ6ikcWa}UT>4>U7a|q zlnj{fW!6+zA|TL3SUCYh32WL*!UA`JHq9+UH>^%mASRha4h{cs0OEt`B%DTr-!_{| z3m0ebeozA~C(}Kpxd}p-Ul(bM&nhX^_2_b`FV(10G)Kr@lBN~aFt4y_i(F#Yy4Mco z4K2JnJ|KXYU3Xq2@_^nB>=l%EO?6dnb_o*tTf5Or&r1H-$}tjVzYpxzcq}PuqT9ph z=Md&R5bzy*2^0uAho+N9R1n;e;GSM7=f`7tbC|%%@FW$M&OE&Dw+>jFuJDu{vt|WS z=PgP&-f!RCzW#WRy20Bwx8I|F;~P*Q#+)JX7lHmH&H^QY5W*Fvvj=J@ zQd%Sw-qbR)m(tc89DnL?Oh)pY;uTG$%IaziS_c_bade|m74j-EDo_Dkq8a+-)#r1f zR`SOs7i;bXyaF|TVvu_}5NcAE4*Gd2r{U$i!1ZI*rk6wfKPyB0+ED-;@ViZ8^Zw^C^b4&@Ds(2hd3&Hh6Mp*o=!pfF(rM5*$&KhoU4~m!9aU1VTXYw zs)Kvr@^qbYPVl!clmQ$z&15^tvj>?qw^0Nl6B(LjiIX^lx z2cX1lCp$`q+|0CjwuOrtrkA<5*sgPr4fwQ13gOrfkyA%&;PU)GK)?sjJ|(uyEQ*>K z+R$sSzDK^>LMQcrhCjtx!mS`c`G_169HN0~(9Y8cCw6TvW5D3H&^B3+(KHzqftMAF zP(w5~ByVs;Vt@Z@Pp5fL$SOJVJg+ZWU*)y@o8Xe|;;G&5KK0MK#MasbF5CBu1ZrX$}5S6)7l%1*?v8lw}={DOU z+_$i5?`!{3cXWFDJ=I5Q_mEMZ9n_oxhXE}9X>vMZTMHz$4Gwbcbd*v< zaL*;6Hfo?)7bmB&1~V=vvqZ(KAd2O9a8PUA@;m@ie2D2f<8ct+OOs{|;Vo^4L5L)rqVdlbbkw<^5G0^Al=8iY1^MsS&&S=%kH_jgEUS%d;^H}8&ixww<@~I}c;6JDJCa1@Rq1C(Sh+=4o5U7-s?mWfo73fxr#dj8q9g_A zqvx31FA6(RzS4~9eaL?*_7ndDLIy?fP9atxy-qI+(daPWQV}$SpJL+Q+`Tk0bH-pL zH|@4E45$&*8j?H$q7>-u)Wgyzq>v{w!w(VfE3^(v*D8DV$*)V)B!m%wjMh`v(?Q?E zvzzoM^qM??OL{fuJsor-yh;Y3xhq>w8(kGe|ZSFIh?tOW#5n zA|C6T_On~S?#HZA`iqY${I6M@VMcY|YzDgEHJvYPdqVVd(CbRXXMgTKR+xup)MSjX zt==4{+%q5-ll@;QV3dnM<~*^QNS>C)&a|}c^v>%D;X2$AY(uSu1J(u5Y-4-5D~)}AFST4<4hwI~vB zEm1mh7P!KYw#N$3c?y+;_T~JyyC?c)iI1p<@|f{;<_`j^3>e z1f(4NWaeptI@{!8e|%{tH3H>$Fm25tLeE*(%(WrT#TYjblWXBo?Ko&5J1SgOuTWi$ zh%H_CJn;29G+b?v$Lzv|=@fA`HPtXK%|Tj%SfI@!PiPoJ23~Cg*EunZPPLwnC91>^ zwj#w7`sqWIo^!AV*_j7IT!GA!rqJV?QyF7q70K@cMgj}}@(}DhJe|kyet5sWeRumE z{b&$!hup>1esQ+2Lq&|qb}R_!bB<8zE=UiQEG6Fzl^RRILJz??NJFfUQs-Xnby9-@DHsx}Xk?#axniB- zhk|k2o}Ae8V#{7W1W-k>fHqi4>%{}g_-iz{HzzGNI4Hu+LF3z!6`$=A6`w`M5oWd; ze}vJS2`)?MgfQ@fe-G2ct42*rLTx8q*UAc{c~%P+g`HFCaz#bpU@Ae*5X9ZXK(&~jMutXcWS`ewU@QKG1Rn?egBNhKthBYmwI4BWs>bo#%(j16A1r%tvM0j<3@ zZS6H(Yf>fs(bpgIgxqAVyDc&s8pRP+*Pa4 zK=)DD99A`aH2C!x$}8~F4EFA|)3hLag+<4dnA|v*mL+oUEs&|lW&CT|{>;&blgmB2 zn6EtmnY)P@z}_Ox-0pV&*S3DWVnwqjv>RbtK-;@l8;b2khDcW>r3QjdOHK{X-{Xgv z)Sv18i!@*ghFNlD=n^pwq7BB3V>1kqX1C8Y)&|)Gcofd+!o)3oTZzn3V=;jzFKJgO zVbrNb8`G&H37&a6IXN|lB0H&LI8ZLiIflNrb(FguhCvVu_11-)k|obwi1Ve!)0Vc| z=&cLaT2=yasp=R`nFLn7-{k>Mtevj(_B55L#)Owa!Q|!^^-E0oa0_i;ilU+QC*i~K z3TnIHt#8@~m|<6K=h6tt=p?BK7}^DjBdpnK(>R!1F`cl$o~2VXnZR0$hZ@u7vW-#8 z|7YUNeBnGc0rxTzJhibhtKZ zEeXoKp_OxxYk>nY+g!Z#EN26HpPeHV>yq<)I=vWwJ3S30A5IWlel>wF<8=D+_-T`S zLUtT);dYG-XAjmiG6PGU7ODbSgDmD}^* zYU5hifIU#$b1~WNWYdA6e>>sR23G5*$Hxc@gHh=~<`Ci*d4IzTMM=_5uGinfD+5B6 zrPVQ@x8j*{(Cv57Y=f{A$VLc$7)qu2f)z=eJcB<*QOanTLsVL_QIc`tMlu}^CBKwm zNH)0aFN-`w!rNelRRs>d7p;`QF!|ap#_>by*tYsw8$5x8C0R?(lx?#4l}jT$iKw)d zxfKDDOo8(Kbw{Pk7OEvQ^W7ZSGZ6c>H{B zTsju&iC{ZADS^obDRm3~u9M+%QOXb{!xD;e2gv(+xyOv+3b{<#Hqp5eKTE!`; z6G8#uerewka&F=+Ww>Q$IjxGL?eiXIn(-fZ{sy3TOF8`}>NDqCZ$qruGyug?mcq1iqdKOwT*J2*JqG z)FoU?jlk;Mv{bPT%HLrsMKeJBZ1YU<;_W#M-~7v`o;OpHDT%A zt6SPj!Ksg7lNDTJ#V#;@8j`DjluvSmsB0md$U$}Kp2a-i?3ofxTrHh?%fn}QwbaBx zP<8^F&QIC9EeOsZmI#{F3cWO?e-E^rGo%{cuGi(H*|o-CvuVdil9x^TQW5javEVoz8v zghb6K%RId4618`Lo|xMgGHk}pkN!lNk*Nliws%MWVc!kI-FMXZpZSCJ5;n6ilV0d` zoCen{Ohs`R1WAFylKJgH z3q9by?HqjG>8pLz1GvLG@m2*hN!zs##@c=eszOmHr}3!a=q;k?4AaMGcgmX|9yMRR z`>MfT9X4PUX`S)6Ry(tSXXM2;msc(_4J-pD)8I(L15tcvy;C0Un+`6#zGkSYaSih_ zMmn{1E*5C2E9k;UDq(sg@y@~h(Kj>+9#6C7r(NB?ev@hkwpw5ReE;dg?VFdc-+j6@ zdb<{(7v|j9Z{fLuYZjBC2V=Mp+5+iYG%o1H5!amQiFdC+>TD=+0Lc;z$`m!+9Z7~3 zjll@d>IEs@Y?YY-e{LJ9M;9Zf3alohUT<^FZCOp3tjTmqy<*5x7riM_Mfe85!zl5+ zWa1>HgfQyOE6C3&!D+f}h;KqOb{MfU_R|86uGpZ6m2V1W?!dG|z{;tP6*u2;Did9| zY5tP>TzXtix_tQIyH04}&UW{+TIHk;Ry>%#{AAXdc^JZzBY&dMo6MtnQyBNiASY1nY^=O^ z&QyUaGydw7RI?DMR~|kC2AKvUjL7sI3KI8Fap!HTCiUbVt9-28A&2xf@j+nkn7<-@ zsxkI0pa!KVS_>;4qhR~XDJw69M))5VvS*}pm3^lp^GoWN;d(U8l;EC<-lt22df{0G zfvlEO3`l}=@wEg0gA>VX?Q`>O>$d%C3CKx=d%=?hxydX07`9g?6-)DInP#>(^HZeC z*fyhKkh-S}lr7IY2 z>W`=}a_pw>VFS&|)5XM=I^gme=JT1;5wz4Wpw&b|LO|FT`kP%c^A&bQ?zLUaW_cg% z=uyH!`#W%mi~(FNsOA?oOF4Cpcvg)UshTv~tUa_or!{N+685c&JxXIj}Gk#>j(mLu&|r zT}nfz-v)$5xdSp>nmpVOT@y}Oy3!rAc0&!*$8bSlzk=P)3f@?;3^O%OF6SlzEndzp z=gn!jUR}=3v>RB+^fKmzcEY0-ie2>1#JX4=xO^VGEF39C2me12XIGH~3x(B@?1tZ*;N-YM<95bPa}JfPXhx-ub{wxoudd~%)L?cYv(6Y zuMwF$zUE%iQbod;X4f}p7p}qgu$ds8v$PqHjQJ1yz@4#7y(FeJj2cQ+S6kvxQ$deZ z7tHhf_vY>Ql9qFuA8p>Sz_I;1s~=k;1&Y}exy?;6>0Qx@S*CB_eY}0}Sws?lZzd)C z!UK={Y%f$j{Gzv_-*~(3cia&n)Lf6c1FT*tJfB zjsUhmnI9DBE`_ukA4V-D0q4NfK$}T&&h}8Y0~Y&pHqR6h!)%3)xX3Yx zJ8hNKU2WWK?;GJ*bc5p5bg?$NWeyS~L8^0ucf!;!eyVQU3n{$9P719_kx9OfYfq=v zY!^T)V)pN{PVG>YNvj41k(+w@%kAC$`u(R5-`#FcKHR?ki;N8l z-gHMMMXK*@uckMw{^BWwny(JO9)5lBm6*(%rDbTsWMe1jSkkjG>EEtl4Td#(dTOV+ zcxMC^8|Pg1B7C$vdSy!vnE*VrXa9o;YfEhZfJ*7`z0MrAwLWToFQV+AKLTSsYW~RB zYHxAX9%A*jlb_z~fA`ZHs$KQ>fB$b6wV);E;YobN-RnQUyWL*!7FMr^qafz~pJNwK zG}!6`3*;Eg<9xPY0n$$&w->h`KMr1edi?b6%a&+n=%|&; z7UHzod{WqJi`z6U7}3Xh&dV9ofz82q?y$cMVSf=&=eA~x>)?|XO#O?%V`0rf+$nL+ zSrZ)GXSukQ;-AjW30>-xCmQKnaZMeTYrvdcPx>$(Q=?j#R|O(+|Kh*&Om1@o_#wJv zeIu$G8+6Lc!G|{|+@7GSu9^mHBYx(4tjN<2`&54ieVW^1Sa3TjI%R2432sB()(`4W z^5cF2@Kb}PrnGL>&8pMcT@xdQh;|l=LJ$wR4;u{XjQ(o_@_#CSO6=lY_zd5e&DmOUhIesOa28`XY)NWw_uL}kx-z5<^IEzf*> z#SDrPZ-S<$4cDVNRSRUORgMqPpP2QK94mJ$J%7QujV!*=^(fG)a;r-7#V<|7$;brB#UA}uU0Z0Qjbv||NsQ6RGgwq{HO88U? zNZRj*BIYR_DPo?pz+=Ne&wPebh$wI}2IB6A)!A!`sIsF6?q!PPesfg|qPZ5oltK%R zL*|PK83G6`LSw;PwxV4OyI6noF3wj;N8P>y3o33oYbQT{M^;mFPb}7xIno2c^-nhT z9(sx)L98nH%5D!+)(6IXi3vE|E%kv)x1i!zxqQ@c-?)DQr;CSmOI0OYm@9q2!H{5n z2Tsgny-s0LDo6`S2|<8pDpEgtmgXY+>jWT>-~y#LQQ34Tb_;LoZC`Jz9B(`}NIa^( z%5uvrq>$cx)S; z=oL1A$RhrM^d~iFdk8fkqXG^+LtMm)FyzIrOCLtvC;_K+$(QOO%>)t5$t>maU2k@V%yccHC*KQ*7c~%r6gI{9sLq#K)d>l|5%od6s3mX)au02OoxPpC7ji-i+^KULK913qaQvU6VlK!!vv)spu1YgM z=o4Ms5fv~^s!ayT5Hp#(^qVfVl=}37V^KuWoMPMt)&c9WMw569a#=s$YpIwns#QSO z!u|C48_JZss&iEo1!hElyR)}#s9r9n4)mQu0Ae!gJ6b>=Emi{Bib^5h6dtb!nlL?H zLsFT7;z{caYcWvbj=DrwaC`VOHh(*#ZFo@+bno&t*?dp)$8bRmx!E`SoArNy)#~q{ z$8BCgT&BQ?KMkKB8?^H9GzJShg_j1h$ZyV(Uw_*Sd8WXLwX*VtZ|H&Io|IH}j?!7M z0e_1}4YXIY*RX|x!XuHssu*{6F1C$o@(T7TVr9~jj*=m^0%}Rqgq@%yWk-Z>0d<2g z8~w^wFPQ`$wxg$?G!y~g&IO8uVXx2UGbBeRVmVQPR2U&1nEwZQ85fGvPiX~u0cT%_ z)X(wr6}Y*WOib*{S6Z20m%I=E=UzbYxi&Qs2^Lh_!%CkfJHh`{$=9;8SI8Ey8QQyy zxu~sk))U4#;M1Gs<>xA;@8}W@13@`ckP8qr)Bjy~tW)w&;&)Tm|LfM(xAQybW$#|U zGc(u)%1lH&Ia=C>aOO$>V+aV3JH@5DD+g4J!j{zK8>eH^w|HDsimB6Q(PR*Hl zo-1h8$c;b=3?i9-=?l0b(eASO@b-rvZa-+HqUFV%$n_joS7a?=<(4QFhm@GD`~>a9 z;kNp4T0(xn``|<7k#PibGdZcWBN<#XxnFI=bG^+-2cd?tF+`?q(nTO!9*&a)M++#P zO~V!?!SnSuYhrq9Ld`W$ukqDH-0qiI$Qf3gDQfL>t15yuH~KGEAQ!zN4j#PWdCGVz>rsN{N>m zd~mqjlX?nPHvTUe+4R8RfeB70CYJ93YaHBsRB5{4pM0X(oSN|Ii4Fi=NiatBN-(;- z!m_(z@JsS<@s9OPEBjXaF^@v-5hP#221Kz_QPPsO#kO8fE7Q#;<1Mg#Bf9U4bI`Q! zawHGeU?h%kYGv3j5T!&k$~1L>dJs!uoLH!n{nYvEtc=Ggj`$*KXRSslQe>RZH}FYd z3`5O9@93oU<>`TKM`i=QX`IPXt5IXoAr<;Uf`MSk!d2J>I!VU0B(aee=LZ5*c)%E* zLN_RS-nYmkcR(H&Ozj%2H~zN@&` zGenc-_@&2Yf|Hoef?nIxB{24I5uU^p_`22yZB@F8Xg37w20tQZ?~Rd^%I3?@FuDVA z2c-x@pgu7IRzQd$@Cv#%P9bkI@Z%*8sz>y!BbIW2k}G$}#iW=Vt`N9Piq4orS;vHq zh7>_f^=<)bMXIXnI-~-lvWXP zToaG0tA$loE#*`~b&U858Xgay99xNEYyzZjfXTO})7;M)Cj9 zQXKF2VRLf?puX4Fy0Gu!=*HmR-~V8mkjUE$Xgjb)kTV^RQ4XCxdZoA&a6NH_;iZ*7 z`oNr=$*a@lP{){FNz+T$fSHTZAr)*~KsnSoWu0zTJQUC`TtS0}v}z%7&HqrU?KV@K z@OoI4nk!BnBCR&}2Im$#v>Mw@#tpg2G8vavqHe+$nmmU6alH-^ftVFoR`LWiejQW$ z2q7@P6E-<4j}_}mT#-S3BsSR_<#^Sy5Q0f$cbax^-BPckQncnD1 zCpK+L@VgMXsw=_y)s(*B;wKY>{}znz!*~@eNv@+w4b0KU2HQMjC+C-5vc`BzPk`$V z7C^A|Bt+6-#Uu@ha$;bA*fnPYl|3#!HM3snL?iQqI5Tbk3<`6^pu)?`2Vx2Z^d;%0 z);bTW?UZio9GinDT(%0V7@{+BHf=N5v>MUBRxV6ndoj5wxf#N6s zk3r*n1DBQEkTRJ?OF|c_uVso#g)f1Qq%<^-5U_TDtVWtm*bE>L4Gt?SLT=Gk2{K18 zm1)0VO{p=1U7m`lq7$>!y)x@m?zEsnj@VFlyT2qk0cIZy5ev4FpmwIoU*mCSo;FRc zVVZ)1A_g%H<3NNFAArIJHpxpE4=Pw*WN^TV(O7+Atwwg07{1VLTnL z9)APhk>Ane5@BguL)Fqwg>3Ui#kv?{RN1I8WEbv(!cdJ@+2zF1-(he3PHMyZTcV)l z{CKBtLKjFzfXfA^8GIleX%t47e^Qh(a55NxLo7B=93K%Myf~F&0_U-9_8%X-8Z1$K z>3RN&xY+lIe>Wnt?+~mK($foaXo<5ZHWU59&KoR)9!6Bw={A01Yc~GO+l$A%}=pa(i&pLD?OkAo%V%J*#|v z5iG}==mD+K#8xgdJp+cbOjGqKNvoQ{8W>0F2J_4H^HI~f)^6b}05`(=YK|X+V-$)F zXp)A2vPAHk!jnN-h!{oGEXD5t-&K#O1+?{pJH`B!7ex_8C2lNnF#c>j+D<*0Ac|so zBU<6zcXch*UvkPop%*e{Qmk4UVeSxDbyr0S_?^p>XIke9fJTuD;#LT!ha@Os1bLw; z66$M-7>AW-LVpkYW~Kg9%Eyq4Iqd;gU0|Jd^w_gqI^3SaYkY73#;sza+fcny2N0zC z+a>Ciw4=>izL#zr|%N-c!TvHsCrSxK0`~;y}7r7yuP=eLc*H1sel87EbbK zLVxRydZRyx`!U%;GDq#E>)tN9+4MWxpYK1sdHenM(DMAKyn5U)GKyeGlwmY7+ECgX zba2@9Vr3gA3tN-V;c`fshN~-_Q}DP5Km@HQE?Z34ldm3s!%%};&ark`x8X9xbZYz~CHr-LTp)%Uj_&R@U#e)99X`^oEf@BaMyJ6B-2F5FYirz^dU zXE{4g<1z94i>V#k88s!s{g0o1`txwRjpBP?We3oK_nnsk06vXWQ_$;uNPjOdj#S3T zhMRFGrwhG;HbLFr!z6fjzq;kWsN=Io|1BUKIJPR|Z-YpTrw7k29KD2;9$Y;o>k#H6 z6)QL|mLN?PNQG~~ie~@qjyi2e51nUhUefjCUm*7o#{@V!344{KC{+7kK|^`mf54sD zm$>EQ4=s;9N@=t86^?9hR-G-&92++yyQBs%Fy%Hi@)DVM|I~zss?A7ncr;^dTAd&V z;^Ar0_i`3ESKXTdRZ_zYvmX3H*4Hmen9+l6*0?f81LVEB;Il+iIElUf)p z@CGo3rs!;8VGOJd3fo|qJrtaAFFOPvLr>DX=FC1VSEhEm(NEVZ&=sK4DzKrVu!*I4hqSFTTqOe7*+O(~PX@XM- zl>!$o=bITrV?rzylG8El5uVEM5wca6_|8=)IoVx-rvg1du$qTynO3are@L9-l$4mX z0_(Hv*hC-AXP@=r!aIfw|(OzGm4}^_EwNvfhAy#_J3Wp~QKdkoc zaMr|qIy4v8VuxJaT)TdiJTtENhB2gZ|6)h05pDN@jTGVukUbRCgxLdUK|N2+4aE`? ztKJe4t5-XijU8IE1EWGM+d#>Ua&W*=L~#i^t@_e&8YU{1bm>x*{to&5^g+I2Dih&w z`DmmTe*@>DxOam~GGk9;NW(2Zv4gKASgy%rP^TuvrJkDbC{n{A+MFS;U|S(7c&@2r z6=K0-@&1x_Z3avtmV{t1s6>0^1-0uy2q&zd5I|~otuaxGSinm27qt{!s2?p;NB2kI zbYNL(2DxW)e!ZLyVJ@4?|Q za<5HaEttNS^9Y_Nct??yLrl2@5^U}i@ht%iWu80x#*-n)6--CREszLibm2Q>kq$wS zzOve|{g|r_5?>7Cs^|g!vXXZ^pk$3(V1EgH(k!Vmlq@MCoAKC*mtSsVqgdGA#L?HS z+DR0`rLTm00?33yUUGU~Ym2-4{Cd~s21J7+5=jB2Ro@Drt_+@oW@+_ef@&LnvAHyN zP4XNJ&;pmj6I3oW>JF!B*os1vVY|T=6#_l#7U-Q9x{+_0y`^n{PZz_wQcc zzkNsZ2`3xFOz5M!wBy4KWZP(^LIdFM=t>O(2wBoP%wQ|4@c@d&a8+@Zws_~sFM@zaCX5L>+i=ZU&Tro9RIa>6V|sD{K_RdBvoq+V(8B#*xB39=3G9Y&ZoKk^ub!G(B12!LnK*VhdATX|w#{>UyhhU$Yox;z( z%l1TT*HhEOBwvgc4bkb&Fd-H$IebJ$&`G9WzIiyQqRx0OKAKv)`PKE}+Ptm!wyIUW zimmlE_fVsyT3(WMX!c&D6le$jtsn@}g$Y~m7<72K!-}8k0qbk@f$qrF#0&o>Of<4O zeD&_#SLPLt_j)QV90L!LbxI+J@D{whLso7iyw^MYLhsOwN%CUwHw3L@=84%#BfLB_ zEzB@bn;u6|t`ixA<^h<7VrT?1*J{$vbW(vd0+KbX9=uE;!VXfrv^$;-+(QxM$IPh7 zJ;1z=*sO=(s0rb~d(hk@zCKz#KEOXZ)S8;bCDPAkAH>QDGkInTbD*=f3RG`VYV_0B zl=BGE-`B&)D<+z5A5d|PqW`l);i(n8V+ z%Nsw%(?uErQ$F#+_F{d~w64Vft8xmwgD^mxBb|ZB`=DZ*X;>C9klg$HW=4N_7nWA=%ITYMv(f7JB*%<95wH8%+-bK zw(7GiCJ_R%McH!i9Hb)0W0dwrszJ#6IK)r1i>b?ohrllPR)O>qGuBzH!0uVar;I9? z({9mKxe8|H`M;;Z0Cxo$>o=(|@+}YPFvzuWE^umxJh}L0x2^N+!hEC1=(6fT>Igv1 zRAKT-cpw#4Y*z?-X%2%^o zv<+c4@Y=XsDqqY5rG&}#R*j3bJBVj{)zEWT=Y}bA@mYq*OQg76rAZ&aPk8U4<-Jw*KP+jj7t}C4-5(5F} zp}xkMuLsngz(B=|iun_Bwgy4;kKV1Ft=a_K?@UzE@r$gWx(P=?^84a)?x&l%^Tg?4 zk)}7Pl}LnGkA?@U59j-c0Pz6GSHeP;kjZhheOX%xOA1`?hB&{X0&0oS086C@ls7sY z42|68!45Vnw|0}`u_?}lJER{B^soc=S7Gpxwd~-XUO4e4tR$97s&h*lgx={;5Cq}@ z0_XdlybK5*oP>7UR>ovyTKTA;tAtN!;{H8%q&0GqwM{%U79VO(mM$uQa^V++$158A z1?H*OY8h6*1or|<3)@@B*%l=#aB5fExDN9So9;!jX$w{tcNcXF--&)M> z3D%;?1Fb#TKzFvHTvFS3rYpcn0vG=RQx=pWELi%Go)AGtQt#zN{Y)9U{6Etl|AKs(80Rk z$!Il}773}EmbZ6r-roHH?GZ-PZNxBe)PclyWV-JH%SsNzO16;{@oh8$^{%Di(B$~z z`yXQ`7WNb)!#d*#F10l|xWhBr=kj>aZ9cm@urI&(}cnNMNc}6_QUS z)x4Zq(qr}Kpo4nO5U%v~cJ^HH^{7EPsRU$7T5L?9H>x~Ms%5o-v-z4f9K<4AoQx;W z*VKZh!Aft!?^bQNlgL4Ga>*x<(7^%5PDzOd!fr)!((L!(e7TJ!!EjGHHxx+t#Dc0V zkwdnDwyKSwFBRz=nwS-HkZD@i89ig1Cy=?F(&DEeeaQBx7X^!&?k$DvD5kkr;Y$=d zD3?Yu`Q43n9)IaQQiwvqxNE=LtW;1Ok(6`h)fRE($je5;eDD+iE}het;MHU>F9ii) z)oKp10{I#n%h%S6LrT#aL~Xqjw;@SV&)BiT?eP8j?O%3}hUL4QSZ=a96vYF+Q13$v1(yl{*n@ z`E@wSs*+zu)l-OdHY`WnN77(TR^KkSEc^Kh{`Bztj_&R9t!D>#i|^=Cw0qbqR{C1= zByy17eYx`DfA;DF+x<6_b2trd8cC!{=aQ7{ju<*R7k6)|4n@SK^lhnt8X->788UZX zfbkFbd4Heo)VVM*Gp(^+@jtZP39>taqczS2aYZg)owb=h+!j!~i3<;R&pMZt(S=w^ z0_hCJ>`2^2tWz`O#_3)3xkFMpDW3bCu-x3a0bbs z1=PUGfvxK19t%Mwt{dp92de#L*s~??)zi`2MK2e@06k&=>CU8y4%7|8SL4}%w57<% z5}5$fZtem+4;ujnciUj;%1(pO_wprNh{~r z@G<`t|3@SW%84Lundqt`V$}fjOw0i~?}{wl)y0r!LQFN9()5S`%-o{;iOn$O;yd-!VPKI8xJ2WTSusNo4A0{ z@D%MxRSf^5Bdv!w`tP14MT6>BGnSi`%;&?tk144mTfO-+e?d*vBS; zuR&H|VK_sXRe)FHtM!Z)s!~4MOP{8KSBaZNrd~|`WDKQEf9+JujYftnIT+{gVYacB ztvE`s+Eciitr5dOLg&o#sj-{=KyY#3QQ^r$EIftHf&XV!GOmm-PV&NHo)?r)r}jy& zv+4ppGF1X-Y0T{l8x&#MvaFAw1suNuc6r=jpC(k$5+!n$8mFi`yXhT;Mr0<|<0vpa zHLicKs~#5E6?eI!>`L?VTwz!16;RFe5g`2#A4h;Weq16m1Y0ZC5R{u`PchgUUVd!W>> zL2Z$XvK`Z}kNDPng*xP?4YFx1nVCl>u!ROqg^5W*7~opylyf?t&6qV%K0T0jt453= zC8al7(iuk|*q9wKkjUm@iC;LER%ZsJplK3C8m6O+KQ~ zDox;*!hK6^G%xfT-IzZ8Ihz9W*8=J+!qNtRdGZ~*NO&)NZ#fY<#Q>CGJME~w)uSaT=HNJZAFLaiv2ksFZdZNLb_ZYrG7@X7I0m#LLlgW81X z|Hvfbt3z$M$;H2;h4hWbejq^;Q9SViZ)2&#xi%h*vh{>w4Vs73hjsDcwt%>?6KGP_aEN=`P2O^ zkl=o^fA{|F-8-bSegtX;tO_ZNxHY&Z^U~axan#yXn!}#$!0hPj2#$aeb?!a1{uBxW zxO~h$VbX!Y@dhz$ps}lO_w}#5GyN9`V(Oxn?agfN!AHA$OkM9lYZ8(qmaMD1(E1o= zU!e}s7Ga53j_LDt=tGmG^P}}fw?_o9Z42ae@L=bC1~=<2z2fmANkKcf#gUr!(X z;~!X$E-*z<;}f0N68XnF@!(ZJGz_Jj69riLsPkXAk?dW4=-1^AhaixFj@8O4mUa|<|jv-3cAG)tj z&CA5;q3W_&ME5}o&3Y;jMq5HT-aI6r92fb7`!IVN9<)3S>CM{_1lHFlIA#=@lEeky zQ+V6Yf(=-#K0Y&H#3uss;4Ffk=v}gUdEI_%fas+-dJE*|G{YOU3=Nm3(@N^+l_!Kn8_I^* zMX@cP=u2%(JRTO}tR4*-_nI_m=Le{UMV=iNgsZFRg?Ylq2BX(hD8lYxQ{dXg!bqBR z3%W!};3La-Q54lkXL`vDy*5a!lqP>pWbJIb#C8C*O-S^yBiGvl6uwIv$~hoBBHVkBH zBWjyEek|xUx$IAp55)4c3crB!Q8PjkkVHS(MqHCQOH*f(P0@8#ShwBmk}pCnv(FeT zBeSQ^#wRAHm}D%twgLBsIqulW1cA_sQ7a-U#WV>J@El)~cr8(qTHAm*E2)zSbsm;< zQD;-F_@NIJ@`PwxCe2h-3^`mQl6-T7wYZov{!hGb6J(P4WeaFKD;hfoU9O@A=T8?Y z!A=HO9*hpKZ0$B|f$FP&5gWmK>4*Vs(o3Jg^H$_EdFF3f=;-eD_Dx9w<_l%s@6u{> z1KR48#y!>Mahb{|&YScJ*56}lsq9dUZK5EioN_|a-&Ic`7X}6LeKBlqo*h=#zn8Dp!Qe=$gsjfGSb}xM&A^qIIW9!9nl4R01Z4u6hL%@D3xhq2 zWD_xGr?dLNQ9y!L(`^{zeNoB@6{iB~4CgEqn+hF#+lI8Mu3QT(n(|(Kh?Q$lsfN!e zP1@&4=(~xnmJr!z#_BG@UnW}fZPGGGD`7g(R^`|D)zFx>pd`$&8z58W7)gD`7mKrf z`y*K{{e(1EcY>7Y65Rt`X0x{3Hk91W`32jAw`D6n z?Nc^zuSBTkMUM$tQLs|oCcQr@bSCE%mOCx#C#vpcV-SuNwWn6&4(ARl1PS#4Oy7pK ztbriWg_jT`q_@hSX!9zw5d+jjv;*yjzPGr1hS^5(DhbJmLjeFa<{(r|S0qbddVUh5he-8(!zk{X%7zH!o zJcAKPG~wDy8vsbwVYs)xK~mc7^6j1PK^SQVBgZ_PspP+>fNJts<|x`9Bz#1{P|TfN z2%wL#lGV&@^n!Vjq4Sw6t{J%+K4Y>1UhH&8_qsr&X?>M_N}N6$^O|6q#lU3oRGoAJ zYkE59MiCQ>2?!Psoy@ENFai|Yz<{VxvrZ2+rf{(|4bF~}jT17(ZiK$O4^4Ey`Aa}& z7zaEAW2i(%&NzW&-#=1j2&Zd$0(P}2oJHrbP}C!6ijKoRs(4!7x1)!BQK(kLVn#ei zL<2tmyd4}Z0LZJ$*=Co#nO$oG&CO*T@5tUks>pE2FV{M0s~$AM;8X-obIE)$NLj zLFw>BZ}G~lW_aYdM!Gjdjp=oMq4#UhzOn1Fgr-cRBXgE9g^;c0Lj@HVJaDKTf#^loY%7DXan3l0pHy^ju&BvJdbX>8G z5n7e8&2KraMk+ibR+S19(ZUE~ z7%&Tb%gNwKRa6W`d!2fAKTrBbL$lFX+6TsDu6sSJpPWDUiRPAcMgpE2DIA46E?mXT z98kWiWR|o_QpA%GrZtlvX2k~+Tj8LD)XQN9bLSh|8T>OlE<1faG-c~CJS359iaEeP zecVoe`uYBEO>Q(pKOJ?x6@|kVg`By&vKT>ntQICY<`lkM+*vJ_FIOd@L~p8hbtn&Q zhji^s<-Hx)$+plXs2X*4Ml+p;w%GjF<+=)1s4xQlJ zJ-vJV=XbZ3H@uw)T)guR|FzR5K^5&F_qJT6VQ+zwr0dr|{S1Tb4~FuyqeN0+nD{5Iq%kbxcxI9px3%%NW)gg=8c*A@~8f301f1zh1a7`ylt%NOO0uG!=3 zCA^+d$+&3#Xy#33jimjHoiqrokSRAtt^(y6rE`-a)@yv(hKA3X?$B@WTPm0z$Kt?+ zVgV;-my_$p&Z%oO0$j&KzTzjSh{A!Vi$YeTk8KjS43CKnMz9YW&w+zwLE!#+c5j0m z378PGJX?y5wPT;!*0PXfUkR8W4o0$b)lC|3CI3;KQHzS=2sSu87jWV=|Cj9kLV}e* z{vDunkq(8=XhF=lgRQ6(0@AmWE?PnX%$b;e1}bfxE5ZvbU74pIe|vw0%>O9K#5wY| z;=beZ7;c9LPE=O^3s^XZLn1MH2yCz4AOvN}WL0j1hZ&f$G(E>N)% z{nwOTgT^d;cN>J>)Ut7@cX-G3fejfX^`#dH$d~#cogt_U7W4I}U7(?cX{`d&Xu@O> zrYev+rJ?ZNUg_PGCB4_J?c)|bQ||7WhMas_Wlt^MTr;ZsafQ4=6y z^@XvK7k!{?6ug4U!#P^YYx)?Td!!`$l?)yJ8-6N8Zm^rk5me^NWWnLcNQlZKCBr5c zv#S*;B9z1Q(v+%mgp`eVxP>@#4?`2;9}B&weJE`UY+f-MhNTUlC$XJPv+M$Ds;5EU zrE4t-mn(AdLmzXRjR=4ccTn2JOke7MeA4%=liNX~BbfS{Y7T=y6^#n721wm_WOAgMl@VZsXr7qHu- zz;1hfO|tZGU*Wca##Al}T|b4wnKBAW@ob!-#2mE2_Knbp1G{E}t|oz0!Z$Q|;!0`m z4i(Uw%@Q-}9#Gueu+t6vjPb6Jj#u^7tW7%uqdD7dCZqHax|-u%g?R@?9Yu^ES$CDM zR=_A8lmyM1WcMj9kL%D|Eto*63& zpEh}NB66dJ?m^LXkTUG$Tw)hAhk8W*cMWG8+j4X|LTA}2VD4oukJBy58uEte0sF7t zy!r5lUtYh1isqO1Z{IvZQkMOX$_CSHs-8%lsvi8yn;t!S{LL@mQg9#c4qhX|WH`Z| z0O62=$Hj#iwEScr2oKV|L?y+{{4HD; zAlA<_?0*?{xTeWy`3<$>_bi!=D<)(fl)tO5pFKy+8i={-@hN z{^j;>fBfO?{U6_a`st^?Z9m+8|L*-?|G0kt{rz8Gf4KdlU2ot2a(nm3)7w9P`T=tR zBsfG2es9{l4oo;eLwY%Q3K|8Hh0h>9V;$VjCS=Gr)j1h54@#E?B4NCjLLdJa$60>M zkTReNrDxG1uYGWERM=!m=#yFZGA2{QMI*0@|?9Y0D*VB$KA@-9EN4Fi}c_4!i37 zbS@0+0->AiI^e|Dg;=%=7}{Uy!|5b}G%_KCpK1ZM@L(j={1A9PK(J2oRzj)vEggAjAM9`{XuxK}!m%C~BL#rQ z5lA}4FD7}LOsfRT;R3Uc8zK2?EmChO0?vZ&~+Vj%&kmN*Ddg48dYr=COlSr?cLuR~p1=0!Da#2i0Y5B-p#ddYn zVae`1-N5UPxaC~}`(^}?PX-?XCa`vA)*FE^4Zym{N#VUgWi)4{gp~L(Nm)jHJL@{u z*b2l4j`#_t@f+KmE0ttq9V(ZYk3SShCy*VUTj8^m@?mh26_-P%3%t8I*@Tz zx3Ay)E!8iMBul23RqAp2`u=t96}$bRNoT%6nAw~6KaGZeetXaJgH*GZka)8#pu4Mg z^ay8u}AUtrW|WBxfN`$81EIoOVxd=iTeBZ-+%w{ z_Wu3%`_u^j0qRI(dS{NDKYv2aqqle41aGWE<2@LEsvPGcnAp@+2?iQ;$q|xt!WIBu z4Ezh-kdda2CeUIbpVmIL-YCuyb|41HBBCAG2fW~R3k*o-*HyaS^J&=sPrD%}u1)c_pjA*XnB}C|r>0$)s4`_h z9#sM&=k;Z(M@Jh7eeuNg+v+C^cYQR{PEkh(`F7b(QJP9>5Klpg)LG;g@GbZtDnI1B ziMLUs#IsjFS_@f2xJW4m6q=70*T}(*I6M6n&zOIMHQ`DJ6$BCk8lUn&AF3&+U-`10 z(nsv*dbKb`1|zGmwA|xRvB2Bal?>YEvBl7%JCEh?p-2rgtRisW6>|=$P$uDkJPYxr zbtt`!1Y9`^$9*NZVO8muAkDmH6o-y>i8LKJ zY?}#Qy*|ZWMoGb4J{-Mp+{cw78_Lo{?hhRam)OHBxK#q$6-u_Xg2if{L5C~Ek>%s< zI9@0B3sSZ@GDv6K@32E|HZd6I5f~(=pF{VupnF&;Z}Dgk3e3y-9GMd_*Et%q-I%r< zCUp#!rNsmJeoR0uNuiX!w{~ctUG5AjXm9cSZ>EIi*KlxF#7Zme1jhrM>Woze(_W{_ z98UF_3Bzxl5E~y?0%eIpaSfZYOY%&%;fD43Bpy87eRKJ<5 zYIE(cmrxb#2L+nfZ#|s zzI*-d{SQ_Q6B$$QzJL3J*lLVUDOA}I`(TDhR#0NiGn$|_;Qib05be(_CPrEy_CP-Z zc_?L)>TrjqZ_LtPa!`X&7nR};7L9uLz8IhV`A2; zIU>Q6&l^l$wkEm@i`QC zC$DZf#$Hno~Tq#L$N>!hGnVJTQVa1!Hmb~#nyWmN0vkMOWjX$CL?qh%Xu6yAP zVlVIB`sDMs_NqPM2A=E>ZTCC%M(ejkLsU4Ie^RJ9^~(ft#0bUaje^ zEw(a<5vawkqX3LQq7|4a*4D7z!F01mJQUPlFGUr4+8s>}w^t1RS*MpKuMOf5zSE($ zC&|v9-?*`myR}J!)836`{$`t0945uMC`u)llR7pL;n3Z{Ny

      $;Rqkl|H)AlkEKA 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 literal 0 HcmV?d00001 diff --git a/Software/reflow_oven/Debug/Core/Src/usart.su b/Software/reflow_oven/Debug/Core/Src/usart.su new file mode 100644 index 0000000..88c6aed --- /dev/null +++ b/Software/reflow_oven/Debug/Core/Src/usart.su @@ -0,0 +1,3 @@ +../Core/Src/usart.c:31:6:MX_USART1_UART_Init 8 static +../Core/Src/usart.c:61:6:HAL_UART_MspInit 56 static +../Core/Src/usart.c:91:6:HAL_UART_MspDeInit 16 static diff --git a/Software/reflow_oven/Debug/Core/Startup/startup_stm32f031k6tx.d b/Software/reflow_oven/Debug/Core/Startup/startup_stm32f031k6tx.d new file mode 100644 index 0000000..72009b0 --- /dev/null +++ b/Software/reflow_oven/Debug/Core/Startup/startup_stm32f031k6tx.d @@ -0,0 +1,2 @@ +Core/Startup/startup_stm32f031k6tx.o: \ + ../Core/Startup/startup_stm32f031k6tx.s diff --git a/Software/reflow_oven/Debug/Core/Startup/startup_stm32f031k6tx.o b/Software/reflow_oven/Debug/Core/Startup/startup_stm32f031k6tx.o new file mode 100644 index 0000000000000000000000000000000000000000..da1689e68881743927c2d83266255818eb536ed3 GIT binary patch literal 4260 zcmd57%Q6n@@~`xBZp{iCf4G-+BWgxax_{y_PuV>gXkr!{txR#jnH$D72&Sx4(l z+Nh|M0~b^k2_bfddCFNEL7>7lgPJgt(we8~_P8a6zb2%lBqIo7s^n5GS59 z``-87oA=(#&dy9;I$Riz#bP8WM!RVl5nWp&Eb&3XcGFhcB3&cAW8{_LJAdB3vu30t z-*J?Bjho+`x?XG>xW47m&|f#&kG2=6H+FNw^KI!XL$_|QC%4-_MS>{c?iR)Ae=VLx zb#ZE=1h^54-RkThOf=6e8iefzm%mR~w;OAXVYWQS4~h$unU3}Jrg}iV@(&Vz{V8+2 zdv7vnu1zEj1F>X>-za9pfRi(gIVU;mEG4IFezLkSH@9SY&Q!f|Hd$^=`DbmCX+Mr}_s{v-|vWiRNAP+fjR*Vr^i-5(<_M zVMP&%fnAKPqpr>4o6XK`ox3_W#G&7bCPs^yl2mL7fj$6Qaml+C_uqzo=_MNXYMvX(d03;%QK(8^Ct#N{wRoLX2a!eCOPr(SBO7X65K=^|OIFN@nD%A~Nw) z$yCPAdXuM8b!gSJ{Po3Y73}LnpSY;}5e09B{Gft&LFV-q5YPTHnHXzo8A4jASS0|FSYVT9f4J2|P^Nurn5B z7Up%;h4ER6oqJDf*wyfYhR5!#x`A*KkI|MGa4Ccu~WzYWRH(f2!f{HT;W)S7BnH3g>5=hWj*p zP{RccKdWI^!xuDsS;Mr`r$VDKpKZ)9uO@me>Tqc)|L>bGErmUgTF>AbNjg^jA*%PB`c43YV1*){> z5*Y+{8Ppt7`*g*ARgq6eiz*lMks`;-nbKH9gHMHwZ6r<_<31AShjBlNoz{4O_e9un ziu2jmzJtWgrM;IZ%@_wY?`uX6(G$$k{}6NZ&oM{b5$1?fV9vJz=J4luMt3V84k6yz z4IE65GJmKQ7ncMP_u*Dt9AqMHUn?%0Mch3&khveORb$MPM5mbd6P;m>L#)aiMb9uF zAgVLR1$LhKULv144#IQH_Y=Ly9D}>a{4t_S%pWIugZV+Cx0s{2cbGp(bd~v2L?1H8 zA&99WV`FgEGDj%_BbDIjLPi@ApC`sWt$A2S#3!VI0~{h5xOU)=4BRaE+-8oc6?_Hr zuGafOoGpwINAw5glaVncnoD!OT>$Rp2 zbEY(!uzlaFRTg}>|9j%4$maylBhw%nUQ;8{30#gX`nlm#mNbtMSD8g-((j zZv_hWllX1OpQA~VSZL45!{5`fEi%u!NE1^980&0w6L<8ge> d$tFn!{OjCS$7 z^LL>C07h7Z^Q$4%CD7d;(f1E%|5?!a^AmLBUqS-=oAmrbjPo;$|BtwP4(_fK6Kru# z0@puXqUYB_{#Su_Ayck=1ucIEe&4~24`QzGVzgi3$~*J4Wf;A_0UO%}n<-$lzd{;M zqRpp4Z3nI&1_`90qjqTdEt#^#`2t%00Gu8Nt{=oKp9e38d`{cUhn9aL4%6aX4NKbs zP5lkreFb-)grIoM$Wy4ZzzKL%drL0@U;{TfjC4tjkF zJRS!+cSGa%f%0#HhUdkDTbxO>d>J&fqs@aD?Qq=v2Bdc;?D>9Z^G%Fdg$B1k+Sh`% ziy^(|F~Trx<6UsK0DL_RncN7I-OdH#qtajQlVt z-wUpv2ft5Yu73wrPlKu-K^HE1eG11IWOWhRM=|4RXnz5u@hGh8b?A2(*I$Fa4j5|( z|^$Su%v1lK=+e6GUvFQV@i&_WtA%t1a6 zVEpZ%e-C)9z_Zej$+M9B5ZY%kW*Fn24m-I6cRvSt{sDgX30OiH7XCVppT%fmldc(f%P=@;Oc6BXeI2W?|7UXj~#@~dygP8GUNN*iRn+;jri4hhj*(efoiDZO@es`N66C)ey%vI!AAqB0M9!_wTj2KqtR0h`|lDV+k1{F_*>bU~YQq)n^yp3K|od~c2(uMx^yoo{2b zqcHDRG3FPA=2quzNOBYW>vW8NG#T+vSLehgX74dV+2XE>&A;YH=T-?E5($X zE`++>wW&loUzF>aa(^yW&LkYyEoJ)LcsZZTB-~tl&~@87cl2yDAGuqOyXjS#vRv+t z$k$4`7*CYljJeb)SJK&XB<%LbOKxT$of*iK*Gt=wHq8u_-E_QEj=AOag_K;K+BUIy z)3)k{w$0lnP0#Kq=1dJ1v{Pp|Y6l#ge%%fyY^=*9%l*v!o}~BX^RkvTiOj z;2QBPYZn1Y*mGUsvdAi8z_zC^+*GSMF|ik!;QDzVy47gH&y#7{&bnQ{~PLNTv4 zpf@Z_+Se_EBeYk$N#~0~w3|t#QfzI_Dv{3>vZ+C(Dm%?KzyNG&*|H5|Q^Q-U%R?PK zy*=H%kx(QW>kdakT|L#4Bb~9V@>MCB5tL`qVn=7CzbKdc1}b8jnE^3eQF;CR#r1`9 zUM`9lX-#5DjVDP%OsZC4$pq3{?r0^ORRL9ePO64r#O~R4 z7aUjV$fm>{MN0I?tz+9Zwc$|bncB7iwTu$Ql#Y{vDn#mTMqEFYaJxIZx_X5H^~plH zn9QWpb|T~NFs#ae#G8RsQW`3oMi->V$k{aZo9dckG6xG&#*Dv)x}>x9Vhvi6j%a5% z7LG)_yCbo#a4gm>b`?uQH(5pqMlD<;FQwEPH&H6L>2QXYX?D?{FRF(tTb>MKKJm!) zVyZ7wDvKry#Z)?@`qBYaBEm_hgN|e^C)|XSRF$cHJq+c1Ml zv{eTQb$W3j(u1fl&HYq{@nWLCty_AQ%E^RSO4^nFp6rc9h&TAPt&O3p+C?+7up>^G zW8;H5nO}Vam0YT5Ru>^$h7yja(Q4e+r`(#c#RpT#HeG7`gJL;L=Tvm?TuUogu8kGB zkyU$XV4XAv6K0mRcMgUMkx+KEcY;`CjfMj^@IPH)u*BFE$PB1)3zyY58mx=PYHO=i zs3X)H?(7Z6db_$hdt#w*SGB#z7;dF5$f*5kENSGz#%-j9Z^=q03nF)2uRO~YUE4(? zq-G&3nB~(){Iqp5nJ>#ik(B1D0$l`o>a7B~k}eDyTE+FP+t)=Eqv8hoFcMKwB~vgk zW1pryFB$Tp9lg=c?yl}=S1cL|N4vYCRaxkxCa{;hhz!oGky!=yOb?(D6F+@owPs{9 zAZt$W(P{QqO2o6WSO(H5p_(yD#j6%rQ?<7WhC9OH&SXgMWRBaD+V-XaU zGvSJ8fLxm@mNLj{P6&lMA|0W&aHsU`358EkftOO6cV)_&dC{#k4bXTj(HLG+DK*TG zVwHYPk8Gr_XIyU8)Uu|MNtN9JtWRcfqRp6maR%Se;h8U59jFQl!fC}@*G1JjqKY;Z zUuAhf?ugZ@7HKzbly;&j1l3@k8qkt7sdehnP8Eimnj*XmQRz_iV=jq|{*}>qlx8Zq6PX6T-}mx&ihHYn?Y%qhuoF(V5IGVR8z zKo1rH8w(^kU;y-jfv79EGwr1)YHb^CkBqC^R0AnD_Hjr_QNV7Gbsw28?!xSpqyUp3sZtIEEuW4Vto&s+Sfr#*z9}13 zEJIz$n5AxLwXREta;dA1Pb+qFB6p|LJ55oUWM-|jREn)x!UK_unL4hT5s7RpXWi6U zy&;yvqL`r9yZy+yL*p_acHhQVW+)XPWzpSBO2UH_bn^pQEgq{MG6vAq26gYItGNnj zXnd3bfHQaj5QVOwVk-Tfb10MYx(WMwf|HGHI+In)^C_{6bYURrmSo>kE><*9K(N{d zi+OTgyqK0$CY{l&)huM9stnowKH^TQQN0>o2JyQM$A-LI*BL5@QW!_ zuHckrz4ccrP0of`T#L`949`Il`GJzuZ@{3BrhqZ1ELWw)Kv^b^XC+V%NTRb=#cFEg z4Re0@N_{wGsHn4d8OZL$Y-rG2(G;pIHL7CctNuhv{0a$`Ad)DP`38!#NKFdya-u(* zTI&S^U0~F><-tbYO|7X&{wPm3%!2L}q_n^$E1Q%-#m|t$b6erluxxp|bisxwxQJ`c zXd}O$Bk@Cjm2HN)rgrvkU$p3?GpH)?kRn}>Z(hw$gz42(#G)EFxf#sA$+auAls+48 zqEu0E!3MiU^%E8$5BG7BVC=ba5x<6k*b>1gN0`4Q@^v?iY}S;9c9M&;2OpD8Pg{B2Pz2lMwo zUc;t&S-U7kmI6AMG5_{9^JJ&-mc5&WD)>uaKJIxa7~NxQSQiO1C^xF^vyV^LYBiSX zQd~<1dZmyk!R_nv^ODrLvvJ*a)m6KLwSkZnMds{?`j&djX zm=Fu+M{rr#hZ<-wBiH>@&?#)3SD!${2=G^t$Ba}r!ks9Jt{{ewCx|I2xSIvZICb43 z!Rng^bDPoH36PQ*V*K{wtlYG1O2%&A zxN&OR$mHg+ZS50P;DlV;Ff=*j|2{D}G_s|AYGP|oa3^l42iaxy>AD_Q7Lo>^fiETT)fvxO=W{QoYKZVp-Q<2a> zbp#(K__s2Ctxw}Z2MNY7HEJPQ5~*652o*KoT)M5IavMu#Fz zp+;QaVu^TftG_esY~=CX4jENnD6!#67mnZx=3~Sz+VzzI;Y77j?>3&V!Z8|0c_f@j z0Q>XuY})t0T{m-fM7!3g2=eK&XA8olh_EJ(#t*Da8C?@a-*aKFMn8jW@RZBPd$#e8 z86^5EMzvjyJa5n9{S+^>H1a9W#f@{RKS#p4-z}BnW&5;Jv~e*J{D)-j9Q12 zewgUE%TZl$enX~2-MX@r8jh`raV^s~W7KMG==52qx{H076>uB>3Y{!zV8f6FU3NH{GIUw3pPTLMdUp%pJyfDduP1{3nu zhbfzep)>ePj`Gka6zlE|xen5^iN^iS~kf!2>s5P2RzC8QUtViW;Lu&oHsbSpHR(Fn>RG}E} z%f)4xO3LeC@}Nt~LkOt4W$|tO1A*UG{7r~Adl_zK%x=c3g4Ci7G8peQK&V5VC?LUr z(OL3U?xftxBAYCl*Em%VAHLQp<6d;Gqp0>`6w^EUl!{-ibsCMiB%?$D->A9767{H6uXpKLm|=~GSmi>u&A-@>+^L!37c*mK2Z zM_&8(eVXNp|I_Tq%k#cZv%LB3|1>-Dg8<*BSzk5xeVQG40p0g$cH~8P->2D;7s!2| zW@k>_h<@soUipcE@6+taE9}0H{0`E-QNDdN+99t_UfOqN3AyqTJy2fm2g=V4oLTbDySxz^3ps|UgihN4j`$MsRpJ}OcZly3_2&aBzuCmO z#CgPHiHnFQ5>FaXN={@KL2#CgPHiHnFQ5>FkCgN?xJBjxYA0X=Q)pXoPhZGR~7NaB2={ucnfznHj`*iMWPdx@tLQ^eK8HN2<%-zWZ<_$cvl;#0(Dh`%MiNPLB;zme5( z-y*(8)L;JT^%lt?6b~mJO)5QJ6=ZG&6UnRale24fxu}M-(mFH~Y zT;e?9vBX8h6Nx7iL&P59N@9YTA?Aq{;#tHYqW%t8=@=zW5O)$UA?_l6m3R&Ddg4vQ z+lY4(?;$=we2Dl6aW8Qn@z=y>iO&;XCjN=|Ch=Y32gGJcSe2hciANIW6BiN}6PFU( zi4kHi@pNK}xSF_zxQ?j5vDJA;h?|LH#3|y1#LI|R5Wh~mmUsj47UCY_UBr8d-zWZ< z_$cvl;#0(Dh`%MiNPLC(XX0DL_lO6GEwUF-{thP|O)5QJ6=ZG&6 zUnRal)c>`i@_V1yBBI1d}lZhc>4{;?iLCg^I#0v2&;t+8Yag;bg z+(~pgCU%Za4h;)VjvGAJp2-v1NvA^}r#cU!Vk zy?3@;_m4M6#?vZ@jwdEKeY{z6Q9d`x-^JR1pK0T<-ElJB|4Q*g$FurX`nJiR?W031 zl)}a;J>kdR`;vUubCs=r&X#ujRrvhqJ^kB7wC$quzXFnMqhQ-zCFimQIM3eNA?Ul7v*0|Kt3vGm6OU&#`8Yk5j*JczL|OTtIFQr?wEeZ+0&ri{{v8^ BXvqKo literal 0 HcmV?d00001 diff --git a/Software/reflow_oven/Debug/Core/reflow_oven_src/ked/ked.su b/Software/reflow_oven/Debug/Core/reflow_oven_src/ked/ked.su new file mode 100644 index 0000000..e69de29 diff --git a/Software/reflow_oven/Debug/Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/subdir.mk b/Software/reflow_oven/Debug/Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/subdir.mk new file mode 100644 index 0000000..6e514aa --- /dev/null +++ b/Software/reflow_oven/Debug/Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/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 +C_SRCS += \ +../Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.c + +OBJS += \ +./Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.o + +C_DEPS += \ +./Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.d + + +# Each subdirectory must supply rules for building sources it contributes +Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/%.o Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/%.su Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/%.cyclo: ../Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/%.c Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m0 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F031x6 -c -I../Core/Inc -I../Drivers/STM32F0xx_HAL_Driver/Inc -I../Drivers/STM32F0xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32F0xx/Include -I../Drivers/CMSIS/Include -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfloat-abi=soft -mthumb -o "$@" + +clean: clean-Core-2f-reflow_oven_src-2f-ked-2f-ked_third_parties-2f-stm-2f-peripherals + +clean-Core-2f-reflow_oven_src-2f-ked-2f-ked_third_parties-2f-stm-2f-peripherals: + -$(RM) ./Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.cyclo ./Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.d ./Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.o ./Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.su + +.PHONY: clean-Core-2f-reflow_oven_src-2f-ked-2f-ked_third_parties-2f-stm-2f-peripherals + diff --git a/Software/reflow_oven/Debug/Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.cyclo b/Software/reflow_oven/Debug/Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.cyclo new file mode 100644 index 0000000..acd548f --- /dev/null +++ b/Software/reflow_oven/Debug/Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.cyclo @@ -0,0 +1 @@ +../Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.c:7:6:usartSendChar 1 diff --git a/Software/reflow_oven/Debug/Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.d b/Software/reflow_oven/Debug/Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.d new file mode 100644 index 0000000..2a69f3e --- /dev/null +++ b/Software/reflow_oven/Debug/Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.d @@ -0,0 +1,12 @@ +Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.o: \ + ../Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.c \ + ../Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/../../../ked.h \ + ../Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/../../../../ked_config.h \ + ../Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/../../../peripherals/uart.h \ + ../Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/../../../peripherals/../ked.h \ + ../Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/../../../peripherals/../../ked_config.h +../Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/../../../ked.h: +../Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/../../../../ked_config.h: +../Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/../../../peripherals/uart.h: +../Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/../../../peripherals/../ked.h: +../Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/../../../peripherals/../../ked_config.h: diff --git a/Software/reflow_oven/Debug/Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.o b/Software/reflow_oven/Debug/Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.o new file mode 100644 index 0000000000000000000000000000000000000000..87cb81faecf3414e2ae67cf36058d3b05add1563 GIT binary patch literal 29856 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 G`TiSH=%wfY literal 0 HcmV?d00001 diff --git a/Software/reflow_oven/Debug/Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.su b/Software/reflow_oven/Debug/Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.su new file mode 100644 index 0000000..f9eb092 --- /dev/null +++ b/Software/reflow_oven/Debug/Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.su @@ -0,0 +1 @@ +../Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.c:7:6:usartSendChar 16 static diff --git a/Software/reflow_oven/Debug/Core/reflow_oven_src/ked/subdir.mk b/Software/reflow_oven/Debug/Core/reflow_oven_src/ked/subdir.mk new file mode 100644 index 0000000..96fe281 --- /dev/null +++ b/Software/reflow_oven/Debug/Core/reflow_oven_src/ked/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 +C_SRCS += \ +../Core/reflow_oven_src/ked/ked.c + +OBJS += \ +./Core/reflow_oven_src/ked/ked.o + +C_DEPS += \ +./Core/reflow_oven_src/ked/ked.d + + +# Each subdirectory must supply rules for building sources it contributes +Core/reflow_oven_src/ked/%.o Core/reflow_oven_src/ked/%.su Core/reflow_oven_src/ked/%.cyclo: ../Core/reflow_oven_src/ked/%.c Core/reflow_oven_src/ked/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m0 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F031x6 -c -I../Core/Inc -I../Drivers/STM32F0xx_HAL_Driver/Inc -I../Drivers/STM32F0xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32F0xx/Include -I../Drivers/CMSIS/Include -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfloat-abi=soft -mthumb -o "$@" + +clean: clean-Core-2f-reflow_oven_src-2f-ked + +clean-Core-2f-reflow_oven_src-2f-ked: + -$(RM) ./Core/reflow_oven_src/ked/ked.cyclo ./Core/reflow_oven_src/ked/ked.d ./Core/reflow_oven_src/ked/ked.o ./Core/reflow_oven_src/ked/ked.su + +.PHONY: clean-Core-2f-reflow_oven_src-2f-ked + diff --git a/Software/reflow_oven/Debug/Core/reflow_oven_src/reflow_main.cyclo b/Software/reflow_oven/Debug/Core/reflow_oven_src/reflow_main.cyclo new file mode 100644 index 0000000..70a1c03 --- /dev/null +++ b/Software/reflow_oven/Debug/Core/reflow_oven_src/reflow_main.cyclo @@ -0,0 +1 @@ +../Core/reflow_oven_src/reflow_main.c:13:6:reflow_main 1 diff --git a/Software/reflow_oven/Debug/Core/reflow_oven_src/reflow_main.d b/Software/reflow_oven/Debug/Core/reflow_oven_src/reflow_main.d new file mode 100644 index 0000000..007d094 --- /dev/null +++ b/Software/reflow_oven/Debug/Core/reflow_oven_src/reflow_main.d @@ -0,0 +1,70 @@ +Core/reflow_oven_src/reflow_main.o: ../Core/reflow_oven_src/reflow_main.c \ + ../Core/reflow_oven_src/reflow_main.h ../Core/reflow_oven_src/ked/ked.h \ + ../Core/reflow_oven_src/ked/../ked_config.h \ + ../Core/reflow_oven_src/../Inc/usart.h \ + ../Core/reflow_oven_src/../Inc/main.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h \ + ../Core/Inc/stm32f0xx_hal_conf.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f031x6.h \ + ../Drivers/CMSIS/Include/core_cm0.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/system_stm32f0xx.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_exti.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_cortex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h \ + ../Core/reflow_oven_src/ked/peripherals/uart.h \ + ../Core/reflow_oven_src/ked/peripherals/../ked.h \ + ../Core/reflow_oven_src/ked/peripherals/../../ked_config.h +../Core/reflow_oven_src/reflow_main.h: +../Core/reflow_oven_src/ked/ked.h: +../Core/reflow_oven_src/ked/../ked_config.h: +../Core/reflow_oven_src/../Inc/usart.h: +../Core/reflow_oven_src/../Inc/main.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h: +../Core/Inc/stm32f0xx_hal_conf.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h: +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f031x6.h: +../Drivers/CMSIS/Include/core_cm0.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/system_stm32f0xx.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_exti.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_cortex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h: +../Core/reflow_oven_src/ked/peripherals/uart.h: +../Core/reflow_oven_src/ked/peripherals/../ked.h: +../Core/reflow_oven_src/ked/peripherals/../../ked_config.h: diff --git a/Software/reflow_oven/Debug/Core/reflow_oven_src/reflow_main.o b/Software/reflow_oven/Debug/Core/reflow_oven_src/reflow_main.o new file mode 100644 index 0000000000000000000000000000000000000000..103442a46a8ba3e978380539660b32caf574ee16 GIT binary patch literal 507440 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∾_`!B_E;P;NCy&P+r5^=G#6xjW~onl^=R$&lyhwz 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 ORS5mt9|r~Fxc>m9>Ve=lo~ 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

      C{J_;iMEEx5-k${~!s*TFsS)<R3FM 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 z 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�?IL7v*EEXuJg8`zyrEFhSeVe?i%K8g096dOlfGV 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 ZbtLl&8yPL-EA)04Y_;FA2~sfn$J^yc+7l@ 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 literal 0 HcmV?d00001 diff --git a/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.su b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.su new file mode 100644 index 0000000..5bd7ccf --- /dev/null +++ b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.su @@ -0,0 +1,14 @@ +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.c:137:19:HAL_DMA_Init 24 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.c:199:19:HAL_DMA_DeInit 16 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.c:281:19:HAL_DMA_Start 32 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.c:328:19:HAL_DMA_Start_IT 32 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.c:384:19:HAL_DMA_Abort 16 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.c:422:19:HAL_DMA_Abort_IT 24 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.c:468:19:HAL_DMA_PollForTransfer 32 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.c:569:6:HAL_DMA_IRQHandler 24 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.c:661:19:HAL_DMA_RegisterCallback 32 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.c:712:19:HAL_DMA_UnRegisterCallback 24 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.c:788:22:HAL_DMA_GetState 16 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.c:799:10:HAL_DMA_GetError 16 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.c:825:13:DMA_SetConfig 24 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.c:859:13:DMA_CalcBaseAndBitshift 16 static diff --git a/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.cyclo b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.cyclo new file mode 100644 index 0000000..e74eebf --- /dev/null +++ b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.cyclo @@ -0,0 +1,9 @@ +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.c:142:19:HAL_EXTI_SetConfigLine 9 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.c:237:19:HAL_EXTI_GetConfigLine 9 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.c:316:19:HAL_EXTI_ClearConfigLine 4 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.c:369:19:HAL_EXTI_RegisterCallback 2 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.c:394:19:HAL_EXTI_GetHandle 2 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.c:434:6:HAL_EXTI_IRQHandler 3 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.c:466:10:HAL_EXTI_GetPending 1 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.c:495:6:HAL_EXTI_ClearPending 1 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.c:516:6:HAL_EXTI_GenerateSWI 1 diff --git a/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.d b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.d new file mode 100644 index 0000000..8bc7d64 --- /dev/null +++ b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.d @@ -0,0 +1,56 @@ +Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o: \ + ../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.c \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h \ + ../Core/Inc/stm32f0xx_hal_conf.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f031x6.h \ + ../Drivers/CMSIS/Include/core_cm0.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/system_stm32f0xx.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_exti.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_cortex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h: +../Core/Inc/stm32f0xx_hal_conf.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h: +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f031x6.h: +../Drivers/CMSIS/Include/core_cm0.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/system_stm32f0xx.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_exti.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_cortex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h: diff --git a/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o new file mode 100644 index 0000000000000000000000000000000000000000..3c3f9852b7cdd7494db9f17fbc08e28bbed43f13 GIT binary patch literal 508456 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

      pQRS+^m1n)i(Z6NNzUKShA0aH=70VO!@ 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 M82wH(?&6pK2L@<2_y7O^ literal 0 HcmV?d00001 diff --git a/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.su b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.su new file mode 100644 index 0000000..72b8ce2 --- /dev/null +++ b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.su @@ -0,0 +1,9 @@ +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.c:142:19:HAL_EXTI_SetConfigLine 32 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.c:237:19:HAL_EXTI_GetConfigLine 32 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.c:316:19:HAL_EXTI_ClearConfigLine 32 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.c:369:19:HAL_EXTI_RegisterCallback 32 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.c:394:19:HAL_EXTI_GetHandle 16 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.c:434:6:HAL_EXTI_IRQHandler 24 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.c:466:10:HAL_EXTI_GetPending 32 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.c:495:6:HAL_EXTI_ClearPending 24 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.c:516:6:HAL_EXTI_GenerateSWI 24 static diff --git a/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.cyclo b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.cyclo new file mode 100644 index 0000000..8384855 --- /dev/null +++ b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.cyclo @@ -0,0 +1,14 @@ +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c:165:19:HAL_FLASH_Program 8 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c:237:19:HAL_FLASH_Program_IT 4 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c:283:6:HAL_FLASH_IRQHandler 12 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c:426:13:HAL_FLASH_EndOfOperationCallback 1 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c:444:13:HAL_FLASH_OperationErrorCallback 1 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c:477:19:HAL_FLASH_Unlock 3 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c:501:19:HAL_FLASH_Lock 1 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c:513:19:HAL_FLASH_OB_Unlock 2 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c:533:19:HAL_FLASH_OB_Lock 1 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c:546:19:HAL_FLASH_OB_Launch 1 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c:578:10:HAL_FLASH_GetError 1 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c:601:13:FLASH_Program_HalfWord 1 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c:618:19:FLASH_WaitForLastOperation 8 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c:661:13:FLASH_SetErrorCode 3 diff --git a/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.d b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.d new file mode 100644 index 0000000..220b9df --- /dev/null +++ b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.d @@ -0,0 +1,56 @@ +Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o: \ + ../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h \ + ../Core/Inc/stm32f0xx_hal_conf.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f031x6.h \ + ../Drivers/CMSIS/Include/core_cm0.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/system_stm32f0xx.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_exti.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_cortex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h: +../Core/Inc/stm32f0xx_hal_conf.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h: +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f031x6.h: +../Drivers/CMSIS/Include/core_cm0.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/system_stm32f0xx.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_exti.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_cortex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h: diff --git a/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o new file mode 100644 index 0000000000000000000000000000000000000000..a55f17734e4e7604e914e3ebd0e7ba6cdefa9314 GIT binary patch literal 511452 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

      lKlltFz|B|6UAb~rhpU&WaR^KTU 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⪚LXX{;OYl7S08ha3sjjjzE*ll)QJ^)?3Yt(26x41Gp zgWKwA%{j5nrRKJq=sNZ}ob7Ps%z$vGD^Ct?mun+;(cLaJr%jTpHBVA|T(A2BlI+qm zE!^i)@C3czg@3_|w8Hf`7rKM4$(Nu@am~96-67YUKnM@JvfY3jah-1fa?~|o8%V0F z0}YP3`pHpIn(H-NecTmw0bIJPbP&8`xVG2;Iptc%=yuw*fotrH%V!J*@~kVLK{eB5 z2t-BMu5Q1;Jjd0)2O#HMbz{JtcO47{x#0TqG9VXS+AtVga*fXhx$G)m1E0CBi64(B#8(_M=T&)@Ce7`g!WW=4%b_n1FW(JXh@Pa&M`4j%*(I`m&J5d7J>E1gH$X)J6^Pt<~K6n#kuiJV8x@31A z??(5z=WxO9ci-&-Js=gKT#yli>62q>kV&xa0YAkBe@0v-rEVTZ@ByOo-faRjN9N%cl#00<-1!Afx#_z7;hbJyZ7=; za>u=91k4NESD7o`cL#7FAGk~2hh3rD&Smk?9l_~c?M#VZv6iU z!OC%;W4`;$ozxi>J$LKpgL~ojW;b8D%_qPWyR&jYO5CmK^OgI_18}e1K{w&0)IIGe zkY(TmE|KUTZm*r=03%r(cXI|)aE*2!rOU-w? z$g7w?R1Eiu>53l+jfG3?TftY8SmaeR_?4!n`Sw(p{1Fbqtb@uXeuBeAX8+62qGv$ z*@%d!2r?DfTTxUL6jVS&)c?G`|2V#*^EJs3(`j_|p=b&7?#Fau{bD=yI8} z)ceh6JgBHR#i(hmD`0ZI20P6})Am`&3{nU34Ac1|ghfo@eGGJ#5&Z()Ip#E7>te?2 zN5BPU>NX5p!Ytko%Ti{sH7qYO1GUhVGk3>9Si#(+^}3SDnhVP+ri_-7YUXdcD>aPI z3<$3!=u5>XnMZLwgD%p=N-n;2)Bbu;t$2`pO}Gs+cP8O=qE(82V- z2k2zB(Jph9@oWOS#{BUJeqBr(rM=ggsY?Mj7)x4(yP41EuH0nS(jIV&nV$&1+e{86 z>pjdL)QG&p+}(@`-esoKHrUI!d&9Di8Khyvi#`JkGW8U5i0R!5hhb)u819dmP&#TDVa8KA{)F+4gvlr)n*jEdd7tWs zG3HzPGh)w}eRLmO*i%$t?qPK|FbQ||)p9s^uuuL%Oi#8g3c9^)<#jMGb^{e+-t6R` z;O@gtz6;$xc9`mSUv}FrfFJ9*8t(q=>Rhn>>>J;K1+&|zS8{+|{~8=Z*gATkL)j_x zwLuuWlq$DyHkGoVNVZ}Cx+qq56YkOMkPf;SHdX`ogY0(Ni(}c;5x^mKeJd>E*bQf3 z8P7&fhUH=QM;qu8Sc50v2%Az4NMw^ffJqWNYZ}Ho%Kq*O%VVr~H)5u-FWEwOoXw}b z_yqeFUAlBO^*MwY>@>>6v)EIwVxVj`XAK;3*sasSa@oNdVEJqbrFW;;RqsPsz`jN+ zSRs4$O|UcUFVWByu~mMEa+Y=JhOn3|r|Rqin?;R~5_S&dHl?g?2S&fhwto+YGS;0I zq;fXxB%p!~&jwVoQrZ!!SRYzns#)b?40MTQ=~2AQen5?a8usWEgucS&&Ih!yo3=sN z&UUxJq=Ow~;c$(eNL|e?R!Dc{I{P6lu{T(=A?Uif)Z zZs!1Z*!(Xcyvue|LeR@v(1O&*+9}|EkL}Kb@ILD~0ipZZmTxeL0rpQRgb&z`H4r{z z(|&{S5!*qHr9t*9>JSXEOQwPiv!RyIJ!Z{*hQkQ^G1YNT*r8|8jj~IF0Z-Z8&VVsi ztAXwrD}4cn=j=1;a=c*IP>wx$m99BDj;Za7J>=O8`-vEfxIH++8a~ ziQ%5mLwk^WolZYuxs|kP9O6da0mO0lsJf2l3Mf}R%#F1oSOVATi1ChaejC9OIi?kU zN!)Y#Z0acYS}}yjxHstaP3F`h2va!s?Fg32SgW=@0d(cuZF)i~xNiE?rIOo9Ph=JM17*0?oKp?hC2s2f%42ST1*_rSp-1Bi zS1}ziYq?$YDM1~#^li+go-3snuYt>R1Z(7a{sC*^Bvhj}b477rEnJirqO@|)OCW6H z{z-skJNNq<=sLL6I0WnDe0>2|xoS%5uW>W-z`D5Vtr+$?mrAeU4X*tNpqulj4f-Z$ z{VgnexW`?Ha)*oXfbK50@f_eDH&lx8?sLcJ^s%37rL|yyyPJ=g54dP*ygcM0V!iI z0e%a8{1L(z?T0Ruzt#u8F#bs%E=V}P=syUfc$;Dfqj}|KSjOy3l*$Z6(Kl~d;IL$}A3Sl8{ zq8omOe>()iBK{}J8P4)69|F$t&OUHB&ll=oQp_jQDa{2wF$}DPABqJlNU-o-9|{ zLt5S3WE-ecvqx4%E3Lcim1LNB$Zk`*v++Ze%57I*>RFWa#Rx&YaoL9jqs_y({bS%DQS_se?df&|NcqF;MJ_TmCq zi0okkLWjyU2Cy($+DSmTjJ*P3gzN`OTq0$Y==F_~-K16cpzOaMxW~#?(mH=gwu183 zIN1_vEXB*B4?uTVcFqpJAwjm%0m37)FaJWYMA=Hp`I2NWX#YDZ+vN{9CX1uCamC?TyG9gXoJ{`K_vc+6X#?JePHKh zA+$0S%hKp1?SjlmOHhfdSOr!pyS4@FqD(M~C}pzS)N?GC-JlY&LN?k5sFeNf49hB6 z;g7JamhqGeUy|Ld#LO*xWr%ck|fy+bBzfv!{bl|9&1*}Q`o_L}U?n_ykC&NRSv znHi-qH)P?yutQwDZV_JTId`?5WE;m|Mph(;ffHPVXmK(>(%)E>$X<^mqc3Tdkwl!eoBI3(+% zM!~Rb=Sje0*`+G@jmW;GjOB^!%yEn`DqHUhcq*&;3c4}bQgaOSO!gxs*3V@J194Yg z$Wo|&caaOPBc`kTZQ7FEGT>xKs@E-`~CttY{4*v3M;b1}Xx%8dR0r{=jFbR?8Q{f&e-~KL4 z!sP2-he^16h*~WX^7B)miG2RI$;;>gOO_w)N9YuJCG{#(<$7EE=o9j7e?gZnpGTWphMY};L$=)Q zH3)O$aiI|A%J)&se0g>bgcs!N=;N!4^3gZI%H-TeuyXljvaFEni{M@<-$*~YN?uBP zc(vSc0|Q->?~DLkmM7C2UL#*Z$@&%fY7wAT{t;cQIypmCYrXspJD4=c*BpVcQ7-un ztVupR2hc2ENO!YEp7j`(t#b2F2;1aRDv#Uc=J%oNkgub&f=>CPzupnm<6glC_vJA>-23GVsS+NL+gQN;fn56u{2t03$3gc0`@2}&@Y2nI7GRk*gOX&wTg$EVN$2)q;sG~g)?RFO^S`b z!?Ibik=~p(MJXjN?TQ)+Scf8_6VR#njdty;icPe~T~q8ihGDxDN%Y~_bwx7$X`~y9 zIlFNsx)owtcW)}fX}7qgu%kxEZN=Z0!Fm*CHi&XZagc_+tC&oU`Ci4m0Clxnbh ziV$ic-dEfggY_#m(8@QUm_twb1I3XA&^=Tvq1M17#o2$L8&r&=_QsIHq8Ykj#XJwN z#|lS!H%Aog0N|gZWsK7CL$HHN znI9llxgi*ENSTQAa6+7N$0*$6mA)JxL211NdFgc-QX@^Z$Iz=K%hH|(NCYj1!H$=%& zhET^kTe*B8ggMHuWhH*>oy< z7Xq#-r_hsiO(~-j)Gp;MN=|MmwU;5ht+W;(Sda45O9*yH`N^MvyGrF3h;mPvNT(+E zmASNO^egL~ARJI8(}Cdwm_r>Zv@Y_G~N0nAIaemxw#Rcb9J z;iIa10bPJ$zWbF9Q&)dP13hxGJ4)afIr>1#pN|Inz5GrP?gS ztfN(KwCTsH-laz5A=O@c_{FL0Ex_Vc(jkOCta^`n+hKA-wT0e*bk*myuw(mMZi!IOMC^rh%PO z1%|?}KxMle4yRQ!>flhQdKduVd6hkFS;eaJ5?EePC431eQC$uOl&WUGjwqF?6*B=< zs=c)TRjYoRi-9hw>L@e5tlC}!_gYmNn)egxRQh^Ay=noShc~F6*nl;vI1Pd|sV>rk z*{n+V-+`0r)3so&s*Q9w+on29nRvVEU2DYbQ0<|W;kxSF75Lpy`JaVlw?4D1EBz$zbGL;d1aSbC~&(|)v9 z-4h6*mwI?1n72BaHZUJ`s1UGEed-H@_EnFiz}-*1j#4pyby_PN0@P0^0}NCLQ1TqE zo)-y-Q1{FQM5=#23il{=12rb1)l()y7^7~a^8cWE@mcuAsv9WhJEZU5u0E2hD(Q2mff%QI@53a}z|47Ekhsx=>D66e$hzlUY9T1jQ@1@-Tf043^i zRDP7I$5E1aQN5imPno)(GNcOiXT@NZY85TbRqEdz5v*G6HWk84>aXc&>azOuchJ?S zKSoV6;fh+;2fteNX-bXi)cv%%)vG&cL26Lv9tLYv&kaD7CUx>CShM=P6Z~4#jxw0E zsxQt!=r*;F3A%RmoFIhmP~Y!|uv2~gbC_IJYp6!Jrk-tpNtfD0y_s(HnNJ|RsXjw# z?=AI`*WqwmeSj*(9`)Ow!19jz@*}Wbbr>DQ^{HQ_1oEDG;_tBRS9`yKNerkn-UWN0 z{^%93hwA+SFnOdtM7L^C{SP%ahtq}(*OsO;RMkx#~4+%>B=K{+FTNVl6`1&GvgqChY7SPwGDvggC9wUP?5WTNYdFdP4`_A^ zz(O=KD?|y^Jf@5+Oe3Hvg=@}J6&a!NRw8tyX1@^-rLm`7CR#H_i$IJfeG1q?P24&_ ztY!xZ4{74I!97m%_XEU?*9?9N;bDz)7FdENlM25hnnCKZBx=SrfhB1w>Cr!`S+fM} zm`3&)ER!{J{{*CH>gXj&)eQQ;Bu(>DD1O6njWHVTCp2IG2wl2{6G51vamGeAAyf0k zT#TNjc`$-t*_u8&HqOzkq4FbFQ=JXS(@f=Hc~axo1<2RD^Z;;5ljsa6(2U=XV5c?5 zV-dPYGi^77XEg)wfSuDEqlU(L&1vd_7i+dZ!IUm&%Beq5qM1(XS*fP~HYtfu;gGsCAWE@P|G;{Al z*sf{Ifv`g}i`J}8jUO#!S2a96!q+tQcOmT3c>V|Bb>?$vxpH=s|ml?tkRnz!ia?Y`!U2Ux%6TT0;uG*MIoJ<#y? zpnIt4se$g1=D=l)FsK<^h?ql~x)m@P)@W~mJ=Pd#7ah^`9fk0T=3iRUM>Sp95I)sh zp>GeyG_HSvz0fT95DqTdQSB)>&H7Wb{8#Vr?nN~5Eg1zP}8tT>mCB#S?x+^uyfi!XgfQvUHCpi7i-(UN0bt6 z^bVMmYX80jc2Vm~9f>lnkutz??YsZNuR@zx3%^P&GXl7z4W~8avNp>Z4mH{x--BJz z^0ZsjYVRLIuzKzEldx>i9(^0EQ9HZ`QJS=WpND0$_SMe;E!xz3aA?!EuE!;4*A7b| z?9dwifn}%GWe;>$wV%)meN8*X6}s!%bM&s<&=ycZ)vaClD&Us(Je>~Q)<)BM-J@Oi zCQR;Vg*vdi+FMt_`m|4)0QYdK5c9tFE|u#2+Qy$?GNA3FDLv5Mqayo}R=E|zL2Y^r zghSeYVo?ikohC zGT0uSGxgTobzg0ViKlLWUbVeC=f4ozOXoiamfpIm-!X!Z?oK|~K3)Bv(D~{1wth%2C~#a6~z#E69OKvM!E}1yXd9aS*2J4$()%X}ZKMV8?ZK z?SK+e=X$IYS z-2qy*i*S$keTG)83;kaw zLwA@$U(w|xBUr7jhxYe6UEXp)qmHoyH0fHMp=;KKb-=Psx2hTwY}dV=4_$}Oi!#n@ zy6eecUAkj4p}Vdtnh&_Cn?p6~5$8`f1)qxG>)u>`^q-9756Jkiaf+G$kh+6UoNoeOn; z#&qwGfj!d+DJ6ccGy4aYF8WDVFuJRLD{TdC`Zrz!+oNADhKajA^c);K_3I6A->ctT z1P3pDVht?4^;MAoAHAXuCj0bNz3}tZ$F_j^>A928`Rl*D2ZsQCvl7BUeZ@mSkiPjT zbo=!+{?G;MZN38>(0>_=@j~=FrO<`yfBzW}rhkzShe-WxvW(KNqDDxxezX_^#poAC zLwHdCf|{wZdYhNQ4(Xe_5hYIlPA4o6>tlmpnV|p31mO|=n+p&#QC~}$agx630|<}m z*U)E7$Mo5I;GV4a3W6|AzwjL3xIS$rLZ8sL(Sc#6{w2y4v-Feb{4ZOdP!5wEeI$K} zkgFf2YOq-E{t2R#>St0ZRIdN~N3bfrl(L}9`dxH$YV>nx=enZTX2YRYA2ft0b^5iX z5Z3E2Ql8bIUqiKhquz7^CQbU0mC!ZoKc(EeMgLtYpjCg2vb8q-viY!V*RS;fbm-Hm zO77HOSp;@ff4LrTP2c`Epi4hQ|E%G4{Z=}#xS?M~4X|##Idy7o>W67PyQO!hJ9b+? z;Wa>yemmWAP=(T~Po*o^r{59{-97#6II#Qr_vizwe*H%J(F6J^)Vg}0 zFOtCFp+1Nfq(}PMlur!mr&vKZq}MNkZdlL#19+_GS0KuW{wytIPxK3^P94>!NZ{~P zKj&{ajOjBdSA3@LCwQ)(@DMRy=tC?3E(Sfl@2-ZWwAQ&94h6z}kKxT;2;B`n_7Hj) zK8rvwPs21?_4gXKQF`uWc$5B$UT;ImXAt@rCN@L3&oJpVjNohdmX>rsL-bAf`5P8) zgf74kKLarX4O~BjL533_Lb%`X#y@~ygD)-q2MjJt;TL9Tr`0XoU`=OI5e9o}=pqek zjj)U|9BcqY8-Atx9%FEM4VDKDYd(NUtl=GM>>e^$Edq-()X@m>h9cVW4jbye0VEh6 zP|M_qp?n!wqQNZ{b4fB(P@!_v@clOEjv1s$V9ACjlu@S`uF_W~sfK*&n57x|;=qm@ zexRPm3ByA=T}?OqOnFv@Va4x&Ov5Z^T$e1vY|5dt4K1`L=NNvehc4H!b~9q;87@+j z>!hKJ`il7mtMA}&${6MSMHr~WkXi{=YIs85D_%6534?o?p=}5J$_+-!#48LpzXwzr zjFc!<8P-#dS#9|GJHREw_?d`u*|6j|bTx(pIbd~$z43s0!w|i&4F-1_w$U*EA%sna z6HhQgvmt^`Y+DRV=t*uhaM@sOhG(^ac7vXttPX=ceS_6$NLmiRs|JoP&ozTA53I}J zUk|_Qh8-*{Zy2sVg09=p+7I1LL;5-hZy8*vX1;BR*$rKfVe3BJ#yf`0N(k>7Lg+ZQ z*Wfb^tj~}{t>b$J#usqkU{0xKzu~$Uq6`?AxnK_r-NykB4OgZ>_{iWxpS%wmzNZ7` zAwxYS^1}ut6`_v}8#lvb#1PKI8q-Tiaul(vI$K6nzJshcUwz%+si&WpuAGi(Y##W8Q3l zxAFIz@bfVSkmWw(;2!{A<77t&{fy0Y&HRlC6TkwD+v%YVG!~6wy1~XDX~R5Vbke~g z#CSFd5Nd3X0)!cVEJo;XW7<#fi!wf@##yxS+crRqv4A%AgU0J6Fo`v43lQay@lSgH z5{%<0(LG`m(mhHv+IiwiBpJO1;BeG9&lYgZSV_xFsxgzk1xPb~L{;Q*V*}-9Cyahp zVClw3AHgKUXkG+ircs;-VU}@&8^+5vzMcYIj`3aU@8%j;O~VLz#+(XRo;1D)1LPZL z&d zfXQRy7qpd+7)NL;cw#JSgKpI5K;_(1<2x#_G2;-myq+0FR7gKJ`qC5PY8rDxXgAY^ z$Z?r7-pLEGKAr#OVq-MFqKkMEz;C@41Q6j{9S-(Qy>*vF{X+1hiDF(worB$Yg%#% zeuqqPFGCn-vQ2|!yy-*?CUMyGa}QX8$v6Wn$+Vdkfn?Ln74XY4UA_-tw&^-;`Z=b4 z+C_6s^N&H7XWH0~DV;Pq({%GqGiX~nWtvW-7nnMCf}J*9phdjM^bJ)~XH7;SEYF$N zQUmO~NjVDx6`OLXu)SdNrdO@Rw3&_pFPd6tpfc0<2C#CI{bjH!(+F)+)uye@@VkWR zLU-9T-vv-(dLO3?6RwzY{|3~Wny9X-GtKXVWxZ){D@JHA9sd)S%_f_R5Vn}UaR+NP zeMLe~iamx=p1r zu-m4j1#svwndm;;HRargWv?lSIxc;t7gJ%UfTtczYaO z>3VuP@;`%lJ6@z(Ezq&l0>MHZchd3{>Dajs;~jJyy#c>C$4I(736AOqU`dYNAAu!1 zGCN?B=GaYr?{r5udS0>|)h}RD;P}~Mgf4cRlmlUzV-f9t)sB}|!?Mn?dp7A z?QmTF1P<37{U{;7?Ra)2Ec+Z6o5AFPWB7hV8FV~OAB{YA?BW4qjy2aHbamQ5&09~W zj(C8#)13F=9_X}2j+h}%uWyBAhSO*C<`g=OX(2rCv~e%sqEpbf5MFlrW*JNxon}s> zNjN!b0N0%sQ^tAIDQZ4Oxa0JEI#{1m`v6$KQz5Mk51n?-gZq$E=M>Cy#A(L~z*DDp zsk89hscavZt8@N51l!}x?1rVM^Smu!-p(N#z#^RM>3iBpXOj^QQO+yqYrAOYC$tE} zIA{I<%Y)8eF9VBpPHVw;c>wS4QEI+wZM-p{Zt*%q(HEb=0ES7q`2VkOxQ+kLJx)8x8}cKNzxgAjk8gPh@!xs) zM3w+T>2>_~-A(l9z4sa|`S1Th2T>o`Qo8V=%W>E*9P@(w zqXsGDi^?r9`o|j^q5Z@|gE)(8x*%DyBnsN49@M*7Hif!Hp9+70@AA`M!}7B)XcPMU zC0dTZm`Y30m!_$ZtavvF|6OVI5#(Q`Qc?W1+bFcF*1iV$Y6mGK-yEZLY0VL8@O*20 z4(-|>HzDS_2Xq|r{k(OsSufs(2pdw~gJk0`Q(&{{2U<^lXj=uZ-Pts{*SIih@_3Ki z6ao*QadW8kwr`w{j&yv-3HAc~#&vhW#D82$3s}IovN1s5I8F;;$hZnRAipzi)^rF* z#=Y19_t9|&2f;kd%>KnVo@Oi7z%tOxgR+1iGwmS=_nQUM?+rHl&JXSf%+_9oFvRTd z{csO8TQ(oUFteW*1H#QrFGF|IY)2Dx`DT9(KzPb5k{YlDW=E;(b=r(O3}K;J!!wwi zG22W9Op)3A9_Y@Rc~Z0VoS7;d?7UeGb^MCWZ0Y5>VAdjmuEeaEo}-Iqd46y≫es zu-xpYrzAArNS||*na{`tD>uKe6|=4|e}|5YE6wkX1FJIcq_no$+?THWCG&06@w;r^ za}5qP=I5w`dd2)3YLL{L|47+Uoq3omCQ)y`p3aIJ%s2W28qN3m!M(}+!0TYm=FchT zX))jUIfSj|W>k8#nfEK<*KWS~2~0Z7uM45;H2<95#H;3!Re)>e&kTSr^B-t4xo)0z z7^B}XkDvmr+x)8!p}T25dmj95nU7Jub=!Qs8)EjDE9mIyj(KA)gm=w9p`)2z^Xqhq z)@L3;d-Of?*aHyWH-CExpx@k%F6)5#B+6hPn0K`R9-3<>VP=oabyPPEnm18nWyt*H zNnpd~_bFd^Y(D;1n2eaul!HAn|1$*Rjhg>?3hb%*#SG}i%uVzS%QN#`v_3pH4-!K6 z!rYnGW0&zPol3fn|DKvrZsXIJ!eP&NT{0})$NN!A;W57dTL?YJyWa%t9e;K?bYA1r zyP@+QU(*1g&-jd4h_Y||-#;O=?|3Kb2jCwAmO!|F{JK?e2p&K30US!kZ=_1Mbo}D~ z_2b4boeuZ1@&A&0`S_i4z$(UjQ;AeL{x@3cs>Z9S#Z*0hAsreuO!(OemW>naX<6!= zaQqEeUY)RPF)Upt)>GrpZQ?XqeD+N2pku|5iA*OAKsPXHfPv+MNiQfVdpPM2dhLfMoqP=@!;{{l(}u^B?$3nf$fWne z08b`OrV?;;(q>9l_gLtbAhf&1_w)$+S%g)<-QVI3Dk}plx~9M((Bf|ubP*QcPk?2l zh4n({qAZp_gfQCT5`DdJ&|=qn2o`IxyavKU79+Gu#aj&1gL2qn5{r7HxX~Pc5413XWOi z-bIu^%P|j_BwGHL4_%Vw!Y$ApwbW4Be#~ z1)>yNy3dC0f~6!0ex;Uwu0xcImdoCTdzqz)R-1CmYI+STEf++?q{^~}im+ZK7h>*UB&vGxN8Kd4VVaR^O{3479p%0T5®zJ}R#Pb*K43ME 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 z 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

      AZmrTokw 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 ZSY+v74V`PdSUUkOdkBNdl5D=qYfM(Hm+~ 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 literal 0 HcmV?d00001 diff --git a/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.su b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.su new file mode 100644 index 0000000..d9e6b77 --- /dev/null +++ b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.su @@ -0,0 +1,16 @@ +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c:157:19:HAL_FLASHEx_Erase 32 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c:238:19:HAL_FLASHEx_Erase_IT 24 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c:311:19:HAL_FLASHEx_OBErase 24 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c:360:19:HAL_FLASHEx_OBProgram 32 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c:441:6:HAL_FLASHEx_OBGetConfig 16 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c:463:10:HAL_FLASHEx_OBGetUserData 24 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c:498:13:FLASH_MassErase 8 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c:519:26:FLASH_OB_EnableWRP 40 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c:635:26:FLASH_OB_DisableWRP 40 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c:749:26:FLASH_OB_RDP_LevelConfig 32 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c:800:26:FLASH_OB_UserConfig 32 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c:855:26:FLASH_OB_ProgramData 32 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c:888:17:FLASH_OB_GetWRP 8 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c:902:17:FLASH_OB_GetRDP 16 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c:929:16:FLASH_OB_GetUser 8 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c:958:6:FLASH_PageErase 16 static diff --git a/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.cyclo b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.cyclo new file mode 100644 index 0000000..33114ac --- /dev/null +++ b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.cyclo @@ -0,0 +1,8 @@ +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.c:169:6:HAL_GPIO_Init 15 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.c:299:6:HAL_GPIO_DeInit 7 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.c:382:15:HAL_GPIO_ReadPin 2 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.c:415:6:HAL_GPIO_WritePin 2 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.c:437:6:HAL_GPIO_TogglePin 1 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.c:462:19:HAL_GPIO_LockPin 2 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.c:497:6:HAL_GPIO_EXTI_IRQHandler 2 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.c:512:13:HAL_GPIO_EXTI_Callback 1 diff --git a/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.d b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.d new file mode 100644 index 0000000..d792345 --- /dev/null +++ b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.d @@ -0,0 +1,56 @@ +Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o: \ + ../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.c \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h \ + ../Core/Inc/stm32f0xx_hal_conf.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f031x6.h \ + ../Drivers/CMSIS/Include/core_cm0.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/system_stm32f0xx.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_exti.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_cortex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h: +../Core/Inc/stm32f0xx_hal_conf.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h: +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f031x6.h: +../Drivers/CMSIS/Include/core_cm0.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/system_stm32f0xx.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_exti.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_cortex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h: diff --git a/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o new file mode 100644 index 0000000000000000000000000000000000000000..d33fa551add5b725c310c52247eb53cf274abad7 GIT binary patch literal 509204 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

      LF)iY9Wuf=Eeuz`qCW*K( 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
      GRt0K>2aw#RPR z7l+_zoP;xR0WQaNxE1%{VLXKw@dn<Uxe@uueFg<3&Jm|mzSRBh? zRjh-Ju?e=uPS_I%;BXv=Q*jP1##Oixci?_JhG+2#-o{7x0^j3T^onEDPc)2+Nia2L z!kp-jAy^noVMVNg_0fgRu^o2BJ~$Xh;Y6H)^Kluj#VxoS58+9?fYDg5r1H$ zxJEt2!~~ce(_vQhMLXulVptZdU~O!K;n)g0Vh`+(!*DE4!P&S7SKeVQH+0)vyjW!WP&T!?8O?V=N}(5FCXQa3W5}Ik*6q;Tl|z zn{hkt!hLuIPvBX+g4gj5W|24M^zkSs=0|@lf#t9=*1-DM1Vga{cEz6Pz&K3CVK@fU za5B!s`M3yI;9A^>Tk&)J8V}%6JcSqV7rcRYFt56L1iYz;XBrPQ_XH7B0b6xDG$UZTJQ5 z!9(~1p217_E8aq%Lay=g!@O7+pTsiw6jsN&7>q5k9d^bZ*cthoP#SYjNd!hs5Fd2v87)-;-I1}gNB3yxMaU*WU&+%(KfJgBZUcg`Q z2HwSNMO@>Q8w+AlEQJ-YD%QqlusOEDPS_2jFa`(UU>u3#@l~9LvoRf);%a;!H{qxF zCGN$;cpQJi%lI4KM&Bn~5XW?781XtlY{0O(<7q|xx;SYEQFX69v3w?^Y#>WryVqts|%ivR3 z9qVE+w#0VW8GB%F?2iL66<@#?aT3nJxwsIQV+MYJTW|;N#{Kvmp2TzbGyaZ$;v;ea zh2D=I#R6Ca1F$>>VNGm+O|cbr#0cz#eK8(Wa5#>|mvIWdfp6ksT#4`DhxiHZ#BcB* z9>ddk5wGD*RK;E6lO6M5AuNWau_9K(I@kzXU|S5w?ih`+n21Ag6i&d2I34HU0$he` za6N9u?YIl~;SoH6XYmSN$2*v%gln8~Vt(|;5?Br^V-2j2O)wNYU{~yk4vfQO9EM{s z4JYGFoR5oe1+K-7xD`LgukipL#Z!0zf597g7qbPp#wj-z#G+UVD_~Wujn80nY=fP! z8%ALa4#2@U6364KI1OiGIxfZ4_&#pJPw`9Ki-++z{)CtDH@uC$C0*l_1M}hISRBh@ zC43s|VPg!z_SglV!#?;tCgD&VjW6MA_&UzRxA7f(7dPO?_!)kM-{SZ9Bc8{r_y_)l zSxdRbDHlG5Phd$5#41<|8)7qTjbZpKMq)oqz(F_y$KfkD6=&gFxCB?>I{XN?;TO0E z58)4Z1~1{Scnf_>yT->4^I~Cq63gIISRLzPFt)^Y*cp3ZZ|si)F%@6H7jY8Kz`3{( zmtzKgfLm|}?#BK29iGH<_%r^Ff8rx$T;ud87QiAHfaNg=YhnXzimk9CMqn@Oi}9F( z!*MLWj8pIpd=nSrN_-DL#7}T1euD?`7@o$9cnxo&D(f1b?3f1&VKFR?6|oxD!A95u z+hRC&$7qbjL>z*nZ~{)m={N@$;4)l;>v1z~$6dG&kKhSBi&yYE-oY&8T;r4z^P@kO zz;aj_YhZnBf}z*}yJAmtU>qjnFdTzvI2mW+d|ZSpa4l}ct@t^9jR){3p27?G3*NxH zn612PoN{A9EQ+PD0#?P^_zX73HrNTfVHC#T033`XaXh|?({MJX<5FCW@8c%?6u-p1 zco>i4Pk0%B!`tW^=o+6Km=7Pv;#d|d;nP?T8)FEz$1eCB_QB^d35Vind4}>5Sw9Z48vzJ68m8S z4#E*Q4qw5kI1AsxCAbRL;YYX)zra0s2!FsccnN>STj*2KH9mfr7YpN)SO%ZM>R1

      _A99LM6zI0fIpH*qnp#P{$+`~-L6H+T?_;c2{x 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 c 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 z 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 ZmFN6*>fOA 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 literal 0 HcmV?d00001 diff --git a/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.su b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.su new file mode 100644 index 0000000..32fa388 --- /dev/null +++ b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.su @@ -0,0 +1,6 @@ +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.c:96:19:HAL_I2CEx_ConfigAnalogFilter 16 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.c:140:19:HAL_I2CEx_ConfigDigitalFilter 24 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.c:209:19:HAL_I2CEx_EnableWakeUp 16 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.c:248:19:HAL_I2CEx_DisableWakeUp 16 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.c:312:6:HAL_I2CEx_EnableFastModePlus 24 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.c:337:6:HAL_I2CEx_DisableFastModePlus 24 static diff --git a/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.cyclo b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.cyclo new file mode 100644 index 0000000..7fd6000 --- /dev/null +++ b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.cyclo @@ -0,0 +1,12 @@ +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.c:73:6:HAL_PWR_DeInit 1 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.c:86:6:HAL_PWR_EnableBkUpAccess 1 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.c:98:6:HAL_PWR_DisableBkUpAccess 1 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.c:229:6:HAL_PWR_EnableWakeUpPin 1 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.c:244:6:HAL_PWR_DisableWakeUpPin 1 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.c:267:6:HAL_PWR_EnterSLEEPMode 2 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.c:310:6:HAL_PWR_EnterSTOPMode 2 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.c:365:6:HAL_PWR_EnterSTANDBYMode 1 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.c:389:6:HAL_PWR_EnableSleepOnExit 1 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.c:402:6:HAL_PWR_DisableSleepOnExit 1 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.c:416:6:HAL_PWR_EnableSEVOnPend 1 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.c:429:6:HAL_PWR_DisableSEVOnPend 1 diff --git a/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.d b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.d new file mode 100644 index 0000000..8bac4ce --- /dev/null +++ b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.d @@ -0,0 +1,56 @@ +Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o: \ + ../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.c \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h \ + ../Core/Inc/stm32f0xx_hal_conf.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f031x6.h \ + ../Drivers/CMSIS/Include/core_cm0.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/system_stm32f0xx.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_exti.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_cortex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h: +../Core/Inc/stm32f0xx_hal_conf.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h: +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f031x6.h: +../Drivers/CMSIS/Include/core_cm0.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/system_stm32f0xx.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_exti.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_cortex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h: diff --git a/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o new file mode 100644 index 0000000000000000000000000000000000000000..5e73ad06d20132a3ea7e764a0e7315a2e4198254 GIT binary patch literal 507608 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

      6oH7PbVa4=t0rs;73S$TNe@O|j+Z*nsYl74 z7}XYCsMe0C(OjVBlcQN>`)fez4l3YV!?8D$0WsVnAwlUCmdi{!flOh$>M-hQwK7=a3H*iw zMy9WV(1F$izEya#huDcsS_a)AzNl-NrlWPYmr;xLgrq#0alHqYJca{2|-?=(_qUEjtXcSc<8i!2lvB7?! zDGJm-6aS;izoEZ}eY0}uDTiW6b)5EqBYUjVo*oZuvyOI`a4#Pog7d4A0<=)QlFLr6 z;M)}nfwUpw4KUvjGC09R?Qcnu_jq6p*KIz{=HY_%hEfG<@u}$Bx?_A0w;3@M|7K2m ze~JeM#dA|AAKA|z-o1ML{r6Do{HUaI+y^pqU`Uj0G%{L6+I=@X>Uy!VO-pa$yD_d%Dttc^ai@qmMN1h$k3Z<^1f_T1|WK;m40Z{dKh4MY%ojy+i1?`*!>g z04xW;nfeJjxR2=Q1um0X7#UzQ_VZprjiBytVb8n!u)gKLC~@;(XD9V}ftZuG$?{*`6Lck=UoCxXFh=E+F>h zT%m-2O12Q{djJU)WB&tg&AytAJHK=XoE}C;8!P7M0_ilc&A8T?Z{xm;4PY(GZR*8K z@I8MT*!TohTj$XXr)fGtXvEvnqVfG09f!@RaZ+}$&a>d4IeLN(fX$Y@oVuPFJAtp!kpR0XumSE>Rw zSP!Rqpu={UK%5ZsOJCLb_WI@uF3aNZa@)=t3tclcMkaH*)Jdg~_WbnO6k2BZk6$28 zh%MM|Y~%qeOtoqn51MPkBS6?u)p^=cex`g2uyv`}-**oO-wpoP{~93NiJlZ#U0M!M zx}~N!HOx>C@?^l_1>-%v-dxSMGsd;>*drYQ1EG+1jj@C9L563Kt)rxOCa)(gh!tgg z`*DM{pk)5;p*Dm236WN;^(-WZ3n)RXpT8V8m?}<8amOm#J#9sI5C}0)ui2E z9QgM93~`L>>GUsc1{iC!W0lh^>3ZDsn3gm#PMw4+!X5JLfX_?7(qz4mqV*h- z4csqm@9u?*FPk7i7dBX-Pv#S$Rh93|)ut3SvT5XWWsoM&wio8cJQ+7L%N`;&76+9Y3nb8uWU+X zfBAs4t1vxqfMdN!s;6NlY&ars-NR_?QLiC)GbvDG5GYwl4i7orDEvVARbOiMv?*e} zlZGodEY#B>zn>m5*Gw8BY|jzp7JmchqPTd2Lo&26F!bU$BzEvs$Ba!T!#X`DF7?zD zaf*Cth>~PvE4WiI`kvk?kxJJ8?6F>8Q-Q5Znq0Ae zm5MOx4!Tf3gtmkFeMdU5Ec3!%$z1h%IX$_w>ytzA`IM&l-O*WQ5hzdVtU#2=IuT;b za)6eT(N#E4ywsG~Z6m1HQ89!hBDgNn4T0_Yl%i_`Uuz??8U(2v3&`(sHpel3^av-B zyMTL^6JueczSRm}=!q3`IJ$*|>ITK5O9^!^zY5yig?H4uNL1Y}4|XM}e1kB$j9bJP z4#hptfwry+uZr&&l?#m9(@kF-IvJ7L!pD=m2j)nGgOCVEY!!^I3k zh!J$QF(fB8tziiu^bOsQ478U6NK7frl|r%j%UaR#fRZn5z`lLxzGb<3p`J*w%nW5V zBo5<|RkQ4<)HDkboF1sO^FeUjv+d(q^e%~aUu|WQSlZvj!Pl+YycDCQGlXXWkiCLe zs2B`w@jzYP>^o0@X!yiiDKxa|TLILSVQ^4Oub)m(Lc%Y$SLQ=W9)rPG;7WLC%cVx$ z;YM9tm`Bue%{4G-jyg+n=A%-l85?UgVZ zKbs>przfibvNaWEG_}pP?ib)jtfO$cWnpVrCF15Rv{Oq-+X#0>Qd;t+#<_}Y4`)LP zVSW>b;oNZz(;N#2xwJ|3jA#9wYGH2?G>y9;m1yn+G zd^3!#2mJKl-osY!zSCPj3( z@63dWPt|JSc;Koa#;#ukEI%ley9a6rgxvPkv(`;W$RmL?L}iymMUhk(7i0~KLYhNC z!WJ~@5HUprd%WnEU(fH}Bl_{XTjcGARs!0iB!6HBnw&(H)MoydX{DJ?y$qs}BpDti za%k=I4CJAxmg+T9-+0KR2Tjo8Zu$LMc}-fkt|-T5d}5IrP?_U-6JVE`(2rc*qkvXz zO2QKKcaX$V)Hsf5&j;KRo#xIFN!(C4HO>uj;)K`W0O;<1vUW4SG-nX}0OK=k33(3x zjI^1O!1+TfQWA_tk3uFKm3Euo3}p$J*C|#9$^xJ?AdA(P!;_n}Or5~6ILmJ4q7s|i z*@9kEs}I0tKUjCsfZ#G>uvBEkldtFO@Un?wk9kk?Da*t~UhgFpxnv3^yy02FK(2vp z6V8Q|iV3^TzeQ{+S@3f7Y4g$&toObGMz?Cht@cFdk2r5 z?*P-4g7`y;b+bYy9E|T@aEDjt0ZTdfmxspcfXJVHyM=PiWeU3D<@^f=|HYfaW1s-V zAW)0lE4tWmzv-3=Va{oLK8-YD$#kN70Z7DNr&@rudu7T;3kKrDWml7Johw*t3FktJ+F>AJ%U9##BU z4_IHL4|Lb6LA>y9k~$KJ+uwX)4%m3FCzHa4_o!4S1oFLZ;N=}|t+aO}(kp zU`#gh`6MFkhNcd@JTooKC=in#hfS^%>Hpv!m_FCg2>8VHq)k9lfiwbAEvz2AJy8aI zn8KJ>3ps!e-DeQU!ndPOl6elXSr5Tc6T*Q%pZODfb-e!a5dY{<>(iH4$i3R{PEmPN zpfgW6=r#~$v7-3t83D@FgnNUmrPpXl0qYYD;Ouz#QIoSDf zZ8dj4bqf58SGU!bO=2Sjg7RaYec98sHW2F`976Z=49Y@boseB*^ZXRXqia?U&-iDA zkUbbcbvRQ#vs_>gxSiNbhcfMSJ3i^k-^mXoqUFN2cAii2%(_WTbEy>()b}`A5O0WT zqEf%KY6v|O2!Ax^`1u(^!=jbNTLVZAU&nKm}64h@~f#h56(}5&*7pHW@lZtP4Q#a3Y ziZw2)9)yYj)J!D?ko=lsd<)P%T}?K-G0fwz=(MNq3TY+gbSF%6n@>J?#iWFhJ~NvR zxhdInEd;4tLb91IVUe^X~M`5xCfM5)XGHPcZpk^WhJ>yPwz0S_-F&}uRi1BAzf#^uIcx3ke{C@<4 zIQUeDjV)1l+3=C!%&N%|C-i!V;3-Z4fk?I>Ti7NVLWvr%oymh^9%LJWfroy0ip=VG z*9+vwK4Irq*^ee<_?qqO(F!hF{X5C5E(d~0MwhbXUXA_I@nwozlYkr zaX*hn&BGd?54*y3!((v`+*UYa;A;2|o;Gy0@=%3p!UWd5poZ!B#!x8l10Q2mGW0MN z8LSACmZQ7>Ad(ZF>7JYeISVb(Yr;TO4&R(U3Gj7E2wVbvXcc^Ud>&3 z!5B1gd1#(KPpw2M#CT*dtYn#^LIM)fVC_W6<2cT~tPR#EaJ?I%{F=I@6iF!;z;c5qEEoOl!#7R&C`xupdK+C~tp zxgc)7@5#r2=)qrSzg^~(Y)q3P3Tj9=XeQ3zGd5ZyCt2IXBT(_7=CSBv0z?`7qNmt3 zE%gHPq-(X>*n>le00EHQ644>DUXHNzTrO4p_iTA@2gW3Nb5!c6F-w34SSrKM*66BPy{CH(ks@H;3`lhe{JJ>z$S|H{vYlAd=!zPCGS zrfu@gYS||&C8o~c+C-Y4#O8+jtjOGjPs)6VO04cjbxZugjq6MF|Kktg3k za?@KGAz`xFDDLV&aELl9n4boV525mv37ng-5pP!5h(6epZpUbl4wePMqS00wBVPP@o=2|`mhGP@h}G9!36>`MXP1(ro0g+*`i7gIDv z+fwhc8+uL7JbqO0nMBZ@)MHd9^}wZe5zkuA^ojRmO%t{|5hes!nBiuYvay52IxtO` zoVqul07y5g4Iuo#p<)e+s^lT*>aCI`E@q5_*3NoMOK->2Z+JLBt)&EHj#%trU_NR> zP1t1`{)@TXJXlBO>~!+YhRV@2SgBk1-70N%78y!TE?Ee(Ciy&;03U2@5c=$);Ox4M zCBg8)oVCQ@@QDSBTPlTYT5T$DpfA>OIMN#hQpm7~FE@KA~`ixw=`P91z7tTZjIeoYdP`il_g9~S!F3RXaEU|#Zf>LHt%|9Var2WQzSp_0npzmteZq+co zk7H0|z;c5?+xigHFm=BqK{#p^f7MqG>=$1W>c}>ap&OH2ta*IIpkHL*ApSN#KZ&T z^+2^J4dXWAV?BkvUG#Dh9ndhwk?u`-=s?{d9Ctc9l-P?rDv@y@z1KEmEc6tSKej2; zm7O4w$kj8r5|fwzj3ByudtzCcaPwE@GKS~)ulPSAMs^BDF6#_nBFv0ZE&%jQ>_HB} z=xQYPb&1HLMO6A&k)WIo1YI;cU_^kKLo-HUmi?{S{rAPA?(gI$yp&eMTBUkEixqkP z2E&9I>4gi=a&wpgp(mrap$&WE(Y?jo2-V&p@30+@UNDn`a{&im4i880T;{}p7eV%I z>>N##UD=0WzK~|lxk_SbBg@PP#H=cGV4iPKG{|>-R(R~`=7UKe-meVnfnuFXiRblm zVqsNy{=JuYP8?i^iwFRJH@72^fvigmG^tAO>{5&EFgJaSq&fBcI)QR04VOqa6kJ>x zprx~q@7{k{+}{20;m6(ZX#4Kv-TUv6@@$a6Hy|u9JzOAi0$|2X%xJnQ^^d*kr;0kL z{?vRULr&F0JfqcpNDQy#CnHOioPl!yF56h@)ub6Z7EsPM)4QL$b7MH=bEN&qblY`X-Pn$K6$Mg#B1n53M zoV6bk(BP}$&xYRx2Q3ynCr3J10WbA6nsx{_}(!k?}EA0}JDi)iK7ka2!hDUJc zLfGpIC;Jqb(oXN>C9vE6@qYW7rIWDxCpYUgWAe(GwPTy4s2~m;e#&3{kh&qF5O`5S zDZykN=5>;Pd$2npvDT^gj8Ll6ptZ;q$WG{?M+|CiK^TCajBFck#xltDeLl5K7O}1^OU$t8m;-< zSO;t~&H)Sp+(cIwE`O&>|B&q^W6c&gA}Ju6uUwp+yKyLlg$NK9m5f$eRR4`->$%B!yL@jhYH|Nvj(*B*mC`fnHhEHFTE)gdB7fxM zWD4!p1immlK-7ZsLf}G0Z^SP z>ByVt98^-b0q--B8(c}J>(d1lC<&dXH0eDcBTreI3-zXOS8hNW${|A%yQy==qemx? zjqF<@7JeDfv|}N-_(?yCuMQR6CX2t|9FTMp{|qI?BA6#$;B71rSQqQ?wyf(&vUpv~ z$d$8H%u0-NL|u2%S|lXLWDTfDP+$6?z-Fs7n}foFwjg{HmIu=MUfHA%ES5>^0}vW= zDpFBRR234uWQtne-2?S0CHmxhqN=tSAS}|s(!;SQJL3t?oE?Rr|tJnGZ-jYuz6(_ud(^K6=hm#+n{zQC94y5awh8}RHqNgY{ zVHl9CCSO4LmTJh3Jl6p8?%-LM_my?93+)U}o+pb!s;JHbJ7E7FZhGP`sjhGYgJfv~-+A_&u4|iaO3UnmL&?gHIc(naF zv=hK>vyYfekQTf_ydjAH`r8Bj%Ymm~K=W1 zU4+6@+QNS=(jd#j?<9(bQ)hhZ?Q1kEfNimn)4^k<4;UM*FR>pOW&){*pnpUkaK4#7 z{Ez>@By@o(0Gmh5H1eEU4ugN;^;U9kdp+qaWt~qMupwb=IKXFIm*xZ~!;Gp^| ziFWXbg*!jYC>RY)P=H9La9ub(ty4k6gzr+NPv;lc3o~nJCJGO!#;jyRR`tKjyLb_a+DO}O^#lP(7^;uj$=_u9F8;gYJz=`l4z!I!(U&G`-?24ZKo zyFuT!g;*0j%9QDth*BC);@M16d0|tQqo?Ti4_5R2k8j_77%+Z8D3dxSRo=0I&_|6= zb7v_r4Ou3m&C`n>Je%p<4vR3W7>Y!#_d=hkw zyXfzu+uyvs`(co??(-8plpj?7lJfQe6c2yE--m+&$n66H!Ui-4V-qSGkK>H;QtD*R zPT)fm%FAF4kN5=%781A8LtT5}+N~ChuthY3+a@Suq}8F!*o>e8>FsG%=oYfR^fZC| z>24$=*FHc;{_LiG8bYP$xI%~?hEubIlaP@GDjNoz;Z7^bmY0AK0vzC)8zHvk!+52= zg~#K(XN4$Un)LGZ6l?PasD?%68+L~4>*>PW=wpKsS{fx_9Wj2}jU$C4#L2&PI|>OyEaIyfF^ZLJnQ_o6afH;YLZ%GQ*CyKC}x-TgtIgjR{@=SzYtb0r6QIN7r9VmvP%CWLkWzAa7VtA_woLfRyyB|RS(;ZaJ}?auM{Fg6 zRT6vK?1DBTGP6e-j4QLpPfpJaUzi{+xJJv3V{Soq9D(??oK(W-1DQPmVw~eck{;f| zB$lKHp-#h!e(!9mRZMiQLgo-{SC>mG6_mp@7zr@PU@TE=2-2RI)IktB=2s2Sc3d=- z4!ev(4bERJDuEpi_8BWhXB4LMgI#RDSqy~Siil*n5bTtWp1c0TS_JRK*s^0iqPyGM zSG%0k%hxDq#JMqTVM^lz70+?u$0yF4^a4$y(|zqsb9OZuy)kg*|c zGwXlY+yS7D?Ph;slpt(>%SELP?Owj_;z_HulPS&ldU9mjMprnsN3`Jc5Odk7HVqWj z3FY(i8|ia_Tkw;+$&|6#sc-~sKP|(dLA}a&V7qWHsN{r9mSw(K?j|`+$>?!QPGN_`W9bUA;%u=3H;S9F z8kjjQM6$WAOaTOK0h+9?ogGr_StOP4qpOUW&b`Z~fm6xaY@-+>j0#FKxYYFe?}lnn zp@VPRkRa97c%eme)T{8YatqYQ*q-d|q#28+hv!LXy*^WF@|m$3i=$a}?rqXCNY6Fx z>u;+83jz(B1M*pdUZ8%{^5Ve$NIXkFA)wWrAo#hEc2AettQEyZ62%@3DwfV0HL)VE zD6lqVP|0)C2iql-+)vr2-5|s8d7oB*hd4qtFM4Xoeu9E9D z`k5YTzoihX1A()`@{OGkgt>4KVt>Rz$k%B5A~O#|R4%mR>PNb_5`2c)Ht+%m$-G0( z9fjT?4M1TDq678~x&3GwG7Q@TF_e#(7^4Og+nnXPEY^~DgJ*-aC^>f=9)cgq=bFSG zx`mzuEy^e_kcO@A7sA|5;gRN3Ai0Fs%uo&&HkAC+znKi!VXJ|D8o(3d-S;Sh`#b34 zE1A#;UY|@ja-6|gNPc@ctD*Ul_Qwn#Q(6}Y~%hKPrpGvawT>%`ggbkL0=0~RI_tRgy7SsFLe5!-<3)TsHTXByR_ zbS6n?U7oq5ap1;)|4$cJhVrt%Pz}r90NTKS;E^KIPwCTGc88vGaHD#DFqbv;+_Ib>w)R#CkI_= zS_5|)vv3oSys^)CM7&P#S|adpCtI_cH60g|nt8Bo{Qq2Ro1XR?gWJkI_eHmrb4z;A z(X!KK;86?7Xpj?@WRt-o+6+QDsNN7Kb4q|mFDyEn{wOH#V){p(BVmHgvYQH{f@w`@ zONVU=Zc4keGdo4G#WsnH*134CGxS0g8K%dXEB}mq?#1@ZJ-gGTb}07?RsV2uamy&} z3)~u$z>bdxofhBUG=*I=y(b-<=pSCW(Tt8=q>(BNVPkroU+4)Mv~TRX0-))(C{;V9 zQVkF)0l?vs=z*W2DhB-Md`p=}>2MD057#^Wf{V6!5#TnK!x5rPW=;KrdD2qkrkl*^l8WW+ zz-?rlS#VYCc*peh(3EXX;Vg)JOf+eIe7~Fi^z(;*405BHvgs4^t;hw|8-mvUx>*G2 zv09kq15;R6Wf-aD($%`8Y3R*Jt`6m)ZLrkdeAT<59TN)@f(}jxK^Aa3e4>B!u>A%k zlj3E{4N#)5ZB=A9Qv&NY-?dXjr_6ATp5DFu>zi9kj@`+24P~DdB4#R;JDhK9kx=&L z04f*bLIi#|Ks*)K8ME?m@Gk?HVw@soKY%2_=LR?ipf=NbesKZTH=PTl)y6S~l^Clx zTQ8pF2&)hkpFx^vi?oAZ)IO(PE^iCQ7Jk8MJ~_i_R%<eB@7K@`4GT)zFTup8Ue%^Hv5`UiPY{<|0 z4AnR|@N^+uEQ%4mQM!FczbaITQQLAfKJ{7kB~OHnAx@75D28*T`*;3PqeFZ!6v@F4N$4IG993H81tu z8~3AwFfl*dZN8a47h-@R&G$rd=0TQYSkNFFZzq?7zDD%lpywZV%$x77w}nAR$=UnYC|u&S|ADw?na3Ty^}`ME0O~ znLymVs|Tz{f(0Pu$N!oBsa(N9O=~~-=IAjdsTf+JYk6u6*`g1WO<>nh2{>;^$wwc< zbB`=vzk(R>ztKmo0*ne(iQ_?`%N5v_-WBde0R`wRtC1rm1>5^sD@{3lhe>TD88MAq##c1M8t0EW1OjKF2T=4>Jxz_} z8oQ1jS|>-A7)wV(iEXlCAaX?x(T-wQBD3W}s($-fjvo~Wo14mw!yaz!dW7w6GW99* z5ptY}DunC2<*;3lL*KU?T>n)nV5+dY~Kj|F|ctqi)s=`ReVE}fv!}{?pXj`)huzY?gGRu zf|ON5KV!TrWYkqHFl*D!z-UmWelkuEp$jSH_I8a zzgn*2d_F*hacjHGPX?V9Avw06^xHL}{05UoLGYGKH++Md2zVNL`D0AO~e>=NcLmzrkmOXe1)rfNFbog5w?KcVe3 zFhBcjc=g8MJB7^udZr4}_Q{_t07`S{-rJX>tb(Y*(qWkrAim1#K6rTRk3FFoMk<*Qfk z{_xAoH&74!^7i#BIA9zcy#Mg-<98nh+o~rroT>-^@}`GKD)I|B8Qh1vgCB-48BVY# zBsiilvsjp+$xrs7@F2)W;T{qF){r~1GHc$6qj_wdHOXy;ZFC|lG#;7%F4S?&Y_UYG zKib1Q7ts#K!Lky;F%B_xP~e|KHN- zS_8q>-q_C085A80a*w8roOm5PinHiPC$5Z6V1cgi352ywF)pVp_XM_%>jcfju1;^9 zTB*0=Qi=hD@bfzzeqGrzD!=i)9sV?6=*j;^?FjsR_~4H}zWwR;kAJ)U#~*)q{o#+V zKK}I6KX&hKzkl=g?|U%tEjqh0Ub{&IWw$Mf62e*6J*0VFs=e0#4~O9v(# zpiw>>J_d~f$--v@M=*TxJqZ%>O?8fh%!AU6fJhkcrC`WE#&MS4GII=R;OJSj$d4Z$ z9v4=cnAM3So|`x6;Gm?3iS04<5_o_=IA(^&KcgMQ|G}74f`1+})1j*Pk)MV#%yPv^ zx;a?s4^1`sr@6m`PCG8)Kyqm6-tA)xjSq*OmYm7i{CrLn+LH7ZocOd5&b2sSPhaRm zAonv(O9+ssDnKnfD69Ftz0rc&N{x109Cu=eVH8lrk%!{^Nks?Ni{46tP;V==-%;L= zfVTq#^DYM-R5#zz1(w#h4(EXeY#tB;*07?RJkTE~!;QK5pDs zCVJ#+)b<}^SKyVtBdhAN=BPU02(bqv=m9(>qHEhhyl_7^Mg%L!T6+!>hiVLJ!jL51 zHQh-2db2oP`$4SuCgy$h4J#E-$`3Z8ic8PLf!)luILEI08YK${q;=JbV}t@Yq5axz z!m$o*NQTf`+Xxzk@NSSXjvgFO_crJw&IXMH3`;kJ=zM^2lrVHFrKzeMxn`1Cy}9&5 znYkYz9s+_N^sEq%>Gyn!fY44GLNPIZ-eje|x{_4~W}BP4(kmKrosK_NdtUk-l8`7s zC0@d~AUqc*S-RJpxz&4DAe~?>7sXDLS&z(8Y*$Aemh3ju4TA27Pu?Z4V@A;UWbhSW z>S~8yy%7k|05f2uq!izxMwqikk~8=*NkK-PJZmA=0tko+T-Xy#<2N>#x#m>=BO~8X z55&CV5%P8h=KmWj0hSUf49~K%a>P*Rg&~O?_%rt$ zHB+=XSNhR@YFNXnj5+?RN?V~^hob3Zl_5tWjYwK-i5X!9C6vir4 zYMdb*Nkq5m0ECOeGc1kqUv@*z>6$`7K}#Uen>Ax_K<&3MMP*)qYFO!aoVS*(9UW~T z+yLUTZS|9tx<<&AY9whs?1tSGzJF3XcnU_Off^8#mP@Talxs9y6q_ ziC}G?-XQxlg241wJYD_`hK(y7M1Ca3GoJ3AK2!@(f$@1gCI9c~dc8Eo0b_=+wA|xR zX`oVq3-#LOvBl7ryHe%Ymq@KLtRg_*<#Gn4P(9#~JOyV_0y57Rq;ZyN$U2!RbTWBI zK$GC=Q`j{?B~M5~@gE*itgu^D*mi8r1Qxv10uoIhLGTCFhK3GWEesG3!M$99$Yr6h z0{n<8HJ7^Z9zd}1u9qvEYHW$kRj#x(IQZi3?ayD74IIBY_$416a+iY%ov)|Q6)J{3 z)v?U>KutG>a?(gYm9uJxT+ymtOOR$>Gm1k;TS1x*9JcKQuil(v$D&eSg{JU1X+QVE zaUbDSudyPJ`vpf4NbFk{lq!Mf8gj;G)sC>LFtk;hCXQUr{KwYBeW$ZKacI2J17jV=5v$~#$4w(!?rPPIZWy)Sc-;6@%@;9dTf|riw)nS@pZW{ zsC>P}r3F*^a?~80)ppWK+b-%)$z(9?bqazAEzV35emjce0&^uG%OTs_W`PiS8R5gV ze>R_iNph>*kmuNWNbD=nGnXu=#geZP*OMJ)z+C-dXFbqbUUvf;EW<&|qNoLM6|qLm z;a7(@Yxy2-uz;KCv*k7YgmmDgrldKsa8aGJ*9XoMmpDpc4|f0rYN;%4;V88rOaqt@ z)o@Okx`rpFj_bCgvtqT-?sDEb_g{zFyhgdUOGO>Yve0g_w z`{u}e;}6v4Zt_Wsc7y^2Mk4Tjc*33Dy?pcb2P^o9jG=emzy3j9Nd~os*atI2vVzKE zmPd7fig+Jhe}_=?H?Qw*jkJW25*v7jJ2Z7-md=usS$ja+5vgfC<0m$^Wal#$$% zjn%s<{coWs*&)Lfz@lW?@!j>1DxtzPV#!Y>usuFO<=MN}?|;jL?t-5jTa68z`s|qb zP&_CPqSbZkAe$B>?lXCa9U*MK=HJjAc%TZZ2PaHdq8vsgmL26l-95E}X?2{KF?9e$ z{N?&v>BI-t>`SNo0Rj2|D*->K^B0x#b4mEy@qU)?GZ6U0FX{PAiyFKK;S`3fT6j z%w0Z%G(c0oc38eLU6&=ixPl3s8h^T$A}$RH4iMJJGZ(=Ts_m&BhMSga8D%ADA;bi4 zH7sQj?xR6*k5R-b zDRP)ag~uORY}t_w-ob`Ph@RkFfbG0kM&D;N2dDyLD#ZQ>CfAb@ty z=N7WX59$MmNm_0u^98DxE|FIQu5?i28miTb(3yq;I|fghZmgOP4h8G0KQ z+7v39%H(RE3@hR`g8>d<1GYmcR0-*0OVHKW6d8eIYk-OdmaWx$U@{>k{+;YkQAbsOllIq3R@%zTw2=geDdF1lppFE2Vw8sn|Q-XHGY`v7UMFqLBEi{lKnTe&Um z6Al-Q!1~2Ciiefo`WnyaKk$#hj6KARp~t;Er^^yk(CqT zIkHDed3T_H#qs+uaP{iQF2-XxYuy9)la_VNB?3Yj2q{^HsEFJqdIi}8(&72-%kMtC z{^jL|+vP8}@6O-7{^eFH=Fr#g8Ag>srp$z8V1@XmKov-)e2YO-)Do})(Q+nUm4^Pk zLYM=?QGu!IdIr(TUrP)s37n&u&%Bm}hIXj!<&i(GwUk>t5wVB+i^J_Nsh&Z7YE-dg zG8mgkQt`)DP837Wg3IBdlE2v}%R{{{NkZ9X4K@L*8I6#A=mcFfNtAm?+{|ya!<=@3 z#_@2gA;Gn8q@un^ECdkgGny=}ja27L4cYO=*~|C0Vr9n(lTamLEshUxGFJ$N1A40B zQ;proKz#@W2FlGA!FTqzo1ag=`|kGr`?4C@BiPw;dHmrx^HhRWp)?hl$|_&)^z-FaTU9sK*?{oh}I`0hvbvueWBLu)gF^R{O|aR2wg zcUZvz2VgLuH1|JL^aXs~I*)fx^!QTs{nx=?-`&3a+rRFABp9L3d?0#$`f)sfi*G*j ziPrhk4~5VEXFd@<^W$FKe*g00n-8CP=gl?ppUvTRn(zP5!G8|^{^RR6w+F}xXM2n6 zzOWn@4yWZ}P})5^Uj@c((n<7tnzbPGmWC=*`3~CX1M47q0urDP?9%#BYa?5oBm*1P zrvSw-*v(R@Y~sTiWbu-jlsH9F6B?A$$~X9z%5<~m{c5eJT{ zIF#{*%@nx{EZKD6azQWkP;IdiQKgu|-Rg$Tv*=d#Sg<^w`AbLYRh0ue#FX ziiGR20g{4ms#lqZi4lG>$un7hPR$RBJV{Qk#qQ{et z5EMlSpdMWhsw-^)oaa+)doXg>-;7}Oo1UIBUcRR}N)28*TT;VOl%iKiD_(J`LBav7 zoL}AQIg#wQh9hK}^x>YwH(!<>sm>UritOJ_Egq({;Ec&+oXr9qgd(6X9k(h84vBVP z0J>Jq?5~!h8F7c%G*d!%_pf27PD;>TlD(%EfutMz4npe9rYQVfCdvCY6EugN#^9KjiGl3;jQE&)>?dkOoeE4DT;isS9-TnZq0Y(s1sdCQ! zL&cludG}_;g!ztg5PVxp12@#S^Ix1S?hH5JXPfJOnys61$rn!Q-4X=&#Jh?G+-MO?ojSRX^Tg9Xy&9~!WXVOwS zSmLqltZ1`8y?|ZD*QuNnu1?iCam&GB@czD5@_`D?Hqo=i z`3T|k2j9QGee;TugCB3D*GoqjQG(X?yMel(l;eP#PbRg};;WXDq2+i?`A1$MLj}XD z-S!LLZCLUa(@Jk+T;3LRe!KP^MjG9Vbsy~s`#?LmY^yvyLAWWxje06i+fG2Hb|kd* zFg{DHF%-wAbK@G)3ibLzkXB_qY1ILDR>5P#W24%hw!_oHrz@RcTU$PoADVL_CFVVB z^nC?=kw~-3*$4bf*W^G+!?;^ea=fw_U(zI1;XZv5xjG!b0???le7l{Fb&e_An!XBd zIMZhscE@M({p~OCnRIL$6)@B7nuic?`5!~RJZby}vvba`vES!#6JyAK9zL|A*ls4H zQ5i=Ua;+x03G8lk1e{Ml~4Mqu?-;|Wv=5~;;w5mF4MR4{??ELCPGD6fiwXa~TKPzfH z^tFMI+q2j*D}ci7=b>eYzs6z_OU>SVeE;M6*V*gu-%8v;8#Mo+6~_&2U9)J|@4fIk z?+B1B5XSuCvM2e7A!4&i>)UZIi>Z}%c`m3__UDiy@-E@(;UHnN46%l;l!TU4B&7q8 z2C|;xeBjO;6-r)Vva?e}Z9%yWU+u|ajrxRha4p(qPSp1G(ZrL6;BJ-@Tuh%O)fCR| zDOb7RB1IoMTltx&h_^JD$af9VEe`|#q6lB`!8xQ>gmYy%KN(4sj*Ndz1Jp<015nI^ zrZrCwTCNo-B8m2Hwx{q?MAh8R9$Y*%o9(J_(wj$(ojOE$pPNKs>=T1B?s> z0;!QB)7GFh@2I|r;=yQ4g#a}_U8PV;vE&`xXH}{p2kE@KBvE84t(C;+(a2hh?IYyQ z**r&m6+ccD>$BTst8{0s8ptR4suYj1hSP_=M8OkYjCO*YIG{{Nl7jd{SDIhVd60U& z#;wvT;mFlFueBIWqvH=U`9vLX9z@+@p3~*^#gZ;4;Kme-`pF(TjOOk>+>Lf{G|x^` zb_^FNOu;I}1yE`3fMpWB)(!n+Q%q3_YCE-Eb$@m zJU#(V<`dE_)3HQn#|o~aO%zUl5a>9I8=tOtI!NT)zMp*}Xy+iqXYGn%9nSt@TDcxy z0GUNRpr@d2T3jG!H;EuzT0+P#C8Zjuz~;7%jG9eEm5s@wDY>Y<%vx&HBXv7!GY3rO z0+VsTN7{B#CVVX63~QtkKM|rC)q_Hop~}~;oI&SXELIsu8Cu`0+Up#zUU(EbvZe?A z-BCHB{*8zo#mLrhS@%2xt5v7dv*p`1Kci+^9Xyx);;q4O4G?*M`G(v z2fkCCnl?a<6$W_b=Yc@8dwMg+=DB8u6qIl%TZ%+2$`jn9KmZnG4QjWJdB&9KAkjfk zl8WO^Xs58p&Tz}e08Al|E!nC)v-?S}0$+f1gh%xD%l2qG0)__{C7x%%ZdcRCZe>q~ zeUVtSjzDgi0I12dr<0s#u>zSPoyh?QP{m@{*QyMGHm|7>T93yHNQlFnor9}MzFSKR#qPMm5;3P) zeLYJM!y|Sm+NGc2S#znVp4zq?#Gw!b{{z8E$G)hQ`-wCw&dYjKEF;5wj&f5 zkRLAM7g%T@{YH)w>CB-!Rm9XGs0d0GrTAJu|2%#cSptjF^u>xN@(=}w^qm<6ChbLT zK>p@q+u|!)i^1T>chMgl?-JdZFa^GEQ_rdz+I^oX&n)L6F)aZnFgtAk*~nz}BP*+M zau=H2@9d+WJPs>K&3Ohaw95@AFkDV2$XEe$PG;n+P&5W*GPs>?lI;{(wS$XH(R?yN z6*GUVk@^d~F_MkxTv{S;=jzF5<3C0&g)OaN+Y%TNWrIE{aoDi|%(HgA?ouyaBA(?> zgYZnX*+D5!eu&&WO&^OZN*NMB!ht+9&zpG2y--C!M3FlQU#y& zg+U?d0|_>+=%V3c&NniMT8}eyHR?5zW|%e-zaoo2#>jwb4Eme>RFXep2d*4^rLhNX zAfP>R5&9e}gEVGtE-=RqJ?&l_!+rPMXJG&zK~@^_N2LT0&6*0&hU7?zgc<}2ap;L) z`L!k?wb6}Wl9^5?__VI_|dW)!yG&Dti#rEXN$DmViySVS4(n4N`_ z<$JdE>{f0EA4iH>c%@IXN`|+A<%0WP7tQoQYuVJ)3Xr-=s3@8I;ADw8uDKxXUZV~+ zh_p!Oh!3p0Mu?_(e*I@?UXXL|V!gas$+@s@5+$H#5CgswI~=0RntVcZg&_t4p@U~? z71im-l82xNihH=&B#@vT8wB4>*M5hHCeC_pxAU4D7a+zHk&5q-Cyu6~TCmWpuTCeG zK7PjA5~=ljP??dg?xu$b2fKE0eQAsG|FQP2&23!QwkUrJD!VF0o!H(4KvLArNlt-y zkcbEZ#zT*MLCF$h>qeG*B`R_D*=PUuGsc*6u19x+Qg*H@vDs^`Zgj6T*L*+9G3fMG zblkqI;Xx_j#$)vRtM`#hLRm*3y$ysN%Z)#@=3QVJ0;5j3MRArH zXaR{IV0|oV!kK}V&Ra;;EwCRZ2K?eIZTCf_D1Hc8K*$kXDyI(088)0QG+LdxK|IaT z%r^DY>9K4W@GQUOeA?rd@MbT%|B(!;6cYLb=dI<`v`l31F z7hm-Br&MKL+Oh*Tkra=AnGGktpJTvH4f?60sAr7==`Eg&)+SBYL&C>Ys-aXJbwH!M zL&p*|khig5x`B^KW@kMcqKvfW3Zl7bF`!V>eNZ2bCRDcscR`6*&ru=vO;87bCJnT4 z>gB(Y7f$TMHeiXY_Q#NDYwCZ?NeWKhP%oZ6H=2Mxd?&-)zLKA0fV2HLChj zC`P*x*t0B$r50I^+o$7asv1VRU@VW(B|aMwL)T@%kclR}JRxMMj#+pNF^h%Y3$dmo z3|-*j#|frqvnZ~R6>_ia#O^>=d8jDuguZ_){EhCL^Cc(`W8g?+`G*z|M;dY@3cm9b zX16p!?Ao-_Nu0sn*7`#+w1{&Wn)joNd?GH~L zS#g4@+REG*2_%}^o&x?iV=BZKrfCXDWPt#F0zBNOga`$6^40qas*0%3k3u;# z{wnVNe9m@=sJB;LY2Qp5d9XhrUc+O5%>Qi%z>7~JEwXl<1Oc-)yp;_mON^aCSWSzJ zl6TCeq^eE3R)I^r86;nDPlB|YK@6gjVF&pG=tm9FW|2Uzkc!9i2_cxjYF@k{ddEEfq5~?ch8I~e)=4CLKHY<2?fa^P?rx_1v z-rPIMR=A_COH85+L+{IW-k^=@u;BeHS9-ZPm@i6@ChM?)grM4n z){QoCR^9-?0)DZGp;#;A45yve)u-OnHH@1DQ< z>)q#HES5Y#NU1D=S~i{#Ru*mWO<+bq^Z|_|f3^KYS z;9I3&n^UY7tiGB4Br4FobOp0KDZ~u&cj>t(@S_Pb9U%Ffn??hXy#lHa<{9EHvBOxb zHKha-Zmr%%hj0rrQNi*Wn+V2yKZ+eg8f-~cUE@W_2K?T`D9__j97Bm?m9GgD2GlnP z@VRM}5l-GofKgtzP%t;U)r#T36TbBbbzC0cA6;O*dd_q2k$U7yr>0!HR%BbT6`k-f z^B8qT{;{fm_T05rkLq`Ld~ozALhAVV--7WRvhUmEGMC3G3hD(&n~DMg{0O*hcckw$ znzH_R@xCpXtL;{LIwHd(aEJOi4J*SpPNg-s0a zfenf}P+>HSdfQR|sX5NN+LSE0&#*^?b0GEOc&K|v|G(G0!*7#~ulDxz!^4BGNZua& z4R4PhzM=d)O%m-StB}zp2X`VA{3@bCO`%w%3Mht<)zP~jKWy&a-GRn`c<-f)u*Zbl zTv7Lh@siGat6mg3(QIMSfH)xdQwOH_AzGrMsCxGc433Jkmv@54$TAd0JE)wXEH1C0 zJ}-TtA{K`xg#TIb8)oENP07B&E>h)5Ka<5A%_ygQV{uUF38n~cql(>-0!z;ntQn;t z^cIs0L#C^v0~A(eYJ?i0GwGqghyNe2*$R<0vAlok2eJh~Z8P-*XaOGE=_7OEryTQN zI`#I4E7G^i^ zHS05g3fqJLgS^oRx*vXgvmd|2et<~x5(2(10q3K+6*?p)L1r)9zU78XBb1ZlHq9F0 znTvB$%af$=r)GPgL@Wr8=^4@+oex~(MbBcjbQCDg|x&pU+-3h-qHhD_x4R zrL<{q_Fj1*C`7latrE01| z2tMSYDpH(*^%LWOw1K^CI8iHW0(5xQsCUzNgk$k8GmTSX@d^<Wlp>`k#tv*ZEthHqD#(KM`>m3Xig(bsm zrAWW@Hsqf2V4vj?7AQEOhlIyoos1?cls4W=3tkm(J~+r`!XgiVMBW#gfC7b00GU{(MF2vwBarCSx%N0p&L==nrT zH{1}=IxKxY{x*jj0AxVV=Mxl^+4t0ig@;|of<`G|4Hy7y^t&ZGbfESgq)N9+wLpnF zMqsxugNY=>(Ff77dxC3f$zw0qrwrm&L6b*uUqsb=JDqaGkB~?oSSZ5fr?m7TFmtg& zC0;)mrBWlKS<-^4`upgnN9SLr;&>V!=1!Log{mrOUVEpTT^fPToK(`{mTjaLZOdnj z8^V=Ev%SPvm~V&)krHI;E6)T>+x=5y$-=eG!1*29!}L7Bs8}#>=vs~xOUMT?5ya$z zg0^808!QRqXv_`|lcI)W45Z&Zxm|AqT z+O3IJ4YOYn<5l2ZQGE~vxKMqtL346)0{m5fCd(!(_NjW9n_@dTrYx};qI&+83yBf=Nz|khJJ{Y8q^1RE5kf;c?wFuBn>ok-btF1n@qAVe3X&_hSPcEyjS^QKppPlz8yDoPQvIoLWH~lkm z%K;yB%1Y$~&mORPzF3FV_UZIxX*&aHRbU6|+@jw8c#S%fBunMk#}B_a4M5r7#qG|% zFvJ+p1sMlmiw9eV!MRY>0;a_c0yQvvD#K$MAWbKJGVS(uN!_&ASIYcaU914|gsN37 z4u1zUGpzLld90n8;8@%{;E(lvBJAdt1{?H)EP0~WGIGu}NEFU5=`v9WZU7q8hR zJeE_Fhy8Z5DNZ)NP6{N9$KxTjOZ_hS8U$p>_B1<#JuVvyN4JpN|9D%p`c75Mydk*U z4z!6`wrG*kpaxYH{$VYKL_#_~A40=&p2@x7;v&mlqC^ER-N;{Z2`I6n2A$*jGXol2 zVtp_H+JQo%Bm%9L&2ZWZq{*~=n3<3Un|=`nl^C^I^Zl#C&dXF4FRCPvv~3nBZ>oQ@;6sdXU_Xe&b_GG=^IeLMOXr`X znFsZ|E|_Un0|IIWQ&TA~weIMIA93xFU<9)RcvIbw zI8l?(x#zL2v3IatH{H)26ZA${_33yH%P>~|ib0l-skUOLy@Lx#FU1ePJQUPnjb2jF z6%<>4HNIP>@2J~G!*hX*KB86C;#j1~+DsY9*N|u(9|)(k^B?j6;sCinN-5i~agZy| zC1T=bue@-Smj$p(kFNpP2%;_z6})$Y;r1GW$@TIE?L)8UGj?g)EN^!7tw;g+!W>V* zfyTd=Ju}Ri*&5<|0h~d}!-u$93oKJ(L_pE6hK&Tv@<=J8_v;%h(~Z%4`#YiW?Gkvc zPJf}0djy;dmnIaY?tU9jLCgc`NhHl&b&zJErP&{`f{m(@y@JZLfW^9_yipD@K^^~e zVODLe`xoXE%1bLnpX6R@jTljtwOVOQfxQqm)*w9fW%~GZ*vB`pCkpZEA=EYKWudc&ap>(Tn|F~NBkX%;#G29&buw53f)-eIm=KpLIoFTAM z%fNylo1v)_JNg#mL1jo(4kETlP7MVnz`_7)B%;3=0=dx)|5$j6pI=UiTf z2tHsfA+9hjCrAW%D#FtoNc+bknymhU9^-1A2tn9%2^jnDACZo1ma{E;jmdL%^y%%7 z46FLxiD)v2D_FOCI}xTsPKK`YB-gS70S@X8vON_>n(41cl5BtKHAsLUO|5oYNz@8P zlmpTa=0x6$hh|{OQnq58=6u+iAd$)uydTS}+584BB)s)zba{hBJbrH%L?63(zFN$4 zK%0Wa^r>9{T5GXC4G-7Om~=Fsw>hbOY@w4 z4(?9kkIc4lO6G`bp|<2-P}RHwZS=&hcFmweLS75^NQ5Jz*BEbkDh!84Gq6*5CTb0m ztO;L<%;Vyl{fZyGoNS)MG@sWi2J(uDNEarlVUae3@yu9G}NQ9PXj58Mg~mJ(K}|@GxtUE1Q;cz>x4Eq8SaK5mnV_v zNqz?L2hDYjB9rdItbDm#qQ<|hIrZA}zT}2N@tVK{51Zi;*9pgGplIlPrt=&Z!X}*A zP(5X>;I(VKcvEVmI9Xh^nxPcOstqhNtx$|ryo_tQyhP zh=-95Quz$i%Ii2-8~aMzE8Y+v(lNp4ucCa(VopVNxQiUiXqbt#qCU{5;! zgO4ftN=U_US*|&Z)eG5I&&~#Si7bt=I&P1ggRzD>b5-nK32~xuQ}cz#WDLbWt8a&W z#32jcfdHa)z3R%J!{Cq68qKP~zxLZ}*pY=nR?2!g9xkf0iKTVpi9p&B(KWAeU6m8z zLhyzVqCr>jt7r8QT>uO zor3J5*xiGKqzep^xgkALp5T6UjqY0W6^h_DM=@xaA_3Ji>2Pd|%3!F|hV>M3dJ##O z#nQ)SL`F6DS!aX^4TJz`;keyAkx5W>nhB{?8?STC#7c^(S*Bhrvc3*q1q5W!x4g&G zC93qP=jg9fVrVg}mnjb%LY-;}rU7i<;H#h?#NK#>6*xKzJFT{q4Rn5> z&VW0maVKmk-ay#>V7vim$hb%J+-#rbl$|FmI)Q#qh+g5pT(TosOr z;&BZ~!VpMxH22hB73kwYeH2NlI&3Z`XRY>{d90E+lyKuHZ}pub$UTm3EJ=_7;RJRD z=?z?#mMmTaxQE7sa+zjC7dYn;fsCjTsmFc4)ZC$Lg|fop zA?+dk25aVInmT@ZdLa~P4Buefj|_$I)cK-V2s<+ws)YzY1p>0&<_(L#mohREN6JD1 zsDS=bZ|DH)kz^a7I_ieCL=%X(W-lyUCsX@u{emsNtM&q6b~l(F2ObFmOZrDa1G@CP z5AT1pe|>)MW)h}sdshFRwV}$^*{Q}9&j<-0kS`rvgme9i)n8aG`S)Ix9@a7jcNTT& zyQ{z0Jr7lX5r>L8>{fR)`GZdS-clVVB_hu122#lC@=%54%O_NE`SHxUgEf!;Nv?~y z2=4@8lo68m;=qJRqR5YHJR!o&4^FuF(ogiy;Uyval0v&3TW%;_!1xD;j0b!B0nhpvntDr6(b<^MNq4CKPC9JQ}9DUez81ME2D?v)Ub>TFkY|T^)LO z8>r*Xs1i5yA$iNUqbS(SP!s?P_IN#^?GIX zEvq+#L52i(GM#vv-Y6E4XA0&An5BG6<4lWbc2CfHNNVIqL)($o%+yyyfXu=EwD}%1 z@2S*B|J!T;MODtl=5jU%gAJA)uL`r2Lzr~Sq{w8&;-T@eY?yH}3aZG8^DRGd3+!v4 zdUU(n&HM_j&SViJ{gkr@91%^SaE7&ov`Fr>8N~X4h!TkK*n#R?)N=) zzXLd5S|yoOqD(lUGS1rKK9ys4E}}Zjvm0?^OS;z74QP#(&Q>%T-w-2Gb5v5r zfcT2r>l9oNgp4u?(Y*yT9|u%6xcJ8W55j`#Uy!C=PtXq$zxm7C4eGlXa+ez1%Plfb zA*MxH7t`x7s+;-R%@ovrMEj8@09iT3O+lp&YfTpl!AE=S5xxqO_H8ec4wBQqkJtWu>nrnARe+HMg54dwip= zQUcf8?6!sUQmwsiOlWc;(p_RkNr*Kk^!W^>au3`vD5^H0DI|gjJbFk4=Vj2v*P%8< z2Nn@q2=Na<4(cJ@vk3xS;3}2LEiER~J;7YKa{N15`?5;B)wo{A={nvp#{)3dxFjH6 zjo9hOX{eBAwD2(pTUywKmFeWY_DnXI+rF5szqd0&;*fawe0I@G7i-q_EeqI{kzB zOyRCqx(#;(I7pQK8L{2sAL}MhM&%xq+`n+!L&AGHEj$m9)g-o<)Iu9WoN!uenzXcr z*)mZ5VVx=l(s&(H*Ot&%j0q_j z8rlvgw^4nU4prns*iTTzqT_}-6|0iD+QlK3wW^0j<6z2$K#3YX)G8@j>QzDiR88YG!V7o{7kZv4Eg(aQfwSGb#HjCp(?Pf~}6gqs%qlXGcq^gQ-+aiRpywEmC3RB&J{bD+q zBQvNNk#Wq1MSmQ@7KpVxfO`b#^B~HA6d?KL7Fzs3-6hi%Fv*JBT;X&=#KifzI{x^m z_nSYw`%Mpj0M0L&Avbdem;87M$JE%wFCYvGu@GN+fk1w(uQAbsfsC}BK)XpKBaP&* zCh0S}xCYts?J9d)))TsSEs3p%cFjfe9J46(;KcQVJgmoS?dzW{-9a5--6pb6RRHJN z1S{7ILLb|{2xk*%B8Ui1A~ti>WU>`VkIpMvCbak}HGsN7ROL{?N}yi_vQ35FvsdMA zxmrCIE{Pk0=+P7-7Tj2~Rk32BOP`3sxqn13%?qfTgj5e?)oQs4!}^m7Yuix$2t-02 zlHmXb)#Z-9F>rADCCAglS-iLdvEw?iQsPi(__kdpxeeDZ`l7=~A4ur9Q~+!u^_8;k zIg%5xpL{H304z-OM?$`#c~DB2p22U!AwtfR^#rg-7-@fo>iUp#bR=t1=`u>kghEr; zt_R^%=4%Nl6?%Dl*&7Z%-#7zVPZy&V3KcEaFDVD~?6>_F8bI5^@<1d`dFY@HjsCz* zjEy6?fSiTc7`=@rRoW5p3(;X?^TiM1 zS$SZ8aoPT=Q@!S~#FEw_PrT>QCp+(P{(M{5kC2`IP+mBY0rkH!TB6$D z`G`r8N@F;rw89)vfsTZT7hwTvZ^p@8#x|DK{L ziIT_TRAZUSM>u3(S^f%!G&^g461eqxJ18Dw19}F?K`APCREa6US-^gzqBF!?6=-Ts z@;(90vNFwSb#Jx@XRFqVOZQ(f@oQe7d}Oplc<|9yEC=>S%5VG@OZ%I>d-dt3Ixi5w zRNtWnw@@V;z7FBPv)DF4Z}HBG8HgTId!xJn3Xhy(5{qNyR*_CdcBqL>=}LG(_!J}p zbq?Bkssr=`Ii`DZwM8|j`g-4Qe{a&B4}I^zNE~e$k;0BMhoD`VH|in1tkh9NXhW#7 zh>PKOrzeAp!SM9_e0Xs-xVSjK``z$j=Gs<@N^N|avHJ|w_hmp5w1>^9D&KA z%Ow;60?*0`5u!)dFO%jYf&xWdJ;I3is9HHjkWoQ8Wh2}hzosLov0|U~imKxGu8QT72 z`%q;2lQOWKfv_sFCAU?tzATQ!cu~b^^HN*cV%W*}edqv--IJ|yWA)YRs0C{k2CV_F z%b&$bKyC7l362IW-=G>PG7%&@*)Mi>6r-@)sX{MZ`mh*}cqe|=EZlNoXQw~Po0=&I zASGbu#xW=dQ#D%7N&@RBIkAikff`s46o!?1WJDDYAycBl!cem5v{zqhJ49WQ^_D8E z5u9pBGa=Sk@r7?rhJ5>HX^_BBt!?CgO<813hzZmB4@cj z=ryi|u{xX7pNRMRZ6pg=hw1V4nNEW=s5Z<6XIM*_mme~7T-w3GVuur*S+Y4|fayrl zZ!R>Q;Q)iBndWkaNIW)NCOJjTjqAk}d=ry`pvaNW&=2QY|5A_=ANHW9qaCA^Zh6Sd zp)*>2eV4cE7oy9VntINKS=U-Y*xcm=(iU?iOzkiNPYR%?q1!6^d`J@AzJT3| z8&V)l6RM|8E?31K=_-dW#Id%Xf`jh{gR_&zko7L`pTSB0^zPf?$;Awnf+(i58p!nd zZsi=B(u+={g&0ZPgjlRX2~dmEyE3=)rfIZ@S9PG1bgTtD>>!`q|6nG)j2oSB;11}_ zj1?vJy&;j1)6i$w9%I{5wgl+{<1XtEhyXhDxa(dB+9r6jRl}<&8`*OcWXBuF7iLW3 zo%DN#_!9o%dJCJ-eC9ns8O@&T%ohR6@~XM5WQz!?>3Y7p?y`Bo*yQ%E5gJo&oyvJ64;TX=6vXqs|F(9A(R2C%(Wz?9;7zSf|EJ$dD z1FGxa%01RDqs=;mdJu%#y1;htx9Gg9GKS!j{#1-Ke-%ETCnjceLabbC<5jvI(my%) z6o9_=F_#GH>w#~#-vyAbeh4bk9(c&(uYbtJ!G}a>;+I$D^5D_}@|B;1rRX1c6@k9~ zF@wX80jMHX$vWs3)Pjn+T`)^E7N=7i;+2xElgYCZ`Xo|8N_R&C-JAFo{~SVu0~2#Y>bhlkJeW( zR-^74%S|KuTH+yI`f(ju*Q;1e19$|h&tx*4?XUONM3n)Vx6A>Q2^d#Q2PEHNo79d7 zY~yuTTky%NR4JiWZ2~APnZBTD7)~uz8$x9a#8j^~E3$b{-4K*VmeV=;)!jGwkSxal>GSb!=CD7e!(O$v?GG=oRth~r>#I7rE`x3@*!pn@f2pV?*tA_Rfyfb!8j!Hlm+Fjeyjcnv+OW8kDIgRU+Hw^~k4ONa92_Hj;2Zo` zrm5)_mIJXmyf%>>+JpBy%#n&&7>D8FC5(;2pTbz#6eQYkEkYa;CRDgci}LUh7ni>0m^E1o*0-&*tqT zq)Az(gO_?^1TS=bHfa&bM-jY1Ny3vrYlwdec^AJCv~~3P{=>(+cOPESnwQ2w8rZuI z+p-)@+5*K{CDH556yhk3i=ixtJKmWcVPr%0zx6Fw@b-0l zoGV>8p!hgqDjV;T9+>ZgruRAzkH$KS0G8PfQ}LppdghXok`9wxmlZwJEgX@eJeO>p zcBYe+2epM>Oe0yHWlD@&65YM}4eTl>DTSM+6hyxe!MjgH8;Cowm)Wp$z&?}=KLN*m zT<6pyHpY8~2U@}|c+L1o{b-GbV&21P$cLo5s`^? zjcd)R*`^D+lpl!Q)^LmQb2tuBB&-DJMf3=qI`ZM6@!_~~Of^BV+sn~{rBx;MY?;Dr z!7~W6OC#`RzL>x=y!pqc?c3LXg^K~bqA@vA|DZMuEEWf()QtY%E0epwpbv;S0ay+c zC^kY$S<=pWc7DS)UQ`<4in87h8q~nZr)(^UyGF%YV2UZge65a^8 zj%`y?5^zsjflJE)cGZ<}DC|0(j=7(6)8i6UTjvw97>*s1g!yXO25aPP{cz z3iV)t4?nP{4UiZ&#XOjDt@SjMVGXN{-(3RZgyB@7xSGN^82%`$0j8xRg``4nHfy`_ zvjjJaN34s1Vp-^YKq4=lBM+186GZt|&l1UP*gTTW;(zw~=bt5%SqcXtlDf^31H|)C zX9h`Px(Ctnkol#1!jV_SGd^L}T398|`9_xb*Gy$8Gyq-u@zShh-8Q@_&C;E4EjME+ zPyo4=Zpp34FlP%=6t^hRg4ClW6c(VE1VYApd6)ORyE(VE-19-9;dhn~k-mR!+|Q_M z%LUw^t}S@_Fq{skvj@K|f%SPp3dJT2U~AJAEgWk^WT`|;72Owu(hjOgqelVE``LrhISh0pB{{?Z zTQD6@(cyk)3pm@$LlXv~N^8kh;9@~Mf|lvfc13de31{ZH%HE?;hw8#U3)KV1p3+Co zDj4#XBC#<;w1woi%ATVct<+K~fTogVQQBK6RM+Jp--H^Lkwa-Mvu)q|bw`%V6YacH z;_<6r?mvIL8~^g|K8SNMq=llriYdW^6nEnR`g}wItUpOX$RL{eSXsm}hnx!BcuAD( zuWBld7iOj?)J({acL7MBz%=rPXA~IG13u-b58=VXDAjVb-85ucWQwsUabM;91oaY4t_5CR! z{<>GUI|g`7$0{kzbb~c*0=IAt_kM$*(Qhw)BNV1i!fCkc)5sI9|(kLVGvF0QezbE2U1F*&qr}M@AMa|6{)UY3!4AC}sG6DgXD2adc z5cOxQ)}>^N>E!s=NBFQ;_xB&){_q(!>G!EH2p~{86IH@1Y9oms+6Ifj-s~*`n+wk< zY+rgX0ocb_@K4+&+;Q5p1k%eJ64G=+F(H?f_G@jC?Z)H)0pr_LFrp1|MHuD=`|rMI zWgvCz75ZPD!QgI!=#97=*dpaph~30RLKl1&;G>)8tzvCF(j`<6ES77%w_HZ}-Stl_ z7k(oA6*X#T#R{k%$TP2iAkqW8E?z^F;rd*9qQweT;|W2rte2B!|A%4^2-I(6y+#!U zV3(i6?ove4m&3L)3sg>kf!13W@y*vh6g}F_B5?75JBx4Kf@4GZ$vFe!ac2TV0hfVG z_Bb!Ig>M3dz;g5S6ulyV3o)Wz5n#kzO0pKFJol60tt)+}j)aM;(RAI!RU}7%$j<8}V_S@G?;j(}C5V14g)~E`bjH#kr=N#Rw?_<)BHJA6^@~M#m_g;lUaGoi^4O+6C$$|D_(%se% zmC=D^5}HwQfGi>mwLhOpb+J>G2ZK)yU~7V@hY>r>e`(VI8sFI#)U4QMp~g_!+}kpo87dw>eOA)(V}Ee+Np->iYfX+R|VC)5FJ8zN!`o(6`dY2 z;9ZC&#N(BhIMpC|PIdu8vP+vOyH^~V9amTem(+KwCi{= z=`s1TIaqvdA{|PIu4#vc;(Ql!X!qeRCnR(yk-P~HWK9!@@fFyS9#&guJ4~swO|epz zhz}Tl_?ZjatA^3)1SunkcsDsOly9Z!0jHC!mtze}B@VN- z@iz4EuU%h*bK`6Wwe)hch$h9Tyr*;eHQ`5`Y_?-agxaB?NN}z;z#T6?T_@69s`|yp z=*J+FjK=%tBa~~pUCyEF@DgX8BmMn}Omj?inQk`d!X(oW+gTTkm#5ST1S5+1S;q{^ z$|slNF{)`=hO=REIU=b@`s3A&h_p*HcKoqNPY&oxO^{wT6;`2vKRM;yQbdbDV}h3M z(@!5h-uHgjH(Yg*OD;X2YKqh)uZN{dzCBQZQ1*2YIlkPj$J5drfWfF?7zP0_9_aPh zTC=Kq?`DZ*fefr)wZ3V$3Gfx=H_*=qz02KvTZ%5z)!5^SAmJ+lLak0A9mKG@GtB64c3TP-6?ZK9bV?(zQ|%ml-mA zOESdtg)uumj29;e07Su29M2K56MbV$0P`im_B7V9kaCYTm4fc0Z+bauvvC7fXnM6n z+~WRfz1*#IaH^3+QVe5E#4oW3n5w~|eqTGf^4V%ol<;fA=gR^3GfLKMmm9=Ps+Kp_ zj=ccC2nmA~v%UTE`-qPPXgXoma# zC3TCsWc!j+XNJtk5d{PG?uhgihI!Vx%(7<;5XV^(f-1h**r>Dhh=kTbfEe0X=^Tsi z1?W^E#BoEb=Keur`lyBtnri-|4#3gPN{fRWRBKm^tLffwc)no;olWndDVkxgScEC0 ztts6X6Dsusoe z$%RB`H6Ur?=zr9xJX;^y&W9{T<3aQMSPsNg814)$w|<;$-_Tg76YV@rb+{Uq>Nf&8_C> zyBSmAmYAq0d~jyY@A5#u_Dr6%u zm9C3#AwQT0y)q!Bv9KUjSbt_|t~Dj=njx%q)TG?BYq>8QK-~aN0=AfAZA<{E@>WHG zwxBJEu^Sqrz!dtk^-TmMJzC;>SfC5gSz5aOWuQXkN82<$W;ktbgY2iond=_g5n3q z^p~e-OR0V_Q_RuNmyDYo5Zf^HKUpA10v7k1?%>}l#Fx$rif?xKy8}U5uq+Z!7mrOI zGEV%sg=81K=I)udGW9%Yw>ofXY4TNl5n{550EJUjC_yUZnvR5k3a;f!w)+T%p#2^j zhMZQT?K<S zG<=5P&bu!3&!bRb-}{0|;!EPrk;=v-;}Aeti7;QSUV_ zmHbGamYvmQoLU!Hr&(F-FaV?qAx$U`r+sDfW9r90&Q%60{Y1=|%4j#w8n*?WKdBO*YV35ZP3Xm_am{o`*>Ui4RJ zaCq}H{}ll$q?E4=-4ncWuDj0qtU{tEL(0RY?C5GjnP%Y-WVAZqKGJOn2zZM~q$w&E0SC#d1- zJcI^dVz?cu1c{0asJM12*-V9NH|{(i zG83*Tc6XF5Efgp@bKU$(lQs;nN@2ED_j<~c%NsZZQu(*z<2N5Z|M2eaQUANgPadB? z8TN;#7w3av|Lig9z@1!p7P9pLl=X&ck4h;~@S$?p0mG&+Pr6m}+}#P|=erbg>5_d3 z(UxDr9-GU~=!$kev?iUdk6bw_TW{OOfa9Cq)CQTfYQnA6e`%l{5zD1vhwDY)dYz1i zXo7r@S$4v^>wFcgUutb=<+1e0=H}?g6;NLnTHY$QY!o)^R#NK_w?xVFw-i zg6BhlAoXAzTEVE-FP6~2*E@&=YP1ePpeShu-(z7}1fy(zM<)LQ>NA)b48$6bEgx8a z>XjJW&1NVm2!~Wl2hwU}^9-1dk*BocbU@17&<0ao1K(VXHj{TfQEwKca|qkh4Dwdv z+DVBgAPrRTMa*q6AfYkC(u}|w;Iu}G`GPdqmb~@0%7^ZFPS-jFetA-tvrH$ zS+12mp4_F2%CHd?pr%12rr3gQCxt~;6B2^#fZr|=`~p`r+%<*@aq?RLZ6=-xsRdz& z!h63!zAvznT!2MvE)e`NLBBrK7qU3|q~q(*#*xM9WbI%3)F#rU{j3euP3)XAo6nXs zEr0&BpM8G!u9wD;J_Fki0&i|w>JC1kX#_!R2lyvjhO^eZg?1nwq%aSR*aUZvZo(kd zh0+rnm{0A28MqhkQumsUAmjKiI)1`ph|p+?`zCKHXatD0yrRU~r{Ip&g94KUrk38- zJwg1psP|1{ba65%Xb5vu4Uo2eD}d%n=)BeviH?yoDsWSxO5`w5s7Mg)km+hzM_1Yk zcb1P>f?7zcsvB7gG8IS<4nPYi-5TH#HF)MK#~#P2xCc(>vxLvNtRt;D)E;vbq)h^Z(%U7l;MjT`7a zc(1^~oPKE-$?JrH60MIRX%xbB&#P;lFv^f=Y+3QxuH8E8dWZEx6DnhCK-Eq!8YTK3 zV=Xodu+A}RQ@X?os@k)2-T?`Vj$a&-F?0c^-_rG9#H zLZNndqZRam$peofq41*Bf=G|rojG8Z7g{HYgMhLWolw`xli3%L08$!jnd3zoJ0X=G z0uM)gng=%qYo(TA4SB+Lshs-LGPcomX{2_lHh5|m;eu=ntQE3obbIaO#4HUiMEWKe z+ZeW!+07jI*APL!P=QtVG%B!4F30(xWd8kb4mBN7bVcab>KSTTvjV4;8;{i3`oM5= z9-c@9j8KvmiEluTQawooToA1hT!UOH%XGG&TWOMk5jrH{Y0qbC z5G+@jDc72-MtrcfJRmG)K{H6_E2apr(&yHAVUGgqFxJ9kdYNgiBKBZ$MJNxHxfc{l zBzo`^M=#oz81khKHQt~m&XtR>uKssP_Oy1e*rhK=+?aZ`C=v}@Z{p2aBXac&E2_}l z$YeJ~=}`+J9RPNf!P{e=~kX)%)lMdM! zRkl^7DXt1BPpks(14PDw;ydAf8rc!-0SX4wOUIbrQS{Bs&I4zymM1yzs%Lh^91K2Q zZg#kI~|xKYqNz;UCRnn z!x0v<GPZUB{-@#$1DONl3-k(?+UJ^;?iMXSskVndy8RBi~Uqg4jlN6Yd?)V^H4OGj9*oh zrz0WxV+-bZOBi?HalxN(dcV4jyg9Ee(}yW2;mLmdPnUwzTj;KbYQe>q4iTTpv8q~kBbJ!RjNVhG$nldh-hC!u1M z<&q(WJ?Rx{RqprdBfwqQBbOhZ_ac>xg=7_>GOGYACZJHQAvF}_s*)Pu z?y;?Aok90@c z2(E8(r%U8l)zT4|cZ1`UU#hIVNygCv%e+=fD-Pq zu{Ye^(y~yz8~MurX0}4%50)$R4|0au{ORQPz5ny~pWeQ^Gii^!koZUIf78Za!wkJ( z7*Z1vcDC>a!w;7&9)2NkerR%$*rFr@g@qx#6k-p$R=Z#%QAcM8 zj>ml1=ra?JDUB*l>i~PJ}(VZmn|#~FKzIfm$&2V_40NJBRrG^+2tE! z5*d$3FKONet(7yM#2pJWQ#(rIArDOvyS9j1XUHxYx~vzLC|b$)wz#qYco0|LpGln-3rNUaQSEU1hX|eisL2VX$s-nV7K0g#rfaDppfVo4GEIidYlV<39JVqRA9V-KR#LDdYSVyAWl*F zGjbedQGtmAMMnD|QrcyU?VmEMUHC^6HHEBF+UFP#@uMTw2Q>DfB1Fsa;K9}~gzCQ1 z%Y*cu(&sbK(G`7p{_3xHpMM#@diU-JG`BHIimgIaNezk9K$SSE&e5Kp%|lc-Db(`3 zr^0#0R8{ayjXlxKQ|(YF(~Kk+Nnnk<#cKO9eK$>Eox7vQdeQ-dnYe2NXT+k4ftXcq&38oFk&C*Pgou(ngca7>jx7fLxt{W;bdH zPXeTujT)5*YTJ)@>ouzUYOPZOKwH;3r@Usv&>FD3vp=g~lF#Hw#DRj0K}_RkLC$hG zHWYth5c!=5+H&&mFW5atZz{&Dv=AutwuclsA-^&)|DYn)0TuCCZQzc?|C2r#8X!kXE{>dHo@3|%1O5N2faOl-dpWw%gOx#Y7-QfVU~tjWi*=D9pw+K*pzBYC_AClcmW{b(gb=Ks21#UGn0fHG(JVnrOlLp-KjzX^zL4zem<{8PdY_CHMyW z1ld6N7+KhbK1RwqsPF{k66-l<2lP1ohafe-uxb^9vQ*7b?81-EFLp{1i0%&DoS+JH1l~WNsUWJV)GG;& z^|ii%K*9e$>RJ9Mv+$IEhYVu=fz}|An1|jjz2pBnPPd}i7OJQn#{-fIti@d8D5GyA^VL#=nFF-ha?bNKs-95_5dDDuSC7A< z$Fn@Z|AR;VD^EoKpX!N&fBA_pDOXP%{>x81Z9MT5Pb?PU%$P9@(I`~Dm;6XJOrmRJ z2=Nzct|8gO(_yEcG&mffsQY1_F$fd*Tf|JlXklhX7;}3llSS9lqNr-R)C|6C?(AT0 zrDMrhCLy{pQdG&fn4bt|X$4%gfRW^gIyQk!agCI2lK2eg6$Pt{lP~K z(Vna6!fQaXc4h>WnjcL&Rs3HK(kpNXIs)-*v6)M8u}fEHFbKXR4XP|Z9>S7$cK6oG zmK;q5lXA(of8+uDMu%E*is~Xm5p!NjyCVX{Cohu>=Q5;Tvw-SF`3e*}Z$A88J=jgr zKVIE^eEZ8!-@N|$jZ!4>-`=A?{J~@akU+m{G2ZEBYvkVf2sVap%$~gc^a|nS-P22f z;O6E9nrBV1<`8UC$a8qq6^H=R5OQFb!`F6SVeb5TtjiwSUXHQj2nVniN(eaQ@M{D0 zYgAdYo>WT)My5-6LJS^NvEgTDaCT^0N~a12g~F*S6b=i@J?e-QiLMqL;Pz$(js{58hP?>XDGaHG*!(UY;92>sQs$uc zDFul$p`uC~)gAaN$sGhj)4nzt`EWe5>Em6~a#BZG&B@X{G(r<6!&$#3n)NAWQcquv zHz>sO}ocstFcgK8Cv%@Z$I7N zy{G2H6J!uSY5@@%!qwoB1~TX_a6@v-N%$s@WI zd`Pc}LdkpRYItkkDKB~pfx}A9rjj)5sJ%PTCd&e>(Q=pCE-lP(&a!ZEg=^1 zNQtY^bL8ct^%;qPy?W64Y$R*WHLN+ZiLrc6Wz8W(UucJ%b}$_Rnn2w`=FH1kXfIDJ zEoE*J^tq*N4c|+2x0o1KoMU&i)yKO}uU|1srGmO54(5Q0V+g-1%%`Z~UYIf5;wog1 z67Mo*P+qVg5e7WnvXxD}vkjoW-5z7{0nHSS8m8$aVa90o14}n>Ml|5&@?*&?Bqotw z_o^#>Qp!8s8CV?hZJCnyWNuu4=JLfN46v8g1raB(-`>7kIHa9nb@qYC{%?51g)%%0=`-p&W?U zW#QQC54I0^_5e-=(DwWHcXw~#bB)+mHi(UG zIIu$AKVnp)!Z%3%!pi2Jz{ZfVN^DirYUSsWsNMk$N7MRhS9+Sp2&2^3(gU0hv8o=> zc-J?XM}g;bwq-y%=U`Ri;W#38kQi^*T4BD6YzdaZ=Ej5zeDD{We%c+`c@1fVPa|_1 zy8Vq7Hb`;BzEjDNzF-9hDEFtV9UjC10( zvQP4AqG>2rtXM!@YgL&bkN6QBcjn9-dufy7_~U<~oKgm}U<#G&G@l{v^#I!$)gyFs zV988kfvX}L5tWIVN9>%K{GyfYe-^jV@qrr^rb<-pP#IX;fv|yseiXI%Q#_fSC6GA? z?4_xzz|IE5g%Z*On&T7Sv`a0xk!bF}v}fYJX>qdDW&@S%a@5i=74`mzEA9vs+VEIx zp0gN!rK%6bKS6ay4OCKZ!T0wc{}Fa%iB_;DH)$z36oxZcM8n=1H4G8@Dg)?z{FGXU zcRZ9t39~3hxlo%ApFh5K*M1kOBlEF%JyJOH)+4Wp58mA$yrvN2M8DzvSYiKz0i8E3Og_A%17OjAnT1bJ6LyiJBjj$ZL-eF;^zhWS?rsYIRRA8Swf!ws*T; zqPoU*lW-XgCLyun+3JV_s)01s7yh4?{Hi+6}yY@zbhfLB6qk7sOi= z82ttv#sX4mQz|nGoNj;lOKD3-fAnU+x?9<;b2@DTm$2`d4k<&XDT$z6 z$)HoJjhs@hP*U`V)em*8lq!xJd$AHl;~^q%YGseSrvM5ExPvsfJaI&VB8L(yT%bH)xsJgiIqvU> zp@AV;YlE90*LT6JUMz2K+%jP)Urh5eqS;;9H^KC)G7jbZ>c(0&q5h(lws?q(cR=k# z7YxN~1eYT^*K$aZ7+6KC-oO1@4=NAoY*Af6T6Uodocwx9S|TzN61u{-v%GJD8!i8Z z2*jH>rEcoV2~K?*K>vD{T7kx=Vk=g%D2lBd$OlmSO5Vi}1En@Xhbk;bo14*7MrEps z7)`eRx7A@v{y(M5CJ&$`&jRTyI;o>!vQb6*2RfH$y{=l96kYW~PC2#>pa^G)y7ySG2Szk72GzqD(A;H3)uYvfjo4WnEX!q-MnN=(l5 zd=1Kp-Grk75!D25Ve2^*_HcWmU1_N)<%3Vowl~jiDq>Ipw8UB;niddC1j8W4taM6< zK?mN*#GewVm)b@p=%E$(;;S{rGA=aDvKM&OE@F&vmtOj)L)9{YnCRjleNzZPu+F+= zq8_1PLeZ=#WA%0kwyiijOOaD(pXoNSk+2!|bk2)`=C>pcgJhd8>oAz4*JW9M zn`iiy8#O4pjay(_7sFy? zKO0(Fiz+Ik{8hzvHo~EBJS%WZGh@Aa&L9ayR16BH(=dxQzr;~T75iOCYGyPknE@?J zLEO5b!iGf3f%;w%Rb*e68DDBjm(*4)1WHA96M+`2()GtrQMj~Ms`na6?*wCr`n>=t zqEKr&V)M$=dL|C%`xJbtJwZD~w4DC!?)|-)2KKvO-mv1ihKYRc$lk4B?D4)Yk~!fB ztBX_gp$JJ6VOjG~j;Yn$K0~i!1T*y@^d$mv_pV2)BQNxP+wT zG>Q?3<>QL0^<5MW>EAqByr=T4x<(`b5+I8?@N|5q2w8*W`N~$r zFVfZ!n~()3lMe@r1IHhzz*=s3UCSi@0`KK@%{nkB1RSD>JU%2ubwKsXR?B5R9(vY@ zg^6+@ox$^Lpis&h(acuU&dy#7da@tl)N6{#8CVL&7U4@wiU^`IU~S5lOQi|b0=T7w zI9)`^4rP^Vtl)!FeKmonPYy0n8(8WTS?i)w(Z#(mF4l-djh8$7YISv?$P1eZ2$>b2 z$`n&>Se|4m&2DO9ezAS{t#Ps);^ zzMwqcB)|x?``)Qqd6kTpJgZ}M?Xd0jyWLCs+S0h!L^vCKB^0^=^lOg>;@?SzYjVk1HH z=aF`YPc&l2z-H@y9D8D>v?f$bRpF_J^FeNGX4n*XkV(>6CqX(hod{=Yu>TVptj=bZ zoGoUj(eYF9e)J{PW8Dz9zP1BWjxpLuKK^7UxSUVsNjJ70Srh|Q>S_ZMM2Wl=Kws;= z9C)j$CeCHAVK20bYPA&Vq2eO(5e1n>FCL-ZEHfUd#+V~^hR_9DR61g3NG8U9no`$m zXp5bS9BFLsEsqy8WY=pWBqMg#vlv$MfiUY(*b!)W#{|hcBIF2AC5qF)$wCA(sUIE+ zP(=bT5a1^ySMC{eG8`bZD7M7PwV3~;9K$wg&_o`Y&JY==#pX0PHpKD)MT+92pL zKbU-9OG?Y|4vKZXI5_lsvSZ7 zGuF4b+Fk~)cSn(Bf+nCaY7Zuh43%f|&76gI*`pAMUT#E-b#%g`PCw6MB$^$YT&t+Z z_|uE?m(xgsz3j-tv!cNML$iPo_@D7_Q7H2MJelMDN6CawNx@#1Ws&2ZJ?aS6uD+NP?{pt=yNH>x^q z924)JwcL=H?B#1U*I_yP!`>c6nB*)@$-=}biWsH|cFAZkO(zkuOT87W z%$|ju_)-gr56l4iTk;D{gh+gO!76*JZ~JFnEV>Ag_6|Gch^>iBrZ*su=si^*^$=7Y zs6{5yc`}$3phyhEox#89sxKsYIL+Z-w`1Q=b#se1@fvI8h`pP;-6$A8L$MAJE4JkE z#Spe}m>ffp5CfYMCd`xEZIX*dlE3hW5Pufh6k!;T0R@QUOyu14=gJ4%e9wKn$AYM8yT6THg}VFTYxs@=ezka!`H!M z-V7yc0JZWgDq>jfV)ps)$i9U+Z|^UcO9Uoz)w2b@1@;G#I+BF(t;w59*|A8z^Q0)x zy|a`k-O|XsQ#64wpPGpAHqAM(@zSMb+o3LF_GwV;TVR|6xZsC)~+u@~x5=x1r zNLQB9t`lO648$B?HY&%5tS2p4a;2!uB%Tn~^!akp``d?iD1hM?0I7LyDkG}2q5Wr=l zsrqUikC=*%xdl)%qx*}!94}sn6n;5=L4s?Nchn*&ijpAXFGiyn+kdA>TU!gfya@W< zpyHR_6O_!8g_}~{D*qN@i#V$ReY<($MWghoDF;edlAPHQhF9PIaiw%ywuOQ#)L{^A zlaZ9gD5yzS!dVAcznlcC&8}PE!g%qDCiQsDgu2>lB@0yZ4B~=_gc7|iRgU$>^;8zu zg-0Jzv-7K4dcVLd;g%-5Jbv}&%|}VQuRoxvV(-)a$Iq|td)snO?|(cxHt63zynVwf z-GnwRe?uckYq$9J{`T|FKX?~`R=dT$7|Qxz=^)j=@7@3W%g4JP(Iv7D(6f05?s=%V9Cww=YjsI_^`%H0izu-S z5x?b->UdxV_R09tA@bA#<=$?fA{!H`P{l;`2J8qnGmF^k$wEVX@}#WGzwUk+y?%Z7 z=@TBxW8;)Id(f>szq2#4OPgTBSy|z1dRQ!Js1|c z7Q28OQ3V}GXd*Nv9iw!mQ$)4^F60GV=WKdjOA8$n^hSIa<_xyeh#^IG)(Jq%sI_*` zqmx$9Zp7!4Y~OTjpMe30r8MMQjF%5$8Pp*qs%RFLR?*#2;nH8ob*|K^5kMR z9Q^9PM@-v%54mssR0^yA4JbAR$_#PZU!#}bumv-8DuQ+Toj6rb(7Nyi$o>nHCc^dd zsGBrlAIyQ~3CUYSvQ4ZIUaCfri|J&(TX=v7VhZjbCBq=1E8J)%>C#(^+gU4)nh7Rl z9}NpXJ5kB?67;Q|@(v{5N>0`2&wjuNL`_s0)n^bv~&N*gcj|ireLX8;>U& zSuLo@^TNoD`F^cBiacG%(7P?Mk^)k3!4wI;Pt1MlIUz8**2ADs{nj7^2AoF;z3`AR zOl7lMtr)1!HVGsAW1%V{FNHaz!$eU*b!cSQ1x}zG{pC8D%E4E7sUK}vFKB@c+^=d@ zs$v6@=s83?GFgPyN@8tX}Cq)QApHlzZ*~ zMR)TK(1lxTJ3tI*|Ih!#4tKzY5B%Es13!mIWVh#*F%;wRsqjw7ZWdwS-)R!UEV-95 z*ct+>OCu0Cs&TXXfHrX%fj&ajq_hKdu%W_q&vWe04A;}8u$|jLU%Qg7F@1;sHpk^EutwnHV71|cGo^?^-8>Dqt_G3$q1@)mKL#t=m zcZLTmXG9}2dOCkrCa+jPJs7JSO~npRzC)fXWq|UVL8rg4Dn7&B%;Z}<0L{dMGb;EV zHdREr$bjZ#kw3#(bifqQxGRfb(?w(ty3l16{rHU*4ugzI^>aoruMj3f*yS0c1uiVd zgGHr>W;781*TT6x$GTsb9bA*V9R|op zTV8Oxtt^ePKh*H>_Wjd{x1_h(n2~XQD)~%zudXlyhy?XuOw|J^#rGfIzP`sOteppx zQz=%>m^0igT?V_@3C9yZz5S27{e4dqm&)R3eX}%~lH~^@QgJb#Lt7c$ZjiH&+R|HM zDzh=w^9PY@{1wK9g9hZzeA;J4i|4UM86a_VNYhaji0ewspkG9dNy4+yw|pr64vZa7 z!3c_yPN)sDTCG$<7|rHxCi^``$Sb0FOjo7e);&;{}TLVm7G`%Bt^Tr%-e+OH6)@Gev&BvL>|;(zP8eIOtX9l=vxHR zo|;ojszKRICaYVOziH6QN$&w5?XC!CJF$QH%0}{h1=Ht1JmD#c+-Zc_T{H4Rxvw-B z%Sn#9KMR=FC_pNmKzh#yR}V9A zFp}cR-GN0V^b4|s;8 zLb^goNB!;4x3_)*_>VB=E>}4f0Ovu5EdGdI5diMNW_s zRC8SEg)rIy(oNT<;Uf)SkI>E{d6ZO^As1#rbe}WwzU-eJAUBq;0*7p>2CuU*g1WUF z4OrRm#Hw6WO}6DV#qG%I6BYNnQ6z&q=KbPMBiA1X6Pv5EQrh0iG%2bd9`2xR7PT79 zPOST1_-FmHj<|ucr$~NhF`z{$(XH7P+Diyoq>{ZUBRJ;c{;V?nG(dVIHpH2FnW&tDtYuhH%R{6H51wgg292#Fdve^dTQ zQ{Aj$biVuU-zOj6{_XDLr+;s-4~_o&=Hu&s|8)QJaPXItUw=g;)4TmIfB*R1YkO$J zME0c9aHcp>g`90)z#f6a#s3ib`JT~I)Du)e2dY{6JWy{P6V}sSqNe|R`x3H5{D}k+ zFzdzusCM%f6>M^au)e!%^34(%{heRg(V?=j4w7q)&ia8y*Ikk8{s{@WhgO zw9bQ@)rBy*thaBSiS5SCu&zu-G4iRV)V;i*DVX0EJLzXwVZtuUlbwi%_Mm0IaKhA}c#vFRK%N0vjG@L{(Vmg*_ z5vQ!R!s$#No~e8{9G$P2N?%}AjUC5Wd^fU1Jc%V;iVgdLxi}FnteV zax)Jxyrnte!KPUm1cyP|@in&RDii{+CWG$uHv4;cEqsCm%>qjB$&bAl* zp|`!@8e#SJmoHbN&88rwbcIU|L2pPzoWl5n&bu&C-9?x+~ z5Q~tc2!Htsq<7~Ct)XsK8n)s}Iws^bl1XCFxkLfdWbUEmV4-N$qE}yvzKBweCeLPG zJs<+K5qCF@la{v%CjIHHY(%<`rcSAH*ymxowzY8c&4KQndqbWe^Gg(92kY2~l8^ods$30F-8MXo6EGVm1{6OwZ(eLdRP2 ztnpYBO$c;KxQlQr=W@>l_e2jr(_w>o;-~NlI3W)Zhb9#FY*J3ukWw!Zi*JiZ!T#s( z8zO7WjeuK5fzS*M&YWtGQ?JuMti>i%Yz=?ZLv?a6{vLK73Ns3mgSE%A5XDw@j$Z4trmN#t z`pV_@D;hq8BM_$=mZ}hiU2gT(m2u^pgbk4At>_P_dbzAi#gnR6#@_F+VJ4kS(90bb zndd;Br_-0c;_qVL)lf>s4I=u$K8YkMHJfsf1r30>y&^tyBl zZVgD-uB%qwVY99V_2wiXbDRNG?TY+%QfFs`@ZO@+GsRfe`UyIQg@~_c$H8R?rqj^h z{niZ#=1yS2r-^*uL(>xD8eS7~7Iw3Atygas)!h^H>X2k}LZyXj_8 zZz38z)gnf<#n%4G)mS^N1559;oEM-Hi7Gu}(I^RlN*!bRQ7IeC@mRqz1y1lMGfem( zYZPp|v$e+?Q^U=1NtBLcJ3-t$A$$UOlp58;-qDL|Hmb)pc20HOUceNDLhEK=?tl0A z$>Z}U!~XE};(RddpFO_&T@F_hE5+}3_OxyTyCRTKhVxJa5^Jc*q77xy$}b&%+dml~ z?yQg;kdRn;y>W!StPSqA47Dz0xd9P@EaC%84UqJ*0BPmzfa1L{F*6XEb-B{TE!R5{ zTz|l|<)Yihp?MpMH_YjxXby-*7yrT7oPc@r2U;y>g9NDb2usV)NJqaeVp8T$5e#ncPG&LS3U_%7@?nkN zA1pmhg6VS@0fW}!Zm-B!G*uMazt}uQr-=fCaIH7vdElb@pF5<$$RAegeURa=DI zJx4{~^OLi)C#0&ycjGmx1S}C#t%6KnX6mNZ5IJpJt!my;GA|0hN~vAZhJ%jr^pWWEMr#1!P$&?Bi*XOw&lL5mNxc zfkR@8&TKQ71TEL|*T?R6E98Gk@xexhs{N|1ek!>u_>7ETki-1C(}$5V>PmUOX(2Xa z5pgS31v~Ai6lP<35gllj(@||HR?*gG+lfY2Z^Jxll{^OfRc;D(rjwt4lUnd<2bwD! zxA#b6`przj_c(KJK72+8nnwqMpiy&AsO##h+ik_VAni`qU{o>^G!iOn0QRa-SR1PE z*T~|)XF8A}jEjoFnt22F9si>?N4;a#DA0Rao_}TJR``UF0{Lb?TWK%N4@&~gSS1D3(*D6g3z`OOr*#nAqeB5MD{`4 zDA7?k@>pnlGFNFF8526jlO$9Y_TPG4|0EWn)$!K*dh{bQ<;ZLhc#X-FM)e75rEk3l zjE`I*6lFh!oA*gCO@@v#+C!T_6v3D7a`fdFf#Mr;nCL^&Wo&Jxn$ANSyW50|#UXBS zxqi9dBEC?6IU^i06#qDJ9xz#eaRf**plUF{i{S?+a{EyS0a+-9byR@xDNBE_-{ODk ztEKHh0m1gLLxg}?#6W1oEt)bmO?gQKNpS7D$+$%_^?tJ4p(KTxebc+n14fyO$hsb< z3QZvehcWncRcmLs7Sejm!>_nP%!Dwa9>NyjWf}68MEczOv>vXl?cs8AhFz!38pVhy z1%9XM-Qy2G|AKhEp6#>`)AF@I(CF0NI;{7GoorcP!=W3{;s?0SV&xTVIe#lqv9eP0YU7`s){=%J-|~O=Q1o$uaAjuI z!IW^Iktg%H(A}VxG7zp=K8=R8xA)&&|9$rE!{5jE@3?LC4ISZ~O1Z`PZdS4xeI_fR ze5(c}5P2m$?0YggwL3M*;{3QUX*;euhLw;bPxeH$p<^bvK6)V}Qk5VUbHgh3jumK1 z^%>R`lq{gT|8h9miE?;28O|H^p z2w9X*r$L;^VIOixXgx3k_a@QV2{GOVEpkQBe5L&TBt^F;Nx48sJHBglv#>xXbdj<6 z913O`=2*BvKjETgPiEQ7>~qB6!Hq;eQ4tyHK|2Q}Vu4ri1I!lOu-^`7)s#*pR`Oqk zK67km11@E_{$b{h%WH%J^iSBrBu3O2Wm615dO`oya$o}e5&n;eKBik0?l>77YZWvw zKEt&hWUMS}zeB z#(I?!D*@A0T=JyC5>$coqChvGd5V53trrcDrt_=-RUjXDU?OYy=PY|_JtnzY$ql~44gTtN(gdI!{nCMzC6UY?fGJl|xDGJjFsx1MfYQDTMt7Z?2U9l08u{_Oh^#r=%y=TUdM-Zf%3!57R%E zT>qc}my=}^r_lMXqelw3GJW0Xkz%qZI}BR0sQi1-pU~y~z*09sQR2;mLWexx_Cn`m zL-9#ers0;a2|xqri%V)ne~M7mi}u03=3Ipk5AAA9FjfkQj^0|Fz_#mNytSU7-_!!r zu7ncXNTadBDIgpc9E}{2BeIe8v+3j{E6ku$z4A2i+tMpQl(cuiAEHQ+U#b_wpk_l8 z(ocJcKMJ=n?jOnr*pvQF!ENa(qT3>{Ba#YI#9C`6go+8`JW%UDWfCY^vG|F2=wgQ` z5wV~zPF-7=!wfYyufP0Y4~nQ~2lY97$g2-SUZwdq~HvNtq2LB~*|q@B$~C z7;{FQnrg8-`kFNvT5#MqzWKAsHFR+A_dk4o`|kej`~B;8{~@fMT*}nRVhPp&0)$sa zvMx=g%e>l9b}&VY$}=ZlA41Pd*I+rWiLw+x%vI~6mRiz;+JJE-wRjNt>de}owp zmB(_jknmgypwk&-ojtk^uWT2X8?v!PP+KueHE#Jpng{8RZWvO*9F2$Z=2-aJ|NG97NuPKJ0{I3t^6T}owO65F2 z_#1lz&VXR(Dp;x5oDQg21QajGytXoaP}f2#;*spPs=lSaynI3p*+?3ow2!9R=F*Of zM7GE)3Lb`4##v-O7C9s17(5^V3e4q8j|mVB86M!-Z6MYGnYrsJS`6Ld>tEd?k@bhq z_jmg}RipPGKHlAb{`em3$2d5IgxNwos}SGGy&d3)KvIERu|sRy1;&eTn9Ql$1Kt6( zBO&P)J%)8YI1AbpM2{z*3#11E!MY~~EE;6jwqdSnFfjh~p{RKQ^?{~>m?nO^>eZKe zsHhY$jXefxQKy9HVPgCy$bjWvBPM`)D?chpbU2~*sij-f+spQu1#FCirK1;%_4g*g z5l?CZ_-3?C=X||*7Nw^tS#k@v%=~#iG52m<=xeyBZqdr7Eyes7kYw{B0KaVgtePfU z;Fy$9kelua{w+KUxHo)zF8Xt=PD_4QJgx<+OXY=DMW%Q1>v+tM&K#-f?yW$M)bZZz z2C@S-sag~R1z=VT8yD{T_K#FLtwfR3PbD96FVrZzVAjRUH$f3ML<&%rK0UW6_8O&f z5@*-kjImT{U|34(joDL;4oTM@qpxV7tJ8SHZ7Sjd>R~w7LfR!lV%ED`&V3>lfW9oNUwU}CKq%-kDNMUVTpy418C8LnGIkxgH@Vw8W3|_EjG+hid1}| zYXI&vnLr{RZ}GXI7(^miah=~>MHit+@SgqYW%|r7Pkwxfud{PPBCh~N@ZL~%tf7Xp zfK=0C&e*W`uijaJzzu5R8Gfhqj+P`P952DKxyW;d?R~_!U(0OfmA_C0I2Q@z$n6gWO}~=$ChU1qmynOprO!NJq|t zk&kRXbaSiw;bx+u89_^+e|KTMZu;*de-@zup-;en(v0`2KzgW1d2}91jXd4o(E#cO zvvFcu-4<<&M7$)AL)%d_pih5E5Tje)RhXCYH8P z%(N2Z59KnRFx`EJ2m(LpUb|=W?(XiF<@@QcZ>gw&JP*vg=5(=VufWx8!Q?=M_YjdP z{Pz+a8w*^^_-01Sa++fup7`W|WZ4AS(T9&^jQ@B33hoe)6ZCvx01i>JWjYd7p(#ml zr@>MkO!qwP4P zhxH3s)pV@9>LeagJ)_323M76bYXvkpSW^qOdVCE104>$95|il*x+WMzZ#B*UvH4Xs z6JdubNBt04q$>3l0@%_RADi{3&>Cvn480l!JbBFK+q+^OU`j9F94hf&R z*#qHqG;?NYc&ZXp(+vHJ$OjCD7A+BY)1Q5|BV=Bz&V3J%9@E&X)AXVCl`XJtir$)Q zw4Y5;gzi?!#2uOdF`i6|L zu+eY-2noGE`?G>9d?H5*ea4!yLE5F93qk;X+!Rzwh}MT}g7LeI-Z}626$5Sh=SpLf zIuB*OD-^Pbi-e#~+U8<;%#PyYQLL{yj#QfzaLL#ll)t#W+FnB^a2+93f_xbo0jK-u zMb-u$ocDx^08b{)Aeu#$@oKox*@n?={tRZv?>oYF>fu;p+IRiH`8oC_CLpb_V=4gsQS@*eBC=2l}t5Jp%=bX^^4Ns7<6<6nriA}U4<#!nTKIVn}2-T zzJ2{yMg+_+A=urTBaWRpU1tGFzkS-rOHD_kURGYpVapVOQ|#H@YgS|SPLXLq`^zHO z(rP2W0XrOjCM~xd;4Zgr0!k*e@5_@}=dlXq$PK-kkv&q=y1Xpb7pTf8{o~S0D>m|x5)HqUsoKBHC{HY*PZ4vaqjDqS|2g597 z=~|dAagcJBD+G+!FUR&6u-FlF+j_a$TqCT)Ki@C)82CF-#t6RLll?W)0B_;*9JAUi zUk!}?Foo@&pyS9OfpzX-5qcWeC_q}Ggs)q$YsAhzrP`)-4GtOzT~5%g{B@|Ip^X+L zcHrKXF-djdA#Cy!;_PJpU`63;u*nlm_e@8vlJ=D1oi?y2PJVT@ev~r@FGVQr$$}%?D3^t3K?%F{ zqyp;7z3XtjTB8HaQGAo6d3F%rAjD8=cW;2821(J7z$SN$vkWF=qBDPx{a5kdl*AF# ztIO-EdA@6022@_`Jkl*#fvu=22ki_oImB7Teo?pPKfs)<-js%?igCiUi&O7x8oaD5^i(y_;f04Y-1hc`eFB;nx$0zgvZUl7_6 zXGUR-G*=I=eZ9wj`~AKzGpn+?8=UdkvyQNaU0L1euFA^yBSbUwOTZ9r%Zw0NKVj_!>)l3w)n849h-?G0CRBKXv`0!DmFHm+nrT8@u1{c;nuT5)BJuC zOLPl>3%zs>;NO7e#E#RO4YC$aZI|sYRkaO#~X0hIR40<+7dhrl(6p0U_ zWDI~Znb-!xa3DN|kc;TP**Eaxk*T1%8^WO>Z=`|BzzWmJ>Zx8}m?d2?X-F-2xXNdi zBv3*JH z%3P=I>U60SMJMIJ(FMb-DO&r=W=w1WDTvNd(cC1=xgxnvT0tx!uSZ;Ouf_wklA0`u ziE^;4ZeiVko4c*>fC3NcNu3DcvFaYc6nRUF7ANK>^@}b1(=YvDtjeQ5tkC4Y|6@N~ z*Q4_l2mjz#wAA$ZD3ecAu*4y8uBy-lQR~M8@X8d?AR3j{kgsJZJ4GKsK9ZlR)--*n zZi1$#h$)6LG^LcmV~JwDgWvUU3{1%6x|TaN8V9Dtk4%Id^f*AEPPdmPuXu++lu)R` zQrNZ{$(>e{QYD8A*DX3@cXbNo_&Z3lix-k5#7GPC^U<=SYx&I7U}CG=o?NF5E(2Sj znX&Pn8LDz|1MMjoi2)pJ3znmi(io0e(Ew3o298qKomFH8mrj(dE-a-;2z_7Pe|q~p z8+|cCOXAX6HJoRcE7Vaw|1Co3xQ6^&)lhgXYmPKvCVSUeO~BZxROm!fpM z%Z|LKhZ2KwL!xpK=*E{5HL7K_HaD!Pg!=rjl@v3y<#g@P08w5>GBPx+Z%j}#U0!bm z2M&5*+sU)PwPI2&SYQie(6kD_5R}L=gS!`H%m#xX10=jxbkt!c`lE`$kS!aKbYhFv zSCBxK=1n+m;|F>xJBWpOWgQhoSZY%?CWPT_K^&~fwmWxG&>n7gc~Gp#X>yi2GSyTc zVv{;S(2Z&=bu;Sky=UmR??hTB+yS`)?nE@dJSrxoojx=K$TE$qgD-%O;>Dzn?2*h09X&xfsyPvyK2f+U7hK)D@_{QV0CkakcZp%?>>C{ zCn-eIJu$=y26rgd$q}OV!eW~C{^8-#{^1MstU?Wt@xxc+BeklMs0p7n9oLP#+yMM= zAn(3Q;Csthto^%|Q8J8a!ZpQ7YqbxiC3eScsxbZd^&L{`&Joi8@$H9?Z$JO_{Nsl& zKfQhbJYelB5!h%!1oQY-<2Mr_kn>&)w%CyoeW%Y`+G>~P7h_mhH0?Tl5bIFcb!giJl zl`$n%YC-|1z$1@~qkW|_L1;9QDO1lw`0-D9AkAk>a(G8LeFDMNq7Zx+45$z|k#s+5Upz8)Xb&NH|@f zHnueuZ>*eMae^PznV=;XEuo`+ab+~j{`TLd80V^~WzEn~!J`2-%Wkp;i*BW2v_74` z1&PI{BbT|I+HGta6OqI09cnr{vHOAW$Z3)uWtE}0jY2L>+bVHH(vh6PfjTE{J)6ri zV|bz|6Ub?MFtMBPHk(%=XX$keZ3S zSe3)Pxg@z!_77wB!vcx~G5l!lQ;)x1A-lahAcTQ&<0MzP7;n7H#V279!MV;wDRi+m zs#9Gm%(Ju?@C-|L7A(y&VGP*EBsL0XnB@VhCOFlwRkH`wQLAhZWiol*@_^%;Iu`P& zJ3>ST;cjWC0D6K9*XivwGz>$4W=y|f?9!N)Lyvr!fmib{v4# z0)#+y7gb8?!DKso@|UMTYMvp#G8_R*GfUu+(O|!(6%a93ILuqGs=Q{iBT*4onO!G~ zE3JCOgC%#s`hL2EwTSc)j6UIiHist*uNlM-J3?Y@os&(om)S(W31t44M-RbL6>zDBJKYfB2x|&Obu--iQZ|IABj5p(45} z5(Cc<*)PfE>rW2|Fe%g%vMw$|rUVs%Oc|=Ja!nK(F%-LztT>Q8V1QvL1rI-%%WynS z6JCRvC``tWhS)(fmKoV_LD`fhG}(~gJ^t0ZcfZm^7~nYZKwB#oXIzdCL54gc1ll-6 zttbo~20$xut^uW~tE;sZ!2j04t#o=h8$TN;L}p{1xhfX60u`>e$B<@1E4_j^Qs{gi z)dt~1l_sCf+c9aN~5%(nnWl2+n3QF#jQs68VM8*#t1qvc>vTstI z@D>*j(Uy5rwg){8aq%mkRQ#FrjE#qPK^M17Byz^0fMRzRUpMqp- zAM!xiFUq_COkH518mi|vWb859h1azw|DgA)audH2d!sO@nk;-5>0W6-@6!EI)bPnF z@BmoHov4d1fW=I-yl#$yVA@hTKBV^wWt!|x841J)@jl8QmK`jT6OFlGMflD(H3e`83oI~zv<{B| z0y$3c12UNvA8shEMqEzf_h2@A)beK;9t$r$t$Khcn$n6^N!Q?Hgf3`Acfs)iZqG2a zt-Bo%*^V=N2APn>0N_uHX{?xVG1zH_+)@Q|PStJlTJUB}*T3oZ{nw_RJ5adD98>O}4 z-AFf zIW7dPvAIqD;4$!}X|Oo})%~p=V9d=Csv@t<_Nh>OHRB^EG0e~wHBZk`Q$?pJ>hL4D z%f4|0g1x;0yVp%ajzWiCQ7w&?@SQIU}yfWU-$jK#Ql0+-8!iY@B z=XO+=r4Ni?Toy~oa%n_6V_0vyxc&pu2j@s`gg5(oerbN4-Y8Cp)KbfhwL_bJpQ3#R zl?W4%X!oQm-9zUiQoy`)UAgoR&4Cv$DdT}MK*jpu_51e^@1m!Y#*)1UQkhD6Ifu2_ zL0AGji0~MULBHJzJjA#J3mDoUzFy6~4nrp8&>$Ph7;yZkE#Nq6Uas{}9uQS*!a~C| ziYJoBkp)OR@#Vc-%z78RBrlTmlf5c8$P zbD(%JRQjOl>+)-(d;M{}88?#jXf{K`rhMTTcTP@cr36oI&{9g~X=WU#gCPye;BtIf z+k#vIr4J-WygpguP~EK76lrZ;$`HPum}p_meX7udxt>JN^*zc?7%rK00{rS=cNePx zsI49l@a7DuJuK*ij-@&mQii?$M*15sYp_JizeMvfz(8*)rkEK?T%(lpUkp&Nt$UN~S>@x^X?nH6&@!|EK`pqb0 zERKMWWJE>ex!i2`#bFUIF7{UaaG20+l*JXm%gqJ1rQvZ|y?U%sltGN@iH!c#?@%0S`tJJ=EK&lpxxN7L z;n3yzjkb+fz4B)E4bIIvA6|RxAzRYpOz7u#69I=9W}=tsvKxkeCqQ9C7}pV`Sj~`O zedn&2;bw-`8DERAw(WcVNFTo;1K<=8Tyy! z?3s1VatU`=W4HcekoB)M3Vffh&`$eYJ;%3;o3Zef$LRF!r`M>%zMkLRyk9=Ne`EVt zWz3TjDnd1%s7rEWVg195zJ&bOGv{UD%th}W`anyE>2vr(Oq;yFJri;Aznz_B0SfN! zd3)A#RhNhqYjP!vf?_y>dm;iglq#k zE71ha(IWAo@>xnIaYRa$Qz}f;`6LsF+?)a3c@#(3T5>Napx82?r|s?1N&?CF)*BU) zV@)9Y`12x1sx5mucQ4Tmf&t$Rh;l4N?>^#oRG8iHHJJI0 z?n;%ED_ba%!fhs92h6|(CvC*tBAS^P8Fh`DuWTeVM{>8mu;NE~OOhxCd4#|&^cx2PYbFx4{Y-Z3Yp0mlM%!4~nv?|i;ns?&uU-2vSszhjx$ z5)hT-jS5Ta<2l_Dn2pQ$d3KhQ;6Rz62BNt5X6j?EKIImmZUvG>Gpd{OmQFiON)e!~ zIe>u*x(n*uS8DJ4Z`t#q#se|Mzl!vIr*zW?;;Sx~B)Zvy+*b*A&Z*e3zK5sSliv(~ z$$PM?$XZsJ!1dwgCi_JAv9dommgkT)4qyW9iKQK&J{iBDxXCCv#S4=jS?uMx8szYV zbN^+n$6aR0*3q$Wm}jGMakYAe*P?W3M!p?h_u&bW)mU}o=F8`wzI@)Y{|oZh(9!qP z1GIrl2q!bdaSlNDC_tG`ygfN7B2^hN(FRR1=nQGf@r@;kw|Hay6I{;XJ`^T?x;Zyv z92Q1i;s&A>9a0-YKRe)Y*Mt->uy2}19ucqAJXV-MZ?LA^H%-UdeJ+W$@O8oi^#=S3 zX(}T-ZY^-5^_7gi{`~RFx1X8HclPnak9Tk1Jbajac>mqo@3qXFf_2_G2|JAMZUVgh z2T5DHAk5~AMjVjO^n)6sdthSMwYf`jFz2x`9Y+<|s%o+?qVuw}Y9>6hD(hY%FnOmq1XDQVH} z;w7a2&4@?EYRirsL7SM1Bw!NFQiKNCC67Ob;R+-n-Eq!_C+Npa(jA|V`0TiF1tfVD z5|#Fy;~o!B=zWBUg^UsnUAE*)nCZL0YU%7$)32Y8j^TG-$h@4LA|+M5zaLf)KYsZ9 zz~Xjaei9ldAjHxP4zo{NJ;uo^vgdWQAJdzN(DV(0(<43Jb7ipl$#o)w5hUfgq|&Ib);JNHg;5(ckk860s}`2EnagT cZ{G-e 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 CJFi^; literal 0 HcmV?d00001 diff --git a/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.su b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.su new file mode 100644 index 0000000..1fe9f0f --- /dev/null +++ b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.su @@ -0,0 +1,12 @@ +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.c:73:6:HAL_PWR_DeInit 8 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.c:86:6:HAL_PWR_EnableBkUpAccess 8 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.c:98:6:HAL_PWR_DisableBkUpAccess 8 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.c:229:6:HAL_PWR_EnableWakeUpPin 16 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.c:244:6:HAL_PWR_DisableWakeUpPin 16 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.c:267:6:HAL_PWR_EnterSLEEPMode 16 static,ignoring_inline_asm +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.c:310:6:HAL_PWR_EnterSTOPMode 24 static,ignoring_inline_asm +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.c:365:6:HAL_PWR_EnterSTANDBYMode 8 static,ignoring_inline_asm +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.c:389:6:HAL_PWR_EnableSleepOnExit 8 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.c:402:6:HAL_PWR_DisableSleepOnExit 8 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.c:416:6:HAL_PWR_EnableSEVOnPend 8 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.c:429:6:HAL_PWR_DisableSEVOnPend 8 static diff --git a/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.cyclo b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.cyclo new file mode 100644 index 0000000..4591fca --- /dev/null +++ b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.cyclo @@ -0,0 +1,5 @@ +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.c:107:6:HAL_PWR_ConfigPVD 5 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.c:149:6:HAL_PWR_EnablePVD 1 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.c:158:6:HAL_PWR_DisablePVD 1 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.c:168:6:HAL_PWR_PVD_IRQHandler 2 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.c:185:13:HAL_PWR_PVDCallback 1 diff --git a/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.d b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.d new file mode 100644 index 0000000..9e4ec99 --- /dev/null +++ b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.d @@ -0,0 +1,56 @@ +Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o: \ + ../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.c \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h \ + ../Core/Inc/stm32f0xx_hal_conf.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f031x6.h \ + ../Drivers/CMSIS/Include/core_cm0.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/system_stm32f0xx.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_exti.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_cortex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h: +../Core/Inc/stm32f0xx_hal_conf.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h: +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f031x6.h: +../Drivers/CMSIS/Include/core_cm0.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/system_stm32f0xx.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_exti.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_cortex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h: diff --git a/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o new file mode 100644 index 0000000000000000000000000000000000000000..66d42b12548a8ed8026f36a94bd44ca1990e4a08 GIT binary patch literal 504688 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

      nUT$!dv2-AI zS@$2H^+uCIS|vzjFXyzDf~zDflF18RV$C)=Y>J z6U3sRihWKkP$pk^M7rr>hXX9e^Tnxai@2Df{^a$SZ|w0I_3T7*&gvL}aDYf}8c=C# z781umk%3o7bbkplt*)A|QWMefE+-qvp`KufT z_f}E7h_u3o#m{JiPx^^RHa3Q2n@@{ru8X;dtC})r`zG=E#+>~jXRL=X8y)EpO4Tf{ z_`7JL6-Y~pMW9XnFnV=?Q0t1(@d`W@gHH8S2wDsX~ z9+>mUedck%-&lOmbp&2l0ZzSQMe2Z>ny=VICalF+MO_O;vb9zvqhy}-DgrfRBVJBl zCHg&^cRF2U^3!H8uCI}=aZOBOvV_*Dtw9+^S$<`}3eRxzhX>fOXh;RbFOc85o}x3( zEtaIJ?}|>8A3okceE#?zSY=EZe1EoRMhTE1JHWAnM}2yD!MnhC5e}2{bjO``K<%7J zrAPN$9U9Jp!USpJ*=IBBiL79$V8;`84cE4d*-$ngpFS40FQ7h9G9S!sRIYDVz4}r& z<<=1WSWLf`ULr&{6IVCc1pNFOK7XpB{HQFX;n>=zMpvabKJ7D?)_4P}ATJi{?@cE2 z$~fqVoq|v|qpgTI5C3}c!u1K|;BX7K%=39UF_&$+(ARKL-F8)sSV}qwkZi{y0K17* zL4p2*45$l?Us>~}M@+um6MO}Dtnl09|8pIHD~vpbiN^bo^EzKMLtVY?iSD4yuk4)e)E-lMM{N`}R9(pH{p_dZ-c@DfX!GbN9

      qftaVtM@t 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

      nG1r{P!n@`K6V(wMm&q^C->@E@wGXS(=o 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 literal 0 HcmV?d00001 diff --git a/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.su b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.su new file mode 100644 index 0000000..e69de29 diff --git a/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.cyclo b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.cyclo new file mode 100644 index 0000000..e69de29 diff --git a/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.d b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.d new file mode 100644 index 0000000..e3bceb6 --- /dev/null +++ b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.d @@ -0,0 +1,56 @@ +Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o: \ + ../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.c \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h \ + ../Core/Inc/stm32f0xx_hal_conf.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f031x6.h \ + ../Drivers/CMSIS/Include/core_cm0.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/system_stm32f0xx.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_exti.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_cortex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h: +../Core/Inc/stm32f0xx_hal_conf.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h: +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f031x6.h: +../Drivers/CMSIS/Include/core_cm0.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/system_stm32f0xx.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_exti.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_cortex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h: diff --git a/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o new file mode 100644 index 0000000000000000000000000000000000000000..8206a8df8adf2ef22e77e109b13427b1c87932dd GIT binary patch literal 501524 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≈5QG)J_WmcJO_ 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%0AW4IRP=hecVh!{#aq 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

      AtRGQR@ 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

      B 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%0AEc zbmPhp(Np!MUgFd3$9Hepx#aav*B?^Y4iS=X#(zOsvS0t;;4u|1-}dSGXo-#-Y~ZHN z=-IfxW9;uHFn;E3BCCcS60VYLmEC|=H47c}lz8Y^VP4Sm z)I^JGpguL*9fB;^z=Xpn0_p{n0CD@vr~B>X`u-Zhg(NaepU_2fQmG8tJ1!w9(&X-Ssp4f39kKlk1BDC| zi!|uoAwCpfJ(K81TdG?eQpIWxry+bM7ldmLf(0t8-lwoQ@Ctm%-IHHap^U#!KQSVh zB{H;c6HCr)(cOsEFO6fDQZ)ARxl~TOLXMBXB|rEbb#@E9KC$P0Mo_jgugJ|}(4!5ZMaXQ~1RDuZ40<8A9B>ZRE$LJ>o4c(~r5AJOF&#bTDAO9KO}#t{L1Yil zksyks5)ahj1CmyYYCpSLFA1b$U?i+k6iq{Pwwmmky^e{#^`2_BokFD~7be1!7ngP{ zytKvUHzHtyQA7Cuv&{cMLdvLEIj$l4*q~*KRwLz9!e)&;5PCchpB!0(YY5{gO#xqX z&67#HGswT*gGSEh7mJnDEBj90)NJw7j{06ULRtC9t8n;c!h|W)^ zn-%#r>;)IF-=RQUD8=*NRD!%I3@2(H_M(=C(}YkI&K=V3rfhL&2oCb4D5jT{#kBtQ z5WY}l>d!zlF4r$g5+YUwj-0#zJ-?2{ibMv~DUkid>w`cFkwLagIH6Q&5pp;>OZ^6w z9RYHc!(xtx&iBu;o$5j*mg6xl+9#EX5lHtabQw{I2DmX6_H&)Z4`cc$EJXOabgTfjyA@cnEfqX~-^@C{dP8GyXgULIO0d08V<@>;n zAz38XA9v?mJ&5_WC1DIFs6{YyYbKW{$Y?H(#1$X*I2fWB;&nKq&8oBSMv+Zv@wy@CAFywpT+@q!2!B z#g4sFyu?4?+Qu8E(KTTnwUAn2r~(r*qYLyzS1_AgxQ6K?3wh|rVv>EaLcAh+LD(|N z4B|ZM6uJ!R5?Hw6IsB77cFLN>VU8LF4>cvcoI)HatCW;tFC5XQF$-T#k0WdYs~4y6 z3%-XM?qk=tw>R%2Ky(M@y7}^SyIHVLDXbuY+)H>zQ+rlLEILvn{k@oRQ8xtDBK2QC zq#lj!=5N!p!z?W)@uJJH#P@K5+&M)*CaO!+XF*!wH>nOUa6Xt72x?o{bLAjv0r!|_ z4{!U&hX1ueadbk9H&(ACf z|48|;up%Ot)UBLqgPRB;?4P6OF|m`EI;m+!seBnt8f~cduJGsi_^>-)1Tqytn*Iwd zKSsw8J-u9YQZa`Fgv|jFt|0vmJ;HxsibRqHv^ZHZu%)8pVCFs=4!eS-Y+SDeLM34b zPChR@PWo)-y~)cI^^J~2pj3z^O!{od1=~Y~vH1dPQ>Y)mvRr1y2101nwCcl@HY9`f zV*CPkx}UF~4||PkZ8TQ_BotiNB1-y42v82xloofLcx?pYv~Xu|Akt59H|B_r$9;TP z{YDL-?H}Sa=C8b;OtwRKp)n-t_`Pv!BMy{?sH5qL7)89{#ii_jDcS=)awwt6=4v&Q zDUP@myz1}3?_3@~(>_-K42q+W1Vd{*B;S!l$O|ozC}czTIIN-@x@XuotKOmNT!zBa z2?w00VV`!)*fT60Y)=u#-ami@R~dnuP(6~{OpgBj60KgES?~>D{z2(QM4z)iB^4LI z4Qsgl3}gzlsa2|t&_|q zu^E20zubR#^X|tVVgC84M_MccE8QvBcd9wue)&(D2+B%$BF!PLmSe&Z+emJQtZXT2 zOyM6fLJT4%r(WO?gYJL#7bZX4ATgA0!Czavh+FDxcS*hjdD7!H?|#0y`*h!YMGy1s z5JLQrae@}()sHtHPOsnpScSmooV#J%3-PBbdn)vy7`Gki01$3+JhHQDcG~-&KK=Z| zV7ra_Jx;S9q<$Yp@~(4308Tm=gm#QIs)7s{LB{Af7-;0d%{0_!1#^R@-`(D$MBnO$ z|3xdLJqCz@@L+jW>9~g+k*5dG&YaAI`XhX-DvO8$($-aIUu^K2`n!tmM(=0K-nL_g z&Nb_lgWsgk0u^m?ihv`Os934sLc0(SSLj{*9|*MOaRW*=vJYSevRkQKxW2-P4$iDg zaaq74QgTWffDBT8ra@k!?C@WE;ieihaWLGP**}d*&;fDtv}t@k-cD2kG?&sLEYPzM zGCFvMcgOM1u~4?El_1=P;x{Do|ur?6CfUs%S&;~{3nl?ZI6$Uv*!Dan| zB>)+zQY=$0Rn&-NYK|K(byEX_0V-1i2P$rxn<=bMYmbHreaLglfo4HkZC zW{}KYb*ZyW#qMhKa=L{$HM%%KB9xjUBh(LrJd#CTS3mAv<61W%bBRXOkwlJaMDtW} zMC~MBKkB{i{mZ}fkk7@i4d4SE7ON(ot6^H;)U!Zo73cHK3@3j|LV=PG%=AK0KIU&C zjv66CmhvT?o-GW>TC5#K>%2BW$t~Z(lX?%ZEATb#Sk=s@=BjuSB&W~_$hj10S~d$~ z(z7pyit@OygoKB=oh|Uu%Ee^7DV(L`BUN36ENMSBn^DIEy$oNG{<2FfVluHvlZ-}* zBeV2WL)vB2`!HOq0+N&tG$b5LVMQC>y_4bwvT_E5OO;qPqaEPSsE&E5Z$M->n&VyMmqA!XA z5aEjtb9Hs;wpfbQxZ)E=(Cht+o!Ul<-UT);i90|&Q6`qKP!=Pek|Hq0t{SV(t{SUX zI}mLLnjIK}YWNjOS(k$Y+O48S1?yOS>7)(|6uZy%SzUF$D*`gS+Rx`z@`O4 zFou)4`mS($L`l;9zdbyzQipW{;Qz|D6_b0p8>A!HBCD zW^Ozww{>kr1ZWi^ST}S{VY!hLWnup&{h=Nes!{Eir4$hp;6BR6p*b{+Mf5+t+=cys z=mkh+QgUrIw*qJ?0w8G9TD=&fxrtwF&Mk(Nq6~A+ApG!%l}o*KOD;BYM!AvqnZ0|@ z!WQ78c3%)RHayn=OAZa;^Vt9Vh^Hf8fGkWww=Le${ifhWFX!WFDnbHIW5(L(5S(p1 z#=%`}hqzHXlkx*L_zbCMHY{}2QR0spQDl_8xB^NOPpIo8p@wN)MLt}=r3p#Q3Or9O z{W!447Zm$Bxw*IeGkBqUzuvvSzJK@r24BDh#)~I{T3y;XBZ3&}tkk*z_9@16!&5@( zw$7vJSJ`SXk2h8NNJRRxxIsXoTWeL__rum}CPm#wuzYs{l9fJ{Kd*;iymG z%F(jP3PG@Vb*yWI>XrDD)hoCo@ShPPDfCX1MEI^4M%w}nDLus_gT}0Dt5J*Yhp>lQ zDJxjWx`Ki_phgHN+MmB{20@7kB#>TFIE^+qsq-^fkz*va7TZt?BFQX@B??#H{bhdp z5y_&jZ%|ntmJ!&zlClGw^c#uJ$_i78@n2;_7dt1YuARFwrT8fysp-xnQN+8C;oXNz zBQFt=Q}4Q3A&Tn)RggTz)RRdVEMSEmqcM?w29^|dS{Fea#;cn=%Jg6~ow;fx7N#N0 z+T8CpNg$1%az2L)^O_#B@rhaD;IIN6e52Jj!gYZs1C9EIad&j zpLr|xdOWCqLupl+3HXP(TNG`{PE$kkxRh&=Q+zWlIuN?2=rRr&8B`FS_2qX68CuEJ ztK?r=s~DS4!#(lcQi9W{zkr>=;N8XmQt3$aQvV$9ACMayC|(vw=rb*(F7qHI2jm+4 z7HGz@Lp)4)kqZ#$M5f`wV>x*~OaJ`EYCsZgaS8?p{)$HUO525W6i~-0yzGucft@hV ze0p03`^J|qXyO=PCSWicSlTX^s7HkN`ycp)3ucfLd;jB+$u!{R$KP*Y0ra>WMj|Ro zMooGClRpZ#f$Wc$K*ndvS%?LHNR;%UF)7x~1SD&hQ#0G70Fegu)9KDI5f*Ma0#}Bx zdZxb|d3a#Ok#S#qH0^@(i^~Oy+;xsBWU{fp7Nu(3RaK?P%3(WvQKIDRTfq=yZ4Whn3*f0oK>(13iAM7ccyqu+XS#@y+}9-&k-up6jK=fbgEN>l|2d=?!>!hP!g@ z8Og6p)kSL~b&NUe(7s$G?YncW1uyqZ8#4&prXyaJ`$UnU_W(?vYh(n<^~##GaUash ziNZKYZ$P$&-9xY|^xA$(-}d;|zK2YL{nVO^g+y^!H^EU8!9k?1#Z&z0@#?z+{6~jc zpT0Op7qISdk`!Yi%7Mv36MFpEgJyKn(6<^c$|J{ zuc?wTMn1(raday8t@(}c=w`=oQ_aYMV6>U%IRA7l1Y%c?1K6xy!gMLB6Uw-(uSQFk zJ2L$lAWw0$w6mM4%H}ROnx8*AZ~2aef32#TR)PVT{@Wr9|MjS zv>=k2=y@okdWDV!M4+833As9+c%}E@0QTT;aqWXb2vPE^$e$hu&@n-%$FsqB7>b{e zZ)F?wK*tEu+@vB_;gjKTx8eF(^;wo22~FBEd5Jr@fAk35)KO~Ds_Z=x7Sk+_c!XV1 zwF2oO<_@%CMeVbSPZ?G)=iPi`2t;yEsWbB~S#6@wNktlk00eXr}(+hJwrl{C$yA4Jw&>MdD|Yc{1fe4aQtqx z9Iv;~i>d!MPw+WPbIj?SN&A!y(vUlo?94;)pm4@fM3u<6nE|Q4^Z?~ z=Q;&z*R^VC0ikOnS2$cBKX={9l}p1oHa?S9SJ>Wf)!tcNTih+XGPmCG6TB{1POVQ{hbc=qfT z8+hgLJTOHK!##Nh&QUmcm8{|YgQu5!4;8&*G-mHh6V|p3;bHwJMq{fXZO82o+YdKC zU%$J3cl&nx;q&&*H6jUDpOwu^&Dt!`GOa1zuse&Ogd!G>JejR0#vv1CHDGqm9VjK6 z2f@o{C3(q1@geL4piWMf>&PJN^GxJJ>*6!vo2!Am^?t&2o0#o7EZdgzm7T=@G4xj}DKpYQ( zEh0RJg?#FO1yU1AQqb(k2qs!Wpz-SOY*K<1p)vHWoom^v)pd}a>ByiyJ?edn82XMM z{Aa#D4DRStNEP0GQOjlH=gUR2@?{ju3@#+m_a{jD)`Bi78UZmXe#xQ|XmV26ZJ9TnaVtTBQ^!o|7#^z+v72il=og=`=96V4|3cTwjB1 zqaLevRYW^Ajq`?a$t=}f84uPrBcL+B+u3tF)}tPJWF;Ug>;f@Cu4utDC6%oePUdSm zX^>-gc8tD&YZ^7v%gRi`?^gG_<0#m1amn}1S>)?jGLC?);LbTB!o_TRmju%ZF6hcT z7Se0wA+qnY(Ru}QX%{!sGK!0$#wnZ$kQe9d<+**i9C#*Q8-^SNZ8qNh7;3e1Q~aq- z?jopCcZ?shjM9bk!#TtHu5h$M>bE`5ONfa>`F*1cLU?*$At^)bKn^@O0eM6zp9z=t@Gq3^Gua0*Ig0jRg ztLI@iRVbi-`q%wNujQCe$~RseiVIpT6G*8#Rci^T9qxZwz+9xOIoa27H0B2g$8D?<;484Jdxwo_scE2 zn|?xoK0?T2oV$+LSD`K+@lth$aiVlJ?WglBdVtX=Ytml8v z4|Gda4b$`Z4oY5FtdZ|qAA%aD=_*b+djIw=Cp4ot+-NX3#O{MOjm}OM&<#@m96|I( zOIpDsJ&^EtE+h7G4?&#@tEfP|@Jtil=A*^hr zYSgo#)78t-IYkdAzhl+{b5(a1UUZ;-AbK^L9Y_~N?UyJRkZ2GKa6cdd(v=Ls(v|Z9 zlJDh9s09?jzar)D!I>aB2*zj}g>X*VK>UJ*LKT^TK=se~KT=xIF$MY3ox)5Fz|15t zK-S!q(YkAj5zj=JYBHte5d+F~O+d-Co)AqSeurUxgk1a^bMfzbkKL2}e0y02blJo1 zrmjtAON#cp7qt^EDob=SS3pM*bR!z}#KQ;s`VlH@lN2xctYxHBMR$DclYyg$3SeS81Ywtu)`!Xn-?0IIvVwu8`Q46Asv1zX)N`(keoi-=B3(yl2H@kt5 z;vl0UScjIkDclPDKijf#XMA(qbPTMRqvoTUQ|NK2G+;~5N&sz*g?9l#k+Lo4`4E;q zRF>QJzUu)`6Deq@7r7pebJU&F^o+tIvJhLAr>6A}PSwqVxZ+V&)Mx2oo>Lfrq61Ph zJx3S;ruUFv?nesz`rN9UigzRA7f;qXgiOR!b*N*A3!bq<6Kzwau_4!=ZXIvuB%C6j zWFz8up_|eILQ~!uuo5JW?_nv*>0Go5E!fX~`?z_>##J~gt7f+yP}Z6qN)ss zE8T^XnFriEIN zkI;CE8oRi5Cwy-?9*IXw`7xmw|lxd1qlkQzk1V;Oy^y40+P~(k+qZ6EE;I z_G+yAj`&!%KqL*h?%CwFQQAcn(e5O%o}|4<%#bX)`;Rfff0(ZZS_d=s{( z_&)70$E2t(ut=!bI{IWIuY`7D5`|DWCUd&-><;MO=*_PTt9-+Tl`1+z9o{|ss8-6 zeqi??iN9Ew(FFK%eSiPq-4CDcZ$QxYd;7O{?{43}yS;e?W`sy5+?VlAA%K{d7GMlw z(d5N{Z&6`}!|GF#QF7mZk`{ zy_(HEXUOMv%$T~_fDRv2Q!M3Kd7=F=TE0T3q%Cp~FM5sZFo#}67bk0^wVwpA_Rz&A zelS7&7jamn*tR#(&ice;%3K7g72Dq7pPn5a96dfdeEbyNy~Cr&hd1912Zyua;In(d zt(YJrOmA-Vw4?Xijycx+t&6=JRSwYZ8IGWgEk$~D%=WSQFekM-Wq$nW?t>kF9uzci zmh9#6J4v#_udd?~T8|qWdb0D; z@sU{;FRm@s4tDjPvbGA;k@4*1DQcp!320 zKB(4hb!MLQ#?qU!fEpCA^ZRx(kBzpEZMHxsk=?j=b+q#w{rvsi?b}{1y3bGajCpX; zQ|g)fP`Lkye;@SNfads zLU98uc=T3A8KDy{RG#OG#_o-!Se=JDZ6GG!u$Z$Yf&1x*b=zeu83>q zHiD5(s_oFKQ4|X>dZC}Q$gaI4c1nvsC&_l$9k!J81(qVTk8?fO9(6A+X2K#M!p$6x#7JC48LI%c8F~~y69s6K^ zySzZ)_t6O7(bN2>?!XI(yq^ zm=3&)1<87sv^j8!i9YY2ddi%Y>3 z2M3UWGO3{S0ZT+j1rx=U3#8Z9_lu-&ric>rC6I>1YZfX;SQ(lH>c5#UnG{k3^8wR6 zWtRh`WZIf z<36SqnJB_|h4Pu!z?lA$7w+5jGR)zHIk7z<{noW7E#Rvh+2M@eB;5qldIiCa=jXVU z!O}57KNO#_==76u0^?0_475~(T3^PAQDU?T2`;-!Gz3qEun09~barku6)EDj z=j7J~mcId~l&Q7@h?y!owXHLlo>&6|0Y9P2Z6>%qOP%`+e+%?8=6rhoZl>Ojq zM~0EO&Va?DV`tzrAY$hsPsHukXM#Lhc)UUENhwvYlM)qR+7B#0S1j0Bd1-dmj5)AG zo91Gl@q~N;>KejPt6y?7n`qNiCgwc#12+gSwtjB@$O=GbGe)1@$!i@-w22s&|bh%O1D z2I@;pNgMdju%%EaK?cW}F0cz$_hi74$}-2Wmcio?KE(tpJx=yI`~+vW!uq-eq1oK1 z*E`?JO@bgolLbQlqBRHt?|g$JY}IP^?H|fu=`RFPo1Y#(W1k%n%H-bk9E^Oam(mPb zHI$S^n}&B2(;7=h@PK-*R_UUA{9%aBl?9KUbFgy7CS^S4@YmG#>zQl?VB{4oS z(6Ab&ZFItAx#LF-tMm~TJ{?z}G18YZwfQ}#)tH1=r*e+L+u=~`&hmWlM-QLZQosq! zBbjBAMf~z?Pr{nQ!6nKWSJK7^ViXVu$h6Gmxc^xFQH(@;M|(~`Z77MovRYkWEatj1 zviZsBb6;qpq>B*Idj^c-t+Ow!q=vvoujW{?QGtUp^u4@=;vg$om(&UeCDc$37);DJ z(K5tG!s}HdQP&JD*?NQsMO1iVQSVP5x6_}0x&N(~2hHowK$-8w;eev(w7$EC7(u$N zHYNqe6xmyHS*`jnSEXh{XYF=PC^v1UP3^47z3tn{wsay`Bz1P>tT%cAY=)l|Joh<# z6tuEhLh5Pm?3Bv)@wj!@^mZm*B!=nj^$+iFY;v=rx8&m;@ne%-f_BA@EzoFmef{$< z@Tk5u3Ynu8l9?nAAdCSGsjS3|l^^4`p%j3;<=DX4>g;7s#|l~U8Kkwgv^&I0nGN4Q zG@9_a!%Z--_!S!y<@&2R;_4-$j?uNa7!&EIbpu!DB)x=o2w@9Ax}h6Xxku^Tq@?f~ z)tk`pIny0R4}MDp^W#_osE)o6KXs(zp;+x>bSL49rwefq@wph|>hJ7J&;t8Q<30#* zECjq)$V3z5M8Hgt%af&|XYAOgv9%m2IkEv>ii4rtVfBz+xYF@xvZ&QTNdy}lo-+i| zS};nEMIpmVApZ_SHCA#x*hg9N{q0)WA!9H_StduY;~LKi;mNPp?E9;FffpNbyA*sXX9R zoAGH5I*Nmszeb0Y9VpiXVKz-~-0B_CXW`V_gJ!}?dt6|!! zAT)NGI8B~BG%BBV`gGHmK*(Lk-+FEbm6uP*gV8#`dOj@6Wd8U+%R!YZL?deN$IlO+ zVv&j|0MR`!OpHA10%hOf1%g&1a&oh@LBdKzq6 zy4IF(yP_07uqW~KXgLz%__wHK8|c4?6TOwRv|v++qZS)lF240G@L66;)LQsbqewr` zfdBXp$Va<>PY+ecuWk4Xzg^fXgdq_WHnYc`UHYyrN`hztD zK}KhZU=$$kqY!eoAmA*sj9w~yB~(}8nrxnkf{sIkQJhNRv^bN4#QrSDiDr!TWfkmV zH@9)!!Z-v~i&W_dbw@1r_s= z#qD7bx2?*ECxx+y<=F_C9X--GoM;5T5R+giRd7Q)!l4MOOiWUW8AZq>FEqjS*)W8I z;AW4p)`g72ahzguWh?hE3mDO6Nj~)mDq;=%4}Cv&{8gxyOORu+kOgmZg5(ATAQ=_$ zV9-hj3%-;n&8y~xaya==8s=oG0$pYmf7r)x{3IBLLQqVDI38V2&?$naF<$17?dBlP z!b7)7>Ps$}{d<3J;vwEwa({5ycJ!R8ppLSje%xxd!?+NAX_L)eQ$!?fk4OnoC5DHd zB=Xc<+H?}~z2-YT2p!O1h?s3sQJIu;La%U)^?k9LoWH`DEJP-+wLhQ@%mF4>I|EDz z(Hek@%<^zWZM{-cJgof_wu~Vv6J-@6jn!1d2?!lGkUm zCkP5Z6Hi?)W~laR6^_#ZBL3s2O(b~MYmJDeaTJGdU(jH))VP}-{T#2&qil4JbeIIr zVwKWMo5`Q2j(iR^J546xANc5W8tvXY)N3;)TjOdS$Y5Qb*@3h>CCjl^-AZfL8(vLt zkTtVNREQ{w`jL$M@1u$>`OXSl#q|O=;W@?HF;_dxg@F9-b+AO}%cYjtYYEdlHXUz| z4jw;#2HKmm=FthylI6LJ{#*)%5W5Ye$A~W?7AGa$%EF&iEr{n+$PkElLZBl~88)Ca zwc#aWNO-`rtVMm)7Ej?v?&~+l@iP##dZs`X5*Kgi@_~WnF?_st1_3qu9N04*&Ki+@%^!mQHsb->Jsb=tB{^$`3 zi2Mq{1;4|uUEa-<41rT#li-lL$k~~BxBO%uhz`(}E09qo4YUrchU;d&Da&S(##{T+% zF%NWxMHu>*Ogg7XTRr7lW4us7RU_xoqksL{$AX?c_}Ibkek^HMmpO7Z{9U(d2vQb_ z0F5w2@g7i=6v<67c_MUbdRO4e}4P!{?Bhd{rvN9CD%l=caAh0ZaMhK3>7w?LW11SHfE|ZXDP)0J42;;ew zJo%4FoaJx%R#193>#lV9Ha5yWfYj6(Bkq+Ev$tO=#l-PgS_yprk4}w|0Kt?D$$aoy zmFyx$sd+FG^;I|2mbGiaSgcU}2q|;J-etAnr10!7^^f9s(x0FU^`tGf+vVroa|{`9 zfRy|R_v(By7u9XB{U+GyYm_<9;BTkQiCgW$k0z+uQ__x%(@$U-o&sAM6YYO|PQMEff3zv^zks4+=a&Cw7GO#`uiM;u1+QJL=09Ah!V6gua4a^`9J`&O=8G_?ulc&o^5c@ z-L^GIPK=!Xi+l};O2;SX<4dOm>`M!tj5om_6qe3@kJopIdsjV?2hT?gAj`b|7C2_7& z3uc&4l=U`?+^5H%sskZ^bC8LP=&?cDZ)}4HeVA=EXV(M?nz>0ZyQ)HgZx^LGw3Uz2 zl(x~wbyuCF9L&>Bes1YkJ|)O&#_=Qy(FsRus_{xj7GDZ;Adx^Etiz}EDj=fv4k3BbB^47K68^)O5I z82ZQAs)@Au@#D??-H-dE=YNDP5tY!{ z`sasF=o0kqcAMZmo6z$a%>GmymDn7Ru4++0Z!Bdu@K11yYlM_s&1c(DsG-UVRrupxjQO4!9_Q@E|R$Copd zH_2ic2(u<2(7+-T_W#p z-Uupu#VEJp{_6UyB-GJF2RZ(1r|9k^E4CMTL?J42ete7E#a@>RPopu2hq1o3j!q4c z(BTzdASJ)JM4f3Q*XdtL8ToGr8Qke$JwTZ~lQstV$UWH z*}OA_c_-Z@b$r0FhDQWC+Yy;9{>O8HWh9q``;}p&&JpspjxZ_rA?yj@;)nrNalW_*B(T>=7RxL7PfNr4pW^W3JZxBt!U-7nu16pmjV;;au2i05EA z^VRf9d30TRMF&)9s%E-VNNK+K?)WFlW{}oiYl>q>r-Ji4^GD&)>j|(K?fQ1bWOTyu zyG%sUt;Zvqqi!WpFKb|xrgecfXN^>{8hdoSLY7%R;7<01U0+cG&B;MJ<^Bsh=H}x< zHW8AE6vT5_Vv??86QLBx|whhM{&v%XK-X=gc}6mt$l!XCFCHAj5_|w7VO3{;RY~XtOa&f_!Asu+xJn4!of|acdPBYP) z)TRrZ7cL2zq8=U(h|@RRAtp6JI7J{}%BV`UzxqdJ+iQbeJIxB7sIvN-q6oysF)|hmy~1ab!)S zF`pe1&NEf-W6$XF1OokZeS3TJ{!l&|)Su;8%xVL1Kg1a|CV}T8lzw!3{r>K)b(BN} z(%T>3z3p)c3~B>$4pxYa1zpL!#0c8y-M@Q{B!89_G3F9dWbDPs6e{`9jD=Z~O95wA z*V(W$P4Sbiwu>yqmn-t_e>XgMl26G%%4DM|q`96_fKCf9Yd}7Th=@Wbpl$-h3Lgg5 zdpT9YshD}7Qcz4AK>YwS%@)S6amrC~AemRj<5wM>q5kLz^Rt`STvT;~- zm1d4k?j{NCf+riyE;wv4euwt6kGvNBuHW`||Mbb1f7*#V2Noj_E?kx@qjU}ZbdAg=n6h4q zD|C!InH+2{D2J)+7cne_T#$zFnGQ9aq(FOm<(@ubYcIW=a5r|wn{85Gl$5igtdrb< z>4*Nzwn@T@fIz;Y=CtTmy69?(r1b;J49WA8lNy7s$5mI0Fp4n zka8lJgmxr66rroYv^&ns=<0#izgT@Q<9W}9v&d9K_plR)p_;s6kI7rm8VDZlj*|s+ z9~u4jhv0O<07F2)AAN^1KXT6@l91)4TzpY|kJaguUc83w8VzRBqPx5lNN0rTQzXuY zL>JSD9Et3MbZnD4i7j`RqJM4!x~U#+_(;R=;^it}SiUmzmsJBfhd&+GZ-tpo*DMu* zG)Gk^`V?Fr2G4M&G!77;z zy~als0g^#lJwM16i$W^%Bn7S1Dt84ET8Ul_4wByLI$lgBz;D`cEaZw`+G)ILKroji zo{|nw20bCt0TqeIFhtPFyN^uHc=_fHdq!~j`6rkzmmlt4-+cUd_hGBtWhxRWz&yEI zT5_eC7`?PCbtutzU;v|xEt0%JWmtjSfm+Qb=3CFU@S~0i`k}~Mqt55E%AwFbLq9fp z2R@G1^y5UNw#B==DESWX)OUD{su|)EYIp)=8#!*yS5m)Eu#f=M)5&XaRKVC#h}o=l z>B{lsg&d;~n9jQ=)VU9<#ff&^sEE-*CWr@g@9#!;fb_DkV`BSD&<*h-kGZ8SrPQ!s zR*$a^8GwK5YuwAmpw3X%9`s~KD_N|L0rhKbViILSZ5D17{VJV@q6wm)Puk>Md5-d! zvexbEzY_5MF9`9P$SEdLxDeg}_w$>L$|WO0L5IoDceqb2I@ny89IjpyEsju=s0T)DOXYJL(l=l zZ7en3309o_eZE@=QPr@AsCF&mk%^&=^|!v9Ms4+8E9wnFSdU((t`0KjEZuN9@ivTH zq2JsnPLft+;3TI=K3H1w)>WFNq^-HG4so}qcC&! z{44KhlfQgZq?>)^9WgWC?#<1Q*N{WL@|TwvCQ^C-NFh;dtSWKMcz+zSy_V2B5@Fa!s=|AKqp1ere8KzySr2ri-) zB9yg`NFWzL*ZL5*z(&8R`S4|70dwJ=^lvuJLG-A_*lSd5ED0K?h!&NJf#q^^u=yB} z9}9Kpc!dJf^KtSx9lg1s@>Nu{hGd$P4yB3BAb9#NKdCmzG@|JRmKRR^-Q|tiKuKO+ zT&?L3@nOBja&$6f1ix!~yi~DM5w*&t7MUkWTLsj;MC4)>&6b`mzhcmvcC%SX&*p$A z4nUNTfvYWvr@9ix7R}QW02u3VYBl8&OSfPU$&5_6gL{{XjRNs`~W}kR8g@*q6QK9pOFpT4y$bwcvWM z6q{#nnXbxLs0=oY(RN0DKK(skn=LtubC5w%WMFA>S2Qrgpe zBeb)myKMEs7c^h%MmWdx3LI{w6T&w6({THk8F9B1D}%$p2KQDsuWx=~k211U900|e z(3Lv`7OAnw!RK82!K?`MF($FW{??Pl;4EYm7RZ>=i_7sW37uO@%!lsx?rv~?hvM;f zAA-o)0X2Chaw?DtzUqq?sa5+^mqtJrfR>(VM(Yk{t+9kvRdkpOKHj{6&`c4jRJm0o z8SG26*Yan_sO|+CXF|cQ?g|t;b`NP1fuK@3nsfQ$r(Z%xt zyjIiEh+(cB!%+cCzJ&s+5I?Uzm$+0=w}QT&f=M!88;&+(tC4_Yy3R*eiw9 z1;yf#`S@|yM^*4bV2y1eg2nmguE1Kx)h62|b@`S?(*WuTWi6~>xJ#ZDl0~D8X63M` zdRp9NE2-7nryT?m-(s~vQJZsoF|HGB0|^-SQTI0(I2xeFD*_6%rJ8HH2lnf$3r!i5 z&82H{OzF`VYS(b$u3tS=yoO(*AP%@d!rww+EV72^l858~uJV5+dO5LY7IR0<^30sQ zxVzcFD_6sjxNSY8Hx?U64rTQ?OBP);gZ2Yu1UJZzCeUENrZDetTv8tFB@9VG>yXV6M#G=@P)klpr&<{X_GPIMWY7^juc-N=FiB?YF-3VH1}U@(1kz|JB@z_kc4F%C zNh;e)>Xl>WY?Y@ca1QuBmD7=|pn0-?UW}XDM+GM%2GwoT%ouyasX@Jvd5(tibrpyc zhHar|XOjW)!S{cBck})YbKyRr6G-LW@v(1vnt~36JtCj{I%ULnE!7mu8HVc5aE=o5 zOc-_tP(ZY@IhaVZfe^G=IfjwZ>a;Xz?UNlz3>b$HBI50Kw{q@=(=<;BNvhsvTGHyx9D}Hk=}TaHD}?Xk z&94aIb7~u^!Nb^N$sl%QTUO9c zcwIsR;qD+E^OMt#IvN%VZ|aS{9VfJS{-{WBLuFE)Kq<&r!renqE6-iAxxwC`k8J^D zV5`@dXl5z=N2F_|-dhgw2+f?m?V6*7CpUpEv^-lQ{Ox5jxB&S_ z+~q=*lv?M~=T{OX{-i;Z9BW7nc^LRFy4i)0kOLY6BzS=Sqpe!Iv|`@ zfpEI&deK_<#-Ni5O7^4@2wOuBULMKC#R)pjolpc*#^e`g=!GrNy1yN45#pS~b?n5Q zp_$Y!}T3sI=d!%ACdWT|=Fluo%S4eFNqIr;<#qT^bQiLGYJiHh7) zX;fHai8T?T7151CF`Oz&s~i^>F)Sk%rw(?>99qyiBc1T5DP*GzB7>tH!-%XUJSV#i zrszeTN7YFx$2nikVrdFDX43l1lLuQbSOaR)qg(isArfdM366;3{%glHXBm8C0P0=g z@tqtaN^-Q`zPOwNc`jI}1I-M6VOysD(GTowThNQVC@KV0pK+K&k=kHTtJoK8pp~H7 ztFALM7`fAV$qD16JDEHKvEkeDn16D@!eS6J;9M< zfYQd3iIWt&(CRbvUUjNbNay7oS@((lBDY)qCdR`XCa4k~DUIHa?ucG{2y?wy4Fl`Z zAN0F}KRrHM*?)N_D)@9%Aav|~vfY%Evqi8*F;}uq5^K<}P=Siw>b!g~Emvv`S2h`;(m392zWDCN$NP$DKg zmvby5C8gVgg@a&b@ig~oGosN%jzh)N|%Z`npGqQ6M+F2!&F zf9Gf&w7oW(G{{*t(Gr?rLL`1g)>JH71?r4M?DnvqO6u$U9dQUzw*N;C0hzhnvTuP0 zy4!>9fQNqbkTU>s1g$er6)MYh7}ipFQ648s>t} zKafQK4k&)ZZ6<33*H|MdW4iKRh+X28=W#o!DfvbfN#JxQ(NoBb7NOdzFkBs7#+jK^ zOH$Pxykq{idYW#+Q>U)1`j2f#9E0MmMmPRt*@scwO8$M7-=aWGPJ@49Jcfs&7J0cO z42BZOPl@MC?^^RNu&i~d&b37n#;m0TNe^IgChD+-bw&>>Wat*yj}fCraf&wE5Uq#@ zA#((IWeeqDG00#g@sd^oaR{);)E)LXS3)1S$G}}mZtsyDnD}#sW_TXiXwNQDKI(hO zCwSsyW3QxN`IB=lW|ofqkmk?C0(c@^xSzpy%&?$XQ1?_{(xxw;+_e&%%ls6^_(o`Y?$L_o(9HITWnVEO@Xk!{7gck10$K{Pin z22^X>{OhCAgz6`W&%i?O$>YSv33AD4oIo?9Uillj#UNSKZm~pGK|+okZ_wTX>H&;? z!KRzjzs&&JK&(6@#ja}7xf8gFj4X1bXXZ$G9PgBHT zMD3i$pdAN=9t507D7wJm;RMq$84~o1I_?F7zRgv(Ld767wPTfO zE{-|oQCr+E=(rzpi9@A~*LSxc@1;BfrLq-E3S=B82YCF`&Fg>6-=HH3vbT}79ah{? zE>uEKd!aSgQB%t$XbC3KGjbCs$2QOdIGDfeTt*sL?MsHqs|?@;%wcE-KzslSzTj`v zH?)y#;_6{v`076Xz|4kPHeGp3hM<=jgA;qbnuD3*KNhx{uC#h44m{Wv53k`7GSNGw zloaK%)eeS4F|568W&S9_T4$(I(-@)@3^U=V*v=)w5Ni5?H-pd#_C=6(Go8Lvs;-{j zgz6{r#S+_q6AtZe16)(q)87AY6%zSNgmZ5kNO z7N>%~_FGGgLMx;}G;{UJiEe`Y7=yDtY>#PAkWj$|LqGLaC>LL@z{=rBTC4@VNZ&)` zi{cA&z$J7+R%b{B8)60nhRZb1WH7TJY-JOK`~fXxB}|u&my;a+ctrAGl&K;;VTn4R z!QDxNGOB}y)z^SOD9N^Pam>fd4>uoQU%y9Rmm>61jRho$zVhr|Ua%D1bi$7D%yn9A zE|-*$rzjZh3eAwcDOu`Yr=Pfo?<|f~*uOoCA!+*M64HEYJ|oDp=j#hoDLA9A1^I@j zH*XRBk9rnwAi2~UqNf~_^56|q!*)?35^LPX+z*PAXxOuGd#))6IKG@I#JG#`Ba}ev z2H+={JB)&=uQVUu1c_nTlR?6MUy)fDe(;OB!Yqj^Y^C3~v$$+jNRO9*wE`aI#re+c zJ%Th@hX$kor4IDTwED5^0SFIJgZ&BX%)UI9GW*O>a>auu;yrMkX+WKcsJR@YC?&Jl zZdNxx-`(F_UH{|e(=Q4o$RO~%2-LEX&aecelfcCPu*wOd4`^gqs|8!bvNb+GKq;R! zHrMU5KyVi1Y>dL)+^X5xoMJ^g_04q2P!sLtD_FL9(q|A{cTmD6$b{$YVQuQ&;_U&d z4<`C^m)Pnltu?v5NrhI?phGIe39n#fjZL6o@)pI1A#I){kFGje@5EuMjp8v2LkTyP zy9UGoR5aFv7pY}D4@{aQk&L9cfTp&-TrL^>Iw{JSBfF>ujVuZIiH1B_CDB+@%B9ml zu2d_2D;&&Dc(RKaM?>zXf)aY}i>gQU93B?>Z&{!}{4E$y9oub9j!PwyP`fOFw1vpm z<~Jc8`I1zbRz}vX4)5E78KyKuj1-hYwU$SX?*v+oDsw2sp%Ye(&_vE%+AThJKp_=a zNFM{ZyF>bLuwYnv&Zf`%{Es3S?GG>lV^6Fm4iKsZo&Mdqz|I+8p7I2r;XyR)qypL9FEH4P=P>UC zkC#Q|qyG<7zMOE0s;P7;iiqr*kh-8Kkil$b%PE;Sm_{!C=Vvv{(Tq6dkG%lJ9YF1* z8_n>sXuCS3#L;UHX%Td!V24w^V1z)T_~)(&g8v3=?k)n}KlFpzME^d@OLdkF??2(G z^i+C$-9A52)WH4#H6Zu8SfFel$|BoMDiG^|*ijH~UP5};CE&a@w?c=cIGwgO(DG+( z(+CCK^fQf(@bVD9UQRDi~A5gxo zsh2lD7Zt^PEn)!+D9>N2ae;P8Y=w(>JrwyNy0RF(3n57O+Xd2r(855jLYOm3wWyxs z#oaCPrPHD{U}y}RHC6S=a0*NfHqeejI+BoN#pgKXZ#%@Z7EIJ7rAAnsCK~c|$J*%G zNm%phO8HWUIw!z_9U?>0n@-kHUwc7-hUCO!dU^vQkG9`|2UgW%P_C zFYfQZx%-4tGmmzZBu8aLEDJ=}7+u_c-5oPXigciXShM+w4sG+SwNKx-CeYh&9`*ho zW22w=CKL&v5fmRq&(9XvO$#Oo8KY+YLqXcq9zwPjyqcm1zRoqqscDrdm!otK&7^KS zC(oqiD_4dc>kE$RRRBS2}S)5K9arxFZFrP@uDQImZ zTV$$)Rt!mkNdz{G1T#QTx_?HRrbCT-U=|?ap7j|BzAB_7W)#?7(~k%%MT*&g*>G~A z+IYQvCbU?@2IFS(U%nDLCaJIwT0P)H9xCj^8Ndkf4cq;OOS0INJ&38JI4Q8h+ZR$` zLH;_OhCF+y`(cO6>#uUbneGak_~jX0LfN|?FmU&zZ1AJbm@Iyb_M`BmdR*(4gR%l? z%ZzZ$zDPJaW?-eXyCiAB_Fla_PI&{IFc|va@#Xsao*@WzUtVh8j9*(eQPs-`9%727 zTUEN^a_vec;&E!h%{=XSNisxJIgZ}&4AatJBh8SDrtiD0yav<{xZesUz~gD<$%^lp z59sZ6NYs}Ch6y|$p|tv7d7%+H>86qRUI~<+l2qm7+X>fY1wBv!l?8PFc z&$>A!Zb)$wDuv`@qCF=sLp4jN+ZKr)`6-5=;)0`&sibjxEpTf zGFcLYs=8EOE`{IT=IKVC3rMn}ikP3bt)FS!5H40NwrH1rGU^Z$QV5JGuRMvcO!p6w zAqu}R=*b>o^?hL^I&Sx)i|{#S~bj`BEGBmw@?ob6_rpAu0eB*MemrZ zo4GlbIObwTVcN3B7KjR}TV5ATfU?WcVx{+W5?ivm;tV~A)Ev|YS}S8DN__>2$0Q9j zkR!Wcr`O70x|K9pm*rNUZkKoeMD4e`f8JJVu8DdPoY$GvHEs2+#zqiQax%9Ib(B&{ zG)rJ4$g2i?&?zd#2_A%R1y!*Q%gyuY_tA0&(yFKk%h4IH z7E66>9Q$zhi_-ukc%5G;tG&0Mq!^mwSOppOcyMYMor9W|U|QTnpazCdF}9=u(sbe{ z6HPA`)J(&^(zb@Jb$1Yi)q+SdAOY)xWSRcsn$WZO5Te9+=CT{VN5s|o?$d|YH!1EaFMcgHr3Ui25)dXYviJgX2eXh*<9F-sSUsfGRBOKTcihF;6is*|o zm!=iz=c@r^9?d*Ry+te=5X^;HCkigDUv$D{jzGc;3|z?tE94!m;gPF_UolH?-m2{tajhi@8L~IDnk~ z4dzm6ZPb8z;zgkL_+i{ri8M^))ynZW*XTUhteVc@jtM#kFxX7Tb69L4rJXQ#@Co%v zY`r(P08yl1;Fr5XC#(mCy#{R%@G9A>@!bmLMd>UWgadZ^h;~*&t;KV!%*Md-*)D$Q z{oyip&XBN$e3_+YGYWA}xJ1kh?8OT`0*>Jo;9c@U4bW0A*5mov*$73qDTs5`1I01< zKJ6@Aa)aUK6ioDVafVinr}G*6T&)*pmvoG1v%fH>m@l?6MkZTiv1Ry%0p(Ddu4X&E zBKUNH6>^z^k$RYc-G<2GK}&WPS7%tuGh+t!x1BdE=*0rZLcP+GDDS~&zBwk-~gh){rpZ zz0%@KYm9MZrFbgRD1AD?N(_zd9v!=C6|Zos(5tA1TS0idjif3L1&O9tQ-y+qsfRK#vOA-S#~0B2NXLE0|0D= zh-_wfvx1uyHTZnBg_K#&eOhv;gp1=OArEL3Oi~3n<8x7;=0M&bRxD&W5;SyHb2-SV zChEfyfB%TYWWAVe*o#SSt-X&(H%8FX9}Yw9iK&&;*Iejo_MCoXqBD z@b4sL-2%6}Ao|$#)$)8^!o?JdrBCew(3Xn*8ILa!gyD%F%==iPiN)!2y#h33C^k;8 z`)VP8AEDJIRZ8#z z@FlEqsgLR~rT4G#AZwt?q+e85gafnSS&T>JL-E>%-Bs+WQHQe3R$8vecP;VBtI9QJ z;8ld3O~J5NZruqFzMIXIR^VFvB?tFni-PJn5;1cQt{EonIC=AAtSMRv?=tCjK=+WT z0vl7#xUkD&`+#JFgX9*ud_j|3p=-?1)D`KUB}>jeB@u$m1NmWU#1riinn&O7$@PT3Z zc(Firb{Q|~<)?(GrQjE!d`qH*9ySBX<4EarERD8qBNm=z@Q6!^BWF!Tq zHJ2W0UB@3d5FHbY#4AjfT5K|Wyo1bC}D6>JN}|KVe}t86s^PAXN# z#lhw<`)XjZ9Gvu^e!TQUgWr{-ND7;59(0xmnMqEPtP|X8ke*E>G6lGq z3S^@;NoJ|>-6s@UY15$i!!}em(C~uj0OGN6q0z91L{p5(+@)Ay7$}8)?m)!|iiMZF zOw(6n_0~okT>+!O30gLl;091H!%d`@6yDP&8LL2=%qXgTW0KM-DHJ&0u zhhe=;JgbPLs-><5u>AvH1w9am-~n8a8CXDRxgnd>fwV-dJnnQeM{(&eJQ&Zw88TWD z(bt>jCBNqxi$kEr58`L|AD7NQCyP_6K8}K4JPam7TAV@stxc#tRwtt5(Yl8%3}_Fe z8!$Y8JT!6XBJXMoE1+SLyRqHvm9BJ0?|r4h>&%|!9~l)OAksWlzkb3K2kPy4*3~TW zeDb)}DY1-Il8e%C9Jj6DQVN+*Ct3~qpa&-Epv}h?AdjNR5WVvGHGrFCjB2`E&)J%3 z%g_PmP9mI*syaqH8-rS#pNI8A^zTE74kzdFLb-(o={_)Fw@0))yuqZCoF-8f2 z?x6~|;SmL@T#D%PXNgQkwjeQ{ChKzPK7}Uop6PIoK$mR*O_OtBwtB@b&sBx~8s=ZdiaaEc6kKrb-rwE6wf}s& zbxRO4u4PQ1p390u2MAGQu_AO&&c&j5wupH^+H8l0r}nGsx_6gkL3A04RNw#n%ZHn{ zFbFcZl<^Mk{(a~-50!Bd3rkhdtx#)rgdOy~t2V4=lv$Q%K)2=bvlNX{%jf`5%jU;3 zZ4U-Z{*#?I=_2`O2&2f6{Wm)%q$G}VyT%<-nETENPrvjC1jJjE!{!wv0{n*wLZkxW zS_q}Zk|c_Bt9T)(lraRDK44I3LV-)hsbO;LRc$mtfv;KY5Z1^2LksLyajIQ6Zv#aO z7`);JOXP|9nukirjCf(O&%z#0C$wSWKv?ic`ARQu$x2Md2_z<)-Roxcj; zCc@JEStY*ZlIeR5fDYh%k>Zz4Ie;2p_#PRY>96eoV_q(>w^C}vfstS;jvSm<2fK1J+ zNs1H1H`iV#;47#n#d*GS3uX=?Xp8WFj`coIZv|4bYKhdkr4j? zWY<<2Y(U2*2&9Iq6!UXh9IShStiv$VAw4VPYpq zhe>&TOwEM3(i!xgr8c^rsFkrSnJaD_qB*P{7L9{(9nz|$C-E=8kD0J|=1rw zlO4sq+B}JF_03(npr2^j6-g-IcYj&0P$z(KH4Xu`TjctD0;ks$@*!HFPEuXMRQ#}W zj-wxTIO-+swd|hI7EgwWzPll&h4Djfp9SN&M-V)rX)q~}78=!wLdrzK26C$pc5Gn_ zhWT7+DS^uRWu44Rgd;N;u5;9QEx1xnlEQmI%QO{)H`8}QDn&yUNG9k;&P>~`!R&GC zZx`df+-fP(49p;w6Kiim_k{K)H1o4sn{Z&80CZ(06#t)ig|p=V(GIlkkn2wF+Gnpk ziN$v(q8un%Ha9D`y^$!f#Q6&U+aMG(UWkrKMzeyA=hMj?xldt4rZ*cFb#f#+N6hLD z{31x72SEo!1nET=Fdz)nF*08PTdai73B)tVnK)f1`yU?lzWMj}-}LYY;QW#ql20!Y zY%pHH$~(>ogK{$t;Hkv7;=DYZFbgAs=++c6&bhH> zCc9do-e`!}BbXj9REI(`3(|(QTvdiw#M(Ag4}rkQLoyt|V7s`aa}NBSZq)H~cbYPO zfuMXHX@x4FF7d?#ii9Io#ElBBC;FnpdC-_205*}@3|!aN)d@pLzr=p>v6K*$GGl%n zWKG^1h0!@q6_mmQP_H2Jb187?q4@BmMyAG;zLwL0rsRP8qG9`Dk7iPC3;uoR^ z8QB={(yOivjw7R7ff$e;J*gqNluKSh!Jqyho>d06PmkMQb*R_em(bEW6`K=t=W*`5~cItV_~Ud6Xq7jtL-fXR}v+UH>$?8Yg)+^Lkb5V1V=@X znu)jE3EUbE>2Mnx&^2RX#d6?ndJ*Se#_kJL-)9OSwZEtVrbrV0d&&NBiGV^t?8OUzKRNiT)=EyYNQ>LR zEbIYK8%prbp7M?w)iP|=iMcjB0BT{jpWpPs$h)A=(e1vEh zBzi=fwMV0=+X2@Qc7ZXx0L7FiCI=A(qo`)Ky!r6%m!Iahuk}ihq+)FSv&}=H_0M8t zJ%eUdkV`(NUVRzRYkXdXb@Ni6++u#&%)IL`h;@=hk>=>5R;lo-RVlOvwJysAtU?*^ zjtS1PS}wlz)rfVO(e^r69}KN!M??|0Lxo^ECofJ!z7s!dmV9b1T1`T}wjA~-)J^|= zqjthB`hh$K;q_*M@EW)cZpcSZrMtdER_2&Q1R^{et|Ztqa^IudW8`ak?XLEOoS}`p#~xm zLc((zO}rWpqQ*RjckuD!XFXPQA!7Zl+s4@h8KYT(8c)!uD_GGiwegqh*Z)9#K^1qv zYIZh`4dlv*1DLe8!-l_OMkd&@(O8^M%k;}`a5P@!TZhyl zfFzPZmsT+bsQCF^nId}DRP58MI#6$_b&fsU;e-UPfUe9~$Y$Fc66vsnkcUBa3);ls zj4m*KWxezs`pPp>a#jUCnO-1i2VnzOqnFCu;UNF^hg-?Kmg|lWjvzblIL|Qj8Aqhw zFv%Rrzgll#6IzIX#}Kbhy>xAeDVA5ttqB{1FHKkTW??*?K8%SpZCNnKkOq4B9^mKB?x4$AIj#UlBv`wVhn)sK~^oa;sw?9 zw{kDF%W1P%p>EVFwB7p_f`V!tf=BvYG17c0d?wFKc<6*!!PdsBbls$Xu=6eeeeG?I z5mrY=-hLNAzWOGpNxS1FPrm*pPj}uV1qXh4RgQNqEg)a{IarGRj#m-r>u)pIeH(x( zLY3`juG0k?=9aS}=2)CdZK_t@w@xO`MD#;M(`o~x=^(bOrBAxGD^$39!VWFYOd~ED z?bhY0X|hX*(5f|03c3R6lWc)#ckDc4-u;}G3ix^WTN6V#iH@#ZQ}pstI+iH~;8FO^ zf2RBUk8lu-;xtRDMYWBqsNPoR3$s9^3kfGBQVe2qGgxey8pbeKtPN-17`;)jthx!3 ze9c55)0>tjBV|K2#>iAgs}tCZ5ogAV)`&NgK#G@s0>z=bFk~CJ2gA!`GM#NtQ8|SS zfZ>=IOf!@f7FWzTBu;CL-s9THIK%wFE6|J-IE1_T#>USV)dbwUw zityCG39AqSA^0v(oPe$tF$=^feNIGt%O!TRIh_>+@LMMZ@wZ)*!4JQB=KL#X!WaNK z3?&J0{#ERRVg1nOjH#J=N*rJ`ola#^OM68??Sx}5UgUN-Pl6ESfsGP~<6h~d_fv5 z-@{rYanFF(Xr3aEVvq**_v;F9=&1$q1!@_8LQwKKW{m)EkgZy$zQ&5N(|eT|IL|@} z13Ju_Wr2|JH+e*)Cr~xwBcIudD^?3u>w&3?9=bK44niFfxhM8*wgqbx{Y=tsNhPAh zdvJJoba40#lJBrT?B9IXKcc`3xpTIjfWBvH-IDmaCz$0I*-gk=U45Rto85_epg9c8 zy?G4xPdX3`R~Bqy5BNPgP*dzD_By!-XtM|5-O1rUgV6b_IH^(5H4zxnx>KB=E$ZMWw$xIsb8ICbPS zDLG0dq!DnOPUZ;hZRV?R#K8XOyF`f4IZ8|)k0-K8l}n2@lU-Q>UaHoHl-yMOxpw}!BE*Y?53JXQ8wp7Z|JyJ_0)l5(Rh<{aHae9Jp zMWhg~&CeluVs-QS23?UPt0<}%3M0+2O>s-866~}tb0vikpOsPxj85fN*HC)l_f3^e zo5=%dyy&)~M(`C!f=7Ii453aG(K%8>M0q<&5_HcU-9rG_!=e>miq^DvR%nhV^<)e= zbKcAq*{W3CIYsZ2Nbk%3Q>f#N07=~5CE1P%yFX+{>^b8lurB+wuZKuej(VhNpG^SKC-{pa{fJ!xer&)mxO!Sw4FZ^nTdSfxt)Y+kJtarjoy*KXG_3>Oz5|I!hLb=aVU~7nf5NQU#6hw6N>HhA+ z&HKA+nn?3F2n4g>u{n#;q%DIyuEL~rqJqSY!xX-Vd&XW1og!=k`g`$Cr((`^m2P>L?KBycjT~g#845$anx;H`*7h=1$%Ejfg>Mtv1v!_qN16x28( zHnNz`I)vR$I3CFbWtXxtwN3z;_9xYnGSbGl&6H6dzSFEfVd;Vh(5ZV@2N&@CuvfE5po6{jmb zBFT&05x*uX23THI63~`pX$x9Fm>tdP>-qTvw)XXJA2;t_{{v1Np_*urI+x8A_+Ut)usL0gQj^PrYhD+Dr84<&F>G|0E zxi?)tL$$*$8u7(~ADg-oRYktLIRco*=)w+s%FgnUu6Z$Y+|%C)DbBGXVc&b@Q~;wY zkc0!q9Kn)q&9fnu!s)~1xBngcdk_~{1Vr_!RhEfsFDaXg@4x6%0K_k}(j>YxgTO?Q z?skA|X74CNe52JT+J3U_=Kt;Wk3K2J&LjW?M|InO2M8^q?Eo~2c_~ESU3RYS3431S z(3pwk>#^pcGZ!PAl>b-Exe5A!u6@Nd3qcV^tqgG@vFe0pCX8~_J9)6doKHx_+@QD( za-Ew6tF+|)3m8K>td9nfPN`&wfa zfn43ZzrK5;uTIyHWq_?ODC>5g(I&{{S?l7LtQ2_}Vt_`&X5kCMC!wPG7CvYhr-K@>!0{vR{A%bmJhL{;|xXC zIpJctdo@~MzAmNQ7ooy|no%aJnH>APC8eQOh>j@*xsv>twY>(Qsiditi&13;q0=rU z`i8bJO&7)~3F-W9?A_iYC+V4R&iT>w%})=Fu_M8 zVEai53I~U%w8bLGIpm}erJPlQw7O5b%J;EZZjw5#9E?(#neC=L(u3kNdQVY{y#XqK z3VC-nG}P8=SipTb4B5L9AbkPfA%eACAB@&o8Kk)$Z*jEcc#4)cKzkL@ph*}&UF`u! zvJ&6OpZYZ=z7Hd_GB;qENN|DLa$foJp_`I#*6g@Ao2mddGe4FzpWGlQVf0Uk-~HzJ zpM%Tkx2y0hRe;>b?hdZ0#+bCKL>+tO?1j@ubX~ z&;pSj1-)>DeP{m`Up>b4RGpE<2@X(c7#s#DQ?>F0-`go%Gn5j7j8xgE14*Vp)K8Ce zTQ0j0y68KoLWoDB0v$Vr6p0PGtDIei8!1m5IWL;75JAa6T?6#d7Gn>_L7q_tW`Al3Fd87d@)0GWFhDdzh7VZgs-G6qCVvW9L4!-zgNeq- z=ykgS>N#oi<4F=zVcM6Iw?CiXzai05gT;I%Ll|{;MF#nnqVC29_2VfP_3gQgFNS?i zGAhN;@i~jJDV1e*w)^$Ts1thS6<+{>CRk_;-dMZF?bn)HeEVu+@$Fn?#<=@BgQUZ1 z$WoBv72(R&4i%7I-o#7V87OYln&y73{V;*%YzsN!+cYrZ2-pcF92mGaBP$}RldQU; z&4~(LC5YaLn}Z!wriz$HTol~EcL9EK^|Dusj|VhE^}w`T%Z=rcB4$JXi{-*kglnh8 z6s=f->VeYmBlrxji`UROzdVwPY=LLZcrk5YSx?WpZA;P~5UAg%x|*sv!0|ALy~(51 zsKVu8Tbb(@=QLY;>npzb(uceq7B+@&bsTEK7Gp>cj{Eq@wIIsV!Ss>@SN@r-kzQO4 z-vn}i<>u*0Elz+7F`^bHV5?k8ato%LkBiMgSNhH*_M%Zxxq>vY-$rF0h-;zD#{%hM zMFFIY<$4BDvX+-!oJw4EC!zD;gQUonO7SNsnX;8xH01ljSHWoyh5|d2^%9T^g9fLt*%?*1y(tU8#hWhcIwkhLSL;1k zStfXE>{FbE2GX)*6JSExK{JU_AU3p9=HuWT-L12REnx`)GW&7BDSAcef-g{#3!N^}w1$^do2+%#!4C5s zgek%tUU|7%4Pxc-)dyRZ+CI?vg?zj-^iknUK)^H45NRAOrBea0hm+VwZX(j7guur>+}1p$Udib>+NGF^b7@to5U9jB>FM>^ zhoE%#PY4(vMcaj5{3l1}5l6q9mVm6+YPZO!vULNtgv>U~;0- zY%5lZV2A0)AGxlhW*B{SP#XcM5@K+jMoYF-HM|uGoVMd+nIasy@+}FYe^Lw6i^*P# zADZ92?%F;*N*kDac6!qGcP2$KpMW|o`>z(Y!7Ck>>)G;%T@Ro)Tj$mI8xeGtLPIW& zfPBZ4U>0f%jUZ{t#L!MYJ#3OqnT;9ein4)6V|6!$kf)6Z!qErod$k1V#R>(@OVq%1 zTf{eGjpoo*c!_mk#PfKwC$wWe6Dp{oSAp!vY=NHS2%beJ0}Lo+oJ1Ws~V7Aw$!PiAEHDbxG9H6r8B|S0Gs4*0M`Y$ zt@Ys|(tZ8`2LI8&dZ9A2E1KgH^tZ%xlUpNJ54_jdjbDpZa{PA9d?M4`H3NfDiZV2M zuns8ZAf{&i_eS4pu%4OU^2&Ypl~+FXgU8Qf0bFQV?zrU1y8*S{YT)ZAW-# zg+6K9-;SAz)!v|xmfqOEk3e}x|5m$cf<_nt>}&O1(9TO5N#fv?3!WTFK$3q#H1rD| z1X(43qNmOdr0d`k@og1)Hvx_wXQ8yRM+x0?cs~IWulr`p-S0>nJYy!q=Pz;gyV{#sj7ClS#m`jLY zb818xtPtp`YKmAV_R!Rkr`V;XaLEqo0xkFG0Cn#0GdS_Pq`4{DgrjbK(@kdD_j+n} z0*|#(Mp)?ThUv#hhetC=Mi!BAsD4i5mLWp&gTc_e-dTV@p^7o7Eo}0vOIiiS7{KPq zEKD8VOkz~ZWWTdE5k$()qSizWukNP;D{)R~+BS~hj6T<>902TGEwn~R;kAC&xSDMY zZRaZ%8Cs1Vo1z)^iYfl0>`?YxG;pmN&zDuBW{xM}_UR?-pxv@EEV20~GuZ)6 z<;ie88g4r6iM7}EUfrWKsvg$%$-Z{6vuutt*`IpwA?d9TU>=2NqbGM(GJJ_z|FoC& z(Ri>*#SJ#JJ_hMl71O6-WOsSJpv%twh10G;B)RfxdKpEX zHMf}~ae+}FZdZxw&Rb{J)IX0%?9b%s3OmjA=W!OS8~%QfQ&l|-v;~1MhycU~@gKwi zf>}Zvnj(?<^!43LAv_coY-zfqI%j5#smIK(eSd`y_G{$GAb5#`iAO6pp$<2!3)*g{ zj2Y6qd8!+8P#Ft*P=n%!md4ytub~-6Q&zHTQe;{`qGSuG8^9sJ_G)yH2^dX`kjTv) zh>eI!QXJrUklshZgaiQzC16!|C>3Yp#8ussPVs)Dp!T79DN=rPp`~w~)k{X5>%w-` z9TKJeL~NsZ0_g+0Mq0@~e}nYa2SE%nooV2DhwiI+!fX1JiQWSiDJ=OmDWeCIFp&%X zA@6uRSprfBJ88@4nnP(F!L&JI?oWL&|VaF*j8O1`qXj3GNp&pc(JsXeNhzH5) z1{h&To^Ye*#(kffoMYVgX%EScN8Q~sPh#m?(Qj8#jIL!4=&osW=+fV7ZM4vG<*yvpA@k0A>Uf>&GKoPfl znw=NTxEu4)vjawE{TTIJQ3vMA-a-zit>JQhaal+NWlT1!T^KSI^*f>l%D`+neukO& z!O5_w(t!}qs3w_+0O6)+e6DO-3Lg-`bWdCY`3CM#V~W~%;uoizy6PzVD<1!7Zdd2+ zX}%9`Z@L5tiJjX{(J@^%T3nC`|=?9cZcFiRfhEUZ7$g5U;A&y_U!s!#K=-v_T zs&b-!`HsR8#L#dlnSY5I?p{9s8RZ*I0TZ=VzjHt(Z!#-U!&N@T4(z_=v>0D@^jjG*; zZH$QKFH|~6Y6IDCa4hAmhCb0M4lBf=7v{xU38O#!0imxaT6upnf*?&v0Rhvnmff(?NXAA9 z5g;D~8*8BZAH9><$WweFU2Ct1UTqFvzZ>h(K2!L*GWN5++b(HK@~yfpmG%*Mla*L* zd*y|u&rYvkxInRCi`UuRef#kXVu7EGfBW>=)1zm|i9I+zn(U7cpQ1qC-m&F|^Hf4u zmtBTBj!J4#9?`k&!>}pLUhkEPcelax<+{W^It9oOZTTsTswLTYq^p|i=bBJ%>uwtZ zMy#%IO<#8dg<42?*GdO<&`wS=lSv(}7lFGAh0RMVQfD`rhYiAq(<{7|JM_q384>_# zs3Zq?T!6eKazscEr$w^wlUA^v-vC&`8NQfot#4q`J<_o=%% zvd$-{uM2Hy+rpK5FhdDc83Wp|p4ZVHDtf`bIvLm(JReko)Pts$#6Op>Sc7o62B)@$ zKTUl)(B0%dMz~S;JB%2SgbAq6VAe7aYdW=DW&NpFV#GFk$dH8UfAo9lKw9x|o&gj6 z>y%!I4M>?=)nJ$F;G0XgX47sb>dk_5?!(Y@4l$^6?W9Dbra^2Yf7_-=k;4zGCppk; zH5ET>M)WJ)Z7_i)1h29{SbiobeWrUeL5IEMB0fJzZ)c|NWDVV z((KcxkDsQ|(ruGzR+ps3Npw2JXeXSXBA;eDi(S z1rec4iP5A#b16Zvxu9A+rXY>ggF-+VWda%}mC<=;V{ zS9qVQg|-q;1JXnJ29@$33Vr#znI9aQOjz{h_L-763rr6s3R@`>bfZ}{vP1_|r{fn9 zCNTD9t!jUWg9AA{ce&ATDGHyWR3q9qAU&3N!VfkqL0o*LpX{jAJvXSb){9k2LJz=t zYCX?*w{)N(Y|)jLaW4p0#iMOgq&d0Gz2CXJ0Q3S0uWHU{Dd(WT1W_bO*1NEVCE0r9 zHPsY`z?{0QF1RJu-K^FvP6&#v0c|@t?o?`IaKP#soO6m2rQvl%1c!a@07S0^VG*%y zSJo_77;eFc$4<#lPi~$g*bEuBIMR^rDYCAwv_M`bdg8Gl6iu`k;IkJwl9d-aUW79F zrr$6iL$s=r3-KTpA_VSJFc1#Ph)seBaiVX8-)?(v6cYF^0$Dw@DtIhoJHxwSM?*fs zgB)|{nl3pU%c+-!8ZOcHz>cQGZ+q?HpUlGK5EvUO<0WXq`PCeCAo$VAp28r;+z7W* zS6BBihEWDVmP8^`fPjvZLJ|Gj^<0T7tO*$*U5gi}_KhG}udf~{yY128<~%-;s2Bkv zed^spc1nR!gijE`;d@1PlO<|@>0Wyv^gq(Wm}kB2Qv7ICG;zM+&VApgmS>B3e)CkrNU;uV9RJkhN0aZgcXS-JowDj z!~fPhFF$^Idv*We`-dOOiE=sBzG^ZgzSE?^GNz6Rao8rZbpQ}4gC@!xc7jb0flLaQ zjZBj$xxR*I807ATF{4Q`92(z&*>`gdPb%v3xbQkgApqj4W%%rmzaBA;z}a`(5v!9F zGdM@6Cq~xU0|b&e#d&0-qD;mQZ-0FA>8tIx$9^r*Q<6kb&#v)c8gy^Pgf3m$9^#jr z9?@vsNld6F9h99YxXac#cu6cr5S_w5ePL_Rw52c&7Ic7P38plvS2`cl>A7iGag_uy zF$R8?jQ2c4_(j^WS$_f5>~BIZ$zys)kthp5nK+*`%kISMw1u5Foi&iW%gxFA??0~Y z-`{`tfD%#Yv2zI98;7qh7}Ey_F74YG_Ej*KB}+?v{PN)e`m-&L4>Q75jdL*j`}+q7 zZgVC*?fmiETV$pv^;H}xU5gmdh0fUDV;w$_IHO`@YXK4_#X;HMSbOSVS~k54)h!Yb zD5n~ItEanE=f~n+-;@F=&i`c4F@PQeMuV*Yvqs_Gp`Jjk)0vdYt=chLJcszRWqcnv zVwgEa`qC7kZCd$yf`zq1FswE7CKSKkQYWYnbV^k#iV5W`wESlF@@jqx2I##&Q?x>n zX!DV6;I`th#$eZ2bSBHITu~p^wAd{L&Rjn&TD@QU$>aInmZaW;IgWD6xdTrn8yJnn zNqzfq^j|>N`Ryp`bdDZ={OQyE_rGH(r4iLsrP19I#+uy!`|x42=>Dl_>feWvD4(NTe_x zflVMmb%v2AR2QZK?aY};5^O($2u!%w(d~rD!IMnMn;{Neu;C$=uWG2u7%vLeu{i^D zA5OGMk%lQ*1|5VaWfM8@Z5ZrWRTzP@*4DR`61j=ong*uLJXsk9-+h(hdOjwmQm)jT2=McMS>>(2G^>c!bAIcj16h+*lt{z~f`mdi;m zL&o%9%sEKjS@}SJFE6OgpPl_~^#A?!hj;JqO*AAkB^J``-!<;HFhep>6Ev-8OjVCp zk=`FY2A|*Vi#t(_mQ@)dOP3~#Wo5YD1f*8D7-CV9n>vAeI!W+2)+0w}nJ`Tu`9ToA zeER%g3fSi0?y+QtgPQ9Q4Lm$`DP1xLgP6mouin4;`QB={tp4`lyB|J%{P6BS-$+h| z6>0k{nAaP-l?Tv8dVtUd8k}-K6j^U|*Reg(BaA!c?ZKi8N;hA$!@N<_Ayd{N3Bam8 zfD>3<4>zKsB$?_r*}~!o(+0nKeKWmW-rn582oKFdcKObjWX>HXY|^|9*MN0jCH!K4a?#R-#jrf_(#?f~CAiShj5-6%ZB6UuGi%+fPa{`#b@%Q9 z*2tpp9vxHReR2Qc?Z;0WFD+-AuBzrjzvHdKHIcakZTCKx+91lv*sJg6`StR>tsWBx z*nv7X#7Bm~u9qvZLjPO1q?1NsfaD5L!yY}L9F)O&Afg4P*HDCu?QK*!Q3v9bi$9~o zUZsvkZU!+h>9aFTD?D3 zVoa3g<(t3UfB9+p=KcHsK%XO{sn|3Gmb8#K7u2Mq4jygl)gVN@G{o9c%Foy=j=Zm* znF77eUjaH5`-P5jTw$wIg>7*&9rX%{|6RZWbCR15odS$FDilTL0QY%}opg*N05uu4 zpP4>9p30bIr0@F6`-gXnPanU784yRp8aZBndAMh(Hhjn_+Buj>G>oBM&QRqEAtIfk zI5t8f5Dk3te1^(d_A&_9X2b;B?3qmEP?#5}Nr`;0P~Y|9?lm5QEds*RltyMw=6=H@ zrSpXh20S~+dZ}q@Om;FW4n!*nU$z>yV{kHT34QKB#MQXuAzoRAKhO=)OpJM@fLk4` zp)m}N>OB$Tw7G&sT(p@D0i~|ct`U$pj7GRp40=9~J)qu$l8v=y#_`Gm1dQN~I5GbK zSM-PP?in9G@nA0=QZF3}n(q}g5n;BOu9r)cCD!sOgqKvSud5wVKC@xfGo76ONulRH zlWQ1ZnV?+|%lM`cR2@#I2O>5R41U94t(E`|&(TVWFDv&0(NeZ8lsh5BGQEDQA~ygP z#aXQ2UBv$veKIsk{!Re(!-0_#k8-r%w)&pc>grlWB?m(wV-RML^Q>yWaM6H~qw>hp zy9f>o)uPRkfzbV;1RemtO!3Q zhgu7e@v2sQ(DKw|Xi_$|6!lB>(? zi$@r;l!~49c8rM;tEM$lRqV3F)*G^(0Wix2Ie{(Zz> z(c_u^|8IEYKk`I$dug6H`G=nflXUaM{eSq02c0J#;E8Dw4voLU41k*IG8f6;K~`mB zh`1MOE+N>%D`Mx0G&ua7DBod*2gnEbTf~g~ixjdi@kusK25f{U_lGLMbOkOdt(Hs8 z;Ahk(73Q4UmB?jswVOFbuZ+JrgLh_^;Gz?U!TmU*zc+o}i=O)DkswgV^iQqc)<&ybsTeZj!4~_Eve)xC#cqqBpL& zl3$gYRi)5{n}UbuIJpW`@LCb+K>rVlM7XVJyr$)uM<3jpv6!kZfzWwyA&{lQtVW$m z5fuK+CW`N%ElhsYR9UbA>czY3F_^xd@EEy4A3xVZYbvXTk=RR1OsUS}osJw&oO4Mv zAXQm2(n>{;HlHRium$NAI0S`&bohETmmXu6uH9e|*vf5b^rjG_tc9C&2GDQIjb=?V zV!$_l-~s%Nj=Lln6-$O*=3JI$NraA{y)M#SAD`pNHqZ&HHSpZ4>Me_T}>e8dw_I{%I9=~}X{mkb`Bo<)VLt5+yVI>VYnc3*+-+!1^^L!4?b9Y;8Ty- z(yv!y&7y)i^ikI$=sebNgXQQxI1x^uf(~}b2Bc|XpMrSUPZ}AL$b@!W=cn>apXX;~ z0fpM9v?W>1&hks?m)IPr;?hRj=p9y<+v?Bsbakz)p_V1ErKV z&>gWnjtpKm7h;Z8tt~}w*bi^r$x({(&I@?J*T_vWE931F#inj95K#5(w3x5p_uNrl zEA%e8B&p3KOK{W1hl`g!obt?`dk&Iinrcjd0E~opJjrb7D5e zxn0udX7e4smru5M9u~5Dk952RA_BjA!)%!b>V^TZB-ArQoL{oxqNsZ^tGL-$bU13h z%eX=*rG{hOu;WjQLLH#K-5z7{4&79e7FG_RvA4~{vLBrNO}M%ISh6S?7RW%Pag-~4 zQb~jGcgr@S0@H74Q)rAiNzGCk+7USjUY!x!gk*~O-D+{Wnls?X-EP~!#c{B@T=eYx z?h_QKyHbO^LQ#%7U9o-Q3N6Z`HEHs`bw1On|@&y9$cBG~Co8FHxy7KURs zu5ziLlpp~!@>z{1al(}$Wg$V@o62gFyT_c3<4N^4ZZ;q8@87}=jPP2~AGQ#VMnSNQ zK0IOYr9x7&<9OuMKZtvCAL?c$L zSXw|`YgL&;kHl~scc$gkS}9%z<^Q6%R0Xr93f22EpKh*pfSsP&5qeXwWF{EFBT@~U z$_lL`c1}!8(n^lMh~wz^z_SbUDGGb2z$_&}C;-{0mT;~Eak+-4oQD6x5$#gTXvCMh zN=ut?*0e%$^kfQar(2|o5f{>-80u^1l*aM3I*t?>@ zA;NHFV4Y8&Q+ENCJD*>e5DK#^M!7tzk6%80=aB^irf&77U==>xc|s$7@L6 zLjs%%Qt%1cpV|os0CJMMip-l@q!CZbw|f4Ny0^rP@>e@h-%(1ctn-Mck9KL&mTl+} zVuS_lLU*J`BL3m#2KEnBcqdlHRlyuYwBFrD4?uOca8HK!%diFgDE;Xz`S#Gn^^9K5ox;Tz}*n%Qr&2 zH386X&=Kr_j4rUS!tC0+ds~$S+6acK#q^%IeUfQ&7KPG;6XGbt-~LqcK?A^`XeMeq zC<$`H-Um=qtRn)csUT=RoyJ9qiLR(<%8*3)aD}kpUIXuS_ZsRt6(PmFqFiU5G3OwB zH&U~J>U0fI9E1#nm}s*5@EqL^OM+S;qvQgWsCsFqKE;|9lZIP4MHL#j9>}Ngiy0P% zLWKEBXw$_egf~>Ppm~UB7DUk|;OTgBY*-L+1nwy;mwF_nhwx>aK9!pq1;jpA@jwWO zn}H!1XT?#*#eCM%Zu6_*<+`*Rw1)d{IgI@X&OR`c&!iVmKy-!(>lgsw_xjs!Hy+Zt zXGCR~o(?;V9-I0Odf4*&xz@(tBN)Re{$gMg(!|2Z4z(QLjOU+<=SYeP@l z!YPb~rXtEZYC0fDSuqJ^t&mglf)#_oe)B^^3#Ve`-d1#Osu^N^+Y>}qWW|i8`>Yy9 z_QVaP$!FN6)`MYw?gx6#aL*So@PMwe0@>yD3@jMr#q(Miu(DzKD==u!X^{-bp~4xj zQF1V^V{lB4`#WN2VmQ~^;4aA3S@5n`w>MXA!Kig`jD`+Z2re-Fsw_!0JG--%U8ujP zB}Hyy>I2XnHa9+f^X2XG&BMJJ(6Gk9PLcsDT{ZeY|7Qfng%mawFp!3v1p2+N2b8`= zU_#DTV0o3=O;DrfAPGNa+@S!l?X7z-NmOk!+(f7OdkN?Z!(uPc^HlD|Dj7w&mo1qM zhz@|Xi@UfGpy@^uQ3qycb#?NbRw$JhqdnOFw(?BH6RAAi;)}GbU7Ux8qUzL`6xDEv ziH_{yXlPJGS4S`+Lo3J0%1(l64H`QuiYOZW?Tq4^U(QaRk2?LR{(ArBFAz_pC??Ch zH_Kr&2j@o+^dOBlXyL`|7qD&4&Nk~C+Bm*^K(1N$M}9(d-u>I(jH3A!JmjwPf$J*n zu#?^`hK;gQ$Ra%{9iMCTo5j04>l_@{Yaq8-SR8%=ToP=Ez35O|q`A^sQy~CLJ-@qp zan%rt2B0<80@0#?uqGIRFlN;{Q;ggT1iYD$Vm+WxcE}8U4C?fginMReGQycZPNCaCD;$_9*?WS21C_ z#CiThEt|_*EnivxPZUvi)3Y1al0~9h6RrX2Be`_9tLYr+Ct!UNVRb<2GsSU)j?j@M zPSMls%jmtJdtg1=u^NflhQB=BRZ~|GYA1vX2btf;m$Deu4jf_#e3zI(Vu?r|lx?Sk zfZaF+Q9w!kC|2b4LP8ca6H8_~v_l0^9ENJ=3JbuA@e-@z2)fjaF8w4vShYI&C{W~T zSRlcYwXleKQyrgm867<<~r7^YS4-6en#@XhQ{Tg7%H* zJNp?G{muBWS^tDK!uP^zp`1J1*9(}2W{prgZtH4{p=wFjVfFP;ziIoud4cAJ$oyR( zRQ}zE?@=@hJKrCac1PT@LccTCc)0l^Brt1PWTO~?;6H7+;n=0?&@Ze~h_Ey<9fo9= z-Gb)F%|;Y~xex0#%rHO}^D63?&$vO;$%UUD)%ffr_Mm&4eO4@C z!9J5uuoR4r(n8XP6C`HBdSE>#Oc$yJaH|V(I>q_!%i70fB`xw5d~~X>CeZiU)&=SV zvzk)%I_fDyOb_GYsK_*Vy>|2=U858Yt4#4gR{AO5Fi$d7e$)YgWYAm*adi zG0fl4w#3*nhlb}>rm_;-Hs>^woOA^yM<$+tcA9S-T{ISH*5Du)pbOgh>F(?4mp}h` z@$e~ro#GgyL-?;t!(&^IU@4}w@HDx;U;Vwqft;nt%T8ObSH2|FvcMVncH^C)$A_hz z%i_g)WWmJP7PNK&3TGrM(#SDP2S9C)j~c?ZV{U6gfw`P~aU`O?0I3QQ#Gtxk>%+jC zh_3k@PA!L0ASrFOFlSi8_YeSriv3N8?6U@L^h98iwx?z0I{saM7+z7s` zLJSoY49#WnVWoZBY^3+U>E#+iX|ehG>xC0tQoHV z?Rtjt%bhdT$R6$KQ~WlT-KCPCp04;K?@PZ#W079E*bsGe`a(FzL;}~!*a!D33@-lr&++ z;!e$#*NVIfhE{RanN3ePH_bp$aov( zRytgp&;337^3(hKuO6Bl8-~J7#)t5uFHRY3r{|Hb*`;0^#(7T_FC4gc61L0`M*`7W zL*#BxI>l%QXa{tjQ|!9;KFTAuhAxa>5p!P+Jd~2U1NC5TwP)~2=ZkDUyp9%!TxE6^ zGE6sL(exN?#kkZvPA}!9@bZYgrn@z%7Q8^Q7SKZWP4Z1@}CyfpE0*p)k3%8 zSvSTsj+MdmN``*i6NO^6muc&%>Rv-xZ%JZ2&|rEXNq_R4qy}Sik%wJcYudbWJ4cgvK9h{bS0Ua6^VHD z%^w!Zgl=KxtTG=Ei-RC%@Y_bGtH$91)-M+sY_%Si%`l!`vB|}@El}j~N7H*B;;rYc4-GShPaN&~^?!H0cS;@)YeMGr}(dUOxU%q=7-Q_u> ze|fTN(4RlPd&?``gmyMRqY^X13?@Wu|kc9$E`_|5zKH=iHy!w;Lc_kVu( z;r?wY_ghJ16+B&Kg?#$UwF5;zEj+P9J-1g5eC(db>ITO0TAi3td+8jln$NbWpj&2u zsT-@=pluxsxCRU#(%3xwcvCfAx{K+ z@%HVzkCST@nR@v6Y2-lmKYI814I0xlU{kkD*}}nvfzYkUva(gw^_L=6gCapsuAm)R zHB7TcW?-TBrOFmrPUb@jl3^M^laj*fCQdp?AWIDn-?D7u8-&~1d+bX$oyxWe`+_!< zvVWC*#RoBsqasF44wWD?_4=J;MORlWM8s{!6=FA`CF!t~E1eapZQu-^HaTbO_?Ar% zOfcd~of9t3ezvyofgI9$cX$aRoD$C{>eO#QU#+EH)5EwHP+-J&xwm2)T`&J3sDAHA9{o})9{4?1bv#jXe@%jGbtN$JmaP=)>{+G|CqWa%} zl8f&NpZzsP^$mM4!?GMlJBVuS1g(o0d26mkm}4Dvb1iJ2HQ2u3es4%N3{*wFRlm&Z z+1Y%3?cp*Auy}YviA~l;gqpamP0}9A8==#S9l>-0P0n+u-nYsUh#ocro(HMZgg4&% z5=W?E-u}jsM7AyCny%TwjB8tZmB4?&;z14Vw_k#LI)RcJQ;9u-z|j`Rl}t+0U62kc zZT_qow?r9j|I3*jV#t?|Wh!!Y)x0b)rp929*ljj{{qBc1pCA>W0kwTmDo%UoMUWiL zT&2kqP~#FVw7LPjL?{=(dNc&`-{3(Z!amJG2i41kBh;n?`+(hJS&cc0PgT0`Jh?8X z)3c}-2ilJdBX#CBx6(Lr67E82w?tWrVCjOnD15<~``kGE7zW{X7}T*p2$~B!Bnc;- ziwq1}trrVsQLuZ)3I0cq>Dq`}vZV~zHyWrgUGlgrD)8qN-2>7&FZH7x(+91?alo3Y zrSkhJUMxtyhsY#=elkR?B?Q`*Ib?{YLO0<8S?h*fIC&)7>R&hQdRK=~MFv1oD|`SH z{p$xn$8IAY05RL(?0j1AE$_ci!cH?TI}Ax2ml5bAR4tl1F~<{JJgIbiuHR(b1bo%gu{J3TK&4{tKF&;c z_l#GyQ*6g=55ekQn7_q$jgle0`4Nxi0Mt}Q5p=}Q8a3|`b3*jfGG<#QGRP5CCB~xW zdIYynnm>K{-~yshz9zgQ@qIRbkrRz*$7DKlu<^L>c4V-T{S{O>vGag5*%A*q<ij_;%5F5-*FI*Cw_kSpZA-G zk&u)&fs^Ict$hH?Qbq*n^?VL}>f~mHN)0Gqen$jma;(LXu0=i=%MZ1vHf_}QE5g5y zbt*+kRDir6g`>FKL>PKq)UYP}E@Rr;`5m6xiF2Q7lfchd>aU=Rg*Hrl1GWThMvBv5 zkpbKd=lIRte6>1p<5+iC3>nr`h&ra7nV#MVP<)@^33^rWK%xN7tP7LBD#zAuIUmfj zrP^d=XF80I2bd(ez?}w!!4-jS$>7>xMkx%MCIB_sI303mBw4cS4F0l`TCB=aqJW)Z zcA5_P!9DF%$t7VyLT)W?9nMIgYXowsBU6f4d3)Qi;r2#_XG#Ov+Ze|%-5 zoC6(Gs%@7XLU7>E(?9|A9@K-Qyp;Eh2ecZP#LYi+r8hNr zk%zMtr~}d)yZx02kt*yhs(TEDi=07fe-JGV(^nG7DPw9GR`mQ2wPUt%{TdYkFkp0x zVAEDq#1N~;`JC}bw0cSHYodGv?08w9*$Q_@wGKS6cduYD!1>@m9OUmsF(1#>?atC` zf(q+6Flq4?g}ml>ui>) z2Ko1ci^AJvib!N@OS+iR_|2yuneK}t_AQr*r*Ml9G6=_gIVtmOwUC&m?^p0yQvk;Z z3xh9$IN0<5%(1!(#^Nb#9rf8SYhVQ7&JEw4>tNt4u{Strs#Hi z|MiXA&%E!f$r1i>E>v{pFv>2kSg}>%1ac9}ag2*NUA+}9XL0*XXqwAA9GPD+l|Ia- zhCPn2_-drHc$Q7M6j^eI+3_}!89(2^?2)b!2g9IUt0CN$Kk6z;Nk>4*OVDcMBXnga zaoYr~SeZJ`M{p;CVb~6S@73X_(gi6?N*;&qrFEFi` zXVmf$P?^rZtq<`f#O_?$t5s!kd-R4&13@!SgsZ|FgJ%QI;o$!ufhq0sY6cPAhM0E=6BLg3Fj?q8 z{L`zsdNQ~r2`)NPIy>ixPOPehl+Vy>#80zIFYN1Gdb`krx$MX#oq~-9FLuQ)$c+Q_ z15^VI_g!kmvNT~sS%ig_ZgIVM(F15nTs0Q6f#=o{kXzCR1`0OP4-Q$Cek?esYMys! zls++eyrk;u&9K~XI$q@d+i}VelTf4&|KbLucjpKMdZi2EMfZF0B?A+5qt-ztiOJv+ z1xS;*k(OkJ8eZ3<_ELw-nE2U?^BDqyA&NItz&E9(Vs~?fCfo`6 zha|j#+?pi+d0vgQCRlAe$+|^@4p3i7VgyMOCZiKHIsF+~k+hqheR}uvy(~utGsAO% z6fR0b@}%GLJZ#JW=|`|x<|4691L^OM8AHf9+GRdZ)&JuqrltREs}yn6*98vkL- z)FQ{41ltAcp1MQ4g^h>XRqMlbo6&Kx=ApRo42Z~ZLm^X@JUu`bH85>PsQ>_lj&3>x zDxa+_uyO>TREBL6aF|e=h9<{3Dw!Sa9UeY|yz1sR@l*6+G$l5;D{jH7;0Qc&`nyov zvnrWk`xJ-6rin+vz=z*Yr1mTYO+xb?=v<+@6gCMFMAQd#9kzWaJt1D-Enn}#JGgu; z6~h0*>@r6~o0sR29q`DM83Yb{%G{JK9@Vez11;Q7=EmvWYMy;= zx~|g6>^iy-o2-H^#DQc8n?wtdA~x7%B{ogbtqmSK+O2nj_|IS(ssn(BLO{xfg1m+Y zB6ItuKP7Wuar);<0u5Y0A@X|^pI z|73)+@sI}CmL3W;D#oX0A-XO1@3BS^zwTL3?;d@YT13>h?)(zkKd{|K)VbHoGiL4y zUJmj}DS6LXS`8TW)W_qo>h~4Bh~v%a%r0+v;+lq!=9|M!uxy2B?Q*bpD~&7PB)p>h zW!67OWsCJ6mim%>%D^1#{ThKj#>r5hn{?HSEgC7rG7QuMH0Cud3}re}v&Ds#f4%oD0JjCBK;Yp*gJS#bkhJfW{}1 z^2j)UlG%t03IdLPhO^amyTRz|)xK`C{nqu%Rckx(6PXkco=)R46l$Jpdf8TxClFM9 zfjFpvG5x62o7?GBVKE6`_>&b@4l@;&^QFf!Q|qpQ{uHb{X;xW?q6gl;7&aK;1r80Z zR?JGmd#c>tD_EgWGT)5a3y z4x&npE3hg_WS735DtyJ_&8K${f3pWhh)WcPWnv-zhgnq#fCL%8=h90H)9cyYp>z1%ckhyG21sH^@OWyhX{C4&5 z=Hbid&HlGv-h4s=>F4t=@87F4uz<=K29Tt7wnR44Rk7592t#0`4PZJ;nK)beJ;OJ0 zhkktLuu{6K@2UIxk_sV3Ah^iBD)MTppG$NLHY4L2L^;2m3nzYcZ&>u*wjUaTRP3CC*^kjC_z zm4a_@=H7n%f~=03EW@azj^z& zXycMqEZKpG{hD$1=HX45m8bn?6b<@D$b5hM@yGqif4qAj-4MfTWS~)9n?4YCWS1Gq z^xdsVB>4X6{;dTvf(+_HyKC64(5Zg7tM5M;-D3$DL*Ob0-L(;klwc$SVO;2MAHj(O7?mq~AMl z=Hnx$h;G@;;5mLaDwCn^oNS;@AaLQA?sD|y7lGm%b2!t7l*`!KN;RE_bauB3H=biU z#T_CE^;g!Gc16X>dB9om|2P6987aJMPo79RJwO&})R}b{0K%8D0F%uf{%?74YkQC& z*dF%a5U>gwh{m`^MFynBC;;0rK*)k zNmASn7OmojYa#6vw*bq(;tJA&Frpp87T{$WMOP&H+VQp>ZVmY11#@kpO^`K;5mOR= zmzwI+k3atO=F|PicG`z&JYzMRSrMgRhP^)N*=|FY3TXNPt}_{S(;PJuOGWYICPr;o z4={zeLqb6LshG3|DeJ(}l`3eX>x=qd+x1+UOVC8~J zfUO@czxM!b1MuOfjEq!(Ecx_+TCBQ)TLsl9Pe=kx5-%;UwIAAP%`_a?GvEEoC6FE*^HmToqbc*ke$)fPo38`zLD=6wh(R!k~mbeOAh4rCSn?AZLpp zrX-I+Upthug_?*~N>ezJ`ZdG?uzY828^v$Jw=`gqm8=>|i~Q%S%KojQ7|$CPvhbW|amY(V!D= z9yo($dBe)gf#t>RPijsRip$Y`xYmQrmW2)2$qdpQ=F3aY@cInW+_G1scX}S2)~5VC zP1;Wff;X#G?>j-H%4@@#50<}ga&vW1UDu5-a|+vl^rApF87MvJB%3!nAWi2%0jdCj zJp>BI1f8C!QVT@iV9X9f@_@RO&WH}?BAm<_&c^!p)Nz8%HR%fN6#aS_L#|b&h3P%}B2fv9u5ePdu+Y;W> zgPD+~P@MTAooi8=Mo?{$FbpRO1+cnoRbg%%*F@`OOXcR|{k!i!{D@k?SV*hrOk&z6 zqdl0uGn9f34{wzPl0s26b|SF_p+qP?k_^MwZlZ&I072i_2K^7M(C}tF{w8*z58*(E z8*p#B+0o&~I9YAmReuk9*5&CoqiGjpDe%}ni$~ojb+Q*aB2LFAQ4xpR-_M&9g$_^) zZl6FGj?mXK)bXwtj!%SmR9a_(e?7N$dH?zTVLmM_7+<`3|HaBW8;<}8e}L=Ema<3~ zTQ-lhGPQfMsrYm|L9eU5q3H@0(vf`A3He55OVz}odpC+W7o+?zbU7H`k?~E_Yy4Oq z)NJs5{h+5Kph6>a6rk0B$La49$XBi+k}rZ#VEyvM2jw)T`(h@<22gYLBbAO7pNl!7mWn21KlBqv?w?RjI1uM#50?bvJ))5 z1pfxY8{8VEsElx5dDQ zl%pYwZP!w$gd@}Cxi1?8$Y)0+cQ(eg?lL|=D^riEo~F}<>J}GJZQCijDNyqCcuSn* zDe?tyI_0yMUa=2@faw*cM5q~?i{Z`#a@CF@FgL^tCzd`*M(x0u5R(K=9=4%tr1VIs z7!8g}&}|Yj+<`{|`eMWw&^hPHqF&Q`is=VS=}?rAZ~@H6;^d zX!@`gNvDFzo7`<43QOGtjeR8lcmTTdm9=f}#2#6BlEQRNu*-prOt>@WNihe5Dqomk z*b6kYkd$3fBPp*yiWu$&1-8|D$jy`vasrK=75`L>Ai+ za1QlcoS+Yc9)SMhR~92B%Co;kChG%%>_`S)&JX~3GwM_jMr+rPpY9*NeEI;iGZ6u@ z^7%C)OB%_V;(-IS@m5@E76dJXV>?4cPoi5Fj2GcBx*BW=X&r#tL6XG*Ev0p;I14Hr zPQiBbVYAxVf~i$dA8_D&)uvZa|caPU}0fq?ozyG5qGgPTP*>)}!l6>S4LvOz?< zSQ(;+Nl-9J2_nKJViTw=^P`H$h;wb9nw_nRZ2(1QhOx05*7v@?UVdx1=QWeyfRFgr z)d?!uI(1lHzi^F59(``%9kZHVo|)4*F7!2AR5z_v8=LYW5~P^f2*7Syf3s@HaCM|& z!SDqC79KC$8%{>oH@H^F{~DC%doWS}uO9I6!}6=j6tz|RLcL?u+TPdcG^nTXwysAy zvA4!)z;QNvSyNVp(M{Gx*gV4k2lzLCp!RE()1(J08Iy97dZiD4P!|;OQ6w~}D+O$= zk5-x-np?4$x)sb@!f5-u?s!tpMJ~Gxqk-#@A@|-QXlJ>;fwb#?6?r#Zha8(Urhpo* zl*E)6Ml#wXH#vI;rE*g2B;{-i!Vq^GSlH)aIA|2hD(0ih?eS0_;9&mn=Kaezf4N`(bcG6ib}CDfN>5S}=4Eg!HnOc@ zu0LUrvE^6u%3r8vI{-t5GF0*e<8RcDU>-wt|&-u9r8_(xTo%hXkdER zsJAz4dFM_*(yI+Z@Vg#C#8O%?x<}N`{@&9_93+PZ&AHnk$JcdPSljHSYl(->TbnWs z!i<%pE8oo-)ZP)Ef+Uts(sUh+tZ8$*noNxrJ(#Jp^UTD zRYOu)xe{%#GLtwHslH^PjgU!c;H&;URkyJYH6^^DbawK%HnBj7p9rc%#gh^g&E**V zy{^C#@zC|SmG)(R@}oRwwsnFI|MCqinz#GpcaKbLANf10!~a;8=H6rqTvVe)(AJ6B z-TFqT9!%awxEc}G!vEf)%Vxr|ifLxe%+nm-@Wf~NDEa4egSsF)^iVmb`2WFQ!5so} zf}XE^#_@sL!QMZor6B3p7zDLWp&Zl+H8_OP4EZ@1KTbgapH9q;6r z-GJ)bxL5aj4gZM|g2{oaLcxxJ>E~x_6sLdnKMK_W2?F`}6)}uQQ7~y+wgI=ffr*bO zKX0W{uynMYfBN|2i+6ADKTbb>`13of8^tML99t*Z>PEP0E~#S(0_MMb1xp;33)^8L zAzr3=mli`BkQkE`G^lsj@Wc;ycOmkl;T=}=Z1##S4#xOf;WR*Oenk*)Wg!#9I;c?N zkU0E`JKa+=pPB(EDV9$)PZVwrSrsJ!!-lE;tjv7(GkMu0Ed8rX($Ug@44iI2#m#AH znoykU#$Lj)<-($`JWWm;S)KM zv=r-|2P*LD&-b62nh6w~aTdYMyOK|aXu-&RX!K&ulp`tgQ32 z)F~#;Dq4Nzm^oaC2Ke&O%IgQ;u{iA1AWb%9?vIIR^#xn*)xeBIg{<*p73y>? z#O^8+OdQB#8w|wvLS?)ga}kpAs?Ye=C0uQYil`3YUT(Q41}~ z`_aIwrEw8)dF6G{tH|iuS1Hrru{6p~7sW_I^tdNhqcsb}?2;JJeqgW!MZ4UAwR)$sHxL zGcYyPspFLvkOx>26)@1gUO$0vqb!6RdIi#Ni&)4L^mC0Y%im^bX<1bLm_--wLqTXS z^*Z9a$+jAS1*&lqha~hTdKk1%urh+WLe<-9ge+itOX&r!W_m7KD4oQrqEN6o{R*L! z?w~`!Me~6)8Pe5@e}#_Rq9AkLrw!PK7_>Z3Z(#0o6t5gS`&@+vW}oRsgB3JJ#2XPQ z71u_)0sjZos45p?xwY&ZZMd`rSo<+057rS1WqeS_s6f4YJsMY6G+-d-m^)$_a`C|I z^y#jRezBcU9t_!d+=;={A)^G%0KAOP`=jPc2*j5|I6dBL6A~kuQs5G@;t;8R)&v6# z&(O>9r_88;lD?tB!)AjIw%E6$Et?4}hb=p8w9F_%^yU3`_o#WoW{m@8JlXS|&pE}Q zkX#Ii#sSUj@As2zq8|hDeoAi!{takOZaKTXL*~Yr?R?&cu8+L8QPQyZ!GqxgTY?IL z4VYAH(eZgqLB!fTjv`e=#Ezk0ChXflm_vl=5K0jHIDHL=BbgCO^C5s7;!zr?ys|K> ztaR%IhFRG))2!4FiB$UB(kf~oFA+g@7!?9XPYA7&2c~*{UtH;{3_T9F+cy!#lHCa1 zRqy5#^x;BKt3k``Ft+#-iqdp8aQMM!Yf{^u@;?*jK+>jjV)UR1%eBze=`YX~>P197 z_X=wi`SO>`YM`n{dQvBTdaPm-FaWM;r{hF?%R@$pET?F87uhDhPuSLo#*wsB`QdJ#)tDI*~XIok@Nyv%=Rvk>Tm zY4xCnS-1yLVv4zF>RE&A6UDj+2_3f;H3uf>!Tb~u_9#24F1g0m91^Sm6x|5uiwTI& z`sxI3Z-fYxdK6Wj3X5H%B+%&7>4)R(6ycSojAM6o8Y=obNcfW~7j_#XEi7n&hA3To zuD;dJ|72(#3QS9o1%aLwt;zug+EJ{PO3s0$H6n{p{@c6ZBCR%l}Ydr&ZGh$i@zLB$kX zfbu?)s3HHqHZgBk1$FgS%G371TKijzC+&m<&p;7PG4TsQi8oV-q$n#l80Z-w-+%Z# z4l?~8Rb=jh%o`!=_;flR2rjQ6J-oNFg9w>d)-^hQf+r4%Czps8YohLMZWQ=OWU^dM zR;)I;jUBJrB0uV%!5nhqu6LvU-g`}h_MIq`3wJ=dfIE@)AWxl%ycdvYSjEFpJubB$ zNzGuS6Zd>~tV)kS$5Ipl=eR_rg08U|oNa_tlv4B*ta8AJ{LgH#HDE<1VeORV>0itcq2xX6OK5}+t#U@N zj+|kXgoEXs9~>7II$k!b(PPQ`#K>B!0Im@ayN^eM=wM>O=cBH~uO0tb+f$q9X~hL&cYTXOlzw9;8-`HE#qP@@=* zi_P67mf`aDie1Qr`7G?JxRO)@3#GLJk36T50Rx>0+Q#mOJnem&Et9F?>L5Hmf>0wv z3-${O?oufuoF)BrMyb(DaG*eg?qehFvj44BBM-$|aO)ruAxq7gDA-UHc?r;Wnp`An zl#56*MY*}$l;RcYV(Bl_hQR=#33Ed(-@O0x*_WT*-=hl;qB5{eQUu|`gL=Hd=G$K| zprfh-Yzk)xzV@!_jSaIaAV`*x-O0_ME+FW{TLq9&`dc4vDB^mj<@(TOL39S=eEV_q zUj~bgv0|M*oiBr*@aahHZl`ve%f>{cbbCg3N8vqCq8IWK7bi&`l+lK=H0s(k?YqR| zy6Gn<`{Ks6nIk{UbBrRHBT*U0`sC`0k+ds%0PWk0iH2v7M-3amU24oX0juW$*}v>C zvb?=Q>KN`rG85Af{6Op>1DmFI5sYNmzS#rnBvr128lyZ;d7zxB zj$GPmn!|!?h;r(N31200Q?9_gE+QAXQM_!E&^vGIM7PmX7(GQ=@X7iH+J>P{Gp1Lz zaTsTi5nK$R2Zu*b_r@rXr^dbQ6kkA6u-y3}jNgVy{LU>i90y4m$Kud;uS8VhVuzf^ zJK2lTL|1!~n{wVS{k*$zmq*~4jtx%-!os+*TVjZYCrEdNcr)Go%IHR(KEE=Q0|PSy z;gOMQzov2UK*Iky(w1qkTi{%57LO!X?SN^bOl94h>++^hm5XH5G7V3Zr(QE(9T09qMYWzG#n#VP7~L9N3mTJo*Kl> zsM8=0lZl5PB%9_y#mxpPOyhG^vy664Y#rmSY2idEQT|)YnU!%R<&wnlVeA`a{pjOR zIlUmcpim@Ed~%L*T7%)~;m|Von}`jX8`I)P0#KZCJi+V-Qqit|9tPp&Fp!V&Vve_H z$pydAe4qkqK@zeI8X^pH+yqh1i=2S|@IeQmA8Q$nql{X_QhTBdbfU%50z{yp^0Z+; zxErT$KHsC7Pa)lqgK-)1CPhn>_wdXZW!4Z+1|wUNDF|>1JivXD3J}EM5Tque2s2TC zk{=C`hHh1q_p=L`?XXEQM8VtrPw(IVlP0>+Y+qX|R%+aocz63;U&yqX>+6+1&;J(6 zR~E3Cjt>W_yV+Q0uBx&z9;n_PLz)St@{&^$6Fv-42PSt>2q z5|>Dv5!X5cEjWWkQBl39)MIC^CWQt&>AcClM8(=$U@ll{mlYEm@x>Rw zR+mHJaN&#LUDDV-ZA+!us~vB$c1J!&wUYNn+u-bMO02#M>)Fzbs3*WpSUJ-os_$h4!81oX`KDp)4!08nek*9|VlDQKrH zRpdi@uTZp^voy*VzJjzkisVEKHYTdrrl#nTR3n$P4qE~Qa-8A^WHKv0+)!GLfV2gT zAd>`N)5)2wQEOlq6DGdZEk*r7AuDFUiLC2H@4KB>1--;i!#v08p zZXmy!A$NamhGA?e-jPKE3YPe_5Jd;{bY&hJoDh6lC-)q(1+;+8m;&Q&R56W`HxW~3d$n4KmdAxYpjws@r}8KI zt0b#E1->+`QU{=ZQUZIq6b%Wk$g4_Wsl>lk4$}>EjTx1Rl0SSb7c!ez3#{x}@il@K zzJjQzn})oN4%dx^n=zvLlL5jYw;id+gAW9j9`d-Zqu{+z+8JK%cUNu z%#t*E+xg8OQSWJnq)fQPZ)R8K5$cWNQ=}7HCUB#1l1@p_aDB0_+j((QA5PjC^fqB^8kUJ5x-bym`(9S(l`nQ zTLT&k%rL1CZOSLM=)m{KlAJLS$c}bj_}#UrGEi`OSqkOv83{{i#Kr#X>b#bzfg7HP zd4o3M#3lk@m)beA16cXL^OrC2M|Hex@-T1-3xOh5kEugjW{CMx;@MZ&8mght#CG-E z=w5$ZZw4NP4K4}-Z6lORIhGX%j%(9NyQWjL=^_Tig=6OhxuR8jJiSHWx6Itk(2#qF z25LN+A7h7zIJ(%lMbd|rPnL&7Gb`S8j z{q4QW2B5amK*-y3urk)tLLXZphZJY8XOjNL%i8M?>n1&z5oGuH9E~Id#+4R3pOzpZ zs`;hRe+kzpTCEB4 zzMAQqd!@mq`EYtRyp#T7^f{C0YNaeF&e-cH?5RCSq<7_f9?7yiZT?s)Hp%LYq#{`* zYljq@7j!JQ6*>KM|K>0K&LXmPPpWlrrh{(V2H8cI+Lydj2>ue5$s=v6#{;u`^;lCd zgKBXVUACVN%&3u6Gen+(#@6%HZ9TboBaSR8brN-^mrsQer*Oy#6Ou!Y*QfGD&;fxE z=9Bl|f4u(q_8t^>bqTt~p{t8qZ4Iw_h34!VoDp_DymnheF00466j9%X80Mmv>T)WE ztS3O>R2bKZjMyoC=cA!hF+=N&uSHnh<^%uZqE942WRT`cUl-ph>5VS)WQa}W!2s2r zL`ZtpD|J9JP`Bvg5`Terqo)G5VBH4W3_H_o6M*_atrqM&jHUI=H4p6>9~tS9!D=vy z!6Eu#b5JZUPM{IofKqQ>T#wyrfk9R**C_CPwnWeM3pJkK%x`_WsuX%!!cb@k2;#;L z>|H}$3)5Q!hIuhPbN0KM+kt7m#5~Zrm+N!U8RnnjZ=K&8RD9i>ynXxW{_|&^iMMc4 zcgNtkZs;?5{@}T=>yeB> z&+BfsRx_|6kp1UdRr-KAD9RNoTL8TF0qZD;d#|MObX_OEPY{PC5r*MKgGo-lmtg; zDl&ELTqx5L+1PS|z-k3aiiaJDh(9``LcxX~!OCy6QVOCu!s%Yv;{0k(x#XM_i8JZ? zUj`;P$s#ruH@b;?k9cd(%v&6!rNGab#1Esq(kBKtg&q+=eguo))?E=+KRkUzJ z>dqp`eyZr!9)uHj!24BP#|Xf#{bQE9+clamC`h(Udg;Ewmz3&U6wSSQ(T-)ED1O<;-=d+;i2}?04>c0KB?I|g&;=IF2;WgwzzF@aEgBwp4c(U`WJE0`apcu)q-R>d$Rlb z;nq17uU0SNV)pDjJ0j#m*j1!>t3c!G;O;g%Uih)fWoS&+A%dXf0PGJPj@1F`lkp2` z2NYF-d1106%U2w$p%Ezr_g`jy+-0eaI&`GA^XtP=xwu{);|r@RT9viG zJTumg*@+U=7qBBFuQ*<|Kqi1Gh?d$;64F@U0N=4KK)eewp%?*REnAOJBmZeXM=`ns zPIps_-i+)L#@d_p_33O`EOFRF7;(GOl-aFuj2xHJlv*8K7kI-?K zQK2E5mi~!6zHU5RIvdsM>-gU}GJ87ii|N_s>|PDr@0a&KetfuRZNM)-LH7siu0RNx z89c1}IDtf>zx`}VWinP4Iwl=zDkN(sXiqDZoi86D!2;?A zutGh{1rvk|=~8~!sH@V9{PXC)^9_>2EQHd2}Rw6bL&VlNeh#_a)HqhP=dqv>jCG5}eUeCqh1hlxWovsg6i~#AE|3i z=>YX(;fsg(F$KfmLr61oF-=My0oFYfN3_p(Q)ASUmy~T~IP794zZ(|F(~Ilr+6iAP zmukXLXpTpyjHG(iqsPmm9pkuDDtah5bF!S@p%x(e)lpAajfSAENO-g;c9uV!#b1BB zB4Z|sO+1*rWQm{!v(c_#xW0mAgykSeAY~G$9(N`T_@O1-8w&jcow4x1|5;}&-q0RW zcUV5%s^Ib)I#3rDCh%*|B3a3D#`w`h8hIB)vh^2KR*R~pWpp^EnwZO;=_hBZ@SvE2 zbS?aSafXggCs!yEmTKGVL&=Mr7BB(iv}8Xnj|+(m$AzA<%_=`6khumTGL1#qfni}_ z!2ROQ_xFoWAHVakg4owys!1s60PX!j zIvO7fO(frrh@8O7t%)MJ+T!;8NY=J^+hZDEAaluXz?K24L2Yer>oaSOi3z}6*gAQ#j*_1=ZnC>SdMa9 zFVCizw23!EV~&+zB`pghlT2Q)pian{cob~3C2%!JVo^o?*Bg?k(!(VDtlEUsDaZvZ z#l`;b$bDjWx+zetJC5~(VL_!`(Du$8m}b4|joUlAfoxEmDKITX&AM#zdXW^e>Nh^) z8IW5{W}c2k+(CM(=&AouQxw(3bFE2sJa~9QGo;fh#EBx0sSBklLV6cUXLCx=#y&=f zm?vy&M9 zFJ@URu?Q%aQA|70=bxPKp*DsSAwMcrA>=oqh)GcTP9Op_VUxe85@Xse!Vtdu;mxPf zzmjQ4g4yQ0=>ut-($cVm4V)?pLF!AW9g!9GDBTpMww3`B#j)^N#2i)Ovjb7MlVvzw zF-0bX10|Pr_i)W-b!;1{} zfjjD^l1iqg?kZ6)RdgNJdRErNmydSCtrK?9L4h~{wOmF>EoNqUR=Kl>(Jar>r=YVr zA`K&aOX5X4R1Q8xg;q8&7MO$xt`Cvr>&6Nqqi5}pU*KqY_wj=w2+~lTcrSi+ zd~AV~DWr951`~=7JWZ$bGju1BHc>A{ACWP3cY*xdB$|%uq3yx+tx7hBW39^d$rh4; zT54$m2ydVvGUdzKrCuR~6_9uEMGwZ6X#)NS+-YstvQwfNbgu@#%kK9r@OK(`dXtKa zIFg|osGWF>iKS4!SkBHFV_-(g)%|P zlJE~K@10Y_RjLLCE!Y#9^bOpJa7@Jun<TXWUCqd^FM>j4?M`2Zhnj`JQ_9z;%uq^ z4v*am3X5?5|JAJ&Oz`UV!o3f-AB`^@{a^cJEzAwe`7WmT7CDf^=R=p3MjZUKJL)CtHeQJ@&*&=ZTYl_=%_--Mr)e zKm5dl&Jz#t#Iy*96faA4k1DA^wgt%`sxctbq}f)$rbmtC;BK$4p>mm5j16X3$)r2T z-zbq}`yfVE|415BM_Hnwy;AnRO>qz&=55;WQlx&>qYOJuK4DPcav64#+IT`KHs^O9 zAm9l%&s3Ijx>%!m^_(eV*C;Ovvq;yNz)XqWBoRfYFNn5rP_ha3{b z7thC{fjPid0C}A&Vq7jq<_>|gC^7C;<|MaqQG!6dpxmO$%=+%h=sTkUe8>5@N4M&Q zk1WogLEudmmfLSIs)rG^^a+R$>#FZ9Ow&m(bR3NbrCLDabKqClJ8zKb??pkdJi5{f zX>EPqe06=__J$~*q&IT9A=kDMM^9bjd(j}Th$iY-_(R5vJcu!K{o$S9>~(82CFheF z!nD!r88JfBB{~J!-zH%uV+pJ~RjOwzQy5G3K}3W3g7w}t*0UC(6%5tDxPoMF$xnQ6 z8Us0%O3nU3r)VW+oH#Vjer643L~AN$#(OS3y&xn7^Yqg9QffGxR;-vjMu+pyB2dI<6=~bv8>dzpoG2n8(_~y_7l{N2B3HW zq{i=0&iB5;_=s1LDFXR|{Cjnc+_}x_{hOcfuikxrxc`v*7?^yk8GWGM($n<#M8+jx zqdkNXODIJLDOYZJuI2-M5bqKFtDDv^<<@^kRNt+Qp-=x&X zL88l^(k7B=!^BG;i8xH8+Ty#3TsoBWbLCD*OzgTqXqc}l=Vkmd+Sc6RaxJv1LTx?8 zyQp8-mye%Kk05O^#S8EHkJl^jHL^ms?cR#{>2UdR=SSKlGXPA)q0!|Tx3!SK#& zuWw;1=oTWB;&*8Tdn-ocC?_DD19Y45D0$)^Y_YO-3$(;%_*pBc-s*nIVXi;J}b_smBBpU@p<2BoV&8uAJ#H zRpk=RPd8^TPnMvn({m)sudbD-0)~KOyTK&#E~xl86mK=`)FiFMh zmqeUtt!5Iu_&Un`*ZSz-9dMfvpcmG@Dvp@1Jzuf3jn%GKz&E6NAq0rs-$%g>Y#OPv zHQcgdgKV$286Eug*}>k?;nBh2@xgd@+UWLl0-PM2B^ zRkibjxYbZYGR2eHPRM2fR8)8JO!cR%Hg*91+2z=c@w$kidJLjKMkJ#!shp=gs*>zq zH#r6!kXDalt7~ABdWi#hQy5l^Ya-M~xa&?3X32)m4E}1xd1-GY(4ZC{#lfkyN5ePe zMPux}_0cI>SNuLqyId+AJt*5-P%H zg6rb65ErXRo`F?V9R{LmJET2pbZN8o?4c$ONrr4adwb!Z)5_287X4zO6{7FZ+GSUb zqk`h%j6*YCDhDlE`I5pN5dn5pERej=t3o!JUqtj(Fn1WB(_%tEN0v`R@w!mGA{LEQ z9#RBUZv40S1^jQg1RPGJD%Sr2=*=TQbYnrw1z0`?oD=ku@dV-bC9c46w`r2i!%A z`0?|T$T+YIJvKNPiVPz}okIg0%z@fY?o}idRVm2h`n~8=!hM~K(|B$%|8-7?&*~ga zvoNb}xwMZcBEI`C*hvqLg13&9CM8F}SHt>wpwTRtjQ(!Frx!Qh>cLv(YMi*jg(6JZ z^n4!Fo^r*xS!wwYDk`YDiN8h?kXbAknIhu@#5aV0$aE44@D%z%FXy)wx(8ozl4mbq zqHpEd?(`vf7LqmCiPIp*$4sOKpoJTl;aJFF-qUE}7iunrut=sv12~@K(gdWMIOs=4 zFij`-!>Bs*K5E*B(K5U&pJWzPxZZZlUkbKQS2%l|>AeH)kjXK-zFodXVP-T9!OTC_~D!o?`VRh zVVoOhJdR<{U@02ZJ2>PKy*cR&&oS_4l>Qb>i_^_RMW)?w_$&bsAXhIJ*9h0#=F%Sm z+sA@hSSMSj6^NL$WvGgF=h%Ht0`LM03`}61JJi13d_=!gnx&i4vKOzmL!aOyztoo7c2SOLoBWUwI5hq z94iF3LNrIN>OeH$)9p39p2jj=->ir1iyYR+@v~CxMB-fGN*Sifa%%&9W@u17E@=+B zYS7CW9>)^<41^1)9;xL{cpAjC8PdbQF7V4{yg^S7sG~5_z?eZ~egV7HiIutVpLC1l zmPz_$lNF(bff&e8>e&xCaYH4#_M2tY%}EWB3_=x;Cpl3&dSECXz;tJ}B11jb;Rmyh z3rufmk~x>I6xyb}7K}VOav};kk5(rRO4KeVztMT8#>U%03$shz*z2fj0o9{!pbmjS zSaEOPIu>HDS$mMXw4iVv4mq*P*sGgpmHo&nz$}>9gK8DR>$+N@GE0k94Ja*HDRmEY zJ07%UHZ!b4<;DF&)J4Z?bnBsG%_z%|-MK*WcoUhe+c90LU+bVSmJr_sTSnPPvI-?C zf<(z;jm<#+gK^^}+G1b@B7&RmN^~TyBJV%f49ew_$n%a=;7LL+D3yjaZi&1l)jqZM4Gs z$t#vfK@TSW4R!QviEu*5rDyZ?HA||Dh--3I3-|)^L3uy8v;0lmdX*vm5=7U^74X3aW3lqS@ z+-GqOaYe)>eGR>*ix{f@!V^du`pq98Yls>U-9%OOEx3u2IrbCc>g#?FSsShUr(Qy4 zQ{4OQ-uja5($;VtdwU@Wq{a&wfV3#mJLz$clJ{x5uo2sUj*v`;VU2KZb|aW|8pXno zQq6ZLgSTO=ZOKO`=U6B&w!K(n3Rdb+y9v!qt^(w^ z``h&lE=OB~<+mty|LT1CE!QYIan!ZDLQQ<`9hd=oB=0DSl?g-1g;B=BgP~P4eQ?qw zq)rZ9b6O&gj{SxGAVA7W#7YqTM_a0=xgg*T!6_e8$EHe;=x|r*xdgpY{h-{^=(S=B z6;ln^cm+Rh8y>1dvbOS@707zWGV4FSLk8^i$uHT2-6=(yIA9gtv)FekfQ1&h*GaOZ z0rbhn$ZFL1;)Dq;Qq%C|%0NjZ71wbwQG2s7uXm(E~p=YQ^98R?k+5awATIT~TqHl0RxTUvdaYbLc)N;-bYK*sE1PWQ z1IuQvl;#Ze%Z+12G1d;u2^dk2s4Qs1rmLjl;RB+ToLfQ%>?V^{_!Xzm7Y9JBh@tAz zw|;Xb+XW-o?f_TpG^*@uPv5c`*aW`2YkEbZq$bBVw{ewJ9iRWnq^!rZLP}dXi!VwD zq-Nx3QHt|mQm>r3*{7L?wX(vuPU35n@CmyI1NC2wk8vKcgy;Z5iqZ@TJ!0QHkw>e` zCltDe%wxAY7-^YA3l~T_Pq+9OyC88D8B%BkKsfW*UMGSK#?rRQ!czDplx@X`K&>E^ z({TjZ;~`Ji`Uq~7uWxglbkI(Z2F}^3$LXv@Nd`K(+qf26OCjbBQC1gRelRmIz8DJ?Ss*Ti;g{>i2g*x* zx_@@IYt|xh5y3bNHS&OWi1>8w%+0N=DMp~pNCj*VN!s7C+d$3+gxPJ|k1K>T_D1~M zEJ{+%dc8jrtkVZm-8^^y8xtBUx^1lo zVbWFHmC+MOn8J7A2Px2m%iFP%RG6mAE<_ifg-0B?s$7Tdp)6&IZ(IY(T|7WIlq~;_qHY_;T~*BpGD&9lbk78X!6ds#1}h?% znbi;wW>vDf5}lPffY7G7v6173OMr8fq&(8B%) zEPvm3&b{~C`(7}sXFLlhsxsrY(=p07FR$!gTdYH4Z`Axh&R-nChD&vF!oQ-`cX_|VW!d@OjmwqzFU@iurnw{(1e5>TXK^}=yHz>0Es;hPsf zdv)`CsNljR3r;Uj;7Cl;Fb_AXnu=wfv2}6>6MEsrbvADBR)xb9wOEDLhG8uZm>0Xo zuo(K&DZ1M->IjYvSQ7YwW!x?&pPtPpM^@6U9+N@~EJOlqCn}FzA%pZ&B2q4dwpAc% zn5I*Elud~#4E34Jd#uJdT0_db{7H)`I-TwuS3+R}vR8+ZLH>zkj6vXt%uY{{lQDlP zqe%8&ZvY5O_@v8N@6d|&OcMBM&j zdTa=gLKtz#>)(zkWr9(D+a zbk!g(lGjASGB#QSIhZn@r!KSd<=Gbhk|by!Tnvoa&HnB#25y{|Wx$G2rY?m^nc!Q| z-o=02&|yohM+W7D6$`~T89CP(Vb~In5>l$sg9B{|Qaa&Q`oI?{pYbl3?u8LVu61JJ z8O-*!hi(E-^t?<6xXJ^cP1|PGg|J_ZQoO^FJw5&uR>j9wc!(U!vfjnJ%>MmBY=+yt z3B;yg0*eR|hV^JB=O072J9@l2+_pBd({#PwMxE)&$H_OOC|Wh+3dSb4TwoH2#; zQ!3*#RiQ|d5~>ji6)GHhK1EjXIWoT&DW-Vz5FE*#l<`A4nW@B_zX8W1JxJgI$T?Q% z^ny`V=`#y_mlwy8G~L4wS~PC4SWs;KA_NrgN_~p^X6UQVydiqdUR{6o@@9DiDlmC<{qptChP|+C zszHF{?A(paEJcPZp&GxX13Fz+0~GIBCRJg!DhX*(yl4V|e)LJuvlB3p z3mz|$mk)n@iE}^P;v|uq;QmV@{Bqfr;Exc!A&wGlfDbnkU7o=PYGO5`-Iu*JArxFq zkpBW-o2;6zV6jwKO>6rt7Tz;1dQ5th(_EmqGY2*WcZn-m`PtJfyXP~5y9;aa zkuzcCjh9%L2bj^hEhH;)hkR>MsB|h2BN#2Gg*luYf?_N{)D)XV$03tBWozx$<{TDw z10?CfC3Q&WkaZ{pHMo$ipf2L-#ub&~S{8LXKq;In9g zmQB%sGqV%o8!3Y2%G4$gg6lRd8dZYz2AZrx<-XLN=4oq~o>fCxpYZao`5Ki!OvC^e zhV=>i;tgJ8=8Crq8a`jqQxHR2z_4gN6Z9<7A@D=q2#lY!W+X^CZaK8tRq%+n+I5!z zo)eYSQx_TrWa}ZRUw~^zWn*l5EkuUt$4Aw|>gRl1&xOQ=W@pM1u}Bq#aeu&6vnqIS z)$2mx&F0a~y)S^$Z(jVzH|skX2Jo5Z!Wmn(9?`7OBbcaDq0co1&)UmbRdbU}s1Lap z0l}*^*4D6s2PSnQD`B|;*9GIF z;XOd%sf9PB@=CPIWJ58;jVGr#1zx^RWY}%U4G4lX#C1d+j`@xt%p0bm0N#kxMttLY zr;R!7fMNQZr!A%;`&UalLnZL!BxR>~u-*27JJ!zZl|4#+-n6d7wK%7X85@O>6xk>w zgKAFc3TB_wb6K7FOc*r&%OWzU8HWmCJc+#!Kc%JP14IBx2IhJjZUUt5LG@%o6o?bZ z4xmhvubdbmya659n$v3Z$U#n!5)-8iV)Dk?o`KXNR3!naMLaByAY?AF9-cG`-tMT*jZ1S>8&K@X1PlRpGV&)k)~K#?giBFyoMvtp4hE{4A)$XOf8yiDE0{Jo zlbD+4;MDlh%R{QG!ii_|rv7>oAPr5ykAkbO`YHBO!6L=B#sYdrNzA)HQ^&L{YE#)hABFg%U@o9?P55@5SB!(xvr5E z2k9G%xVDTL1k78|@%Lz(q00?ESRL5yVWq=E~DaN)D};vK$;AzojK%7<%dW) z*!A5{Hq=NI_1?J{CPJhu-#Ls$p}UL6{S%xb68E$RIF8{M#11898KTO_$&_}y%r>fw zT5&HCQ5-}VuHg=6KOSTt9G@P~(ar+xIF_y&dq*X~#v+rN zIa<3+N#V|Cr!^VF(TA1Xu!ZRhT)C3F8xg98%lb(xg8Wp&TWf{(}9Hb z!bv>NY6lUbbtwo|>HQDoB(H~ra(0Ta3XH_)J75md8)yMaa`}O+NEj$symwD-B{r!8 zmR2jdjY{I~E9AKA~JhoE{%Us|ESdCeg$*7;7^! zZ3p6FCY#V6T#_}BpQBSltD0~l`S2bYX5>q~9g$L875lHEFdSfbfL{-atKwmBQ>-6i z54vTgC456n?$nhgfbu+LIx=!FLzXW-bE|tIsSbvH^614I8YoXG(7--vX@F-hUfuXj zWPdJo>d}rO$rt$fl1KIY^{-KGZGO&HacVKf&JuA(ol~{*fr~H{CveYqma3P?SR@Yr zN^B{SX{Gc-Z4Gy(2tmvx%O)$%#(>GWYuc>bx~Y#wiDABa{(AW9UKWqL%pbZZbT5(HT%;;@mtSUcrez+ zN$&=mT%iQu$yy$qXS6kTo|#TtS+zbeYM{uMF0us@iJw5x1V0Wrvel`3$6!!60YZRe zA7GKm>11&Par^O{WnqM#Hsm%>hfvg(po2G?onKPJ!poh`*~?)oeV`gpKK~Jz^=^v# zg@DF1IAI49lDib@}i!NtV=3F!{LdqARdZyrdSazNM z9t8@BzX0(YdykG`!g$bqzZOnr-z#=tw2$4>tj?&O6%ie*vVZr_ugdO`I@ zR%IHNC9|1K;WPBKNpOG%;COLnnTc@>F-;m&)3_rP<9ZsJ0`@Rj7gRhQOm}LTu&0Vj zyu*>fV?gQyzV}5PWH-ORK>r-QiH@$EEF;t_*OgIJMQV>mZ#T$~yBp+3jMuDl+@MOu zSAkDN`@#j_KS9&6>{|Eim@d5RLUcRYMr_IY+-!$e9piRk&#*tLAQgU@z2WO^D8K4` z<1O(9{&D)$!ECq%G)59%D@+7>rhB=z&^tvhaSXv9L68gOm16xN?7;s^K@a-$a03(# zirI{ql_15NC5B89>#l;3)lfE~(j}cN6MSlQr$ggyM7XU#K{ga30a1U9jefl|!9Ak8 zniI5eQgTu>7fj#~*uwv^;OJks-4rmg6IH*XABy_7X=SbG1jVV1D_c(qSVe&hupFSlTOfsBNbS`k}xNAkLuLm z?wO!3_R!>^9gT_{SVS)>LzS}PR@|BQ&5whEG@&6(T#b==Sc3nih3aW|91(Sz%6~v{ zU7TK?1e*qpyHsUh*ANx*ki}k0MTYr4pz96G6|B*;8)EKrpfH~yYt-WU`HHJf|BH2< z-dK!;&%=kw#w?<{anry}%$8L^!Lh>*ox!i8hMoLrLmR8%N&D>N4AsfAQnX>*bn+a! zJ!%=SX<8|=8(_m77z8XOC)yM^HzewCsgm8&+$AA@&?ZC7PDO(jgA}ZD^a2E)rXXT&+;r2aXJ1=|qEp1}KC`A<~#J9-1nb z=l=JMCDM_L?2>Zm@fl^@a{~P31f1$RFyd5_8w`pu03-768?A1h~ zri_2dL%foYs-7jvw+}mu3r6=%L+Mw{%X&7o_qT7@G8as+(zY{z5~DP2IHO@kLa>VW zQ9wNH0;qu zPDN=P@bU>OVf|FR9m(MJm%L}r(BF!JCG(~Euk=zO0+j%mHSkQ$ZV?p%Q2P~R)0WCr zAWi=I^OrxD&?5SZrN25$k`3IXny+TS=vi+j7hS=IHhA&o_6uZ9y%91wVTC`Y72^s- zzXw^Btd2Pt>RkrHb70)B8q!-gz7u>uw33(U=NSIh$`S-RLE+8{B9IvGDV}!8*qL=e=NC_=pF#$Ki2%La7n2Lr_t*p&q>v}(Z_ziwf4ICkmY%eT z7=ivKS*Q4IBnXB2o7p+k@;|;;fVl5F_sI{|CPWV!O`gL-mVpRnYm4xx!&Rl=)m_U( zr!Ixh9zh4?&DlXF|8kg=0bPm382WrX`*h@(#E*h-jYIlLI@zh#a14|(hbv(TVgIhUHI<1q^Vtt_(vnMDoPn1qJc`Szx!)7BoPgeCOZE%O}xa3HpsFu1f?fixK?>V}=u={QAy za>;VhfL(XcLGfLqPXo|HMjH7_VGms`=4ZpLKa&uV3^>4!tVkNMBfmICUic-7XH--$ z0EC>?;TdIDjpN(53U6Q+@jAW%JPi#~!NV3KcOa)L{ig3B1QUExeu}BXR+X5=u{^LC z?smQ>qO#qUhU!idaxhX_e4IMc_sQs#y=+{yUdG*8FKDx1A*tjdDOo1%(ikofB$6tK zDHNO!Ii|L$*7HM>HBW-uic_Bf$)X2_>{0{NDmgv{+xHkiT37kfClkd=S5843jFYr^1*{3k+|y`B0D88Xfj?Nl@a*KO;ki?%I{mYx%qu0NDC1DWI;>WJxj&@NuGx@f()Y+h%^dO)7Z)P4MmddQZsl{&_C;F5lmdtRT({L zqRb|FLAcU0#q6GD)M7${i#7~H#wGI0p@|vtU7#@|Yrm!9H6L6Y>Y8SRRGH>`TU%-L z5A9ny&*#C12-W_PBl6+o;$tX37e{Tt(F}>nSS~9cttRs8FRtITHgyrMhbgWgF{_$# zb->EErQZF_Vts?AO#vZ6v{_=@ISMLqu{?l|C$RoNG+L?t6g(O~yn7^a1v$+giaUC%uPDC}W3c)ggu1TcjZwC+5e)=$Npp$I3?0c4GYrH~ z#|?)1y!Zkb#h8B|gSReyf$`P99wvPsqpYFqVJ`|5!34&v+`N2qbMJlF!Qeqi<Z=ymKcM&hGEMJS=c{9|OiNUD;wY*#bLHM8}ug0oJQck`|ZOTB_-jiLU! z_L6HO^#QD*Mvy7oBQ#R3k*IW{oPHj05Q1u5t7?6YJNsIrt3k?vRcyNT%>!&mxsV)~ z>$;94uarxjL&<2s{!%%qR=T@zaWo#GSoHzysyn0~u&S>pF;c&0KpcvA9k?8yGx(UM z)1AkLJYKKZT4Dr=Fx<);Vg%rzuqwPtWhW|^i&xuhhwdTtVB9#}EMy*Iw{J_f4~(N`#84fS!dra0 zeu`q~Rl+|ND9K5dQDxqBti;KP+o>!PXz*@q*4cvT%tet zA>oKmA$CxBbG^9&`8tKloKIENY6Tzf6tz7O*@>8pB#U<#Eau7~o~n?Q^;fqlQ@>}i0uF67A23COrXU!mDmz1L8bzb?R#Q^kFsS+-#_- z<`(?1{*cO?)y9F(&kxT)&cW(Q8p^d10j&55tl{`^s~o6!G?XbwiOBrYhSSia7bJze z_c)~acvGQhwulEhQ3Ej3!!K-`M<4A!+TVMG6o=h|z46ZI;r`9{cD4_WcgEicgM-~F z)oHD;*9UQ1kDlvuKDHoXGs5jijoFZft(=Wd4_Etf_ve{u8bZu$D{ z?dLaOi|2~HQ56E`To|*Xp1eZo2u3?+h6#6r>C^X|^g@bT(2|*3v^JhXm;@fgRM*uTGDJp7zmb zgv^*bi4~?}Tw@l>o;HGnxbJGox=l-uVs0!*a4Wmn#LfZveoR@;ZA4S*aJYzqD0zWeCEo27N7U6x$(g1&tI;<3K!A*5lcemEw_d1rR&$LT}JC^Z%1? zj@A$L2pGg>C&3fRDF(w25EH6;CSjdAFwD`Dz$w<}2P|a2oV}$x@b!{q%0sJ0I+#U(V8b>w{{5Mlr1DC#rdvNQ&J;#Xp$iOoSLSD4Vz-|2>S* zttsDLSfwDE!U8>GcFvT0H(JBVPW9yLW*=@^GbHAt^`& zq4a2}+*SlQY2?n3Hm%StlHG7tC-8`#%+HSGHSdgKFS!wwxE~Hk2WIo3LN&yt{!SN8 zWmdsY{EHbG`NByWp4m(!HHRa4X+bp6^3Cz8FynD~k0%I)PIW}8Y60N_b`gAQ1ay;R z7j46xqYfnM!h;bXKIRLw-f{HNkyyj!L^KVd&_XHCXUK*F9Lbv^PjI}@OX5*ee1b$0F@PtD!>2uKF<3*=%j9%Am;ffiS! zz_yUbr?g9B>(+>cLRcY77es>1#ZHuge2A!W_vPEKJ_C1x!2-)%!hUv06jN$>1<^y= z8HC5utkdqj^u+xsJjHOejxSM@2D1^^O|qKb>wMwmp6tEU8M5C-xwbt8nrLxCpnI;<97D(|xYkWy zGsjKoS}d~&5XA!?;NM1Po)W}ht-AU8Jdv)U-9Oj&2w`xLw$DyiNJyn~?$old#yh(b zF(j2eKFh)Yp97Ea)owD{&+-WK0JRC z;-Q%dZK0#BSkZVn$HPkZ>MJr7|2??gSO?131(BbgUKq7j)03Fl;7kK@&K+yQ^2l5q z0g2XCqZaUK{8Gcg9}Iu|V-)bB=x;q5o1l}y4rV>{9kxX3N7KiU(vB?7g zfgxzI{xV0R!PZF(cdHjZxclns+nb*ONw}#`7OZZxVv==za2(&e@XY8Sc&ob1o&rE6 zM^?qO!h>{yhJe`z?gi2F^=yGUQVb0=f_)BZ0OPy|2Aoe8AG;lrQO}%`jFeb)HAB*p zs*IC~3Krd@X4~7TvrdEv%_;dxvl!xDg5y_qwJ2Y^+nJ}!o51*%&GBaj{?ZGY@~ z!T7VJ`gzDVREt>V9cm;WvK|sE!UJZ$u%=drQ^J23{;ngFE+CiZi4%9jm8lVWcrSE% zFZ3AajYRYC2q_bjxwRuq7kXf#V|w`_8lRTssYlf=XNvFc=gCAZf-M1prX>QIq^75GEjqv;8ME@UNcu}BsOD3nZ* z5a=AxuKQ{~w#d8JL1)WW*S46>kvfAryL*InVsr>C;;6tedv*zBVdo%8D|L9UPFij; zFYhO8Vr5ccj-~$d>gES9e5@k zu=YS0&;xSm;tPA1ZGT}le7r_(q=dY%#p;ts-udna!ZeM(cN`CA0*4Ec(8*}sg zgW>f{HG|oL<_)%*2-x}(#ime_NJhe%npL0%3*oyhX6XtId;OAJl07*l$w_D$0!u*a zqZQP?WYSU(XPlGO`Of%wyRFQrlAD~nL!l)J8S=oSrH-s^gD(=V-QxGrAhf25dPNx4 z5ym@6)Elqo2+j@lR_x?FPLJWT&agZs&rJ*Vl%xSi!=c-_epdMjfUkN*CBk%b{ezN~eHQtr8)V$Rjzo8j-RAClpNa zGRK<@9MUD!^D=6W!6lrON`TvM@xD|xSuuLGKbspq zEMGE^WNK`KvRS|S>MfEvU%Y-*wF`*Q1dwP=na?XHYgxjzFw3wl3H~a-%ksAU!}>-! z)a`Q)8&K5!@y0o>7gi*>=C{8oVZAsqE=0$~K?-VYiX}O%T>L@GtcY{L2_7jJs^>li zv*@gR%T0F~ZQpYn0>9mT4pA8yB4h8<5cVzavVYHA0Q;7AIk@L8fPKrm+_S!ik6fy? z3=Kp8A>5TGI5dn1AkiHY9+wkV`>HBFr6HNQ=}SUD#F||%)UY6=TO^p1v0zo&S_#sDjPWfcN6xfE8?U@LD&_r7Hu@mnAFbCMR+;Ss%-n4s9m zogoh$=+KwrHF~ZnR{Bf1!b(sEMmgd7)vKGAoD~8zxTaOc4FuuhI)@hFG4(`ba$Lrh zaXVqvnl6_fR^u0f+Qwlj&Ig*g3Y%25)hK7Fg7B!f2tt6HmjaQRIpf|cwFZwQn+SMF zzk+_WMaks?ZMnJD1D-7Si1`0#b~gERh76eb3gMePp*{lJ2hs;-PxcOmc`{yTvOZkH zhVssDQS8=|O4XPE|`tt3V#RN+hYG-H<_M3NVh(UULM$`To-v!m&> z@0}i}gafnojSYn>kx5wWwp}e@1=anW=9~GGA`x(m9j9!=X>>H@>FEMLgTHK?qy||h zsKvw{wbK5|r4S36m$~KK=vNn#rN1tfH8`0ed9%sn`OKxYxqUE<{9SR0E9zvPSm&Yq;{$aJYwixEdI2kmWoIPV+ zE9@$%SSLXCjSyJ}Y_iQlRxt{w^KU=(Wk5$q_DDwbW)ow2v?3N^#rkGIIHIe4lR>Zp z!+hQ;%2z@5YC*QbW-%DM?a&nHF{{vWQ4co$b`P{yZ`-f9z0O6Wv?;tb*#PPC+Yy2F2otv_i~o$Ai#3 zw0$-`MW7!Lj=49Fx|CtJy9ALmI6ngY^Qa4}cg!h`(V+m$?}DR?{xdpmJhJRXLsnDK z@Am98Kph`aAqDZEjMsQrT{#AGnNkFdPG8$^+xv5g&9b6OZ;vkC*)tXOD=BM{53Rep z`KFhHXP8maU%gqq`26SV=?Wzqjh2X5;*gX2fa*Y@=U-0a)d))UI%}}K|BKt3}u z(oK%XI!1v!VB_g4O2r#M$W9NDmH@NAesyPbCBd&xriT`~BMqz4NjNGgwlYh5r1yw| zqyz@Mfbum!G18kjhv|UzCVV-SYnx7Yfj;$R*h_v}iJQHqDtAErX!vJVH{V=PoG&|- zP-t=tZve^-oDb{EQ7CLZj)kqQHWNDs;7h>}+S5zGWl;A9xCrW3dI?%_P>{$QPZyp1 zA%X)C7P>^{2s~Yg3x6VR*^Gg1u%Z0%4Bgcb+72p;F2i-TOr#jYFVob^)F8ghgAlS3 zoZ4_n8;JI>%{d%$Vmqj}3P)g^9HJD5HJ*at+|ZdX^-W_$kTwyT=}gEj1SJ-jBX*8> z4#SFYtvNCfdu+VfhezAv-MkSyDE|q;p%$2uLCS%4F2&AKJrP0^RU+njgoM4>;}5{1 zskMXELc$=5aUd9T&lm2SwgWFmQDdn_(<0WGC`a4!?491bIol`cspN*DOkC9sD5Li1 z*0X`DO=`-2$MzBm((n!uie@>76O=;Cv-iMK8|Y#F2;@5C4D57;?S-Opr!0-r?Gh2>7}uEHGpH6Iy_3rPxPV2_1^NH3G;PA zlBrMT#rgR;_9Qt`bn+1;AIETbxxi{1Zl?=z*lFG|Ws9Drg`zOGrk zM6udGb~+%a#>~0s_eGH``>7d1WZ)I}K|9^#jPw}IbiOCi2uM}T)K_P+19!sJP#rp129E|uyIgu z&o61yyqs(+Xo|a82Iou5Mua8GBgi2a?3$G*q_AiZxI!!!kM}+_+42s|`%BfLGzkY{ zz;9QLGJNg+dQyDwROR*p@-9-)u?UE_?i(Cb_33WD`TCZeMO~0d%90Ax&#O&=39wRM z{|PJ`L;+F;?jGWV8qp7hxJw&Ys|ODr^kDG$m)ExvK&_y#_nS-?<(LHd-}Rd~qIo=kyueKabEru$EoYpX%7#&=T9cV*9Dv&0NdW41Xe3dw&g-C)3LQ7C| z<$`0uuG2!xtxd@c+NRsS8U=O4vOKU;>;x6QT5FxOKDbc9hGC_cy{D%~U;(Iyu^W*d?gBjytyhaDXi4`Qyx`~n zXir;|rE=kK82n|NiUY#7$O)km6nPu05Z9X1@I94ZAWFKt)B$UozG1CO$6n_*s=4N;1xuT7bfWEEcw}=1*$D z)HG{OhG4!7q%riC?k+3b;ZE#%GA*kj;{q3p3syV0yR}LMRR3vFrltrrIcb1pJ%WoNHFK@tOtxLsu=0d&)3he2)lhuJ8@3*AVC zO-*heKT1unVl;O-ZGH|z0B@9v$~?1vq|jyy^Fy2;|A?FFgwM_=m*=R$j`Z_St|mt~ zGJbm}X{!HOPcWB+%F|y?M>|TIYA{jD(#$Y)1P=iaW(pU3P-p@d*%W8b)|@AcINf~S z0N2fFKLzu$q^2r%xrS&m`Eg9VZ~+xO$MUoS+ef2oF+%5qB$?h|z{8-)oFzAIVy}#{ z5_`qDTjj$3iFQ-p7ThqebSh+6z#?{koh8BNBqce5LaS= zPFiDYw>darImTG$EnhXwz+fLtOnC?4A2V724EcD1aW?pOkKwq2YE$fyxE94ADRHqo zWIqt%`AtLFB5vm(ymKVbW(|_1ch1;$ZprGb=BQxM#Qfr{4Qp(GdbWg=-crWpyw(+} zM6Yo-bkKK$5&#H6&jjI{dCuq4T}u!zmrjHcq^@FJtN4pv=fB=}jpk zU>&-;aYWn#lSV*0G`$$Y8l3?|e{5D2qZgLC1xf4>u8s-`g2mFL4@IFH6mjSnMx(T6 z=p?p8XLb=iPsKu3m|W#vN{_^@K(wBP{!tBtU%^zseDW2&3Hhdy8_i+>_ratghg>8c zfb;7&=<>H--u%P2C?@dY`sI4%6(V8qkg2Jj6~S01=X52QF)UOERzF%cH3hH9HVSZC z!Z2v=9M%An9>+9sh9yCV0Fh_3qoMJz5DM&Qi=qusOPOgD#8+sK%7|Y*%Q7r}E+2Oi z=439a54+J7rjG>lqUy|2XiYN3+3U}L&VU~NFuyT7VjZ*Fo4dESRll)MOYzEvy{&Q>CNio^_+*~LlKiy@ECL~izRWVxBa8gvGft!hg+qI zE^3_M$a`eLJLf^adU60Wwr$4A2LAvzqk{Q-gh*uPa7VK=3foSQ03fH`vsSF3s%f{JefjB$0n)Z(4IH}$ zMgddo=1uE`n-=OJCaq)EbkY@Yf0e=-__|g$YZpC2IxCSudD&7MtDeajq{*_EBV;61 z3NvGQ7|`esxyFGgysqv+7$PTSEv|P1xGIl!@xw94{Xu0SV zM-vrITwG&NbHpZJJ~^Mhe)YwRnCxc*fbc9Sx;VxDKHERO{BZwd;dsFp!PICJ+QO+#ld6G(IsAKkili`+UlP5DIK`&u;m!uSdHmqkgLp7Z2-oCzVP!~bOEiR9CJzNOK46%3&2r!yq*9+E6!Qy)0@TM58KCn)o z46=t%>AQqIgM@=l_CSU43Eq%-i?}@#^hNK_4HAd8)F+g5>2?1=1|LY-AHaV`;{6~s z^0tY2o|WR|M27om=0NsHm%^ioQeG~rdQ%#}?3<=`QVDo2U04Vt5z}U=0SpC~DoO^C z`;^NtS;PzpG@QYB$q94Xc&KRALg_edUa90ZFOG-Bj9sj;3uIkw%9qZB+fa(aAo_XP1t zuW#{6^?(V16loUFJc^UZE_G}AfJ(u+SEe%)*cL7i_n0p%d^?Dlu@1N^UnI@2$D;PGcxXo zL}dkdWnb)5<6cJpa;-6=mr=$e7PjDOOXRk;21sOuW*+xrn<`%B@vz-m-FCx`sw&oB zh3XMlY^>cPNRq~zBQw(P_z&4CWN4%ibslG;ex7IHM53OfZwvWcDD^1NbY=LRMF~Bx zOCsA-mqhFs@?hG^M)h{MMISxPdyUF``s&Ty^{dZsSSlP{!T4qR%P(i*l`2?OYqD_& z2Om3T6@2=bUxa9}vk}Xq_kMiUvS4Sf#K^FhwDuL2iA!9C|wRJ5AGxaPjW(IXV*5rZ|Phsh(56k0$;tI$aeZfVrCZ?Kve zkYW09u0YgT*&kxqH>gc>UXXMMtSHz@Pb_fO9XP{u2DZhWLN#cEPNg*zpdJbl1&y$J z3}N-)3eu|3CK#w8P;`fS5$vH&3@B$FokFRrF*xO7nm=hcgAP4@7nKn-1|ES#MY*?4t@Z# zbhxrfjcAVhw$@zMx!u9(Hh#YOV8`h^n% zQS|$3ym4E5W(-tJ8jUrUm$Xm|D-%vyr!R+ul_XUHwXm!Ur}{-b><^~qeA0YlP{9lb ze3mecI1dV++6Sun3dXQ)$(R1NN<(-ClS<4(813uUl%8e4NBM3s6$&0Fo>9oYpjhIE zQLi0V%&Y@ygJYHUm*VInmrDK?+u0@u8=7=dfqY2?PYwTnUU_ ztARgM$B$@07*h+tQ-B%3%LbY$O&y)Qq#i_oy`SfEEx_V=3W2Y5Si=;u5KgL<4Q)@! zCv9$21{BfmYffF40Lp+6RyAr*kR1E*&97JmalQN!?a*)m)gIkn30WhBN(Hx27Id+~ zg(z)l56Zk4)2KMhdxlEYU=|mB2dxb-`V~BKn8a^v5>=ueKm?pS3R-pwChUQBSk>4<9*XDEh50!8Jll}>=4aw%qw!}t-eqJx8Xp>4 zLjUI5yR~yB?gh%+eG1=(O5K&h>n`I*A!oElN@Rd<)o*W4qM|>Y)Iqer(u1W7ZKA0m z9Fl|077i7|2I<_EXi7#>E>}~SnmG%FY#~?}o?s)Ks55FovaRhzZ)jiw>9mS7;BZf; zaM;(fLj}@g$U_rMM9K&014`eF#MxEY3mb^@Fn@9^!%{W0kk22lh#Vb?9re$UgcO*5 zhv>p3LF4FS_hD8q#_X!{mg8)*=KNmq)9)qW+ZV{~&~_ic(2nTF9GIPZV_t)LWhaZd z>@~h6klulG$-MS*E23{~^WHrZ@)t>NMT}{b7KIA~dP>#L`yLWYVw_$lPr?&XkS9Ui zg-eR&rjxVKd&sYKPgDhvE7ZE2uScJ}#c6@N^zF-+!wiEn7??6b%n}WEkd4lAM8|S@ zJ~W1a;Pa)NS&pJY`NKt9+PWY=;!QoI#|Q?GG-%Uue!O}*fhSa4n-(>sy)OI|ZGgJ4 z133~o;4QKVr_qGkV2;$e>%a!9ZZF&^Tc!~*XxyhMVZy*V!=5a^zPWiW7OCJ!wURwi z#%3BcL8ZPy(ltGaNb^fLV=%8U`_TWNt7w&6}g>O9%L)&VicMnwW^AxlSTq~WN zB#Lvb6G-=$IrXPDEt*r+usn(VbseO47kGt4!REVenI3Nt?qrv)fZ|73_1WTLaz=e` zd%fC&W%Kb|h#MiytV=)>;2F7Sg$Agb_^R@KtK!ZOH^wZdk1kJV(8btCG+!D0cgs^M z{hlwi<+=5$p$SC}<*n_&PmCA=%Uj#}a5R2Mz}4!Lgk{^J_dJ}lSJ$7tyg7XP1;cc1 zUcGsJyPkgaeCzYCo+};z{|+Dg=tm|2GN;EiCAMSHH@%YM>gKDj?dxE#KM1otX{%>i zYrGkGnp?2mKxR*@aR=!paCX#}S_ISQMoP#-RjB$>Gen`?w!|gFeY!)MX=H^pu8$hLOKm}DdWcPq5 z>6M-#Nf{0`(zn8A7|gUnBh#Z8!-D1oSvw}V@nshxp&_Tcc@kdjR#qu3W;R2C-4lyy z=OlAIEm=`(1dyplSNA&ua>L>{d?of+&L9tTY0i zeq>Rt2n69n?N3nc!ANfiyG-s4#^>}IV-Bh~qy8Cs9IbegFR1<15{L9b-$Tlq2hO9~ zuIJ<<6-*mTJp!dg>G#Y_#_c>?fru>cZr^@>clzqZ-SO?~uO`p0zrMS9&RRd$ukcUy zbaO5U$Gc}cs*pYjg+OXyd=S+Q*Hqf{Z01sgrs{D@brZV~s7QbtwjlSi?-Z=HkM<_c z4_U&eW0a$bb5k#p1~LGuBjK|6h5bZuEbHNgJtVsZ4LjO9tMMFkNNKFbG`s~&2gNI> z&_D>T?BsN`oNC6gOjlJ*?<~_*yA&-<2W7Ornn4K6yZ+Hf-#@yALGbp?_r3n&H{a-F z+vxX~x1WFi&D~c!<1e-W_!2>u6hA-u+&7hqC&C<(R04LP{5#^3MMpTtz?{+6gCF*d zqh-kt#bVko>}>eLF2C@n!(V>+;^oa2nvpmq!ikqqMU9qLdMLBH?&P|{)z0=_vP^Qp z%Pc$pvgVbH*FpyB+mkb@jBfdU-#yKC49)`aw&%_jn8|GU@khXZbt4Mm<a=X zWZ`9!UY=KLC&r~nm8};nCw$7CpQYXgzo9YxpoIS3Q@qZH^H&;#%y+C9L1E8 zZ0C^VE>;gX8(25qrrYk5(~EQO$-9K7wt=3`tANPb)TGDZi^1dx+aAo5dd++#IP9h< zev{;3L*W>X(F1i;jS5UCuEB#Ek{KW63q-@X?n{KA^Dl`{=|VqDE`h2sBRm?VVCn`* z@An)XH`=K$M0P=<)`-i^Gz{w-saW2}E+)|MS%@I8`?nYO`K3nO=b>R(#00@-!+4S3 zh5<%Bt%x-0EQ10Cm!)f!GQS@V>HT04ZTvdpahaaOG*YdfRw>!l!P$HiOOd2I6QCUs zmir;OH1uDK=x4Dy$faCdeX-7}i7I9fSa0ce?-M zP!Of9E#FR^&0<0D2u_>^)skE(y(sP}F;+KZQgRx|2Lfjl9e-EZJ;St0+@NT>M!u|g z9qSHcVYZsmQ{XNtQIMeAwY|yJO;0zd0W3VHk1tRjos4B?%wE%w)VxSKS}bZ5y{Q0z zE8`alyQKhpi(tE^M^GJX$3<%w9Xrsw8HMj(b$oa{5fTXq5+3MmvScv=roC4;mKi;9 zu+rk1u*5Pq9BwRjP#KmZ%Og<1!f^&Y%g5QN6@4oAB)IV#I?E-$txu12YGcIX>gbc? zoG6VxyV}bL}wm7UL96X-hlMfTyjZ)tyv=@ zSn28t`h50r#D9+*R{Vp^J{A7=c4IIlFGpt348+I6fhf(e(|{uqqp8-rcVDijpJJ!M zO?ipB6S~y0+?VP-8t-o-d>{$J@^wACh{c)~xYSP>k;?w!?XJIg`w*{>Y4G+Nk86!x z9awgnyTux3&G|LcJG7?^H%a(H^wjZld#X1#baU#XM#ybboJcmTDQfnRruU`-faV@S zz-OxuGv6tgP3c0EU=hgH-_rX`?}B(|G>iuN?JLHZa;Wu?-gh}UHzsLqo+d^Ia7I8G z;g(M`%7N_Y(fB?(_>a$avSg6i%?c%7U}K$rLK=*=0CoWBVm#%ygQ_1P`cVjLXVTGv|Rm3_#^%Yo4P@FoY8hx{mJ_AlLvO^U4 zw$L-~^N4arV?W;&gDLiOdGpaUcWo|7q$c9?llc-!ih~{-0LzO_P7zzPX6Y$}N=#5% z8!0b%<{|QxMbeYb(FO`MK)oiVav^3p)pi;{&dSiS-PlshmTNEg0f~vty~@Faue4d( zq?Qw+-?O9$Q=vzDt2z1)DW;wGl2I2TC(KLxwKOs;@>dTO`+`Vg1OuU<3yIkVC-=rV zjjUmvLt0tG_Q@CzB!%>z`)(&IfP_8P@58M$Z1q9?il_#oA3fNohkfyI0Cr$~v2ZCA zj(4N~qK<>>zl+Df0eAdM#USqlTuhl&O37R!rRS%(qm82IM59BED zw@>p@1y`?)>lP+csFojjNBye}(3e&VnT*Y@{ebHI6&b0+5BwFGsheMLOu-9!m1mMP z*m#i4B#IiRL-r;;rtXiJhOGMIGgs2u;nsDcR1HX0iqsa8#q-X9bgWA)DZs+KO%89z*k)PL4;G9Bi^K3nK?%7nhKB75ZZq&ritlD$OL&f-Z1y zG&{U{tW@F9;gilM8cdPg&l2AN6FGAqW(8A*iW?bVIPM{6AoZv{N=r9};TdIgG1nf1 z5+#&RT^35Q$SH|Bhn$7J8wKVF4K#1mukeyxU^rTp&XEtC-`4H_kSng>(H$~|*UWg7 zRhN5^yq~%Ct_&D0Y*mV(s9`%Q6mwq(F_T!xf1$1Bw#blivZ4}HjVw{c7F`wG-{Gmc zv!Y3_0t76w0_`=hKJ~zWA(phB2a9rIJ_s^>g04%;ATrv3UVt1>90N&bC{^|JI5p9B zYZI+El2)*2o02~g$R8S}!(1|Z12ft*g+GP3h@NI6uZ9kaZAM-R7t94ZBvKb|sOiO` z^&2D}vH^hf&_$#rmXF-#O%YeuS}9SQ*zG%FUk9k$ieRO5#k}e6w`zd;f>AS-bnrwX z6*1J*pvb#1IgTW3>?zFw!uF(Cc?=_y%&?KTn7B}bwc3*1xXui2fTg7+A1z$(r2`Zk zDCoQpSFZ=GuR$6r5eXe14(X@`Bp4_lgAu8G^jH`Ll2%n0#WF(3Ohu0u&*W0Ie(G5! zQ!)E=kg$R7m&`}04B7gFTB8i2)S&6fSyTqe3uux${PYr@ks|fUoU13092$%tSYljx zx(!6!IXp#7P&%7G&A-pWA(t{d>)R}Ws@NQA$GnhY3UNa&Jp|w2#h5*5`JWVO5=_g@ z?s%Fxe==JzB9Uq2oYe;aIn9gbHd$w&PQCR~fb^MSpU2M*E|i4|g9Pqu74M zUdCcCIpo^~%HAn{dbB}R-nRubq#g3Sv`)&m&C+>-WCRY+h|^j&m7Ord^m`oA=?CI6 z@z@qq#jHfY;BLBH1p6FWPqspg8!LnqM;xF!Xa+yQu@W?6O$PdHIC8lZo7Mm;ju@ls zySH!XVSRq{gXwRVBF;B7<&0v{mM#G<+=F715!lBq5pypSzz9tzPKQ|#dp z?ti`*%aI_*H&1ZTG}m%uLxs}6mZcId{)lx@MrTIh4sdXIdvpEsqnkSvZ#cVo^|QM#2j#FKKpp~b zb1ky3J%m!eX03OS8_09T@`y1GL}hDw9(AqhIaIC8!4mslMb9O-f!ibAda`N@y>b~T z^fP`gWp`x-h#p{9ifGy=Z3M4HwP37~RY;V z*9C4E7ikJaF`p|COuHd|wKM zL(74ke1-rqPxNzY!J{;rAEE$TO|r_tGN^9^t#`Qsx`&;~^rF9-&@*LRZo<$m(D5tc zW=DM?f^{dD-U`ADWuf?(=*=x##Rq44o(1Jk5Th`E?3FH)$D6dN2Oy!vYY;#wf(};l zhb1lnLzER-LN*u#h|n51>t@tj%6zrFlE?0QMt1Sgu$(ep;CrMmcxDs3K|-zNA$l?r zNqEiJg6YKyFU4(0X>9mfYG|DPW&RnlrE32rYcy$(tI|Cae3Jp$*`Q~%AlXo0z@2@f z;KHFuzj@(KK+AU}u!U_LIeq_-Ab&iDFKDA68d_CrL?hxW>9i^!N5lL8ILeNks#x=QF0wJM4~%P=8V-Q0_Sj3KB^^D!n?wPbh*AL1b}oliaS zq&o~uw;oOzdBR>a5FI9kH=bThb&}GB?F0OJ(@W;XpvF8@kYciI*OfwF9m zQA3B%1f&}?I)@q*V{v?kj9M~6bh4P9KyI3YI?nL8FshHYhu<43+F8-5GIu+fFcc{f#RBPY#GO+?Zx+tT z8W&;-#}N!Nj}Jgc8TO(czUj{Y32&cP*_M*SNw@@6>Qy3ZM zD%R+bbiIc4tkQn<0?}ypCZEa3?$obSwa}ElgQvuEig?d9ZzOh z`&XpB9`c7Km6%NqPsJ4}Mc4hO-4n$bG!g`G}4g)Q*_L)7k zQ)+ zFjUJ7VQ3Qn+ayt~DPuHF=~82eMu^XVwkbrA!*G5qQ4q7RWOGUESRAiD;VJKwr9jeG za9$x-b#TLKq@Sbrqp>YSte^$LQnw)s=Y@X1MObjwGl|wr_9WxD8`Hdbo0%*c&}1!B^l?@C!Uf*c-r$$;I+`wpilTS%=ITBaa^961M|3 z-J{s{PcUVYqy^QTM`pMap&2ESk7&!~f?SG%16T7a6H4l#6cWN!MMYtk`h!OhV*8nI z)(q(ja4_TifXH8>tQa64o5-$!iKi3tZK6+cWm!hhj$6pVQGhA3k&pJ@CRv3~#CdH{ zL^2{Is8*kERqDa)bprnO4x^$DLBVN=XK+XQqKEbLg@7j8_ac$3+EURbD0jX|PehH4 z2I%$|9M;RnE`jK?5Sg?doof)=0H3Hf7f;P%W+x(^ZC65q>4@&?`hhYZmD)FCW zp-!KRfja3h2zPH?HWf(g2$KS%{F3qtDNnbzrZ1aJYWU5b35jH=t0@#$i%y4^O@gVb zUEtG`r$r01OT8|ZcY-JoQoN3#q=DcWNvpB1eUn>|$}5$SK^7aqs}CW(+7pK(jz_+i zQMf84l%o87N$DFhCSn?iWz~>g$_;abfLbB`2Ig6X;W+j2bGC7s_NZX6>_PTh!eFxx z5rav;a42D<8J+N#gG5<@Y||kxGDt1PiqN8zngIq$vWzL7Sn0nYwb&=L@?9ekt%I`ywnJVK|5a3 zea#*tq8e4Zy|6G1u&lLqt7K@P5{Bp~DAPgiXqCVqJRd z?FKRQ&gP?ZX#s>3(l6YSC@QmiUeTTgq%D%dUe`eKA>To{nn8*1WeByE5EAn_Xeg=k znKWWw1FStbV_W_)xnSjLKq3Mx7~Gz==Z)Ugi%{iw1*dj3OpngD1uDUF00}uQTdCGk zgY^xfu=&n)-Vi>BvYr^5o*>4hn5Y9~MYRfs5{-PK%IJ&PnRR$WoEm<*3olLxH%_=4 z;&%1otDDzv?-0(;Y+#7J@?Te1d^;VTwDCK~ieU+aiLV=>dSTIs6o77lJfueo<}pJ< z3agYLkuLOeL{l`HBzst+vI0a1x8|D^K_f3k`w$*Q8%UUgrl6dJ_(II0Oi5=S>qM*( zFL(;v!fcd=%YLn`@BZ?O7vCkAC}}+?lt@U;!y8oRYaKAWb4r^%NBS(JBfK?^yhY;3 zAV#mJ`>Isz5(>vSd3V8Dy~GQ59O?&g!Hk_KC205Jt+*1gesdypg}_t(gr^<{ za2<>6)X^&nsDaFp-OK)}n%XJO-KhN_d(I5*u?-mOg3cE0S8_rWixmk%3}74YuI6Lc z-FU<;#RQ}a1aCS+vI|#SrzP`g9!dLiWsOHv7H^2it8}f0j0iiZGq2t(RF zRrFM(18RIOPKWUtg@JV^fe|8+7#}Jg+G1HZu3naxa-N98u2wfo=?65GI|ALDE|+kB zO4P*_K4L&71*Wpj=FC&2#-FeB0^rx>NLu)n+0baSS_0+99;wAX!BCbIqSYK@<1xz<4yN1VGIPS*EfN=b_34 z`Db=RFu0<_oEYV)0SxMMACzUb`50&%gB?aiuF0$Gm#=?jO%>OnU{{`CV{uwxj`GkW zFmAwy!~H^HYK+u@Fb5bC1sScwsf^~aR6fPJ`OqkjDcMgmLHqC}gmLNp^Oa+R2#vBA zPzWhx2)dS04`%h%3tULogZ9e(;_0>C!m8>7{zNa4ju9=zp?^J?F*Gv%7 zD53{A(E4dTeg%ZR?LHPEx&_dL=hD3X(6!k4a?Ab^zNC-9hceFwUFUY(xNo9!OdyJ_ z$~pWW@|UswFVx#Ckry!H-01DEC+IX+_L@}gj_k0$T>=*{A1350`|=#uJLhY1YlvM>4_** zxQ40a^q2t;sR}(xRKXMf&}0}#h@lTb*cM3H+vcFZMe~BAJ4{@FA@EW-KQaw z>Y_!I(Q{vqfJ}&HUCco_AXJkG6!A=fl1X<|&{uP`YM2lsIjeCrV`E(~6pchnmOD8p zV~Q-H!U(d>z!0tw#oA3XP~`JqdV!eA!~|+fjl>>OW?FQ_8+N%v)F{$}!onAPN5XCM z2PR2awf{g#NW?)=RsDTv{FijZhP|mnsKNx8`p%|!!xHgcLqG|xDk2UagWf%a`*RVj zc$yhZlCTVSwuqc1|IE*kqM&1}2&|aQ2_^a&q(BH}A)&Jj;u&O`{v}Ji!8HBlu!j`i zmyRaUgtSs+xhun(FBPeD7nn)(sT2au1)icFM z?IV6Tky3L$#7?8{@<4Rv3e73<&|43I8`g&EN-re(7&NU%>EuM(SiyDMbUI;M@_?s$ zMCTPv{$;n6fsP}MHv+O06*H@|@pvS|t^$T7pe-Z4!P zVpwQ@Z>)2Az2w8OkzI}E1`jI$r8<30QX_&D-fCSp2O*=<90>B%sqI)=Y zhSill0PccuaLN=tCna=h(Tg`e|ER2ch@C8F;W5++h697BMHq=_mWo8rs<1oK+$2HSH z#N5Od*WitON^Y4Jb{h_cz z@)@W<0jizqp^V3{rnaRvCu_HlEBms68M5g`;7HMXkg)3=wjbghh&Uc^@<>!i8ZJf< zkMf9i%)|K{G>oQg)BG%GNO2w9bzf>!(r@$hTBvOWiCFSP9L-kH_SgG|nVNxE937!Q zrT8DVeeuow)yrSW@RaS!(BRmC8%LaYn(Y&|2z;GBuw+DYAY>DOFEw{5LBcYVN^>o6 zY*9dlK~LELP=?Ivp;>rZ$cHs!DEBa^ZXed=s9VC+*Aoy;=EF7W_&93a-&P$T7j+!o z$w}5;-NL>&+Z~GG7mNF@P(#A7Wv(>u#+8mxUpgQzSbw1)L7r+skeOVRREeG8_A?%N z{!yQakM#i1bCaboS&)UHOb5h(_BDEdoYrvNV0zHIf_W}~^=9?rbC8uS|D>ACDDyc? z*9ri(X#B*t&1R3>%^WY9AbQuE^K(=Hm_J2ztFskKD5Ed@1vI}|?{H;~T%6fiX;xf= zE=aa`>|!~k$$QFg67!q#o4gTNB@T26!FR;3Kzbz-S{bfZQ+s(t%kmFcke;@In@r`EsbiYge5uo+%R zWHAlXHSNB*Hf#vOzxl;rkYP-L2@$aMn+^#3uJX>;PcC;{o$JC*=R0@~oLUq-k9Avz zg{*gh_=ff8>LoWVi0_F~v;L0TN%TKnA%8OIKe}-2<#wC5HDW<{p#BNPUxL$gdHwdy z4Stv_Pr5G#Y?Y#T&OpgEBL1A5K-CCzp!_|}`Zj$i!VmlvmH29Yp}b&!iLW>v*qi8{ z)xsUyISxI_wqx@GDSaMFOE-=8ywosOR;93-cv3Q5}R4AV34tYyIv)tj1YVW;pZ6`{b(j6GOp zFIJ(b#^olFa1l!VBuU#iToz2i3_TI4P0~+^^jJ)c=KwA~OrdFv)mvOynHiIxe8i6d zIrBa=ElPS=>4{Zmt41*M>Ij^Ov(U5B+C?(G41vET*Nhih3_iC6xFsCj{$v*6Yf)}q zMzN!X^gwN|qKDg*nToAgRj?3|AV!J^PS9V_?v${pD)H)b$A?RTp*&8>X~R$jR16mq zFcZ@&j(Dho2R97ubfvI{royf3>zOHptH^d(Jo2Y_IQTlr2uhf6 zz;r0a@I&V$<+p_%GloykpThlmF}wf^La9BpMgDdKXJK4DL0`7Ozll)_o-&dc|LQ zwDHw@paT+D92EowetI^?apmV`3~xdkOX~GfrP}KRJki=S%kvZ!60To;exsG*n`Be> z9!=dwS7^g7j9>0aSNHnXhUv#)ZFrfomgCZ(m^(yZ(3H@yD32xYiwO-Eef>T!>VBX8 ze2ECBZjSbVzy?x9%F`CrScCQQrf4(dyghscBBT#I;^8n}2>Uc(E&wk|>=y|)+3x_g z!ytqy;x3ixGNGn6ArKY8HDZLMPr!DZSwFx;l}AD{X$z0fypjrQBuQHkI|xb5-E}CG@USbC0u@!~Nbh65dsbB*pQ#EOepkN^%pr%Nxea}sT1#yO zDvN6_$7BgjS7muAupBB;SuZ$x>)2UoHKY4$C-Z2bP^Ym{;V4FSim5jY>4#+k(eg4H z*)1gGB)pXMNOr>cbn1ped7)rzNBB6qT7ZYyW`7B6rvvtNJ6`Ki_#K(uh@sSS22!koh3-Bd&bq6I$&-vrei(RQw^kC?I$AQhnI=pH)d41~>Pod%4?*2GwWFgUMQ zhY(JLT4J(Cv*XDXPOdRSKQi1JxSU42d_N~H;B-|T3am`32R*jQm{X^( z$;+45zqpw^e}0>6g<431#o>xQw&4OKERrU{Iwdm5W3H9DL?$FuHvW^NQ_=+#HO;x0 zbHv>UWo`l!cy)O%_z0mlP?Cr$IcnVVbs6PYIE$|y{0zY&_<EHsjoAPV#k=4&S9{s7$x(Y`KBFtpPclnM{EsHA!? z<^W`GlOKvz3SFarN-8gTZBJGyM?^|2g+Q*@K`;}*8nH&M0fYLvZo>0c%#ofi*uRcSf{&+9*8cA5-e2glv$CcD>I|MbWmwa-E zDi{`+sr8ienBI*{h;tmg8J1GjXY}&>(Ig+9n7pilX}3&1qIDaKB2IUDaWs1t5f!vbfm_dsR|A;XArzNEF=VzmKYLaJI*Kb3l!H|EanTW9&eirSN<8K zuIEc0k($4oN#On8a`I5VX7mYPGM+kJ?A1&a0}=q~A4Zj1_=hR;Nk;L!bUelzU9vk^n6ck~rxv$3tDD2qyZz{^*x_iFVJE&av z^ySUL?p$d#-51;`NXV;JE++^J{a%p?(OXyJRBb!?A?5C=inH>1MLIRXAI>& z1<^$s*r!@QFfar(fL)+_CW{o)dn@$-nh3aoSQYhtda5ezhCD0*gkGG=S+EHl4E=(^ zod@zGB&U-qenZFE;EoEMd2}D!CeRKy)|`?yH{lWyYp8OcLo>~A$6Y~Y00HH7a+0*M z665v6aSuJlmr%AWCA9Qlde1y8a&<~1eBXOYIHTx*t7*~!<*>r))4&@Ou4Lek14Wzw z`{dmUYN)_5#Z#{Q8Jyp$98(pJNf0e0A6>~c9ttyEAOx{9c>DV6R0`PJXp5?x3`MSd z!4&kTd^w$%&ZwTc5?e~nrYy3wdrA&9F~7+BOob1CEbe1Gc|s1CpYr}83W2ML zKEHlhm61|B>J(P6B?3NCO3KqIf|fn{X!K~j{b+pf=;6cd{e#i?;mwEptffx7KP?)w zoY@4LuVGB=~PBJw(mQUa=3t%|*;aWBM5u&87#6@3_h#Pv6n}>X51|kPl=Bk*g@8 za{TFfdTx{_4wyd1TFx$e9=S#qhH68H_w-B73PrpcH4WsVH%Fj?Ymr3Uwit5)o z_e$+RE6sjA5C~AiN~uK?eS(3`^1>t#38xh2y|SJTfvXUwGN`;mSVNHHnucy7$}TJ^ zy252I^Y55Df(CCOHUo$i8Pgw^v|)zm3oStu`9kGyJxj}8$wLAlvsa7{SP0Gxx#(HC zKtH@sFT=I6K|!q8uqq{2RH+zgP=YdOo>f{RM@fEIzOrxw4||3H4~a50C+~o@?!J5! zJS~g_QYZz_6hcCuqY&A=8n86^VI?3YS7*3c^qIXtB{K3=QfpPY&e|mzqt<0Lb^n2d z8{uuF-5@mU?&hn-&6}G${A@eK*hD6Ktns!r=izd65C%-D;>tY}3M!`K6lHn}y84m_ zDlAT{5JnucGD-L$r?Y4VqRu5rF&G`cb)E_Gh$3L35A{YFOATN>m61pl>Ct|;hZv?T zTX|^W9Ph-DqycDP<;xo6C31TH*f&&Aja3^SlICHg{Xsj~a<}{$k`I~z^2{?5g9tvL zOgJM`tKfQ7E&wP*t{%Y;ht8`kl@!rXr%PzEp?-c6Gk{W3X_HMr7lWk2!DzJxX_-B{ z1OwUnaA$kpGcC~XViEgY@OC^KB9|r>xSC0)EFjiLT7JjaMw*^S`;PkP%Jpfr9>$L> zbzhcc5PiO-e-;tet~%ps7pjJ7krExpvz>?Dv398&+6>t}*n`elU%s{TCePi;vU(-fswrGu@Fd zs}tn`saK#KNVCdgGkF4l-0Ra5Wq1xMx5o=@r|X4{PQM?uAyoFt zI{m(pv-a8h-$*}@untYC&L^pV4pUHgsTpE3l3!SjkKM;<><9yz)uFvPM<(VL#a&Xc zjUU$97)kka0+BFV2(#H8kA)KVWUpj27Oe>h1-d$QR0;?i5{@q4op2PUfL3fwI11C0 zlf=`YF1!7*RtpkSx1i4TPE{Hb+D|!aFmr;DaAkv#)d35ENZ8I+PzTRY%Wd|Hn^(#9 zrvp_%N+B21D`B?ub3{&c$nMsCB!)U5M*bp|$)RhT$j}ZEy($Wqzv84@yxIate6odu(rlxY z4yQ>#whGufN*D zG3vPky#vEL=St z3GMwGmZV1~&UHjL(K|){kO8Dx_8T%G`oID4t>4{!J^=4{*O}sS27=ZUx#qH6x)e$X zi_E-&KJPw*sugC@dzVh1QhLxB{OXL1(R`6=4u}I7=L85F3fg?&D^v|ek9~aeD>j>4 zpS^zdGkgZYaKIXsh}Cq8c1nE4PcJQEGH0BWW>hG?Xcik}8!SJ)m_9{lg~`fg;G)AM z^L}k0gT7r<45~Cjbnb>#B>hRj12pbzkEG1kL&g^vG`*Og!$5wDviy>D zomnf0+F>l&Z-TG`#b{(4U_yhKO}?@l!_Nt4a-u-GgXJD^UvS^cuxCIToQ9E9kws}up`#|yp@`OLYc5vaG{iR@>;n%k>zPf(% z^B<-U!yn;f{_N%suZd8j<;Ppti1ixAz&tR*Nca&@|Hls?o}?e*=k!~h@A|LB&2F2@8~~j@NVuFtIf)p4Cj$lBNa5auiJq?DE4Olg);{frm$s zTkXivd`q84h-$M-p&=+WR$;uJpDxFBh8~ax9>46$w)OE{AcyXS%Z0}d>sOoV(E*?p zhysTq2XkdM27STEa^W0(LDaSs|6>peo?fp2;4%`5NeRJ&TL7tR-66eiwdc+|H*9)> z>WpyHLj%ZkWk(qY4)$8`)A`Ynf`;;y;4->Sj;=nuQU|nZ`X+W?&!WQs~pm`laS+s&FtpvF!-K3H3?BBHx<^IXbCHwob2ZL zSImk_N+xIJTK|GAC0%iJKK*&W29>VJq$1!VsyN{KN=74=Xde{zs8^M4Bq?A@BQxI9Q^wn z^gsU$|4x4I-}uMx{Wss4{NC?R{^sxCI>P__9q|9_w}Jod?)`uBj_?2eUlRT&-wE%x zJ^9_=*{a{~pS=VAf5hM4>OTMf@DBJe-v2M~{l68z|E&A_|4;n=%Pze7{ev$2U&Z_X zM_u^;8t=c|h5v*2{hr_dqxZu4f7$(hg+D#_|8L)M|9}41dH>)2NADX3|M_?D6A^#^ zviS4=_wWBZasPh5yZ(Rh4){;s0sjZ@fPWp~!|w0jy#qds@Sf-Y?;^Yhf8GT@i{J0L z|9=qSJ@o5c>w6jTzvuja8S%U4_b(&-67=h&reFWtJD%@l{QgOI{VV#|1IN!5{?N03 z|02Twq%&-#84pZ{6+{)g}Q{y&QFp6CB4!h3%I)jQyS_73<5?|@hM z*Yo@TQ~Z7pe*e!Ae$ZW?ClTKB{(t_C_3eXCzK5G$-&}w8V(^{6hmU`KZ~5W*;BWly z@0|ae-}$%x+TZ%lzx|zm_x->9oxk&)fA2eg_iq4P{lU-WKYwlTfB)-zfe-Hw{=;~Q zYcT8Z=l#KhaK-t5INX@^Y=5|0<;Q;0p~&-;VzX8yM3|I0jOJAdMb_Xp!%T*7N+!{5;2HGCsYJyVmD}zf%6ZKln)l|B3GREZ^@ZWimd! zKR9dVpK1O!c%1z?8~jsz;MYkv-y8g=ga6U5NhjYM{Ac*P{CR(H(cJGs_bcb?V(`CU zI`7Am`QG3kmoMYf`-98o`CsDSjvQYl=((1XD*K;ec z?^a<-OI-xq5dP`Oiyh=vLk^vQYl=(i*vyt9Or)|Gc!uZsm<53*|2_t%+NC6SwkU zxAI_pe?)F&u-o`e-NtX~RvzM39-_}ry{9$)g_wWndTF6<NA}2uZ8)Cu9w!zZTwdH_@&eV zqyKAV{-NuowRRi7wLX5i-{ZG-8^5jF_-)1m)rb0xy`SWTX|=<^3MA54*nji z^Y6dZA71kM7WI79#jU)XTX{FP@*ZyGJ@n<}{JniW+{W+aHop7z^>HhAe|Y7Tb}NgpSa~`Zh59#p6!%gf#JO1He)Ew6RU>)omDV?)z(MJ@wA6ga(pdSv_I#UK&u=jC)5T;$%(XWQF3DK zLzL{TW&8c!Qq4Ds=7^G$YO|u`WZI1=Ik}c9#-HnxLaQGor_?4#$*HvSQF3Z6am+ub zPoq_dlGAFVqU3bii6}X}7BAMH(`V4iMadbpAyINB?O>FgS<_lr0y z({@J5+5enaj=$$_`ITFa(%5ADD2+vOl$|Xp%FdD;rSc_5sZ7aHDo1jZjg=f_K7+#gL^Ew6r*>5FM?$j170)CQ5&H6d@gUNeRK zQ(s<5Z8_PPe<^K;Wb>bz|1r0GjqzXT^DCo0C979nZ*`SM4lyax)O{~+b^U~_J|lU{ zRfe2@9D-{8L6ob%Gi&v=TI4tS{HkbeqLeq##*x*1FK@ZNu{=t7L+vD4-S_gA>lb&T zl-JWflhu)ySw3%j|8WXX>yTHnT7P4GYH6jSyQEx&ckTE~die!gKA>ENijJb~KD(ILXesb!7OvW6ND znbzv6o?6m>MC;E1>X)~SEYCie&#kH-laCzORrP5SWsvdRZvE*D`TlmT$nS5PgZ}tR zw?0VCyKB_n5;BL^_z%Nt{mbtUMNae2-zGB4^rcj7tR+nF(Uy#dBIzRId3-fi@!Yo$l(KaX~>cldQUx1HYzB_LX2ylkj z`~$4^&=7x{zr*Ts_*s4Z!<_yO`=8VJS-aZRR5qVb|F958P^ilh=yKTt{48Pi0Kd=x z`76-R=CXzvOA2n|>e4DaBv^hVtD}4^OQ!VqvH1pBt+r5y%jWWzi2^LXA=XfrCB*Iu z^tXoj1?r0nb2%b9Ne@G6S$;lJ8v%|Gmpv@R?r-(?l||db96|m;_JAO})#m5aCkYO9 zg*iI4iU^L7uXLyhtu`ND{{WZG8R~1Xx||L_e}7+RNSMvv;%~JCI{kzEY{rE01&)rL z+NmilKK_9rj>~_0vNQliAdnvB$3N5-D37vO{GAr7BhWX<5fotawOd@Wk3(!>fi7dZwjEr- z&ej%LH@n@(ZV7ZaowlGLUs*$&-J$la%*5%iSo~~KnSU&*nbRrL_^N3_f~*!-n6Fdj z8DjShu=s`9?LkhL-4ST_5Ak(hjMX>5C(tjz9_o-*6zUgh4GOe}Swq4C!<;Uw%_3W6 zHFgkfmL}xyXZHyT3k?mm$ewUG144sB0vryhLz~6d5#r|z^m9d-tZP?Q-2s6y$Nh1~_G1eeF)!g#ms{8Y(SGCh!aLvHJTv!)&3UPT6PDbV40YKZ~y|DAZ|n*qwm^ zVUf%FeV#O?wFUb4x*Sqzq5f9i5S!H@3v=4+LH@p$K&xMvZ%C-y#_8+YLEi`dcG*t5 z)nReTF%lFOC{5O8^Ob|kD#7LJ@9P)kkmUR<(+0a#9r;Ql4slxSp-z|0Khzo;Y#Nu@M`CCH*{$;hBwF_^nCbp_JBRj$_`^4808Ws@XCui+_@5?b z;nKmE#T63h^z*X^+ALvCUzaS|-(r)d=dw6L0_^{`-L9??;l{$l92RMwR);Mx%qAz6 zP=_@rz!56_a7zu!!EPL|QBQuMtsTa+F8>fYBL#%YipsKGVW9z`vUgp9a`dg#}NxPgn{-x54Mf(T(`N#n;CzgP) z5Nn{Essf!3t2NYOcgl&%IA)#C7%v#iq<5@xj-M|spr)2II3 zUVLo#%xt!(0905W9w&lj6 z1LW{@$&qSNX9_u)`dOU5PB|mWF9yl$f-A)3kY1Djx$JgbIvB0RHy}u+v)aRC}xo6RmYW|1Q+ z&>kw^#}5n(bjY##&+V3NmeYzW%s>NiYW#&gw?{n-7U z`|l23)S@cOi+6an4sD&Tjvd=}Fgkwuy$U>k{5wZJlKgv+`Ce0Bn)Feqek9OX$GVR2 zh^lSMv~o17EnlZyn7R`PYL$bpQdh8YzRA#aI;{}}p@HBnzf z(x+EX0ZUED=>IlDHP*k((VSQ>l3@J)*zbkN5WZ~v=b)Mq(lx0XAjQG@JJ;Vys>FB? z`+NMza(x+kG&enRyY<2Us3Lu+xjDZVW)6s)pL(-vc1+?nPjgZKoX9NsA58pj_5SCY z{`;hE&-&}DsaMKBR#CbYsL@sLE8yRX>N;AwI<@;pNpP*M|GwN>zu)EmbDA3eVVcNK z2LCdR%jpW2chxjydO(P*-_mUy@>>?vkvUdmvH3gCQRkwUyB&qbj4F4Ea8+&_Y8=RJ zV=%A((I}?Tc;!8`uF47?+IXd}rafc$7lwPQ<@ssa-wcnVvW(wZDbo)mkEMJz z)47kY?t90nD%*t_A=J#jG36+Pv`$~U>Jt+pd=G_kHI*P4`-l=5)U zbfxUH5Van%pPJ%3Ww?CHKrOF@hgL)>7cTYfli@oV{(<3%)cCSr{gtx+^!+8KWOzNL zthc@X>ebEu}NYoVUQG`Sio<+5L;Nok&=q`s7+HBDxz@7KYqyuOEA2ND~2XzIBw zwH3z8l{fN`tCOPa@1{ywp56|mo-(T}>ceIKv{PBksFeLtOeytVK`F}{ z%yPymWjXFSmW=1QS<~dwnC7`dU8gcs*Q``lSGhg6s_S>+cH=no+@|Tz(y4M;MSZ+t zSQcg1>BH6WqQ-Mz7^-V-YIqOqkE(sC;p*6aI~!(%#kbV`E0l zj`^@SR>6kY96Mou9D}oPBW}mNco=guj3Q^h@NtrPc0`Qro~)n$CB6%`{8Ju zf$Q-o-og)`M6{@>KFBJdaQCqf+J{OYUW<`DVisSPxxF z8LumOGH$?QcwQ;vJtTX{JtQ^XOjtxI<)xHsG_5Ati5;*X<)g{-$h+}6zQvzPnQvmb z$D`)!gB8(%>YkGtuOE3fs(VRlx^t-R9jWnNlHUsfIl8=%sI2bwsOhtjOJFc|!rn?5Zyb3wp1{YHzf>-h_ZQ^2a<4?? zluDUC54jw=um=uQ%6L=A8}S@Iq5PF{iKhJ^$CKOAYPz(TS-D8ltmI-?4eKZuXqt;0 zfdg^4a-OD5BQM3RxLY|#(@v3Z;0t`GoF(_I;!;b5Ggl<^jm58xgAguj$Bp0~HL91B*# zFr}2YQp$&b9^~OT9p@@1YT6p|Zal^CYvh;YI7y80b6{aCqm<>u zhkTlRo&1U%H>ojRPAq~Im9m^Bm9qSSE9?B0Z<=h z&YHH4ycf^lZG5JTkk13;*lCUBCslUPv@B#_a#3;(a$6jU^Kpf8hoEwYo`irj}h z6Sv`6%C9NIHSH<+3)w@iVW{;=s+4joRzVl#?UZ4f)`vU>rz=A>Z5eqR?p20p+8OdK ze1#vCO*JiAMp2fZ1hZgnWfOU(g}3&RVOtC8E_NL+wxl``D{@?HFe$+H>D$)J?+e96_Y z4Gy7voU*j0%_XlT?;@Wizr;A%jqx*LKBX+D7`ZWa$FVp|DdVjrpTcLTzJ{vSBeqh; zOG_?*^{_4F-IT>OZ76vPc_DcV`69kW)fa`DE|F4}lZ9Li8)F3Jy_JPDZ4`MHu4MQ& z@=5YjjFHQjE-gwAF8cBck?Uh;9EsDEvR*66$MG@#z&N>$@zN<}{R(1zY=_;HGQW}J z<#-hDQ2tCAB(E#v*m;bcTq)D%B9}oYcEiC+8E+bSGhV=__(>__#m;NYKRcGh`WT{= z@j8(w;5s}?`FUl4rrjmKA^#vJ%4d}4!wT3G!ht)6)J1S*4gUJhUFJ8v`N*V7HIZ1wFz7{NlHI*`67d5?$B~GkE}c zGI;}@#YgyFDf5ZpYs@DL7Q;H|RLXdr$rEus9>sG?8Seqv!_Sy+dbBB}yqHqja#eCL zw!vPM4=2weZ^tY662B>BzVW3Esrlx?^4JtxD`mXC^tRj4ng1XjnU*cN-^D4c~$lqocAGx-o+#QXRTJ>;CNwkr{4#2m_Ga-D))1}iI* z$g|YsR@hmYSl&01C*d4r0=dpl-i0Ue20l{8)wGY~Xayw8dL_m5%2;wgg^vJ9{VcgJT+7)GasvzV{58X+QeL?Z2MBBydJMr7T5G| zx2g9vdsQwk?+caHH0`XihGyJ9t)*#qRIa0GPn5D!Z-%I#$Pl^taJl@YT2%FeR=O4-=v%I>oL%3iYl z%D%Gw$^o+d%0aUI%Hgv8$}zJ2%5k#&%89c5%E_|*N~xs1${Di#%2~4g$~m(A%6YQ= z$_29h%0;sM$|bV>%4Mn&Qp%3N}NM=1-Fs?ghq zRDs?;WRvywA)BbTkHtz^30ZZ$eQZ<~*EBgq^!L5{m9qZFl+r%VD5ZT|QcC-{u9Wt1 zS6NT4Lo20yyi`j2c(0W9@m1MW`kqsUNIx;E{-k}xRZ9CvtPIz*6iR6y>6Ef@S(MT~ zax0~MSe4Q~0+iA|l=jh4DV3w{ zldJa8PbuwVh*BzRv{Kr~M5VNk8A_?VdCGa3wnVu=>Q5={V}nxK$2R3M+LyGCBPvTJ zpHfQuxTuu&;ic+hyR;wWPEC_tt)HLLDR*glFF5LaWnp-ra<_c0RPK@OWw`7DeY#+5 zj#71+=U#b#q1;FNkew=3p?MyV?Nc74&y+*5eJacH7Ag;G+H&O)*)E1lk>)8U3%y-P zqd3X%^UC9#H%`d=QI)0ewepmlf0d^-?YmMMQ8cyvXXQSa@*L+2nTfu?FUa{=4ZkR_ z6G~}p`hEP%npQ^TE1W0(lH)?=K+=PXxeT@+{+Fe5Q}43tc?0`FY~ES zHutNGEQg4`y!O}yd*J{ahGTFN&cJynO;(?uG*Ml1e{Um8Q`3h_6Va7jtSh@tS9Xc6 zRJHDXe2RKIknPdif%u)_9@KA4jE_k$6=uL}mS{k$O4cO&;fy&cK$5#(_=1!v&`T!w3K6Yju$sGlEXzWVt=yuk3Q zXg>e&ko+9q;%EGUUY^GG#m0n~4AWpH%z^pP4}-8Mmd1)$9qVFabYeKR#ZK4*`=R;# z#whXxoQ8975w5^>xCM9N0X&9h@Dg6fyZ9Ji;(Ppxzc9L&QLk|^F{}!)oTXKhURlFR&oFq#*$bbt72_zhz@Lqt+6AT&&Tv3 z55f^R4yWKOT!71P4Q|36xDSuuDKwwIxk|o`5Aiv^#n1Qyz2t>T)mv;#h{-Swn$PXz zAm>9r48o#V8Y^OTtc&JzK2CBtw#81^1N-3+9EB5b8qUE*Xg(jbj=TkT;Q>5`XYdkU z$Gi9#U*doJd{N>UMm?v%beIKmq50gAja(3mV_B?>HPL)7DVXfSme?M2%f?VcolEsLwt^J z@iYEFFZn>BAODyTlVKXnggG!D`e6_j#nM<2t7Bbkj7~J4D{D*cggvkys=hwd`i{a0 zI1T6EB3yy%a0~9j19%M2;3d3{ckwa4#P|3We_{04#(KuZ#FzrpVHV7V`O$_2u{f5+ z%2*TYV=$V}(X}ME$1d0l2jDOqgOhLu&ch|R3iapmWPfZU@4-WO0?*+UyovYmDZa*! z_#Hjs81)$w9NLKjTk~ z&gYSMXnw9!&)utf&V)Jff483h+v)yy$Ma@;Qej5Sfj(${zAr>Bi50Lq)|JD6w zwhMFr+1ZZ5SPCm*4K%MyH6=I0HrNS!;s6|u<8Ug@!Nq7^huTP%Q-yv!?8jp$mk{;g z=JhAJ#HZ(n_yXVKH#Dz1#p1l9Ux$>1BqyiCtY}_u@+AjhF)WK!(7ethUnSDl$BFV) zC_T5wu4rCg8cZIA`gLbnFa5f+XkM>0uPf>IGi3OGx?Xvb`Iy&}u95#|?c{$}ZeHj7 zZ^v^#51H-FJYN=MzZA!^SQ-D@>!JU5y)K&D6_4d7!PJ-ubE3ID|Nrr0wD13~A3t|F zj`aJ2a{Rp}e?s#*Y&5PL#zk*Tg&EPj{^~=vq3TOay-zBM=J(yq>#p?}9*kkw8Y9rW z-rAo$49DUWoQ>vnR@FzQTK)#yj{EQ^n%7q^lW*b!e2(wXysoNlfT{V%!~~cO)1rAj zH8K!`!#*ZLr}kuEA=;tJQL0PG|S2B zP=7u^#@|CejOP6r{r;_#UuXC|e2V&W0#a_?m-)%?=(PWMm;_U!c|Rs6IX~Lb{N8IR zvUwk-2Dv^q#b($B&HFFv``+rf8-T-c9ID?vQ03-*m&N2&xDj{Yel+j5oF!kuTlf%P zpn0F=8`*>7Efyxk{~MR<{oZKaFUd&Gfj(%%LTKJ6sX(rd z_0asja2VOVKN3Oif&Fn9jz#mn$ZYZ=T!|ZSJDT@Hj*`#dWxR|}v zu3!Q*?|-O%3{-g*%#BtIMDxB!8FFQ;g$*$T&HEkg$maK)dy@y@NHp(rsD2dG`pmFzf$Pz{U$K{b1kLYdUn1W?^FGBh@>~3Z zzc5BjWBKO&iKOH-m>JFQaa+jdeTgFE(pU*=VgoeqM>Hq5#m?9Z2cmf&Vmx^o&c!9T z8qNC;JIM#|IG)45(7f;Pi2M@G@0Wikt7je6{)vr=Fa@T^Y^Z+^UB)->GZbKWaa4VQ ztNB&MI%wWs2qm|~4%iL*qIq9oGi50Lq*27>7!`2vqJ+MCx!?CFP;8yFY_mdzlBCo^^xE=T5 zQ9Of}@g_dN=lBl4qUxJlEjK16z+{*fvtVwtVjvd9GFTZ^-`#5d4KW16u^o27-Z%(H z;sl(I^KdDy!Oge}58??l`-8YjR(*l1^)vg0ct!q*f1{UtpjG3=!NiynGhlYihyGX) z_5LMfKIO^Pur4-17q-HV*d6=fP#lAkaTYGb6}TR^;a)s~r|}Zr!29?N-{Keig)tHs z^%NhIVj9ehxzK_ESOiOBC9H`J(1FddEq2CUX!fTuf;=9l;apsTt8o*mzR}fwKY+(k z?~g-<|3$uykMJda!0+gp(3oFrOoS;gJ!Zqa=!XTcIF`ezsQ2q3>(!VXiY>7NcEi3n z1V`f}oQVr?Ij%#qKaf4-!)W#ka*=!;@8MH?gP-vyMo(naQ#?$9sWB7g#QbQ-!l?Hv zBK1*`Tm$Q4Q*4H9uoL#g0XQ7T;Z&T1dVeIcyjA3lxC8g&F+7V`@D@JA7x*5(p+{n) zeqv!l)cZM+<)>m$I2#w?O5A|kaUUMVGk6(q;sbn+@9-@0*3--oAI1=^#Yh=GoC(pyBxCS@lE81%F|TWJW#3$E0ZX^OKpJ3(fw10?0+MG*-fz*Z>{a9NS`N?1cky z1dhjPI2V`TYTSf7@c1YSN~3;aVM0uf=`btiL0=5QVptZdU~O!KPHcf@zfxVveQ+?2!ihKo=i@S5i(63d zmrC~2A@WJQfYV=ByuInW1fSO`mE1+0$sFc`zIHAY|$ z?2p56EKb4MxCmF`2HcMO@FK>{2RT}81)nf z6JtuufY~u0`eQ*Xf#tCp*2O01!d9sFJGMiSA&0k7d*e1fm>6aK(x8IAghi{6+DGhz<(K^qprl2`$&V?7MU zFl>zx*aQ3HFdU0ha5gT&mAC=7<32o!XYexK#0U5s-{Du(G8y#~6BA%EOp94CH(D_e zi((n9jJ2>KhG00h!!Fnx2jNJZfYWgvF2yyt8F%49Jb~x&D&E1z_zFMb->COnD91&d z%tn1B#*~-=vtvH=$AVY_%VRaHi%rmlt*|3@$9^~z$KYg~g$r>7uE%Y-7mwg+yo5LK zK0d>@_yvDqj4Vd|#K)wV1~X$Ww4mNkqttH^a%rrDHL(FYusOEH&e#hF;s_j%({L^> z!PU44cj5s&j_2?%yp50WC4Ru~=$X~1pV*iPQ($_`hI!Es3t(|9hgGo-HpWnFi5;*T z_QfGM8YkgQ)cdcL{j;3B4!7bSJdCICB3{RP_!QsZXZ(rLvl;ai50hYO%!D~HKiaV{ zmcoiy1M6c`Y=&*H6ZXUbI2`qUH>EzNlIP%JT!kBP2kysXsQ1q)^SMI4g%9xszQ=Fq zk=>}DSeOu#V>--=dC(Vwuo#xbDp(sEp%YtRd+dsRa4?R-i8ur2<1$=}TW~iX!jpIb zui;&Mg0Jxt{=jHCjCzWT-k1tAVh;2{8y3QnSOKeJJq*S$Y>g4v1N-AJ9E*DYr_v5) zlNaGi+<@D0A0EXsco}cv1ALC}@GELLjr!61Rh8u@ASc7Lm<4mA6$7y-mchzc3makx zhGRSIg1vDNj>HK#9p~XvT!Wi&7aqhDcpk6f9ej+h@FV_>Ub&2Vii3$UC1$|vm=FE2 zAeO-LSPko96LeuK?1{a9NS`N?1cky1dhjPI2V`TYTSf7@cPJD}e0uN?1v$wP27PQsbE0GH!B z+=_efFrLDTcpdMd-k-26{|)&w{>12cje3fQNia2L!km~N?N}H~VMVNgdOyXo{HEk) z*ar1}i>16Lc>oT_aX1y{;9^{b8*vBj$76UFui!0wh%fLxenXFZM*YOXgqR%DVOGq8 zz8HkXuq;-=+Smx4*aF*QSL}m>aTHF(88{!8;ac2+yYUd7#0z*0@8T1Dje5V%vfqA? zqxl&16c@cQ6=uX7=z}&age9>8R>yi6jCz03vi#QM2<(CVaTt!pDL5M!;Y!?q+i@Qr z#WSe)LoLg{Nq&IO@g06eEx%DeF);xq!?c(MbE6dlu_%_o%2*2)cf<6^_fhbg$r>7uE%Y-7mwg+yo5LKK0d>@_yvDq469L3@i8f; z!OWNoEf|1Bur!+ejMpSLKnFI*wy5_%F7?ohJP=3Vc$|iFaS5)*O}G;e;Bh>Mf8lM^ z`!$#4za)Ra@961k)K6?ogefpRX2ZPbhXt@Wmcy#3_m?iqZ%huwme>KiVP71Aqj3_> z#09t<*Wp&&gNN}HUc~Eo51-;2{ER;_x}Q-`@h}Od#!Q$K^P?RLV=1hNHLyN5#b#*s z|K5q*69=H#AN)A-RGfp0aTRXF9k?Hl;aSxClb8K=i~JB@;CnRtnfLHF>L(T^#N?O` zv!dP~z0BX29E8QNELOqV*a)520^4I(?1O`G6i&n$I3JhcTHJ!W@erQG3uyL>f0z6O zU*jkIfzfP6J;gy$A@ggLRbyFe;kHmaSG1HMYs|- z;C9@HNAV0^#+pW{3HikjW1pO}~clVMuSg1OO(fmjsFU}da@4KW16QUBclsrN4A z-Z%(H;sl(I^KdDy!Odv?-oQcf2|SNi@eV%5SNIYCMy~*)p5kC)Oo7VU+@>k2sG*` zJ|@L9m>F}S1p}}Mmc~k06C0odo1^)=44uina3GGr@i-0V;u2hqn{X!{z~guh|H9k& z2w&m{{En&*dHwT0n!o#yf}9?+VP5pZ0$3c&VO6YyjWHBkVh8MoeQ^kmM)UV0W|9}+ za$JX7aStBGQ+N@t<2`(eZ}2nz#OMW#dWwfhFg0evoR}Z&X#PG$DRM=uf%UN|Hp4d9 z347uI9FF5~D$c>hxC%Go4&0B&@GM@zTlf%P;CuXr9tDm1iG>Lf$f&2d=#8l` zBj!LKv|%AEi50Lq*27>7!`2vqJ+MCx!?8F8XX7GVi5qY`?!%*a1~21He1OmK9ezcv zuu(rTF##sSw3r2RqZI?OD3-y>SPL6s2!>-j?1H^<5RSwNI34HVQe1mV)ViR;>E9{8fu^$e_F*q4#;X+)2 z>v0?I#UpqcFX0WmkI(Qee!*WDqo`3&@i8f;!OWNoEf|1BuryY}n%Dpx*c{tpXY7Ro zaRiRXX*d^`;A-52JMjP>$8-1>-o{7x5U*Z z8)GQ8#17aE`{EEBjgxRDF2Lou4!7bSJdCICB3{RP_!QsZXZ(rLiyQS650hYO%!D~H zKiaV{mcoiy1M6c`Y=&*H6ZXUbI2^~}RGfp0aTRXF9k?Hl;aR+bx9}mp!1wqKJxUn$ z6AKe!a!iL=F%SA;5EjF-SOsfiBXnX5Y>!>B4-UprI1y*yd|ZZWaSQIoLwFJ|;5EF9 zPw+K z+=oZ;3|_{Y_yC{dJN$}TDWiU3VggKtX)z1tMk@wlQ7nU%u@*MO5Ddq5*adszARLJk za5~PzrMLz+<1RdiC-6L8#XI;IU*Sjm8@);!^%MsaV@k|`*)bpbV?iu|<*^#p#U|*& zR@f1{V?P{y`HL(FYusOEH&e#hF;s_j%({L^>!PU44cj5s&j_2?%yp50WC4Ru~=vmgNpV*iP zQ($_`hI!Es3t(|9hgGo-HpWnFi5;*T_QfGM8YkgQT!71Q9d5-vco*bLiXC+vv>a5#>`sW=B0<0{;UJ8(Z9 z!?Sn=Z{b6Hf$#AfdXzWnCl)5eM0H;#*~-= zvtvH=$AVY_%VRaHi%rmlt*|3@$9^~z$KYg~g$r>7uE%Y-7mwg+yo5LKK0d>@_yvDq zjLJqm#mA(W1~X$Wv|s=h!O~a>YhnX*U~_DXov{}V#1S|ir{P>&f~#>8?!*Il9M9oj zcpD$#OZc7U5<6fw?2AKiG)}^qxB!>q zI^2qT@Gzdji+COH;ZuBrpYbO~uWHm&JWPVAF%#y*{AkC*SPCm*4Xlq%u^G0(PS_I% z;BXv=Q*jP1##Oixci?_JhG+2#-ol6Y0^j2|^r&XkPb^G`$uS*f#XRVXL0AmSVil~7 zjnIiLuswFgJ~$Xh;Y6H)^Kluj#VxoS58+9?fYP9`qMQ==n88HX? zpbZOQNvwd?u^t9v7`Da;?1BAp7>>m$I2#w?O5A|kaUUMVGk6(q;sbn+@9-;XHH`X+ zi3u9NLKjTk~UdO1Xc$frJV zlVdu}ih0l%gRmHu#VS}E8=(_hV0-L}eQ+?2!ihKo=i@S5i(7Cv9>SA&0k7d*e1fm> z6aK(x^^AIoi{6+DGhz<(K^qprl2`$&V?7MUFl>zx*aQ3HFdU0ha5gT&mAC=7<32o! zXYexK#0U5s-{Du(>KpYF6BA%EOp94CH(D_ei((n9jJ2>KhG00h!!Fnx2jNJZfYWgv zF2yyt8F%49Jb~x&D&E1z_zFMb-{{rAsHZrX7*k>f%#Qic9}8j$ERWT&E;d0Iw!)6s z9sA)>9D|c_7B0jUxE{CRUOa-Q@eWOYDH%urCh5(Krcb;sRWb>u@XX!NYh8FXDB)hfnbhe#V~| zy|GbG@h}Od#!Q$K^P?RLV=1hNHLyN5#b($BJ7G^8fWvVdPQ^L67+2v&+=2V?7@ox| zcncrm3w)2?(4&b_Kd~?&CdYJ`74x7k24OKQi&d~THbN)1!1mY```}<4g%fcG&c|iA z7PsJTJcK9l0$#(r_yk|$C;WlYf{l8Li{6+DGhz<(K^qprl2`$&V?7MUFl>zx*aQ3H zFdU0ha5gT&mAC=7<32o!XYexK#0U5s-{Du(ni};J6BA%EOp94CH(D_ei((n9jJ2>K zhG00h!!Fnx2jNJZfYWgvF2yyt8F%49Jb~x&D&E1z_zFMb-{|Eq>M0H;#*~-=vtvH= z$AVY_%VRaHi%rmlt*|3@$9^~z$KYg~g$r>7uE%Y-7mwg+yo5LKK0d>@_yvDqj1Z%q z;$u=wgPAcGS}*{MU}>y`HL(FYusOEH&e#hF;s_j%({L^>!PU44cj5s&j_2?%yp50W zC4Ru~=;<`-CpIR+6qp{fVP5pZ0$3c&VO6YyjWHBkVh8MoeQ^km#z{C67vOSShg)$E z9>!C65wGJte2Q=IGycTrp+-H$!z7p*Ght55k9I7KrLZE_!1~w}n_(O5ggtQp4##mg z73bh$T!kBP2kysXcowhVEqsVC@I8J*50_Ctu`nSf$8?w#^Pn#VVKFR=Rj@WTLMOJs z_ShBs;9wku6LAL4$7Q${x8QC(geUO=Ucg4v1N-AJ9E($MHZH=IxB<80K0JzN@G{=S2lyP{;aAj}8TAtr6JRn- zi&-!?S}_odVi~NAwXh+EU^uqJF4!9f;Ygf-({Uay#WlDYci}-if#>lm-oeNC3P0lC z=+)e)r#P4xQ(^|pj``3Z3t|Z@kJYd)HbED*!j9M-`{7U=gOhO0k4Z5NX2x7-!2m3RrLhv$#0KcV=GYcHV=o+tBXB%U!@0Nw zSK}t!i3jjFp2NTJHa^0a_yND8XA7f#Vq+pqf$1?D=0!g&fW@&KR>eBl7(=locEE1f z7l+_zoP;xR0WQaNxE1%{VLXKw@jBkar}zdx<4=s<(x|6+m;_T}Cd`TX(T;_&6jsC< zSRb2WGi-yMuqO_{;W!Sb;v8Izt8gRk!2Ng(&*Bxlg%9xszQ=Fq(aNZwSeOu#V>--= zdC(Vwuo#xbDp(sEp%YtRd+dsRa4?R-i8ur2<1$=}TW~iX!jpIbui;&Mg0Jxt{=jIh zje3fU-k1tAVh;2{8y3QnSOKeJJq*S$Y>g4v1N-AJ9E($MHZH=IxB<80K0JzN@G{=S z2lyP{;aAk!81)kq6JRn-i&-!?S}_odVi~NAwXh+EU^uqJF4!9f;Ygf-({Uay#WlDY zci}-if#>lm-oeNC3P0lC=+)M!r#P4xQ(^|pj``3Z3t|Z@kJYd)HbED*!j9M-`{7U= zgOhOg4v1N-AJ9E($M zHZH=IxB<80K0JzN@G{=S2lyP{;aAi;8TAtr6JRn-i&-!?S}_odVi}B~8S{;gNihv( z#$0H@04#!~u@crqx!tVyqav4`b)#ckOpGZo9cDpux%tU9EQrOiELKKy`SMtRzFfJD zqAQo1bmi^2uAIhnyI?OIfWvSMPQn>D50~I7+<@C~4<5o3cn+`NO}vj!@il(L@95!S ztba_5k4Z2UX25Ki2dx-@g|Q@7!0K2JgE0(SV+8iV{x}TB;uM^Xi*O}w!0osXkK!4; zj5qNCKF4?X6*W)l3lm^6Op94CH(D_ei((n9jJ2>KhG00h!!Fnx2jNJZfYWgvF2yyt z8F%49Jb~x&D&E1z_zFMb-{|FK)KeTxj43e#X2*Q!j|H&=md9#X7n`69TVY4+j{R^b zj={+|3m4)FT#wsuFCM|ucnNRdeSC&*@eBUK7}1P+ijPS#4Q9q%Xu$w1f~Bz%*2D(r zz~*akacPaJ^5aU4#?Ik*^C;YQqn`|%i_#VdFV zAL0vqkKfQErcpn!Fd-(#beI+Mpf3htF)WK!ur@YAC$_-$*cJQWU>t=LaR$!EWw;i% z;BGvGC-DMa!@KwdU*jkIfze_a^%NJqF%@RS9O#2KEQBSo0#?U*7>r@q8Y8d=_Qzp3 z7N_8BT!bre18&ECcofgzWxRL(^9z+{*fvtVwtVjvd9GFTaFVM7eT zaBPQNus06EkvIXT<2+o7Yj88}!h?7M&*N3RgOBkQe#F1gD~?f5aWFBa#0;1n^PxW$ z#1dE@t6^Pif-Y=@9kDz1!=X3^C*v$!h%0bCZo|EJ1W)57yn*-e8NS6Y_zPpm2N`wV zj*m$(4Q9q%Xu$w1f~Bz%*2D(rz~9NLKjTk~E+4@4*MCfcsWB7g#QbQ-!dMC`Vhya1O|coa!A{r{2jFlV zhf{G5F2+^35qIEzJceiS3f{tp_yXVKH}ptg)K4r-h{-V>X2m?{i$Pcn%VHI*jg8QW zEwDXy#XdL~N8v=Af%9=0uEj058xP@0ynxs6Ed*YKe^ciHQj? z8K%W7m>aDah()msR>oS`5JNB=+hG^%je~F`PQd9n50~N^+>E>MAfCYUcopybU+vuq zn2q)S|MAa^WrmU^G_s8)yRkHtBKum_F)|@zhG8aShM6-AMb;vUB8{ymq6i_4qEsqT zl2lVk5>d%g)F|cmexLLFjC=0p9R2=Rzw7(Ie!uR^xgPU5_xrr=`~KX^xzBwTcnnYC zIlO>{Q8FTC9e3 zuo2#fw_Zo*ga4SW~(;-`2JkKzgZ8Gpl| za=!iv#gbSaD`QQpk4^DrY>l0;JNCf=I2iB7QJ9JM;r;j!&cj9c6h4dV@g;l}-@^Cs zBm5k{#^ZPjf5AVnaCu)pU4dn=0)}I4jKCYP1-8T6uouQ)EDpsH=)rq%GS0v`_&7d+ zD{u{N#Fz1P+=(CHC-@~E!5{D^JdZ}+Xwv;G1h2w!SP5%jJ#2!_uoZU1ZWxXIF&>j} zB#yxeI1OjvTwI9Da22k@&A1JB;BMT9pWz`qh9~hHUcf?OzJ4l>r7;YvVl8Zlk=PvD zVi)X*eQ_WrU^1rTIGlvjaW>A!CAb_{;|AP<+wmRTgCFAo{06_rGnk7Pv1kQfKb63; zSP`pZU2KduVN2|QU9mUz!#GUDR2+@taVpNlM{xlz#g(`gU&O8WCho!yF$cfGZ}CSw zi@#&=wZ8r-hNbWttb*5J1H2w@!8X_#d*B^-7Y@PUn1*9=upTzSX4nclVmFM&{uqx*I11J8(Dd z!_V*#9>bG(4liJ#s=j_Ij-@dSt70u|h>_SF+hP~&iG6V(CSWqA<2amz({VP=$0fKN zSK|iUg4^*O+=CzE0sIEP$1|9V7qMu#ub)a_S*(cFu`V{oo3JHzz^>RE`(Yd=Vk(Zt z@i-M{;-k0#m*PrXi!b6(wRH2#WzVv*{;e!3E` z#%r+}*1<-2Bi@Sb@pg>DJ8=*W!xYTGdvOXrh>u_vK8erZ^SB9L!8h<-+>4*$K|G2l z@MruDgKGHtClpI!d8~{zu|77%o3S-^!tU4y2jF158%JR#-iP<&LpTo?;Zyi5uE&?~ zReTHI!;kQD{2GtrDf|Whz``|s{d5JE!3r3TwJ`#3z!umJZ^K>~gRwXiN1zAq!O1uS z=iuY`1g^j}xDj8**KsF)fS=%(cm#jIpYS}I>wNtaf>&WVtb{eN9yY;d*a|yhH;l&q z7>`Lf635^KoQAV-E-u7nxC+r7;YvVl8Zl zk=PvDVi)X*eQ_WrU^1rTIGlvjaW>A!CAb_{;|AP<+wmRTgCFAo{06_rGnk7Pv1n~y zKb63;SP`pZU2KduVN2|QU9mUz!#GUDR2+@taVpNlM{xlz#g(`gU&O8WCho!yF$cfG zZ}CSwi@#%V9bf+x!%}z+R>AAA0bY-{U>od=J@5{^3y0uvOvAA_5g)*Z@iAPCPvdj= z0%qfD_%^=coa|I&-fb#)${dFD3-+XSQ%?#eQb(1V{7b$ z-LVf2z`=Moj>1g55AVl^a2_tgr|?-^k1ye?_!hp0AK~ZtH6F)P_zV7lh3otJ=?W}^ z6)+rYV+7uSEwCNlhP^NbV{s^sKo8!7lW_*l!N>6lT!CwFBfgBU<4*hlKfy2Y2>yUS z;dwL-eEk!GS7AAEo_L9*c{tp7wn0BaUdpOGN$7=oP^VHHqOT- zxExpG2Hb+%@g3ZQAL9Z12EWHMn2Q&&XoRnyN?=*6h}E$!HpZKhpg6=&k3xB!>pN?eOC;#PbUcj1SagJ0pd_#>Xh-!Zt6uYZbRDZB=&;C0vlug6=k z4R*#Jcn98vLvT2z;aHrA58%W27%s-A@i}|}v+*^28{fzM_yr!u@9;GKihp8}#=d^K z60gQ%)onb3OXpO?~}z1(v}I7>>0u0&l<;*bZ;QUKoS1I21>q2k*hj zI0NV4 zUgc@tt32Fmb8L%UuqXD#ftY~Fn2zIc5>Ch2I3Jhba$JoYa0_n7cW@7Wj0f-={2tF> zE?&f{<4XlUud+5z*x5AFt4WqF?#$ytW z#4$Jlr{OG|iwkiXuEKS=8MomM+>QJ2GdzUH@FbqY3s@-Fx1AQp(inzSu@*MONNkR6 zu?zOZzBmvQFd5Tv98SXNI2-5V5?qd}aRY9_?f4Gv!H@9(euLlR8O+6tShSF@pGsg^ ztccaIE;h!SuqAfDuGkyh}#{rCkQ#_#Yn{)&HM5joI%KVOYktG|i5pTuzcsoYnoj3@GVG3s8y*LFQ z#78g-pTuYIdEA7r;2ZcZ?!`~>ARfgN_%r^7K}CK26N)9VJXXe&Da_{VR!6< z18^|jjiWFV@5B4?A)JSc@F{#2*W*k0D!zs9;Yav6evQZR6#jyLVBrv7KV5-kumXl- zZH&Mhum!fm+prhLU@Q*B5$M5ta5B!oIrum}fh%wgZp4@Ib=-*`;3xPc9>E{*Cp?cP z)Ym^DcomkzN>~HyVH0eIt*|3@!)WY}@tA}oaSTqtX*dh#;zC@8t8g7|#%;I*cjG?% z3=iQkJc;M<0v0Of>!;#a8pE(E%I@hsZe4-)^@_jqV0jzBTi*nmVJqy2_PjKjc7Ke= zBpiwMd~^csX*dh#;zC@8t8g7|#%;I*?fK_E+MnSe{O|TdT^{G}^*|fOcS74A|LODe zP0Y_L_y)d1g55AVl^a2_tgr|?;{+rgDA*VT9}R>L}I*Z+;QZ^ia_J4T^>eKv^pFigP=yceh7 zgZKz$;gk3b+Sg;3ThDem|L%VOpWfd8>E-{wvYp%Y{J(vB{=c$5{T;W~bNqS*e3$sBb_2-+KP{PaQ{3aXkG6|G>grcf112 zUAMu#nEWrpO{K}CO(P_ za4G&z_m{u?f8XEp9TzUL9^CKm*?#-?`1$YgQ?HX>?mYCLI(|lQ9K8WsU^~1GdtnU5 z;!qrc9=r!9;|!dGkK+@#0@vV1d>LQIo%jKMf?whh`~iQ$^JsYACIqj-a##s#U_ESt z&9D`A#BLak{V^Vsa3qew2{;XB;apsZ%WxI0!_Bx2ci?W^ho9jgJccLn9A3aeyl+z+ zOJf*T#ah@9Be6NQ#V*(r`{F=Mz+_CvaX1O5<7}LdOK>@^#tpayx8pmw2S3IG_zixK zXD}BpVo^D8>;75-%VI^Wj&-py-h?f&19rvU*bn0{5mRwAj>oAu6CcF|xD;37T6__O zzjeL4CUy0(Dc+1W=ileEz|UuCav~WlowZGs_a;I@L^+xDzVCFEG1=OdHyw(|IQ=cJ zFtwa9_0?;P@&3+k1!HoGNxPCU6N-z~`w>-}9$Sy}ON0U|iUn7)!7 zEEgFXl@ue5Sy4)qiw!+wTEVgshn5jr7!xWNDuU&tc!%1-n4e|Z!Cj2mEz=C{Y0N=Y zF5aF|qm3yn7lMQDFvk1)A~D9))3%(<-m1#Ub5B(+5)4)c88cdqH^%!rAVZ8fpzWdZ zIJqzqoMg<4>TqMczZ;QaOpGjJ@JM4KD~oByl&T_nWO-CMDNa{2jhU&AGiF*&%~f@d2uLzRojtz-iao@dNE>U?7kt8!8K_;unU zS-x805@TXjxyU?0U1rSN>eI%QtSzoE#`}GS|*a)Dh)kwD)^S>x_x0 zC+!W!NH?3{!?K>$BC?#co2jzSqiM&evTi-JGgVoq^Jr(OvMx8#&Q@jn*-tx1m34WR zcCIShllOCGI{hGN%Q}rzrS1J(ko3Lx^FPv#(fg~(^cnAcUqSkA9_=huw!2NVvsKyt z_S4Q$Wjj1eJ6DzMv23uY(^n&9`m~#=vVBI=_MV5_EYqi*smk^`k9L;YMy5|YTkRmz zr=6q9c6^q0t}5HJ_wy}>W%`ArE!%aZDsAucezZ)Vc8n_9xrcV98Y9!Eou&4Z>C?_u zW&7VxJ4YQT)2E%Q4wC5?7Ipe+yiA{VGj)hepLUEoRHjcmQ2re9Rl>8r9|M$&Gk%KjNmJ4TiL)I;0*xrKQ$ecD;7?6;d}XRBE< zecCyy?8j$m=c=+lmkkkh`l{^Lk+hqs%VherW7MZ*`m{6E6*7I=S?WreKJ9E(_W%8~ zb5uDFoTZ(s%JHDA9@lmHsvH+0X?x$7m*azpNFO`G6BjRf(tIY`zdQ+<9uqMn&J$-M z;?vVjL|Q^}gx(p^xlPyDK5e3+W4ojzNlCu@JI5stZJ#kRIU%#4v0b}#FX--W8Offc zo@uFr6VlUD(+aBaPOg1|Z-V(}qFee%KX=>ud^6}xicX75Ngwf-nfH#1N*J7wG&;ex zT=^ar+a%RK$%{-}iXj1dLStURc0;5h6kz%+>c$NdUcLV8Iqik=I)N@%yuJ_ zJ?-L>ljGwC5C7{}-8KVNLiN3ovW4_ffVvKuu~C^F zMkl2B?GZB4qLW4>q-J%y3dY?a*W77V-jL}UAJ5J9O>x1eXM|y%&VV=UfMkicxZuLFVpkxb3Ic0jgHRr z?X`JFl)o%b)MYE8Gkc^YkG*_O0ae~@+}o|unO%BE#WriJ&pYmWo80KVJO8Zd3gS7g zfOQ+?h|B*t-xx>akc9Y*VX;XmLsR8k!25Sxe0*BMXkRCDk4$M;0%r)myV6pIB`2kO z^4&KgZg85U=mdR5$w?`)pZNZkvknt6ICaDbIbJzyhNi{o(_5RUZV_=FPg+vE94;hv zSXyd^oNxZ!AzRLSowZyRNm|Z|jZ(sO##eI~t%)PU-XV zz70?}#8G!FK%I7hoxkG&>h5*aeHWl^x})y<0CjR|oHyMc0@N*a)SU=Wx5iQTV}QDB zN8QN)bvqn&x{m#=-@T5y(*f!ZIO@&>sMB>|*T+u*>drdq^u1kw^JnCBtj*KM_^Z3p zQFkstU6`ZpmjHG8xj{SKUjx+X_rz>nZh*QLj=J*!>N-2>ehW|+?Wp@bK;0lm-Gu;k z$&R`|0@P(X>i!H+H`P&hF+klMN1d)~f9rR#qfS5j>90<|?_}3UaDY0!j$-Qy1*qHZ zs4ET#F7s)38hIJ+9rSxz&LNma zHBm>&=%dX$C0OfX6H{Xk>ty3A=h#AxyufAy~(APeDjwpdAfYse@*3P z^Inv{oy)7&jY`RVcCdNx$sNwRoqp={xzkyv*PUAH9Sk<_sI;B^XL^Ttufgj4-6%IZ zf4Z+Y^TOo1jqbyC&^jG-pLgbkNuDl;<~5U>%?o$sZI@0tB;)O1^D4RW>NxUlkz$*t z-`kXbdE4_+nTfSFOtj0}+?Cf%^6dI(;mEtom8buIoX)cy?EKy7%4;oo;Zmf_+fr_J z{>HoVMqW|y{EcG9KC=4DHs-TpdDvCXUQ%Db|RF#`&izbaDa%-iY6yUmfO--mV1 zU!uI{pr0wQgI(U1uDl${t0P6)e_iEf=TE;s>&#m&?^&F-Vbp1}pDRx<)P~Fbn%7-! zHcvl~;LMv>-WYvOw}YL(39h_wM_x}y-U?S<%`juO%Q40dHgB0LueIdGNRiH8l-%t6 zz2?f(-_zFhW(OJV9rW`K&gD4kr%u1e>#QqWrQp2E^1R}#E9<9DKlk9QtLdjspQoI4 zk$&p*d%e!O_I~P~an7O&dt7xxq)t|G-eCLhl&fx>)YZzXx^$c@Co9G|e@mrK z-qy(*Y@U9P*IB2(<2@j+%C~;Cso&pq*2PpcW~8Ie<_(fM=l+%@+lxIu50ZKr?QPF- z}FKPTawzZT)f$iKY7&fg(d-2f?CnpbtH|3YM6aOPd` zQ&-pJ4cI4?fxLw{S zU3vODh7Af>ANsv)Xa99}tdDyfdHQ)1=khLYXiVF@xx2KzY;onqIP%6j^7MP$&b)(? zH?@GgPh5G4l4rN)`y6>cx$@%WMU4E*8*KlbbmdKS^xq^$UTHZ`ch27&2}{XKyR^I| zq|VuY(;azJ9C_Ef^8S>(2?gXea^=l&OmD?7#JrXOCC2WxUNRDm$^W|2)?h zoTs13aprAzFA?3Yq^N**&`Zg#p+uDp-rWaA6R1ni&PU3u$A z$#I;#EJxl@SKivu^4T&QB6ar9cvs%u^bn)3>2&@U7L>;_j?MIaCQeGc!(Z~Ko0t(| za!dH~7E7gF-n{vv?$^o2G_)a7XaCHbKk724gm|C#b^e|RkXLhR{^OdzyhBq%yw?ph zZ)t$MD9NiX#qUNm)koUSww33XsgTK7a4_-PC zTQ9}_miJ4^`#alTqU6<)9G$-n0rDT7NAhx{Nb~f0$>02~l_#}FpugokEqN1L`117m+TZf7l^+=N*bu3+f4aB7k@7^L*F|;yUJZ~} zU4Gc2kBqm2zq~N{;h97!(!A|*^EZEEB(J7EAv5^Pn<#lpi~I84kXnCvi`oX6qc%+R zmlqxzYC>7w9RcztwhJEwCX{Xa98Pg$@@|&Ac4R63@)9Mlvy9i}-77bLdFLgsj*Pd1zr6L5*I0@)PhY3| z%d2)IY*ie_{(cHBGh|a z*1Q99^Otv5kDz?7qx|Kamb^idqj?7dq?`tlA-t-s~XxFg8>{>|m`N{zm>e;f&rw^8!+ePlb>Ki$h4BYAaL z-ftaw`nzKGF`BWZZ;(llYc+PT6+U)79Z|xz9O&bH;|6a2cuV_k`T+ z{ORwZ$?3{SeT)us8iaV?i}tlH^@UE~u^XDLQn$Xm@4XWJZCA}JB{!X>stgKR(pF=2#9}_g_z!B}xDQ literal 0 HcmV?d00001 diff --git a/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.su b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.su new file mode 100644 index 0000000..6aa94c5 --- /dev/null +++ b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.su @@ -0,0 +1,66 @@ +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:289:19:HAL_UART_Init 16 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:378:19:HAL_HalfDuplex_Init 16 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:466:19:HAL_LIN_Init 16 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:576:19:HAL_MultiProcessor_Init 24 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:666:19:HAL_UART_DeInit 16 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:713:13:HAL_UART_MspInit 16 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:728:13:HAL_UART_MspDeInit 16 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:1152:19:HAL_UART_Transmit 48 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:1254:19:HAL_UART_Receive 48 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:1354:19:HAL_UART_Transmit_IT 40 static,ignoring_inline_asm +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:1419:19:HAL_UART_Receive_IT 40 static,ignoring_inline_asm +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:1473:19:HAL_UART_Transmit_DMA 40 static,ignoring_inline_asm +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:1559:19:HAL_UART_Receive_DMA 40 static,ignoring_inline_asm +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:1603:19:HAL_UART_DMAPause 88 static,ignoring_inline_asm +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:1633:19:HAL_UART_DMAResume 80 static,ignoring_inline_asm +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:1664:19:HAL_UART_DMAStop 56 static,ignoring_inline_asm +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:1739:19:HAL_UART_Abort 96 static,ignoring_inline_asm +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:1836:19:HAL_UART_AbortTransmit 48 static,ignoring_inline_asm +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:1889:19:HAL_UART_AbortReceive 80 static,ignoring_inline_asm +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:1957:19:HAL_UART_Abort_IT 104 static,ignoring_inline_asm +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:2104:19:HAL_UART_AbortTransmit_IT 48 static,ignoring_inline_asm +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:2189:19:HAL_UART_AbortReceive_IT 80 static,ignoring_inline_asm +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:2282:6:HAL_UART_IRQHandler 184 static,ignoring_inline_asm +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:2588:13:HAL_UART_TxCpltCallback 16 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:2603:13:HAL_UART_TxHalfCpltCallback 16 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:2618:13:HAL_UART_RxCpltCallback 16 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:2633:13:HAL_UART_RxHalfCpltCallback 16 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:2648:13:HAL_UART_ErrorCallback 16 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:2663:13:HAL_UART_AbortCpltCallback 16 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:2678:13:HAL_UART_AbortTransmitCpltCallback 16 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:2693:13:HAL_UART_AbortReceiveCpltCallback 16 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:2710:13:HAL_UARTEx_RxEventCallback 16 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:2758:6:HAL_UART_ReceiverTimeout_Config 16 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:2770:19:HAL_UART_EnableReceiverTimeout 16 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:2801:19:HAL_UART_DisableReceiverTimeout 16 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:2832:19:HAL_MultiProcessor_EnableMuteMode 32 static,ignoring_inline_asm +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:2852:19:HAL_MultiProcessor_DisableMuteMode 32 static,ignoring_inline_asm +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:2872:6:HAL_MultiProcessor_EnterMuteMode 16 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:2882:19:HAL_HalfDuplex_EnableTransmitter 48 static,ignoring_inline_asm +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:2905:19:HAL_HalfDuplex_EnableReceiver 48 static,ignoring_inline_asm +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:2930:19:HAL_LIN_SendBreak 16 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:2976:23:HAL_UART_GetState 24 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:2992:10:HAL_UART_GetError 16 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:3040:19:UART_SetConfig 40 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:3178:6:UART_AdvFeatureConfig 16 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:3252:19:UART_CheckIdleState 80 static,ignoring_inline_asm +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:3321:19:UART_WaitOnFlagUntilTimeout 24 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:3389:19:UART_Start_Receive_IT 72 static,ignoring_inline_asm +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:3438:19:UART_Start_Receive_DMA 72 static,ignoring_inline_asm +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:3495:13:UART_EndTxTransfer 32 static,ignoring_inline_asm +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:3510:13:UART_EndRxTransfer 64 static,ignoring_inline_asm +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:3536:13:UART_DMATransmitCplt 56 static,ignoring_inline_asm +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:3570:13:UART_DMATxHalfCplt 24 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:3588:13:UART_DMAReceiveCplt 88 static,ignoring_inline_asm +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:3649:13:UART_DMARxHalfCplt 24 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:3687:13:UART_DMAError 32 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:3727:13:UART_DMAAbortOnError 24 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:3750:13:UART_DMATxAbortCallback 24 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:3800:13:UART_DMARxAbortCallback 24 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:3852:13:UART_DMATxOnlyAbortCallback 24 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:3880:13:UART_DMARxOnlyAbortCallback 24 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:3913:13:UART_TxISR_8BIT 48 static,ignoring_inline_asm +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:3942:13:UART_TxISR_16BIT 56 static,ignoring_inline_asm +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:3974:13:UART_EndTransmit_IT 32 static,ignoring_inline_asm +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:3999:13:UART_RxISR_8BIT 88 static,ignoring_inline_asm +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c:4087:13:UART_RxISR_16BIT 88 static,ignoring_inline_asm diff --git a/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.cyclo b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.cyclo new file mode 100644 index 0000000..be5d48b --- /dev/null +++ b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.cyclo @@ -0,0 +1,11 @@ +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.c:150:19:HAL_RS485Ex_Init 5 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.c:258:13:HAL_UARTEx_WakeupCallback 1 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.c:344:19:HAL_MultiProcessorEx_AddressLength_Set 2 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.c:383:19:HAL_UARTEx_StopModeWakeUpSourceConfig 4 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.c:440:19:HAL_UARTEx_EnableStopMode 2 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.c:459:19:HAL_UARTEx_DisableStopMode 2 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.c:496:19:HAL_UARTEx_ReceiveToIdle 21 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.c:635:19:HAL_UARTEx_ReceiveToIdle_IT 9 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.c:712:19:HAL_UARTEx_ReceiveToIdle_DMA 9 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.c:791:29:HAL_UARTEx_GetRxEventType 1 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.c:816:13:UARTEx_Wakeup_AddressConfig 1 diff --git a/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.d b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.d new file mode 100644 index 0000000..bd8a002 --- /dev/null +++ b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.d @@ -0,0 +1,56 @@ +Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o: \ + ../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.c \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h \ + ../Core/Inc/stm32f0xx_hal_conf.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f031x6.h \ + ../Drivers/CMSIS/Include/core_cm0.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/system_stm32f0xx.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_exti.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_cortex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h: +../Core/Inc/stm32f0xx_hal_conf.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h: +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f031x6.h: +../Drivers/CMSIS/Include/core_cm0.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/system_stm32f0xx.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_exti.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_cortex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h: diff --git a/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o new file mode 100644 index 0000000000000000000000000000000000000000..8907dda1b5fa0f28a7a30221e3745503d56a6a89 GIT binary patch literal 515240 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

      gl^prLiwNkH^>44 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 "reflow_oven.list" + @echo 'Finished building: $@' + @echo ' ' + +# Other Targets +clean: + -$(RM) default.size.stdout reflow_oven.elf reflow_oven.list reflow_oven.map + -@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/Software/reflow_oven/Debug/objects.list b/Software/reflow_oven/Debug/objects.list new file mode 100644 index 0000000..74abbdf --- /dev/null +++ b/Software/reflow_oven/Debug/objects.list @@ -0,0 +1,29 @@ +"./Core/Src/gpio.o" +"./Core/Src/main.o" +"./Core/Src/stm32f0xx_hal_msp.o" +"./Core/Src/stm32f0xx_it.o" +"./Core/Src/syscalls.o" +"./Core/Src/sysmem.o" +"./Core/Src/system_stm32f0xx.o" +"./Core/Src/usart.o" +"./Core/Startup/startup_stm32f031k6tx.o" +"./Core/reflow_oven_src/ked/ked.o" +"./Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.o" +"./Core/reflow_oven_src/reflow_main.o" +"./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o" +"./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o" +"./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o" +"./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o" +"./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o" +"./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o" +"./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o" +"./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o" +"./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o" +"./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o" +"./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o" +"./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o" +"./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o" +"./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o" +"./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o" +"./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o" +"./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o" diff --git a/Software/reflow_oven/Debug/objects.mk b/Software/reflow_oven/Debug/objects.mk new file mode 100644 index 0000000..820854b --- /dev/null +++ b/Software/reflow_oven/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/Software/reflow_oven/Debug/reflow_oven.elf b/Software/reflow_oven/Debug/reflow_oven.elf new file mode 100755 index 0000000000000000000000000000000000000000..f2e388d573b1b03b49c8b0d75da5b6e9b547825c GIT binary patch literal 655128 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

      fb)?A6snI^~;y3!~g?k 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: + 80000c0: b510 push {r4, lr} + 80000c2: 4c06 ldr r4, [pc, #24] ; (80000dc <__do_global_dtors_aux+0x1c>) + 80000c4: 7823 ldrb r3, [r4, #0] + 80000c6: 2b00 cmp r3, #0 + 80000c8: d107 bne.n 80000da <__do_global_dtors_aux+0x1a> + 80000ca: 4b05 ldr r3, [pc, #20] ; (80000e0 <__do_global_dtors_aux+0x20>) + 80000cc: 2b00 cmp r3, #0 + 80000ce: d002 beq.n 80000d6 <__do_global_dtors_aux+0x16> + 80000d0: 4804 ldr r0, [pc, #16] ; (80000e4 <__do_global_dtors_aux+0x24>) + 80000d2: e000 b.n 80000d6 <__do_global_dtors_aux+0x16> + 80000d4: bf00 nop + 80000d6: 2301 movs r3, #1 + 80000d8: 7023 strb r3, [r4, #0] + 80000da: bd10 pop {r4, pc} + 80000dc: 2000000c .word 0x2000000c + 80000e0: 00000000 .word 0x00000000 + 80000e4: 08001ccc .word 0x08001ccc + +080000e8 : + 80000e8: 4b04 ldr r3, [pc, #16] ; (80000fc ) + 80000ea: b510 push {r4, lr} + 80000ec: 2b00 cmp r3, #0 + 80000ee: d003 beq.n 80000f8 + 80000f0: 4903 ldr r1, [pc, #12] ; (8000100 ) + 80000f2: 4804 ldr r0, [pc, #16] ; (8000104 ) + 80000f4: e000 b.n 80000f8 + 80000f6: bf00 nop + 80000f8: bd10 pop {r4, pc} + 80000fa: 46c0 nop ; (mov r8, r8) + 80000fc: 00000000 .word 0x00000000 + 8000100: 20000010 .word 0x20000010 + 8000104: 08001ccc .word 0x08001ccc + +08000108 <__udivsi3>: + 8000108: 2200 movs r2, #0 + 800010a: 0843 lsrs r3, r0, #1 + 800010c: 428b cmp r3, r1 + 800010e: d374 bcc.n 80001fa <__udivsi3+0xf2> + 8000110: 0903 lsrs r3, r0, #4 + 8000112: 428b cmp r3, r1 + 8000114: d35f bcc.n 80001d6 <__udivsi3+0xce> + 8000116: 0a03 lsrs r3, r0, #8 + 8000118: 428b cmp r3, r1 + 800011a: d344 bcc.n 80001a6 <__udivsi3+0x9e> + 800011c: 0b03 lsrs r3, r0, #12 + 800011e: 428b cmp r3, r1 + 8000120: d328 bcc.n 8000174 <__udivsi3+0x6c> + 8000122: 0c03 lsrs r3, r0, #16 + 8000124: 428b cmp r3, r1 + 8000126: d30d bcc.n 8000144 <__udivsi3+0x3c> + 8000128: 22ff movs r2, #255 ; 0xff + 800012a: 0209 lsls r1, r1, #8 + 800012c: ba12 rev r2, r2 + 800012e: 0c03 lsrs r3, r0, #16 + 8000130: 428b cmp r3, r1 + 8000132: d302 bcc.n 800013a <__udivsi3+0x32> + 8000134: 1212 asrs r2, r2, #8 + 8000136: 0209 lsls r1, r1, #8 + 8000138: d065 beq.n 8000206 <__udivsi3+0xfe> + 800013a: 0b03 lsrs r3, r0, #12 + 800013c: 428b cmp r3, r1 + 800013e: d319 bcc.n 8000174 <__udivsi3+0x6c> + 8000140: e000 b.n 8000144 <__udivsi3+0x3c> + 8000142: 0a09 lsrs r1, r1, #8 + 8000144: 0bc3 lsrs r3, r0, #15 + 8000146: 428b cmp r3, r1 + 8000148: d301 bcc.n 800014e <__udivsi3+0x46> + 800014a: 03cb lsls r3, r1, #15 + 800014c: 1ac0 subs r0, r0, r3 + 800014e: 4152 adcs r2, r2 + 8000150: 0b83 lsrs r3, r0, #14 + 8000152: 428b cmp r3, r1 + 8000154: d301 bcc.n 800015a <__udivsi3+0x52> + 8000156: 038b lsls r3, r1, #14 + 8000158: 1ac0 subs r0, r0, r3 + 800015a: 4152 adcs r2, r2 + 800015c: 0b43 lsrs r3, r0, #13 + 800015e: 428b cmp r3, r1 + 8000160: d301 bcc.n 8000166 <__udivsi3+0x5e> + 8000162: 034b lsls r3, r1, #13 + 8000164: 1ac0 subs r0, r0, r3 + 8000166: 4152 adcs r2, r2 + 8000168: 0b03 lsrs r3, r0, #12 + 800016a: 428b cmp r3, r1 + 800016c: d301 bcc.n 8000172 <__udivsi3+0x6a> + 800016e: 030b lsls r3, r1, #12 + 8000170: 1ac0 subs r0, r0, r3 + 8000172: 4152 adcs r2, r2 + 8000174: 0ac3 lsrs r3, r0, #11 + 8000176: 428b cmp r3, r1 + 8000178: d301 bcc.n 800017e <__udivsi3+0x76> + 800017a: 02cb lsls r3, r1, #11 + 800017c: 1ac0 subs r0, r0, r3 + 800017e: 4152 adcs r2, r2 + 8000180: 0a83 lsrs r3, r0, #10 + 8000182: 428b cmp r3, r1 + 8000184: d301 bcc.n 800018a <__udivsi3+0x82> + 8000186: 028b lsls r3, r1, #10 + 8000188: 1ac0 subs r0, r0, r3 + 800018a: 4152 adcs r2, r2 + 800018c: 0a43 lsrs r3, r0, #9 + 800018e: 428b cmp r3, r1 + 8000190: d301 bcc.n 8000196 <__udivsi3+0x8e> + 8000192: 024b lsls r3, r1, #9 + 8000194: 1ac0 subs r0, r0, r3 + 8000196: 4152 adcs r2, r2 + 8000198: 0a03 lsrs r3, r0, #8 + 800019a: 428b cmp r3, r1 + 800019c: d301 bcc.n 80001a2 <__udivsi3+0x9a> + 800019e: 020b lsls r3, r1, #8 + 80001a0: 1ac0 subs r0, r0, r3 + 80001a2: 4152 adcs r2, r2 + 80001a4: d2cd bcs.n 8000142 <__udivsi3+0x3a> + 80001a6: 09c3 lsrs r3, r0, #7 + 80001a8: 428b cmp r3, r1 + 80001aa: d301 bcc.n 80001b0 <__udivsi3+0xa8> + 80001ac: 01cb lsls r3, r1, #7 + 80001ae: 1ac0 subs r0, r0, r3 + 80001b0: 4152 adcs r2, r2 + 80001b2: 0983 lsrs r3, r0, #6 + 80001b4: 428b cmp r3, r1 + 80001b6: d301 bcc.n 80001bc <__udivsi3+0xb4> + 80001b8: 018b lsls r3, r1, #6 + 80001ba: 1ac0 subs r0, r0, r3 + 80001bc: 4152 adcs r2, r2 + 80001be: 0943 lsrs r3, r0, #5 + 80001c0: 428b cmp r3, r1 + 80001c2: d301 bcc.n 80001c8 <__udivsi3+0xc0> + 80001c4: 014b lsls r3, r1, #5 + 80001c6: 1ac0 subs r0, r0, r3 + 80001c8: 4152 adcs r2, r2 + 80001ca: 0903 lsrs r3, r0, #4 + 80001cc: 428b cmp r3, r1 + 80001ce: d301 bcc.n 80001d4 <__udivsi3+0xcc> + 80001d0: 010b lsls r3, r1, #4 + 80001d2: 1ac0 subs r0, r0, r3 + 80001d4: 4152 adcs r2, r2 + 80001d6: 08c3 lsrs r3, r0, #3 + 80001d8: 428b cmp r3, r1 + 80001da: d301 bcc.n 80001e0 <__udivsi3+0xd8> + 80001dc: 00cb lsls r3, r1, #3 + 80001de: 1ac0 subs r0, r0, r3 + 80001e0: 4152 adcs r2, r2 + 80001e2: 0883 lsrs r3, r0, #2 + 80001e4: 428b cmp r3, r1 + 80001e6: d301 bcc.n 80001ec <__udivsi3+0xe4> + 80001e8: 008b lsls r3, r1, #2 + 80001ea: 1ac0 subs r0, r0, r3 + 80001ec: 4152 adcs r2, r2 + 80001ee: 0843 lsrs r3, r0, #1 + 80001f0: 428b cmp r3, r1 + 80001f2: d301 bcc.n 80001f8 <__udivsi3+0xf0> + 80001f4: 004b lsls r3, r1, #1 + 80001f6: 1ac0 subs r0, r0, r3 + 80001f8: 4152 adcs r2, r2 + 80001fa: 1a41 subs r1, r0, r1 + 80001fc: d200 bcs.n 8000200 <__udivsi3+0xf8> + 80001fe: 4601 mov r1, r0 + 8000200: 4152 adcs r2, r2 + 8000202: 4610 mov r0, r2 + 8000204: 4770 bx lr + 8000206: e7ff b.n 8000208 <__udivsi3+0x100> + 8000208: b501 push {r0, lr} + 800020a: 2000 movs r0, #0 + 800020c: f000 f806 bl 800021c <__aeabi_idiv0> + 8000210: bd02 pop {r1, pc} + 8000212: 46c0 nop ; (mov r8, r8) + +08000214 <__aeabi_uidivmod>: + 8000214: 2900 cmp r1, #0 + 8000216: d0f7 beq.n 8000208 <__udivsi3+0x100> + 8000218: e776 b.n 8000108 <__udivsi3> + 800021a: 4770 bx lr + +0800021c <__aeabi_idiv0>: + 800021c: 4770 bx lr + 800021e: 46c0 nop ; (mov r8, r8) + +08000220 : + * EXTI + * Free pins are configured automatically as Analog (this feature is enabled through + * the Code Generation settings) +*/ +void MX_GPIO_Init(void) +{ + 8000220: b590 push {r4, r7, lr} + 8000222: b089 sub sp, #36 ; 0x24 + 8000224: af00 add r7, sp, #0 + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + 8000226: 240c movs r4, #12 + 8000228: 193b adds r3, r7, r4 + 800022a: 0018 movs r0, r3 + 800022c: 2314 movs r3, #20 + 800022e: 001a movs r2, r3 + 8000230: 2100 movs r1, #0 + 8000232: f001 fd1f bl 8001c74 + + /* GPIO Ports Clock Enable */ + __HAL_RCC_GPIOF_CLK_ENABLE(); + 8000236: 4b2e ldr r3, [pc, #184] ; (80002f0 ) + 8000238: 695a ldr r2, [r3, #20] + 800023a: 4b2d ldr r3, [pc, #180] ; (80002f0 ) + 800023c: 2180 movs r1, #128 ; 0x80 + 800023e: 03c9 lsls r1, r1, #15 + 8000240: 430a orrs r2, r1 + 8000242: 615a str r2, [r3, #20] + 8000244: 4b2a ldr r3, [pc, #168] ; (80002f0 ) + 8000246: 695a ldr r2, [r3, #20] + 8000248: 2380 movs r3, #128 ; 0x80 + 800024a: 03db lsls r3, r3, #15 + 800024c: 4013 ands r3, r2 + 800024e: 60bb str r3, [r7, #8] + 8000250: 68bb ldr r3, [r7, #8] + __HAL_RCC_GPIOA_CLK_ENABLE(); + 8000252: 4b27 ldr r3, [pc, #156] ; (80002f0 ) + 8000254: 695a ldr r2, [r3, #20] + 8000256: 4b26 ldr r3, [pc, #152] ; (80002f0 ) + 8000258: 2180 movs r1, #128 ; 0x80 + 800025a: 0289 lsls r1, r1, #10 + 800025c: 430a orrs r2, r1 + 800025e: 615a str r2, [r3, #20] + 8000260: 4b23 ldr r3, [pc, #140] ; (80002f0 ) + 8000262: 695a ldr r2, [r3, #20] + 8000264: 2380 movs r3, #128 ; 0x80 + 8000266: 029b lsls r3, r3, #10 + 8000268: 4013 ands r3, r2 + 800026a: 607b str r3, [r7, #4] + 800026c: 687b ldr r3, [r7, #4] + __HAL_RCC_GPIOB_CLK_ENABLE(); + 800026e: 4b20 ldr r3, [pc, #128] ; (80002f0 ) + 8000270: 695a ldr r2, [r3, #20] + 8000272: 4b1f ldr r3, [pc, #124] ; (80002f0 ) + 8000274: 2180 movs r1, #128 ; 0x80 + 8000276: 02c9 lsls r1, r1, #11 + 8000278: 430a orrs r2, r1 + 800027a: 615a str r2, [r3, #20] + 800027c: 4b1c ldr r3, [pc, #112] ; (80002f0 ) + 800027e: 695a ldr r2, [r3, #20] + 8000280: 2380 movs r3, #128 ; 0x80 + 8000282: 02db lsls r3, r3, #11 + 8000284: 4013 ands r3, r2 + 8000286: 603b str r3, [r7, #0] + 8000288: 683b ldr r3, [r7, #0] + + /*Configure GPIO pin : PF1 */ + GPIO_InitStruct.Pin = GPIO_PIN_1; + 800028a: 193b adds r3, r7, r4 + 800028c: 2202 movs r2, #2 + 800028e: 601a str r2, [r3, #0] + GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; + 8000290: 193b adds r3, r7, r4 + 8000292: 2203 movs r2, #3 + 8000294: 605a str r2, [r3, #4] + GPIO_InitStruct.Pull = GPIO_NOPULL; + 8000296: 193b adds r3, r7, r4 + 8000298: 2200 movs r2, #0 + 800029a: 609a str r2, [r3, #8] + HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); + 800029c: 193b adds r3, r7, r4 + 800029e: 4a15 ldr r2, [pc, #84] ; (80002f4 ) + 80002a0: 0019 movs r1, r3 + 80002a2: 0010 movs r0, r2 + 80002a4: f000 faac bl 8000800 + + /*Configure GPIO pins : PA0 PA1 PA3 PA4 + PA5 PA6 PA7 PA8 + PA9 PA10 PA11 PA12 */ + GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_3|GPIO_PIN_4 + 80002a8: 193b adds r3, r7, r4 + 80002aa: 4a13 ldr r2, [pc, #76] ; (80002f8 ) + 80002ac: 601a str r2, [r3, #0] + |GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8 + |GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12; + GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; + 80002ae: 193b adds r3, r7, r4 + 80002b0: 2203 movs r2, #3 + 80002b2: 605a str r2, [r3, #4] + GPIO_InitStruct.Pull = GPIO_NOPULL; + 80002b4: 193b adds r3, r7, r4 + 80002b6: 2200 movs r2, #0 + 80002b8: 609a str r2, [r3, #8] + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + 80002ba: 193a adds r2, r7, r4 + 80002bc: 2390 movs r3, #144 ; 0x90 + 80002be: 05db lsls r3, r3, #23 + 80002c0: 0011 movs r1, r2 + 80002c2: 0018 movs r0, r3 + 80002c4: f000 fa9c bl 8000800 + + /*Configure GPIO pins : PB0 PB1 PB3 PB4 + PB5 PB6 PB7 */ + GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_3|GPIO_PIN_4 + 80002c8: 193b adds r3, r7, r4 + 80002ca: 22fb movs r2, #251 ; 0xfb + 80002cc: 601a str r2, [r3, #0] + |GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7; + GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; + 80002ce: 193b adds r3, r7, r4 + 80002d0: 2203 movs r2, #3 + 80002d2: 605a str r2, [r3, #4] + GPIO_InitStruct.Pull = GPIO_NOPULL; + 80002d4: 193b adds r3, r7, r4 + 80002d6: 2200 movs r2, #0 + 80002d8: 609a str r2, [r3, #8] + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + 80002da: 193b adds r3, r7, r4 + 80002dc: 4a07 ldr r2, [pc, #28] ; (80002fc ) + 80002de: 0019 movs r1, r3 + 80002e0: 0010 movs r0, r2 + 80002e2: f000 fa8d bl 8000800 + +} + 80002e6: 46c0 nop ; (mov r8, r8) + 80002e8: 46bd mov sp, r7 + 80002ea: b009 add sp, #36 ; 0x24 + 80002ec: bd90 pop {r4, r7, pc} + 80002ee: 46c0 nop ; (mov r8, r8) + 80002f0: 40021000 .word 0x40021000 + 80002f4: 48001400 .word 0x48001400 + 80002f8: 00001ffb .word 0x00001ffb + 80002fc: 48000400 .word 0x48000400 + +08000300

      : +/** + * @brief The application entry point. + * @retval int + */ +int main(void) +{ + 8000300: b580 push {r7, lr} + 8000302: af00 add r7, sp, #0 + /* USER CODE END 1 */ + + /* MCU Configuration--------------------------------------------------------*/ + + /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ + HAL_Init(); + 8000304: f000 f964 bl 80005d0 + /* USER CODE BEGIN Init */ + + /* USER CODE END Init */ + + /* Configure the system clock */ + SystemClock_Config(); + 8000308: f000 f807 bl 800031a + /* USER CODE BEGIN SysInit */ + + /* USER CODE END SysInit */ + + /* Initialize all configured peripherals */ + MX_GPIO_Init(); + 800030c: f7ff ff88 bl 8000220 + MX_USART1_UART_Init(); + 8000310: f000 f8a0 bl 8000454 + /* USER CODE BEGIN 2 */ + reflow_main(); + 8000314: f000 f950 bl 80005b8 + /* USER CODE END 2 */ + + /* Infinite loop */ + /* USER CODE BEGIN WHILE */ + while (1) + 8000318: e7fe b.n 8000318 + +0800031a : +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + 800031a: b590 push {r4, r7, lr} + 800031c: b095 sub sp, #84 ; 0x54 + 800031e: af00 add r7, sp, #0 + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + 8000320: 2420 movs r4, #32 + 8000322: 193b adds r3, r7, r4 + 8000324: 0018 movs r0, r3 + 8000326: 2330 movs r3, #48 ; 0x30 + 8000328: 001a movs r2, r3 + 800032a: 2100 movs r1, #0 + 800032c: f001 fca2 bl 8001c74 + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + 8000330: 2310 movs r3, #16 + 8000332: 18fb adds r3, r7, r3 + 8000334: 0018 movs r0, r3 + 8000336: 2310 movs r3, #16 + 8000338: 001a movs r2, r3 + 800033a: 2100 movs r1, #0 + 800033c: f001 fc9a bl 8001c74 + RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; + 8000340: 003b movs r3, r7 + 8000342: 0018 movs r0, r3 + 8000344: 2310 movs r3, #16 + 8000346: 001a movs r2, r3 + 8000348: 2100 movs r1, #0 + 800034a: f001 fc93 bl 8001c74 + + /** Initializes the RCC Oscillators according to the specified parameters + * in the RCC_OscInitTypeDef structure. + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; + 800034e: 0021 movs r1, r4 + 8000350: 187b adds r3, r7, r1 + 8000352: 2202 movs r2, #2 + 8000354: 601a str r2, [r3, #0] + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + 8000356: 187b adds r3, r7, r1 + 8000358: 2201 movs r2, #1 + 800035a: 60da str r2, [r3, #12] + RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; + 800035c: 187b adds r3, r7, r1 + 800035e: 2210 movs r2, #16 + 8000360: 611a str r2, [r3, #16] + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; + 8000362: 187b adds r3, r7, r1 + 8000364: 2200 movs r2, #0 + 8000366: 621a str r2, [r3, #32] + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + 8000368: 187b adds r3, r7, r1 + 800036a: 0018 movs r0, r3 + 800036c: f000 fbb0 bl 8000ad0 + 8000370: 1e03 subs r3, r0, #0 + 8000372: d001 beq.n 8000378 + { + Error_Handler(); + 8000374: f000 f828 bl 80003c8 + } + + /** Initializes the CPU, AHB and APB buses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + 8000378: 2110 movs r1, #16 + 800037a: 187b adds r3, r7, r1 + 800037c: 2207 movs r2, #7 + 800037e: 601a str r2, [r3, #0] + |RCC_CLOCKTYPE_PCLK1; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI; + 8000380: 187b adds r3, r7, r1 + 8000382: 2200 movs r2, #0 + 8000384: 605a str r2, [r3, #4] + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + 8000386: 187b adds r3, r7, r1 + 8000388: 2200 movs r2, #0 + 800038a: 609a str r2, [r3, #8] + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; + 800038c: 187b adds r3, r7, r1 + 800038e: 2200 movs r2, #0 + 8000390: 60da str r2, [r3, #12] + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK) + 8000392: 187b adds r3, r7, r1 + 8000394: 2100 movs r1, #0 + 8000396: 0018 movs r0, r3 + 8000398: f000 feb4 bl 8001104 + 800039c: 1e03 subs r3, r0, #0 + 800039e: d001 beq.n 80003a4 + { + Error_Handler(); + 80003a0: f000 f812 bl 80003c8 + } + PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1; + 80003a4: 003b movs r3, r7 + 80003a6: 2201 movs r2, #1 + 80003a8: 601a str r2, [r3, #0] + PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK1; + 80003aa: 003b movs r3, r7 + 80003ac: 2200 movs r2, #0 + 80003ae: 609a str r2, [r3, #8] + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) + 80003b0: 003b movs r3, r7 + 80003b2: 0018 movs r0, r3 + 80003b4: f000 ffea bl 800138c + 80003b8: 1e03 subs r3, r0, #0 + 80003ba: d001 beq.n 80003c0 + { + Error_Handler(); + 80003bc: f000 f804 bl 80003c8 + } +} + 80003c0: 46c0 nop ; (mov r8, r8) + 80003c2: 46bd mov sp, r7 + 80003c4: b015 add sp, #84 ; 0x54 + 80003c6: bd90 pop {r4, r7, pc} + +080003c8 : +/** + * @brief This function is executed in case of error occurrence. + * @retval None + */ +void Error_Handler(void) +{ + 80003c8: b580 push {r7, lr} + 80003ca: 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"); + 80003cc: b672 cpsid i +} + 80003ce: 46c0 nop ; (mov r8, r8) + /* USER CODE BEGIN Error_Handler_Debug */ + /* User can add his own implementation to report the HAL error return state */ + __disable_irq(); + while (1) + 80003d0: e7fe b.n 80003d0 + ... + +080003d4 : +/* USER CODE END 0 */ +/** + * Initializes the Global MSP. + */ +void HAL_MspInit(void) +{ + 80003d4: b580 push {r7, lr} + 80003d6: b082 sub sp, #8 + 80003d8: af00 add r7, sp, #0 + /* USER CODE BEGIN MspInit 0 */ + + /* USER CODE END MspInit 0 */ + + __HAL_RCC_SYSCFG_CLK_ENABLE(); + 80003da: 4b0f ldr r3, [pc, #60] ; (8000418 ) + 80003dc: 699a ldr r2, [r3, #24] + 80003de: 4b0e ldr r3, [pc, #56] ; (8000418 ) + 80003e0: 2101 movs r1, #1 + 80003e2: 430a orrs r2, r1 + 80003e4: 619a str r2, [r3, #24] + 80003e6: 4b0c ldr r3, [pc, #48] ; (8000418 ) + 80003e8: 699b ldr r3, [r3, #24] + 80003ea: 2201 movs r2, #1 + 80003ec: 4013 ands r3, r2 + 80003ee: 607b str r3, [r7, #4] + 80003f0: 687b ldr r3, [r7, #4] + __HAL_RCC_PWR_CLK_ENABLE(); + 80003f2: 4b09 ldr r3, [pc, #36] ; (8000418 ) + 80003f4: 69da ldr r2, [r3, #28] + 80003f6: 4b08 ldr r3, [pc, #32] ; (8000418 ) + 80003f8: 2180 movs r1, #128 ; 0x80 + 80003fa: 0549 lsls r1, r1, #21 + 80003fc: 430a orrs r2, r1 + 80003fe: 61da str r2, [r3, #28] + 8000400: 4b05 ldr r3, [pc, #20] ; (8000418 ) + 8000402: 69da ldr r2, [r3, #28] + 8000404: 2380 movs r3, #128 ; 0x80 + 8000406: 055b lsls r3, r3, #21 + 8000408: 4013 ands r3, r2 + 800040a: 603b str r3, [r7, #0] + 800040c: 683b ldr r3, [r7, #0] + /* System interrupt init*/ + + /* USER CODE BEGIN MspInit 1 */ + + /* USER CODE END MspInit 1 */ +} + 800040e: 46c0 nop ; (mov r8, r8) + 8000410: 46bd mov sp, r7 + 8000412: b002 add sp, #8 + 8000414: bd80 pop {r7, pc} + 8000416: 46c0 nop ; (mov r8, r8) + 8000418: 40021000 .word 0x40021000 + +0800041c : +/******************************************************************************/ +/** + * @brief This function handles Non maskable interrupt. + */ +void NMI_Handler(void) +{ + 800041c: b580 push {r7, lr} + 800041e: 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) + 8000420: e7fe b.n 8000420 + +08000422 : + +/** + * @brief This function handles Hard fault interrupt. + */ +void HardFault_Handler(void) +{ + 8000422: b580 push {r7, lr} + 8000424: af00 add r7, sp, #0 + /* USER CODE BEGIN HardFault_IRQn 0 */ + + /* USER CODE END HardFault_IRQn 0 */ + while (1) + 8000426: e7fe b.n 8000426 + +08000428 : + +/** + * @brief This function handles System service call via SWI instruction. + */ +void SVC_Handler(void) +{ + 8000428: b580 push {r7, lr} + 800042a: af00 add r7, sp, #0 + + /* USER CODE END SVC_IRQn 0 */ + /* USER CODE BEGIN SVC_IRQn 1 */ + + /* USER CODE END SVC_IRQn 1 */ +} + 800042c: 46c0 nop ; (mov r8, r8) + 800042e: 46bd mov sp, r7 + 8000430: bd80 pop {r7, pc} + +08000432 : + +/** + * @brief This function handles Pendable request for system service. + */ +void PendSV_Handler(void) +{ + 8000432: b580 push {r7, lr} + 8000434: af00 add r7, sp, #0 + + /* USER CODE END PendSV_IRQn 0 */ + /* USER CODE BEGIN PendSV_IRQn 1 */ + + /* USER CODE END PendSV_IRQn 1 */ +} + 8000436: 46c0 nop ; (mov r8, r8) + 8000438: 46bd mov sp, r7 + 800043a: bd80 pop {r7, pc} + +0800043c : + +/** + * @brief This function handles System tick timer. + */ +void SysTick_Handler(void) +{ + 800043c: b580 push {r7, lr} + 800043e: af00 add r7, sp, #0 + /* USER CODE BEGIN SysTick_IRQn 0 */ + + /* USER CODE END SysTick_IRQn 0 */ + HAL_IncTick(); + 8000440: f000 f90e bl 8000660 + /* USER CODE BEGIN SysTick_IRQn 1 */ + + /* USER CODE END SysTick_IRQn 1 */ +} + 8000444: 46c0 nop ; (mov r8, r8) + 8000446: 46bd mov sp, r7 + 8000448: bd80 pop {r7, pc} + +0800044a : + * @brief Setup the microcontroller system + * @param None + * @retval None + */ +void SystemInit(void) +{ + 800044a: b580 push {r7, lr} + 800044c: af00 add r7, sp, #0 + before branch to main program. This call is made inside + the "startup_stm32f0xx.s" file. + User can setups the default system clock (System clock source, PLL Multiplier + and Divider factors, AHB/APBx prescalers and Flash settings). + */ +} + 800044e: 46c0 nop ; (mov r8, r8) + 8000450: 46bd mov sp, r7 + 8000452: bd80 pop {r7, pc} + +08000454 : +UART_HandleTypeDef huart1; + +/* USART1 init function */ + +void MX_USART1_UART_Init(void) +{ + 8000454: b580 push {r7, lr} + 8000456: af00 add r7, sp, #0 + /* USER CODE END USART1_Init 0 */ + + /* USER CODE BEGIN USART1_Init 1 */ + + /* USER CODE END USART1_Init 1 */ + huart1.Instance = USART1; + 8000458: 4b14 ldr r3, [pc, #80] ; (80004ac ) + 800045a: 4a15 ldr r2, [pc, #84] ; (80004b0 ) + 800045c: 601a str r2, [r3, #0] + huart1.Init.BaudRate = 38400; + 800045e: 4b13 ldr r3, [pc, #76] ; (80004ac ) + 8000460: 2296 movs r2, #150 ; 0x96 + 8000462: 0212 lsls r2, r2, #8 + 8000464: 605a str r2, [r3, #4] + huart1.Init.WordLength = UART_WORDLENGTH_8B; + 8000466: 4b11 ldr r3, [pc, #68] ; (80004ac ) + 8000468: 2200 movs r2, #0 + 800046a: 609a str r2, [r3, #8] + huart1.Init.StopBits = UART_STOPBITS_1; + 800046c: 4b0f ldr r3, [pc, #60] ; (80004ac ) + 800046e: 2200 movs r2, #0 + 8000470: 60da str r2, [r3, #12] + huart1.Init.Parity = UART_PARITY_NONE; + 8000472: 4b0e ldr r3, [pc, #56] ; (80004ac ) + 8000474: 2200 movs r2, #0 + 8000476: 611a str r2, [r3, #16] + huart1.Init.Mode = UART_MODE_TX_RX; + 8000478: 4b0c ldr r3, [pc, #48] ; (80004ac ) + 800047a: 220c movs r2, #12 + 800047c: 615a str r2, [r3, #20] + huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; + 800047e: 4b0b ldr r3, [pc, #44] ; (80004ac ) + 8000480: 2200 movs r2, #0 + 8000482: 619a str r2, [r3, #24] + huart1.Init.OverSampling = UART_OVERSAMPLING_16; + 8000484: 4b09 ldr r3, [pc, #36] ; (80004ac ) + 8000486: 2200 movs r2, #0 + 8000488: 61da str r2, [r3, #28] + huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; + 800048a: 4b08 ldr r3, [pc, #32] ; (80004ac ) + 800048c: 2200 movs r2, #0 + 800048e: 621a str r2, [r3, #32] + huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; + 8000490: 4b06 ldr r3, [pc, #24] ; (80004ac ) + 8000492: 2200 movs r2, #0 + 8000494: 625a str r2, [r3, #36] ; 0x24 + if (HAL_UART_Init(&huart1) != HAL_OK) + 8000496: 4b05 ldr r3, [pc, #20] ; (80004ac ) + 8000498: 0018 movs r0, r3 + 800049a: f001 f845 bl 8001528 + 800049e: 1e03 subs r3, r0, #0 + 80004a0: d001 beq.n 80004a6 + { + Error_Handler(); + 80004a2: f7ff ff91 bl 80003c8 + } + /* USER CODE BEGIN USART1_Init 2 */ + + /* USER CODE END USART1_Init 2 */ + +} + 80004a6: 46c0 nop ; (mov r8, r8) + 80004a8: 46bd mov sp, r7 + 80004aa: bd80 pop {r7, pc} + 80004ac: 20000028 .word 0x20000028 + 80004b0: 40013800 .word 0x40013800 + +080004b4 : + +void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) +{ + 80004b4: b590 push {r4, r7, lr} + 80004b6: b08b sub sp, #44 ; 0x2c + 80004b8: af00 add r7, sp, #0 + 80004ba: 6078 str r0, [r7, #4] + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + 80004bc: 2414 movs r4, #20 + 80004be: 193b adds r3, r7, r4 + 80004c0: 0018 movs r0, r3 + 80004c2: 2314 movs r3, #20 + 80004c4: 001a movs r2, r3 + 80004c6: 2100 movs r1, #0 + 80004c8: f001 fbd4 bl 8001c74 + if(uartHandle->Instance==USART1) + 80004cc: 687b ldr r3, [r7, #4] + 80004ce: 681b ldr r3, [r3, #0] + 80004d0: 4a1c ldr r2, [pc, #112] ; (8000544 ) + 80004d2: 4293 cmp r3, r2 + 80004d4: d132 bne.n 800053c + { + /* USER CODE BEGIN USART1_MspInit 0 */ + + /* USER CODE END USART1_MspInit 0 */ + /* USART1 clock enable */ + __HAL_RCC_USART1_CLK_ENABLE(); + 80004d6: 4b1c ldr r3, [pc, #112] ; (8000548 ) + 80004d8: 699a ldr r2, [r3, #24] + 80004da: 4b1b ldr r3, [pc, #108] ; (8000548 ) + 80004dc: 2180 movs r1, #128 ; 0x80 + 80004de: 01c9 lsls r1, r1, #7 + 80004e0: 430a orrs r2, r1 + 80004e2: 619a str r2, [r3, #24] + 80004e4: 4b18 ldr r3, [pc, #96] ; (8000548 ) + 80004e6: 699a ldr r2, [r3, #24] + 80004e8: 2380 movs r3, #128 ; 0x80 + 80004ea: 01db lsls r3, r3, #7 + 80004ec: 4013 ands r3, r2 + 80004ee: 613b str r3, [r7, #16] + 80004f0: 693b ldr r3, [r7, #16] + + __HAL_RCC_GPIOA_CLK_ENABLE(); + 80004f2: 4b15 ldr r3, [pc, #84] ; (8000548 ) + 80004f4: 695a ldr r2, [r3, #20] + 80004f6: 4b14 ldr r3, [pc, #80] ; (8000548 ) + 80004f8: 2180 movs r1, #128 ; 0x80 + 80004fa: 0289 lsls r1, r1, #10 + 80004fc: 430a orrs r2, r1 + 80004fe: 615a str r2, [r3, #20] + 8000500: 4b11 ldr r3, [pc, #68] ; (8000548 ) + 8000502: 695a ldr r2, [r3, #20] + 8000504: 2380 movs r3, #128 ; 0x80 + 8000506: 029b lsls r3, r3, #10 + 8000508: 4013 ands r3, r2 + 800050a: 60fb str r3, [r7, #12] + 800050c: 68fb ldr r3, [r7, #12] + /**USART1 GPIO Configuration + PA2 ------> USART1_TX + PA15 ------> USART1_RX + */ + GPIO_InitStruct.Pin = VCP_TX_Pin|VCP_RX_Pin; + 800050e: 0021 movs r1, r4 + 8000510: 187b adds r3, r7, r1 + 8000512: 4a0e ldr r2, [pc, #56] ; (800054c ) + 8000514: 601a str r2, [r3, #0] + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 8000516: 187b adds r3, r7, r1 + 8000518: 2202 movs r2, #2 + 800051a: 605a str r2, [r3, #4] + GPIO_InitStruct.Pull = GPIO_NOPULL; + 800051c: 187b adds r3, r7, r1 + 800051e: 2200 movs r2, #0 + 8000520: 609a str r2, [r3, #8] + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; + 8000522: 187b adds r3, r7, r1 + 8000524: 2203 movs r2, #3 + 8000526: 60da str r2, [r3, #12] + GPIO_InitStruct.Alternate = GPIO_AF1_USART1; + 8000528: 187b adds r3, r7, r1 + 800052a: 2201 movs r2, #1 + 800052c: 611a str r2, [r3, #16] + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + 800052e: 187a adds r2, r7, r1 + 8000530: 2390 movs r3, #144 ; 0x90 + 8000532: 05db lsls r3, r3, #23 + 8000534: 0011 movs r1, r2 + 8000536: 0018 movs r0, r3 + 8000538: f000 f962 bl 8000800 + + /* USER CODE BEGIN USART1_MspInit 1 */ + + /* USER CODE END USART1_MspInit 1 */ + } +} + 800053c: 46c0 nop ; (mov r8, r8) + 800053e: 46bd mov sp, r7 + 8000540: b00b add sp, #44 ; 0x2c + 8000542: bd90 pop {r4, r7, pc} + 8000544: 40013800 .word 0x40013800 + 8000548: 40021000 .word 0x40021000 + 800054c: 00008004 .word 0x00008004 + +08000550 : + + .section .text.Reset_Handler + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + ldr r0, =_estack + 8000550: 480d ldr r0, [pc, #52] ; (8000588 ) + mov sp, r0 /* set stack pointer */ + 8000552: 4685 mov sp, r0 + +/* Call the clock system initialization function.*/ + bl SystemInit + 8000554: f7ff ff79 bl 800044a + +/* Copy the data segment initializers from flash to SRAM */ + ldr r0, =_sdata + 8000558: 480c ldr r0, [pc, #48] ; (800058c ) + ldr r1, =_edata + 800055a: 490d ldr r1, [pc, #52] ; (8000590 ) + ldr r2, =_sidata + 800055c: 4a0d ldr r2, [pc, #52] ; (8000594 ) + movs r3, #0 + 800055e: 2300 movs r3, #0 + b LoopCopyDataInit + 8000560: e002 b.n 8000568 + +08000562 : + +CopyDataInit: + ldr r4, [r2, r3] + 8000562: 58d4 ldr r4, [r2, r3] + str r4, [r0, r3] + 8000564: 50c4 str r4, [r0, r3] + adds r3, r3, #4 + 8000566: 3304 adds r3, #4 + +08000568 : + +LoopCopyDataInit: + adds r4, r0, r3 + 8000568: 18c4 adds r4, r0, r3 + cmp r4, r1 + 800056a: 428c cmp r4, r1 + bcc CopyDataInit + 800056c: d3f9 bcc.n 8000562 + +/* Zero fill the bss segment. */ + ldr r2, =_sbss + 800056e: 4a0a ldr r2, [pc, #40] ; (8000598 ) + ldr r4, =_ebss + 8000570: 4c0a ldr r4, [pc, #40] ; (800059c ) + movs r3, #0 + 8000572: 2300 movs r3, #0 + b LoopFillZerobss + 8000574: e001 b.n 800057a + +08000576 : + +FillZerobss: + str r3, [r2] + 8000576: 6013 str r3, [r2, #0] + adds r2, r2, #4 + 8000578: 3204 adds r2, #4 + +0800057a : + +LoopFillZerobss: + cmp r2, r4 + 800057a: 42a2 cmp r2, r4 + bcc FillZerobss + 800057c: d3fb bcc.n 8000576 + +/* Call static constructors */ + bl __libc_init_array + 800057e: f001 fb81 bl 8001c84 <__libc_init_array> +/* Call the application's entry point.*/ + bl main + 8000582: f7ff febd bl 8000300
      + +08000586 : + +LoopForever: + b LoopForever + 8000586: e7fe b.n 8000586 + ldr r0, =_estack + 8000588: 20001000 .word 0x20001000 + ldr r0, =_sdata + 800058c: 20000000 .word 0x20000000 + ldr r1, =_edata + 8000590: 2000000c .word 0x2000000c + ldr r2, =_sidata + 8000594: 08001d24 .word 0x08001d24 + ldr r2, =_sbss + 8000598: 2000000c .word 0x2000000c + ldr r4, =_ebss + 800059c: 200000b4 .word 0x200000b4 + +080005a0 : + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + 80005a0: e7fe b.n 80005a0 + +080005a2 : +#ifdef KED_STM +#include "../../../peripherals/uart.h" + + +void usartSendChar(void* obj, uint8_t ch) +{ + 80005a2: b580 push {r7, lr} + 80005a4: b082 sub sp, #8 + 80005a6: af00 add r7, sp, #0 + 80005a8: 6078 str r0, [r7, #4] + 80005aa: 000a movs r2, r1 + 80005ac: 1cfb adds r3, r7, #3 + 80005ae: 701a strb r2, [r3, #0] + +} + 80005b0: 46c0 nop ; (mov r8, r8) + 80005b2: 46bd mov sp, r7 + 80005b4: b002 add sp, #8 + 80005b6: bd80 pop {r7, pc} + +080005b8 : +#include "ked/ked.h" +#include "../Inc/usart.h" +#include "ked/peripherals/uart.h" + +void reflow_main() +{ + 80005b8: b580 push {r7, lr} + 80005ba: af00 add r7, sp, #0 + usartSendChar(&huart1, 'e'); + 80005bc: 4b03 ldr r3, [pc, #12] ; (80005cc ) + 80005be: 2165 movs r1, #101 ; 0x65 + 80005c0: 0018 movs r0, r3 + 80005c2: f7ff ffee bl 80005a2 +} + 80005c6: 46c0 nop ; (mov r8, r8) + 80005c8: 46bd mov sp, r7 + 80005ca: bd80 pop {r7, pc} + 80005cc: 20000028 .word 0x20000028 + +080005d0 : + * In the default implementation,Systick is used as source of time base. + * The tick variable is incremented each 1ms in its ISR. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_Init(void) +{ + 80005d0: b580 push {r7, lr} + 80005d2: af00 add r7, sp, #0 + /* Configure Flash prefetch */ +#if (PREFETCH_ENABLE != 0) + __HAL_FLASH_PREFETCH_BUFFER_ENABLE(); + 80005d4: 4b07 ldr r3, [pc, #28] ; (80005f4 ) + 80005d6: 681a ldr r2, [r3, #0] + 80005d8: 4b06 ldr r3, [pc, #24] ; (80005f4 ) + 80005da: 2110 movs r1, #16 + 80005dc: 430a orrs r2, r1 + 80005de: 601a str r2, [r3, #0] +#endif /* PREFETCH_ENABLE */ + + /* Use systick as time base source and configure 1ms tick (default clock after Reset is HSI) */ + + HAL_InitTick(TICK_INT_PRIORITY); + 80005e0: 2000 movs r0, #0 + 80005e2: f000 f809 bl 80005f8 + + /* Init the low level hardware */ + HAL_MspInit(); + 80005e6: f7ff fef5 bl 80003d4 + + /* Return function status */ + return HAL_OK; + 80005ea: 2300 movs r3, #0 +} + 80005ec: 0018 movs r0, r3 + 80005ee: 46bd mov sp, r7 + 80005f0: bd80 pop {r7, pc} + 80005f2: 46c0 nop ; (mov r8, r8) + 80005f4: 40022000 .word 0x40022000 + +080005f8 : + * implementation in user file. + * @param TickPriority Tick interrupt priority. + * @retval HAL status + */ +__weak HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) +{ + 80005f8: b590 push {r4, r7, lr} + 80005fa: b083 sub sp, #12 + 80005fc: af00 add r7, sp, #0 + 80005fe: 6078 str r0, [r7, #4] + /*Configure the SysTick to have interrupt in 1ms time basis*/ + if (HAL_SYSTICK_Config(SystemCoreClock / (1000U / uwTickFreq)) > 0U) + 8000600: 4b14 ldr r3, [pc, #80] ; (8000654 ) + 8000602: 681c ldr r4, [r3, #0] + 8000604: 4b14 ldr r3, [pc, #80] ; (8000658 ) + 8000606: 781b ldrb r3, [r3, #0] + 8000608: 0019 movs r1, r3 + 800060a: 23fa movs r3, #250 ; 0xfa + 800060c: 0098 lsls r0, r3, #2 + 800060e: f7ff fd7b bl 8000108 <__udivsi3> + 8000612: 0003 movs r3, r0 + 8000614: 0019 movs r1, r3 + 8000616: 0020 movs r0, r4 + 8000618: f7ff fd76 bl 8000108 <__udivsi3> + 800061c: 0003 movs r3, r0 + 800061e: 0018 movs r0, r3 + 8000620: f000 f8e1 bl 80007e6 + 8000624: 1e03 subs r3, r0, #0 + 8000626: d001 beq.n 800062c + { + return HAL_ERROR; + 8000628: 2301 movs r3, #1 + 800062a: e00f b.n 800064c + } + + /* Configure the SysTick IRQ priority */ + if (TickPriority < (1UL << __NVIC_PRIO_BITS)) + 800062c: 687b ldr r3, [r7, #4] + 800062e: 2b03 cmp r3, #3 + 8000630: d80b bhi.n 800064a + { + HAL_NVIC_SetPriority(SysTick_IRQn, TickPriority, 0U); + 8000632: 6879 ldr r1, [r7, #4] + 8000634: 2301 movs r3, #1 + 8000636: 425b negs r3, r3 + 8000638: 2200 movs r2, #0 + 800063a: 0018 movs r0, r3 + 800063c: f000 f8be bl 80007bc + uwTickPrio = TickPriority; + 8000640: 4b06 ldr r3, [pc, #24] ; (800065c ) + 8000642: 687a ldr r2, [r7, #4] + 8000644: 601a str r2, [r3, #0] + { + return HAL_ERROR; + } + + /* Return function status */ + return HAL_OK; + 8000646: 2300 movs r3, #0 + 8000648: e000 b.n 800064c + return HAL_ERROR; + 800064a: 2301 movs r3, #1 +} + 800064c: 0018 movs r0, r3 + 800064e: 46bd mov sp, r7 + 8000650: b003 add sp, #12 + 8000652: bd90 pop {r4, r7, pc} + 8000654: 20000000 .word 0x20000000 + 8000658: 20000008 .word 0x20000008 + 800065c: 20000004 .word 0x20000004 + +08000660 : + * @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) +{ + 8000660: b580 push {r7, lr} + 8000662: af00 add r7, sp, #0 + uwTick += uwTickFreq; + 8000664: 4b05 ldr r3, [pc, #20] ; (800067c ) + 8000666: 781b ldrb r3, [r3, #0] + 8000668: 001a movs r2, r3 + 800066a: 4b05 ldr r3, [pc, #20] ; (8000680 ) + 800066c: 681b ldr r3, [r3, #0] + 800066e: 18d2 adds r2, r2, r3 + 8000670: 4b03 ldr r3, [pc, #12] ; (8000680 ) + 8000672: 601a str r2, [r3, #0] +} + 8000674: 46c0 nop ; (mov r8, r8) + 8000676: 46bd mov sp, r7 + 8000678: bd80 pop {r7, pc} + 800067a: 46c0 nop ; (mov r8, r8) + 800067c: 20000008 .word 0x20000008 + 8000680: 200000b0 .word 0x200000b0 + +08000684 : + * @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) +{ + 8000684: b580 push {r7, lr} + 8000686: af00 add r7, sp, #0 + return uwTick; + 8000688: 4b02 ldr r3, [pc, #8] ; (8000694 ) + 800068a: 681b ldr r3, [r3, #0] +} + 800068c: 0018 movs r0, r3 + 800068e: 46bd mov sp, r7 + 8000690: bd80 pop {r7, pc} + 8000692: 46c0 nop ; (mov r8, r8) + 8000694: 200000b0 .word 0x200000b0 + +08000698 <__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) +{ + 8000698: b590 push {r4, r7, lr} + 800069a: b083 sub sp, #12 + 800069c: af00 add r7, sp, #0 + 800069e: 0002 movs r2, r0 + 80006a0: 6039 str r1, [r7, #0] + 80006a2: 1dfb adds r3, r7, #7 + 80006a4: 701a strb r2, [r3, #0] + if ((int32_t)(IRQn) >= 0) + 80006a6: 1dfb adds r3, r7, #7 + 80006a8: 781b ldrb r3, [r3, #0] + 80006aa: 2b7f cmp r3, #127 ; 0x7f + 80006ac: d828 bhi.n 8000700 <__NVIC_SetPriority+0x68> + { + NVIC->IP[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IP[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + 80006ae: 4a2f ldr r2, [pc, #188] ; (800076c <__NVIC_SetPriority+0xd4>) + 80006b0: 1dfb adds r3, r7, #7 + 80006b2: 781b ldrb r3, [r3, #0] + 80006b4: b25b sxtb r3, r3 + 80006b6: 089b lsrs r3, r3, #2 + 80006b8: 33c0 adds r3, #192 ; 0xc0 + 80006ba: 009b lsls r3, r3, #2 + 80006bc: 589b ldr r3, [r3, r2] + 80006be: 1dfa adds r2, r7, #7 + 80006c0: 7812 ldrb r2, [r2, #0] + 80006c2: 0011 movs r1, r2 + 80006c4: 2203 movs r2, #3 + 80006c6: 400a ands r2, r1 + 80006c8: 00d2 lsls r2, r2, #3 + 80006ca: 21ff movs r1, #255 ; 0xff + 80006cc: 4091 lsls r1, r2 + 80006ce: 000a movs r2, r1 + 80006d0: 43d2 mvns r2, r2 + 80006d2: 401a ands r2, r3 + 80006d4: 0011 movs r1, r2 + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + 80006d6: 683b ldr r3, [r7, #0] + 80006d8: 019b lsls r3, r3, #6 + 80006da: 22ff movs r2, #255 ; 0xff + 80006dc: 401a ands r2, r3 + 80006de: 1dfb adds r3, r7, #7 + 80006e0: 781b ldrb r3, [r3, #0] + 80006e2: 0018 movs r0, r3 + 80006e4: 2303 movs r3, #3 + 80006e6: 4003 ands r3, r0 + 80006e8: 00db lsls r3, r3, #3 + 80006ea: 409a lsls r2, r3 + NVIC->IP[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IP[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + 80006ec: 481f ldr r0, [pc, #124] ; (800076c <__NVIC_SetPriority+0xd4>) + 80006ee: 1dfb adds r3, r7, #7 + 80006f0: 781b ldrb r3, [r3, #0] + 80006f2: b25b sxtb r3, r3 + 80006f4: 089b lsrs r3, r3, #2 + 80006f6: 430a orrs r2, r1 + 80006f8: 33c0 adds r3, #192 ; 0xc0 + 80006fa: 009b lsls r3, r3, #2 + 80006fc: 501a str r2, [r3, r0] + 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))); + } +} + 80006fe: e031 b.n 8000764 <__NVIC_SetPriority+0xcc> + SCB->SHP[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + 8000700: 4a1b ldr r2, [pc, #108] ; (8000770 <__NVIC_SetPriority+0xd8>) + 8000702: 1dfb adds r3, r7, #7 + 8000704: 781b ldrb r3, [r3, #0] + 8000706: 0019 movs r1, r3 + 8000708: 230f movs r3, #15 + 800070a: 400b ands r3, r1 + 800070c: 3b08 subs r3, #8 + 800070e: 089b lsrs r3, r3, #2 + 8000710: 3306 adds r3, #6 + 8000712: 009b lsls r3, r3, #2 + 8000714: 18d3 adds r3, r2, r3 + 8000716: 3304 adds r3, #4 + 8000718: 681b ldr r3, [r3, #0] + 800071a: 1dfa adds r2, r7, #7 + 800071c: 7812 ldrb r2, [r2, #0] + 800071e: 0011 movs r1, r2 + 8000720: 2203 movs r2, #3 + 8000722: 400a ands r2, r1 + 8000724: 00d2 lsls r2, r2, #3 + 8000726: 21ff movs r1, #255 ; 0xff + 8000728: 4091 lsls r1, r2 + 800072a: 000a movs r2, r1 + 800072c: 43d2 mvns r2, r2 + 800072e: 401a ands r2, r3 + 8000730: 0011 movs r1, r2 + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + 8000732: 683b ldr r3, [r7, #0] + 8000734: 019b lsls r3, r3, #6 + 8000736: 22ff movs r2, #255 ; 0xff + 8000738: 401a ands r2, r3 + 800073a: 1dfb adds r3, r7, #7 + 800073c: 781b ldrb r3, [r3, #0] + 800073e: 0018 movs r0, r3 + 8000740: 2303 movs r3, #3 + 8000742: 4003 ands r3, r0 + 8000744: 00db lsls r3, r3, #3 + 8000746: 409a lsls r2, r3 + SCB->SHP[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + 8000748: 4809 ldr r0, [pc, #36] ; (8000770 <__NVIC_SetPriority+0xd8>) + 800074a: 1dfb adds r3, r7, #7 + 800074c: 781b ldrb r3, [r3, #0] + 800074e: 001c movs r4, r3 + 8000750: 230f movs r3, #15 + 8000752: 4023 ands r3, r4 + 8000754: 3b08 subs r3, #8 + 8000756: 089b lsrs r3, r3, #2 + 8000758: 430a orrs r2, r1 + 800075a: 3306 adds r3, #6 + 800075c: 009b lsls r3, r3, #2 + 800075e: 18c3 adds r3, r0, r3 + 8000760: 3304 adds r3, #4 + 8000762: 601a str r2, [r3, #0] +} + 8000764: 46c0 nop ; (mov r8, r8) + 8000766: 46bd mov sp, r7 + 8000768: b003 add sp, #12 + 800076a: bd90 pop {r4, r7, pc} + 800076c: e000e100 .word 0xe000e100 + 8000770: e000ed00 .word 0xe000ed00 + +08000774 : + \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) +{ + 8000774: b580 push {r7, lr} + 8000776: b082 sub sp, #8 + 8000778: af00 add r7, sp, #0 + 800077a: 6078 str r0, [r7, #4] + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + 800077c: 687b ldr r3, [r7, #4] + 800077e: 1e5a subs r2, r3, #1 + 8000780: 2380 movs r3, #128 ; 0x80 + 8000782: 045b lsls r3, r3, #17 + 8000784: 429a cmp r2, r3 + 8000786: d301 bcc.n 800078c + { + return (1UL); /* Reload value impossible */ + 8000788: 2301 movs r3, #1 + 800078a: e010 b.n 80007ae + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + 800078c: 4b0a ldr r3, [pc, #40] ; (80007b8 ) + 800078e: 687a ldr r2, [r7, #4] + 8000790: 3a01 subs r2, #1 + 8000792: 605a str r2, [r3, #4] + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + 8000794: 2301 movs r3, #1 + 8000796: 425b negs r3, r3 + 8000798: 2103 movs r1, #3 + 800079a: 0018 movs r0, r3 + 800079c: f7ff ff7c bl 8000698 <__NVIC_SetPriority> + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + 80007a0: 4b05 ldr r3, [pc, #20] ; (80007b8 ) + 80007a2: 2200 movs r2, #0 + 80007a4: 609a str r2, [r3, #8] + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + 80007a6: 4b04 ldr r3, [pc, #16] ; (80007b8 ) + 80007a8: 2207 movs r2, #7 + 80007aa: 601a str r2, [r3, #0] + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ + 80007ac: 2300 movs r3, #0 +} + 80007ae: 0018 movs r0, r3 + 80007b0: 46bd mov sp, r7 + 80007b2: b002 add sp, #8 + 80007b4: bd80 pop {r7, pc} + 80007b6: 46c0 nop ; (mov r8, r8) + 80007b8: e000e010 .word 0xe000e010 + +080007bc : + * with stm32f0xx devices, this parameter is a dummy value and it is ignored, because + * no subpriority supported in Cortex M0 based products. + * @retval None + */ +void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority) +{ + 80007bc: b580 push {r7, lr} + 80007be: b084 sub sp, #16 + 80007c0: af00 add r7, sp, #0 + 80007c2: 60b9 str r1, [r7, #8] + 80007c4: 607a str r2, [r7, #4] + 80007c6: 210f movs r1, #15 + 80007c8: 187b adds r3, r7, r1 + 80007ca: 1c02 adds r2, r0, #0 + 80007cc: 701a strb r2, [r3, #0] + /* Check the parameters */ + assert_param(IS_NVIC_PREEMPTION_PRIORITY(PreemptPriority)); + NVIC_SetPriority(IRQn,PreemptPriority); + 80007ce: 68ba ldr r2, [r7, #8] + 80007d0: 187b adds r3, r7, r1 + 80007d2: 781b ldrb r3, [r3, #0] + 80007d4: b25b sxtb r3, r3 + 80007d6: 0011 movs r1, r2 + 80007d8: 0018 movs r0, r3 + 80007da: f7ff ff5d bl 8000698 <__NVIC_SetPriority> +} + 80007de: 46c0 nop ; (mov r8, r8) + 80007e0: 46bd mov sp, r7 + 80007e2: b004 add sp, #16 + 80007e4: bd80 pop {r7, pc} + +080007e6 : + * @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) +{ + 80007e6: b580 push {r7, lr} + 80007e8: b082 sub sp, #8 + 80007ea: af00 add r7, sp, #0 + 80007ec: 6078 str r0, [r7, #4] + return SysTick_Config(TicksNumb); + 80007ee: 687b ldr r3, [r7, #4] + 80007f0: 0018 movs r0, r3 + 80007f2: f7ff ffbf bl 8000774 + 80007f6: 0003 movs r3, r0 +} + 80007f8: 0018 movs r0, r3 + 80007fa: 46bd mov sp, r7 + 80007fc: b002 add sp, #8 + 80007fe: bd80 pop {r7, pc} + +08000800 : + * @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) +{ + 8000800: b580 push {r7, lr} + 8000802: b086 sub sp, #24 + 8000804: af00 add r7, sp, #0 + 8000806: 6078 str r0, [r7, #4] + 8000808: 6039 str r1, [r7, #0] + uint32_t position = 0x00u; + 800080a: 2300 movs r3, #0 + 800080c: 617b str r3, [r7, #20] + 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 */ + while (((GPIO_Init->Pin) >> position) != 0x00u) + 800080e: e149 b.n 8000aa4 + { + /* Get current io position */ + iocurrent = (GPIO_Init->Pin) & (1uL << position); + 8000810: 683b ldr r3, [r7, #0] + 8000812: 681b ldr r3, [r3, #0] + 8000814: 2101 movs r1, #1 + 8000816: 697a ldr r2, [r7, #20] + 8000818: 4091 lsls r1, r2 + 800081a: 000a movs r2, r1 + 800081c: 4013 ands r3, r2 + 800081e: 60fb str r3, [r7, #12] + + if (iocurrent != 0x00u) + 8000820: 68fb ldr r3, [r7, #12] + 8000822: 2b00 cmp r3, #0 + 8000824: d100 bne.n 8000828 + 8000826: e13a b.n 8000a9e + { + /*--------------------- GPIO Mode Configuration ------------------------*/ + /* In case of Output or Alternate function mode selection */ + if(((GPIO_Init->Mode & GPIO_MODE) == MODE_OUTPUT) || + 8000828: 683b ldr r3, [r7, #0] + 800082a: 685b ldr r3, [r3, #4] + 800082c: 2203 movs r2, #3 + 800082e: 4013 ands r3, r2 + 8000830: 2b01 cmp r3, #1 + 8000832: d005 beq.n 8000840 + ((GPIO_Init->Mode & GPIO_MODE) == MODE_AF)) + 8000834: 683b ldr r3, [r7, #0] + 8000836: 685b ldr r3, [r3, #4] + 8000838: 2203 movs r2, #3 + 800083a: 4013 ands r3, r2 + if(((GPIO_Init->Mode & GPIO_MODE) == MODE_OUTPUT) || + 800083c: 2b02 cmp r3, #2 + 800083e: d130 bne.n 80008a2 + { + /* Check the Speed parameter */ + assert_param(IS_GPIO_SPEED(GPIO_Init->Speed)); + /* Configure the IO Speed */ + temp = GPIOx->OSPEEDR; + 8000840: 687b ldr r3, [r7, #4] + 8000842: 689b ldr r3, [r3, #8] + 8000844: 613b str r3, [r7, #16] + temp &= ~(GPIO_OSPEEDER_OSPEEDR0 << (position * 2u)); + 8000846: 697b ldr r3, [r7, #20] + 8000848: 005b lsls r3, r3, #1 + 800084a: 2203 movs r2, #3 + 800084c: 409a lsls r2, r3 + 800084e: 0013 movs r3, r2 + 8000850: 43da mvns r2, r3 + 8000852: 693b ldr r3, [r7, #16] + 8000854: 4013 ands r3, r2 + 8000856: 613b str r3, [r7, #16] + temp |= (GPIO_Init->Speed << (position * 2u)); + 8000858: 683b ldr r3, [r7, #0] + 800085a: 68da ldr r2, [r3, #12] + 800085c: 697b ldr r3, [r7, #20] + 800085e: 005b lsls r3, r3, #1 + 8000860: 409a lsls r2, r3 + 8000862: 0013 movs r3, r2 + 8000864: 693a ldr r2, [r7, #16] + 8000866: 4313 orrs r3, r2 + 8000868: 613b str r3, [r7, #16] + GPIOx->OSPEEDR = temp; + 800086a: 687b ldr r3, [r7, #4] + 800086c: 693a ldr r2, [r7, #16] + 800086e: 609a str r2, [r3, #8] + + /* Configure the IO Output Type */ + temp = GPIOx->OTYPER; + 8000870: 687b ldr r3, [r7, #4] + 8000872: 685b ldr r3, [r3, #4] + 8000874: 613b str r3, [r7, #16] + temp &= ~(GPIO_OTYPER_OT_0 << position) ; + 8000876: 2201 movs r2, #1 + 8000878: 697b ldr r3, [r7, #20] + 800087a: 409a lsls r2, r3 + 800087c: 0013 movs r3, r2 + 800087e: 43da mvns r2, r3 + 8000880: 693b ldr r3, [r7, #16] + 8000882: 4013 ands r3, r2 + 8000884: 613b str r3, [r7, #16] + temp |= (((GPIO_Init->Mode & OUTPUT_TYPE) >> OUTPUT_TYPE_Pos) << position); + 8000886: 683b ldr r3, [r7, #0] + 8000888: 685b ldr r3, [r3, #4] + 800088a: 091b lsrs r3, r3, #4 + 800088c: 2201 movs r2, #1 + 800088e: 401a ands r2, r3 + 8000890: 697b ldr r3, [r7, #20] + 8000892: 409a lsls r2, r3 + 8000894: 0013 movs r3, r2 + 8000896: 693a ldr r2, [r7, #16] + 8000898: 4313 orrs r3, r2 + 800089a: 613b str r3, [r7, #16] + GPIOx->OTYPER = temp; + 800089c: 687b ldr r3, [r7, #4] + 800089e: 693a ldr r2, [r7, #16] + 80008a0: 605a str r2, [r3, #4] + } + + if((GPIO_Init->Mode & GPIO_MODE) != MODE_ANALOG) + 80008a2: 683b ldr r3, [r7, #0] + 80008a4: 685b ldr r3, [r3, #4] + 80008a6: 2203 movs r2, #3 + 80008a8: 4013 ands r3, r2 + 80008aa: 2b03 cmp r3, #3 + 80008ac: d017 beq.n 80008de + { + /* Check the Pull parameter */ + assert_param(IS_GPIO_PULL(GPIO_Init->Pull)); + + /* Activate the Pull-up or Pull down resistor for the current IO */ + temp = GPIOx->PUPDR; + 80008ae: 687b ldr r3, [r7, #4] + 80008b0: 68db ldr r3, [r3, #12] + 80008b2: 613b str r3, [r7, #16] + temp &= ~(GPIO_PUPDR_PUPDR0 << (position * 2u)); + 80008b4: 697b ldr r3, [r7, #20] + 80008b6: 005b lsls r3, r3, #1 + 80008b8: 2203 movs r2, #3 + 80008ba: 409a lsls r2, r3 + 80008bc: 0013 movs r3, r2 + 80008be: 43da mvns r2, r3 + 80008c0: 693b ldr r3, [r7, #16] + 80008c2: 4013 ands r3, r2 + 80008c4: 613b str r3, [r7, #16] + temp |= ((GPIO_Init->Pull) << (position * 2u)); + 80008c6: 683b ldr r3, [r7, #0] + 80008c8: 689a ldr r2, [r3, #8] + 80008ca: 697b ldr r3, [r7, #20] + 80008cc: 005b lsls r3, r3, #1 + 80008ce: 409a lsls r2, r3 + 80008d0: 0013 movs r3, r2 + 80008d2: 693a ldr r2, [r7, #16] + 80008d4: 4313 orrs r3, r2 + 80008d6: 613b str r3, [r7, #16] + GPIOx->PUPDR = temp; + 80008d8: 687b ldr r3, [r7, #4] + 80008da: 693a ldr r2, [r7, #16] + 80008dc: 60da str r2, [r3, #12] + } + + /* In case of Alternate function mode selection */ + if((GPIO_Init->Mode & GPIO_MODE) == MODE_AF) + 80008de: 683b ldr r3, [r7, #0] + 80008e0: 685b ldr r3, [r3, #4] + 80008e2: 2203 movs r2, #3 + 80008e4: 4013 ands r3, r2 + 80008e6: 2b02 cmp r3, #2 + 80008e8: d123 bne.n 8000932 + /* Check the Alternate function parameters */ + assert_param(IS_GPIO_AF_INSTANCE(GPIOx)); + assert_param(IS_GPIO_AF(GPIO_Init->Alternate)); + + /* Configure Alternate function mapped with the current IO */ + temp = GPIOx->AFR[position >> 3u]; + 80008ea: 697b ldr r3, [r7, #20] + 80008ec: 08da lsrs r2, r3, #3 + 80008ee: 687b ldr r3, [r7, #4] + 80008f0: 3208 adds r2, #8 + 80008f2: 0092 lsls r2, r2, #2 + 80008f4: 58d3 ldr r3, [r2, r3] + 80008f6: 613b str r3, [r7, #16] + temp &= ~(0xFu << ((position & 0x07u) * 4u)); + 80008f8: 697b ldr r3, [r7, #20] + 80008fa: 2207 movs r2, #7 + 80008fc: 4013 ands r3, r2 + 80008fe: 009b lsls r3, r3, #2 + 8000900: 220f movs r2, #15 + 8000902: 409a lsls r2, r3 + 8000904: 0013 movs r3, r2 + 8000906: 43da mvns r2, r3 + 8000908: 693b ldr r3, [r7, #16] + 800090a: 4013 ands r3, r2 + 800090c: 613b str r3, [r7, #16] + temp |= ((GPIO_Init->Alternate) << ((position & 0x07u) * 4u)); + 800090e: 683b ldr r3, [r7, #0] + 8000910: 691a ldr r2, [r3, #16] + 8000912: 697b ldr r3, [r7, #20] + 8000914: 2107 movs r1, #7 + 8000916: 400b ands r3, r1 + 8000918: 009b lsls r3, r3, #2 + 800091a: 409a lsls r2, r3 + 800091c: 0013 movs r3, r2 + 800091e: 693a ldr r2, [r7, #16] + 8000920: 4313 orrs r3, r2 + 8000922: 613b str r3, [r7, #16] + GPIOx->AFR[position >> 3u] = temp; + 8000924: 697b ldr r3, [r7, #20] + 8000926: 08da lsrs r2, r3, #3 + 8000928: 687b ldr r3, [r7, #4] + 800092a: 3208 adds r2, #8 + 800092c: 0092 lsls r2, r2, #2 + 800092e: 6939 ldr r1, [r7, #16] + 8000930: 50d1 str r1, [r2, r3] + } + + /* Configure IO Direction mode (Input, Output, Alternate or Analog) */ + temp = GPIOx->MODER; + 8000932: 687b ldr r3, [r7, #4] + 8000934: 681b ldr r3, [r3, #0] + 8000936: 613b str r3, [r7, #16] + temp &= ~(GPIO_MODER_MODER0 << (position * 2u)); + 8000938: 697b ldr r3, [r7, #20] + 800093a: 005b lsls r3, r3, #1 + 800093c: 2203 movs r2, #3 + 800093e: 409a lsls r2, r3 + 8000940: 0013 movs r3, r2 + 8000942: 43da mvns r2, r3 + 8000944: 693b ldr r3, [r7, #16] + 8000946: 4013 ands r3, r2 + 8000948: 613b str r3, [r7, #16] + temp |= ((GPIO_Init->Mode & GPIO_MODE) << (position * 2u)); + 800094a: 683b ldr r3, [r7, #0] + 800094c: 685b ldr r3, [r3, #4] + 800094e: 2203 movs r2, #3 + 8000950: 401a ands r2, r3 + 8000952: 697b ldr r3, [r7, #20] + 8000954: 005b lsls r3, r3, #1 + 8000956: 409a lsls r2, r3 + 8000958: 0013 movs r3, r2 + 800095a: 693a ldr r2, [r7, #16] + 800095c: 4313 orrs r3, r2 + 800095e: 613b str r3, [r7, #16] + GPIOx->MODER = temp; + 8000960: 687b ldr r3, [r7, #4] + 8000962: 693a ldr r2, [r7, #16] + 8000964: 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) + 8000966: 683b ldr r3, [r7, #0] + 8000968: 685a ldr r2, [r3, #4] + 800096a: 23c0 movs r3, #192 ; 0xc0 + 800096c: 029b lsls r3, r3, #10 + 800096e: 4013 ands r3, r2 + 8000970: d100 bne.n 8000974 + 8000972: e094 b.n 8000a9e + { + /* Enable SYSCFG Clock */ + __HAL_RCC_SYSCFG_CLK_ENABLE(); + 8000974: 4b51 ldr r3, [pc, #324] ; (8000abc ) + 8000976: 699a ldr r2, [r3, #24] + 8000978: 4b50 ldr r3, [pc, #320] ; (8000abc ) + 800097a: 2101 movs r1, #1 + 800097c: 430a orrs r2, r1 + 800097e: 619a str r2, [r3, #24] + 8000980: 4b4e ldr r3, [pc, #312] ; (8000abc ) + 8000982: 699b ldr r3, [r3, #24] + 8000984: 2201 movs r2, #1 + 8000986: 4013 ands r3, r2 + 8000988: 60bb str r3, [r7, #8] + 800098a: 68bb ldr r3, [r7, #8] + + temp = SYSCFG->EXTICR[position >> 2u]; + 800098c: 4a4c ldr r2, [pc, #304] ; (8000ac0 ) + 800098e: 697b ldr r3, [r7, #20] + 8000990: 089b lsrs r3, r3, #2 + 8000992: 3302 adds r3, #2 + 8000994: 009b lsls r3, r3, #2 + 8000996: 589b ldr r3, [r3, r2] + 8000998: 613b str r3, [r7, #16] + temp &= ~(0x0FuL << (4u * (position & 0x03u))); + 800099a: 697b ldr r3, [r7, #20] + 800099c: 2203 movs r2, #3 + 800099e: 4013 ands r3, r2 + 80009a0: 009b lsls r3, r3, #2 + 80009a2: 220f movs r2, #15 + 80009a4: 409a lsls r2, r3 + 80009a6: 0013 movs r3, r2 + 80009a8: 43da mvns r2, r3 + 80009aa: 693b ldr r3, [r7, #16] + 80009ac: 4013 ands r3, r2 + 80009ae: 613b str r3, [r7, #16] + temp |= (GPIO_GET_INDEX(GPIOx) << (4u * (position & 0x03u))); + 80009b0: 687a ldr r2, [r7, #4] + 80009b2: 2390 movs r3, #144 ; 0x90 + 80009b4: 05db lsls r3, r3, #23 + 80009b6: 429a cmp r2, r3 + 80009b8: d00d beq.n 80009d6 + 80009ba: 687b ldr r3, [r7, #4] + 80009bc: 4a41 ldr r2, [pc, #260] ; (8000ac4 ) + 80009be: 4293 cmp r3, r2 + 80009c0: d007 beq.n 80009d2 + 80009c2: 687b ldr r3, [r7, #4] + 80009c4: 4a40 ldr r2, [pc, #256] ; (8000ac8 ) + 80009c6: 4293 cmp r3, r2 + 80009c8: d101 bne.n 80009ce + 80009ca: 2302 movs r3, #2 + 80009cc: e004 b.n 80009d8 + 80009ce: 2305 movs r3, #5 + 80009d0: e002 b.n 80009d8 + 80009d2: 2301 movs r3, #1 + 80009d4: e000 b.n 80009d8 + 80009d6: 2300 movs r3, #0 + 80009d8: 697a ldr r2, [r7, #20] + 80009da: 2103 movs r1, #3 + 80009dc: 400a ands r2, r1 + 80009de: 0092 lsls r2, r2, #2 + 80009e0: 4093 lsls r3, r2 + 80009e2: 693a ldr r2, [r7, #16] + 80009e4: 4313 orrs r3, r2 + 80009e6: 613b str r3, [r7, #16] + SYSCFG->EXTICR[position >> 2u] = temp; + 80009e8: 4935 ldr r1, [pc, #212] ; (8000ac0 ) + 80009ea: 697b ldr r3, [r7, #20] + 80009ec: 089b lsrs r3, r3, #2 + 80009ee: 3302 adds r3, #2 + 80009f0: 009b lsls r3, r3, #2 + 80009f2: 693a ldr r2, [r7, #16] + 80009f4: 505a str r2, [r3, r1] + + /* Clear Rising Falling edge configuration */ + temp = EXTI->RTSR; + 80009f6: 4b35 ldr r3, [pc, #212] ; (8000acc ) + 80009f8: 689b ldr r3, [r3, #8] + 80009fa: 613b str r3, [r7, #16] + temp &= ~(iocurrent); + 80009fc: 68fb ldr r3, [r7, #12] + 80009fe: 43da mvns r2, r3 + 8000a00: 693b ldr r3, [r7, #16] + 8000a02: 4013 ands r3, r2 + 8000a04: 613b str r3, [r7, #16] + if((GPIO_Init->Mode & TRIGGER_RISING) != 0x00u) + 8000a06: 683b ldr r3, [r7, #0] + 8000a08: 685a ldr r2, [r3, #4] + 8000a0a: 2380 movs r3, #128 ; 0x80 + 8000a0c: 035b lsls r3, r3, #13 + 8000a0e: 4013 ands r3, r2 + 8000a10: d003 beq.n 8000a1a + { + temp |= iocurrent; + 8000a12: 693a ldr r2, [r7, #16] + 8000a14: 68fb ldr r3, [r7, #12] + 8000a16: 4313 orrs r3, r2 + 8000a18: 613b str r3, [r7, #16] + } + EXTI->RTSR = temp; + 8000a1a: 4b2c ldr r3, [pc, #176] ; (8000acc ) + 8000a1c: 693a ldr r2, [r7, #16] + 8000a1e: 609a str r2, [r3, #8] + + temp = EXTI->FTSR; + 8000a20: 4b2a ldr r3, [pc, #168] ; (8000acc ) + 8000a22: 68db ldr r3, [r3, #12] + 8000a24: 613b str r3, [r7, #16] + temp &= ~(iocurrent); + 8000a26: 68fb ldr r3, [r7, #12] + 8000a28: 43da mvns r2, r3 + 8000a2a: 693b ldr r3, [r7, #16] + 8000a2c: 4013 ands r3, r2 + 8000a2e: 613b str r3, [r7, #16] + if((GPIO_Init->Mode & TRIGGER_FALLING) != 0x00u) + 8000a30: 683b ldr r3, [r7, #0] + 8000a32: 685a ldr r2, [r3, #4] + 8000a34: 2380 movs r3, #128 ; 0x80 + 8000a36: 039b lsls r3, r3, #14 + 8000a38: 4013 ands r3, r2 + 8000a3a: d003 beq.n 8000a44 + { + temp |= iocurrent; + 8000a3c: 693a ldr r2, [r7, #16] + 8000a3e: 68fb ldr r3, [r7, #12] + 8000a40: 4313 orrs r3, r2 + 8000a42: 613b str r3, [r7, #16] + } + EXTI->FTSR = temp; + 8000a44: 4b21 ldr r3, [pc, #132] ; (8000acc ) + 8000a46: 693a ldr r2, [r7, #16] + 8000a48: 60da str r2, [r3, #12] + + /* Clear EXTI line configuration */ + temp = EXTI->EMR; + 8000a4a: 4b20 ldr r3, [pc, #128] ; (8000acc ) + 8000a4c: 685b ldr r3, [r3, #4] + 8000a4e: 613b str r3, [r7, #16] + temp &= ~(iocurrent); + 8000a50: 68fb ldr r3, [r7, #12] + 8000a52: 43da mvns r2, r3 + 8000a54: 693b ldr r3, [r7, #16] + 8000a56: 4013 ands r3, r2 + 8000a58: 613b str r3, [r7, #16] + if((GPIO_Init->Mode & EXTI_EVT) != 0x00u) + 8000a5a: 683b ldr r3, [r7, #0] + 8000a5c: 685a ldr r2, [r3, #4] + 8000a5e: 2380 movs r3, #128 ; 0x80 + 8000a60: 029b lsls r3, r3, #10 + 8000a62: 4013 ands r3, r2 + 8000a64: d003 beq.n 8000a6e + { + temp |= iocurrent; + 8000a66: 693a ldr r2, [r7, #16] + 8000a68: 68fb ldr r3, [r7, #12] + 8000a6a: 4313 orrs r3, r2 + 8000a6c: 613b str r3, [r7, #16] + } + EXTI->EMR = temp; + 8000a6e: 4b17 ldr r3, [pc, #92] ; (8000acc ) + 8000a70: 693a ldr r2, [r7, #16] + 8000a72: 605a str r2, [r3, #4] + + temp = EXTI->IMR; + 8000a74: 4b15 ldr r3, [pc, #84] ; (8000acc ) + 8000a76: 681b ldr r3, [r3, #0] + 8000a78: 613b str r3, [r7, #16] + temp &= ~(iocurrent); + 8000a7a: 68fb ldr r3, [r7, #12] + 8000a7c: 43da mvns r2, r3 + 8000a7e: 693b ldr r3, [r7, #16] + 8000a80: 4013 ands r3, r2 + 8000a82: 613b str r3, [r7, #16] + if((GPIO_Init->Mode & EXTI_IT) != 0x00u) + 8000a84: 683b ldr r3, [r7, #0] + 8000a86: 685a ldr r2, [r3, #4] + 8000a88: 2380 movs r3, #128 ; 0x80 + 8000a8a: 025b lsls r3, r3, #9 + 8000a8c: 4013 ands r3, r2 + 8000a8e: d003 beq.n 8000a98 + { + temp |= iocurrent; + 8000a90: 693a ldr r2, [r7, #16] + 8000a92: 68fb ldr r3, [r7, #12] + 8000a94: 4313 orrs r3, r2 + 8000a96: 613b str r3, [r7, #16] + } + EXTI->IMR = temp; + 8000a98: 4b0c ldr r3, [pc, #48] ; (8000acc ) + 8000a9a: 693a ldr r2, [r7, #16] + 8000a9c: 601a str r2, [r3, #0] + } + } + + position++; + 8000a9e: 697b ldr r3, [r7, #20] + 8000aa0: 3301 adds r3, #1 + 8000aa2: 617b str r3, [r7, #20] + while (((GPIO_Init->Pin) >> position) != 0x00u) + 8000aa4: 683b ldr r3, [r7, #0] + 8000aa6: 681a ldr r2, [r3, #0] + 8000aa8: 697b ldr r3, [r7, #20] + 8000aaa: 40da lsrs r2, r3 + 8000aac: 1e13 subs r3, r2, #0 + 8000aae: d000 beq.n 8000ab2 + 8000ab0: e6ae b.n 8000810 + } +} + 8000ab2: 46c0 nop ; (mov r8, r8) + 8000ab4: 46c0 nop ; (mov r8, r8) + 8000ab6: 46bd mov sp, r7 + 8000ab8: b006 add sp, #24 + 8000aba: bd80 pop {r7, pc} + 8000abc: 40021000 .word 0x40021000 + 8000ac0: 40010000 .word 0x40010000 + 8000ac4: 48000400 .word 0x48000400 + 8000ac8: 48000800 .word 0x48000800 + 8000acc: 40010400 .word 0x40010400 + +08000ad0 : + * supported by this macro. User should request a transition to HSE Off + * first and then HSE On or HSE Bypass. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct) +{ + 8000ad0: b580 push {r7, lr} + 8000ad2: b088 sub sp, #32 + 8000ad4: af00 add r7, sp, #0 + 8000ad6: 6078 str r0, [r7, #4] + uint32_t tickstart; + uint32_t pll_config; + uint32_t pll_config2; + + /* Check Null pointer */ + if(RCC_OscInitStruct == NULL) + 8000ad8: 687b ldr r3, [r7, #4] + 8000ada: 2b00 cmp r3, #0 + 8000adc: d101 bne.n 8000ae2 + { + return HAL_ERROR; + 8000ade: 2301 movs r3, #1 + 8000ae0: e301 b.n 80010e6 + + /* Check the parameters */ + assert_param(IS_RCC_OSCILLATORTYPE(RCC_OscInitStruct->OscillatorType)); + + /*------------------------------- HSE Configuration ------------------------*/ + if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE) + 8000ae2: 687b ldr r3, [r7, #4] + 8000ae4: 681b ldr r3, [r3, #0] + 8000ae6: 2201 movs r2, #1 + 8000ae8: 4013 ands r3, r2 + 8000aea: d100 bne.n 8000aee + 8000aec: e08d b.n 8000c0a + { + /* 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 it is not allowed to be disabled */ + if((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSE) + 8000aee: 4bc3 ldr r3, [pc, #780] ; (8000dfc ) + 8000af0: 685b ldr r3, [r3, #4] + 8000af2: 220c movs r2, #12 + 8000af4: 4013 ands r3, r2 + 8000af6: 2b04 cmp r3, #4 + 8000af8: d00e beq.n 8000b18 + || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && (__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_HSE))) + 8000afa: 4bc0 ldr r3, [pc, #768] ; (8000dfc ) + 8000afc: 685b ldr r3, [r3, #4] + 8000afe: 220c movs r2, #12 + 8000b00: 4013 ands r3, r2 + 8000b02: 2b08 cmp r3, #8 + 8000b04: d116 bne.n 8000b34 + 8000b06: 4bbd ldr r3, [pc, #756] ; (8000dfc ) + 8000b08: 685a ldr r2, [r3, #4] + 8000b0a: 2380 movs r3, #128 ; 0x80 + 8000b0c: 025b lsls r3, r3, #9 + 8000b0e: 401a ands r2, r3 + 8000b10: 2380 movs r3, #128 ; 0x80 + 8000b12: 025b lsls r3, r3, #9 + 8000b14: 429a cmp r2, r3 + 8000b16: d10d bne.n 8000b34 + { + if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF)) + 8000b18: 4bb8 ldr r3, [pc, #736] ; (8000dfc ) + 8000b1a: 681a ldr r2, [r3, #0] + 8000b1c: 2380 movs r3, #128 ; 0x80 + 8000b1e: 029b lsls r3, r3, #10 + 8000b20: 4013 ands r3, r2 + 8000b22: d100 bne.n 8000b26 + 8000b24: e070 b.n 8000c08 + 8000b26: 687b ldr r3, [r7, #4] + 8000b28: 685b ldr r3, [r3, #4] + 8000b2a: 2b00 cmp r3, #0 + 8000b2c: d000 beq.n 8000b30 + 8000b2e: e06b b.n 8000c08 + { + return HAL_ERROR; + 8000b30: 2301 movs r3, #1 + 8000b32: e2d8 b.n 80010e6 + } + } + else + { + /* Set the new HSE configuration ---------------------------------------*/ + __HAL_RCC_HSE_CONFIG(RCC_OscInitStruct->HSEState); + 8000b34: 687b ldr r3, [r7, #4] + 8000b36: 685b ldr r3, [r3, #4] + 8000b38: 2b01 cmp r3, #1 + 8000b3a: d107 bne.n 8000b4c + 8000b3c: 4baf ldr r3, [pc, #700] ; (8000dfc ) + 8000b3e: 681a ldr r2, [r3, #0] + 8000b40: 4bae ldr r3, [pc, #696] ; (8000dfc ) + 8000b42: 2180 movs r1, #128 ; 0x80 + 8000b44: 0249 lsls r1, r1, #9 + 8000b46: 430a orrs r2, r1 + 8000b48: 601a str r2, [r3, #0] + 8000b4a: e02f b.n 8000bac + 8000b4c: 687b ldr r3, [r7, #4] + 8000b4e: 685b ldr r3, [r3, #4] + 8000b50: 2b00 cmp r3, #0 + 8000b52: d10c bne.n 8000b6e + 8000b54: 4ba9 ldr r3, [pc, #676] ; (8000dfc ) + 8000b56: 681a ldr r2, [r3, #0] + 8000b58: 4ba8 ldr r3, [pc, #672] ; (8000dfc ) + 8000b5a: 49a9 ldr r1, [pc, #676] ; (8000e00 ) + 8000b5c: 400a ands r2, r1 + 8000b5e: 601a str r2, [r3, #0] + 8000b60: 4ba6 ldr r3, [pc, #664] ; (8000dfc ) + 8000b62: 681a ldr r2, [r3, #0] + 8000b64: 4ba5 ldr r3, [pc, #660] ; (8000dfc ) + 8000b66: 49a7 ldr r1, [pc, #668] ; (8000e04 ) + 8000b68: 400a ands r2, r1 + 8000b6a: 601a str r2, [r3, #0] + 8000b6c: e01e b.n 8000bac + 8000b6e: 687b ldr r3, [r7, #4] + 8000b70: 685b ldr r3, [r3, #4] + 8000b72: 2b05 cmp r3, #5 + 8000b74: d10e bne.n 8000b94 + 8000b76: 4ba1 ldr r3, [pc, #644] ; (8000dfc ) + 8000b78: 681a ldr r2, [r3, #0] + 8000b7a: 4ba0 ldr r3, [pc, #640] ; (8000dfc ) + 8000b7c: 2180 movs r1, #128 ; 0x80 + 8000b7e: 02c9 lsls r1, r1, #11 + 8000b80: 430a orrs r2, r1 + 8000b82: 601a str r2, [r3, #0] + 8000b84: 4b9d ldr r3, [pc, #628] ; (8000dfc ) + 8000b86: 681a ldr r2, [r3, #0] + 8000b88: 4b9c ldr r3, [pc, #624] ; (8000dfc ) + 8000b8a: 2180 movs r1, #128 ; 0x80 + 8000b8c: 0249 lsls r1, r1, #9 + 8000b8e: 430a orrs r2, r1 + 8000b90: 601a str r2, [r3, #0] + 8000b92: e00b b.n 8000bac + 8000b94: 4b99 ldr r3, [pc, #612] ; (8000dfc ) + 8000b96: 681a ldr r2, [r3, #0] + 8000b98: 4b98 ldr r3, [pc, #608] ; (8000dfc ) + 8000b9a: 4999 ldr r1, [pc, #612] ; (8000e00 ) + 8000b9c: 400a ands r2, r1 + 8000b9e: 601a str r2, [r3, #0] + 8000ba0: 4b96 ldr r3, [pc, #600] ; (8000dfc ) + 8000ba2: 681a ldr r2, [r3, #0] + 8000ba4: 4b95 ldr r3, [pc, #596] ; (8000dfc ) + 8000ba6: 4997 ldr r1, [pc, #604] ; (8000e04 ) + 8000ba8: 400a ands r2, r1 + 8000baa: 601a str r2, [r3, #0] + + + /* Check the HSE State */ + if(RCC_OscInitStruct->HSEState != RCC_HSE_OFF) + 8000bac: 687b ldr r3, [r7, #4] + 8000bae: 685b ldr r3, [r3, #4] + 8000bb0: 2b00 cmp r3, #0 + 8000bb2: d014 beq.n 8000bde + { + /* Get Start Tick */ + tickstart = HAL_GetTick(); + 8000bb4: f7ff fd66 bl 8000684 + 8000bb8: 0003 movs r3, r0 + 8000bba: 61bb str r3, [r7, #24] + + /* Wait till HSE is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET) + 8000bbc: e008 b.n 8000bd0 + { + if((HAL_GetTick() - tickstart ) > HSE_TIMEOUT_VALUE) + 8000bbe: f7ff fd61 bl 8000684 + 8000bc2: 0002 movs r2, r0 + 8000bc4: 69bb ldr r3, [r7, #24] + 8000bc6: 1ad3 subs r3, r2, r3 + 8000bc8: 2b64 cmp r3, #100 ; 0x64 + 8000bca: d901 bls.n 8000bd0 + { + return HAL_TIMEOUT; + 8000bcc: 2303 movs r3, #3 + 8000bce: e28a b.n 80010e6 + while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET) + 8000bd0: 4b8a ldr r3, [pc, #552] ; (8000dfc ) + 8000bd2: 681a ldr r2, [r3, #0] + 8000bd4: 2380 movs r3, #128 ; 0x80 + 8000bd6: 029b lsls r3, r3, #10 + 8000bd8: 4013 ands r3, r2 + 8000bda: d0f0 beq.n 8000bbe + 8000bdc: e015 b.n 8000c0a + } + } + else + { + /* Get Start Tick */ + tickstart = HAL_GetTick(); + 8000bde: f7ff fd51 bl 8000684 + 8000be2: 0003 movs r3, r0 + 8000be4: 61bb str r3, [r7, #24] + + /* Wait till HSE is disabled */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) + 8000be6: e008 b.n 8000bfa + { + if((HAL_GetTick() - tickstart ) > HSE_TIMEOUT_VALUE) + 8000be8: f7ff fd4c bl 8000684 + 8000bec: 0002 movs r2, r0 + 8000bee: 69bb ldr r3, [r7, #24] + 8000bf0: 1ad3 subs r3, r2, r3 + 8000bf2: 2b64 cmp r3, #100 ; 0x64 + 8000bf4: d901 bls.n 8000bfa + { + return HAL_TIMEOUT; + 8000bf6: 2303 movs r3, #3 + 8000bf8: e275 b.n 80010e6 + while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) + 8000bfa: 4b80 ldr r3, [pc, #512] ; (8000dfc ) + 8000bfc: 681a ldr r2, [r3, #0] + 8000bfe: 2380 movs r3, #128 ; 0x80 + 8000c00: 029b lsls r3, r3, #10 + 8000c02: 4013 ands r3, r2 + 8000c04: d1f0 bne.n 8000be8 + 8000c06: e000 b.n 8000c0a + if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF)) + 8000c08: 46c0 nop ; (mov r8, r8) + } + } + } + } + /*----------------------------- HSI Configuration --------------------------*/ + if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI) + 8000c0a: 687b ldr r3, [r7, #4] + 8000c0c: 681b ldr r3, [r3, #0] + 8000c0e: 2202 movs r2, #2 + 8000c10: 4013 ands r3, r2 + 8000c12: d100 bne.n 8000c16 + 8000c14: e069 b.n 8000cea + /* 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_SYSCLKSOURCE_STATUS_HSI) + 8000c16: 4b79 ldr r3, [pc, #484] ; (8000dfc ) + 8000c18: 685b ldr r3, [r3, #4] + 8000c1a: 220c movs r2, #12 + 8000c1c: 4013 ands r3, r2 + 8000c1e: d00b beq.n 8000c38 + || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && (__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_HSI))) + 8000c20: 4b76 ldr r3, [pc, #472] ; (8000dfc ) + 8000c22: 685b ldr r3, [r3, #4] + 8000c24: 220c movs r2, #12 + 8000c26: 4013 ands r3, r2 + 8000c28: 2b08 cmp r3, #8 + 8000c2a: d11c bne.n 8000c66 + 8000c2c: 4b73 ldr r3, [pc, #460] ; (8000dfc ) + 8000c2e: 685a ldr r2, [r3, #4] + 8000c30: 2380 movs r3, #128 ; 0x80 + 8000c32: 025b lsls r3, r3, #9 + 8000c34: 4013 ands r3, r2 + 8000c36: d116 bne.n 8000c66 + { + /* 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)) + 8000c38: 4b70 ldr r3, [pc, #448] ; (8000dfc ) + 8000c3a: 681b ldr r3, [r3, #0] + 8000c3c: 2202 movs r2, #2 + 8000c3e: 4013 ands r3, r2 + 8000c40: d005 beq.n 8000c4e + 8000c42: 687b ldr r3, [r7, #4] + 8000c44: 68db ldr r3, [r3, #12] + 8000c46: 2b01 cmp r3, #1 + 8000c48: d001 beq.n 8000c4e + { + return HAL_ERROR; + 8000c4a: 2301 movs r3, #1 + 8000c4c: e24b b.n 80010e6 + } + /* Otherwise, just the calibration is allowed */ + else + { + /* Adjusts the Internal High Speed oscillator (HSI) calibration value.*/ + __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue); + 8000c4e: 4b6b ldr r3, [pc, #428] ; (8000dfc ) + 8000c50: 681b ldr r3, [r3, #0] + 8000c52: 22f8 movs r2, #248 ; 0xf8 + 8000c54: 4393 bics r3, r2 + 8000c56: 0019 movs r1, r3 + 8000c58: 687b ldr r3, [r7, #4] + 8000c5a: 691b ldr r3, [r3, #16] + 8000c5c: 00da lsls r2, r3, #3 + 8000c5e: 4b67 ldr r3, [pc, #412] ; (8000dfc ) + 8000c60: 430a orrs r2, r1 + 8000c62: 601a str r2, [r3, #0] + if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) && (RCC_OscInitStruct->HSIState != RCC_HSI_ON)) + 8000c64: e041 b.n 8000cea + } + } + else + { + /* Check the HSI State */ + if(RCC_OscInitStruct->HSIState != RCC_HSI_OFF) + 8000c66: 687b ldr r3, [r7, #4] + 8000c68: 68db ldr r3, [r3, #12] + 8000c6a: 2b00 cmp r3, #0 + 8000c6c: d024 beq.n 8000cb8 + { + /* Enable the Internal High Speed oscillator (HSI). */ + __HAL_RCC_HSI_ENABLE(); + 8000c6e: 4b63 ldr r3, [pc, #396] ; (8000dfc ) + 8000c70: 681a ldr r2, [r3, #0] + 8000c72: 4b62 ldr r3, [pc, #392] ; (8000dfc ) + 8000c74: 2101 movs r1, #1 + 8000c76: 430a orrs r2, r1 + 8000c78: 601a str r2, [r3, #0] + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + 8000c7a: f7ff fd03 bl 8000684 + 8000c7e: 0003 movs r3, r0 + 8000c80: 61bb str r3, [r7, #24] + + /* Wait till HSI is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET) + 8000c82: e008 b.n 8000c96 + { + if((HAL_GetTick() - tickstart ) > HSI_TIMEOUT_VALUE) + 8000c84: f7ff fcfe bl 8000684 + 8000c88: 0002 movs r2, r0 + 8000c8a: 69bb ldr r3, [r7, #24] + 8000c8c: 1ad3 subs r3, r2, r3 + 8000c8e: 2b02 cmp r3, #2 + 8000c90: d901 bls.n 8000c96 + { + return HAL_TIMEOUT; + 8000c92: 2303 movs r3, #3 + 8000c94: e227 b.n 80010e6 + while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET) + 8000c96: 4b59 ldr r3, [pc, #356] ; (8000dfc ) + 8000c98: 681b ldr r3, [r3, #0] + 8000c9a: 2202 movs r2, #2 + 8000c9c: 4013 ands r3, r2 + 8000c9e: d0f1 beq.n 8000c84 + } + } + + /* Adjusts the Internal High Speed oscillator (HSI) calibration value.*/ + __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue); + 8000ca0: 4b56 ldr r3, [pc, #344] ; (8000dfc ) + 8000ca2: 681b ldr r3, [r3, #0] + 8000ca4: 22f8 movs r2, #248 ; 0xf8 + 8000ca6: 4393 bics r3, r2 + 8000ca8: 0019 movs r1, r3 + 8000caa: 687b ldr r3, [r7, #4] + 8000cac: 691b ldr r3, [r3, #16] + 8000cae: 00da lsls r2, r3, #3 + 8000cb0: 4b52 ldr r3, [pc, #328] ; (8000dfc ) + 8000cb2: 430a orrs r2, r1 + 8000cb4: 601a str r2, [r3, #0] + 8000cb6: e018 b.n 8000cea + } + else + { + /* Disable the Internal High Speed oscillator (HSI). */ + __HAL_RCC_HSI_DISABLE(); + 8000cb8: 4b50 ldr r3, [pc, #320] ; (8000dfc ) + 8000cba: 681a ldr r2, [r3, #0] + 8000cbc: 4b4f ldr r3, [pc, #316] ; (8000dfc ) + 8000cbe: 2101 movs r1, #1 + 8000cc0: 438a bics r2, r1 + 8000cc2: 601a str r2, [r3, #0] + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + 8000cc4: f7ff fcde bl 8000684 + 8000cc8: 0003 movs r3, r0 + 8000cca: 61bb str r3, [r7, #24] + + /* Wait till HSI is disabled */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) + 8000ccc: e008 b.n 8000ce0 + { + if((HAL_GetTick() - tickstart ) > HSI_TIMEOUT_VALUE) + 8000cce: f7ff fcd9 bl 8000684 + 8000cd2: 0002 movs r2, r0 + 8000cd4: 69bb ldr r3, [r7, #24] + 8000cd6: 1ad3 subs r3, r2, r3 + 8000cd8: 2b02 cmp r3, #2 + 8000cda: d901 bls.n 8000ce0 + { + return HAL_TIMEOUT; + 8000cdc: 2303 movs r3, #3 + 8000cde: e202 b.n 80010e6 + while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) + 8000ce0: 4b46 ldr r3, [pc, #280] ; (8000dfc ) + 8000ce2: 681b ldr r3, [r3, #0] + 8000ce4: 2202 movs r2, #2 + 8000ce6: 4013 ands r3, r2 + 8000ce8: d1f1 bne.n 8000cce + } + } + } + } + /*------------------------------ LSI Configuration -------------------------*/ + if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI) + 8000cea: 687b ldr r3, [r7, #4] + 8000cec: 681b ldr r3, [r3, #0] + 8000cee: 2208 movs r2, #8 + 8000cf0: 4013 ands r3, r2 + 8000cf2: d036 beq.n 8000d62 + { + /* Check the parameters */ + assert_param(IS_RCC_LSI(RCC_OscInitStruct->LSIState)); + + /* Check the LSI State */ + if(RCC_OscInitStruct->LSIState != RCC_LSI_OFF) + 8000cf4: 687b ldr r3, [r7, #4] + 8000cf6: 69db ldr r3, [r3, #28] + 8000cf8: 2b00 cmp r3, #0 + 8000cfa: d019 beq.n 8000d30 + { + /* Enable the Internal Low Speed oscillator (LSI). */ + __HAL_RCC_LSI_ENABLE(); + 8000cfc: 4b3f ldr r3, [pc, #252] ; (8000dfc ) + 8000cfe: 6a5a ldr r2, [r3, #36] ; 0x24 + 8000d00: 4b3e ldr r3, [pc, #248] ; (8000dfc ) + 8000d02: 2101 movs r1, #1 + 8000d04: 430a orrs r2, r1 + 8000d06: 625a str r2, [r3, #36] ; 0x24 + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + 8000d08: f7ff fcbc bl 8000684 + 8000d0c: 0003 movs r3, r0 + 8000d0e: 61bb str r3, [r7, #24] + + /* Wait till LSI is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == RESET) + 8000d10: e008 b.n 8000d24 + { + if((HAL_GetTick() - tickstart ) > LSI_TIMEOUT_VALUE) + 8000d12: f7ff fcb7 bl 8000684 + 8000d16: 0002 movs r2, r0 + 8000d18: 69bb ldr r3, [r7, #24] + 8000d1a: 1ad3 subs r3, r2, r3 + 8000d1c: 2b02 cmp r3, #2 + 8000d1e: d901 bls.n 8000d24 + { + return HAL_TIMEOUT; + 8000d20: 2303 movs r3, #3 + 8000d22: e1e0 b.n 80010e6 + while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == RESET) + 8000d24: 4b35 ldr r3, [pc, #212] ; (8000dfc ) + 8000d26: 6a5b ldr r3, [r3, #36] ; 0x24 + 8000d28: 2202 movs r2, #2 + 8000d2a: 4013 ands r3, r2 + 8000d2c: d0f1 beq.n 8000d12 + 8000d2e: e018 b.n 8000d62 + } + } + else + { + /* Disable the Internal Low Speed oscillator (LSI). */ + __HAL_RCC_LSI_DISABLE(); + 8000d30: 4b32 ldr r3, [pc, #200] ; (8000dfc ) + 8000d32: 6a5a ldr r2, [r3, #36] ; 0x24 + 8000d34: 4b31 ldr r3, [pc, #196] ; (8000dfc ) + 8000d36: 2101 movs r1, #1 + 8000d38: 438a bics r2, r1 + 8000d3a: 625a str r2, [r3, #36] ; 0x24 + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + 8000d3c: f7ff fca2 bl 8000684 + 8000d40: 0003 movs r3, r0 + 8000d42: 61bb str r3, [r7, #24] + + /* Wait till LSI is disabled */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != RESET) + 8000d44: e008 b.n 8000d58 + { + if((HAL_GetTick() - tickstart ) > LSI_TIMEOUT_VALUE) + 8000d46: f7ff fc9d bl 8000684 + 8000d4a: 0002 movs r2, r0 + 8000d4c: 69bb ldr r3, [r7, #24] + 8000d4e: 1ad3 subs r3, r2, r3 + 8000d50: 2b02 cmp r3, #2 + 8000d52: d901 bls.n 8000d58 + { + return HAL_TIMEOUT; + 8000d54: 2303 movs r3, #3 + 8000d56: e1c6 b.n 80010e6 + while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != RESET) + 8000d58: 4b28 ldr r3, [pc, #160] ; (8000dfc ) + 8000d5a: 6a5b ldr r3, [r3, #36] ; 0x24 + 8000d5c: 2202 movs r2, #2 + 8000d5e: 4013 ands r3, r2 + 8000d60: d1f1 bne.n 8000d46 + } + } + } + } + /*------------------------------ LSE Configuration -------------------------*/ + if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE) + 8000d62: 687b ldr r3, [r7, #4] + 8000d64: 681b ldr r3, [r3, #0] + 8000d66: 2204 movs r2, #4 + 8000d68: 4013 ands r3, r2 + 8000d6a: d100 bne.n 8000d6e + 8000d6c: e0b4 b.n 8000ed8 + { + FlagStatus pwrclkchanged = RESET; + 8000d6e: 201f movs r0, #31 + 8000d70: 183b adds r3, r7, r0 + 8000d72: 2200 movs r2, #0 + 8000d74: 701a strb r2, [r3, #0] + /* 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()) + 8000d76: 4b21 ldr r3, [pc, #132] ; (8000dfc ) + 8000d78: 69da ldr r2, [r3, #28] + 8000d7a: 2380 movs r3, #128 ; 0x80 + 8000d7c: 055b lsls r3, r3, #21 + 8000d7e: 4013 ands r3, r2 + 8000d80: d110 bne.n 8000da4 + { + __HAL_RCC_PWR_CLK_ENABLE(); + 8000d82: 4b1e ldr r3, [pc, #120] ; (8000dfc ) + 8000d84: 69da ldr r2, [r3, #28] + 8000d86: 4b1d ldr r3, [pc, #116] ; (8000dfc ) + 8000d88: 2180 movs r1, #128 ; 0x80 + 8000d8a: 0549 lsls r1, r1, #21 + 8000d8c: 430a orrs r2, r1 + 8000d8e: 61da str r2, [r3, #28] + 8000d90: 4b1a ldr r3, [pc, #104] ; (8000dfc ) + 8000d92: 69da ldr r2, [r3, #28] + 8000d94: 2380 movs r3, #128 ; 0x80 + 8000d96: 055b lsls r3, r3, #21 + 8000d98: 4013 ands r3, r2 + 8000d9a: 60fb str r3, [r7, #12] + 8000d9c: 68fb ldr r3, [r7, #12] + pwrclkchanged = SET; + 8000d9e: 183b adds r3, r7, r0 + 8000da0: 2201 movs r2, #1 + 8000da2: 701a strb r2, [r3, #0] + } + + if(HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) + 8000da4: 4b18 ldr r3, [pc, #96] ; (8000e08 ) + 8000da6: 681a ldr r2, [r3, #0] + 8000da8: 2380 movs r3, #128 ; 0x80 + 8000daa: 005b lsls r3, r3, #1 + 8000dac: 4013 ands r3, r2 + 8000dae: d11a bne.n 8000de6 + { + /* Enable write access to Backup domain */ + SET_BIT(PWR->CR, PWR_CR_DBP); + 8000db0: 4b15 ldr r3, [pc, #84] ; (8000e08 ) + 8000db2: 681a ldr r2, [r3, #0] + 8000db4: 4b14 ldr r3, [pc, #80] ; (8000e08 ) + 8000db6: 2180 movs r1, #128 ; 0x80 + 8000db8: 0049 lsls r1, r1, #1 + 8000dba: 430a orrs r2, r1 + 8000dbc: 601a str r2, [r3, #0] + + /* Wait for Backup domain Write protection disable */ + tickstart = HAL_GetTick(); + 8000dbe: f7ff fc61 bl 8000684 + 8000dc2: 0003 movs r3, r0 + 8000dc4: 61bb str r3, [r7, #24] + + while(HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) + 8000dc6: e008 b.n 8000dda + { + if((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE) + 8000dc8: f7ff fc5c bl 8000684 + 8000dcc: 0002 movs r2, r0 + 8000dce: 69bb ldr r3, [r7, #24] + 8000dd0: 1ad3 subs r3, r2, r3 + 8000dd2: 2b64 cmp r3, #100 ; 0x64 + 8000dd4: d901 bls.n 8000dda + { + return HAL_TIMEOUT; + 8000dd6: 2303 movs r3, #3 + 8000dd8: e185 b.n 80010e6 + while(HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) + 8000dda: 4b0b ldr r3, [pc, #44] ; (8000e08 ) + 8000ddc: 681a ldr r2, [r3, #0] + 8000dde: 2380 movs r3, #128 ; 0x80 + 8000de0: 005b lsls r3, r3, #1 + 8000de2: 4013 ands r3, r2 + 8000de4: d0f0 beq.n 8000dc8 + } + } + } + + /* Set the new LSE configuration -----------------------------------------*/ + __HAL_RCC_LSE_CONFIG(RCC_OscInitStruct->LSEState); + 8000de6: 687b ldr r3, [r7, #4] + 8000de8: 689b ldr r3, [r3, #8] + 8000dea: 2b01 cmp r3, #1 + 8000dec: d10e bne.n 8000e0c + 8000dee: 4b03 ldr r3, [pc, #12] ; (8000dfc ) + 8000df0: 6a1a ldr r2, [r3, #32] + 8000df2: 4b02 ldr r3, [pc, #8] ; (8000dfc ) + 8000df4: 2101 movs r1, #1 + 8000df6: 430a orrs r2, r1 + 8000df8: 621a str r2, [r3, #32] + 8000dfa: e035 b.n 8000e68 + 8000dfc: 40021000 .word 0x40021000 + 8000e00: fffeffff .word 0xfffeffff + 8000e04: fffbffff .word 0xfffbffff + 8000e08: 40007000 .word 0x40007000 + 8000e0c: 687b ldr r3, [r7, #4] + 8000e0e: 689b ldr r3, [r3, #8] + 8000e10: 2b00 cmp r3, #0 + 8000e12: d10c bne.n 8000e2e + 8000e14: 4bb6 ldr r3, [pc, #728] ; (80010f0 ) + 8000e16: 6a1a ldr r2, [r3, #32] + 8000e18: 4bb5 ldr r3, [pc, #724] ; (80010f0 ) + 8000e1a: 2101 movs r1, #1 + 8000e1c: 438a bics r2, r1 + 8000e1e: 621a str r2, [r3, #32] + 8000e20: 4bb3 ldr r3, [pc, #716] ; (80010f0 ) + 8000e22: 6a1a ldr r2, [r3, #32] + 8000e24: 4bb2 ldr r3, [pc, #712] ; (80010f0 ) + 8000e26: 2104 movs r1, #4 + 8000e28: 438a bics r2, r1 + 8000e2a: 621a str r2, [r3, #32] + 8000e2c: e01c b.n 8000e68 + 8000e2e: 687b ldr r3, [r7, #4] + 8000e30: 689b ldr r3, [r3, #8] + 8000e32: 2b05 cmp r3, #5 + 8000e34: d10c bne.n 8000e50 + 8000e36: 4bae ldr r3, [pc, #696] ; (80010f0 ) + 8000e38: 6a1a ldr r2, [r3, #32] + 8000e3a: 4bad ldr r3, [pc, #692] ; (80010f0 ) + 8000e3c: 2104 movs r1, #4 + 8000e3e: 430a orrs r2, r1 + 8000e40: 621a str r2, [r3, #32] + 8000e42: 4bab ldr r3, [pc, #684] ; (80010f0 ) + 8000e44: 6a1a ldr r2, [r3, #32] + 8000e46: 4baa ldr r3, [pc, #680] ; (80010f0 ) + 8000e48: 2101 movs r1, #1 + 8000e4a: 430a orrs r2, r1 + 8000e4c: 621a str r2, [r3, #32] + 8000e4e: e00b b.n 8000e68 + 8000e50: 4ba7 ldr r3, [pc, #668] ; (80010f0 ) + 8000e52: 6a1a ldr r2, [r3, #32] + 8000e54: 4ba6 ldr r3, [pc, #664] ; (80010f0 ) + 8000e56: 2101 movs r1, #1 + 8000e58: 438a bics r2, r1 + 8000e5a: 621a str r2, [r3, #32] + 8000e5c: 4ba4 ldr r3, [pc, #656] ; (80010f0 ) + 8000e5e: 6a1a ldr r2, [r3, #32] + 8000e60: 4ba3 ldr r3, [pc, #652] ; (80010f0 ) + 8000e62: 2104 movs r1, #4 + 8000e64: 438a bics r2, r1 + 8000e66: 621a str r2, [r3, #32] + /* Check the LSE State */ + if(RCC_OscInitStruct->LSEState != RCC_LSE_OFF) + 8000e68: 687b ldr r3, [r7, #4] + 8000e6a: 689b ldr r3, [r3, #8] + 8000e6c: 2b00 cmp r3, #0 + 8000e6e: d014 beq.n 8000e9a + { + /* Get Start Tick */ + tickstart = HAL_GetTick(); + 8000e70: f7ff fc08 bl 8000684 + 8000e74: 0003 movs r3, r0 + 8000e76: 61bb str r3, [r7, #24] + + /* Wait till LSE is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) + 8000e78: e009 b.n 8000e8e + { + if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE) + 8000e7a: f7ff fc03 bl 8000684 + 8000e7e: 0002 movs r2, r0 + 8000e80: 69bb ldr r3, [r7, #24] + 8000e82: 1ad3 subs r3, r2, r3 + 8000e84: 4a9b ldr r2, [pc, #620] ; (80010f4 ) + 8000e86: 4293 cmp r3, r2 + 8000e88: d901 bls.n 8000e8e + { + return HAL_TIMEOUT; + 8000e8a: 2303 movs r3, #3 + 8000e8c: e12b b.n 80010e6 + while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) + 8000e8e: 4b98 ldr r3, [pc, #608] ; (80010f0 ) + 8000e90: 6a1b ldr r3, [r3, #32] + 8000e92: 2202 movs r2, #2 + 8000e94: 4013 ands r3, r2 + 8000e96: d0f0 beq.n 8000e7a + 8000e98: e013 b.n 8000ec2 + } + } + else + { + /* Get Start Tick */ + tickstart = HAL_GetTick(); + 8000e9a: f7ff fbf3 bl 8000684 + 8000e9e: 0003 movs r3, r0 + 8000ea0: 61bb str r3, [r7, #24] + + /* Wait till LSE is disabled */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != RESET) + 8000ea2: e009 b.n 8000eb8 + { + if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE) + 8000ea4: f7ff fbee bl 8000684 + 8000ea8: 0002 movs r2, r0 + 8000eaa: 69bb ldr r3, [r7, #24] + 8000eac: 1ad3 subs r3, r2, r3 + 8000eae: 4a91 ldr r2, [pc, #580] ; (80010f4 ) + 8000eb0: 4293 cmp r3, r2 + 8000eb2: d901 bls.n 8000eb8 + { + return HAL_TIMEOUT; + 8000eb4: 2303 movs r3, #3 + 8000eb6: e116 b.n 80010e6 + while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != RESET) + 8000eb8: 4b8d ldr r3, [pc, #564] ; (80010f0 ) + 8000eba: 6a1b ldr r3, [r3, #32] + 8000ebc: 2202 movs r2, #2 + 8000ebe: 4013 ands r3, r2 + 8000ec0: d1f0 bne.n 8000ea4 + } + } + } + + /* Require to disable power clock if necessary */ + if(pwrclkchanged == SET) + 8000ec2: 231f movs r3, #31 + 8000ec4: 18fb adds r3, r7, r3 + 8000ec6: 781b ldrb r3, [r3, #0] + 8000ec8: 2b01 cmp r3, #1 + 8000eca: d105 bne.n 8000ed8 + { + __HAL_RCC_PWR_CLK_DISABLE(); + 8000ecc: 4b88 ldr r3, [pc, #544] ; (80010f0 ) + 8000ece: 69da ldr r2, [r3, #28] + 8000ed0: 4b87 ldr r3, [pc, #540] ; (80010f0 ) + 8000ed2: 4989 ldr r1, [pc, #548] ; (80010f8 ) + 8000ed4: 400a ands r2, r1 + 8000ed6: 61da str r2, [r3, #28] + } + } + + /*----------------------------- HSI14 Configuration --------------------------*/ + if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI14) == RCC_OSCILLATORTYPE_HSI14) + 8000ed8: 687b ldr r3, [r7, #4] + 8000eda: 681b ldr r3, [r3, #0] + 8000edc: 2210 movs r2, #16 + 8000ede: 4013 ands r3, r2 + 8000ee0: d063 beq.n 8000faa + /* Check the parameters */ + assert_param(IS_RCC_HSI14(RCC_OscInitStruct->HSI14State)); + assert_param(IS_RCC_CALIBRATION_VALUE(RCC_OscInitStruct->HSI14CalibrationValue)); + + /* Check the HSI14 State */ + if(RCC_OscInitStruct->HSI14State == RCC_HSI14_ON) + 8000ee2: 687b ldr r3, [r7, #4] + 8000ee4: 695b ldr r3, [r3, #20] + 8000ee6: 2b01 cmp r3, #1 + 8000ee8: d12a bne.n 8000f40 + { + /* Disable ADC control of the Internal High Speed oscillator HSI14 */ + __HAL_RCC_HSI14ADC_DISABLE(); + 8000eea: 4b81 ldr r3, [pc, #516] ; (80010f0 ) + 8000eec: 6b5a ldr r2, [r3, #52] ; 0x34 + 8000eee: 4b80 ldr r3, [pc, #512] ; (80010f0 ) + 8000ef0: 2104 movs r1, #4 + 8000ef2: 430a orrs r2, r1 + 8000ef4: 635a str r2, [r3, #52] ; 0x34 + + /* Enable the Internal High Speed oscillator (HSI). */ + __HAL_RCC_HSI14_ENABLE(); + 8000ef6: 4b7e ldr r3, [pc, #504] ; (80010f0 ) + 8000ef8: 6b5a ldr r2, [r3, #52] ; 0x34 + 8000efa: 4b7d ldr r3, [pc, #500] ; (80010f0 ) + 8000efc: 2101 movs r1, #1 + 8000efe: 430a orrs r2, r1 + 8000f00: 635a str r2, [r3, #52] ; 0x34 + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + 8000f02: f7ff fbbf bl 8000684 + 8000f06: 0003 movs r3, r0 + 8000f08: 61bb str r3, [r7, #24] + + /* Wait till HSI is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSI14RDY) == RESET) + 8000f0a: e008 b.n 8000f1e + { + if((HAL_GetTick() - tickstart) > HSI14_TIMEOUT_VALUE) + 8000f0c: f7ff fbba bl 8000684 + 8000f10: 0002 movs r2, r0 + 8000f12: 69bb ldr r3, [r7, #24] + 8000f14: 1ad3 subs r3, r2, r3 + 8000f16: 2b02 cmp r3, #2 + 8000f18: d901 bls.n 8000f1e + { + return HAL_TIMEOUT; + 8000f1a: 2303 movs r3, #3 + 8000f1c: e0e3 b.n 80010e6 + while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSI14RDY) == RESET) + 8000f1e: 4b74 ldr r3, [pc, #464] ; (80010f0 ) + 8000f20: 6b5b ldr r3, [r3, #52] ; 0x34 + 8000f22: 2202 movs r2, #2 + 8000f24: 4013 ands r3, r2 + 8000f26: d0f1 beq.n 8000f0c + } + } + + /* Adjusts the Internal High Speed oscillator 14Mhz (HSI14) calibration value. */ + __HAL_RCC_HSI14_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSI14CalibrationValue); + 8000f28: 4b71 ldr r3, [pc, #452] ; (80010f0 ) + 8000f2a: 6b5b ldr r3, [r3, #52] ; 0x34 + 8000f2c: 22f8 movs r2, #248 ; 0xf8 + 8000f2e: 4393 bics r3, r2 + 8000f30: 0019 movs r1, r3 + 8000f32: 687b ldr r3, [r7, #4] + 8000f34: 699b ldr r3, [r3, #24] + 8000f36: 00da lsls r2, r3, #3 + 8000f38: 4b6d ldr r3, [pc, #436] ; (80010f0 ) + 8000f3a: 430a orrs r2, r1 + 8000f3c: 635a str r2, [r3, #52] ; 0x34 + 8000f3e: e034 b.n 8000faa + } + else if(RCC_OscInitStruct->HSI14State == RCC_HSI14_ADC_CONTROL) + 8000f40: 687b ldr r3, [r7, #4] + 8000f42: 695b ldr r3, [r3, #20] + 8000f44: 3305 adds r3, #5 + 8000f46: d111 bne.n 8000f6c + { + /* Enable ADC control of the Internal High Speed oscillator HSI14 */ + __HAL_RCC_HSI14ADC_ENABLE(); + 8000f48: 4b69 ldr r3, [pc, #420] ; (80010f0 ) + 8000f4a: 6b5a ldr r2, [r3, #52] ; 0x34 + 8000f4c: 4b68 ldr r3, [pc, #416] ; (80010f0 ) + 8000f4e: 2104 movs r1, #4 + 8000f50: 438a bics r2, r1 + 8000f52: 635a str r2, [r3, #52] ; 0x34 + + /* Adjusts the Internal High Speed oscillator 14Mhz (HSI14) calibration value. */ + __HAL_RCC_HSI14_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSI14CalibrationValue); + 8000f54: 4b66 ldr r3, [pc, #408] ; (80010f0 ) + 8000f56: 6b5b ldr r3, [r3, #52] ; 0x34 + 8000f58: 22f8 movs r2, #248 ; 0xf8 + 8000f5a: 4393 bics r3, r2 + 8000f5c: 0019 movs r1, r3 + 8000f5e: 687b ldr r3, [r7, #4] + 8000f60: 699b ldr r3, [r3, #24] + 8000f62: 00da lsls r2, r3, #3 + 8000f64: 4b62 ldr r3, [pc, #392] ; (80010f0 ) + 8000f66: 430a orrs r2, r1 + 8000f68: 635a str r2, [r3, #52] ; 0x34 + 8000f6a: e01e b.n 8000faa + } + else + { + /* Disable ADC control of the Internal High Speed oscillator HSI14 */ + __HAL_RCC_HSI14ADC_DISABLE(); + 8000f6c: 4b60 ldr r3, [pc, #384] ; (80010f0 ) + 8000f6e: 6b5a ldr r2, [r3, #52] ; 0x34 + 8000f70: 4b5f ldr r3, [pc, #380] ; (80010f0 ) + 8000f72: 2104 movs r1, #4 + 8000f74: 430a orrs r2, r1 + 8000f76: 635a str r2, [r3, #52] ; 0x34 + + /* Disable the Internal High Speed oscillator (HSI). */ + __HAL_RCC_HSI14_DISABLE(); + 8000f78: 4b5d ldr r3, [pc, #372] ; (80010f0 ) + 8000f7a: 6b5a ldr r2, [r3, #52] ; 0x34 + 8000f7c: 4b5c ldr r3, [pc, #368] ; (80010f0 ) + 8000f7e: 2101 movs r1, #1 + 8000f80: 438a bics r2, r1 + 8000f82: 635a str r2, [r3, #52] ; 0x34 + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + 8000f84: f7ff fb7e bl 8000684 + 8000f88: 0003 movs r3, r0 + 8000f8a: 61bb str r3, [r7, #24] + + /* Wait till HSI is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSI14RDY) != RESET) + 8000f8c: e008 b.n 8000fa0 + { + if((HAL_GetTick() - tickstart) > HSI14_TIMEOUT_VALUE) + 8000f8e: f7ff fb79 bl 8000684 + 8000f92: 0002 movs r2, r0 + 8000f94: 69bb ldr r3, [r7, #24] + 8000f96: 1ad3 subs r3, r2, r3 + 8000f98: 2b02 cmp r3, #2 + 8000f9a: d901 bls.n 8000fa0 + { + return HAL_TIMEOUT; + 8000f9c: 2303 movs r3, #3 + 8000f9e: e0a2 b.n 80010e6 + while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSI14RDY) != RESET) + 8000fa0: 4b53 ldr r3, [pc, #332] ; (80010f0 ) + 8000fa2: 6b5b ldr r3, [r3, #52] ; 0x34 + 8000fa4: 2202 movs r2, #2 + 8000fa6: 4013 ands r3, r2 + 8000fa8: d1f1 bne.n 8000f8e +#endif /* RCC_HSI48_SUPPORT */ + + /*-------------------------------- PLL Configuration -----------------------*/ + /* Check the parameters */ + assert_param(IS_RCC_PLL(RCC_OscInitStruct->PLL.PLLState)); + if ((RCC_OscInitStruct->PLL.PLLState) != RCC_PLL_NONE) + 8000faa: 687b ldr r3, [r7, #4] + 8000fac: 6a1b ldr r3, [r3, #32] + 8000fae: 2b00 cmp r3, #0 + 8000fb0: d100 bne.n 8000fb4 + 8000fb2: e097 b.n 80010e4 + { + /* Check if the PLL is used as system clock or not */ + if(__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_SYSCLKSOURCE_STATUS_PLLCLK) + 8000fb4: 4b4e ldr r3, [pc, #312] ; (80010f0 ) + 8000fb6: 685b ldr r3, [r3, #4] + 8000fb8: 220c movs r2, #12 + 8000fba: 4013 ands r3, r2 + 8000fbc: 2b08 cmp r3, #8 + 8000fbe: d100 bne.n 8000fc2 + 8000fc0: e06b b.n 800109a + { + if((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_ON) + 8000fc2: 687b ldr r3, [r7, #4] + 8000fc4: 6a1b ldr r3, [r3, #32] + 8000fc6: 2b02 cmp r3, #2 + 8000fc8: d14c bne.n 8001064 + assert_param(IS_RCC_PLLSOURCE(RCC_OscInitStruct->PLL.PLLSource)); + assert_param(IS_RCC_PLL_MUL(RCC_OscInitStruct->PLL.PLLMUL)); + assert_param(IS_RCC_PREDIV(RCC_OscInitStruct->PLL.PREDIV)); + + /* Disable the main PLL. */ + __HAL_RCC_PLL_DISABLE(); + 8000fca: 4b49 ldr r3, [pc, #292] ; (80010f0 ) + 8000fcc: 681a ldr r2, [r3, #0] + 8000fce: 4b48 ldr r3, [pc, #288] ; (80010f0 ) + 8000fd0: 494a ldr r1, [pc, #296] ; (80010fc ) + 8000fd2: 400a ands r2, r1 + 8000fd4: 601a str r2, [r3, #0] + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + 8000fd6: f7ff fb55 bl 8000684 + 8000fda: 0003 movs r3, r0 + 8000fdc: 61bb str r3, [r7, #24] + + /* Wait till PLL is disabled */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) + 8000fde: e008 b.n 8000ff2 + { + if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE) + 8000fe0: f7ff fb50 bl 8000684 + 8000fe4: 0002 movs r2, r0 + 8000fe6: 69bb ldr r3, [r7, #24] + 8000fe8: 1ad3 subs r3, r2, r3 + 8000fea: 2b02 cmp r3, #2 + 8000fec: d901 bls.n 8000ff2 + { + return HAL_TIMEOUT; + 8000fee: 2303 movs r3, #3 + 8000ff0: e079 b.n 80010e6 + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) + 8000ff2: 4b3f ldr r3, [pc, #252] ; (80010f0 ) + 8000ff4: 681a ldr r2, [r3, #0] + 8000ff6: 2380 movs r3, #128 ; 0x80 + 8000ff8: 049b lsls r3, r3, #18 + 8000ffa: 4013 ands r3, r2 + 8000ffc: d1f0 bne.n 8000fe0 + } + } + + /* Configure the main PLL clock source, predivider and multiplication factor. */ + __HAL_RCC_PLL_CONFIG(RCC_OscInitStruct->PLL.PLLSource, + 8000ffe: 4b3c ldr r3, [pc, #240] ; (80010f0 ) + 8001000: 6adb ldr r3, [r3, #44] ; 0x2c + 8001002: 220f movs r2, #15 + 8001004: 4393 bics r3, r2 + 8001006: 0019 movs r1, r3 + 8001008: 687b ldr r3, [r7, #4] + 800100a: 6ada ldr r2, [r3, #44] ; 0x2c + 800100c: 4b38 ldr r3, [pc, #224] ; (80010f0 ) + 800100e: 430a orrs r2, r1 + 8001010: 62da str r2, [r3, #44] ; 0x2c + 8001012: 4b37 ldr r3, [pc, #220] ; (80010f0 ) + 8001014: 685b ldr r3, [r3, #4] + 8001016: 4a3a ldr r2, [pc, #232] ; (8001100 ) + 8001018: 4013 ands r3, r2 + 800101a: 0019 movs r1, r3 + 800101c: 687b ldr r3, [r7, #4] + 800101e: 6a9a ldr r2, [r3, #40] ; 0x28 + 8001020: 687b ldr r3, [r7, #4] + 8001022: 6a5b ldr r3, [r3, #36] ; 0x24 + 8001024: 431a orrs r2, r3 + 8001026: 4b32 ldr r3, [pc, #200] ; (80010f0 ) + 8001028: 430a orrs r2, r1 + 800102a: 605a str r2, [r3, #4] + RCC_OscInitStruct->PLL.PREDIV, + RCC_OscInitStruct->PLL.PLLMUL); + /* Enable the main PLL. */ + __HAL_RCC_PLL_ENABLE(); + 800102c: 4b30 ldr r3, [pc, #192] ; (80010f0 ) + 800102e: 681a ldr r2, [r3, #0] + 8001030: 4b2f ldr r3, [pc, #188] ; (80010f0 ) + 8001032: 2180 movs r1, #128 ; 0x80 + 8001034: 0449 lsls r1, r1, #17 + 8001036: 430a orrs r2, r1 + 8001038: 601a str r2, [r3, #0] + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + 800103a: f7ff fb23 bl 8000684 + 800103e: 0003 movs r3, r0 + 8001040: 61bb str r3, [r7, #24] + + /* Wait till PLL is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET) + 8001042: e008 b.n 8001056 + { + if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE) + 8001044: f7ff fb1e bl 8000684 + 8001048: 0002 movs r2, r0 + 800104a: 69bb ldr r3, [r7, #24] + 800104c: 1ad3 subs r3, r2, r3 + 800104e: 2b02 cmp r3, #2 + 8001050: d901 bls.n 8001056 + { + return HAL_TIMEOUT; + 8001052: 2303 movs r3, #3 + 8001054: e047 b.n 80010e6 + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET) + 8001056: 4b26 ldr r3, [pc, #152] ; (80010f0 ) + 8001058: 681a ldr r2, [r3, #0] + 800105a: 2380 movs r3, #128 ; 0x80 + 800105c: 049b lsls r3, r3, #18 + 800105e: 4013 ands r3, r2 + 8001060: d0f0 beq.n 8001044 + 8001062: e03f b.n 80010e4 + } + } + else + { + /* Disable the main PLL. */ + __HAL_RCC_PLL_DISABLE(); + 8001064: 4b22 ldr r3, [pc, #136] ; (80010f0 ) + 8001066: 681a ldr r2, [r3, #0] + 8001068: 4b21 ldr r3, [pc, #132] ; (80010f0 ) + 800106a: 4924 ldr r1, [pc, #144] ; (80010fc ) + 800106c: 400a ands r2, r1 + 800106e: 601a str r2, [r3, #0] + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + 8001070: f7ff fb08 bl 8000684 + 8001074: 0003 movs r3, r0 + 8001076: 61bb str r3, [r7, #24] + + /* Wait till PLL is disabled */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) + 8001078: e008 b.n 800108c + { + if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE) + 800107a: f7ff fb03 bl 8000684 + 800107e: 0002 movs r2, r0 + 8001080: 69bb ldr r3, [r7, #24] + 8001082: 1ad3 subs r3, r2, r3 + 8001084: 2b02 cmp r3, #2 + 8001086: d901 bls.n 800108c + { + return HAL_TIMEOUT; + 8001088: 2303 movs r3, #3 + 800108a: e02c b.n 80010e6 + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) + 800108c: 4b18 ldr r3, [pc, #96] ; (80010f0 ) + 800108e: 681a ldr r2, [r3, #0] + 8001090: 2380 movs r3, #128 ; 0x80 + 8001092: 049b lsls r3, r3, #18 + 8001094: 4013 ands r3, r2 + 8001096: d1f0 bne.n 800107a + 8001098: e024 b.n 80010e4 + } + } + else + { + /* Check if there is a request to disable the PLL used as System clock source */ + if((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) + 800109a: 687b ldr r3, [r7, #4] + 800109c: 6a1b ldr r3, [r3, #32] + 800109e: 2b01 cmp r3, #1 + 80010a0: d101 bne.n 80010a6 + { + return HAL_ERROR; + 80010a2: 2301 movs r3, #1 + 80010a4: e01f b.n 80010e6 + } + else + { + /* Do not return HAL_ERROR if request repeats the current configuration */ + pll_config = RCC->CFGR; + 80010a6: 4b12 ldr r3, [pc, #72] ; (80010f0 ) + 80010a8: 685b ldr r3, [r3, #4] + 80010aa: 617b str r3, [r7, #20] + pll_config2 = RCC->CFGR2; + 80010ac: 4b10 ldr r3, [pc, #64] ; (80010f0 ) + 80010ae: 6adb ldr r3, [r3, #44] ; 0x2c + 80010b0: 613b str r3, [r7, #16] + if((READ_BIT(pll_config, RCC_CFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) || + 80010b2: 697a ldr r2, [r7, #20] + 80010b4: 2380 movs r3, #128 ; 0x80 + 80010b6: 025b lsls r3, r3, #9 + 80010b8: 401a ands r2, r3 + 80010ba: 687b ldr r3, [r7, #4] + 80010bc: 6a5b ldr r3, [r3, #36] ; 0x24 + 80010be: 429a cmp r2, r3 + 80010c0: d10e bne.n 80010e0 + (READ_BIT(pll_config2, RCC_CFGR2_PREDIV) != RCC_OscInitStruct->PLL.PREDIV) || + 80010c2: 693b ldr r3, [r7, #16] + 80010c4: 220f movs r2, #15 + 80010c6: 401a ands r2, r3 + 80010c8: 687b ldr r3, [r7, #4] + 80010ca: 6adb ldr r3, [r3, #44] ; 0x2c + if((READ_BIT(pll_config, RCC_CFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) || + 80010cc: 429a cmp r2, r3 + 80010ce: d107 bne.n 80010e0 + (READ_BIT(pll_config, RCC_CFGR_PLLMUL) != RCC_OscInitStruct->PLL.PLLMUL)) + 80010d0: 697a ldr r2, [r7, #20] + 80010d2: 23f0 movs r3, #240 ; 0xf0 + 80010d4: 039b lsls r3, r3, #14 + 80010d6: 401a ands r2, r3 + 80010d8: 687b ldr r3, [r7, #4] + 80010da: 6a9b ldr r3, [r3, #40] ; 0x28 + (READ_BIT(pll_config2, RCC_CFGR2_PREDIV) != RCC_OscInitStruct->PLL.PREDIV) || + 80010dc: 429a cmp r2, r3 + 80010de: d001 beq.n 80010e4 + { + return HAL_ERROR; + 80010e0: 2301 movs r3, #1 + 80010e2: e000 b.n 80010e6 + } + } + } + } + + return HAL_OK; + 80010e4: 2300 movs r3, #0 +} + 80010e6: 0018 movs r0, r3 + 80010e8: 46bd mov sp, r7 + 80010ea: b008 add sp, #32 + 80010ec: bd80 pop {r7, pc} + 80010ee: 46c0 nop ; (mov r8, r8) + 80010f0: 40021000 .word 0x40021000 + 80010f4: 00001388 .word 0x00001388 + 80010f8: efffffff .word 0xefffffff + 80010fc: feffffff .word 0xfeffffff + 8001100: ffc2ffff .word 0xffc2ffff + +08001104 : + * You can use @ref HAL_RCC_GetClockConfig() function to know which clock is + * currently used as system clock source. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t FLatency) +{ + 8001104: b580 push {r7, lr} + 8001106: b084 sub sp, #16 + 8001108: af00 add r7, sp, #0 + 800110a: 6078 str r0, [r7, #4] + 800110c: 6039 str r1, [r7, #0] + uint32_t tickstart; + + /* Check Null pointer */ + if(RCC_ClkInitStruct == NULL) + 800110e: 687b ldr r3, [r7, #4] + 8001110: 2b00 cmp r3, #0 + 8001112: d101 bne.n 8001118 + { + return HAL_ERROR; + 8001114: 2301 movs r3, #1 + 8001116: e0b3 b.n 8001280 + /* 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) of the device. */ + + /* Increasing the number of wait states because of higher CPU frequency */ + if(FLatency > __HAL_FLASH_GET_LATENCY()) + 8001118: 4b5b ldr r3, [pc, #364] ; (8001288 ) + 800111a: 681b ldr r3, [r3, #0] + 800111c: 2201 movs r2, #1 + 800111e: 4013 ands r3, r2 + 8001120: 683a ldr r2, [r7, #0] + 8001122: 429a cmp r2, r3 + 8001124: d911 bls.n 800114a + { + /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */ + __HAL_FLASH_SET_LATENCY(FLatency); + 8001126: 4b58 ldr r3, [pc, #352] ; (8001288 ) + 8001128: 681b ldr r3, [r3, #0] + 800112a: 2201 movs r2, #1 + 800112c: 4393 bics r3, r2 + 800112e: 0019 movs r1, r3 + 8001130: 4b55 ldr r3, [pc, #340] ; (8001288 ) + 8001132: 683a ldr r2, [r7, #0] + 8001134: 430a orrs r2, r1 + 8001136: 601a str 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) + 8001138: 4b53 ldr r3, [pc, #332] ; (8001288 ) + 800113a: 681b ldr r3, [r3, #0] + 800113c: 2201 movs r2, #1 + 800113e: 4013 ands r3, r2 + 8001140: 683a ldr r2, [r7, #0] + 8001142: 429a cmp r2, r3 + 8001144: d001 beq.n 800114a + { + return HAL_ERROR; + 8001146: 2301 movs r3, #1 + 8001148: e09a b.n 8001280 + } + } + + /*-------------------------- HCLK Configuration --------------------------*/ + if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK) + 800114a: 687b ldr r3, [r7, #4] + 800114c: 681b ldr r3, [r3, #0] + 800114e: 2202 movs r2, #2 + 8001150: 4013 ands r3, r2 + 8001152: d015 beq.n 8001180 + { + /* Set the highest APB divider 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) + 8001154: 687b ldr r3, [r7, #4] + 8001156: 681b ldr r3, [r3, #0] + 8001158: 2204 movs r2, #4 + 800115a: 4013 ands r3, r2 + 800115c: d006 beq.n 800116c + { + MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE, RCC_HCLK_DIV16); + 800115e: 4b4b ldr r3, [pc, #300] ; (800128c ) + 8001160: 685a ldr r2, [r3, #4] + 8001162: 4b4a ldr r3, [pc, #296] ; (800128c ) + 8001164: 21e0 movs r1, #224 ; 0xe0 + 8001166: 00c9 lsls r1, r1, #3 + 8001168: 430a orrs r2, r1 + 800116a: 605a str r2, [r3, #4] + } + + /* Set the new HCLK clock divider */ + assert_param(IS_RCC_HCLK(RCC_ClkInitStruct->AHBCLKDivider)); + MODIFY_REG(RCC->CFGR, RCC_CFGR_HPRE, RCC_ClkInitStruct->AHBCLKDivider); + 800116c: 4b47 ldr r3, [pc, #284] ; (800128c ) + 800116e: 685b ldr r3, [r3, #4] + 8001170: 22f0 movs r2, #240 ; 0xf0 + 8001172: 4393 bics r3, r2 + 8001174: 0019 movs r1, r3 + 8001176: 687b ldr r3, [r7, #4] + 8001178: 689a ldr r2, [r3, #8] + 800117a: 4b44 ldr r3, [pc, #272] ; (800128c ) + 800117c: 430a orrs r2, r1 + 800117e: 605a str r2, [r3, #4] + } + + /*------------------------- SYSCLK Configuration ---------------------------*/ + if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK) + 8001180: 687b ldr r3, [r7, #4] + 8001182: 681b ldr r3, [r3, #0] + 8001184: 2201 movs r2, #1 + 8001186: 4013 ands r3, r2 + 8001188: d040 beq.n 800120c + { + assert_param(IS_RCC_SYSCLKSOURCE(RCC_ClkInitStruct->SYSCLKSource)); + + /* HSE is selected as System Clock Source */ + if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE) + 800118a: 687b ldr r3, [r7, #4] + 800118c: 685b ldr r3, [r3, #4] + 800118e: 2b01 cmp r3, #1 + 8001190: d107 bne.n 80011a2 + { + /* Check the HSE ready flag */ + if(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET) + 8001192: 4b3e ldr r3, [pc, #248] ; (800128c ) + 8001194: 681a ldr r2, [r3, #0] + 8001196: 2380 movs r3, #128 ; 0x80 + 8001198: 029b lsls r3, r3, #10 + 800119a: 4013 ands r3, r2 + 800119c: d114 bne.n 80011c8 + { + return HAL_ERROR; + 800119e: 2301 movs r3, #1 + 80011a0: e06e b.n 8001280 + } + } + /* PLL is selected as System Clock Source */ + else if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK) + 80011a2: 687b ldr r3, [r7, #4] + 80011a4: 685b ldr r3, [r3, #4] + 80011a6: 2b02 cmp r3, #2 + 80011a8: d107 bne.n 80011ba + { + /* Check the PLL ready flag */ + if(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET) + 80011aa: 4b38 ldr r3, [pc, #224] ; (800128c ) + 80011ac: 681a ldr r2, [r3, #0] + 80011ae: 2380 movs r3, #128 ; 0x80 + 80011b0: 049b lsls r3, r3, #18 + 80011b2: 4013 ands r3, r2 + 80011b4: d108 bne.n 80011c8 + { + return HAL_ERROR; + 80011b6: 2301 movs r3, #1 + 80011b8: e062 b.n 8001280 +#endif /* RCC_CFGR_SWS_HSI48 */ + /* HSI is selected as System Clock Source */ + else + { + /* Check the HSI ready flag */ + if(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET) + 80011ba: 4b34 ldr r3, [pc, #208] ; (800128c ) + 80011bc: 681b ldr r3, [r3, #0] + 80011be: 2202 movs r2, #2 + 80011c0: 4013 ands r3, r2 + 80011c2: d101 bne.n 80011c8 + { + return HAL_ERROR; + 80011c4: 2301 movs r3, #1 + 80011c6: e05b b.n 8001280 + } + } + __HAL_RCC_SYSCLK_CONFIG(RCC_ClkInitStruct->SYSCLKSource); + 80011c8: 4b30 ldr r3, [pc, #192] ; (800128c ) + 80011ca: 685b ldr r3, [r3, #4] + 80011cc: 2203 movs r2, #3 + 80011ce: 4393 bics r3, r2 + 80011d0: 0019 movs r1, r3 + 80011d2: 687b ldr r3, [r7, #4] + 80011d4: 685a ldr r2, [r3, #4] + 80011d6: 4b2d ldr r3, [pc, #180] ; (800128c ) + 80011d8: 430a orrs r2, r1 + 80011da: 605a str r2, [r3, #4] + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + 80011dc: f7ff fa52 bl 8000684 + 80011e0: 0003 movs r3, r0 + 80011e2: 60fb str r3, [r7, #12] + + while (__HAL_RCC_GET_SYSCLK_SOURCE() != (RCC_ClkInitStruct->SYSCLKSource << RCC_CFGR_SWS_Pos)) + 80011e4: e009 b.n 80011fa + { + if((HAL_GetTick() - tickstart ) > CLOCKSWITCH_TIMEOUT_VALUE) + 80011e6: f7ff fa4d bl 8000684 + 80011ea: 0002 movs r2, r0 + 80011ec: 68fb ldr r3, [r7, #12] + 80011ee: 1ad3 subs r3, r2, r3 + 80011f0: 4a27 ldr r2, [pc, #156] ; (8001290 ) + 80011f2: 4293 cmp r3, r2 + 80011f4: d901 bls.n 80011fa + { + return HAL_TIMEOUT; + 80011f6: 2303 movs r3, #3 + 80011f8: e042 b.n 8001280 + while (__HAL_RCC_GET_SYSCLK_SOURCE() != (RCC_ClkInitStruct->SYSCLKSource << RCC_CFGR_SWS_Pos)) + 80011fa: 4b24 ldr r3, [pc, #144] ; (800128c ) + 80011fc: 685b ldr r3, [r3, #4] + 80011fe: 220c movs r2, #12 + 8001200: 401a ands r2, r3 + 8001202: 687b ldr r3, [r7, #4] + 8001204: 685b ldr r3, [r3, #4] + 8001206: 009b lsls r3, r3, #2 + 8001208: 429a cmp r2, r3 + 800120a: d1ec bne.n 80011e6 + } + } + } + + /* Decreasing the number of wait states because of lower CPU frequency */ + if(FLatency < __HAL_FLASH_GET_LATENCY()) + 800120c: 4b1e ldr r3, [pc, #120] ; (8001288 ) + 800120e: 681b ldr r3, [r3, #0] + 8001210: 2201 movs r2, #1 + 8001212: 4013 ands r3, r2 + 8001214: 683a ldr r2, [r7, #0] + 8001216: 429a cmp r2, r3 + 8001218: d211 bcs.n 800123e + { + /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */ + __HAL_FLASH_SET_LATENCY(FLatency); + 800121a: 4b1b ldr r3, [pc, #108] ; (8001288 ) + 800121c: 681b ldr r3, [r3, #0] + 800121e: 2201 movs r2, #1 + 8001220: 4393 bics r3, r2 + 8001222: 0019 movs r1, r3 + 8001224: 4b18 ldr r3, [pc, #96] ; (8001288 ) + 8001226: 683a ldr r2, [r7, #0] + 8001228: 430a orrs r2, r1 + 800122a: 601a str 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) + 800122c: 4b16 ldr r3, [pc, #88] ; (8001288 ) + 800122e: 681b ldr r3, [r3, #0] + 8001230: 2201 movs r2, #1 + 8001232: 4013 ands r3, r2 + 8001234: 683a ldr r2, [r7, #0] + 8001236: 429a cmp r2, r3 + 8001238: d001 beq.n 800123e + { + return HAL_ERROR; + 800123a: 2301 movs r3, #1 + 800123c: e020 b.n 8001280 + } + } + + /*-------------------------- PCLK1 Configuration ---------------------------*/ + if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1) + 800123e: 687b ldr r3, [r7, #4] + 8001240: 681b ldr r3, [r3, #0] + 8001242: 2204 movs r2, #4 + 8001244: 4013 ands r3, r2 + 8001246: d009 beq.n 800125c + { + assert_param(IS_RCC_PCLK(RCC_ClkInitStruct->APB1CLKDivider)); + MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE, RCC_ClkInitStruct->APB1CLKDivider); + 8001248: 4b10 ldr r3, [pc, #64] ; (800128c ) + 800124a: 685b ldr r3, [r3, #4] + 800124c: 4a11 ldr r2, [pc, #68] ; (8001294 ) + 800124e: 4013 ands r3, r2 + 8001250: 0019 movs r1, r3 + 8001252: 687b ldr r3, [r7, #4] + 8001254: 68da ldr r2, [r3, #12] + 8001256: 4b0d ldr r3, [pc, #52] ; (800128c ) + 8001258: 430a orrs r2, r1 + 800125a: 605a str r2, [r3, #4] + } + + /* Update the SystemCoreClock global variable */ + SystemCoreClock = HAL_RCC_GetSysClockFreq() >> AHBPrescTable[(RCC->CFGR & RCC_CFGR_HPRE)>> RCC_CFGR_HPRE_BITNUMBER]; + 800125c: f000 f820 bl 80012a0 + 8001260: 0001 movs r1, r0 + 8001262: 4b0a ldr r3, [pc, #40] ; (800128c ) + 8001264: 685b ldr r3, [r3, #4] + 8001266: 091b lsrs r3, r3, #4 + 8001268: 220f movs r2, #15 + 800126a: 4013 ands r3, r2 + 800126c: 4a0a ldr r2, [pc, #40] ; (8001298 ) + 800126e: 5cd3 ldrb r3, [r2, r3] + 8001270: 000a movs r2, r1 + 8001272: 40da lsrs r2, r3 + 8001274: 4b09 ldr r3, [pc, #36] ; (800129c ) + 8001276: 601a str r2, [r3, #0] + + /* Configure the source of time base considering new system clocks settings*/ + HAL_InitTick (TICK_INT_PRIORITY); + 8001278: 2000 movs r0, #0 + 800127a: f7ff f9bd bl 80005f8 + + return HAL_OK; + 800127e: 2300 movs r3, #0 +} + 8001280: 0018 movs r0, r3 + 8001282: 46bd mov sp, r7 + 8001284: b004 add sp, #16 + 8001286: bd80 pop {r7, pc} + 8001288: 40022000 .word 0x40022000 + 800128c: 40021000 .word 0x40021000 + 8001290: 00001388 .word 0x00001388 + 8001294: fffff8ff .word 0xfffff8ff + 8001298: 08001ce4 .word 0x08001ce4 + 800129c: 20000000 .word 0x20000000 + +080012a0 : + * right SYSCLK value. Otherwise, any configuration based on this function will be incorrect. + * + * @retval SYSCLK frequency + */ +uint32_t HAL_RCC_GetSysClockFreq(void) +{ + 80012a0: b580 push {r7, lr} + 80012a2: b086 sub sp, #24 + 80012a4: af00 add r7, sp, #0 + static const uint8_t aPLLMULFactorTable[16U] = { 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, + 10U, 11U, 12U, 13U, 14U, 15U, 16U, 16U}; + static const uint8_t aPredivFactorTable[16U] = { 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, + 9U,10U, 11U, 12U, 13U, 14U, 15U, 16U}; + + uint32_t tmpreg = 0U, prediv = 0U, pllclk = 0U, pllmul = 0U; + 80012a6: 2300 movs r3, #0 + 80012a8: 60fb str r3, [r7, #12] + 80012aa: 2300 movs r3, #0 + 80012ac: 60bb str r3, [r7, #8] + 80012ae: 2300 movs r3, #0 + 80012b0: 617b str r3, [r7, #20] + 80012b2: 2300 movs r3, #0 + 80012b4: 607b str r3, [r7, #4] + uint32_t sysclockfreq = 0U; + 80012b6: 2300 movs r3, #0 + 80012b8: 613b str r3, [r7, #16] + + tmpreg = RCC->CFGR; + 80012ba: 4b20 ldr r3, [pc, #128] ; (800133c ) + 80012bc: 685b ldr r3, [r3, #4] + 80012be: 60fb str r3, [r7, #12] + + /* Get SYSCLK source -------------------------------------------------------*/ + switch (tmpreg & RCC_CFGR_SWS) + 80012c0: 68fb ldr r3, [r7, #12] + 80012c2: 220c movs r2, #12 + 80012c4: 4013 ands r3, r2 + 80012c6: 2b04 cmp r3, #4 + 80012c8: d002 beq.n 80012d0 + 80012ca: 2b08 cmp r3, #8 + 80012cc: d003 beq.n 80012d6 + 80012ce: e02c b.n 800132a + { + case RCC_SYSCLKSOURCE_STATUS_HSE: /* HSE used as system clock */ + { + sysclockfreq = HSE_VALUE; + 80012d0: 4b1b ldr r3, [pc, #108] ; (8001340 ) + 80012d2: 613b str r3, [r7, #16] + break; + 80012d4: e02c b.n 8001330 + } + case RCC_SYSCLKSOURCE_STATUS_PLLCLK: /* PLL used as system clock */ + { + pllmul = aPLLMULFactorTable[(uint32_t)(tmpreg & RCC_CFGR_PLLMUL) >> RCC_CFGR_PLLMUL_BITNUMBER]; + 80012d6: 68fb ldr r3, [r7, #12] + 80012d8: 0c9b lsrs r3, r3, #18 + 80012da: 220f movs r2, #15 + 80012dc: 4013 ands r3, r2 + 80012de: 4a19 ldr r2, [pc, #100] ; (8001344 ) + 80012e0: 5cd3 ldrb r3, [r2, r3] + 80012e2: 607b str r3, [r7, #4] + prediv = aPredivFactorTable[(uint32_t)(RCC->CFGR2 & RCC_CFGR2_PREDIV) >> RCC_CFGR2_PREDIV_BITNUMBER]; + 80012e4: 4b15 ldr r3, [pc, #84] ; (800133c ) + 80012e6: 6adb ldr r3, [r3, #44] ; 0x2c + 80012e8: 220f movs r2, #15 + 80012ea: 4013 ands r3, r2 + 80012ec: 4a16 ldr r2, [pc, #88] ; (8001348 ) + 80012ee: 5cd3 ldrb r3, [r2, r3] + 80012f0: 60bb str r3, [r7, #8] + if ((tmpreg & RCC_CFGR_PLLSRC) == RCC_PLLSOURCE_HSE) + 80012f2: 68fa ldr r2, [r7, #12] + 80012f4: 2380 movs r3, #128 ; 0x80 + 80012f6: 025b lsls r3, r3, #9 + 80012f8: 4013 ands r3, r2 + 80012fa: d009 beq.n 8001310 + { + /* HSE used as PLL clock source : PLLCLK = HSE/PREDIV * PLLMUL */ + pllclk = (uint32_t)((uint64_t) HSE_VALUE / (uint64_t) (prediv)) * ((uint64_t) pllmul); + 80012fc: 68b9 ldr r1, [r7, #8] + 80012fe: 4810 ldr r0, [pc, #64] ; (8001340 ) + 8001300: f7fe ff02 bl 8000108 <__udivsi3> + 8001304: 0003 movs r3, r0 + 8001306: 001a movs r2, r3 + 8001308: 687b ldr r3, [r7, #4] + 800130a: 4353 muls r3, r2 + 800130c: 617b str r3, [r7, #20] + 800130e: e009 b.n 8001324 +#if (defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F070x6) || defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx) || defined(STM32F070xB) || defined(STM32F091xC) || defined(STM32F098xx) || defined(STM32F030xC)) + /* HSI used as PLL clock source : PLLCLK = HSI/PREDIV * PLLMUL */ + pllclk = (uint32_t)((uint64_t) HSI_VALUE / (uint64_t) (prediv)) * ((uint64_t) pllmul); +#else + /* HSI used as PLL clock source : PLLCLK = HSI/2 * PLLMUL */ + pllclk = (uint32_t)((uint64_t) (HSI_VALUE >> 1U) * ((uint64_t) pllmul)); + 8001310: 6879 ldr r1, [r7, #4] + 8001312: 000a movs r2, r1 + 8001314: 0152 lsls r2, r2, #5 + 8001316: 1a52 subs r2, r2, r1 + 8001318: 0193 lsls r3, r2, #6 + 800131a: 1a9b subs r3, r3, r2 + 800131c: 00db lsls r3, r3, #3 + 800131e: 185b adds r3, r3, r1 + 8001320: 021b lsls r3, r3, #8 + 8001322: 617b str r3, [r7, #20] +#endif + } + sysclockfreq = pllclk; + 8001324: 697b ldr r3, [r7, #20] + 8001326: 613b str r3, [r7, #16] + break; + 8001328: e002 b.n 8001330 + } +#endif /* RCC_CFGR_SWS_HSI48 */ + case RCC_SYSCLKSOURCE_STATUS_HSI: /* HSI used as system clock source */ + default: /* HSI used as system clock */ + { + sysclockfreq = HSI_VALUE; + 800132a: 4b05 ldr r3, [pc, #20] ; (8001340 ) + 800132c: 613b str r3, [r7, #16] + break; + 800132e: 46c0 nop ; (mov r8, r8) + } + } + return sysclockfreq; + 8001330: 693b ldr r3, [r7, #16] +} + 8001332: 0018 movs r0, r3 + 8001334: 46bd mov sp, r7 + 8001336: b006 add sp, #24 + 8001338: bd80 pop {r7, pc} + 800133a: 46c0 nop ; (mov r8, r8) + 800133c: 40021000 .word 0x40021000 + 8001340: 007a1200 .word 0x007a1200 + 8001344: 08001cfc .word 0x08001cfc + 8001348: 08001d0c .word 0x08001d0c + +0800134c : + * @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) +{ + 800134c: b580 push {r7, lr} + 800134e: af00 add r7, sp, #0 + return SystemCoreClock; + 8001350: 4b02 ldr r3, [pc, #8] ; (800135c ) + 8001352: 681b ldr r3, [r3, #0] +} + 8001354: 0018 movs r0, r3 + 8001356: 46bd mov sp, r7 + 8001358: bd80 pop {r7, pc} + 800135a: 46c0 nop ; (mov r8, r8) + 800135c: 20000000 .word 0x20000000 + +08001360 : + * @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) +{ + 8001360: b580 push {r7, lr} + 8001362: af00 add r7, sp, #0 + /* Get HCLK source and Compute PCLK1 frequency ---------------------------*/ + return (HAL_RCC_GetHCLKFreq() >> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE) >> RCC_CFGR_PPRE_BITNUMBER]); + 8001364: f7ff fff2 bl 800134c + 8001368: 0001 movs r1, r0 + 800136a: 4b06 ldr r3, [pc, #24] ; (8001384 ) + 800136c: 685b ldr r3, [r3, #4] + 800136e: 0a1b lsrs r3, r3, #8 + 8001370: 2207 movs r2, #7 + 8001372: 4013 ands r3, r2 + 8001374: 4a04 ldr r2, [pc, #16] ; (8001388 ) + 8001376: 5cd3 ldrb r3, [r2, r3] + 8001378: 40d9 lsrs r1, r3 + 800137a: 000b movs r3, r1 +} + 800137c: 0018 movs r0, r3 + 800137e: 46bd mov sp, r7 + 8001380: bd80 pop {r7, pc} + 8001382: 46c0 nop ; (mov r8, r8) + 8001384: 40021000 .word 0x40021000 + 8001388: 08001cf4 .word 0x08001cf4 + +0800138c : + * the backup registers) and RCC_BDCR register are set to their reset values. + * + * @retval HAL status + */ +HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit) +{ + 800138c: b580 push {r7, lr} + 800138e: b086 sub sp, #24 + 8001390: af00 add r7, sp, #0 + 8001392: 6078 str r0, [r7, #4] + uint32_t tickstart = 0U; + 8001394: 2300 movs r3, #0 + 8001396: 613b str r3, [r7, #16] + uint32_t temp_reg = 0U; + 8001398: 2300 movs r3, #0 + 800139a: 60fb str r3, [r7, #12] + + /* Check the parameters */ + assert_param(IS_RCC_PERIPHCLOCK(PeriphClkInit->PeriphClockSelection)); + + /*---------------------------- RTC configuration -------------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_RTC) == (RCC_PERIPHCLK_RTC)) + 800139c: 687b ldr r3, [r7, #4] + 800139e: 681a ldr r2, [r3, #0] + 80013a0: 2380 movs r3, #128 ; 0x80 + 80013a2: 025b lsls r3, r3, #9 + 80013a4: 4013 ands r3, r2 + 80013a6: d100 bne.n 80013aa + 80013a8: e08e b.n 80014c8 + { + /* check for RTC Parameters used to output RTCCLK */ + assert_param(IS_RCC_RTCCLKSOURCE(PeriphClkInit->RTCClockSelection)); + + FlagStatus pwrclkchanged = RESET; + 80013aa: 2017 movs r0, #23 + 80013ac: 183b adds r3, r7, r0 + 80013ae: 2200 movs r2, #0 + 80013b0: 701a strb r2, [r3, #0] + + /* As soon as function is called to change RTC clock source, activation of the + power domain is done. */ + /* Requires to enable write access to Backup Domain of necessary */ + if(__HAL_RCC_PWR_IS_CLK_DISABLED()) + 80013b2: 4b57 ldr r3, [pc, #348] ; (8001510 ) + 80013b4: 69da ldr r2, [r3, #28] + 80013b6: 2380 movs r3, #128 ; 0x80 + 80013b8: 055b lsls r3, r3, #21 + 80013ba: 4013 ands r3, r2 + 80013bc: d110 bne.n 80013e0 + { + __HAL_RCC_PWR_CLK_ENABLE(); + 80013be: 4b54 ldr r3, [pc, #336] ; (8001510 ) + 80013c0: 69da ldr r2, [r3, #28] + 80013c2: 4b53 ldr r3, [pc, #332] ; (8001510 ) + 80013c4: 2180 movs r1, #128 ; 0x80 + 80013c6: 0549 lsls r1, r1, #21 + 80013c8: 430a orrs r2, r1 + 80013ca: 61da str r2, [r3, #28] + 80013cc: 4b50 ldr r3, [pc, #320] ; (8001510 ) + 80013ce: 69da ldr r2, [r3, #28] + 80013d0: 2380 movs r3, #128 ; 0x80 + 80013d2: 055b lsls r3, r3, #21 + 80013d4: 4013 ands r3, r2 + 80013d6: 60bb str r3, [r7, #8] + 80013d8: 68bb ldr r3, [r7, #8] + pwrclkchanged = SET; + 80013da: 183b adds r3, r7, r0 + 80013dc: 2201 movs r2, #1 + 80013de: 701a strb r2, [r3, #0] + } + + if(HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) + 80013e0: 4b4c ldr r3, [pc, #304] ; (8001514 ) + 80013e2: 681a ldr r2, [r3, #0] + 80013e4: 2380 movs r3, #128 ; 0x80 + 80013e6: 005b lsls r3, r3, #1 + 80013e8: 4013 ands r3, r2 + 80013ea: d11a bne.n 8001422 + { + /* Enable write access to Backup domain */ + SET_BIT(PWR->CR, PWR_CR_DBP); + 80013ec: 4b49 ldr r3, [pc, #292] ; (8001514 ) + 80013ee: 681a ldr r2, [r3, #0] + 80013f0: 4b48 ldr r3, [pc, #288] ; (8001514 ) + 80013f2: 2180 movs r1, #128 ; 0x80 + 80013f4: 0049 lsls r1, r1, #1 + 80013f6: 430a orrs r2, r1 + 80013f8: 601a str r2, [r3, #0] + + /* Wait for Backup domain Write protection disable */ + tickstart = HAL_GetTick(); + 80013fa: f7ff f943 bl 8000684 + 80013fe: 0003 movs r3, r0 + 8001400: 613b str r3, [r7, #16] + + while(HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) + 8001402: e008 b.n 8001416 + { + if((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE) + 8001404: f7ff f93e bl 8000684 + 8001408: 0002 movs r2, r0 + 800140a: 693b ldr r3, [r7, #16] + 800140c: 1ad3 subs r3, r2, r3 + 800140e: 2b64 cmp r3, #100 ; 0x64 + 8001410: d901 bls.n 8001416 + { + return HAL_TIMEOUT; + 8001412: 2303 movs r3, #3 + 8001414: e077 b.n 8001506 + while(HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) + 8001416: 4b3f ldr r3, [pc, #252] ; (8001514 ) + 8001418: 681a ldr r2, [r3, #0] + 800141a: 2380 movs r3, #128 ; 0x80 + 800141c: 005b lsls r3, r3, #1 + 800141e: 4013 ands r3, r2 + 8001420: d0f0 beq.n 8001404 + } + } + } + + /* Reset the Backup domain only if the RTC Clock source selection is modified from reset value */ + temp_reg = (RCC->BDCR & RCC_BDCR_RTCSEL); + 8001422: 4b3b ldr r3, [pc, #236] ; (8001510 ) + 8001424: 6a1a ldr r2, [r3, #32] + 8001426: 23c0 movs r3, #192 ; 0xc0 + 8001428: 009b lsls r3, r3, #2 + 800142a: 4013 ands r3, r2 + 800142c: 60fb str r3, [r7, #12] + if((temp_reg != 0x00000000U) && (temp_reg != (PeriphClkInit->RTCClockSelection & RCC_BDCR_RTCSEL))) + 800142e: 68fb ldr r3, [r7, #12] + 8001430: 2b00 cmp r3, #0 + 8001432: d034 beq.n 800149e + 8001434: 687b ldr r3, [r7, #4] + 8001436: 685a ldr r2, [r3, #4] + 8001438: 23c0 movs r3, #192 ; 0xc0 + 800143a: 009b lsls r3, r3, #2 + 800143c: 4013 ands r3, r2 + 800143e: 68fa ldr r2, [r7, #12] + 8001440: 429a cmp r2, r3 + 8001442: d02c beq.n 800149e + { + /* Store the content of BDCR register before the reset of Backup Domain */ + temp_reg = (RCC->BDCR & ~(RCC_BDCR_RTCSEL)); + 8001444: 4b32 ldr r3, [pc, #200] ; (8001510 ) + 8001446: 6a1b ldr r3, [r3, #32] + 8001448: 4a33 ldr r2, [pc, #204] ; (8001518 ) + 800144a: 4013 ands r3, r2 + 800144c: 60fb str r3, [r7, #12] + /* RTC Clock selection can be changed only if the Backup Domain is reset */ + __HAL_RCC_BACKUPRESET_FORCE(); + 800144e: 4b30 ldr r3, [pc, #192] ; (8001510 ) + 8001450: 6a1a ldr r2, [r3, #32] + 8001452: 4b2f ldr r3, [pc, #188] ; (8001510 ) + 8001454: 2180 movs r1, #128 ; 0x80 + 8001456: 0249 lsls r1, r1, #9 + 8001458: 430a orrs r2, r1 + 800145a: 621a str r2, [r3, #32] + __HAL_RCC_BACKUPRESET_RELEASE(); + 800145c: 4b2c ldr r3, [pc, #176] ; (8001510 ) + 800145e: 6a1a ldr r2, [r3, #32] + 8001460: 4b2b ldr r3, [pc, #172] ; (8001510 ) + 8001462: 492e ldr r1, [pc, #184] ; (800151c ) + 8001464: 400a ands r2, r1 + 8001466: 621a str r2, [r3, #32] + /* Restore the Content of BDCR register */ + RCC->BDCR = temp_reg; + 8001468: 4b29 ldr r3, [pc, #164] ; (8001510 ) + 800146a: 68fa ldr r2, [r7, #12] + 800146c: 621a str r2, [r3, #32] + + /* Wait for LSERDY if LSE was enabled */ + if (HAL_IS_BIT_SET(temp_reg, RCC_BDCR_LSEON)) + 800146e: 68fb ldr r3, [r7, #12] + 8001470: 2201 movs r2, #1 + 8001472: 4013 ands r3, r2 + 8001474: d013 beq.n 800149e + { + /* Get Start Tick */ + tickstart = HAL_GetTick(); + 8001476: f7ff f905 bl 8000684 + 800147a: 0003 movs r3, r0 + 800147c: 613b str r3, [r7, #16] + + /* Wait till LSE is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) + 800147e: e009 b.n 8001494 + { + if((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE) + 8001480: f7ff f900 bl 8000684 + 8001484: 0002 movs r2, r0 + 8001486: 693b ldr r3, [r7, #16] + 8001488: 1ad3 subs r3, r2, r3 + 800148a: 4a25 ldr r2, [pc, #148] ; (8001520 ) + 800148c: 4293 cmp r3, r2 + 800148e: d901 bls.n 8001494 + { + return HAL_TIMEOUT; + 8001490: 2303 movs r3, #3 + 8001492: e038 b.n 8001506 + while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) + 8001494: 4b1e ldr r3, [pc, #120] ; (8001510 ) + 8001496: 6a1b ldr r3, [r3, #32] + 8001498: 2202 movs r2, #2 + 800149a: 4013 ands r3, r2 + 800149c: d0f0 beq.n 8001480 + } + } + } + } + __HAL_RCC_RTC_CONFIG(PeriphClkInit->RTCClockSelection); + 800149e: 4b1c ldr r3, [pc, #112] ; (8001510 ) + 80014a0: 6a1b ldr r3, [r3, #32] + 80014a2: 4a1d ldr r2, [pc, #116] ; (8001518 ) + 80014a4: 4013 ands r3, r2 + 80014a6: 0019 movs r1, r3 + 80014a8: 687b ldr r3, [r7, #4] + 80014aa: 685a ldr r2, [r3, #4] + 80014ac: 4b18 ldr r3, [pc, #96] ; (8001510 ) + 80014ae: 430a orrs r2, r1 + 80014b0: 621a str r2, [r3, #32] + + /* Require to disable power clock if necessary */ + if(pwrclkchanged == SET) + 80014b2: 2317 movs r3, #23 + 80014b4: 18fb adds r3, r7, r3 + 80014b6: 781b ldrb r3, [r3, #0] + 80014b8: 2b01 cmp r3, #1 + 80014ba: d105 bne.n 80014c8 + { + __HAL_RCC_PWR_CLK_DISABLE(); + 80014bc: 4b14 ldr r3, [pc, #80] ; (8001510 ) + 80014be: 69da ldr r2, [r3, #28] + 80014c0: 4b13 ldr r3, [pc, #76] ; (8001510 ) + 80014c2: 4918 ldr r1, [pc, #96] ; (8001524 ) + 80014c4: 400a ands r2, r1 + 80014c6: 61da str r2, [r3, #28] + } + } + + /*------------------------------- USART1 Configuration ------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USART1) == RCC_PERIPHCLK_USART1) + 80014c8: 687b ldr r3, [r7, #4] + 80014ca: 681b ldr r3, [r3, #0] + 80014cc: 2201 movs r2, #1 + 80014ce: 4013 ands r3, r2 + 80014d0: d009 beq.n 80014e6 + { + /* Check the parameters */ + assert_param(IS_RCC_USART1CLKSOURCE(PeriphClkInit->Usart1ClockSelection)); + + /* Configure the USART1 clock source */ + __HAL_RCC_USART1_CONFIG(PeriphClkInit->Usart1ClockSelection); + 80014d2: 4b0f ldr r3, [pc, #60] ; (8001510 ) + 80014d4: 6b1b ldr r3, [r3, #48] ; 0x30 + 80014d6: 2203 movs r2, #3 + 80014d8: 4393 bics r3, r2 + 80014da: 0019 movs r1, r3 + 80014dc: 687b ldr r3, [r7, #4] + 80014de: 689a ldr r2, [r3, #8] + 80014e0: 4b0b ldr r3, [pc, #44] ; (8001510 ) + 80014e2: 430a orrs r2, r1 + 80014e4: 631a str r2, [r3, #48] ; 0x30 + __HAL_RCC_USART3_CONFIG(PeriphClkInit->Usart3ClockSelection); + } +#endif /* STM32F091xC || STM32F098xx */ + + /*------------------------------ I2C1 Configuration ------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2C1) == RCC_PERIPHCLK_I2C1) + 80014e6: 687b ldr r3, [r7, #4] + 80014e8: 681b ldr r3, [r3, #0] + 80014ea: 2220 movs r2, #32 + 80014ec: 4013 ands r3, r2 + 80014ee: d009 beq.n 8001504 + { + /* Check the parameters */ + assert_param(IS_RCC_I2C1CLKSOURCE(PeriphClkInit->I2c1ClockSelection)); + + /* Configure the I2C1 clock source */ + __HAL_RCC_I2C1_CONFIG(PeriphClkInit->I2c1ClockSelection); + 80014f0: 4b07 ldr r3, [pc, #28] ; (8001510 ) + 80014f2: 6b1b ldr r3, [r3, #48] ; 0x30 + 80014f4: 2210 movs r2, #16 + 80014f6: 4393 bics r3, r2 + 80014f8: 0019 movs r1, r3 + 80014fa: 687b ldr r3, [r7, #4] + 80014fc: 68da ldr r2, [r3, #12] + 80014fe: 4b04 ldr r3, [pc, #16] ; (8001510 ) + 8001500: 430a orrs r2, r1 + 8001502: 631a str r2, [r3, #48] ; 0x30 +#endif /* STM32F042x6 || STM32F048xx || */ + /* STM32F051x8 || STM32F058xx || */ + /* STM32F071xB || STM32F072xB || STM32F078xx || */ + /* STM32F091xC || STM32F098xx */ + + return HAL_OK; + 8001504: 2300 movs r3, #0 +} + 8001506: 0018 movs r0, r3 + 8001508: 46bd mov sp, r7 + 800150a: b006 add sp, #24 + 800150c: bd80 pop {r7, pc} + 800150e: 46c0 nop ; (mov r8, r8) + 8001510: 40021000 .word 0x40021000 + 8001514: 40007000 .word 0x40007000 + 8001518: fffffcff .word 0xfffffcff + 800151c: fffeffff .word 0xfffeffff + 8001520: 00001388 .word 0x00001388 + 8001524: efffffff .word 0xefffffff + +08001528 : + * parameters in the UART_InitTypeDef and initialize the associated handle. + * @param huart UART handle. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart) +{ + 8001528: b580 push {r7, lr} + 800152a: b082 sub sp, #8 + 800152c: af00 add r7, sp, #0 + 800152e: 6078 str r0, [r7, #4] + /* Check the UART handle allocation */ + if (huart == NULL) + 8001530: 687b ldr r3, [r7, #4] + 8001532: 2b00 cmp r3, #0 + 8001534: d101 bne.n 800153a + { + return HAL_ERROR; + 8001536: 2301 movs r3, #1 + 8001538: e044 b.n 80015c4 + { + /* Check the parameters */ + assert_param(IS_UART_INSTANCE(huart->Instance)); + } + + if (huart->gState == HAL_UART_STATE_RESET) + 800153a: 687b ldr r3, [r7, #4] + 800153c: 6fdb ldr r3, [r3, #124] ; 0x7c + 800153e: 2b00 cmp r3, #0 + 8001540: d107 bne.n 8001552 + { + /* Allocate lock resource and initialize it */ + huart->Lock = HAL_UNLOCKED; + 8001542: 687b ldr r3, [r7, #4] + 8001544: 2278 movs r2, #120 ; 0x78 + 8001546: 2100 movs r1, #0 + 8001548: 5499 strb r1, [r3, r2] + + /* Init the low level hardware */ + huart->MspInitCallback(huart); +#else + /* Init the low level hardware : GPIO, CLOCK */ + HAL_UART_MspInit(huart); + 800154a: 687b ldr r3, [r7, #4] + 800154c: 0018 movs r0, r3 + 800154e: f7fe ffb1 bl 80004b4 +#endif /* (USE_HAL_UART_REGISTER_CALLBACKS) */ + } + + huart->gState = HAL_UART_STATE_BUSY; + 8001552: 687b ldr r3, [r7, #4] + 8001554: 2224 movs r2, #36 ; 0x24 + 8001556: 67da str r2, [r3, #124] ; 0x7c + + __HAL_UART_DISABLE(huart); + 8001558: 687b ldr r3, [r7, #4] + 800155a: 681b ldr r3, [r3, #0] + 800155c: 681a ldr r2, [r3, #0] + 800155e: 687b ldr r3, [r7, #4] + 8001560: 681b ldr r3, [r3, #0] + 8001562: 2101 movs r1, #1 + 8001564: 438a bics r2, r1 + 8001566: 601a str r2, [r3, #0] + + /* Set the UART Communication parameters */ + if (UART_SetConfig(huart) == HAL_ERROR) + 8001568: 687b ldr r3, [r7, #4] + 800156a: 0018 movs r0, r3 + 800156c: f000 f830 bl 80015d0 + 8001570: 0003 movs r3, r0 + 8001572: 2b01 cmp r3, #1 + 8001574: d101 bne.n 800157a + { + return HAL_ERROR; + 8001576: 2301 movs r3, #1 + 8001578: e024 b.n 80015c4 + } + + if (huart->AdvancedInit.AdvFeatureInit != UART_ADVFEATURE_NO_INIT) + 800157a: 687b ldr r3, [r7, #4] + 800157c: 6a5b ldr r3, [r3, #36] ; 0x24 + 800157e: 2b00 cmp r3, #0 + 8001580: d003 beq.n 800158a + { + UART_AdvFeatureConfig(huart); + 8001582: 687b ldr r3, [r7, #4] + 8001584: 0018 movs r0, r3 + 8001586: f000 f94b bl 8001820 + + /* In asynchronous mode, the following bits must be kept cleared: + - LINEN (if LIN is supported) and CLKEN bits in the USART_CR2 register, + - SCEN (if Smartcard is supported), HDSEL and IREN (if IrDA is supported) bits in the USART_CR3 register.*/ +#if defined (USART_CR2_LINEN) + CLEAR_BIT(huart->Instance->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN)); + 800158a: 687b ldr r3, [r7, #4] + 800158c: 681b ldr r3, [r3, #0] + 800158e: 685a ldr r2, [r3, #4] + 8001590: 687b ldr r3, [r7, #4] + 8001592: 681b ldr r3, [r3, #0] + 8001594: 490d ldr r1, [pc, #52] ; (80015cc ) + 8001596: 400a ands r2, r1 + 8001598: 605a str r2, [r3, #4] +#else + CLEAR_BIT(huart->Instance->CR2, USART_CR2_CLKEN); +#endif /* USART_CR2_LINEN */ +#if defined (USART_CR3_SCEN) +#if defined (USART_CR3_IREN) + CLEAR_BIT(huart->Instance->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL | USART_CR3_IREN)); + 800159a: 687b ldr r3, [r7, #4] + 800159c: 681b ldr r3, [r3, #0] + 800159e: 689a ldr r2, [r3, #8] + 80015a0: 687b ldr r3, [r7, #4] + 80015a2: 681b ldr r3, [r3, #0] + 80015a4: 212a movs r1, #42 ; 0x2a + 80015a6: 438a bics r2, r1 + 80015a8: 609a str r2, [r3, #8] +#else + CLEAR_BIT(huart->Instance->CR3, USART_CR3_HDSEL); +#endif /* USART_CR3_IREN*/ +#endif /* USART_CR3_SCEN */ + + __HAL_UART_ENABLE(huart); + 80015aa: 687b ldr r3, [r7, #4] + 80015ac: 681b ldr r3, [r3, #0] + 80015ae: 681a ldr r2, [r3, #0] + 80015b0: 687b ldr r3, [r7, #4] + 80015b2: 681b ldr r3, [r3, #0] + 80015b4: 2101 movs r1, #1 + 80015b6: 430a orrs r2, r1 + 80015b8: 601a str r2, [r3, #0] + + /* TEACK and/or REACK to check before moving huart->gState and huart->RxState to Ready */ + return (UART_CheckIdleState(huart)); + 80015ba: 687b ldr r3, [r7, #4] + 80015bc: 0018 movs r0, r3 + 80015be: f000 f9e3 bl 8001988 + 80015c2: 0003 movs r3, r0 +} + 80015c4: 0018 movs r0, r3 + 80015c6: 46bd mov sp, r7 + 80015c8: b002 add sp, #8 + 80015ca: bd80 pop {r7, pc} + 80015cc: ffffb7ff .word 0xffffb7ff + +080015d0 : + * @brief Configure the UART peripheral. + * @param huart UART handle. + * @retval HAL status + */ +HAL_StatusTypeDef UART_SetConfig(UART_HandleTypeDef *huart) +{ + 80015d0: b580 push {r7, lr} + 80015d2: b088 sub sp, #32 + 80015d4: af00 add r7, sp, #0 + 80015d6: 6078 str r0, [r7, #4] + uint32_t tmpreg; + uint16_t brrtemp; + UART_ClockSourceTypeDef clocksource; + uint32_t usartdiv; + HAL_StatusTypeDef ret = HAL_OK; + 80015d8: 231e movs r3, #30 + 80015da: 18fb adds r3, r7, r3 + 80015dc: 2200 movs r2, #0 + 80015de: 701a strb r2, [r3, #0] + * the UART Word Length, Parity, Mode and oversampling: + * 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 ; + 80015e0: 687b ldr r3, [r7, #4] + 80015e2: 689a ldr r2, [r3, #8] + 80015e4: 687b ldr r3, [r7, #4] + 80015e6: 691b ldr r3, [r3, #16] + 80015e8: 431a orrs r2, r3 + 80015ea: 687b ldr r3, [r7, #4] + 80015ec: 695b ldr r3, [r3, #20] + 80015ee: 431a orrs r2, r3 + 80015f0: 687b ldr r3, [r7, #4] + 80015f2: 69db ldr r3, [r3, #28] + 80015f4: 4313 orrs r3, r2 + 80015f6: 617b str r3, [r7, #20] + MODIFY_REG(huart->Instance->CR1, USART_CR1_FIELDS, tmpreg); + 80015f8: 687b ldr r3, [r7, #4] + 80015fa: 681b ldr r3, [r3, #0] + 80015fc: 681b ldr r3, [r3, #0] + 80015fe: 4a83 ldr r2, [pc, #524] ; (800180c ) + 8001600: 4013 ands r3, r2 + 8001602: 0019 movs r1, r3 + 8001604: 687b ldr r3, [r7, #4] + 8001606: 681b ldr r3, [r3, #0] + 8001608: 697a ldr r2, [r7, #20] + 800160a: 430a orrs r2, r1 + 800160c: 601a str r2, [r3, #0] + + /*-------------------------- 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); + 800160e: 687b ldr r3, [r7, #4] + 8001610: 681b ldr r3, [r3, #0] + 8001612: 685b ldr r3, [r3, #4] + 8001614: 4a7e ldr r2, [pc, #504] ; (8001810 ) + 8001616: 4013 ands r3, r2 + 8001618: 0019 movs r1, r3 + 800161a: 687b ldr r3, [r7, #4] + 800161c: 68da ldr r2, [r3, #12] + 800161e: 687b ldr r3, [r7, #4] + 8001620: 681b ldr r3, [r3, #0] + 8001622: 430a orrs r2, r1 + 8001624: 605a str r2, [r3, #4] + /* Configure + * - UART HardWare Flow Control: set CTSE and RTSE bits according + * to huart->Init.HwFlowCtl value + * - one-bit sampling method versus three samples' majority rule according + * to huart->Init.OneBitSampling (not applicable to LPUART) */ + tmpreg = (uint32_t)huart->Init.HwFlowCtl; + 8001626: 687b ldr r3, [r7, #4] + 8001628: 699b ldr r3, [r3, #24] + 800162a: 617b str r3, [r7, #20] + + tmpreg |= huart->Init.OneBitSampling; + 800162c: 687b ldr r3, [r7, #4] + 800162e: 6a1b ldr r3, [r3, #32] + 8001630: 697a ldr r2, [r7, #20] + 8001632: 4313 orrs r3, r2 + 8001634: 617b str r3, [r7, #20] + MODIFY_REG(huart->Instance->CR3, USART_CR3_FIELDS, tmpreg); + 8001636: 687b ldr r3, [r7, #4] + 8001638: 681b ldr r3, [r3, #0] + 800163a: 689b ldr r3, [r3, #8] + 800163c: 4a75 ldr r2, [pc, #468] ; (8001814 ) + 800163e: 4013 ands r3, r2 + 8001640: 0019 movs r1, r3 + 8001642: 687b ldr r3, [r7, #4] + 8001644: 681b ldr r3, [r3, #0] + 8001646: 697a ldr r2, [r7, #20] + 8001648: 430a orrs r2, r1 + 800164a: 609a str r2, [r3, #8] + + + /*-------------------------- USART BRR Configuration -----------------------*/ + UART_GETCLOCKSOURCE(huart, clocksource); + 800164c: 4b72 ldr r3, [pc, #456] ; (8001818 ) + 800164e: 6b1b ldr r3, [r3, #48] ; 0x30 + 8001650: 2203 movs r2, #3 + 8001652: 4013 ands r3, r2 + 8001654: 2b03 cmp r3, #3 + 8001656: d00d beq.n 8001674 + 8001658: d81b bhi.n 8001692 + 800165a: 2b02 cmp r3, #2 + 800165c: d014 beq.n 8001688 + 800165e: d818 bhi.n 8001692 + 8001660: 2b00 cmp r3, #0 + 8001662: d002 beq.n 800166a + 8001664: 2b01 cmp r3, #1 + 8001666: d00a beq.n 800167e + 8001668: e013 b.n 8001692 + 800166a: 231f movs r3, #31 + 800166c: 18fb adds r3, r7, r3 + 800166e: 2200 movs r2, #0 + 8001670: 701a strb r2, [r3, #0] + 8001672: e012 b.n 800169a + 8001674: 231f movs r3, #31 + 8001676: 18fb adds r3, r7, r3 + 8001678: 2202 movs r2, #2 + 800167a: 701a strb r2, [r3, #0] + 800167c: e00d b.n 800169a + 800167e: 231f movs r3, #31 + 8001680: 18fb adds r3, r7, r3 + 8001682: 2204 movs r2, #4 + 8001684: 701a strb r2, [r3, #0] + 8001686: e008 b.n 800169a + 8001688: 231f movs r3, #31 + 800168a: 18fb adds r3, r7, r3 + 800168c: 2208 movs r2, #8 + 800168e: 701a strb r2, [r3, #0] + 8001690: e003 b.n 800169a + 8001692: 231f movs r3, #31 + 8001694: 18fb adds r3, r7, r3 + 8001696: 2210 movs r2, #16 + 8001698: 701a strb r2, [r3, #0] + + if (huart->Init.OverSampling == UART_OVERSAMPLING_8) + 800169a: 687b ldr r3, [r7, #4] + 800169c: 69da ldr r2, [r3, #28] + 800169e: 2380 movs r3, #128 ; 0x80 + 80016a0: 021b lsls r3, r3, #8 + 80016a2: 429a cmp r2, r3 + 80016a4: d15c bne.n 8001760 + { + switch (clocksource) + 80016a6: 231f movs r3, #31 + 80016a8: 18fb adds r3, r7, r3 + 80016aa: 781b ldrb r3, [r3, #0] + 80016ac: 2b08 cmp r3, #8 + 80016ae: d015 beq.n 80016dc + 80016b0: dc18 bgt.n 80016e4 + 80016b2: 2b04 cmp r3, #4 + 80016b4: d00d beq.n 80016d2 + 80016b6: dc15 bgt.n 80016e4 + 80016b8: 2b00 cmp r3, #0 + 80016ba: d002 beq.n 80016c2 + 80016bc: 2b02 cmp r3, #2 + 80016be: d005 beq.n 80016cc + 80016c0: e010 b.n 80016e4 + { + case UART_CLOCKSOURCE_PCLK1: + pclk = HAL_RCC_GetPCLK1Freq(); + 80016c2: f7ff fe4d bl 8001360 + 80016c6: 0003 movs r3, r0 + 80016c8: 61bb str r3, [r7, #24] + break; + 80016ca: e012 b.n 80016f2 + case UART_CLOCKSOURCE_HSI: + pclk = (uint32_t) HSI_VALUE; + 80016cc: 4b53 ldr r3, [pc, #332] ; (800181c ) + 80016ce: 61bb str r3, [r7, #24] + break; + 80016d0: e00f b.n 80016f2 + case UART_CLOCKSOURCE_SYSCLK: + pclk = HAL_RCC_GetSysClockFreq(); + 80016d2: f7ff fde5 bl 80012a0 + 80016d6: 0003 movs r3, r0 + 80016d8: 61bb str r3, [r7, #24] + break; + 80016da: e00a b.n 80016f2 + case UART_CLOCKSOURCE_LSE: + pclk = (uint32_t) LSE_VALUE; + 80016dc: 2380 movs r3, #128 ; 0x80 + 80016de: 021b lsls r3, r3, #8 + 80016e0: 61bb str r3, [r7, #24] + break; + 80016e2: e006 b.n 80016f2 + default: + pclk = 0U; + 80016e4: 2300 movs r3, #0 + 80016e6: 61bb str r3, [r7, #24] + ret = HAL_ERROR; + 80016e8: 231e movs r3, #30 + 80016ea: 18fb adds r3, r7, r3 + 80016ec: 2201 movs r2, #1 + 80016ee: 701a strb r2, [r3, #0] + break; + 80016f0: 46c0 nop ; (mov r8, r8) + } + + /* USARTDIV must be greater than or equal to 0d16 */ + if (pclk != 0U) + 80016f2: 69bb ldr r3, [r7, #24] + 80016f4: 2b00 cmp r3, #0 + 80016f6: d100 bne.n 80016fa + 80016f8: e07a b.n 80017f0 + { + usartdiv = (uint32_t)(UART_DIV_SAMPLING8(pclk, huart->Init.BaudRate)); + 80016fa: 69bb ldr r3, [r7, #24] + 80016fc: 005a lsls r2, r3, #1 + 80016fe: 687b ldr r3, [r7, #4] + 8001700: 685b ldr r3, [r3, #4] + 8001702: 085b lsrs r3, r3, #1 + 8001704: 18d2 adds r2, r2, r3 + 8001706: 687b ldr r3, [r7, #4] + 8001708: 685b ldr r3, [r3, #4] + 800170a: 0019 movs r1, r3 + 800170c: 0010 movs r0, r2 + 800170e: f7fe fcfb bl 8000108 <__udivsi3> + 8001712: 0003 movs r3, r0 + 8001714: 613b str r3, [r7, #16] + if ((usartdiv >= UART_BRR_MIN) && (usartdiv <= UART_BRR_MAX)) + 8001716: 693b ldr r3, [r7, #16] + 8001718: 2b0f cmp r3, #15 + 800171a: d91c bls.n 8001756 + 800171c: 693a ldr r2, [r7, #16] + 800171e: 2380 movs r3, #128 ; 0x80 + 8001720: 025b lsls r3, r3, #9 + 8001722: 429a cmp r2, r3 + 8001724: d217 bcs.n 8001756 + { + brrtemp = (uint16_t)(usartdiv & 0xFFF0U); + 8001726: 693b ldr r3, [r7, #16] + 8001728: b29a uxth r2, r3 + 800172a: 200e movs r0, #14 + 800172c: 183b adds r3, r7, r0 + 800172e: 210f movs r1, #15 + 8001730: 438a bics r2, r1 + 8001732: 801a strh r2, [r3, #0] + brrtemp |= (uint16_t)((usartdiv & (uint16_t)0x000FU) >> 1U); + 8001734: 693b ldr r3, [r7, #16] + 8001736: 085b lsrs r3, r3, #1 + 8001738: b29b uxth r3, r3 + 800173a: 2207 movs r2, #7 + 800173c: 4013 ands r3, r2 + 800173e: b299 uxth r1, r3 + 8001740: 183b adds r3, r7, r0 + 8001742: 183a adds r2, r7, r0 + 8001744: 8812 ldrh r2, [r2, #0] + 8001746: 430a orrs r2, r1 + 8001748: 801a strh r2, [r3, #0] + huart->Instance->BRR = brrtemp; + 800174a: 687b ldr r3, [r7, #4] + 800174c: 681b ldr r3, [r3, #0] + 800174e: 183a adds r2, r7, r0 + 8001750: 8812 ldrh r2, [r2, #0] + 8001752: 60da str r2, [r3, #12] + 8001754: e04c b.n 80017f0 + } + else + { + ret = HAL_ERROR; + 8001756: 231e movs r3, #30 + 8001758: 18fb adds r3, r7, r3 + 800175a: 2201 movs r2, #1 + 800175c: 701a strb r2, [r3, #0] + 800175e: e047 b.n 80017f0 + } + } + } + else + { + switch (clocksource) + 8001760: 231f movs r3, #31 + 8001762: 18fb adds r3, r7, r3 + 8001764: 781b ldrb r3, [r3, #0] + 8001766: 2b08 cmp r3, #8 + 8001768: d015 beq.n 8001796 + 800176a: dc18 bgt.n 800179e + 800176c: 2b04 cmp r3, #4 + 800176e: d00d beq.n 800178c + 8001770: dc15 bgt.n 800179e + 8001772: 2b00 cmp r3, #0 + 8001774: d002 beq.n 800177c + 8001776: 2b02 cmp r3, #2 + 8001778: d005 beq.n 8001786 + 800177a: e010 b.n 800179e + { + case UART_CLOCKSOURCE_PCLK1: + pclk = HAL_RCC_GetPCLK1Freq(); + 800177c: f7ff fdf0 bl 8001360 + 8001780: 0003 movs r3, r0 + 8001782: 61bb str r3, [r7, #24] + break; + 8001784: e012 b.n 80017ac + case UART_CLOCKSOURCE_HSI: + pclk = (uint32_t) HSI_VALUE; + 8001786: 4b25 ldr r3, [pc, #148] ; (800181c ) + 8001788: 61bb str r3, [r7, #24] + break; + 800178a: e00f b.n 80017ac + case UART_CLOCKSOURCE_SYSCLK: + pclk = HAL_RCC_GetSysClockFreq(); + 800178c: f7ff fd88 bl 80012a0 + 8001790: 0003 movs r3, r0 + 8001792: 61bb str r3, [r7, #24] + break; + 8001794: e00a b.n 80017ac + case UART_CLOCKSOURCE_LSE: + pclk = (uint32_t) LSE_VALUE; + 8001796: 2380 movs r3, #128 ; 0x80 + 8001798: 021b lsls r3, r3, #8 + 800179a: 61bb str r3, [r7, #24] + break; + 800179c: e006 b.n 80017ac + default: + pclk = 0U; + 800179e: 2300 movs r3, #0 + 80017a0: 61bb str r3, [r7, #24] + ret = HAL_ERROR; + 80017a2: 231e movs r3, #30 + 80017a4: 18fb adds r3, r7, r3 + 80017a6: 2201 movs r2, #1 + 80017a8: 701a strb r2, [r3, #0] + break; + 80017aa: 46c0 nop ; (mov r8, r8) + } + + if (pclk != 0U) + 80017ac: 69bb ldr r3, [r7, #24] + 80017ae: 2b00 cmp r3, #0 + 80017b0: d01e beq.n 80017f0 + { + /* USARTDIV must be greater than or equal to 0d16 */ + usartdiv = (uint32_t)(UART_DIV_SAMPLING16(pclk, huart->Init.BaudRate)); + 80017b2: 687b ldr r3, [r7, #4] + 80017b4: 685b ldr r3, [r3, #4] + 80017b6: 085a lsrs r2, r3, #1 + 80017b8: 69bb ldr r3, [r7, #24] + 80017ba: 18d2 adds r2, r2, r3 + 80017bc: 687b ldr r3, [r7, #4] + 80017be: 685b ldr r3, [r3, #4] + 80017c0: 0019 movs r1, r3 + 80017c2: 0010 movs r0, r2 + 80017c4: f7fe fca0 bl 8000108 <__udivsi3> + 80017c8: 0003 movs r3, r0 + 80017ca: 613b str r3, [r7, #16] + if ((usartdiv >= UART_BRR_MIN) && (usartdiv <= UART_BRR_MAX)) + 80017cc: 693b ldr r3, [r7, #16] + 80017ce: 2b0f cmp r3, #15 + 80017d0: d90a bls.n 80017e8 + 80017d2: 693a ldr r2, [r7, #16] + 80017d4: 2380 movs r3, #128 ; 0x80 + 80017d6: 025b lsls r3, r3, #9 + 80017d8: 429a cmp r2, r3 + 80017da: d205 bcs.n 80017e8 + { + huart->Instance->BRR = (uint16_t)usartdiv; + 80017dc: 693b ldr r3, [r7, #16] + 80017de: b29a uxth r2, r3 + 80017e0: 687b ldr r3, [r7, #4] + 80017e2: 681b ldr r3, [r3, #0] + 80017e4: 60da str r2, [r3, #12] + 80017e6: e003 b.n 80017f0 + } + else + { + ret = HAL_ERROR; + 80017e8: 231e movs r3, #30 + 80017ea: 18fb adds r3, r7, r3 + 80017ec: 2201 movs r2, #1 + 80017ee: 701a strb r2, [r3, #0] + } + } + + + /* Clear ISR function pointers */ + huart->RxISR = NULL; + 80017f0: 687b ldr r3, [r7, #4] + 80017f2: 2200 movs r2, #0 + 80017f4: 669a str r2, [r3, #104] ; 0x68 + huart->TxISR = NULL; + 80017f6: 687b ldr r3, [r7, #4] + 80017f8: 2200 movs r2, #0 + 80017fa: 66da str r2, [r3, #108] ; 0x6c + + return ret; + 80017fc: 231e movs r3, #30 + 80017fe: 18fb adds r3, r7, r3 + 8001800: 781b ldrb r3, [r3, #0] +} + 8001802: 0018 movs r0, r3 + 8001804: 46bd mov sp, r7 + 8001806: b008 add sp, #32 + 8001808: bd80 pop {r7, pc} + 800180a: 46c0 nop ; (mov r8, r8) + 800180c: ffff69f3 .word 0xffff69f3 + 8001810: ffffcfff .word 0xffffcfff + 8001814: fffff4ff .word 0xfffff4ff + 8001818: 40021000 .word 0x40021000 + 800181c: 007a1200 .word 0x007a1200 + +08001820 : + * @brief Configure the UART peripheral advanced features. + * @param huart UART handle. + * @retval None + */ +void UART_AdvFeatureConfig(UART_HandleTypeDef *huart) +{ + 8001820: b580 push {r7, lr} + 8001822: b082 sub sp, #8 + 8001824: af00 add r7, sp, #0 + 8001826: 6078 str r0, [r7, #4] + /* Check whether the set of advanced features to configure is properly set */ + assert_param(IS_UART_ADVFEATURE_INIT(huart->AdvancedInit.AdvFeatureInit)); + + /* if required, configure TX pin active level inversion */ + if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_TXINVERT_INIT)) + 8001828: 687b ldr r3, [r7, #4] + 800182a: 6a5b ldr r3, [r3, #36] ; 0x24 + 800182c: 2201 movs r2, #1 + 800182e: 4013 ands r3, r2 + 8001830: d00b beq.n 800184a + { + assert_param(IS_UART_ADVFEATURE_TXINV(huart->AdvancedInit.TxPinLevelInvert)); + MODIFY_REG(huart->Instance->CR2, USART_CR2_TXINV, huart->AdvancedInit.TxPinLevelInvert); + 8001832: 687b ldr r3, [r7, #4] + 8001834: 681b ldr r3, [r3, #0] + 8001836: 685b ldr r3, [r3, #4] + 8001838: 4a4a ldr r2, [pc, #296] ; (8001964 ) + 800183a: 4013 ands r3, r2 + 800183c: 0019 movs r1, r3 + 800183e: 687b ldr r3, [r7, #4] + 8001840: 6a9a ldr r2, [r3, #40] ; 0x28 + 8001842: 687b ldr r3, [r7, #4] + 8001844: 681b ldr r3, [r3, #0] + 8001846: 430a orrs r2, r1 + 8001848: 605a str r2, [r3, #4] + } + + /* if required, configure RX pin active level inversion */ + if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_RXINVERT_INIT)) + 800184a: 687b ldr r3, [r7, #4] + 800184c: 6a5b ldr r3, [r3, #36] ; 0x24 + 800184e: 2202 movs r2, #2 + 8001850: 4013 ands r3, r2 + 8001852: d00b beq.n 800186c + { + assert_param(IS_UART_ADVFEATURE_RXINV(huart->AdvancedInit.RxPinLevelInvert)); + MODIFY_REG(huart->Instance->CR2, USART_CR2_RXINV, huart->AdvancedInit.RxPinLevelInvert); + 8001854: 687b ldr r3, [r7, #4] + 8001856: 681b ldr r3, [r3, #0] + 8001858: 685b ldr r3, [r3, #4] + 800185a: 4a43 ldr r2, [pc, #268] ; (8001968 ) + 800185c: 4013 ands r3, r2 + 800185e: 0019 movs r1, r3 + 8001860: 687b ldr r3, [r7, #4] + 8001862: 6ada ldr r2, [r3, #44] ; 0x2c + 8001864: 687b ldr r3, [r7, #4] + 8001866: 681b ldr r3, [r3, #0] + 8001868: 430a orrs r2, r1 + 800186a: 605a str r2, [r3, #4] + } + + /* if required, configure data inversion */ + if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_DATAINVERT_INIT)) + 800186c: 687b ldr r3, [r7, #4] + 800186e: 6a5b ldr r3, [r3, #36] ; 0x24 + 8001870: 2204 movs r2, #4 + 8001872: 4013 ands r3, r2 + 8001874: d00b beq.n 800188e + { + assert_param(IS_UART_ADVFEATURE_DATAINV(huart->AdvancedInit.DataInvert)); + MODIFY_REG(huart->Instance->CR2, USART_CR2_DATAINV, huart->AdvancedInit.DataInvert); + 8001876: 687b ldr r3, [r7, #4] + 8001878: 681b ldr r3, [r3, #0] + 800187a: 685b ldr r3, [r3, #4] + 800187c: 4a3b ldr r2, [pc, #236] ; (800196c ) + 800187e: 4013 ands r3, r2 + 8001880: 0019 movs r1, r3 + 8001882: 687b ldr r3, [r7, #4] + 8001884: 6b1a ldr r2, [r3, #48] ; 0x30 + 8001886: 687b ldr r3, [r7, #4] + 8001888: 681b ldr r3, [r3, #0] + 800188a: 430a orrs r2, r1 + 800188c: 605a str r2, [r3, #4] + } + + /* if required, configure RX/TX pins swap */ + if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_SWAP_INIT)) + 800188e: 687b ldr r3, [r7, #4] + 8001890: 6a5b ldr r3, [r3, #36] ; 0x24 + 8001892: 2208 movs r2, #8 + 8001894: 4013 ands r3, r2 + 8001896: d00b beq.n 80018b0 + { + assert_param(IS_UART_ADVFEATURE_SWAP(huart->AdvancedInit.Swap)); + MODIFY_REG(huart->Instance->CR2, USART_CR2_SWAP, huart->AdvancedInit.Swap); + 8001898: 687b ldr r3, [r7, #4] + 800189a: 681b ldr r3, [r3, #0] + 800189c: 685b ldr r3, [r3, #4] + 800189e: 4a34 ldr r2, [pc, #208] ; (8001970 ) + 80018a0: 4013 ands r3, r2 + 80018a2: 0019 movs r1, r3 + 80018a4: 687b ldr r3, [r7, #4] + 80018a6: 6b5a ldr r2, [r3, #52] ; 0x34 + 80018a8: 687b ldr r3, [r7, #4] + 80018aa: 681b ldr r3, [r3, #0] + 80018ac: 430a orrs r2, r1 + 80018ae: 605a str r2, [r3, #4] + } + + /* if required, configure RX overrun detection disabling */ + if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_RXOVERRUNDISABLE_INIT)) + 80018b0: 687b ldr r3, [r7, #4] + 80018b2: 6a5b ldr r3, [r3, #36] ; 0x24 + 80018b4: 2210 movs r2, #16 + 80018b6: 4013 ands r3, r2 + 80018b8: d00b beq.n 80018d2 + { + assert_param(IS_UART_OVERRUN(huart->AdvancedInit.OverrunDisable)); + MODIFY_REG(huart->Instance->CR3, USART_CR3_OVRDIS, huart->AdvancedInit.OverrunDisable); + 80018ba: 687b ldr r3, [r7, #4] + 80018bc: 681b ldr r3, [r3, #0] + 80018be: 689b ldr r3, [r3, #8] + 80018c0: 4a2c ldr r2, [pc, #176] ; (8001974 ) + 80018c2: 4013 ands r3, r2 + 80018c4: 0019 movs r1, r3 + 80018c6: 687b ldr r3, [r7, #4] + 80018c8: 6b9a ldr r2, [r3, #56] ; 0x38 + 80018ca: 687b ldr r3, [r7, #4] + 80018cc: 681b ldr r3, [r3, #0] + 80018ce: 430a orrs r2, r1 + 80018d0: 609a str r2, [r3, #8] + } + + /* if required, configure DMA disabling on reception error */ + if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_DMADISABLEONERROR_INIT)) + 80018d2: 687b ldr r3, [r7, #4] + 80018d4: 6a5b ldr r3, [r3, #36] ; 0x24 + 80018d6: 2220 movs r2, #32 + 80018d8: 4013 ands r3, r2 + 80018da: d00b beq.n 80018f4 + { + assert_param(IS_UART_ADVFEATURE_DMAONRXERROR(huart->AdvancedInit.DMADisableonRxError)); + MODIFY_REG(huart->Instance->CR3, USART_CR3_DDRE, huart->AdvancedInit.DMADisableonRxError); + 80018dc: 687b ldr r3, [r7, #4] + 80018de: 681b ldr r3, [r3, #0] + 80018e0: 689b ldr r3, [r3, #8] + 80018e2: 4a25 ldr r2, [pc, #148] ; (8001978 ) + 80018e4: 4013 ands r3, r2 + 80018e6: 0019 movs r1, r3 + 80018e8: 687b ldr r3, [r7, #4] + 80018ea: 6bda ldr r2, [r3, #60] ; 0x3c + 80018ec: 687b ldr r3, [r7, #4] + 80018ee: 681b ldr r3, [r3, #0] + 80018f0: 430a orrs r2, r1 + 80018f2: 609a str r2, [r3, #8] + } + + /* if required, configure auto Baud rate detection scheme */ + if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_AUTOBAUDRATE_INIT)) + 80018f4: 687b ldr r3, [r7, #4] + 80018f6: 6a5b ldr r3, [r3, #36] ; 0x24 + 80018f8: 2240 movs r2, #64 ; 0x40 + 80018fa: 4013 ands r3, r2 + 80018fc: d01d beq.n 800193a + { + assert_param(IS_USART_AUTOBAUDRATE_DETECTION_INSTANCE(huart->Instance)); + assert_param(IS_UART_ADVFEATURE_AUTOBAUDRATE(huart->AdvancedInit.AutoBaudRateEnable)); + MODIFY_REG(huart->Instance->CR2, USART_CR2_ABREN, huart->AdvancedInit.AutoBaudRateEnable); + 80018fe: 687b ldr r3, [r7, #4] + 8001900: 681b ldr r3, [r3, #0] + 8001902: 685b ldr r3, [r3, #4] + 8001904: 4a1d ldr r2, [pc, #116] ; (800197c ) + 8001906: 4013 ands r3, r2 + 8001908: 0019 movs r1, r3 + 800190a: 687b ldr r3, [r7, #4] + 800190c: 6c1a ldr r2, [r3, #64] ; 0x40 + 800190e: 687b ldr r3, [r7, #4] + 8001910: 681b ldr r3, [r3, #0] + 8001912: 430a orrs r2, r1 + 8001914: 605a str r2, [r3, #4] + /* set auto Baudrate detection parameters if detection is enabled */ + if (huart->AdvancedInit.AutoBaudRateEnable == UART_ADVFEATURE_AUTOBAUDRATE_ENABLE) + 8001916: 687b ldr r3, [r7, #4] + 8001918: 6c1a ldr r2, [r3, #64] ; 0x40 + 800191a: 2380 movs r3, #128 ; 0x80 + 800191c: 035b lsls r3, r3, #13 + 800191e: 429a cmp r2, r3 + 8001920: d10b bne.n 800193a + { + assert_param(IS_UART_ADVFEATURE_AUTOBAUDRATEMODE(huart->AdvancedInit.AutoBaudRateMode)); + MODIFY_REG(huart->Instance->CR2, USART_CR2_ABRMODE, huart->AdvancedInit.AutoBaudRateMode); + 8001922: 687b ldr r3, [r7, #4] + 8001924: 681b ldr r3, [r3, #0] + 8001926: 685b ldr r3, [r3, #4] + 8001928: 4a15 ldr r2, [pc, #84] ; (8001980 ) + 800192a: 4013 ands r3, r2 + 800192c: 0019 movs r1, r3 + 800192e: 687b ldr r3, [r7, #4] + 8001930: 6c5a ldr r2, [r3, #68] ; 0x44 + 8001932: 687b ldr r3, [r7, #4] + 8001934: 681b ldr r3, [r3, #0] + 8001936: 430a orrs r2, r1 + 8001938: 605a str r2, [r3, #4] + } + } + + /* if required, configure MSB first on communication line */ + if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_MSBFIRST_INIT)) + 800193a: 687b ldr r3, [r7, #4] + 800193c: 6a5b ldr r3, [r3, #36] ; 0x24 + 800193e: 2280 movs r2, #128 ; 0x80 + 8001940: 4013 ands r3, r2 + 8001942: d00b beq.n 800195c + { + assert_param(IS_UART_ADVFEATURE_MSBFIRST(huart->AdvancedInit.MSBFirst)); + MODIFY_REG(huart->Instance->CR2, USART_CR2_MSBFIRST, huart->AdvancedInit.MSBFirst); + 8001944: 687b ldr r3, [r7, #4] + 8001946: 681b ldr r3, [r3, #0] + 8001948: 685b ldr r3, [r3, #4] + 800194a: 4a0e ldr r2, [pc, #56] ; (8001984 ) + 800194c: 4013 ands r3, r2 + 800194e: 0019 movs r1, r3 + 8001950: 687b ldr r3, [r7, #4] + 8001952: 6c9a ldr r2, [r3, #72] ; 0x48 + 8001954: 687b ldr r3, [r7, #4] + 8001956: 681b ldr r3, [r3, #0] + 8001958: 430a orrs r2, r1 + 800195a: 605a str r2, [r3, #4] + } +} + 800195c: 46c0 nop ; (mov r8, r8) + 800195e: 46bd mov sp, r7 + 8001960: b002 add sp, #8 + 8001962: bd80 pop {r7, pc} + 8001964: fffdffff .word 0xfffdffff + 8001968: fffeffff .word 0xfffeffff + 800196c: fffbffff .word 0xfffbffff + 8001970: ffff7fff .word 0xffff7fff + 8001974: ffffefff .word 0xffffefff + 8001978: ffffdfff .word 0xffffdfff + 800197c: ffefffff .word 0xffefffff + 8001980: ff9fffff .word 0xff9fffff + 8001984: fff7ffff .word 0xfff7ffff + +08001988 : + * @brief Check the UART Idle State. + * @param huart UART handle. + * @retval HAL status + */ +HAL_StatusTypeDef UART_CheckIdleState(UART_HandleTypeDef *huart) +{ + 8001988: b580 push {r7, lr} + 800198a: b092 sub sp, #72 ; 0x48 + 800198c: af02 add r7, sp, #8 + 800198e: 6078 str r0, [r7, #4] + uint32_t tickstart; + + /* Initialize the UART ErrorCode */ + huart->ErrorCode = HAL_UART_ERROR_NONE; + 8001990: 687b ldr r3, [r7, #4] + 8001992: 2284 movs r2, #132 ; 0x84 + 8001994: 2100 movs r1, #0 + 8001996: 5099 str r1, [r3, r2] + + /* Init tickstart for timeout management */ + tickstart = HAL_GetTick(); + 8001998: f7fe fe74 bl 8000684 + 800199c: 0003 movs r3, r0 + 800199e: 63fb str r3, [r7, #60] ; 0x3c + + /* Check if the Transmitter is enabled */ + if ((huart->Instance->CR1 & USART_CR1_TE) == USART_CR1_TE) + 80019a0: 687b ldr r3, [r7, #4] + 80019a2: 681b ldr r3, [r3, #0] + 80019a4: 681b ldr r3, [r3, #0] + 80019a6: 2208 movs r2, #8 + 80019a8: 4013 ands r3, r2 + 80019aa: 2b08 cmp r3, #8 + 80019ac: d12c bne.n 8001a08 + { + /* Wait until TEACK flag is set */ + if (UART_WaitOnFlagUntilTimeout(huart, USART_ISR_TEACK, RESET, tickstart, HAL_UART_TIMEOUT_VALUE) != HAL_OK) + 80019ae: 6bfb ldr r3, [r7, #60] ; 0x3c + 80019b0: 2280 movs r2, #128 ; 0x80 + 80019b2: 0391 lsls r1, r2, #14 + 80019b4: 6878 ldr r0, [r7, #4] + 80019b6: 4a46 ldr r2, [pc, #280] ; (8001ad0 ) + 80019b8: 9200 str r2, [sp, #0] + 80019ba: 2200 movs r2, #0 + 80019bc: f000 f88c bl 8001ad8 + 80019c0: 1e03 subs r3, r0, #0 + 80019c2: d021 beq.n 8001a08 + */ +__STATIC_FORCEINLINE uint32_t __get_PRIMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory"); + 80019c4: f3ef 8310 mrs r3, PRIMASK + 80019c8: 627b str r3, [r7, #36] ; 0x24 + return(result); + 80019ca: 6a7b ldr r3, [r7, #36] ; 0x24 + { + /* Disable TXE interrupt for the interrupt process */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_TXEIE)); + 80019cc: 63bb str r3, [r7, #56] ; 0x38 + 80019ce: 2301 movs r3, #1 + 80019d0: 62bb str r3, [r7, #40] ; 0x28 + \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"); + 80019d2: 6abb ldr r3, [r7, #40] ; 0x28 + 80019d4: f383 8810 msr PRIMASK, r3 +} + 80019d8: 46c0 nop ; (mov r8, r8) + 80019da: 687b ldr r3, [r7, #4] + 80019dc: 681b ldr r3, [r3, #0] + 80019de: 681a ldr r2, [r3, #0] + 80019e0: 687b ldr r3, [r7, #4] + 80019e2: 681b ldr r3, [r3, #0] + 80019e4: 2180 movs r1, #128 ; 0x80 + 80019e6: 438a bics r2, r1 + 80019e8: 601a str r2, [r3, #0] + 80019ea: 6bbb ldr r3, [r7, #56] ; 0x38 + 80019ec: 62fb str r3, [r7, #44] ; 0x2c + __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); + 80019ee: 6afb ldr r3, [r7, #44] ; 0x2c + 80019f0: f383 8810 msr PRIMASK, r3 +} + 80019f4: 46c0 nop ; (mov r8, r8) + + huart->gState = HAL_UART_STATE_READY; + 80019f6: 687b ldr r3, [r7, #4] + 80019f8: 2220 movs r2, #32 + 80019fa: 67da str r2, [r3, #124] ; 0x7c + + __HAL_UNLOCK(huart); + 80019fc: 687b ldr r3, [r7, #4] + 80019fe: 2278 movs r2, #120 ; 0x78 + 8001a00: 2100 movs r1, #0 + 8001a02: 5499 strb r1, [r3, r2] + + /* Timeout occurred */ + return HAL_TIMEOUT; + 8001a04: 2303 movs r3, #3 + 8001a06: e05f b.n 8001ac8 + } + } + + /* Check if the Receiver is enabled */ + if ((huart->Instance->CR1 & USART_CR1_RE) == USART_CR1_RE) + 8001a08: 687b ldr r3, [r7, #4] + 8001a0a: 681b ldr r3, [r3, #0] + 8001a0c: 681b ldr r3, [r3, #0] + 8001a0e: 2204 movs r2, #4 + 8001a10: 4013 ands r3, r2 + 8001a12: 2b04 cmp r3, #4 + 8001a14: d146 bne.n 8001aa4 + { + /* Wait until REACK flag is set */ + if (UART_WaitOnFlagUntilTimeout(huart, USART_ISR_REACK, RESET, tickstart, HAL_UART_TIMEOUT_VALUE) != HAL_OK) + 8001a16: 6bfb ldr r3, [r7, #60] ; 0x3c + 8001a18: 2280 movs r2, #128 ; 0x80 + 8001a1a: 03d1 lsls r1, r2, #15 + 8001a1c: 6878 ldr r0, [r7, #4] + 8001a1e: 4a2c ldr r2, [pc, #176] ; (8001ad0 ) + 8001a20: 9200 str r2, [sp, #0] + 8001a22: 2200 movs r2, #0 + 8001a24: f000 f858 bl 8001ad8 + 8001a28: 1e03 subs r3, r0, #0 + 8001a2a: d03b beq.n 8001aa4 + __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory"); + 8001a2c: f3ef 8310 mrs r3, PRIMASK + 8001a30: 60fb str r3, [r7, #12] + return(result); + 8001a32: 68fb ldr r3, [r7, #12] + { + /* Disable 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)); + 8001a34: 637b str r3, [r7, #52] ; 0x34 + 8001a36: 2301 movs r3, #1 + 8001a38: 613b str r3, [r7, #16] + __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); + 8001a3a: 693b ldr r3, [r7, #16] + 8001a3c: f383 8810 msr PRIMASK, r3 +} + 8001a40: 46c0 nop ; (mov r8, r8) + 8001a42: 687b ldr r3, [r7, #4] + 8001a44: 681b ldr r3, [r3, #0] + 8001a46: 681a ldr r2, [r3, #0] + 8001a48: 687b ldr r3, [r7, #4] + 8001a4a: 681b ldr r3, [r3, #0] + 8001a4c: 4921 ldr r1, [pc, #132] ; (8001ad4 ) + 8001a4e: 400a ands r2, r1 + 8001a50: 601a str r2, [r3, #0] + 8001a52: 6b7b ldr r3, [r7, #52] ; 0x34 + 8001a54: 617b str r3, [r7, #20] + __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); + 8001a56: 697b ldr r3, [r7, #20] + 8001a58: f383 8810 msr PRIMASK, r3 +} + 8001a5c: 46c0 nop ; (mov r8, r8) + __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory"); + 8001a5e: f3ef 8310 mrs r3, PRIMASK + 8001a62: 61bb str r3, [r7, #24] + return(result); + 8001a64: 69bb ldr r3, [r7, #24] + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); + 8001a66: 633b str r3, [r7, #48] ; 0x30 + 8001a68: 2301 movs r3, #1 + 8001a6a: 61fb str r3, [r7, #28] + __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); + 8001a6c: 69fb ldr r3, [r7, #28] + 8001a6e: f383 8810 msr PRIMASK, r3 +} + 8001a72: 46c0 nop ; (mov r8, r8) + 8001a74: 687b ldr r3, [r7, #4] + 8001a76: 681b ldr r3, [r3, #0] + 8001a78: 689a ldr r2, [r3, #8] + 8001a7a: 687b ldr r3, [r7, #4] + 8001a7c: 681b ldr r3, [r3, #0] + 8001a7e: 2101 movs r1, #1 + 8001a80: 438a bics r2, r1 + 8001a82: 609a str r2, [r3, #8] + 8001a84: 6b3b ldr r3, [r7, #48] ; 0x30 + 8001a86: 623b str r3, [r7, #32] + __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); + 8001a88: 6a3b ldr r3, [r7, #32] + 8001a8a: f383 8810 msr PRIMASK, r3 +} + 8001a8e: 46c0 nop ; (mov r8, r8) + + huart->RxState = HAL_UART_STATE_READY; + 8001a90: 687b ldr r3, [r7, #4] + 8001a92: 2280 movs r2, #128 ; 0x80 + 8001a94: 2120 movs r1, #32 + 8001a96: 5099 str r1, [r3, r2] + + __HAL_UNLOCK(huart); + 8001a98: 687b ldr r3, [r7, #4] + 8001a9a: 2278 movs r2, #120 ; 0x78 + 8001a9c: 2100 movs r1, #0 + 8001a9e: 5499 strb r1, [r3, r2] + + /* Timeout occurred */ + return HAL_TIMEOUT; + 8001aa0: 2303 movs r3, #3 + 8001aa2: e011 b.n 8001ac8 + } + } + + /* Initialize the UART State */ + huart->gState = HAL_UART_STATE_READY; + 8001aa4: 687b ldr r3, [r7, #4] + 8001aa6: 2220 movs r2, #32 + 8001aa8: 67da str r2, [r3, #124] ; 0x7c + huart->RxState = HAL_UART_STATE_READY; + 8001aaa: 687b ldr r3, [r7, #4] + 8001aac: 2280 movs r2, #128 ; 0x80 + 8001aae: 2120 movs r1, #32 + 8001ab0: 5099 str r1, [r3, r2] + huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; + 8001ab2: 687b ldr r3, [r7, #4] + 8001ab4: 2200 movs r2, #0 + 8001ab6: 661a str r2, [r3, #96] ; 0x60 + huart->RxEventType = HAL_UART_RXEVENT_TC; + 8001ab8: 687b ldr r3, [r7, #4] + 8001aba: 2200 movs r2, #0 + 8001abc: 665a str r2, [r3, #100] ; 0x64 + + __HAL_UNLOCK(huart); + 8001abe: 687b ldr r3, [r7, #4] + 8001ac0: 2278 movs r2, #120 ; 0x78 + 8001ac2: 2100 movs r1, #0 + 8001ac4: 5499 strb r1, [r3, r2] + + return HAL_OK; + 8001ac6: 2300 movs r3, #0 +} + 8001ac8: 0018 movs r0, r3 + 8001aca: 46bd mov sp, r7 + 8001acc: b010 add sp, #64 ; 0x40 + 8001ace: bd80 pop {r7, pc} + 8001ad0: 01ffffff .word 0x01ffffff + 8001ad4: fffffedf .word 0xfffffedf + +08001ad8 : + * @param Timeout Timeout duration + * @retval HAL status + */ +HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_t Flag, FlagStatus Status, + uint32_t Tickstart, uint32_t Timeout) +{ + 8001ad8: b580 push {r7, lr} + 8001ada: b084 sub sp, #16 + 8001adc: af00 add r7, sp, #0 + 8001ade: 60f8 str r0, [r7, #12] + 8001ae0: 60b9 str r1, [r7, #8] + 8001ae2: 603b str r3, [r7, #0] + 8001ae4: 1dfb adds r3, r7, #7 + 8001ae6: 701a strb r2, [r3, #0] + /* Wait until flag is set */ + while ((__HAL_UART_GET_FLAG(huart, Flag) ? SET : RESET) == Status) + 8001ae8: e04b b.n 8001b82 + { + /* Check for the Timeout */ + if (Timeout != HAL_MAX_DELAY) + 8001aea: 69bb ldr r3, [r7, #24] + 8001aec: 3301 adds r3, #1 + 8001aee: d048 beq.n 8001b82 + { + if (((HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U)) + 8001af0: f7fe fdc8 bl 8000684 + 8001af4: 0002 movs r2, r0 + 8001af6: 683b ldr r3, [r7, #0] + 8001af8: 1ad3 subs r3, r2, r3 + 8001afa: 69ba ldr r2, [r7, #24] + 8001afc: 429a cmp r2, r3 + 8001afe: d302 bcc.n 8001b06 + 8001b00: 69bb ldr r3, [r7, #24] + 8001b02: 2b00 cmp r3, #0 + 8001b04: d101 bne.n 8001b0a + { + + return HAL_TIMEOUT; + 8001b06: 2303 movs r3, #3 + 8001b08: e04b b.n 8001ba2 + } + + if (READ_BIT(huart->Instance->CR1, USART_CR1_RE) != 0U) + 8001b0a: 68fb ldr r3, [r7, #12] + 8001b0c: 681b ldr r3, [r3, #0] + 8001b0e: 681b ldr r3, [r3, #0] + 8001b10: 2204 movs r2, #4 + 8001b12: 4013 ands r3, r2 + 8001b14: d035 beq.n 8001b82 + { + if (__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE) == SET) + 8001b16: 68fb ldr r3, [r7, #12] + 8001b18: 681b ldr r3, [r3, #0] + 8001b1a: 69db ldr r3, [r3, #28] + 8001b1c: 2208 movs r2, #8 + 8001b1e: 4013 ands r3, r2 + 8001b20: 2b08 cmp r3, #8 + 8001b22: d111 bne.n 8001b48 + { + /* Clear Overrun Error flag*/ + __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_OREF); + 8001b24: 68fb ldr r3, [r7, #12] + 8001b26: 681b ldr r3, [r3, #0] + 8001b28: 2208 movs r2, #8 + 8001b2a: 621a str r2, [r3, #32] + + /* Blocking error : transfer is aborted + Set the UART state ready to be able to start again the process, + Disable Rx Interrupts if ongoing */ + UART_EndRxTransfer(huart); + 8001b2c: 68fb ldr r3, [r7, #12] + 8001b2e: 0018 movs r0, r3 + 8001b30: f000 f83c bl 8001bac + + huart->ErrorCode = HAL_UART_ERROR_ORE; + 8001b34: 68fb ldr r3, [r7, #12] + 8001b36: 2284 movs r2, #132 ; 0x84 + 8001b38: 2108 movs r1, #8 + 8001b3a: 5099 str r1, [r3, r2] + + /* Process Unlocked */ + __HAL_UNLOCK(huart); + 8001b3c: 68fb ldr r3, [r7, #12] + 8001b3e: 2278 movs r2, #120 ; 0x78 + 8001b40: 2100 movs r1, #0 + 8001b42: 5499 strb r1, [r3, r2] + + return HAL_ERROR; + 8001b44: 2301 movs r3, #1 + 8001b46: e02c b.n 8001ba2 + } + if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RTOF) == SET) + 8001b48: 68fb ldr r3, [r7, #12] + 8001b4a: 681b ldr r3, [r3, #0] + 8001b4c: 69da ldr r2, [r3, #28] + 8001b4e: 2380 movs r3, #128 ; 0x80 + 8001b50: 011b lsls r3, r3, #4 + 8001b52: 401a ands r2, r3 + 8001b54: 2380 movs r3, #128 ; 0x80 + 8001b56: 011b lsls r3, r3, #4 + 8001b58: 429a cmp r2, r3 + 8001b5a: d112 bne.n 8001b82 + { + /* Clear Receiver Timeout flag*/ + __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_RTOF); + 8001b5c: 68fb ldr r3, [r7, #12] + 8001b5e: 681b ldr r3, [r3, #0] + 8001b60: 2280 movs r2, #128 ; 0x80 + 8001b62: 0112 lsls r2, r2, #4 + 8001b64: 621a str r2, [r3, #32] + + /* Blocking error : transfer is aborted + Set the UART state ready to be able to start again the process, + Disable Rx Interrupts if ongoing */ + UART_EndRxTransfer(huart); + 8001b66: 68fb ldr r3, [r7, #12] + 8001b68: 0018 movs r0, r3 + 8001b6a: f000 f81f bl 8001bac + + huart->ErrorCode = HAL_UART_ERROR_RTO; + 8001b6e: 68fb ldr r3, [r7, #12] + 8001b70: 2284 movs r2, #132 ; 0x84 + 8001b72: 2120 movs r1, #32 + 8001b74: 5099 str r1, [r3, r2] + + /* Process Unlocked */ + __HAL_UNLOCK(huart); + 8001b76: 68fb ldr r3, [r7, #12] + 8001b78: 2278 movs r2, #120 ; 0x78 + 8001b7a: 2100 movs r1, #0 + 8001b7c: 5499 strb r1, [r3, r2] + + return HAL_TIMEOUT; + 8001b7e: 2303 movs r3, #3 + 8001b80: e00f b.n 8001ba2 + while ((__HAL_UART_GET_FLAG(huart, Flag) ? SET : RESET) == Status) + 8001b82: 68fb ldr r3, [r7, #12] + 8001b84: 681b ldr r3, [r3, #0] + 8001b86: 69db ldr r3, [r3, #28] + 8001b88: 68ba ldr r2, [r7, #8] + 8001b8a: 4013 ands r3, r2 + 8001b8c: 68ba ldr r2, [r7, #8] + 8001b8e: 1ad3 subs r3, r2, r3 + 8001b90: 425a negs r2, r3 + 8001b92: 4153 adcs r3, r2 + 8001b94: b2db uxtb r3, r3 + 8001b96: 001a movs r2, r3 + 8001b98: 1dfb adds r3, r7, #7 + 8001b9a: 781b ldrb r3, [r3, #0] + 8001b9c: 429a cmp r2, r3 + 8001b9e: d0a4 beq.n 8001aea + } + } + } + } + return HAL_OK; + 8001ba0: 2300 movs r3, #0 +} + 8001ba2: 0018 movs r0, r3 + 8001ba4: 46bd mov sp, r7 + 8001ba6: b004 add sp, #16 + 8001ba8: bd80 pop {r7, pc} + ... + +08001bac : + * @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) +{ + 8001bac: b580 push {r7, lr} + 8001bae: b08e sub sp, #56 ; 0x38 + 8001bb0: af00 add r7, sp, #0 + 8001bb2: 6078 str r0, [r7, #4] + __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory"); + 8001bb4: f3ef 8310 mrs r3, PRIMASK + 8001bb8: 617b str r3, [r7, #20] + return(result); + 8001bba: 697b ldr r3, [r7, #20] + /* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE)); + 8001bbc: 637b str r3, [r7, #52] ; 0x34 + 8001bbe: 2301 movs r3, #1 + 8001bc0: 61bb str r3, [r7, #24] + __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); + 8001bc2: 69bb ldr r3, [r7, #24] + 8001bc4: f383 8810 msr PRIMASK, r3 +} + 8001bc8: 46c0 nop ; (mov r8, r8) + 8001bca: 687b ldr r3, [r7, #4] + 8001bcc: 681b ldr r3, [r3, #0] + 8001bce: 681a ldr r2, [r3, #0] + 8001bd0: 687b ldr r3, [r7, #4] + 8001bd2: 681b ldr r3, [r3, #0] + 8001bd4: 4926 ldr r1, [pc, #152] ; (8001c70 ) + 8001bd6: 400a ands r2, r1 + 8001bd8: 601a str r2, [r3, #0] + 8001bda: 6b7b ldr r3, [r7, #52] ; 0x34 + 8001bdc: 61fb str r3, [r7, #28] + __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); + 8001bde: 69fb ldr r3, [r7, #28] + 8001be0: f383 8810 msr PRIMASK, r3 +} + 8001be4: 46c0 nop ; (mov r8, r8) + __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory"); + 8001be6: f3ef 8310 mrs r3, PRIMASK + 8001bea: 623b str r3, [r7, #32] + return(result); + 8001bec: 6a3b ldr r3, [r7, #32] + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); + 8001bee: 633b str r3, [r7, #48] ; 0x30 + 8001bf0: 2301 movs r3, #1 + 8001bf2: 627b str r3, [r7, #36] ; 0x24 + __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); + 8001bf4: 6a7b ldr r3, [r7, #36] ; 0x24 + 8001bf6: f383 8810 msr PRIMASK, r3 +} + 8001bfa: 46c0 nop ; (mov r8, r8) + 8001bfc: 687b ldr r3, [r7, #4] + 8001bfe: 681b ldr r3, [r3, #0] + 8001c00: 689a ldr r2, [r3, #8] + 8001c02: 687b ldr r3, [r7, #4] + 8001c04: 681b ldr r3, [r3, #0] + 8001c06: 2101 movs r1, #1 + 8001c08: 438a bics r2, r1 + 8001c0a: 609a str r2, [r3, #8] + 8001c0c: 6b3b ldr r3, [r7, #48] ; 0x30 + 8001c0e: 62bb str r3, [r7, #40] ; 0x28 + __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); + 8001c10: 6abb ldr r3, [r7, #40] ; 0x28 + 8001c12: f383 8810 msr PRIMASK, r3 +} + 8001c16: 46c0 nop ; (mov r8, r8) + + /* In case of reception waiting for IDLE event, disable also the IDLE IE interrupt source */ + if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE) + 8001c18: 687b ldr r3, [r7, #4] + 8001c1a: 6e1b ldr r3, [r3, #96] ; 0x60 + 8001c1c: 2b01 cmp r3, #1 + 8001c1e: d118 bne.n 8001c52 + __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory"); + 8001c20: f3ef 8310 mrs r3, PRIMASK + 8001c24: 60bb str r3, [r7, #8] + return(result); + 8001c26: 68bb ldr r3, [r7, #8] + { + ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE); + 8001c28: 62fb str r3, [r7, #44] ; 0x2c + 8001c2a: 2301 movs r3, #1 + 8001c2c: 60fb str r3, [r7, #12] + __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); + 8001c2e: 68fb ldr r3, [r7, #12] + 8001c30: f383 8810 msr PRIMASK, r3 +} + 8001c34: 46c0 nop ; (mov r8, r8) + 8001c36: 687b ldr r3, [r7, #4] + 8001c38: 681b ldr r3, [r3, #0] + 8001c3a: 681a ldr r2, [r3, #0] + 8001c3c: 687b ldr r3, [r7, #4] + 8001c3e: 681b ldr r3, [r3, #0] + 8001c40: 2110 movs r1, #16 + 8001c42: 438a bics r2, r1 + 8001c44: 601a str r2, [r3, #0] + 8001c46: 6afb ldr r3, [r7, #44] ; 0x2c + 8001c48: 613b str r3, [r7, #16] + __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); + 8001c4a: 693b ldr r3, [r7, #16] + 8001c4c: f383 8810 msr PRIMASK, r3 +} + 8001c50: 46c0 nop ; (mov r8, r8) + } + + /* At end of Rx process, restore huart->RxState to Ready */ + huart->RxState = HAL_UART_STATE_READY; + 8001c52: 687b ldr r3, [r7, #4] + 8001c54: 2280 movs r2, #128 ; 0x80 + 8001c56: 2120 movs r1, #32 + 8001c58: 5099 str r1, [r3, r2] + huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; + 8001c5a: 687b ldr r3, [r7, #4] + 8001c5c: 2200 movs r2, #0 + 8001c5e: 661a str r2, [r3, #96] ; 0x60 + + /* Reset RxIsr function pointer */ + huart->RxISR = NULL; + 8001c60: 687b ldr r3, [r7, #4] + 8001c62: 2200 movs r2, #0 + 8001c64: 669a str r2, [r3, #104] ; 0x68 +} + 8001c66: 46c0 nop ; (mov r8, r8) + 8001c68: 46bd mov sp, r7 + 8001c6a: b00e add sp, #56 ; 0x38 + 8001c6c: bd80 pop {r7, pc} + 8001c6e: 46c0 nop ; (mov r8, r8) + 8001c70: fffffedf .word 0xfffffedf + +08001c74 : + 8001c74: 0003 movs r3, r0 + 8001c76: 1882 adds r2, r0, r2 + 8001c78: 4293 cmp r3, r2 + 8001c7a: d100 bne.n 8001c7e + 8001c7c: 4770 bx lr + 8001c7e: 7019 strb r1, [r3, #0] + 8001c80: 3301 adds r3, #1 + 8001c82: e7f9 b.n 8001c78 + +08001c84 <__libc_init_array>: + 8001c84: b570 push {r4, r5, r6, lr} + 8001c86: 2600 movs r6, #0 + 8001c88: 4c0c ldr r4, [pc, #48] ; (8001cbc <__libc_init_array+0x38>) + 8001c8a: 4d0d ldr r5, [pc, #52] ; (8001cc0 <__libc_init_array+0x3c>) + 8001c8c: 1b64 subs r4, r4, r5 + 8001c8e: 10a4 asrs r4, r4, #2 + 8001c90: 42a6 cmp r6, r4 + 8001c92: d109 bne.n 8001ca8 <__libc_init_array+0x24> + 8001c94: 2600 movs r6, #0 + 8001c96: f000 f819 bl 8001ccc <_init> + 8001c9a: 4c0a ldr r4, [pc, #40] ; (8001cc4 <__libc_init_array+0x40>) + 8001c9c: 4d0a ldr r5, [pc, #40] ; (8001cc8 <__libc_init_array+0x44>) + 8001c9e: 1b64 subs r4, r4, r5 + 8001ca0: 10a4 asrs r4, r4, #2 + 8001ca2: 42a6 cmp r6, r4 + 8001ca4: d105 bne.n 8001cb2 <__libc_init_array+0x2e> + 8001ca6: bd70 pop {r4, r5, r6, pc} + 8001ca8: 00b3 lsls r3, r6, #2 + 8001caa: 58eb ldr r3, [r5, r3] + 8001cac: 4798 blx r3 + 8001cae: 3601 adds r6, #1 + 8001cb0: e7ee b.n 8001c90 <__libc_init_array+0xc> + 8001cb2: 00b3 lsls r3, r6, #2 + 8001cb4: 58eb ldr r3, [r5, r3] + 8001cb6: 4798 blx r3 + 8001cb8: 3601 adds r6, #1 + 8001cba: e7f2 b.n 8001ca2 <__libc_init_array+0x1e> + 8001cbc: 08001d1c .word 0x08001d1c + 8001cc0: 08001d1c .word 0x08001d1c + 8001cc4: 08001d20 .word 0x08001d20 + 8001cc8: 08001d1c .word 0x08001d1c + +08001ccc <_init>: + 8001ccc: b5f8 push {r3, r4, r5, r6, r7, lr} + 8001cce: 46c0 nop ; (mov r8, r8) + 8001cd0: bcf8 pop {r3, r4, r5, r6, r7} + 8001cd2: bc08 pop {r3} + 8001cd4: 469e mov lr, r3 + 8001cd6: 4770 bx lr + +08001cd8 <_fini>: + 8001cd8: b5f8 push {r3, r4, r5, r6, r7, lr} + 8001cda: 46c0 nop ; (mov r8, r8) + 8001cdc: bcf8 pop {r3, r4, r5, r6, r7} + 8001cde: bc08 pop {r3} + 8001ce0: 469e mov lr, r3 + 8001ce2: 4770 bx lr diff --git a/Software/reflow_oven/Debug/reflow_oven.map b/Software/reflow_oven/Debug/reflow_oven.map new file mode 100644 index 0000000..1dc67c0 --- /dev/null +++ b/Software/reflow_oven/Debug/reflow_oven.map @@ -0,0 +1,3772 @@ +Archive member included to satisfy reference by file (symbol) + +/opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-exit.o) + /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/crt0.o (exit) +/opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-findfp.o) + /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-exit.o) (__stdio_exit_handler) +/opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-fwalk.o) + /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-findfp.o) (_fwalk_sglue) +/opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-stdio.o) + /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-findfp.o) (__sread) +/opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-memset.o) + /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/crt0.o (memset) +/opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-closer.o) + /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-stdio.o) (_close_r) +/opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-reent.o) + /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-closer.o) (errno) +/opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-impure.o) + /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-reent.o) (_impure_ptr) +/opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-lseekr.o) + /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-stdio.o) (_lseek_r) +/opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-readr.o) + /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-stdio.o) (_read_r) +/opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-writer.o) + /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-stdio.o) (_write_r) +/opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-errno.o) + ./Core/Src/syscalls.o (__errno) +/opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-init.o) + /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/crt0.o (__libc_init_array) +/opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-lock.o) + /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-findfp.o) (__retarget_lock_init_recursive) +/opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-freer.o) + /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-reent.o) (_free_r) +/opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-mallocr.o) + /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-findfp.o) (_malloc_r) +/opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-mlock.o) + /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-freer.o) (__malloc_lock) +/opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-fflush.o) + /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-findfp.o) (_fflush_r) +/opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-sbrkr.o) + /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-mallocr.o) (_sbrk_r) +/opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/libgcc.a(_udivsi3.o) + ./Core/Src/system_stm32f0xx.o (__aeabi_uidiv) +/opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/libgcc.a(_dvmd_tls.o) + /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/libgcc.a(_udivsi3.o) (__aeabi_idiv0) + +Discarded input sections + + .text 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/crti.o + .data 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/crti.o + .bss 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/crti.o + .data 0x0000000000000000 0x4 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/crtbegin.o + .rodata 0x0000000000000000 0x24 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/crtbegin.o + .text 0x0000000000000000 0x80 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/crt0.o + .data 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/crt0.o + .bss 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/crt0.o + .ARM.extab 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/crt0.o + .ARM.exidx 0x0000000000000000 0x10 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/crt0.o + .debug_line 0x0000000000000000 0x7b /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/crt0.o + .debug_line_str + 0x0000000000000000 0xd9 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/crt0.o + .debug_info 0x0000000000000000 0x25 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/crt0.o + .debug_abbrev 0x0000000000000000 0x14 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/crt0.o + .debug_aranges + 0x0000000000000000 0x20 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/crt0.o + .debug_str 0x0000000000000000 0xde /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/crt0.o + .ARM.attributes + 0x0000000000000000 0x1b /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/crt0.o + .group 0x0000000000000000 0xc ./Core/Src/gpio.o + .group 0x0000000000000000 0xc ./Core/Src/gpio.o + .group 0x0000000000000000 0xc ./Core/Src/gpio.o + .group 0x0000000000000000 0xc ./Core/Src/gpio.o + .group 0x0000000000000000 0xc ./Core/Src/gpio.o + .group 0x0000000000000000 0xc ./Core/Src/gpio.o + .group 0x0000000000000000 0xc ./Core/Src/gpio.o + .group 0x0000000000000000 0xc ./Core/Src/gpio.o + .group 0x0000000000000000 0xc ./Core/Src/gpio.o + .group 0x0000000000000000 0xc ./Core/Src/gpio.o + .group 0x0000000000000000 0xc ./Core/Src/gpio.o + .group 0x0000000000000000 0xc ./Core/Src/gpio.o + .group 0x0000000000000000 0xc ./Core/Src/gpio.o + .group 0x0000000000000000 0xc ./Core/Src/gpio.o + .group 0x0000000000000000 0xc ./Core/Src/gpio.o + .group 0x0000000000000000 0xc ./Core/Src/gpio.o + .group 0x0000000000000000 0xc ./Core/Src/gpio.o + .group 0x0000000000000000 0xc ./Core/Src/gpio.o + .group 0x0000000000000000 0xc ./Core/Src/gpio.o + .group 0x0000000000000000 0xc ./Core/Src/gpio.o + .group 0x0000000000000000 0xc ./Core/Src/gpio.o + .group 0x0000000000000000 0xc ./Core/Src/gpio.o + .group 0x0000000000000000 0xc ./Core/Src/gpio.o + .group 0x0000000000000000 0xc ./Core/Src/gpio.o + .group 0x0000000000000000 0xc ./Core/Src/gpio.o + .group 0x0000000000000000 0xc ./Core/Src/gpio.o + .group 0x0000000000000000 0xc ./Core/Src/gpio.o + .group 0x0000000000000000 0xc ./Core/Src/gpio.o + .group 0x0000000000000000 0xc ./Core/Src/gpio.o + .group 0x0000000000000000 0xc ./Core/Src/gpio.o + .group 0x0000000000000000 0xc ./Core/Src/gpio.o + .group 0x0000000000000000 0xc ./Core/Src/gpio.o + .group 0x0000000000000000 0xc ./Core/Src/gpio.o + .group 0x0000000000000000 0xc ./Core/Src/gpio.o + .group 0x0000000000000000 0xc ./Core/Src/gpio.o + .group 0x0000000000000000 0xc ./Core/Src/gpio.o + .group 0x0000000000000000 0xc ./Core/Src/gpio.o + .group 0x0000000000000000 0xc ./Core/Src/gpio.o + .group 0x0000000000000000 0xc ./Core/Src/gpio.o + .text 0x0000000000000000 0x0 ./Core/Src/gpio.o + .data 0x0000000000000000 0x0 ./Core/Src/gpio.o + .bss 0x0000000000000000 0x0 ./Core/Src/gpio.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 + .debug_macro 0x0000000000000000 0xa7e ./Core/Src/main.o + .debug_macro 0x0000000000000000 0x12d ./Core/Src/main.o + .debug_macro 0x0000000000000000 0x2e ./Core/Src/main.o + .debug_macro 0x0000000000000000 0x22 ./Core/Src/main.o + .debug_macro 0x0000000000000000 0x22 ./Core/Src/main.o + .debug_macro 0x0000000000000000 0x8e ./Core/Src/main.o + .debug_macro 0x0000000000000000 0x51 ./Core/Src/main.o + .debug_macro 0x0000000000000000 0x103 ./Core/Src/main.o + .debug_macro 0x0000000000000000 0x6a ./Core/Src/main.o + .debug_macro 0x0000000000000000 0x1df ./Core/Src/main.o + .debug_macro 0x0000000000000000 0x1c ./Core/Src/main.o + .debug_macro 0x0000000000000000 0x22 ./Core/Src/main.o + .debug_macro 0x0000000000000000 0xaf ./Core/Src/main.o + .debug_macro 0x0000000000000000 0x391 ./Core/Src/main.o + .debug_macro 0x0000000000000000 0x754b ./Core/Src/main.o + .debug_macro 0x0000000000000000 0x66 ./Core/Src/main.o + .debug_macro 0x0000000000000000 0x34be ./Core/Src/main.o + .debug_macro 0x0000000000000000 0x174 ./Core/Src/main.o + .debug_macro 0x0000000000000000 0x55 ./Core/Src/main.o + .debug_macro 0x0000000000000000 0x924 ./Core/Src/main.o + .debug_macro 0x0000000000000000 0xe5 ./Core/Src/main.o + .debug_macro 0x0000000000000000 0x1ae ./Core/Src/main.o + .debug_macro 0x0000000000000000 0xce ./Core/Src/main.o + .debug_macro 0x0000000000000000 0x199 ./Core/Src/main.o + .debug_macro 0x0000000000000000 0x1ed ./Core/Src/main.o + .debug_macro 0x0000000000000000 0x34 ./Core/Src/main.o + .debug_macro 0x0000000000000000 0x43 ./Core/Src/main.o + .debug_macro 0x0000000000000000 0x28 ./Core/Src/main.o + .debug_macro 0x0000000000000000 0xb0 ./Core/Src/main.o + .debug_macro 0x0000000000000000 0x15a ./Core/Src/main.o + .debug_macro 0x0000000000000000 0x22c ./Core/Src/main.o + .debug_macro 0x0000000000000000 0x61 ./Core/Src/main.o + .debug_macro 0x0000000000000000 0xa5 ./Core/Src/main.o + .debug_macro 0x0000000000000000 0x4c ./Core/Src/main.o + .debug_macro 0x0000000000000000 0x112 ./Core/Src/main.o + .debug_macro 0x0000000000000000 0x5ba ./Core/Src/main.o + .debug_macro 0x0000000000000000 0x3e ./Core/Src/main.o + .debug_macro 0x0000000000000000 0x106 ./Core/Src/main.o + .debug_macro 0x0000000000000000 0x34 ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_hal_msp.o + .text 0x0000000000000000 0x0 ./Core/Src/stm32f0xx_hal_msp.o + .data 0x0000000000000000 0x0 ./Core/Src/stm32f0xx_hal_msp.o + .bss 0x0000000000000000 0x0 ./Core/Src/stm32f0xx_hal_msp.o + .debug_macro 0x0000000000000000 0xa7e ./Core/Src/stm32f0xx_hal_msp.o + .debug_macro 0x0000000000000000 0x12d ./Core/Src/stm32f0xx_hal_msp.o + .debug_macro 0x0000000000000000 0x2e ./Core/Src/stm32f0xx_hal_msp.o + .debug_macro 0x0000000000000000 0x22 ./Core/Src/stm32f0xx_hal_msp.o + .debug_macro 0x0000000000000000 0x22 ./Core/Src/stm32f0xx_hal_msp.o + .debug_macro 0x0000000000000000 0x8e ./Core/Src/stm32f0xx_hal_msp.o + .debug_macro 0x0000000000000000 0x51 ./Core/Src/stm32f0xx_hal_msp.o + .debug_macro 0x0000000000000000 0x103 ./Core/Src/stm32f0xx_hal_msp.o + .debug_macro 0x0000000000000000 0x6a ./Core/Src/stm32f0xx_hal_msp.o + .debug_macro 0x0000000000000000 0x1df ./Core/Src/stm32f0xx_hal_msp.o + .debug_macro 0x0000000000000000 0x1c ./Core/Src/stm32f0xx_hal_msp.o + .debug_macro 0x0000000000000000 0x22 ./Core/Src/stm32f0xx_hal_msp.o + .debug_macro 0x0000000000000000 0xaf ./Core/Src/stm32f0xx_hal_msp.o + .debug_macro 0x0000000000000000 0x391 ./Core/Src/stm32f0xx_hal_msp.o + .debug_macro 0x0000000000000000 0x754b ./Core/Src/stm32f0xx_hal_msp.o + .debug_macro 0x0000000000000000 0x66 ./Core/Src/stm32f0xx_hal_msp.o + .debug_macro 0x0000000000000000 0x34be ./Core/Src/stm32f0xx_hal_msp.o + .debug_macro 0x0000000000000000 0x174 ./Core/Src/stm32f0xx_hal_msp.o + .debug_macro 0x0000000000000000 0x55 ./Core/Src/stm32f0xx_hal_msp.o + .debug_macro 0x0000000000000000 0x924 ./Core/Src/stm32f0xx_hal_msp.o + .debug_macro 0x0000000000000000 0xe5 ./Core/Src/stm32f0xx_hal_msp.o + .debug_macro 0x0000000000000000 0x1ae ./Core/Src/stm32f0xx_hal_msp.o + .debug_macro 0x0000000000000000 0xce ./Core/Src/stm32f0xx_hal_msp.o + .debug_macro 0x0000000000000000 0x199 ./Core/Src/stm32f0xx_hal_msp.o + .debug_macro 0x0000000000000000 0x1ed ./Core/Src/stm32f0xx_hal_msp.o + .debug_macro 0x0000000000000000 0x34 ./Core/Src/stm32f0xx_hal_msp.o + .debug_macro 0x0000000000000000 0x43 ./Core/Src/stm32f0xx_hal_msp.o + .debug_macro 0x0000000000000000 0x28 ./Core/Src/stm32f0xx_hal_msp.o + .debug_macro 0x0000000000000000 0xb0 ./Core/Src/stm32f0xx_hal_msp.o + .debug_macro 0x0000000000000000 0x15a ./Core/Src/stm32f0xx_hal_msp.o + .debug_macro 0x0000000000000000 0x22c ./Core/Src/stm32f0xx_hal_msp.o + .debug_macro 0x0000000000000000 0x61 ./Core/Src/stm32f0xx_hal_msp.o + .debug_macro 0x0000000000000000 0xa5 ./Core/Src/stm32f0xx_hal_msp.o + .debug_macro 0x0000000000000000 0x4c ./Core/Src/stm32f0xx_hal_msp.o + .debug_macro 0x0000000000000000 0x112 ./Core/Src/stm32f0xx_hal_msp.o + .debug_macro 0x0000000000000000 0x5ba ./Core/Src/stm32f0xx_hal_msp.o + .debug_macro 0x0000000000000000 0x3e ./Core/Src/stm32f0xx_hal_msp.o + .debug_macro 0x0000000000000000 0x106 ./Core/Src/stm32f0xx_hal_msp.o + .debug_macro 0x0000000000000000 0x34 ./Core/Src/stm32f0xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f0xx_it.o + .text 0x0000000000000000 0x0 ./Core/Src/stm32f0xx_it.o + .data 0x0000000000000000 0x0 ./Core/Src/stm32f0xx_it.o + .bss 0x0000000000000000 0x0 ./Core/Src/stm32f0xx_it.o + .debug_macro 0x0000000000000000 0xa7e ./Core/Src/stm32f0xx_it.o + .debug_macro 0x0000000000000000 0x12d ./Core/Src/stm32f0xx_it.o + .debug_macro 0x0000000000000000 0x2e ./Core/Src/stm32f0xx_it.o + .debug_macro 0x0000000000000000 0x22 ./Core/Src/stm32f0xx_it.o + .debug_macro 0x0000000000000000 0x22 ./Core/Src/stm32f0xx_it.o + .debug_macro 0x0000000000000000 0x8e ./Core/Src/stm32f0xx_it.o + .debug_macro 0x0000000000000000 0x51 ./Core/Src/stm32f0xx_it.o + .debug_macro 0x0000000000000000 0x103 ./Core/Src/stm32f0xx_it.o + .debug_macro 0x0000000000000000 0x6a ./Core/Src/stm32f0xx_it.o + .debug_macro 0x0000000000000000 0x1df ./Core/Src/stm32f0xx_it.o + .debug_macro 0x0000000000000000 0x1c ./Core/Src/stm32f0xx_it.o + .debug_macro 0x0000000000000000 0x22 ./Core/Src/stm32f0xx_it.o + .debug_macro 0x0000000000000000 0xaf ./Core/Src/stm32f0xx_it.o + .debug_macro 0x0000000000000000 0x391 ./Core/Src/stm32f0xx_it.o + .debug_macro 0x0000000000000000 0x754b ./Core/Src/stm32f0xx_it.o + .debug_macro 0x0000000000000000 0x66 ./Core/Src/stm32f0xx_it.o + .debug_macro 0x0000000000000000 0x34be ./Core/Src/stm32f0xx_it.o + .debug_macro 0x0000000000000000 0x174 ./Core/Src/stm32f0xx_it.o + .debug_macro 0x0000000000000000 0x55 ./Core/Src/stm32f0xx_it.o + .debug_macro 0x0000000000000000 0x924 ./Core/Src/stm32f0xx_it.o + .debug_macro 0x0000000000000000 0xe5 ./Core/Src/stm32f0xx_it.o + .debug_macro 0x0000000000000000 0x1ae ./Core/Src/stm32f0xx_it.o + .debug_macro 0x0000000000000000 0xce ./Core/Src/stm32f0xx_it.o + .debug_macro 0x0000000000000000 0x199 ./Core/Src/stm32f0xx_it.o + .debug_macro 0x0000000000000000 0x1ed ./Core/Src/stm32f0xx_it.o + .debug_macro 0x0000000000000000 0x34 ./Core/Src/stm32f0xx_it.o + .debug_macro 0x0000000000000000 0x43 ./Core/Src/stm32f0xx_it.o + .debug_macro 0x0000000000000000 0x28 ./Core/Src/stm32f0xx_it.o + .debug_macro 0x0000000000000000 0xb0 ./Core/Src/stm32f0xx_it.o + .debug_macro 0x0000000000000000 0x15a ./Core/Src/stm32f0xx_it.o + .debug_macro 0x0000000000000000 0x22c ./Core/Src/stm32f0xx_it.o + .debug_macro 0x0000000000000000 0x61 ./Core/Src/stm32f0xx_it.o + .debug_macro 0x0000000000000000 0xa5 ./Core/Src/stm32f0xx_it.o + .debug_macro 0x0000000000000000 0x4c ./Core/Src/stm32f0xx_it.o + .debug_macro 0x0000000000000000 0x112 ./Core/Src/stm32f0xx_it.o + .debug_macro 0x0000000000000000 0x5ba ./Core/Src/stm32f0xx_it.o + .debug_macro 0x0000000000000000 0x3e ./Core/Src/stm32f0xx_it.o + .debug_macro 0x0000000000000000 0x106 ./Core/Src/stm32f0xx_it.o + .debug_macro 0x0000000000000000 0x34 ./Core/Src/stm32f0xx_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 0xa ./Core/Src/syscalls.o + .text._getpid 0x0000000000000000 0xc ./Core/Src/syscalls.o + .text._kill 0x0000000000000000 0x20 ./Core/Src/syscalls.o + .text._exit 0x0000000000000000 0x18 ./Core/Src/syscalls.o + .text._read 0x0000000000000000 0x3a ./Core/Src/syscalls.o + .text._write 0x0000000000000000 0x38 ./Core/Src/syscalls.o + .text._close 0x0000000000000000 0x14 ./Core/Src/syscalls.o + .text._fstat 0x0000000000000000 0x1c ./Core/Src/syscalls.o + .text._isatty 0x0000000000000000 0x12 ./Core/Src/syscalls.o + .text._lseek 0x0000000000000000 0x16 ./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 0x14 ./Core/Src/syscalls.o + .text._stat 0x0000000000000000 0x1c ./Core/Src/syscalls.o + .text._link 0x0000000000000000 0x20 ./Core/Src/syscalls.o + .text._fork 0x0000000000000000 0x18 ./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 0xa7e ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x22 ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x5b ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x24 ./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 0x7dd ./Core/Src/syscalls.o + .debug_str 0x0000000000000000 0x9799 ./Core/Src/syscalls.o + .comment 0x0000000000000000 0x44 ./Core/Src/syscalls.o + .debug_frame 0x0000000000000000 0x244 ./Core/Src/syscalls.o + .ARM.attributes + 0x0000000000000000 0x2c ./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 0xa7e ./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 0x24 ./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 0x4ae ./Core/Src/sysmem.o + .debug_str 0x0000000000000000 0x5f50 ./Core/Src/sysmem.o + .comment 0x0000000000000000 0x44 ./Core/Src/sysmem.o + .debug_frame 0x0000000000000000 0x30 ./Core/Src/sysmem.o + .ARM.attributes + 0x0000000000000000 0x2c ./Core/Src/sysmem.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f0xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f0xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f0xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f0xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f0xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f0xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f0xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f0xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f0xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f0xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f0xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f0xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f0xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f0xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f0xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f0xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f0xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f0xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f0xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f0xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f0xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f0xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f0xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f0xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f0xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f0xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f0xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f0xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f0xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f0xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f0xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f0xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f0xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f0xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f0xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f0xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f0xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f0xx.o + .text 0x0000000000000000 0x0 ./Core/Src/system_stm32f0xx.o + .data 0x0000000000000000 0x0 ./Core/Src/system_stm32f0xx.o + .bss 0x0000000000000000 0x0 ./Core/Src/system_stm32f0xx.o + .text.SystemCoreClockUpdate + 0x0000000000000000 0xec ./Core/Src/system_stm32f0xx.o + .debug_macro 0x0000000000000000 0xa7e ./Core/Src/system_stm32f0xx.o + .debug_macro 0x0000000000000000 0x2e ./Core/Src/system_stm32f0xx.o + .debug_macro 0x0000000000000000 0x22 ./Core/Src/system_stm32f0xx.o + .debug_macro 0x0000000000000000 0x22 ./Core/Src/system_stm32f0xx.o + .debug_macro 0x0000000000000000 0x8e ./Core/Src/system_stm32f0xx.o + .debug_macro 0x0000000000000000 0x51 ./Core/Src/system_stm32f0xx.o + .debug_macro 0x0000000000000000 0x103 ./Core/Src/system_stm32f0xx.o + .debug_macro 0x0000000000000000 0x6a ./Core/Src/system_stm32f0xx.o + .debug_macro 0x0000000000000000 0x1df ./Core/Src/system_stm32f0xx.o + .debug_macro 0x0000000000000000 0x1c ./Core/Src/system_stm32f0xx.o + .debug_macro 0x0000000000000000 0x22 ./Core/Src/system_stm32f0xx.o + .debug_macro 0x0000000000000000 0xaf ./Core/Src/system_stm32f0xx.o + .debug_macro 0x0000000000000000 0x391 ./Core/Src/system_stm32f0xx.o + .debug_macro 0x0000000000000000 0x754b ./Core/Src/system_stm32f0xx.o + .debug_macro 0x0000000000000000 0x66 ./Core/Src/system_stm32f0xx.o + .debug_macro 0x0000000000000000 0x12d ./Core/Src/system_stm32f0xx.o + .debug_macro 0x0000000000000000 0x34be ./Core/Src/system_stm32f0xx.o + .debug_macro 0x0000000000000000 0x174 ./Core/Src/system_stm32f0xx.o + .debug_macro 0x0000000000000000 0x55 ./Core/Src/system_stm32f0xx.o + .debug_macro 0x0000000000000000 0x924 ./Core/Src/system_stm32f0xx.o + .debug_macro 0x0000000000000000 0xe5 ./Core/Src/system_stm32f0xx.o + .debug_macro 0x0000000000000000 0x1ae ./Core/Src/system_stm32f0xx.o + .debug_macro 0x0000000000000000 0xce ./Core/Src/system_stm32f0xx.o + .debug_macro 0x0000000000000000 0x199 ./Core/Src/system_stm32f0xx.o + .debug_macro 0x0000000000000000 0x1ed ./Core/Src/system_stm32f0xx.o + .debug_macro 0x0000000000000000 0x34 ./Core/Src/system_stm32f0xx.o + .debug_macro 0x0000000000000000 0x43 ./Core/Src/system_stm32f0xx.o + .debug_macro 0x0000000000000000 0x28 ./Core/Src/system_stm32f0xx.o + .debug_macro 0x0000000000000000 0xb0 ./Core/Src/system_stm32f0xx.o + .debug_macro 0x0000000000000000 0x15a ./Core/Src/system_stm32f0xx.o + .debug_macro 0x0000000000000000 0x22c ./Core/Src/system_stm32f0xx.o + .debug_macro 0x0000000000000000 0x61 ./Core/Src/system_stm32f0xx.o + .debug_macro 0x0000000000000000 0xa5 ./Core/Src/system_stm32f0xx.o + .debug_macro 0x0000000000000000 0x4c ./Core/Src/system_stm32f0xx.o + .debug_macro 0x0000000000000000 0x112 ./Core/Src/system_stm32f0xx.o + .debug_macro 0x0000000000000000 0x5ba ./Core/Src/system_stm32f0xx.o + .debug_macro 0x0000000000000000 0x3e ./Core/Src/system_stm32f0xx.o + .debug_macro 0x0000000000000000 0x106 ./Core/Src/system_stm32f0xx.o + .group 0x0000000000000000 0xc ./Core/Src/usart.o + .group 0x0000000000000000 0xc ./Core/Src/usart.o + .group 0x0000000000000000 0xc ./Core/Src/usart.o + .group 0x0000000000000000 0xc ./Core/Src/usart.o + .group 0x0000000000000000 0xc ./Core/Src/usart.o + .group 0x0000000000000000 0xc ./Core/Src/usart.o + .group 0x0000000000000000 0xc ./Core/Src/usart.o + .group 0x0000000000000000 0xc ./Core/Src/usart.o + .group 0x0000000000000000 0xc ./Core/Src/usart.o + .group 0x0000000000000000 0xc ./Core/Src/usart.o + .group 0x0000000000000000 0xc ./Core/Src/usart.o + .group 0x0000000000000000 0xc ./Core/Src/usart.o + .group 0x0000000000000000 0xc ./Core/Src/usart.o + .group 0x0000000000000000 0xc ./Core/Src/usart.o + .group 0x0000000000000000 0xc ./Core/Src/usart.o + .group 0x0000000000000000 0xc ./Core/Src/usart.o + .group 0x0000000000000000 0xc ./Core/Src/usart.o + .group 0x0000000000000000 0xc ./Core/Src/usart.o + .group 0x0000000000000000 0xc ./Core/Src/usart.o + .group 0x0000000000000000 0xc ./Core/Src/usart.o + .group 0x0000000000000000 0xc ./Core/Src/usart.o + .group 0x0000000000000000 0xc ./Core/Src/usart.o + .group 0x0000000000000000 0xc ./Core/Src/usart.o + .group 0x0000000000000000 0xc ./Core/Src/usart.o + .group 0x0000000000000000 0xc ./Core/Src/usart.o + .group 0x0000000000000000 0xc ./Core/Src/usart.o + .group 0x0000000000000000 0xc ./Core/Src/usart.o + .group 0x0000000000000000 0xc ./Core/Src/usart.o + .group 0x0000000000000000 0xc ./Core/Src/usart.o + .group 0x0000000000000000 0xc ./Core/Src/usart.o + .group 0x0000000000000000 0xc ./Core/Src/usart.o + .group 0x0000000000000000 0xc ./Core/Src/usart.o + .group 0x0000000000000000 0xc ./Core/Src/usart.o + .group 0x0000000000000000 0xc ./Core/Src/usart.o + .group 0x0000000000000000 0xc ./Core/Src/usart.o + .group 0x0000000000000000 0xc ./Core/Src/usart.o + .group 0x0000000000000000 0xc ./Core/Src/usart.o + .group 0x0000000000000000 0xc ./Core/Src/usart.o + .group 0x0000000000000000 0xc ./Core/Src/usart.o + .text 0x0000000000000000 0x0 ./Core/Src/usart.o + .data 0x0000000000000000 0x0 ./Core/Src/usart.o + .bss 0x0000000000000000 0x0 ./Core/Src/usart.o + .text.HAL_UART_MspDeInit + 0x0000000000000000 0x44 ./Core/Src/usart.o + .debug_macro 0x0000000000000000 0xa7e ./Core/Src/usart.o + .debug_macro 0x0000000000000000 0x12d ./Core/Src/usart.o + .debug_macro 0x0000000000000000 0x2e ./Core/Src/usart.o + .debug_macro 0x0000000000000000 0x22 ./Core/Src/usart.o + .debug_macro 0x0000000000000000 0x22 ./Core/Src/usart.o + .debug_macro 0x0000000000000000 0x8e ./Core/Src/usart.o + .debug_macro 0x0000000000000000 0x51 ./Core/Src/usart.o + .debug_macro 0x0000000000000000 0x103 ./Core/Src/usart.o + .debug_macro 0x0000000000000000 0x6a ./Core/Src/usart.o + .debug_macro 0x0000000000000000 0x1df ./Core/Src/usart.o + .debug_macro 0x0000000000000000 0x1c ./Core/Src/usart.o + .debug_macro 0x0000000000000000 0x22 ./Core/Src/usart.o + .debug_macro 0x0000000000000000 0xaf ./Core/Src/usart.o + .debug_macro 0x0000000000000000 0x391 ./Core/Src/usart.o + .debug_macro 0x0000000000000000 0x754b ./Core/Src/usart.o + .debug_macro 0x0000000000000000 0x66 ./Core/Src/usart.o + .debug_macro 0x0000000000000000 0x34be ./Core/Src/usart.o + .debug_macro 0x0000000000000000 0x174 ./Core/Src/usart.o + .debug_macro 0x0000000000000000 0x55 ./Core/Src/usart.o + .debug_macro 0x0000000000000000 0x924 ./Core/Src/usart.o + .debug_macro 0x0000000000000000 0xe5 ./Core/Src/usart.o + .debug_macro 0x0000000000000000 0x1ae ./Core/Src/usart.o + .debug_macro 0x0000000000000000 0xce ./Core/Src/usart.o + .debug_macro 0x0000000000000000 0x199 ./Core/Src/usart.o + .debug_macro 0x0000000000000000 0x1ed ./Core/Src/usart.o + .debug_macro 0x0000000000000000 0x34 ./Core/Src/usart.o + .debug_macro 0x0000000000000000 0x43 ./Core/Src/usart.o + .debug_macro 0x0000000000000000 0x28 ./Core/Src/usart.o + .debug_macro 0x0000000000000000 0xb0 ./Core/Src/usart.o + .debug_macro 0x0000000000000000 0x15a ./Core/Src/usart.o + .debug_macro 0x0000000000000000 0x22c ./Core/Src/usart.o + .debug_macro 0x0000000000000000 0x61 ./Core/Src/usart.o + .debug_macro 0x0000000000000000 0xa5 ./Core/Src/usart.o + .debug_macro 0x0000000000000000 0x4c ./Core/Src/usart.o + .debug_macro 0x0000000000000000 0x112 ./Core/Src/usart.o + .debug_macro 0x0000000000000000 0x5ba ./Core/Src/usart.o + .debug_macro 0x0000000000000000 0x3e ./Core/Src/usart.o + .debug_macro 0x0000000000000000 0x106 ./Core/Src/usart.o + .debug_macro 0x0000000000000000 0x34 ./Core/Src/usart.o + .text 0x0000000000000000 0x14 ./Core/Startup/startup_stm32f031k6tx.o + .data 0x0000000000000000 0x0 ./Core/Startup/startup_stm32f031k6tx.o + .bss 0x0000000000000000 0x0 ./Core/Startup/startup_stm32f031k6tx.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/ked/ked.o + .text 0x0000000000000000 0x0 ./Core/reflow_oven_src/ked/ked.o + .data 0x0000000000000000 0x0 ./Core/reflow_oven_src/ked/ked.o + .bss 0x0000000000000000 0x0 ./Core/reflow_oven_src/ked/ked.o + .debug_info 0x0000000000000000 0x22 ./Core/reflow_oven_src/ked/ked.o + .debug_abbrev 0x0000000000000000 0x12 ./Core/reflow_oven_src/ked/ked.o + .debug_aranges + 0x0000000000000000 0x18 ./Core/reflow_oven_src/ked/ked.o + .debug_macro 0x0000000000000000 0x11 ./Core/reflow_oven_src/ked/ked.o + .debug_macro 0x0000000000000000 0xa7e ./Core/reflow_oven_src/ked/ked.o + .debug_line 0x0000000000000000 0x42 ./Core/reflow_oven_src/ked/ked.o + .debug_str 0x0000000000000000 0x2cd7 ./Core/reflow_oven_src/ked/ked.o + .comment 0x0000000000000000 0x44 ./Core/reflow_oven_src/ked/ked.o + .ARM.attributes + 0x0000000000000000 0x2c ./Core/reflow_oven_src/ked/ked.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.o + .text 0x0000000000000000 0x0 ./Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.o + .data 0x0000000000000000 0x0 ./Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.o + .bss 0x0000000000000000 0x0 ./Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.o + .debug_macro 0x0000000000000000 0xa7e ./Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.o + .debug_macro 0x0000000000000000 0x22 ./Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.o + .debug_macro 0x0000000000000000 0x8e ./Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.o + .debug_macro 0x0000000000000000 0x51 ./Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.o + .debug_macro 0x0000000000000000 0x103 ./Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.o + .debug_macro 0x0000000000000000 0x6a ./Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.o + .debug_macro 0x0000000000000000 0x1df ./Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/reflow_main.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/reflow_main.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/reflow_main.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/reflow_main.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/reflow_main.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/reflow_main.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/reflow_main.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/reflow_main.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/reflow_main.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/reflow_main.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/reflow_main.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/reflow_main.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/reflow_main.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/reflow_main.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/reflow_main.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/reflow_main.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/reflow_main.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/reflow_main.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/reflow_main.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/reflow_main.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/reflow_main.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/reflow_main.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/reflow_main.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/reflow_main.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/reflow_main.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/reflow_main.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/reflow_main.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/reflow_main.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/reflow_main.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/reflow_main.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/reflow_main.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/reflow_main.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/reflow_main.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/reflow_main.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/reflow_main.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/reflow_main.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/reflow_main.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/reflow_main.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/reflow_main.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/reflow_main.o + .group 0x0000000000000000 0xc ./Core/reflow_oven_src/reflow_main.o + .text 0x0000000000000000 0x0 ./Core/reflow_oven_src/reflow_main.o + .data 0x0000000000000000 0x0 ./Core/reflow_oven_src/reflow_main.o + .bss 0x0000000000000000 0x0 ./Core/reflow_oven_src/reflow_main.o + .debug_macro 0x0000000000000000 0xa7e ./Core/reflow_oven_src/reflow_main.o + .debug_macro 0x0000000000000000 0x10 ./Core/reflow_oven_src/reflow_main.o + .debug_macro 0x0000000000000000 0x22 ./Core/reflow_oven_src/reflow_main.o + .debug_macro 0x0000000000000000 0x8e ./Core/reflow_oven_src/reflow_main.o + .debug_macro 0x0000000000000000 0x51 ./Core/reflow_oven_src/reflow_main.o + .debug_macro 0x0000000000000000 0x103 ./Core/reflow_oven_src/reflow_main.o + .debug_macro 0x0000000000000000 0x6a ./Core/reflow_oven_src/reflow_main.o + .debug_macro 0x0000000000000000 0x1df ./Core/reflow_oven_src/reflow_main.o + .debug_macro 0x0000000000000000 0x10 ./Core/reflow_oven_src/reflow_main.o + .debug_macro 0x0000000000000000 0x12d ./Core/reflow_oven_src/reflow_main.o + .debug_macro 0x0000000000000000 0x2e ./Core/reflow_oven_src/reflow_main.o + .debug_macro 0x0000000000000000 0x22 ./Core/reflow_oven_src/reflow_main.o + .debug_macro 0x0000000000000000 0x1c ./Core/reflow_oven_src/reflow_main.o + .debug_macro 0x0000000000000000 0x22 ./Core/reflow_oven_src/reflow_main.o + .debug_macro 0x0000000000000000 0xaf ./Core/reflow_oven_src/reflow_main.o + .debug_macro 0x0000000000000000 0x391 ./Core/reflow_oven_src/reflow_main.o + .debug_macro 0x0000000000000000 0x754b ./Core/reflow_oven_src/reflow_main.o + .debug_macro 0x0000000000000000 0x66 ./Core/reflow_oven_src/reflow_main.o + .debug_macro 0x0000000000000000 0x34be ./Core/reflow_oven_src/reflow_main.o + .debug_macro 0x0000000000000000 0x174 ./Core/reflow_oven_src/reflow_main.o + .debug_macro 0x0000000000000000 0x55 ./Core/reflow_oven_src/reflow_main.o + .debug_macro 0x0000000000000000 0x924 ./Core/reflow_oven_src/reflow_main.o + .debug_macro 0x0000000000000000 0xe5 ./Core/reflow_oven_src/reflow_main.o + .debug_macro 0x0000000000000000 0x1ae ./Core/reflow_oven_src/reflow_main.o + .debug_macro 0x0000000000000000 0xce ./Core/reflow_oven_src/reflow_main.o + .debug_macro 0x0000000000000000 0x199 ./Core/reflow_oven_src/reflow_main.o + .debug_macro 0x0000000000000000 0x1ed ./Core/reflow_oven_src/reflow_main.o + .debug_macro 0x0000000000000000 0x34 ./Core/reflow_oven_src/reflow_main.o + .debug_macro 0x0000000000000000 0x43 ./Core/reflow_oven_src/reflow_main.o + .debug_macro 0x0000000000000000 0x28 ./Core/reflow_oven_src/reflow_main.o + .debug_macro 0x0000000000000000 0xb0 ./Core/reflow_oven_src/reflow_main.o + .debug_macro 0x0000000000000000 0x15a ./Core/reflow_oven_src/reflow_main.o + .debug_macro 0x0000000000000000 0x22c ./Core/reflow_oven_src/reflow_main.o + .debug_macro 0x0000000000000000 0x61 ./Core/reflow_oven_src/reflow_main.o + .debug_macro 0x0000000000000000 0xa5 ./Core/reflow_oven_src/reflow_main.o + .debug_macro 0x0000000000000000 0x4c ./Core/reflow_oven_src/reflow_main.o + .debug_macro 0x0000000000000000 0x112 ./Core/reflow_oven_src/reflow_main.o + .debug_macro 0x0000000000000000 0x5ba ./Core/reflow_oven_src/reflow_main.o + .debug_macro 0x0000000000000000 0x3e ./Core/reflow_oven_src/reflow_main.o + .debug_macro 0x0000000000000000 0x106 ./Core/reflow_oven_src/reflow_main.o + .debug_macro 0x0000000000000000 0x34 ./Core/reflow_oven_src/reflow_main.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .text.HAL_DeInit + 0x0000000000000000 0x40 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .text.HAL_MspInit + 0x0000000000000000 0xa ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .text.HAL_MspDeInit + 0x0000000000000000 0xa ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .text.HAL_GetTickPrio + 0x0000000000000000 0x14 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .text.HAL_SetTickFreq + 0x0000000000000000 0x6c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .text.HAL_GetTickFreq + 0x0000000000000000 0x14 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .text.HAL_Delay + 0x0000000000000000 0x48 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .text.HAL_SuspendTick + 0x0000000000000000 0x1c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .text.HAL_ResumeTick + 0x0000000000000000 0x1c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .text.HAL_GetHalVersion + 0x0000000000000000 0x10 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .text.HAL_GetREVID + 0x0000000000000000 0x14 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .text.HAL_GetDEVID + 0x0000000000000000 0x18 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .text.HAL_GetUIDw0 + 0x0000000000000000 0x14 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .text.HAL_GetUIDw1 + 0x0000000000000000 0x14 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .text.HAL_GetUIDw2 + 0x0000000000000000 0x14 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .text.HAL_DBGMCU_EnableDBGStopMode + 0x0000000000000000 0x1c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .text.HAL_DBGMCU_DisableDBGStopMode + 0x0000000000000000 0x1c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .text.HAL_DBGMCU_EnableDBGStandbyMode + 0x0000000000000000 0x1c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .text.HAL_DBGMCU_DisableDBGStandbyMode + 0x0000000000000000 0x1c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .debug_macro 0x0000000000000000 0xa7e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .debug_macro 0x0000000000000000 0x12d ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .debug_macro 0x0000000000000000 0xaf ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .debug_macro 0x0000000000000000 0x391 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .debug_macro 0x0000000000000000 0x754b ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .debug_macro 0x0000000000000000 0x66 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .debug_macro 0x0000000000000000 0x34be ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .debug_macro 0x0000000000000000 0x55 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .debug_macro 0x0000000000000000 0x924 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .debug_macro 0x0000000000000000 0xe5 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .debug_macro 0x0000000000000000 0x1ae ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .debug_macro 0x0000000000000000 0xce ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .debug_macro 0x0000000000000000 0x199 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .debug_macro 0x0000000000000000 0x1ed ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .debug_macro 0x0000000000000000 0x34 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .debug_macro 0x0000000000000000 0x43 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .debug_macro 0x0000000000000000 0x28 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .debug_macro 0x0000000000000000 0xb0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .debug_macro 0x0000000000000000 0x15a ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .debug_macro 0x0000000000000000 0x22c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .debug_macro 0x0000000000000000 0x61 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .debug_macro 0x0000000000000000 0x4c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .debug_macro 0x0000000000000000 0x112 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .debug_macro 0x0000000000000000 0x5ba ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .debug_macro 0x0000000000000000 0x3e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .debug_macro 0x0000000000000000 0x106 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .text.__NVIC_EnableIRQ + 0x0000000000000000 0x34 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .text.__NVIC_DisableIRQ + 0x0000000000000000 0x44 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .text.__NVIC_GetPendingIRQ + 0x0000000000000000 0x40 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .text.__NVIC_SetPendingIRQ + 0x0000000000000000 0x38 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .text.__NVIC_ClearPendingIRQ + 0x0000000000000000 0x38 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .text.__NVIC_GetPriority + 0x0000000000000000 0x7c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .text.__NVIC_SystemReset + 0x0000000000000000 0x24 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .text.HAL_NVIC_EnableIRQ + 0x0000000000000000 0x20 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .text.HAL_NVIC_DisableIRQ + 0x0000000000000000 0x20 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .text.HAL_NVIC_SystemReset + 0x0000000000000000 0x8 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .text.HAL_NVIC_GetPriority + 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .text.HAL_NVIC_SetPendingIRQ + 0x0000000000000000 0x20 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .text.HAL_NVIC_GetPendingIRQ + 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .text.HAL_NVIC_ClearPendingIRQ + 0x0000000000000000 0x20 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .text.HAL_SYSTICK_CLKSourceConfig + 0x0000000000000000 0x34 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .text.HAL_SYSTICK_IRQHandler + 0x0000000000000000 0xe ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .text.HAL_SYSTICK_Callback + 0x0000000000000000 0xa ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .debug_macro 0x0000000000000000 0xa7e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x12d ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .debug_macro 0x0000000000000000 0xaf ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x391 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x754b ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x66 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x34be ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x55 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x924 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .debug_macro 0x0000000000000000 0xe5 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x1ae ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .debug_macro 0x0000000000000000 0xce ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x199 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x1ed ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x34 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x43 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x28 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .debug_macro 0x0000000000000000 0xb0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x15a ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x22c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x61 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x4c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x112 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x5ba ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x3e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x106 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .text.HAL_DMA_Init + 0x0000000000000000 0x90 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .text.HAL_DMA_DeInit + 0x0000000000000000 0x92 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .text.HAL_DMA_Start + 0x0000000000000000 0x92 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .text.HAL_DMA_Start_IT + 0x0000000000000000 0xcc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .text.HAL_DMA_Abort + 0x0000000000000000 0x70 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .text.HAL_DMA_Abort_IT + 0x0000000000000000 0x8a ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .text.HAL_DMA_PollForTransfer + 0x0000000000000000 0x132 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .text.HAL_DMA_IRQHandler + 0x0000000000000000 0x144 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .text.HAL_DMA_RegisterCallback + 0x0000000000000000 0xa0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .text.HAL_DMA_UnRegisterCallback + 0x0000000000000000 0xb0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .rodata.HAL_DMA_UnRegisterCallback + 0x0000000000000000 0x14 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .text.HAL_DMA_GetState + 0x0000000000000000 0x18 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .text.HAL_DMA_GetError + 0x0000000000000000 0x14 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .text.DMA_SetConfig + 0x0000000000000000 0x58 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .text.DMA_CalcBaseAndBitshift + 0x0000000000000000 0x38 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .debug_info 0x0000000000000000 0x700 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .debug_abbrev 0x0000000000000000 0x1ef ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .debug_aranges + 0x0000000000000000 0x88 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .debug_rnglists + 0x0000000000000000 0x6a ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .debug_macro 0x0000000000000000 0x1ae ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .debug_macro 0x0000000000000000 0xa7e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .debug_macro 0x0000000000000000 0x12d ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .debug_macro 0x0000000000000000 0xaf ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .debug_macro 0x0000000000000000 0x391 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .debug_macro 0x0000000000000000 0x754b ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .debug_macro 0x0000000000000000 0x66 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .debug_macro 0x0000000000000000 0x34be ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .debug_macro 0x0000000000000000 0x55 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .debug_macro 0x0000000000000000 0x924 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .debug_macro 0x0000000000000000 0xe5 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .debug_macro 0x0000000000000000 0x1ae ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .debug_macro 0x0000000000000000 0xce ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .debug_macro 0x0000000000000000 0x199 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .debug_macro 0x0000000000000000 0x1ed ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .debug_macro 0x0000000000000000 0x34 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .debug_macro 0x0000000000000000 0x43 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .debug_macro 0x0000000000000000 0x28 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .debug_macro 0x0000000000000000 0xb0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .debug_macro 0x0000000000000000 0x15a ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .debug_macro 0x0000000000000000 0x22c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .debug_macro 0x0000000000000000 0x61 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .debug_macro 0x0000000000000000 0x4c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .debug_macro 0x0000000000000000 0x112 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .debug_macro 0x0000000000000000 0x5ba ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .debug_macro 0x0000000000000000 0x3e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .debug_macro 0x0000000000000000 0x106 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .debug_line 0x0000000000000000 0xc15 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .debug_str 0x0000000000000000 0x5971d ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .comment 0x0000000000000000 0x44 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .debug_frame 0x0000000000000000 0x1d0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .ARM.attributes + 0x0000000000000000 0x2c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .text.HAL_EXTI_SetConfigLine + 0x0000000000000000 0x148 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .text.HAL_EXTI_GetConfigLine + 0x0000000000000000 0xec ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .text.HAL_EXTI_ClearConfigLine + 0x0000000000000000 0xc0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .text.HAL_EXTI_RegisterCallback + 0x0000000000000000 0x42 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .text.HAL_EXTI_GetHandle + 0x0000000000000000 0x24 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .text.HAL_EXTI_IRQHandler + 0x0000000000000000 0x48 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .text.HAL_EXTI_GetPending + 0x0000000000000000 0x3c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .text.HAL_EXTI_ClearPending + 0x0000000000000000 0x2c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .text.HAL_EXTI_GenerateSWI + 0x0000000000000000 0x2c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .debug_info 0x0000000000000000 0x4e6 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .debug_abbrev 0x0000000000000000 0x18f ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .debug_aranges + 0x0000000000000000 0x60 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .debug_rnglists + 0x0000000000000000 0x46 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .debug_macro 0x0000000000000000 0x1ae ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .debug_macro 0x0000000000000000 0xa7e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .debug_macro 0x0000000000000000 0x12d ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .debug_macro 0x0000000000000000 0xaf ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .debug_macro 0x0000000000000000 0x391 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .debug_macro 0x0000000000000000 0x754b ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .debug_macro 0x0000000000000000 0x66 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .debug_macro 0x0000000000000000 0x34be ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .debug_macro 0x0000000000000000 0x55 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .debug_macro 0x0000000000000000 0x924 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .debug_macro 0x0000000000000000 0xe5 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .debug_macro 0x0000000000000000 0x1ae ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .debug_macro 0x0000000000000000 0xce ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .debug_macro 0x0000000000000000 0x199 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .debug_macro 0x0000000000000000 0x1ed ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .debug_macro 0x0000000000000000 0x34 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .debug_macro 0x0000000000000000 0x43 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .debug_macro 0x0000000000000000 0x28 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .debug_macro 0x0000000000000000 0xb0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .debug_macro 0x0000000000000000 0x15a ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .debug_macro 0x0000000000000000 0x22c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .debug_macro 0x0000000000000000 0x61 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .debug_macro 0x0000000000000000 0x4c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .debug_macro 0x0000000000000000 0x112 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .debug_macro 0x0000000000000000 0x5ba ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .debug_macro 0x0000000000000000 0x3e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .debug_macro 0x0000000000000000 0x106 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .debug_line 0x0000000000000000 0x94a ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .debug_str 0x0000000000000000 0x594db ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .comment 0x0000000000000000 0x44 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .debug_frame 0x0000000000000000 0x130 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .ARM.attributes + 0x0000000000000000 0x2c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .bss.pFlash 0x0000000000000000 0x20 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .text.HAL_FLASH_Program + 0x0000000000000000 0x12c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .text.HAL_FLASH_Program_IT + 0x0000000000000000 0xa4 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .text.HAL_FLASH_IRQHandler + 0x0000000000000000 0x1d0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .text.HAL_FLASH_EndOfOperationCallback + 0x0000000000000000 0x10 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .text.HAL_FLASH_OperationErrorCallback + 0x0000000000000000 0x10 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .text.HAL_FLASH_Unlock + 0x0000000000000000 0x4c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .text.HAL_FLASH_Lock + 0x0000000000000000 0x1c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .text.HAL_FLASH_OB_Unlock + 0x0000000000000000 0x34 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .text.HAL_FLASH_OB_Lock + 0x0000000000000000 0x20 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .text.HAL_FLASH_OB_Launch + 0x0000000000000000 0x2c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .text.HAL_FLASH_GetError + 0x0000000000000000 0x14 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .text.FLASH_Program_HalfWord + 0x0000000000000000 0x38 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .text.FLASH_WaitForLastOperation + 0x0000000000000000 0x80 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .text.FLASH_SetErrorCode + 0x0000000000000000 0x60 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .debug_info 0x0000000000000000 0x4fc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .debug_abbrev 0x0000000000000000 0x226 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .debug_aranges + 0x0000000000000000 0x88 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .debug_rnglists + 0x0000000000000000 0x65 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .debug_macro 0x0000000000000000 0x1ae ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .debug_macro 0x0000000000000000 0xa7e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .debug_macro 0x0000000000000000 0x12d ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .debug_macro 0x0000000000000000 0xaf ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .debug_macro 0x0000000000000000 0x391 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .debug_macro 0x0000000000000000 0x754b ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .debug_macro 0x0000000000000000 0x66 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .debug_macro 0x0000000000000000 0x34be ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .debug_macro 0x0000000000000000 0x55 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .debug_macro 0x0000000000000000 0x924 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .debug_macro 0x0000000000000000 0xe5 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .debug_macro 0x0000000000000000 0x1ae ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .debug_macro 0x0000000000000000 0xce ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .debug_macro 0x0000000000000000 0x199 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .debug_macro 0x0000000000000000 0x1ed ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .debug_macro 0x0000000000000000 0x34 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .debug_macro 0x0000000000000000 0x43 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .debug_macro 0x0000000000000000 0x28 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .debug_macro 0x0000000000000000 0xb0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .debug_macro 0x0000000000000000 0x15a ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .debug_macro 0x0000000000000000 0x22c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .debug_macro 0x0000000000000000 0x61 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .debug_macro 0x0000000000000000 0x4c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .debug_macro 0x0000000000000000 0x112 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .debug_macro 0x0000000000000000 0x5ba ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .debug_macro 0x0000000000000000 0x3e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .debug_macro 0x0000000000000000 0x106 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .debug_line 0x0000000000000000 0x9b9 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .debug_str 0x0000000000000000 0x59622 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .comment 0x0000000000000000 0x44 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .debug_frame 0x0000000000000000 0x1c4 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .ARM.attributes + 0x0000000000000000 0x2c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .text.HAL_FLASHEx_Erase + 0x0000000000000000 0xec ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .text.HAL_FLASHEx_Erase_IT + 0x0000000000000000 0x88 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .text.HAL_FLASHEx_OBErase + 0x0000000000000000 0x9c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .text.HAL_FLASHEx_OBProgram + 0x0000000000000000 0x124 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .text.HAL_FLASHEx_OBGetConfig + 0x0000000000000000 0x38 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .text.HAL_FLASHEx_OBGetUserData + 0x0000000000000000 0x40 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .text.FLASH_MassErase + 0x0000000000000000 0x30 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .text.FLASH_OB_EnableWRP + 0x0000000000000000 0xc4 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .text.FLASH_OB_DisableWRP + 0x0000000000000000 0xc4 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .text.FLASH_OB_RDP_LevelConfig + 0x0000000000000000 0xc0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .text.FLASH_OB_UserConfig + 0x0000000000000000 0x88 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .text.FLASH_OB_ProgramData + 0x0000000000000000 0x80 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .text.FLASH_OB_GetWRP + 0x0000000000000000 0x14 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .text.FLASH_OB_GetRDP + 0x0000000000000000 0x34 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .text.FLASH_OB_GetUser + 0x0000000000000000 0x1c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .text.FLASH_PageErase + 0x0000000000000000 0x3c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .debug_info 0x0000000000000000 0x6bb ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .debug_abbrev 0x0000000000000000 0x212 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .debug_aranges + 0x0000000000000000 0x98 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .debug_rnglists + 0x0000000000000000 0x76 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x1c0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0xa7e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x12d ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0xaf ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x391 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x754b ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x66 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x34be ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x55 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x924 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0xe5 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x1ae ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0xce ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x199 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x1ed ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x34 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x43 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x28 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0xb0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x15a ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x22c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x61 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x4c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x112 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x5ba ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x3e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x106 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .debug_line 0x0000000000000000 0xa54 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .debug_str 0x0000000000000000 0x59774 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .comment 0x0000000000000000 0x44 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .debug_frame 0x0000000000000000 0x220 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .ARM.attributes + 0x0000000000000000 0x2c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .text.HAL_GPIO_DeInit + 0x0000000000000000 0x190 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .text.HAL_GPIO_ReadPin + 0x0000000000000000 0x3a ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .text.HAL_GPIO_WritePin + 0x0000000000000000 0x3a ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .text.HAL_GPIO_TogglePin + 0x0000000000000000 0x36 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .text.HAL_GPIO_LockPin + 0x0000000000000000 0x52 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .text.HAL_GPIO_EXTI_IRQHandler + 0x0000000000000000 0x38 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .text.HAL_GPIO_EXTI_Callback + 0x0000000000000000 0x14 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .debug_macro 0x0000000000000000 0xa7e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x12d ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .debug_macro 0x0000000000000000 0xaf ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x391 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x754b ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x66 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x34be ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x55 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x924 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .debug_macro 0x0000000000000000 0xe5 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x1ae ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .debug_macro 0x0000000000000000 0xce ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x199 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x1ed ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x34 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x43 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x28 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .debug_macro 0x0000000000000000 0xb0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x15a ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x22c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x61 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x4c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x112 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x5ba ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x3e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x106 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_Init + 0x0000000000000000 0x12c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_DeInit + 0x0000000000000000 0x60 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_MspInit + 0x0000000000000000 0x10 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_MspDeInit + 0x0000000000000000 0x10 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_Master_Transmit + 0x0000000000000000 0x210 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_Master_Receive + 0x0000000000000000 0x210 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_Slave_Transmit + 0x0000000000000000 0x288 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_Slave_Receive + 0x0000000000000000 0x238 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_Master_Transmit_IT + 0x0000000000000000 0xf8 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_Master_Receive_IT + 0x0000000000000000 0xf8 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_Slave_Transmit_IT + 0x0000000000000000 0xe8 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_Slave_Receive_IT + 0x0000000000000000 0xac ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_Master_Transmit_DMA + 0x0000000000000000 0x20c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_Master_Receive_DMA + 0x0000000000000000 0x20c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_Slave_Transmit_DMA + 0x0000000000000000 0x1f4 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_Slave_Receive_DMA + 0x0000000000000000 0x180 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_Mem_Write + 0x0000000000000000 0x25c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_Mem_Read + 0x0000000000000000 0x268 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_Mem_Write_IT + 0x0000000000000000 0x140 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_Mem_Read_IT + 0x0000000000000000 0x13c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_Mem_Write_DMA + 0x0000000000000000 0x204 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_Mem_Read_DMA + 0x0000000000000000 0x200 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_IsDeviceReady + 0x0000000000000000 0x234 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_Master_Seq_Transmit_IT + 0x0000000000000000 0x124 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_Master_Seq_Transmit_DMA + 0x0000000000000000 0x234 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_Master_Seq_Receive_IT + 0x0000000000000000 0x124 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_Master_Seq_Receive_DMA + 0x0000000000000000 0x234 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_Slave_Seq_Transmit_IT + 0x0000000000000000 0x180 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_Slave_Seq_Transmit_DMA + 0x0000000000000000 0x2b8 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_Slave_Seq_Receive_IT + 0x0000000000000000 0x184 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_Slave_Seq_Receive_DMA + 0x0000000000000000 0x2b8 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_EnableListen_IT + 0x0000000000000000 0x44 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_DisableListen_IT + 0x0000000000000000 0x68 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_Master_Abort_IT + 0x0000000000000000 0xac ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_EV_IRQHandler + 0x0000000000000000 0x34 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_ER_IRQHandler + 0x0000000000000000 0xb2 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_MasterTxCpltCallback + 0x0000000000000000 0x10 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_MasterRxCpltCallback + 0x0000000000000000 0x10 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_SlaveTxCpltCallback + 0x0000000000000000 0x10 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_SlaveRxCpltCallback + 0x0000000000000000 0x10 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_AddrCallback + 0x0000000000000000 0x20 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_ListenCpltCallback + 0x0000000000000000 0x10 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_MemTxCpltCallback + 0x0000000000000000 0x10 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_MemRxCpltCallback + 0x0000000000000000 0x10 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_ErrorCallback + 0x0000000000000000 0x10 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_AbortCpltCallback + 0x0000000000000000 0x10 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_GetState + 0x0000000000000000 0x18 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_GetMode + 0x0000000000000000 0x18 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.HAL_I2C_GetError + 0x0000000000000000 0x14 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.I2C_Master_ISR_IT + 0x0000000000000000 0x254 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.I2C_Mem_ISR_IT + 0x0000000000000000 0x230 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.I2C_Slave_ISR_IT + 0x0000000000000000 0x200 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.I2C_Master_ISR_DMA + 0x0000000000000000 0x1f8 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.I2C_Mem_ISR_DMA + 0x0000000000000000 0x238 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.I2C_Slave_ISR_DMA + 0x0000000000000000 0x1cc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.I2C_RequestMemoryWrite + 0x0000000000000000 0xc8 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.I2C_RequestMemoryRead + 0x0000000000000000 0xc4 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.I2C_ITAddrCplt + 0x0000000000000000 0x148 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.I2C_ITMasterSeqCplt + 0x0000000000000000 0x82 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.I2C_ITSlaveSeqCplt + 0x0000000000000000 0xc8 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.I2C_ITMasterCplt + 0x0000000000000000 0x19c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.I2C_ITSlaveCplt + 0x0000000000000000 0x240 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.I2C_ITListenCplt + 0x0000000000000000 0xb0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.I2C_ITError + 0x0000000000000000 0x204 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.I2C_TreatErrorCallback + 0x0000000000000000 0x52 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.I2C_Flush_TXDR + 0x0000000000000000 0x44 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.I2C_DMAMasterTransmitCplt + 0x0000000000000000 0xa0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.I2C_DMASlaveTransmitCplt + 0x0000000000000000 0x48 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.I2C_DMAMasterReceiveCplt + 0x0000000000000000 0xa0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.I2C_DMASlaveReceiveCplt + 0x0000000000000000 0x50 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.I2C_DMAError + 0x0000000000000000 0x32 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.I2C_DMAAbort + 0x0000000000000000 0x3e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.I2C_WaitOnFlagUntilTimeout + 0x0000000000000000 0x9c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.I2C_WaitOnTXISFlagUntilTimeout + 0x0000000000000000 0x8c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.I2C_WaitOnSTOPFlagUntilTimeout + 0x0000000000000000 0x86 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.I2C_WaitOnRXNEFlagUntilTimeout + 0x0000000000000000 0x104 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.I2C_IsErrorOccurred + 0x0000000000000000 0x200 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.I2C_TransferConfig + 0x0000000000000000 0x74 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.I2C_Enable_IRQ + 0x0000000000000000 0x11c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.I2C_Disable_IRQ + 0x0000000000000000 0xc6 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .text.I2C_ConvertOtherXferOptions + 0x0000000000000000 0x34 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .debug_info 0x0000000000000000 0x2052 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .debug_abbrev 0x0000000000000000 0x270 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .debug_aranges + 0x0000000000000000 0x2a0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .debug_rnglists + 0x0000000000000000 0x229 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x27a ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .debug_macro 0x0000000000000000 0xa7e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x12d ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .debug_macro 0x0000000000000000 0xaf ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x391 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x754b ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x66 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x34be ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x55 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x924 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .debug_macro 0x0000000000000000 0xe5 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x1ae ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .debug_macro 0x0000000000000000 0xce ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x199 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x1ed ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x34 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x43 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x28 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .debug_macro 0x0000000000000000 0xb0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x15a ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x22c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x61 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x4c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x112 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x5ba ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x3e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .debug_macro 0x0000000000000000 0x106 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .debug_line 0x0000000000000000 0x3707 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .debug_str 0x0000000000000000 0x5a6d8 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .comment 0x0000000000000000 0x44 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .debug_frame 0x0000000000000000 0xa64 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .ARM.attributes + 0x0000000000000000 0x2c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .text.HAL_I2CEx_ConfigAnalogFilter + 0x0000000000000000 0x98 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .text.HAL_I2CEx_ConfigDigitalFilter + 0x0000000000000000 0x98 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .text.HAL_I2CEx_EnableWakeUp + 0x0000000000000000 0x82 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .text.HAL_I2CEx_DisableWakeUp + 0x0000000000000000 0x84 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .text.HAL_I2CEx_EnableFastModePlus + 0x0000000000000000 0x3c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .text.HAL_I2CEx_DisableFastModePlus + 0x0000000000000000 0x40 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .debug_info 0x0000000000000000 0x839 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .debug_abbrev 0x0000000000000000 0x1d6 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .debug_aranges + 0x0000000000000000 0x48 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .debug_rnglists + 0x0000000000000000 0x35 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x1ae ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0xa7e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x12d ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0xaf ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x391 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x754b ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x66 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x34be ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x55 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x924 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0xe5 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x1ae ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0xce ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x199 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x1ed ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x34 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x43 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x28 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0xb0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x15a ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x22c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x61 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x4c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x112 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x5ba ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x3e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .debug_macro 0x0000000000000000 0x106 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .debug_line 0x0000000000000000 0x894 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .debug_str 0x0000000000000000 0x598ff ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .comment 0x0000000000000000 0x44 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .debug_frame 0x0000000000000000 0xd0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .ARM.attributes + 0x0000000000000000 0x2c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .text.HAL_PWR_DeInit + 0x0000000000000000 0x2c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .text.HAL_PWR_EnableBkUpAccess + 0x0000000000000000 0x1c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .text.HAL_PWR_DisableBkUpAccess + 0x0000000000000000 0x20 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .text.HAL_PWR_EnableWakeUpPin + 0x0000000000000000 0x20 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .text.HAL_PWR_DisableWakeUpPin + 0x0000000000000000 0x24 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .text.HAL_PWR_EnterSLEEPMode + 0x0000000000000000 0x38 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .text.HAL_PWR_EnterSTOPMode + 0x0000000000000000 0x68 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .text.HAL_PWR_EnterSTANDBYMode + 0x0000000000000000 0x2c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .text.HAL_PWR_EnableSleepOnExit + 0x0000000000000000 0x1c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .text.HAL_PWR_DisableSleepOnExit + 0x0000000000000000 0x1c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .text.HAL_PWR_EnableSEVOnPend + 0x0000000000000000 0x1c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .text.HAL_PWR_DisableSEVOnPend + 0x0000000000000000 0x1c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .debug_info 0x0000000000000000 0x3a8 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .debug_abbrev 0x0000000000000000 0x142 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .debug_aranges + 0x0000000000000000 0x78 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .debug_rnglists + 0x0000000000000000 0x55 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x1ae ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .debug_macro 0x0000000000000000 0xa7e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x12d ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .debug_macro 0x0000000000000000 0xaf ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x391 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x754b ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x66 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x34be ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x55 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x924 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .debug_macro 0x0000000000000000 0xe5 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x1ae ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .debug_macro 0x0000000000000000 0xce ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x199 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x1ed ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x34 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x43 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x28 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .debug_macro 0x0000000000000000 0xb0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x15a ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x22c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x61 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x4c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x112 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x5ba ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x3e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x106 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .debug_line 0x0000000000000000 0x7bc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .debug_str 0x0000000000000000 0x594b4 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .comment 0x0000000000000000 0x44 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .debug_frame 0x0000000000000000 0x170 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .ARM.attributes + 0x0000000000000000 0x2c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .text.HAL_PWR_ConfigPVD + 0x0000000000000000 0xc4 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .text.HAL_PWR_EnablePVD + 0x0000000000000000 0x1c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .text.HAL_PWR_DisablePVD + 0x0000000000000000 0x1c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .text.HAL_PWR_PVD_IRQHandler + 0x0000000000000000 0x28 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .text.HAL_PWR_PVDCallback + 0x0000000000000000 0xa ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .debug_info 0x0000000000000000 0x1db ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .debug_abbrev 0x0000000000000000 0x134 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .debug_aranges + 0x0000000000000000 0x40 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .debug_rnglists + 0x0000000000000000 0x2c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x1c6 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0xa7e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x12d ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0xaf ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x391 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x754b ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x66 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x34be ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x55 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x924 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0xe5 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x1ae ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0xce ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x199 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x1ed ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x34 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x43 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x28 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0xb0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x15a ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x22c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x61 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x4c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x112 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x5ba ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x3e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x106 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .debug_line 0x0000000000000000 0x715 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .debug_str 0x0000000000000000 0x593ed ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .comment 0x0000000000000000 0x44 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .debug_frame 0x0000000000000000 0xa0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .ARM.attributes + 0x0000000000000000 0x2c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .text.HAL_RCC_DeInit + 0x0000000000000000 0x10c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .text.HAL_RCC_MCOConfig + 0x0000000000000000 0x80 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .text.HAL_RCC_EnableCSS + 0x0000000000000000 0x1c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .text.HAL_RCC_DisableCSS + 0x0000000000000000 0x20 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .text.HAL_RCC_GetOscConfig + 0x0000000000000000 0x134 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .text.HAL_RCC_GetClockConfig + 0x0000000000000000 0x54 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .text.HAL_RCC_NMI_IRQHandler + 0x0000000000000000 0x28 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .text.HAL_RCC_CSSCallback + 0x0000000000000000 0xa ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .debug_macro 0x0000000000000000 0xa7e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x12d ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .debug_macro 0x0000000000000000 0xaf ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x391 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x754b ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x66 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x34be ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x55 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x924 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .debug_macro 0x0000000000000000 0xe5 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x1ae ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .debug_macro 0x0000000000000000 0xce ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x199 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x1ed ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x34 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x43 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x28 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .debug_macro 0x0000000000000000 0xb0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x15a ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x22c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x61 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x4c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x112 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x5ba ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x3e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x106 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .text.HAL_RCCEx_GetPeriphCLKConfig + 0x0000000000000000 0x44 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .text.HAL_RCCEx_GetPeriphCLKFreq + 0x0000000000000000 0x158 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0xa7e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x12d ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0xaf ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x391 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x754b ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x66 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x34be ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x55 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x924 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0xe5 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x1ae ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0xce ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x199 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x1ed ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x34 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x43 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x28 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0xb0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x15a ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x22c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x61 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x4c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x112 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x5ba ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x3e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x106 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .debug_info 0x0000000000000000 0x70 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .debug_abbrev 0x0000000000000000 0x28 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .debug_aranges + 0x0000000000000000 0x18 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .debug_macro 0x0000000000000000 0x1af ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .debug_macro 0x0000000000000000 0xa7e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .debug_macro 0x0000000000000000 0x12d ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .debug_macro 0x0000000000000000 0xaf ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .debug_macro 0x0000000000000000 0x391 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .debug_macro 0x0000000000000000 0x754b ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .debug_macro 0x0000000000000000 0x66 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .debug_macro 0x0000000000000000 0x34be ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .debug_macro 0x0000000000000000 0x55 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .debug_macro 0x0000000000000000 0x924 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .debug_macro 0x0000000000000000 0xe5 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .debug_macro 0x0000000000000000 0x1ae ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .debug_macro 0x0000000000000000 0xce ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .debug_macro 0x0000000000000000 0x199 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .debug_macro 0x0000000000000000 0x1ed ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .debug_macro 0x0000000000000000 0x34 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .debug_macro 0x0000000000000000 0x43 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .debug_macro 0x0000000000000000 0x28 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .debug_macro 0x0000000000000000 0xb0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .debug_macro 0x0000000000000000 0x15a ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .debug_macro 0x0000000000000000 0x22c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .debug_macro 0x0000000000000000 0x61 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .debug_macro 0x0000000000000000 0x4c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .debug_macro 0x0000000000000000 0x112 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .debug_macro 0x0000000000000000 0x5ba ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .debug_macro 0x0000000000000000 0x3e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .debug_macro 0x0000000000000000 0x106 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .debug_line 0x0000000000000000 0x66c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .debug_str 0x0000000000000000 0x592ab ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .comment 0x0000000000000000 0x44 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .ARM.attributes + 0x0000000000000000 0x2c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .debug_info 0x0000000000000000 0x70 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .debug_abbrev 0x0000000000000000 0x28 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .debug_aranges + 0x0000000000000000 0x18 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x1ae ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0xa7e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x12d ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0xaf ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x391 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x754b ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x66 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x34be ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x55 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x924 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0xe5 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x1ae ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0xce ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x199 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x1ed ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x34 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x43 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x28 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0xb0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x15a ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x22c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x61 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x4c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x112 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x5ba ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x3e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x106 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .debug_line 0x0000000000000000 0x66f ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .debug_str 0x0000000000000000 0x592ae ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .comment 0x0000000000000000 0x44 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .ARM.attributes + 0x0000000000000000 0x2c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.HAL_HalfDuplex_Init + 0x0000000000000000 0xb8 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.HAL_LIN_Init + 0x0000000000000000 0xf0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.HAL_MultiProcessor_Init + 0x0000000000000000 0xf0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.HAL_UART_DeInit + 0x0000000000000000 0x7c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.HAL_UART_MspInit + 0x0000000000000000 0x10 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.HAL_UART_MspDeInit + 0x0000000000000000 0x10 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.HAL_UART_Transmit + 0x0000000000000000 0x140 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.HAL_UART_Receive + 0x0000000000000000 0x1a8 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.HAL_UART_Transmit_IT + 0x0000000000000000 0xe0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.HAL_UART_Receive_IT + 0x0000000000000000 0xae ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.HAL_UART_Transmit_DMA + 0x0000000000000000 0x120 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.HAL_UART_Receive_DMA + 0x0000000000000000 0xae ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.HAL_UART_DMAPause + 0x0000000000000000 0x114 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.HAL_UART_DMAResume + 0x0000000000000000 0xfe ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.HAL_UART_DMAStop + 0x0000000000000000 0x120 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.HAL_UART_Abort + 0x0000000000000000 0x1ec ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.HAL_UART_AbortTransmit + 0x0000000000000000 0xcc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.HAL_UART_AbortReceive + 0x0000000000000000 0x15c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.HAL_UART_Abort_IT + 0x0000000000000000 0x23c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.HAL_UART_AbortTransmit_IT + 0x0000000000000000 0xf0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.HAL_UART_AbortReceive_IT + 0x0000000000000000 0x190 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.HAL_UART_IRQHandler + 0x0000000000000000 0x5c0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.HAL_UART_TxCpltCallback + 0x0000000000000000 0x10 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.HAL_UART_TxHalfCpltCallback + 0x0000000000000000 0x10 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.HAL_UART_RxCpltCallback + 0x0000000000000000 0x10 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.HAL_UART_RxHalfCpltCallback + 0x0000000000000000 0x10 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.HAL_UART_ErrorCallback + 0x0000000000000000 0x10 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.HAL_UART_AbortCpltCallback + 0x0000000000000000 0x10 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.HAL_UART_AbortTransmitCpltCallback + 0x0000000000000000 0x10 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.HAL_UART_AbortReceiveCpltCallback + 0x0000000000000000 0x10 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.HAL_UARTEx_RxEventCallback + 0x0000000000000000 0x16 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.HAL_UART_ReceiverTimeout_Config + 0x0000000000000000 0x26 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.HAL_UART_EnableReceiverTimeout + 0x0000000000000000 0x5a ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.HAL_UART_DisableReceiverTimeout + 0x0000000000000000 0x5c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.HAL_MultiProcessor_EnableMuteMode + 0x0000000000000000 0x70 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.HAL_MultiProcessor_DisableMuteMode + 0x0000000000000000 0x74 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.HAL_MultiProcessor_EnterMuteMode + 0x0000000000000000 0x20 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.HAL_HalfDuplex_EnableTransmitter + 0x0000000000000000 0xa0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.HAL_HalfDuplex_EnableReceiver + 0x0000000000000000 0xa0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.HAL_LIN_SendBreak + 0x0000000000000000 0x4c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.HAL_UART_GetState + 0x0000000000000000 0x24 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.HAL_UART_GetError + 0x0000000000000000 0x16 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.UART_Start_Receive_IT + 0x0000000000000000 0x16c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.UART_Start_Receive_DMA + 0x0000000000000000 0x140 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.UART_EndTxTransfer + 0x0000000000000000 0x48 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.UART_DMATransmitCplt + 0x0000000000000000 0x94 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.UART_DMATxHalfCplt + 0x0000000000000000 0x1e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.UART_DMAReceiveCplt + 0x0000000000000000 0x12c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.UART_DMARxHalfCplt + 0x0000000000000000 0x42 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.UART_DMAError + 0x0000000000000000 0x84 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.UART_DMAAbortOnError + 0x0000000000000000 0x2e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.UART_DMATxAbortCallback + 0x0000000000000000 0x6e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.UART_DMARxAbortCallback + 0x0000000000000000 0x7e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.UART_DMATxOnlyAbortCallback + 0x0000000000000000 0x2c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.UART_DMARxOnlyAbortCallback + 0x0000000000000000 0x4c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.UART_TxISR_8BIT + 0x0000000000000000 0xb4 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.UART_TxISR_16BIT + 0x0000000000000000 0xbc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.UART_EndTransmit_IT + 0x0000000000000000 0x56 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.UART_RxISR_8BIT + 0x0000000000000000 0x1b8 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.UART_RxISR_16BIT + 0x0000000000000000 0x1b8 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .debug_macro 0x0000000000000000 0xa7e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .debug_macro 0x0000000000000000 0x12d ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .debug_macro 0x0000000000000000 0xaf ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .debug_macro 0x0000000000000000 0x391 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .debug_macro 0x0000000000000000 0x754b ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .debug_macro 0x0000000000000000 0x66 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .debug_macro 0x0000000000000000 0x34be ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .debug_macro 0x0000000000000000 0x55 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .debug_macro 0x0000000000000000 0x924 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .debug_macro 0x0000000000000000 0xe5 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .debug_macro 0x0000000000000000 0x1ae ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .debug_macro 0x0000000000000000 0xce ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .debug_macro 0x0000000000000000 0x199 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .debug_macro 0x0000000000000000 0x1ed ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .debug_macro 0x0000000000000000 0x34 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .debug_macro 0x0000000000000000 0x43 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .debug_macro 0x0000000000000000 0x28 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .debug_macro 0x0000000000000000 0xb0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .debug_macro 0x0000000000000000 0x15a ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .debug_macro 0x0000000000000000 0x22c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .debug_macro 0x0000000000000000 0x61 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .debug_macro 0x0000000000000000 0x4c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .debug_macro 0x0000000000000000 0x112 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .debug_macro 0x0000000000000000 0x5ba ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .debug_macro 0x0000000000000000 0x3e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .debug_macro 0x0000000000000000 0x106 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .text.HAL_RS485Ex_Init + 0x0000000000000000 0xe0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .text.HAL_UARTEx_WakeupCallback + 0x0000000000000000 0x10 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .text.HAL_MultiProcessorEx_AddressLength_Set + 0x0000000000000000 0x62 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .text.HAL_UARTEx_StopModeWakeUpSourceConfig + 0x0000000000000000 0xcc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .text.HAL_UARTEx_EnableStopMode + 0x0000000000000000 0x62 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .text.HAL_UARTEx_DisableStopMode + 0x0000000000000000 0x62 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .text.HAL_UARTEx_ReceiveToIdle + 0x0000000000000000 0x218 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .text.HAL_UARTEx_ReceiveToIdle_IT + 0x0000000000000000 0xd0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .text.HAL_UARTEx_ReceiveToIdle_DMA + 0x0000000000000000 0xd0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .text.HAL_UARTEx_GetRxEventType + 0x0000000000000000 0x14 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .text.UARTEx_Wakeup_AddressConfig + 0x0000000000000000 0x48 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .debug_info 0x0000000000000000 0xc80 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .debug_abbrev 0x0000000000000000 0x2bb ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .debug_aranges + 0x0000000000000000 0x70 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .debug_rnglists + 0x0000000000000000 0x54 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .debug_macro 0x0000000000000000 0x1ae ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .debug_macro 0x0000000000000000 0xa7e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .debug_macro 0x0000000000000000 0x12d ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .debug_macro 0x0000000000000000 0xaf ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .debug_macro 0x0000000000000000 0x391 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .debug_macro 0x0000000000000000 0x754b ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .debug_macro 0x0000000000000000 0x66 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .debug_macro 0x0000000000000000 0x34be ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .debug_macro 0x0000000000000000 0x55 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .debug_macro 0x0000000000000000 0x924 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .debug_macro 0x0000000000000000 0xe5 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .debug_macro 0x0000000000000000 0x1ae ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .debug_macro 0x0000000000000000 0xce ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .debug_macro 0x0000000000000000 0x199 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .debug_macro 0x0000000000000000 0x1ed ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .debug_macro 0x0000000000000000 0x34 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .debug_macro 0x0000000000000000 0x43 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .debug_macro 0x0000000000000000 0x28 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .debug_macro 0x0000000000000000 0xb0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .debug_macro 0x0000000000000000 0x15a ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .debug_macro 0x0000000000000000 0x22c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .debug_macro 0x0000000000000000 0x61 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .debug_macro 0x0000000000000000 0x4c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .debug_macro 0x0000000000000000 0x112 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .debug_macro 0x0000000000000000 0x5ba ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .debug_macro 0x0000000000000000 0x3e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .debug_macro 0x0000000000000000 0x106 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .debug_line 0x0000000000000000 0xaeb ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .debug_str 0x0000000000000000 0x59a0c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .comment 0x0000000000000000 0x44 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .debug_frame 0x0000000000000000 0x178 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .ARM.attributes + 0x0000000000000000 0x2c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o + .text 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-exit.o) + .data 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-exit.o) + .bss 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-exit.o) + .text.exit 0x0000000000000000 0x28 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-exit.o) + .debug_frame 0x0000000000000000 0x28 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-exit.o) + .ARM.attributes + 0x0000000000000000 0x2c /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-exit.o) + .text 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-findfp.o) + .data 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-findfp.o) + .bss 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-findfp.o) + .text.std 0x0000000000000000 0x6c /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-findfp.o) + .text.stdio_exit_handler + 0x0000000000000000 0x1c /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-findfp.o) + .text.cleanup_stdio + 0x0000000000000000 0x3c /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-findfp.o) + .text.__fp_lock + 0x0000000000000000 0x18 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-findfp.o) + .text.__fp_unlock + 0x0000000000000000 0x18 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-findfp.o) + .text.global_stdio_init.part.0 + 0x0000000000000000 0x3c /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-findfp.o) + .text.__sfp_lock_acquire + 0x0000000000000000 0x10 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-findfp.o) + .text.__sfp_lock_release + 0x0000000000000000 0x10 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-findfp.o) + .text.__sfp 0x0000000000000000 0xa8 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-findfp.o) + .text.__sinit 0x0000000000000000 0x30 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-findfp.o) + .text.__fp_lock_all + 0x0000000000000000 0x1c /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-findfp.o) + .text.__fp_unlock_all + 0x0000000000000000 0x1c /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-findfp.o) + .bss.__sf 0x0000000000000000 0x138 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-findfp.o) + .bss.__stdio_exit_handler + 0x0000000000000000 0x4 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-findfp.o) + .data.__sglue 0x0000000000000000 0xc /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-findfp.o) + .debug_frame 0x0000000000000000 0x138 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-findfp.o) + .ARM.attributes + 0x0000000000000000 0x2c /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-findfp.o) + .text 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-fwalk.o) + .data 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-fwalk.o) + .bss 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-fwalk.o) + .text._fwalk_sglue + 0x0000000000000000 0x38 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-fwalk.o) + .debug_frame 0x0000000000000000 0x34 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-fwalk.o) + .ARM.attributes + 0x0000000000000000 0x2c /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-fwalk.o) + .text 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-stdio.o) + .data 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-stdio.o) + .bss 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-stdio.o) + .text.__sread 0x0000000000000000 0x28 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-stdio.o) + .text.__seofread + 0x0000000000000000 0x4 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-stdio.o) + .text.__swrite + 0x0000000000000000 0x38 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-stdio.o) + .text.__sseek 0x0000000000000000 0x2c /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-stdio.o) + .text.__sclose + 0x0000000000000000 0xc /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-stdio.o) + .debug_frame 0x0000000000000000 0x90 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-stdio.o) + .ARM.attributes + 0x0000000000000000 0x2c /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-stdio.o) + .text 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-memset.o) + .data 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-memset.o) + .bss 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-memset.o) + .text 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-closer.o) + .data 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-closer.o) + .bss 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-closer.o) + .text._close_r + 0x0000000000000000 0x24 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-closer.o) + .debug_frame 0x0000000000000000 0x2c /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-closer.o) + .ARM.attributes + 0x0000000000000000 0x2c /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-closer.o) + .text 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-reent.o) + .data 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-reent.o) + .bss 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-reent.o) + .text._reclaim_reent + 0x0000000000000000 0xbc /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-reent.o) + .bss.errno 0x0000000000000000 0x4 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-reent.o) + .debug_frame 0x0000000000000000 0x2c /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-reent.o) + .ARM.attributes + 0x0000000000000000 0x2c /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-reent.o) + .text 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-impure.o) + .data 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-impure.o) + .bss 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-impure.o) + .data._impure_data + 0x0000000000000000 0x4c /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-impure.o) + .data._impure_ptr + 0x0000000000000000 0x4 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-impure.o) + .ARM.attributes + 0x0000000000000000 0x2c /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-impure.o) + .text 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-lseekr.o) + .data 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-lseekr.o) + .bss 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-lseekr.o) + .text._lseek_r + 0x0000000000000000 0x28 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-lseekr.o) + .debug_frame 0x0000000000000000 0x2c /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-lseekr.o) + .ARM.attributes + 0x0000000000000000 0x2c /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-lseekr.o) + .text 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-readr.o) + .data 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-readr.o) + .bss 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-readr.o) + .text._read_r 0x0000000000000000 0x28 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-readr.o) + .debug_frame 0x0000000000000000 0x2c /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-readr.o) + .ARM.attributes + 0x0000000000000000 0x2c /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-readr.o) + .text 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-writer.o) + .data 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-writer.o) + .bss 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-writer.o) + .text._write_r + 0x0000000000000000 0x28 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-writer.o) + .debug_frame 0x0000000000000000 0x2c /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-writer.o) + .ARM.attributes + 0x0000000000000000 0x2c /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-writer.o) + .text 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-errno.o) + .data 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-errno.o) + .bss 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-errno.o) + .text.__errno 0x0000000000000000 0xc /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-errno.o) + .debug_frame 0x0000000000000000 0x20 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-errno.o) + .ARM.attributes + 0x0000000000000000 0x2c /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-errno.o) + .text 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-init.o) + .data 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-init.o) + .bss 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-init.o) + .text 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-lock.o) + .data 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-lock.o) + .bss 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_init + 0x0000000000000000 0x2 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_init_recursive + 0x0000000000000000 0x2 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_close + 0x0000000000000000 0x2 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_close_recursive + 0x0000000000000000 0x2 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_acquire + 0x0000000000000000 0x2 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_acquire_recursive + 0x0000000000000000 0x2 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_try_acquire + 0x0000000000000000 0x4 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_try_acquire_recursive + 0x0000000000000000 0x4 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_release + 0x0000000000000000 0x2 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_release_recursive + 0x0000000000000000 0x2 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-lock.o) + .bss.__lock___arc4random_mutex + 0x0000000000000000 0x1 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-lock.o) + .bss.__lock___at_quick_exit_mutex + 0x0000000000000000 0x1 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-lock.o) + .bss.__lock___atexit_recursive_mutex + 0x0000000000000000 0x1 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-lock.o) + .bss.__lock___dd_hash_mutex + 0x0000000000000000 0x1 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-lock.o) + .bss.__lock___env_recursive_mutex + 0x0000000000000000 0x1 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-lock.o) + .bss.__lock___malloc_recursive_mutex + 0x0000000000000000 0x1 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-lock.o) + .bss.__lock___sfp_recursive_mutex + 0x0000000000000000 0x1 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-lock.o) + .bss.__lock___tz_mutex + 0x0000000000000000 0x1 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-lock.o) + .debug_frame 0x0000000000000000 0xb0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-lock.o) + .ARM.attributes + 0x0000000000000000 0x2c /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-lock.o) + .text 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-freer.o) + .data 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-freer.o) + .bss 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-freer.o) + .text._free_r 0x0000000000000000 0x94 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-freer.o) + .debug_frame 0x0000000000000000 0x2c /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-freer.o) + .ARM.attributes + 0x0000000000000000 0x2c /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-freer.o) + .text 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-mallocr.o) + .data 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-mallocr.o) + .bss 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-mallocr.o) + .text.sbrk_aligned + 0x0000000000000000 0x44 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-mallocr.o) + .text._malloc_r + 0x0000000000000000 0x104 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-mallocr.o) + .bss.__malloc_free_list + 0x0000000000000000 0x4 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-mallocr.o) + .bss.__malloc_sbrk_start + 0x0000000000000000 0x4 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-mallocr.o) + .debug_frame 0x0000000000000000 0x50 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-mallocr.o) + .ARM.attributes + 0x0000000000000000 0x2c /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-mallocr.o) + .text 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-mlock.o) + .data 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-mlock.o) + .bss 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-mlock.o) + .text.__malloc_lock + 0x0000000000000000 0x10 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-mlock.o) + .text.__malloc_unlock + 0x0000000000000000 0x10 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-mlock.o) + .debug_frame 0x0000000000000000 0x40 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-mlock.o) + .ARM.attributes + 0x0000000000000000 0x2c /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-mlock.o) + .text 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-fflush.o) + .data 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-fflush.o) + .bss 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-fflush.o) + .text.__sflush_r + 0x0000000000000000 0x114 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-fflush.o) + .text._fflush_r + 0x0000000000000000 0x56 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-fflush.o) + .text.fflush 0x0000000000000000 0x30 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-fflush.o) + .debug_frame 0x0000000000000000 0x68 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-fflush.o) + .ARM.attributes + 0x0000000000000000 0x2c /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-fflush.o) + .text 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-sbrkr.o) + .data 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-sbrkr.o) + .bss 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-sbrkr.o) + .text._sbrk_r 0x0000000000000000 0x24 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-sbrkr.o) + .debug_frame 0x0000000000000000 0x2c /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-sbrkr.o) + .ARM.attributes + 0x0000000000000000 0x2c /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-sbrkr.o) + .data 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/libgcc.a(_udivsi3.o) + .bss 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/libgcc.a(_udivsi3.o) + .data 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/libgcc.a(_dvmd_tls.o) + .bss 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/libgcc.a(_dvmd_tls.o) + .text 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/crtend.o + .data 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/crtend.o + .bss 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/crtend.o + .rodata 0x0000000000000000 0x24 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/crtend.o + .eh_frame 0x0000000000000000 0x4 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/crtend.o + .comment 0x0000000000000000 0x44 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/crtend.o + .ARM.attributes + 0x0000000000000000 0x2c /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/crtend.o + .text 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/crtn.o + .data 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/crtn.o + .bss 0x0000000000000000 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/crtn.o + +Memory Configuration + +Name Origin Length Attributes +RAM 0x0000000020000000 0x0000000000001000 xrw +FLASH 0x0000000008000000 0x0000000000008000 xr +*default* 0x0000000000000000 0xffffffffffffffff + +Linker script and memory map + +LOAD /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/crti.o +LOAD /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/crtbegin.o +LOAD /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/crt0.o +LOAD ./Core/Src/gpio.o +LOAD ./Core/Src/main.o +LOAD ./Core/Src/stm32f0xx_hal_msp.o +LOAD ./Core/Src/stm32f0xx_it.o +LOAD ./Core/Src/syscalls.o +LOAD ./Core/Src/sysmem.o +LOAD ./Core/Src/system_stm32f0xx.o +LOAD ./Core/Src/usart.o +LOAD ./Core/Startup/startup_stm32f031k6tx.o +LOAD ./Core/reflow_oven_src/ked/ked.o +LOAD ./Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.o +LOAD ./Core/reflow_oven_src/reflow_main.o +LOAD ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o +LOAD ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o +LOAD ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.o +LOAD ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.o +LOAD ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.o +LOAD ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o +LOAD ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o +LOAD ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.o +LOAD ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.o +LOAD ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.o +LOAD ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.o +LOAD ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o +LOAD ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o +LOAD ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o +LOAD ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.o +LOAD ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o +LOAD ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.o +START GROUP +LOAD /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a +LOAD /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libm.a +END GROUP +START GROUP +LOAD /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/libgcc.a +LOAD /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a +END GROUP +START GROUP +LOAD /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/libgcc.a +LOAD /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a +LOAD /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libnosys.a +END GROUP +START GROUP +LOAD /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/libgcc.a +LOAD /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a +LOAD /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libnosys.a +END GROUP +LOAD /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/crtend.o +LOAD /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/crtn.o + 0x0000000020001000 _estack = (ORIGIN (RAM) + LENGTH (RAM)) + 0x0000000000000200 _Min_Heap_Size = 0x200 + 0x0000000000000400 _Min_Stack_Size = 0x400 + +.isr_vector 0x0000000008000000 0xc0 + 0x0000000008000000 . = ALIGN (0x4) + *(.isr_vector) + .isr_vector 0x0000000008000000 0xc0 ./Core/Startup/startup_stm32f031k6tx.o + 0x0000000008000000 g_pfnVectors + 0x00000000080000c0 . = ALIGN (0x4) + +.text 0x00000000080000c0 0x1c24 + 0x00000000080000c0 . = ALIGN (0x4) + *(.text) + .text 0x00000000080000c0 0x48 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/crtbegin.o + .text 0x0000000008000108 0x114 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/libgcc.a(_udivsi3.o) + 0x0000000008000108 __udivsi3 + 0x0000000008000108 __aeabi_uidiv + 0x0000000008000214 __aeabi_uidivmod + .text 0x000000000800021c 0x4 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/libgcc.a(_dvmd_tls.o) + 0x000000000800021c __aeabi_ldiv0 + 0x000000000800021c __aeabi_idiv0 + *(.text*) + .text.MX_GPIO_Init + 0x0000000008000220 0xe0 ./Core/Src/gpio.o + 0x0000000008000220 MX_GPIO_Init + .text.main 0x0000000008000300 0x1a ./Core/Src/main.o + 0x0000000008000300 main + .text.SystemClock_Config + 0x000000000800031a 0xae ./Core/Src/main.o + 0x000000000800031a SystemClock_Config + .text.Error_Handler + 0x00000000080003c8 0xa ./Core/Src/main.o + 0x00000000080003c8 Error_Handler + *fill* 0x00000000080003d2 0x2 + .text.HAL_MspInit + 0x00000000080003d4 0x48 ./Core/Src/stm32f0xx_hal_msp.o + 0x00000000080003d4 HAL_MspInit + .text.NMI_Handler + 0x000000000800041c 0x6 ./Core/Src/stm32f0xx_it.o + 0x000000000800041c NMI_Handler + .text.HardFault_Handler + 0x0000000008000422 0x6 ./Core/Src/stm32f0xx_it.o + 0x0000000008000422 HardFault_Handler + .text.SVC_Handler + 0x0000000008000428 0xa ./Core/Src/stm32f0xx_it.o + 0x0000000008000428 SVC_Handler + .text.PendSV_Handler + 0x0000000008000432 0xa ./Core/Src/stm32f0xx_it.o + 0x0000000008000432 PendSV_Handler + .text.SysTick_Handler + 0x000000000800043c 0xe ./Core/Src/stm32f0xx_it.o + 0x000000000800043c SysTick_Handler + .text.SystemInit + 0x000000000800044a 0xa ./Core/Src/system_stm32f0xx.o + 0x000000000800044a SystemInit + .text.MX_USART1_UART_Init + 0x0000000008000454 0x60 ./Core/Src/usart.o + 0x0000000008000454 MX_USART1_UART_Init + .text.HAL_UART_MspInit + 0x00000000080004b4 0x9c ./Core/Src/usart.o + 0x00000000080004b4 HAL_UART_MspInit + .text.Reset_Handler + 0x0000000008000550 0x50 ./Core/Startup/startup_stm32f031k6tx.o + 0x0000000008000550 Reset_Handler + .text.Default_Handler + 0x00000000080005a0 0x2 ./Core/Startup/startup_stm32f031k6tx.o + 0x00000000080005a0 TIM1_CC_IRQHandler + 0x00000000080005a0 PVD_IRQHandler + 0x00000000080005a0 I2C1_IRQHandler + 0x00000000080005a0 SPI1_IRQHandler + 0x00000000080005a0 EXTI2_3_IRQHandler + 0x00000000080005a0 ADC1_IRQHandler + 0x00000000080005a0 TIM17_IRQHandler + 0x00000000080005a0 RTC_IRQHandler + 0x00000000080005a0 TIM16_IRQHandler + 0x00000000080005a0 TIM3_IRQHandler + 0x00000000080005a0 EXTI4_15_IRQHandler + 0x00000000080005a0 RCC_IRQHandler + 0x00000000080005a0 DMA1_Channel1_IRQHandler + 0x00000000080005a0 Default_Handler + 0x00000000080005a0 TIM14_IRQHandler + 0x00000000080005a0 DMA1_Channel4_5_IRQHandler + 0x00000000080005a0 EXTI0_1_IRQHandler + 0x00000000080005a0 WWDG_IRQHandler + 0x00000000080005a0 TIM2_IRQHandler + 0x00000000080005a0 DMA1_Channel2_3_IRQHandler + 0x00000000080005a0 FLASH_IRQHandler + 0x00000000080005a0 USART1_IRQHandler + 0x00000000080005a0 TIM1_BRK_UP_TRG_COM_IRQHandler + .text.usartSendChar + 0x00000000080005a2 0x16 ./Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.o + 0x00000000080005a2 usartSendChar + .text.reflow_main + 0x00000000080005b8 0x18 ./Core/reflow_oven_src/reflow_main.o + 0x00000000080005b8 reflow_main + .text.HAL_Init + 0x00000000080005d0 0x28 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + 0x00000000080005d0 HAL_Init + .text.HAL_InitTick + 0x00000000080005f8 0x68 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + 0x00000000080005f8 HAL_InitTick + .text.HAL_IncTick + 0x0000000008000660 0x24 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + 0x0000000008000660 HAL_IncTick + .text.HAL_GetTick + 0x0000000008000684 0x14 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + 0x0000000008000684 HAL_GetTick + .text.__NVIC_SetPriority + 0x0000000008000698 0xdc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .text.SysTick_Config + 0x0000000008000774 0x48 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .text.HAL_NVIC_SetPriority + 0x00000000080007bc 0x2a ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + 0x00000000080007bc HAL_NVIC_SetPriority + .text.HAL_SYSTICK_Config + 0x00000000080007e6 0x1a ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + 0x00000000080007e6 HAL_SYSTICK_Config + .text.HAL_GPIO_Init + 0x0000000008000800 0x2d0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + 0x0000000008000800 HAL_GPIO_Init + .text.HAL_RCC_OscConfig + 0x0000000008000ad0 0x634 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + 0x0000000008000ad0 HAL_RCC_OscConfig + .text.HAL_RCC_ClockConfig + 0x0000000008001104 0x19c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + 0x0000000008001104 HAL_RCC_ClockConfig + .text.HAL_RCC_GetSysClockFreq + 0x00000000080012a0 0xac ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + 0x00000000080012a0 HAL_RCC_GetSysClockFreq + .text.HAL_RCC_GetHCLKFreq + 0x000000000800134c 0x14 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + 0x000000000800134c HAL_RCC_GetHCLKFreq + .text.HAL_RCC_GetPCLK1Freq + 0x0000000008001360 0x2c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + 0x0000000008001360 HAL_RCC_GetPCLK1Freq + .text.HAL_RCCEx_PeriphCLKConfig + 0x000000000800138c 0x19c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + 0x000000000800138c HAL_RCCEx_PeriphCLKConfig + .text.HAL_UART_Init + 0x0000000008001528 0xa8 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + 0x0000000008001528 HAL_UART_Init + .text.UART_SetConfig + 0x00000000080015d0 0x250 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + 0x00000000080015d0 UART_SetConfig + .text.UART_AdvFeatureConfig + 0x0000000008001820 0x168 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + 0x0000000008001820 UART_AdvFeatureConfig + .text.UART_CheckIdleState + 0x0000000008001988 0x150 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + 0x0000000008001988 UART_CheckIdleState + .text.UART_WaitOnFlagUntilTimeout + 0x0000000008001ad8 0xd2 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + 0x0000000008001ad8 UART_WaitOnFlagUntilTimeout + *fill* 0x0000000008001baa 0x2 + .text.UART_EndRxTransfer + 0x0000000008001bac 0xc8 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .text.memset 0x0000000008001c74 0x10 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-memset.o) + 0x0000000008001c74 memset + .text.__libc_init_array + 0x0000000008001c84 0x48 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-init.o) + 0x0000000008001c84 __libc_init_array + *(.glue_7) + .glue_7 0x0000000008001ccc 0x0 linker stubs + *(.glue_7t) + .glue_7t 0x0000000008001ccc 0x0 linker stubs + *(.eh_frame) + .eh_frame 0x0000000008001ccc 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/crtbegin.o + *(.init) + .init 0x0000000008001ccc 0x4 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/crti.o + 0x0000000008001ccc _init + .init 0x0000000008001cd0 0x8 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/crtn.o + *(.fini) + .fini 0x0000000008001cd8 0x4 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/crti.o + 0x0000000008001cd8 _fini + .fini 0x0000000008001cdc 0x8 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/crtn.o + 0x0000000008001ce4 . = ALIGN (0x4) + 0x0000000008001ce4 _etext = . + +.vfp11_veneer 0x0000000008001ce4 0x0 + .vfp11_veneer 0x0000000008001ce4 0x0 linker stubs + +.v4_bx 0x0000000008001ce4 0x0 + .v4_bx 0x0000000008001ce4 0x0 linker stubs + +.iplt 0x0000000008001ce4 0x0 + .iplt 0x0000000008001ce4 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/crtbegin.o + +.rodata 0x0000000008001ce4 0x38 + 0x0000000008001ce4 . = ALIGN (0x4) + *(.rodata) + *(.rodata*) + .rodata.AHBPrescTable + 0x0000000008001ce4 0x10 ./Core/Src/system_stm32f0xx.o + 0x0000000008001ce4 AHBPrescTable + .rodata.APBPrescTable + 0x0000000008001cf4 0x8 ./Core/Src/system_stm32f0xx.o + 0x0000000008001cf4 APBPrescTable + .rodata.aPLLMULFactorTable.1 + 0x0000000008001cfc 0x10 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .rodata.aPredivFactorTable.0 + 0x0000000008001d0c 0x10 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + 0x0000000008001d1c . = ALIGN (0x4) + +.rel.dyn 0x0000000008001d1c 0x0 + .rel.iplt 0x0000000008001d1c 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/crtbegin.o + +.ARM.extab 0x0000000008001d1c 0x0 + 0x0000000008001d1c . = ALIGN (0x4) + *(.ARM.extab* .gnu.linkonce.armextab.*) + 0x0000000008001d1c . = ALIGN (0x4) + +.ARM 0x0000000008001d1c 0x0 + 0x0000000008001d1c . = ALIGN (0x4) + 0x0000000008001d1c __exidx_start = . + *(.ARM.exidx*) + 0x0000000008001d1c __exidx_end = . + 0x0000000008001d1c . = ALIGN (0x4) + +.preinit_array 0x0000000008001d1c 0x0 + 0x0000000008001d1c . = ALIGN (0x4) + 0x0000000008001d1c PROVIDE (__preinit_array_start = .) + *(.preinit_array*) + 0x0000000008001d1c PROVIDE (__preinit_array_end = .) + 0x0000000008001d1c . = ALIGN (0x4) + +.init_array 0x0000000008001d1c 0x4 + 0x0000000008001d1c . = ALIGN (0x4) + 0x0000000008001d1c PROVIDE (__init_array_start = .) + *(SORT_BY_NAME(.init_array.*)) + *(.init_array*) + .init_array 0x0000000008001d1c 0x4 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/crtbegin.o + 0x0000000008001d20 PROVIDE (__init_array_end = .) + 0x0000000008001d20 . = ALIGN (0x4) + +.fini_array 0x0000000008001d20 0x4 + 0x0000000008001d20 . = ALIGN (0x4) + [!provide] PROVIDE (__fini_array_start = .) + *(SORT_BY_NAME(.fini_array.*)) + *(.fini_array*) + .fini_array 0x0000000008001d20 0x4 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/crtbegin.o + [!provide] PROVIDE (__fini_array_end = .) + 0x0000000008001d24 . = ALIGN (0x4) + 0x0000000008001d24 _sidata = LOADADDR (.data) + +.data 0x0000000020000000 0xc load address 0x0000000008001d24 + 0x0000000020000000 . = ALIGN (0x4) + 0x0000000020000000 _sdata = . + *(.data) + *(.data*) + .data.SystemCoreClock + 0x0000000020000000 0x4 ./Core/Src/system_stm32f0xx.o + 0x0000000020000000 SystemCoreClock + .data.uwTickPrio + 0x0000000020000004 0x4 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + 0x0000000020000004 uwTickPrio + .data.uwTickFreq + 0x0000000020000008 0x1 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + 0x0000000020000008 uwTickFreq + *(.RamFunc) + *(.RamFunc*) + 0x000000002000000c . = ALIGN (0x4) + *fill* 0x0000000020000009 0x3 + 0x000000002000000c _edata = . + +.igot.plt 0x000000002000000c 0x0 load address 0x0000000008001d30 + .igot.plt 0x000000002000000c 0x0 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/crtbegin.o + 0x000000002000000c . = ALIGN (0x4) + +.bss 0x000000002000000c 0xa8 load address 0x0000000008001d30 + 0x000000002000000c _sbss = . + 0x000000002000000c __bss_start__ = _sbss + *(.bss) + .bss 0x000000002000000c 0x1c /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/crtbegin.o + *(.bss*) + .bss.huart1 0x0000000020000028 0x88 ./Core/Src/usart.o + 0x0000000020000028 huart1 + .bss.uwTick 0x00000000200000b0 0x4 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + 0x00000000200000b0 uwTick + *(COMMON) + 0x00000000200000b4 . = ALIGN (0x4) + 0x00000000200000b4 _ebss = . + 0x00000000200000b4 __bss_end__ = _ebss + +._user_heap_stack + 0x00000000200000b4 0x604 load address 0x0000000008001d30 + 0x00000000200000b8 . = ALIGN (0x8) + *fill* 0x00000000200000b4 0x4 + [!provide] PROVIDE (end = .) + 0x00000000200000b8 PROVIDE (_end = .) + 0x00000000200002b8 . = (. + _Min_Heap_Size) + *fill* 0x00000000200000b8 0x200 + 0x00000000200006b8 . = (. + _Min_Stack_Size) + *fill* 0x00000000200002b8 0x400 + 0x00000000200006b8 . = ALIGN (0x8) + +/DISCARD/ + libc.a(*) + libm.a(*) + libgcc.a(*) + +.ARM.attributes + 0x0000000000000000 0x28 + *(.ARM.attributes) + .ARM.attributes + 0x0000000000000000 0x1e /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/crti.o + .ARM.attributes + 0x000000000000001e 0x2c /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/crtbegin.o + .ARM.attributes + 0x000000000000004a 0x2c ./Core/Src/gpio.o + .ARM.attributes + 0x0000000000000076 0x2c ./Core/Src/main.o + .ARM.attributes + 0x00000000000000a2 0x2c ./Core/Src/stm32f0xx_hal_msp.o + .ARM.attributes + 0x00000000000000ce 0x2c ./Core/Src/stm32f0xx_it.o + .ARM.attributes + 0x00000000000000fa 0x2c ./Core/Src/system_stm32f0xx.o + .ARM.attributes + 0x0000000000000126 0x2c ./Core/Src/usart.o + .ARM.attributes + 0x0000000000000152 0x21 ./Core/Startup/startup_stm32f031k6tx.o + .ARM.attributes + 0x0000000000000173 0x2c ./Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.o + .ARM.attributes + 0x000000000000019f 0x2c ./Core/reflow_oven_src/reflow_main.o + .ARM.attributes + 0x00000000000001cb 0x2c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .ARM.attributes + 0x00000000000001f7 0x2c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .ARM.attributes + 0x0000000000000223 0x2c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .ARM.attributes + 0x000000000000024f 0x2c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .ARM.attributes + 0x000000000000027b 0x2c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .ARM.attributes + 0x00000000000002a7 0x2c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .ARM.attributes + 0x00000000000002d3 0x2c /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-memset.o) + .ARM.attributes + 0x00000000000002ff 0x2c /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-init.o) + .ARM.attributes + 0x000000000000032b 0x1e /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/libgcc.a(_udivsi3.o) + .ARM.attributes + 0x0000000000000349 0x1e /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/libgcc.a(_dvmd_tls.o) + .ARM.attributes + 0x0000000000000367 0x1e /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/crtn.o +OUTPUT(reflow_oven.elf elf32-littlearm) +LOAD linker stubs +LOAD /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc.a +LOAD /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libm.a +LOAD /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/libgcc.a + +.comment 0x0000000000000000 0x43 + .comment 0x0000000000000000 0x43 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/crtbegin.o + 0x44 (size before relaxing) + .comment 0x0000000000000043 0x44 ./Core/Src/gpio.o + .comment 0x0000000000000043 0x44 ./Core/Src/main.o + .comment 0x0000000000000043 0x44 ./Core/Src/stm32f0xx_hal_msp.o + .comment 0x0000000000000043 0x44 ./Core/Src/stm32f0xx_it.o + .comment 0x0000000000000043 0x44 ./Core/Src/system_stm32f0xx.o + .comment 0x0000000000000043 0x44 ./Core/Src/usart.o + .comment 0x0000000000000043 0x44 ./Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.o + .comment 0x0000000000000043 0x44 ./Core/reflow_oven_src/reflow_main.o + .comment 0x0000000000000043 0x44 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .comment 0x0000000000000043 0x44 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .comment 0x0000000000000043 0x44 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .comment 0x0000000000000043 0x44 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .comment 0x0000000000000043 0x44 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .comment 0x0000000000000043 0x44 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + +.debug_info 0x0000000000000000 0x7431 + .debug_info 0x0000000000000000 0x301 ./Core/Src/gpio.o + .debug_info 0x0000000000000301 0x32f ./Core/Src/main.o + .debug_info 0x0000000000000630 0x199 ./Core/Src/stm32f0xx_hal_msp.o + .debug_info 0x00000000000007c9 0xd3 ./Core/Src/stm32f0xx_it.o + .debug_info 0x000000000000089c 0x242 ./Core/Src/system_stm32f0xx.o + .debug_info 0x0000000000000ade 0x92e ./Core/Src/usart.o + .debug_info 0x000000000000140c 0x23 ./Core/Startup/startup_stm32f031k6tx.o + .debug_info 0x000000000000142f 0xbb ./Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.o + .debug_info 0x00000000000014ea 0x659 ./Core/reflow_oven_src/reflow_main.o + .debug_info 0x0000000000001b43 0x65e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .debug_info 0x00000000000021a1 0x689 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .debug_info 0x000000000000282a 0x5c8 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .debug_info 0x0000000000002df2 0x844 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .debug_info 0x0000000000003636 0x35d ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .debug_info 0x0000000000003993 0x3a9e ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + +.debug_abbrev 0x0000000000000000 0x1688 + .debug_abbrev 0x0000000000000000 0x12f ./Core/Src/gpio.o + .debug_abbrev 0x000000000000012f 0x1c1 ./Core/Src/main.o + .debug_abbrev 0x00000000000002f0 0xc6 ./Core/Src/stm32f0xx_hal_msp.o + .debug_abbrev 0x00000000000003b6 0x73 ./Core/Src/stm32f0xx_it.o + .debug_abbrev 0x0000000000000429 0x11c ./Core/Src/system_stm32f0xx.o + .debug_abbrev 0x0000000000000545 0x1f6 ./Core/Src/usart.o + .debug_abbrev 0x000000000000073b 0x12 ./Core/Startup/startup_stm32f031k6tx.o + .debug_abbrev 0x000000000000074d 0x70 ./Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.o + .debug_abbrev 0x00000000000007bd 0x153 ./Core/reflow_oven_src/reflow_main.o + .debug_abbrev 0x0000000000000910 0x24b ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .debug_abbrev 0x0000000000000b5b 0x28c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .debug_abbrev 0x0000000000000de7 0x1c6 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .debug_abbrev 0x0000000000000fad 0x28b ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .debug_abbrev 0x0000000000001238 0x16f ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .debug_abbrev 0x00000000000013a7 0x2e1 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + +.debug_aranges 0x0000000000000000 0x630 + .debug_aranges + 0x0000000000000000 0x20 ./Core/Src/gpio.o + .debug_aranges + 0x0000000000000020 0x30 ./Core/Src/main.o + .debug_aranges + 0x0000000000000050 0x20 ./Core/Src/stm32f0xx_hal_msp.o + .debug_aranges + 0x0000000000000070 0x40 ./Core/Src/stm32f0xx_it.o + .debug_aranges + 0x00000000000000b0 0x28 ./Core/Src/system_stm32f0xx.o + .debug_aranges + 0x00000000000000d8 0x30 ./Core/Src/usart.o + .debug_aranges + 0x0000000000000108 0x28 ./Core/Startup/startup_stm32f031k6tx.o + .debug_aranges + 0x0000000000000130 0x20 ./Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.o + .debug_aranges + 0x0000000000000150 0x20 ./Core/reflow_oven_src/reflow_main.o + .debug_aranges + 0x0000000000000170 0xd0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .debug_aranges + 0x0000000000000240 0xc0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .debug_aranges + 0x0000000000000300 0x58 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .debug_aranges + 0x0000000000000358 0x80 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .debug_aranges + 0x00000000000003d8 0x30 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .debug_aranges + 0x0000000000000408 0x228 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + +.debug_rnglists + 0x0000000000000000 0x4aa + .debug_rnglists + 0x0000000000000000 0x14 ./Core/Src/gpio.o + .debug_rnglists + 0x0000000000000014 0x20 ./Core/Src/main.o + .debug_rnglists + 0x0000000000000034 0x13 ./Core/Src/stm32f0xx_hal_msp.o + .debug_rnglists + 0x0000000000000047 0x2b ./Core/Src/stm32f0xx_it.o + .debug_rnglists + 0x0000000000000072 0x1a ./Core/Src/system_stm32f0xx.o + .debug_rnglists + 0x000000000000008c 0x20 ./Core/Src/usart.o + .debug_rnglists + 0x00000000000000ac 0x19 ./Core/Startup/startup_stm32f031k6tx.o + .debug_rnglists + 0x00000000000000c5 0x13 ./Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.o + .debug_rnglists + 0x00000000000000d8 0x13 ./Core/reflow_oven_src/reflow_main.o + .debug_rnglists + 0x00000000000000eb 0x97 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .debug_rnglists + 0x0000000000000182 0x8c ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .debug_rnglists + 0x000000000000020e 0x3f ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .debug_rnglists + 0x000000000000024d 0x61 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .debug_rnglists + 0x00000000000002ae 0x21 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .debug_rnglists + 0x00000000000002cf 0x1db ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + +.debug_macro 0x0000000000000000 0xf705 + .debug_macro 0x0000000000000000 0x1c7 ./Core/Src/gpio.o + .debug_macro 0x00000000000001c7 0xa7e ./Core/Src/gpio.o + .debug_macro 0x0000000000000c45 0x12d ./Core/Src/gpio.o + .debug_macro 0x0000000000000d72 0x2e ./Core/Src/gpio.o + .debug_macro 0x0000000000000da0 0x22 ./Core/Src/gpio.o + .debug_macro 0x0000000000000dc2 0x22 ./Core/Src/gpio.o + .debug_macro 0x0000000000000de4 0x8e ./Core/Src/gpio.o + .debug_macro 0x0000000000000e72 0x51 ./Core/Src/gpio.o + .debug_macro 0x0000000000000ec3 0x103 ./Core/Src/gpio.o + .debug_macro 0x0000000000000fc6 0x6a ./Core/Src/gpio.o + .debug_macro 0x0000000000001030 0x1df ./Core/Src/gpio.o + .debug_macro 0x000000000000120f 0x1c ./Core/Src/gpio.o + .debug_macro 0x000000000000122b 0x22 ./Core/Src/gpio.o + .debug_macro 0x000000000000124d 0xaf ./Core/Src/gpio.o + .debug_macro 0x00000000000012fc 0x391 ./Core/Src/gpio.o + .debug_macro 0x000000000000168d 0x754b ./Core/Src/gpio.o + .debug_macro 0x0000000000008bd8 0x66 ./Core/Src/gpio.o + .debug_macro 0x0000000000008c3e 0x34be ./Core/Src/gpio.o + .debug_macro 0x000000000000c0fc 0x174 ./Core/Src/gpio.o + .debug_macro 0x000000000000c270 0x55 ./Core/Src/gpio.o + .debug_macro 0x000000000000c2c5 0x924 ./Core/Src/gpio.o + .debug_macro 0x000000000000cbe9 0xe5 ./Core/Src/gpio.o + .debug_macro 0x000000000000ccce 0x1ae ./Core/Src/gpio.o + .debug_macro 0x000000000000ce7c 0xce ./Core/Src/gpio.o + .debug_macro 0x000000000000cf4a 0x199 ./Core/Src/gpio.o + .debug_macro 0x000000000000d0e3 0x1ed ./Core/Src/gpio.o + .debug_macro 0x000000000000d2d0 0x34 ./Core/Src/gpio.o + .debug_macro 0x000000000000d304 0x43 ./Core/Src/gpio.o + .debug_macro 0x000000000000d347 0x28 ./Core/Src/gpio.o + .debug_macro 0x000000000000d36f 0xb0 ./Core/Src/gpio.o + .debug_macro 0x000000000000d41f 0x15a ./Core/Src/gpio.o + .debug_macro 0x000000000000d579 0x22c ./Core/Src/gpio.o + .debug_macro 0x000000000000d7a5 0x61 ./Core/Src/gpio.o + .debug_macro 0x000000000000d806 0xa5 ./Core/Src/gpio.o + .debug_macro 0x000000000000d8ab 0x4c ./Core/Src/gpio.o + .debug_macro 0x000000000000d8f7 0x112 ./Core/Src/gpio.o + .debug_macro 0x000000000000da09 0x5ba ./Core/Src/gpio.o + .debug_macro 0x000000000000dfc3 0x3e ./Core/Src/gpio.o + .debug_macro 0x000000000000e001 0x106 ./Core/Src/gpio.o + .debug_macro 0x000000000000e107 0x34 ./Core/Src/gpio.o + .debug_macro 0x000000000000e13b 0x1de ./Core/Src/main.o + .debug_macro 0x000000000000e319 0x10 ./Core/Src/main.o + .debug_macro 0x000000000000e329 0x1bd ./Core/Src/stm32f0xx_hal_msp.o + .debug_macro 0x000000000000e4e6 0x1c7 ./Core/Src/stm32f0xx_it.o + .debug_macro 0x000000000000e6ad 0x1ae ./Core/Src/system_stm32f0xx.o + .debug_macro 0x000000000000e85b 0x1c7 ./Core/Src/usart.o + .debug_macro 0x000000000000ea22 0x7c ./Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.o + .debug_macro 0x000000000000ea9e 0x10 ./Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.o + .debug_macro 0x000000000000eaae 0x1e9 ./Core/reflow_oven_src/reflow_main.o + .debug_macro 0x000000000000ec97 0x1d2 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .debug_macro 0x000000000000ee69 0x1ae ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .debug_macro 0x000000000000f017 0x1b5 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .debug_macro 0x000000000000f1cc 0x1c0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .debug_macro 0x000000000000f38c 0x1ae ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .debug_macro 0x000000000000f53a 0x1cb ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + +.debug_line 0x0000000000000000 0x93c3 + .debug_line 0x0000000000000000 0x695 ./Core/Src/gpio.o + .debug_line 0x0000000000000695 0x730 ./Core/Src/main.o + .debug_line 0x0000000000000dc5 0x677 ./Core/Src/stm32f0xx_hal_msp.o + .debug_line 0x000000000000143c 0x6db ./Core/Src/stm32f0xx_it.o + .debug_line 0x0000000000001b17 0x6e6 ./Core/Src/system_stm32f0xx.o + .debug_line 0x00000000000021fd 0x6e6 ./Core/Src/usart.o + .debug_line 0x00000000000028e3 0x7b ./Core/Startup/startup_stm32f031k6tx.o + .debug_line 0x000000000000295e 0x548 ./Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.o + .debug_line 0x0000000000002ea6 0x7ae ./Core/reflow_oven_src/reflow_main.o + .debug_line 0x0000000000003654 0x8f1 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .debug_line 0x0000000000003f45 0x99d ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .debug_line 0x00000000000048e2 0xa59 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .debug_line 0x000000000000533b 0xcd6 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .debug_line 0x0000000000006011 0x84d ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .debug_line 0x000000000000685e 0x2b65 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + +.debug_str 0x0000000000000000 0x5adc5 + .debug_str 0x0000000000000000 0x591b5 ./Core/Src/gpio.o + 0x59459 (size before relaxing) + .debug_str 0x00000000000591b5 0x2a3 ./Core/Src/main.o + 0x5960c (size before relaxing) + .debug_str 0x0000000000059458 0x2c ./Core/Src/stm32f0xx_hal_msp.o + 0x593ca (size before relaxing) + .debug_str 0x0000000000059484 0x82 ./Core/Src/stm32f0xx_it.o + 0x593b2 (size before relaxing) + .debug_str 0x0000000000059506 0x95 ./Core/Src/system_stm32f0xx.o + 0x59377 (size before relaxing) + .debug_str 0x000000000005959b 0x434 ./Core/Src/usart.o + 0x5991d (size before relaxing) + .debug_str 0x00000000000599cf 0x34 ./Core/Startup/startup_stm32f031k6tx.o + 0x6a (size before relaxing) + .debug_str 0x0000000000059a03 0x72 ./Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.o + 0x3c5b (size before relaxing) + .debug_str 0x0000000000059a75 0x26 ./Core/reflow_oven_src/reflow_main.o + 0x5981b (size before relaxing) + .debug_str 0x0000000000059a9b 0x4a0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + 0x598e9 (size before relaxing) + .debug_str 0x0000000000059f3b 0x1be ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + 0x596da (size before relaxing) + .debug_str 0x000000000005a0f9 0x14f ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + 0x59518 (size before relaxing) + .debug_str 0x000000000005a248 0x21a ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + 0x597b3 (size before relaxing) + .debug_str 0x000000000005a462 0x97 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + 0x594c0 (size before relaxing) + .debug_str 0x000000000005a4f9 0x8cc ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + 0x5a0db (size before relaxing) + +.debug_frame 0x0000000000000000 0x1390 + .debug_frame 0x0000000000000000 0x30 ./Core/Src/gpio.o + .debug_frame 0x0000000000000030 0x68 ./Core/Src/main.o + .debug_frame 0x0000000000000098 0x30 ./Core/Src/stm32f0xx_hal_msp.o + .debug_frame 0x00000000000000c8 0x9c ./Core/Src/stm32f0xx_it.o + .debug_frame 0x0000000000000164 0x4c ./Core/Src/system_stm32f0xx.o + .debug_frame 0x00000000000001b0 0x6c ./Core/Src/usart.o + .debug_frame 0x000000000000021c 0x30 ./Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.o + .debug_frame 0x000000000000024c 0x2c ./Core/reflow_oven_src/reflow_main.o + .debug_frame 0x0000000000000278 0x2a4 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.o + .debug_frame 0x000000000000051c 0x2a0 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.o + .debug_frame 0x00000000000007bc 0x110 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.o + .debug_frame 0x00000000000008cc 0x198 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o + .debug_frame 0x0000000000000a64 0x70 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.o + .debug_frame 0x0000000000000ad4 0x850 ./Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.o + .debug_frame 0x0000000000001324 0x20 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-memset.o) + .debug_frame 0x0000000000001344 0x2c /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-init.o) + .debug_frame 0x0000000000001370 0x20 /opt/st/stm32cubeide_1.13.2/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.linux64_1.1.1.202309131626/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v6-m/nofp/libgcc.a(_udivsi3.o) + +.debug_line_str + 0x0000000000000000 0x5e + .debug_line_str + 0x0000000000000000 0x5e ./Core/Startup/startup_stm32f031k6tx.o + 0x76 (size before relaxing) diff --git a/Software/reflow_oven/Debug/sources.mk b/Software/reflow_oven/Debug/sources.mk new file mode 100644 index 0000000..2629e35 --- /dev/null +++ b/Software/reflow_oven/Debug/sources.mk @@ -0,0 +1,31 @@ +################################################################################ +# 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 \ +Core/reflow_oven_src/ked \ +Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals \ +Core/reflow_oven_src \ +Drivers/STM32F0xx_HAL_Driver/Src \ + diff --git a/Software/reflow_oven/Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f031x6.h b/Software/reflow_oven/Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f031x6.h new file mode 100644 index 0000000..048f7c3 --- /dev/null +++ b/Software/reflow_oven/Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f031x6.h @@ -0,0 +1,5692 @@ +/** + ****************************************************************************** + * @file stm32f031x6.h + * @author MCD Application Team + * @brief CMSIS Cortex-M0 Device Peripheral Access Layer Header File. + * This file contains all the peripheral register's definitions, bits + * definitions and memory mapping for STM32F0xx devices. + * + * This file contains: + * - Data structures and the address mapping for all peripherals + * - Peripheral's registers declarations and bits definition + * - Macros to access peripheral's registers hardware + * + ****************************************************************************** + * @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. + * + ****************************************************************************** + */ +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f031x6 + * @{ + */ + +#ifndef __STM32F031x6_H +#define __STM32F031x6_H + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + +/** @addtogroup Configuration_section_for_CMSIS + * @{ + */ +/** + * @brief Configuration of the Cortex-M0 Processor and Core Peripherals + */ +#define __CM0_REV 0 /*!< Core Revision r0p0 */ +#define __MPU_PRESENT 0 /*!< STM32F0xx do not provide MPU */ +#define __NVIC_PRIO_BITS 2 /*!< STM32F0xx uses 2 Bits for the Priority Levels */ +#define __Vendor_SysTickConfig 0 /*!< Set to 1 if different SysTick Config is used */ + +/** + * @} + */ + +/** @addtogroup Peripheral_interrupt_number_definition + * @{ + */ + +/** + * @brief STM32F0xx Interrupt Number Definition, according to the selected device + * in @ref Library_configuration_section + */ + +/*!< Interrupt Number Definition */ +typedef enum +{ +/****** Cortex-M0 Processor Exceptions Numbers **************************************************************/ + NonMaskableInt_IRQn = -14, /*!< 2 Non Maskable Interrupt */ + HardFault_IRQn = -13, /*!< 3 Cortex-M0 Hard Fault Interrupt */ + SVCall_IRQn = -5, /*!< 11 Cortex-M0 SV Call Interrupt */ + PendSV_IRQn = -2, /*!< 14 Cortex-M0 Pend SV Interrupt */ + SysTick_IRQn = -1, /*!< 15 Cortex-M0 System Tick Interrupt */ + +/****** STM32F0 specific Interrupt Numbers ******************************************************************/ + WWDG_IRQn = 0, /*!< Window WatchDog Interrupt */ + PVD_IRQn = 1, /*!< PVD Interrupt through EXTI Lines 16 */ + RTC_IRQn = 2, /*!< RTC Interrupt through EXTI Lines 17, 19 and 20 */ + FLASH_IRQn = 3, /*!< FLASH global Interrupt */ + RCC_IRQn = 4, /*!< RCC global Interrupt */ + EXTI0_1_IRQn = 5, /*!< EXTI Line 0 and 1 Interrupt */ + EXTI2_3_IRQn = 6, /*!< EXTI Line 2 and 3 Interrupt */ + EXTI4_15_IRQn = 7, /*!< EXTI Line 4 to 15 Interrupt */ + DMA1_Channel1_IRQn = 9, /*!< DMA1 Channel 1 Interrupt */ + DMA1_Channel2_3_IRQn = 10, /*!< DMA1 Channel 2 and Channel 3 Interrupt */ + DMA1_Channel4_5_IRQn = 11, /*!< DMA1 Channel 4 and Channel 5 Interrupt */ + ADC1_IRQn = 12, /*!< ADC1 Interrupt */ + TIM1_BRK_UP_TRG_COM_IRQn = 13, /*!< TIM1 Break, Update, Trigger and Commutation Interrupt */ + TIM1_CC_IRQn = 14, /*!< TIM1 Capture Compare Interrupt */ + TIM2_IRQn = 15, /*!< TIM2 global Interrupt */ + TIM3_IRQn = 16, /*!< TIM3 global Interrupt */ + TIM14_IRQn = 19, /*!< TIM14 global Interrupt */ + TIM16_IRQn = 21, /*!< TIM16 global Interrupt */ + TIM17_IRQn = 22, /*!< TIM17 global Interrupt */ + I2C1_IRQn = 23, /*!< I2C1 Event Interrupt & EXTI Line23 Interrupt (I2C1 wakeup) */ + SPI1_IRQn = 25, /*!< SPI1 global Interrupt */ + USART1_IRQn = 27 /*!< USART1 global Interrupt & EXTI Line25 Interrupt (USART1 wakeup) */ +} IRQn_Type; + +/** + * @} + */ + +#include "core_cm0.h" /* Cortex-M0 processor and core peripherals */ +#include "system_stm32f0xx.h" /* STM32F0xx System Header */ +#include + +/** @addtogroup Peripheral_registers_structures + * @{ + */ + +/** + * @brief Analog to Digital Converter + */ + +typedef struct +{ + __IO uint32_t ISR; /*!< ADC interrupt and status register, Address offset: 0x00 */ + __IO uint32_t IER; /*!< ADC interrupt enable register, Address offset: 0x04 */ + __IO uint32_t CR; /*!< ADC control register, Address offset: 0x08 */ + __IO uint32_t CFGR1; /*!< ADC configuration register 1, Address offset: 0x0C */ + __IO uint32_t CFGR2; /*!< ADC configuration register 2, Address offset: 0x10 */ + __IO uint32_t SMPR; /*!< ADC sampling time register, Address offset: 0x14 */ + uint32_t RESERVED1; /*!< Reserved, 0x18 */ + uint32_t RESERVED2; /*!< Reserved, 0x1C */ + __IO uint32_t TR; /*!< ADC analog watchdog 1 threshold register, Address offset: 0x20 */ + uint32_t RESERVED3; /*!< Reserved, 0x24 */ + __IO uint32_t CHSELR; /*!< ADC group regular sequencer register, Address offset: 0x28 */ + uint32_t RESERVED4[5]; /*!< Reserved, 0x2C */ + __IO uint32_t DR; /*!< ADC group regular data register, Address offset: 0x40 */ +} ADC_TypeDef; + +typedef struct +{ + __IO uint32_t CCR; /*!< ADC common configuration register, 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 */ + uint32_t RESERVED2; /*!< Reserved, 0x0C */ + __IO uint32_t INIT; /*!< Initial CRC value register, Address offset: 0x10 */ + __IO uint32_t RESERVED3; /*!< Reserved, 0x14 */ +} 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 CCR; /*!< DMA channel x configuration register */ + __IO uint32_t CNDTR; /*!< DMA channel x number of data register */ + __IO uint32_t CPAR; /*!< DMA channel x peripheral address register */ + __IO uint32_t CMAR; /*!< DMA channel x memory address register */ +} DMA_Channel_TypeDef; + +typedef struct +{ + __IO uint32_t ISR; /*!< DMA interrupt status register, Address offset: 0x00 */ + __IO uint32_t IFCR; /*!< DMA interrupt flag clear register, Address offset: 0x04 */ +} DMA_TypeDef; + +/** + * @brief External Interrupt/Event Controller + */ + +typedef struct +{ + __IO uint32_t IMR; /*!>= 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/Software/reflow_oven/Drivers/CMSIS/Include/cmsis_armclang.h b/Software/reflow_oven/Drivers/CMSIS/Include/cmsis_armclang.h new file mode 100644 index 0000000..d8031b0 --- /dev/null +++ b/Software/reflow_oven/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/Software/reflow_oven/Drivers/CMSIS/Include/cmsis_compiler.h b/Software/reflow_oven/Drivers/CMSIS/Include/cmsis_compiler.h new file mode 100644 index 0000000..79a2cac --- /dev/null +++ b/Software/reflow_oven/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/Software/reflow_oven/Drivers/CMSIS/Include/cmsis_gcc.h b/Software/reflow_oven/Drivers/CMSIS/Include/cmsis_gcc.h new file mode 100644 index 0000000..1bd41a4 --- /dev/null +++ b/Software/reflow_oven/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/Software/reflow_oven/Drivers/CMSIS/Include/cmsis_iccarm.h b/Software/reflow_oven/Drivers/CMSIS/Include/cmsis_iccarm.h new file mode 100644 index 0000000..3c90a2c --- /dev/null +++ b/Software/reflow_oven/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/Software/reflow_oven/Drivers/CMSIS/Include/cmsis_version.h b/Software/reflow_oven/Drivers/CMSIS/Include/cmsis_version.h new file mode 100644 index 0000000..ae3f2e3 --- /dev/null +++ b/Software/reflow_oven/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/Software/reflow_oven/Drivers/CMSIS/Include/core_armv8mbl.h b/Software/reflow_oven/Drivers/CMSIS/Include/core_armv8mbl.h new file mode 100644 index 0000000..ec76ab2 --- /dev/null +++ b/Software/reflow_oven/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/Software/reflow_oven/Drivers/CMSIS/Include/core_armv8mml.h b/Software/reflow_oven/Drivers/CMSIS/Include/core_armv8mml.h new file mode 100644 index 0000000..2d0f106 --- /dev/null +++ b/Software/reflow_oven/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/Software/reflow_oven/Drivers/CMSIS/Include/core_cm0.h b/Software/reflow_oven/Drivers/CMSIS/Include/core_cm0.h new file mode 100644 index 0000000..6f82227 --- /dev/null +++ b/Software/reflow_oven/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/Software/reflow_oven/Drivers/CMSIS/Include/core_cm0plus.h b/Software/reflow_oven/Drivers/CMSIS/Include/core_cm0plus.h new file mode 100644 index 0000000..b9377e8 --- /dev/null +++ b/Software/reflow_oven/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/Software/reflow_oven/Drivers/CMSIS/Include/core_cm1.h b/Software/reflow_oven/Drivers/CMSIS/Include/core_cm1.h new file mode 100644 index 0000000..fd1c407 --- /dev/null +++ b/Software/reflow_oven/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/Software/reflow_oven/Drivers/CMSIS/Include/core_cm23.h b/Software/reflow_oven/Drivers/CMSIS/Include/core_cm23.h new file mode 100644 index 0000000..8202a8d --- /dev/null +++ b/Software/reflow_oven/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/Software/reflow_oven/Drivers/CMSIS/Include/core_cm3.h b/Software/reflow_oven/Drivers/CMSIS/Include/core_cm3.h new file mode 100644 index 0000000..b0dfbd3 --- /dev/null +++ b/Software/reflow_oven/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/Software/reflow_oven/Drivers/CMSIS/Include/core_cm33.h b/Software/reflow_oven/Drivers/CMSIS/Include/core_cm33.h new file mode 100644 index 0000000..02f82e2 --- /dev/null +++ b/Software/reflow_oven/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/Software/reflow_oven/Drivers/CMSIS/Include/core_cm4.h b/Software/reflow_oven/Drivers/CMSIS/Include/core_cm4.h new file mode 100644 index 0000000..308b868 --- /dev/null +++ b/Software/reflow_oven/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/Software/reflow_oven/Drivers/CMSIS/Include/core_cm7.h b/Software/reflow_oven/Drivers/CMSIS/Include/core_cm7.h new file mode 100644 index 0000000..ada6c2a --- /dev/null +++ b/Software/reflow_oven/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/Software/reflow_oven/Drivers/CMSIS/Include/core_sc000.h b/Software/reflow_oven/Drivers/CMSIS/Include/core_sc000.h new file mode 100644 index 0000000..9086c64 --- /dev/null +++ b/Software/reflow_oven/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/Software/reflow_oven/Drivers/CMSIS/Include/core_sc300.h b/Software/reflow_oven/Drivers/CMSIS/Include/core_sc300.h new file mode 100644 index 0000000..665822d --- /dev/null +++ b/Software/reflow_oven/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/Software/reflow_oven/Drivers/CMSIS/Include/mpu_armv7.h b/Software/reflow_oven/Drivers/CMSIS/Include/mpu_armv7.h new file mode 100644 index 0000000..7d4b600 --- /dev/null +++ b/Software/reflow_oven/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/Software/reflow_oven/Drivers/CMSIS/Include/mpu_armv8.h b/Software/reflow_oven/Drivers/CMSIS/Include/mpu_armv8.h new file mode 100644 index 0000000..99ee9f9 --- /dev/null +++ b/Software/reflow_oven/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/Software/reflow_oven/Drivers/CMSIS/Include/tz_context.h b/Software/reflow_oven/Drivers/CMSIS/Include/tz_context.h new file mode 100644 index 0000000..d4c1474 --- /dev/null +++ b/Software/reflow_oven/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/Software/reflow_oven/Drivers/CMSIS/LICENSE.txt b/Software/reflow_oven/Drivers/CMSIS/LICENSE.txt new file mode 100644 index 0000000..c0ee812 --- /dev/null +++ b/Software/reflow_oven/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/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h new file mode 100644 index 0000000..1d04707 --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h @@ -0,0 +1,4329 @@ +/** + ****************************************************************************** + * @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) 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. + * + ****************************************************************************** + */ + +/* 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 */ + +#if defined(STM32H5) +#define ADC_CHANNEL_VCORE ADC_CHANNEL_VDDCORE +#endif /* STM32H5 */ +/** + * @} + */ + +/** @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 + +#if defined(STM32U5) +#define __HAL_COMP_COMP1_EXTI_CLEAR_RASING_FLAG __HAL_COMP_COMP1_EXTI_CLEAR_RISING_FLAG +#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(STM32H5) || 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(STM32L5) || 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(STM32H5) +#define DAC_TRIGGER_LPTIM1_OUT DAC_TRIGGER_LPTIM1_CH1 +#define DAC_TRIGGER_LPTIM2_OUT DAC_TRIGGER_LPTIM2_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 +#define OB_USER_SRAM134_RST OB_USER_SRAM_RST +#define OB_SRAM134_RST_ERASE OB_SRAM_RST_ERASE +#define OB_SRAM134_RST_NOT_ERASE OB_SRAM_RST_NOT_ERASE +#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 */ + +#if defined(STM32H5) +#define SYSCFG_IT_FPU_IOC SBS_IT_FPU_IOC +#define SYSCFG_IT_FPU_DZC SBS_IT_FPU_DZC +#define SYSCFG_IT_FPU_UFC SBS_IT_FPU_UFC +#define SYSCFG_IT_FPU_OFC SBS_IT_FPU_OFC +#define SYSCFG_IT_FPU_IDC SBS_IT_FPU_IDC +#define SYSCFG_IT_FPU_IXC SBS_IT_FPU_IXC + +#define SYSCFG_BREAK_FLASH_ECC SBS_BREAK_FLASH_ECC +#define SYSCFG_BREAK_PVD SBS_BREAK_PVD +#define SYSCFG_BREAK_SRAM_ECC SBS_BREAK_SRAM_ECC +#define SYSCFG_BREAK_LOCKUP SBS_BREAK_LOCKUP + +#define SYSCFG_VREFBUF_VOLTAGE_SCALE0 VREFBUF_VOLTAGE_SCALE0 +#define SYSCFG_VREFBUF_VOLTAGE_SCALE1 VREFBUF_VOLTAGE_SCALE1 +#define SYSCFG_VREFBUF_VOLTAGE_SCALE2 VREFBUF_VOLTAGE_SCALE2 +#define SYSCFG_VREFBUF_VOLTAGE_SCALE3 VREFBUF_VOLTAGE_SCALE3 + +#define SYSCFG_VREFBUF_HIGH_IMPEDANCE_DISABLE VREFBUF_HIGH_IMPEDANCE_DISABLE +#define SYSCFG_VREFBUF_HIGH_IMPEDANCE_ENABLE VREFBUF_HIGH_IMPEDANCE_ENABLE + +#define SYSCFG_FASTMODEPLUS_PB6 SBS_FASTMODEPLUS_PB6 +#define SYSCFG_FASTMODEPLUS_PB7 SBS_FASTMODEPLUS_PB7 +#define SYSCFG_FASTMODEPLUS_PB8 SBS_FASTMODEPLUS_PB8 +#define SYSCFG_FASTMODEPLUS_PB9 SBS_FASTMODEPLUS_PB9 + +#define SYSCFG_ETH_MII SBS_ETH_MII +#define SYSCFG_ETH_RMII SBS_ETH_RMII +#define IS_SYSCFG_ETHERNET_CONFIG IS_SBS_ETHERNET_CONFIG + +#define SYSCFG_MEMORIES_ERASE_FLAG_IPMEE SBS_MEMORIES_ERASE_FLAG_IPMEE +#define SYSCFG_MEMORIES_ERASE_FLAG_MCLR SBS_MEMORIES_ERASE_FLAG_MCLR +#define IS_SYSCFG_MEMORIES_ERASE_FLAG IS_SBS_MEMORIES_ERASE_FLAG + +#define IS_SYSCFG_CODE_CONFIG IS_SBS_CODE_CONFIG + +#define SYSCFG_MPU_NSEC SBS_MPU_NSEC +#define SYSCFG_VTOR_NSEC SBS_VTOR_NSEC +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +#define SYSCFG_SAU SBS_SAU +#define SYSCFG_MPU_SEC SBS_MPU_SEC +#define SYSCFG_VTOR_AIRCR_SEC SBS_VTOR_AIRCR_SEC +#define SYSCFG_LOCK_ALL SBS_LOCK_ALL +#else +#define SYSCFG_LOCK_ALL SBS_LOCK_ALL +#endif /* __ARM_FEATURE_CMSE */ + +#define SYSCFG_CLK SBS_CLK +#define SYSCFG_CLASSB SBS_CLASSB +#define SYSCFG_FPU SBS_FPU +#define SYSCFG_ALL SBS_ALL + +#define SYSCFG_SEC SBS_SEC +#define SYSCFG_NSEC SBS_NSEC + +#define __HAL_SYSCFG_FPU_INTERRUPT_ENABLE __HAL_SBS_FPU_INTERRUPT_ENABLE +#define __HAL_SYSCFG_FPU_INTERRUPT_DISABLE __HAL_SBS_FPU_INTERRUPT_DISABLE + +#define __HAL_SYSCFG_BREAK_ECC_LOCK __HAL_SBS_BREAK_ECC_LOCK +#define __HAL_SYSCFG_BREAK_LOCKUP_LOCK __HAL_SBS_BREAK_LOCKUP_LOCK +#define __HAL_SYSCFG_BREAK_PVD_LOCK __HAL_SBS_BREAK_PVD_LOCK +#define __HAL_SYSCFG_BREAK_SRAM_ECC_LOCK __HAL_SBS_BREAK_SRAM_ECC_LOCK + +#define __HAL_SYSCFG_FASTMODEPLUS_ENABLE __HAL_SBS_FASTMODEPLUS_ENABLE +#define __HAL_SYSCFG_FASTMODEPLUS_DISABLE __HAL_SBS_FASTMODEPLUS_DISABLE + +#define __HAL_SYSCFG_GET_MEMORIES_ERASE_STATUS __HAL_SBS_GET_MEMORIES_ERASE_STATUS +#define __HAL_SYSCFG_CLEAR_MEMORIES_ERASE_STATUS __HAL_SBS_CLEAR_MEMORIES_ERASE_STATUS + +#define IS_SYSCFG_FPU_INTERRUPT IS_SBS_FPU_INTERRUPT +#define IS_SYSCFG_BREAK_CONFIG IS_SBS_BREAK_CONFIG +#define IS_SYSCFG_VREFBUF_VOLTAGE_SCALE IS_VREFBUF_VOLTAGE_SCALE +#define IS_SYSCFG_VREFBUF_HIGH_IMPEDANCE IS_VREFBUF_HIGH_IMPEDANCE +#define IS_SYSCFG_VREFBUF_TRIMMING IS_VREFBUF_TRIMMING +#define IS_SYSCFG_FASTMODEPLUS IS_SBS_FASTMODEPLUS +#define IS_SYSCFG_ITEMS_ATTRIBUTES IS_SBS_ITEMS_ATTRIBUTES +#define IS_SYSCFG_ATTRIBUTES IS_SBS_ATTRIBUTES +#define IS_SYSCFG_LOCK_ITEMS IS_SBS_LOCK_ITEMS + +#define HAL_SYSCFG_VREFBUF_VoltageScalingConfig HAL_VREFBUF_VoltageScalingConfig +#define HAL_SYSCFG_VREFBUF_HighImpedanceConfig HAL_VREFBUF_HighImpedanceConfig +#define HAL_SYSCFG_VREFBUF_TrimmingConfig HAL_VREFBUF_TrimmingConfig +#define HAL_SYSCFG_EnableVREFBUF HAL_EnableVREFBUF +#define HAL_SYSCFG_DisableVREFBUF HAL_DisableVREFBUF + +#define HAL_SYSCFG_EnableIOAnalogSwitchBooster HAL_SBS_EnableIOAnalogSwitchBooster +#define HAL_SYSCFG_DisableIOAnalogSwitchBooster HAL_SBS_DisableIOAnalogSwitchBooster +#define HAL_SYSCFG_ETHInterfaceSelect HAL_SBS_ETHInterfaceSelect + +#define HAL_SYSCFG_Lock HAL_SBS_Lock +#define HAL_SYSCFG_GetLock HAL_SBS_GetLock + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +#define HAL_SYSCFG_ConfigAttributes HAL_SBS_ConfigAttributes +#define HAL_SYSCFG_GetConfigAttributes HAL_SBS_GetConfigAttributes +#endif /* __ARM_FEATURE_CMSE */ + +#endif /* STM32H5 */ + + +/** + * @} + */ + + +/** @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) || defined(STM32H5) +#define GPIO_AF0_RTC_50Hz GPIO_AF0_RTC_50HZ +#endif /* STM32U5 || STM32H5 */ +#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 +#define GTZC_PERIPH_LTDC GTZC_PERIPH_LTDCUSB +#endif /* STM32U5 */ +#if defined(STM32H5) +#define GTZC_PERIPH_DAC12 GTZC_PERIPH_DAC1 +#define GTZC_PERIPH_ADC12 GTZC_PERIPH_ADC +#define GTZC_PERIPH_USBFS GTZC_PERIPH_USB +#endif /* STM32H5 */ +#if defined(STM32H5) || defined(STM32U5) +#define GTZC_MCPBB_NB_VCTR_REG_MAX GTZC_MPCBB_NB_VCTR_REG_MAX +#define GTZC_MCPBB_NB_LCK_VCTR_REG_MAX GTZC_MPCBB_NB_LCK_VCTR_REG_MAX +#define GTZC_MCPBB_SUPERBLOCK_UNLOCKED GTZC_MPCBB_SUPERBLOCK_UNLOCKED +#define GTZC_MCPBB_SUPERBLOCK_LOCKED GTZC_MPCBB_SUPERBLOCK_LOCKED +#define GTZC_MCPBB_BLOCK_NSEC GTZC_MPCBB_BLOCK_NSEC +#define GTZC_MCPBB_BLOCK_SEC GTZC_MPCBB_BLOCK_SEC +#define GTZC_MCPBB_BLOCK_NPRIV GTZC_MPCBB_BLOCK_NPRIV +#define GTZC_MCPBB_BLOCK_PRIV GTZC_MPCBB_BLOCK_PRIV +#define GTZC_MCPBB_LOCK_OFF GTZC_MPCBB_LOCK_OFF +#define GTZC_MCPBB_LOCK_ON GTZC_MPCBB_LOCK_ON +#endif /* STM32H5 || 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) || defined(STM32U5) +#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(STM32H5) +#define TAMP_SECRETDEVICE_ERASE_NONE TAMP_DEVICESECRETS_ERASE_NONE +#define TAMP_SECRETDEVICE_ERASE_BKP_SRAM TAMP_DEVICESECRETS_ERASE_BKPSRAM +#endif /* STM32H5 */ + +#if defined(STM32WBA) +#define TAMP_SECRETDEVICE_ERASE_NONE TAMP_DEVICESECRETS_ERASE_NONE +#define TAMP_SECRETDEVICE_ERASE_SRAM2 TAMP_DEVICESECRETS_ERASE_SRAM2 +#define TAMP_SECRETDEVICE_ERASE_RHUK TAMP_DEVICESECRETS_ERASE_RHUK +#define TAMP_SECRETDEVICE_ERASE_ICACHE TAMP_DEVICESECRETS_ERASE_ICACHE +#define TAMP_SECRETDEVICE_ERASE_SAES_AES_HASH TAMP_DEVICESECRETS_ERASE_SAES_AES_HASH +#define TAMP_SECRETDEVICE_ERASE_PKA_SRAM TAMP_DEVICESECRETS_ERASE_PKA_SRAM +#define TAMP_SECRETDEVICE_ERASE_ALL TAMP_DEVICESECRETS_ERASE_ALL +#endif /* STM32WBA */ + +#if defined(STM32H5) || defined(STM32WBA) +#define TAMP_SECRETDEVICE_ERASE_DISABLE TAMP_DEVICESECRETS_ERASE_NONE +#define TAMP_SECRETDEVICE_ERASE_ENABLE TAMP_SECRETDEVICE_ERASE_ALL +#endif /* STM32H5 || STM32WBA */ + +#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) || defined(STM32L0) +#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 || STM32L0 */ + +/** + * @} + */ + + +/** @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) +#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_SRAM6_PAGE1_STOP_RETENTION PWR_SRAM6_PAGE1_STOP +#define PWR_SRAM6_PAGE2_STOP_RETENTION PWR_SRAM6_PAGE2_STOP +#define PWR_SRAM6_PAGE3_STOP_RETENTION PWR_SRAM6_PAGE3_STOP +#define PWR_SRAM6_PAGE4_STOP_RETENTION PWR_SRAM6_PAGE4_STOP +#define PWR_SRAM6_PAGE5_STOP_RETENTION PWR_SRAM6_PAGE5_STOP +#define PWR_SRAM6_PAGE6_STOP_RETENTION PWR_SRAM6_PAGE6_STOP +#define PWR_SRAM6_PAGE7_STOP_RETENTION PWR_SRAM6_PAGE7_STOP +#define PWR_SRAM6_PAGE8_STOP_RETENTION PWR_SRAM6_PAGE8_STOP +#define PWR_SRAM6_FULL_STOP_RETENTION PWR_SRAM6_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_JPEGRAM_FULL_STOP_RETENTION PWR_JPEGRAM_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_SRAM6_FULL_RUN_RETENTION PWR_SRAM6_FULL_RUN + +#define PWR_ALL_RAM_RUN_RETENTION_MASK PWR_ALL_RAM_RUN_MASK +#endif + +/** + * @} + */ + +/** @defgroup HAL_RTC_Aliased_Functions HAL RTC Aliased Functions maintained for legacy purpose + * @{ + */ +#if defined(STM32H5) || defined(STM32WBA) +#define HAL_RTCEx_SetBoothardwareKey HAL_RTCEx_LockBootHardwareKey +#define HAL_RTCEx_BKUPBlock_Enable HAL_RTCEx_BKUPBlock +#define HAL_RTCEx_BKUPBlock_Disable HAL_RTCEx_BKUPUnblock +#define HAL_RTCEx_Erase_SecretDev_Conf HAL_RTCEx_ConfigEraseDeviceSecrets +#endif /* STM32H5 || STM32WBA */ + +/** + * @} + */ + +/** @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 +#define RCC_SPI4CLKSOURCE_D2PCLK1 RCC_SPI4CLKSOURCE_D2PCLK2 +#define RCC_SPI5CLKSOURCE_D2PCLK1 RCC_SPI5CLKSOURCE_D2PCLK2 +#define RCC_SPI45CLKSOURCE_D2PCLK1 RCC_SPI45CLKSOURCE_D2PCLK2 +#define RCC_SPI45CLKSOURCE_CDPCLK1 RCC_SPI45CLKSOURCE_CDPCLK2 +#define RCC_SPI45CLKSOURCE_PCLK1 RCC_SPI45CLKSOURCE_PCLK2 +#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 */ + +#if defined(STM32H5) +#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 + +#define RCC_PLLSOURCE_NONE RCC_PLL1_SOURCE_NONE +#define RCC_PLLSOURCE_HSI RCC_PLL1_SOURCE_HSI +#define RCC_PLLSOURCE_CSI RCC_PLL1_SOURCE_CSI +#define RCC_PLLSOURCE_HSE RCC_PLL1_SOURCE_HSE +#define RCC_PLLVCIRANGE_0 RCC_PLL1_VCIRANGE_0 +#define RCC_PLLVCIRANGE_1 RCC_PLL1_VCIRANGE_1 +#define RCC_PLLVCIRANGE_2 RCC_PLL1_VCIRANGE_2 +#define RCC_PLLVCIRANGE_3 RCC_PLL1_VCIRANGE_3 +#define RCC_PLL1VCOWIDE RCC_PLL1_VCORANGE_WIDE +#define RCC_PLL1VCOMEDIUM RCC_PLL1_VCORANGE_MEDIUM + +#define IS_RCC_PLLSOURCE IS_RCC_PLL1_SOURCE +#define IS_RCC_PLLRGE_VALUE IS_RCC_PLL1_VCIRGE_VALUE +#define IS_RCC_PLLVCORGE_VALUE IS_RCC_PLL1_VCORGE_VALUE +#define IS_RCC_PLLCLOCKOUT_VALUE IS_RCC_PLL1_CLOCKOUT_VALUE +#define IS_RCC_PLL_FRACN_VALUE IS_RCC_PLL1_FRACN_VALUE +#define IS_RCC_PLLM_VALUE IS_RCC_PLL1_DIVM_VALUE +#define IS_RCC_PLLN_VALUE IS_RCC_PLL1_MULN_VALUE +#define IS_RCC_PLLP_VALUE IS_RCC_PLL1_DIVP_VALUE +#define IS_RCC_PLLQ_VALUE IS_RCC_PLL1_DIVQ_VALUE +#define IS_RCC_PLLR_VALUE IS_RCC_PLL1_DIVR_VALUE + +#define __HAL_RCC_PLL_ENABLE __HAL_RCC_PLL1_ENABLE +#define __HAL_RCC_PLL_DISABLE __HAL_RCC_PLL1_DISABLE +#define __HAL_RCC_PLL_FRACN_ENABLE __HAL_RCC_PLL1_FRACN_ENABLE +#define __HAL_RCC_PLL_FRACN_DISABLE __HAL_RCC_PLL1_FRACN_DISABLE +#define __HAL_RCC_PLL_CONFIG __HAL_RCC_PLL1_CONFIG +#define __HAL_RCC_PLL_PLLSOURCE_CONFIG __HAL_RCC_PLL1_PLLSOURCE_CONFIG +#define __HAL_RCC_PLL_DIVM_CONFIG __HAL_RCC_PLL1_DIVM_CONFIG +#define __HAL_RCC_PLL_FRACN_CONFIG __HAL_RCC_PLL1_FRACN_CONFIG +#define __HAL_RCC_PLL_VCIRANGE __HAL_RCC_PLL1_VCIRANGE +#define __HAL_RCC_PLL_VCORANGE __HAL_RCC_PLL1_VCORANGE +#define __HAL_RCC_GET_PLL_OSCSOURCE __HAL_RCC_GET_PLL1_OSCSOURCE +#define __HAL_RCC_PLLCLKOUT_ENABLE __HAL_RCC_PLL1_CLKOUT_ENABLE +#define __HAL_RCC_PLLCLKOUT_DISABLE __HAL_RCC_PLL1_CLKOUT_DISABLE +#define __HAL_RCC_GET_PLLCLKOUT_CONFIG __HAL_RCC_GET_PLL1_CLKOUT_CONFIG + +#define __HAL_RCC_PLL2FRACN_ENABLE __HAL_RCC_PLL2_FRACN_ENABLE +#define __HAL_RCC_PLL2FRACN_DISABLE __HAL_RCC_PLL2_FRACN_DISABLE +#define __HAL_RCC_PLL2CLKOUT_ENABLE __HAL_RCC_PLL2_CLKOUT_ENABLE +#define __HAL_RCC_PLL2CLKOUT_DISABLE __HAL_RCC_PLL2_CLKOUT_DISABLE +#define __HAL_RCC_PLL2FRACN_CONFIG __HAL_RCC_PLL2_FRACN_CONFIG +#define __HAL_RCC_GET_PLL2CLKOUT_CONFIG __HAL_RCC_GET_PLL2_CLKOUT_CONFIG + +#define __HAL_RCC_PLL3FRACN_ENABLE __HAL_RCC_PLL3_FRACN_ENABLE +#define __HAL_RCC_PLL3FRACN_DISABLE __HAL_RCC_PLL3_FRACN_DISABLE +#define __HAL_RCC_PLL3CLKOUT_ENABLE __HAL_RCC_PLL3_CLKOUT_ENABLE +#define __HAL_RCC_PLL3CLKOUT_DISABLE __HAL_RCC_PLL3_CLKOUT_DISABLE +#define __HAL_RCC_PLL3FRACN_CONFIG __HAL_RCC_PLL3_FRACN_CONFIG +#define __HAL_RCC_GET_PLL3CLKOUT_CONFIG __HAL_RCC_GET_PLL3_CLKOUT_CONFIG + +#define RCC_PLL2VCIRANGE_0 RCC_PLL2_VCIRANGE_0 +#define RCC_PLL2VCIRANGE_1 RCC_PLL2_VCIRANGE_1 +#define RCC_PLL2VCIRANGE_2 RCC_PLL2_VCIRANGE_2 +#define RCC_PLL2VCIRANGE_3 RCC_PLL2_VCIRANGE_3 + +#define RCC_PLL2VCOWIDE RCC_PLL2_VCORANGE_WIDE +#define RCC_PLL2VCOMEDIUM RCC_PLL2_VCORANGE_MEDIUM + +#define RCC_PLL2SOURCE_NONE RCC_PLL2_SOURCE_NONE +#define RCC_PLL2SOURCE_HSI RCC_PLL2_SOURCE_HSI +#define RCC_PLL2SOURCE_CSI RCC_PLL2_SOURCE_CSI +#define RCC_PLL2SOURCE_HSE RCC_PLL2_SOURCE_HSE + +#define RCC_PLL3VCIRANGE_0 RCC_PLL3_VCIRANGE_0 +#define RCC_PLL3VCIRANGE_1 RCC_PLL3_VCIRANGE_1 +#define RCC_PLL3VCIRANGE_2 RCC_PLL3_VCIRANGE_2 +#define RCC_PLL3VCIRANGE_3 RCC_PLL3_VCIRANGE_3 + +#define RCC_PLL3VCOWIDE RCC_PLL3_VCORANGE_WIDE +#define RCC_PLL3VCOMEDIUM RCC_PLL3_VCORANGE_MEDIUM + +#define RCC_PLL3SOURCE_NONE RCC_PLL3_SOURCE_NONE +#define RCC_PLL3SOURCE_HSI RCC_PLL3_SOURCE_HSI +#define RCC_PLL3SOURCE_CSI RCC_PLL3_SOURCE_CSI +#define RCC_PLL3SOURCE_HSE RCC_PLL3_SOURCE_HSE + + +#endif /* STM32H5 */ + +/** + * @} + */ + +/** @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 (STM32WBA) || defined (STM32H5) || 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 + +#if defined (STM32H5) +#define __HAL_RCC_RTCAPB_CLK_ENABLE __HAL_RCC_RTC_CLK_ENABLE +#define __HAL_RCC_RTCAPB_CLK_DISABLE __HAL_RCC_RTC_CLK_DISABLE +#endif /* STM32H5 */ + +/** + * @} + */ + +/** @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/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h new file mode 100644 index 0000000..fe19943 --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h @@ -0,0 +1,584 @@ +/** + ****************************************************************************** + * @file stm32f0xx_hal.h + * @author MCD Application Team + * @brief This file contains all the functions prototypes for the HAL + * module driver. + ****************************************************************************** + * @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 __STM32F0xx_HAL_H +#define __STM32F0xx_HAL_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f0xx_hal_conf.h" + +/** @addtogroup STM32F0xx_HAL_Driver + * @{ + */ + +/** @addtogroup HAL + * @{ + */ + +/* Private macros ------------------------------------------------------------*/ +/** @addtogroup HAL_Private_Macros + * @{ + */ +#if defined(STM32F091xC) || defined(STM32F098xx) || defined(STM32F042x6) || defined(STM32F048xx) || \ + defined(STM32F030x6) || defined(STM32F031x6) || defined(STM32F038xx) || defined(STM32F070x6) || \ + defined(STM32F070xB) || defined(STM32F030x6) +#define IS_SYSCFG_FASTMODEPLUS(__PIN__) ((((__PIN__) & SYSCFG_FASTMODEPLUS_PA9) == SYSCFG_FASTMODEPLUS_PA9) || \ + (((__PIN__) & SYSCFG_FASTMODEPLUS_PA10) == SYSCFG_FASTMODEPLUS_PA10) || \ + (((__PIN__) & SYSCFG_FASTMODEPLUS_PB6) == SYSCFG_FASTMODEPLUS_PB6) || \ + (((__PIN__) & SYSCFG_FASTMODEPLUS_PB7) == SYSCFG_FASTMODEPLUS_PB7) || \ + (((__PIN__) & SYSCFG_FASTMODEPLUS_PB8) == SYSCFG_FASTMODEPLUS_PB8) || \ + (((__PIN__) & SYSCFG_FASTMODEPLUS_PB9) == SYSCFG_FASTMODEPLUS_PB9)) +#else +#define IS_SYSCFG_FASTMODEPLUS(__PIN__) ((((__PIN__) & SYSCFG_FASTMODEPLUS_PB6) == SYSCFG_FASTMODEPLUS_PB6) || \ + (((__PIN__) & SYSCFG_FASTMODEPLUS_PB7) == SYSCFG_FASTMODEPLUS_PB7) || \ + (((__PIN__) & SYSCFG_FASTMODEPLUS_PB8) == SYSCFG_FASTMODEPLUS_PB8) || \ + (((__PIN__) & SYSCFG_FASTMODEPLUS_PB9) == SYSCFG_FASTMODEPLUS_PB9)) +#endif +#if defined(SYSCFG_CFGR1_PA11_PA12_RMP) +#define IS_HAL_REMAP_PIN(RMP) ((RMP) == HAL_REMAP_PA11_PA12) +#endif /* SYSCFG_CFGR1_PA11_PA12_RMP */ +#if defined(STM32F091xC) || defined(STM32F098xx) +#define IS_HAL_SYSCFG_IRDA_ENV_SEL(SEL) (((SEL) == HAL_SYSCFG_IRDA_ENV_SEL_TIM16) || \ + ((SEL) == HAL_SYSCFG_IRDA_ENV_SEL_USART1) || \ + ((SEL) == HAL_SYSCFG_IRDA_ENV_SEL_USART4)) +#endif /* STM32F091xC || STM32F098xx */ +/** + * @} + */ + +/* 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; + +/** + * @} + */ + +#if defined(SYSCFG_CFGR1_PA11_PA12_RMP) +/** @defgroup HAL_Pin_remapping HAL Pin remapping + * @{ + */ +#define HAL_REMAP_PA11_PA12 (SYSCFG_CFGR1_PA11_PA12_RMP) /*!< PA11 and PA12 remapping bit for small packages (28 and 20 pins). + 0: No remap (pin pair PA9/10 mapped on the pins) + 1: Remap (pin pair PA11/12 mapped instead of PA9/10) */ + +/** + * @} + */ +#endif /* SYSCFG_CFGR1_PA11_PA12_RMP */ + +#if defined(STM32F091xC) || defined(STM32F098xx) +/** @defgroup HAL_IRDA_ENV_SEL HAL IRDA Envelope Selection + * @note Applicable on STM32F09x + * @{ + */ +#define HAL_SYSCFG_IRDA_ENV_SEL_TIM16 (SYSCFG_CFGR1_IRDA_ENV_SEL_0 & SYSCFG_CFGR1_IRDA_ENV_SEL_1) /* 00: Timer16 is selected as IRDA Modulation envelope source */ +#define HAL_SYSCFG_IRDA_ENV_SEL_USART1 (SYSCFG_CFGR1_IRDA_ENV_SEL_0) /* 01: USART1 is selected as IRDA Modulation envelope source */ +#define HAL_SYSCFG_IRDA_ENV_SEL_USART4 (SYSCFG_CFGR1_IRDA_ENV_SEL_1) /* 10: USART4 is selected as IRDA Modulation envelope source */ + +/** + * @} + */ +#endif /* STM32F091xC || STM32F098xx */ + + +/** @defgroup SYSCFG_FastModePlus_GPIO Fast-mode Plus on GPIO + * @{ + */ + +/** @brief Fast-mode Plus driving capability on a specific GPIO + */ +#if defined(STM32F091xC) || defined(STM32F098xx) || defined(STM32F042x6) || defined(STM32F048xx) || \ + defined(STM32F030x6) || defined(STM32F031x6) || defined(STM32F038xx) || defined(STM32F070x6) || \ + defined(STM32F070xB) || defined(STM32F030x6) +#define SYSCFG_FASTMODEPLUS_PA9 SYSCFG_CFGR1_I2C_FMP_PA9 /*!< Enable Fast-mode Plus on PA9 */ +#define SYSCFG_FASTMODEPLUS_PA10 SYSCFG_CFGR1_I2C_FMP_PA10 /*!< Enable Fast-mode Plus on PA10 */ +#endif +#define SYSCFG_FASTMODEPLUS_PB6 SYSCFG_CFGR1_I2C_FMP_PB6 /*!< Enable Fast-mode Plus on PB6 */ +#define SYSCFG_FASTMODEPLUS_PB7 SYSCFG_CFGR1_I2C_FMP_PB7 /*!< Enable Fast-mode Plus on PB7 */ +#define SYSCFG_FASTMODEPLUS_PB8 SYSCFG_CFGR1_I2C_FMP_PB8 /*!< Enable Fast-mode Plus on PB8 */ +#define SYSCFG_FASTMODEPLUS_PB9 SYSCFG_CFGR1_I2C_FMP_PB9 /*!< Enable Fast-mode Plus on PB9 */ + +/** + * @} + */ + + +#if defined(STM32F091xC) || defined (STM32F098xx) +/** @defgroup HAL_ISR_Wrapper HAL ISR Wrapper + * @brief ISR Wrapper + * @note applicable on STM32F09x + * @{ + */ +#define HAL_SYSCFG_ITLINE0 ( 0x00000000U) /*!< Internal define for macro handling */ +#define HAL_SYSCFG_ITLINE1 ( 0x00000001U) /*!< Internal define for macro handling */ +#define HAL_SYSCFG_ITLINE2 ( 0x00000002U) /*!< Internal define for macro handling */ +#define HAL_SYSCFG_ITLINE3 ( 0x00000003U) /*!< Internal define for macro handling */ +#define HAL_SYSCFG_ITLINE4 ( 0x00000004U) /*!< Internal define for macro handling */ +#define HAL_SYSCFG_ITLINE5 ( 0x00000005U) /*!< Internal define for macro handling */ +#define HAL_SYSCFG_ITLINE6 ( 0x00000006U) /*!< Internal define for macro handling */ +#define HAL_SYSCFG_ITLINE7 ( 0x00000007U) /*!< Internal define for macro handling */ +#define HAL_SYSCFG_ITLINE8 ( 0x00000008U) /*!< Internal define for macro handling */ +#define HAL_SYSCFG_ITLINE9 ( 0x00000009U) /*!< Internal define for macro handling */ +#define HAL_SYSCFG_ITLINE10 ( 0x0000000AU) /*!< Internal define for macro handling */ +#define HAL_SYSCFG_ITLINE11 ( 0x0000000BU) /*!< Internal define for macro handling */ +#define HAL_SYSCFG_ITLINE12 ( 0x0000000CU) /*!< Internal define for macro handling */ +#define HAL_SYSCFG_ITLINE13 ( 0x0000000DU) /*!< Internal define for macro handling */ +#define HAL_SYSCFG_ITLINE14 ( 0x0000000EU) /*!< Internal define for macro handling */ +#define HAL_SYSCFG_ITLINE15 ( 0x0000000FU) /*!< Internal define for macro handling */ +#define HAL_SYSCFG_ITLINE16 ( 0x00000010U) /*!< Internal define for macro handling */ +#define HAL_SYSCFG_ITLINE17 ( 0x00000011U) /*!< Internal define for macro handling */ +#define HAL_SYSCFG_ITLINE18 ( 0x00000012U) /*!< Internal define for macro handling */ +#define HAL_SYSCFG_ITLINE19 ( 0x00000013U) /*!< Internal define for macro handling */ +#define HAL_SYSCFG_ITLINE20 ( 0x00000014U) /*!< Internal define for macro handling */ +#define HAL_SYSCFG_ITLINE21 ( 0x00000015U) /*!< Internal define for macro handling */ +#define HAL_SYSCFG_ITLINE22 ( 0x00000016U) /*!< Internal define for macro handling */ +#define HAL_SYSCFG_ITLINE23 ( 0x00000017U) /*!< Internal define for macro handling */ +#define HAL_SYSCFG_ITLINE24 ( 0x00000018U) /*!< Internal define for macro handling */ +#define HAL_SYSCFG_ITLINE25 ( 0x00000019U) /*!< Internal define for macro handling */ +#define HAL_SYSCFG_ITLINE26 ( 0x0000001AU) /*!< Internal define for macro handling */ +#define HAL_SYSCFG_ITLINE27 ( 0x0000001BU) /*!< Internal define for macro handling */ +#define HAL_SYSCFG_ITLINE28 ( 0x0000001CU) /*!< Internal define for macro handling */ +#define HAL_SYSCFG_ITLINE29 ( 0x0000001DU) /*!< Internal define for macro handling */ +#define HAL_SYSCFG_ITLINE30 ( 0x0000001EU) /*!< Internal define for macro handling */ +#define HAL_SYSCFG_ITLINE31 ( 0x0000001FU) /*!< Internal define for macro handling */ + +#define HAL_ITLINE_EWDG ((uint32_t) ((HAL_SYSCFG_ITLINE0 << 0x18U) | SYSCFG_ITLINE0_SR_EWDG)) /*!< EWDG has expired .... */ +#if defined(STM32F091xC) +#define HAL_ITLINE_PVDOUT ((uint32_t) ((HAL_SYSCFG_ITLINE1 << 0x18U) | SYSCFG_ITLINE1_SR_PVDOUT)) /*!< Power voltage detection Interrupt .... */ +#endif +#define HAL_ITLINE_VDDIO2 ((uint32_t) ((HAL_SYSCFG_ITLINE1 << 0x18U) | SYSCFG_ITLINE1_SR_VDDIO2)) /*!< VDDIO2 Interrupt .... */ +#define HAL_ITLINE_RTC_WAKEUP ((uint32_t) ((HAL_SYSCFG_ITLINE2 << 0x18U) | SYSCFG_ITLINE2_SR_RTC_WAKEUP)) /*!< RTC WAKEUP -> exti[20] Interrupt */ +#define HAL_ITLINE_RTC_TSTAMP ((uint32_t) ((HAL_SYSCFG_ITLINE2 << 0x18U) | SYSCFG_ITLINE2_SR_RTC_TSTAMP)) /*!< RTC Time Stamp -> exti[19] interrupt */ +#define HAL_ITLINE_RTC_ALRA ((uint32_t) ((HAL_SYSCFG_ITLINE2 << 0x18U) | SYSCFG_ITLINE2_SR_RTC_ALRA)) /*!< RTC Alarm -> exti[17] interrupt .... */ +#define HAL_ITLINE_FLASH_ITF ((uint32_t) ((HAL_SYSCFG_ITLINE3 << 0x18U) | SYSCFG_ITLINE3_SR_FLASH_ITF)) /*!< Flash ITF Interrupt */ +#define HAL_ITLINE_CRS ((uint32_t) ((HAL_SYSCFG_ITLINE4 << 0x18U) | SYSCFG_ITLINE4_SR_CRS)) /*!< CRS Interrupt */ +#define HAL_ITLINE_CLK_CTRL ((uint32_t) ((HAL_SYSCFG_ITLINE4 << 0x18U) | SYSCFG_ITLINE4_SR_CLK_CTRL)) /*!< CLK Control Interrupt */ +#define HAL_ITLINE_EXTI0 ((uint32_t) ((HAL_SYSCFG_ITLINE5 << 0x18U) | SYSCFG_ITLINE5_SR_EXTI0)) /*!< External Interrupt 0 */ +#define HAL_ITLINE_EXTI1 ((uint32_t) ((HAL_SYSCFG_ITLINE5 << 0x18U) | SYSCFG_ITLINE5_SR_EXTI1)) /*!< External Interrupt 1 */ +#define HAL_ITLINE_EXTI2 ((uint32_t) ((HAL_SYSCFG_ITLINE6 << 0x18U) | SYSCFG_ITLINE6_SR_EXTI2)) /*!< External Interrupt 2 */ +#define HAL_ITLINE_EXTI3 ((uint32_t) ((HAL_SYSCFG_ITLINE6 << 0x18U) | SYSCFG_ITLINE6_SR_EXTI3)) /*!< External Interrupt 3 */ +#define HAL_ITLINE_EXTI4 ((uint32_t) ((HAL_SYSCFG_ITLINE7 << 0x18U) | SYSCFG_ITLINE7_SR_EXTI4)) /*!< EXTI4 Interrupt */ +#define HAL_ITLINE_EXTI5 ((uint32_t) ((HAL_SYSCFG_ITLINE7 << 0x18U) | SYSCFG_ITLINE7_SR_EXTI5)) /*!< EXTI5 Interrupt */ +#define HAL_ITLINE_EXTI6 ((uint32_t) ((HAL_SYSCFG_ITLINE7 << 0x18U) | SYSCFG_ITLINE7_SR_EXTI6)) /*!< EXTI6 Interrupt */ +#define HAL_ITLINE_EXTI7 ((uint32_t) ((HAL_SYSCFG_ITLINE7 << 0x18U) | SYSCFG_ITLINE7_SR_EXTI7)) /*!< EXTI7 Interrupt */ +#define HAL_ITLINE_EXTI8 ((uint32_t) ((HAL_SYSCFG_ITLINE7 << 0x18U) | SYSCFG_ITLINE7_SR_EXTI8)) /*!< EXTI8 Interrupt */ +#define HAL_ITLINE_EXTI9 ((uint32_t) ((HAL_SYSCFG_ITLINE7 << 0x18U) | SYSCFG_ITLINE7_SR_EXTI9)) /*!< EXTI9 Interrupt */ +#define HAL_ITLINE_EXTI10 ((uint32_t) ((HAL_SYSCFG_ITLINE7 << 0x18U) | SYSCFG_ITLINE7_SR_EXTI10)) /*!< EXTI10 Interrupt */ +#define HAL_ITLINE_EXTI11 ((uint32_t) ((HAL_SYSCFG_ITLINE7 << 0x18U) | SYSCFG_ITLINE7_SR_EXTI11)) /*!< EXTI11 Interrupt */ +#define HAL_ITLINE_EXTI12 ((uint32_t) ((HAL_SYSCFG_ITLINE7 << 0x18U) | SYSCFG_ITLINE7_SR_EXTI12)) /*!< EXTI12 Interrupt */ +#define HAL_ITLINE_EXTI13 ((uint32_t) ((HAL_SYSCFG_ITLINE7 << 0x18U) | SYSCFG_ITLINE7_SR_EXTI13)) /*!< EXTI13 Interrupt */ +#define HAL_ITLINE_EXTI14 ((uint32_t) ((HAL_SYSCFG_ITLINE7 << 0x18U) | SYSCFG_ITLINE7_SR_EXTI14)) /*!< EXTI14 Interrupt */ +#define HAL_ITLINE_EXTI15 ((uint32_t) ((HAL_SYSCFG_ITLINE7 << 0x18U) | SYSCFG_ITLINE7_SR_EXTI15)) /*!< EXTI15 Interrupt */ +#define HAL_ITLINE_TSC_EOA ((uint32_t) ((HAL_SYSCFG_ITLINE8 << 0x18U) | SYSCFG_ITLINE8_SR_TSC_EOA)) /*!< Touch control EOA Interrupt */ +#define HAL_ITLINE_TSC_MCE ((uint32_t) ((HAL_SYSCFG_ITLINE8 << 0x18U) | SYSCFG_ITLINE8_SR_TSC_MCE)) /*!< Touch control MCE Interrupt */ +#define HAL_ITLINE_DMA1_CH1 ((uint32_t) ((HAL_SYSCFG_ITLINE9 << 0x18U) | SYSCFG_ITLINE9_SR_DMA1_CH1)) /*!< DMA1 Channel 1 Interrupt */ +#define HAL_ITLINE_DMA1_CH2 ((uint32_t) ((HAL_SYSCFG_ITLINE10 << 0x18U) | SYSCFG_ITLINE10_SR_DMA1_CH2)) /*!< DMA1 Channel 2 Interrupt */ +#define HAL_ITLINE_DMA1_CH3 ((uint32_t) ((HAL_SYSCFG_ITLINE10 << 0x18U) | SYSCFG_ITLINE10_SR_DMA1_CH3)) /*!< DMA1 Channel 3 Interrupt */ +#define HAL_ITLINE_DMA2_CH1 ((uint32_t) ((HAL_SYSCFG_ITLINE10 << 0x18U) | SYSCFG_ITLINE10_SR_DMA2_CH1)) /*!< DMA2 Channel 1 Interrupt */ +#define HAL_ITLINE_DMA2_CH2 ((uint32_t) ((HAL_SYSCFG_ITLINE10 << 0x18U) | SYSCFG_ITLINE10_SR_DMA2_CH2)) /*!< DMA2 Channel 2 Interrupt */ +#define HAL_ITLINE_DMA1_CH4 ((uint32_t) ((HAL_SYSCFG_ITLINE11 << 0x18U) | SYSCFG_ITLINE11_SR_DMA1_CH4)) /*!< DMA1 Channel 4 Interrupt */ +#define HAL_ITLINE_DMA1_CH5 ((uint32_t) ((HAL_SYSCFG_ITLINE11 << 0x18U) | SYSCFG_ITLINE11_SR_DMA1_CH5)) /*!< DMA1 Channel 5 Interrupt */ +#define HAL_ITLINE_DMA1_CH6 ((uint32_t) ((HAL_SYSCFG_ITLINE11 << 0x18U) | SYSCFG_ITLINE11_SR_DMA1_CH6)) /*!< DMA1 Channel 6 Interrupt */ +#define HAL_ITLINE_DMA1_CH7 ((uint32_t) ((HAL_SYSCFG_ITLINE11 << 0x18U) | SYSCFG_ITLINE11_SR_DMA1_CH7)) /*!< DMA1 Channel 7 Interrupt */ +#define HAL_ITLINE_DMA2_CH3 ((uint32_t) ((HAL_SYSCFG_ITLINE11 << 0x18U) | SYSCFG_ITLINE11_SR_DMA2_CH3)) /*!< DMA2 Channel 3 Interrupt */ +#define HAL_ITLINE_DMA2_CH4 ((uint32_t) ((HAL_SYSCFG_ITLINE11 << 0x18U) | SYSCFG_ITLINE11_SR_DMA2_CH4)) /*!< DMA2 Channel 4 Interrupt */ +#define HAL_ITLINE_DMA2_CH5 ((uint32_t) ((HAL_SYSCFG_ITLINE11 << 0x18U) | SYSCFG_ITLINE11_SR_DMA2_CH5)) /*!< DMA2 Channel 5 Interrupt */ +#define HAL_ITLINE_ADC ((uint32_t) ((HAL_SYSCFG_ITLINE12 << 0x18U) | SYSCFG_ITLINE12_SR_ADC)) /*!< ADC Interrupt */ +#define HAL_ITLINE_COMP1 ((uint32_t) ((HAL_SYSCFG_ITLINE12 << 0x18U) | SYSCFG_ITLINE12_SR_COMP1)) /*!< COMP1 Interrupt -> exti[21] */ +#define HAL_ITLINE_COMP2 ((uint32_t) ((HAL_SYSCFG_ITLINE12 << 0x18U) | SYSCFG_ITLINE12_SR_COMP2)) /*!< COMP2 Interrupt -> exti[21] */ +#define HAL_ITLINE_TIM1_BRK ((uint32_t) ((HAL_SYSCFG_ITLINE13 << 0x18U) | SYSCFG_ITLINE13_SR_TIM1_BRK)) /*!< TIM1 BRK Interrupt */ +#define HAL_ITLINE_TIM1_UPD ((uint32_t) ((HAL_SYSCFG_ITLINE13 << 0x18U) | SYSCFG_ITLINE13_SR_TIM1_UPD)) /*!< TIM1 UPD Interrupt */ +#define HAL_ITLINE_TIM1_TRG ((uint32_t) ((HAL_SYSCFG_ITLINE13 << 0x18U) | SYSCFG_ITLINE13_SR_TIM1_TRG)) /*!< TIM1 TRG Interrupt */ +#define HAL_ITLINE_TIM1_CCU ((uint32_t) ((HAL_SYSCFG_ITLINE13 << 0x18U) | SYSCFG_ITLINE13_SR_TIM1_CCU)) /*!< TIM1 CCU Interrupt */ +#define HAL_ITLINE_TIM1_CC ((uint32_t) ((HAL_SYSCFG_ITLINE14 << 0x18U) | SYSCFG_ITLINE14_SR_TIM1_CC)) /*!< TIM1 CC Interrupt */ +#define HAL_ITLINE_TIM2 ((uint32_t) ((HAL_SYSCFG_ITLINE15 << 0x18U) | SYSCFG_ITLINE15_SR_TIM2_GLB)) /*!< TIM2 Interrupt */ +#define HAL_ITLINE_TIM3 ((uint32_t) ((HAL_SYSCFG_ITLINE16 << 0x18U) | SYSCFG_ITLINE16_SR_TIM3_GLB)) /*!< TIM3 Interrupt */ +#define HAL_ITLINE_DAC ((uint32_t) ((HAL_SYSCFG_ITLINE17 << 0x18U) | SYSCFG_ITLINE17_SR_DAC)) /*!< DAC Interrupt */ +#define HAL_ITLINE_TIM6 ((uint32_t) ((HAL_SYSCFG_ITLINE17 << 0x18U) | SYSCFG_ITLINE17_SR_TIM6_GLB)) /*!< TIM6 Interrupt */ +#define HAL_ITLINE_TIM7 ((uint32_t) ((HAL_SYSCFG_ITLINE18 << 0x18U) | SYSCFG_ITLINE18_SR_TIM7_GLB)) /*!< TIM7 Interrupt */ +#define HAL_ITLINE_TIM14 ((uint32_t) ((HAL_SYSCFG_ITLINE19 << 0x18U) | SYSCFG_ITLINE19_SR_TIM14_GLB)) /*!< TIM14 Interrupt */ +#define HAL_ITLINE_TIM15 ((uint32_t) ((HAL_SYSCFG_ITLINE20 << 0x18U) | SYSCFG_ITLINE20_SR_TIM15_GLB)) /*!< TIM15 Interrupt */ +#define HAL_ITLINE_TIM16 ((uint32_t) ((HAL_SYSCFG_ITLINE21 << 0x18U) | SYSCFG_ITLINE21_SR_TIM16_GLB)) /*!< TIM16 Interrupt */ +#define HAL_ITLINE_TIM17 ((uint32_t) ((HAL_SYSCFG_ITLINE22 << 0x18U) | SYSCFG_ITLINE22_SR_TIM17_GLB)) /*!< TIM17 Interrupt */ +#define HAL_ITLINE_I2C1 ((uint32_t) ((HAL_SYSCFG_ITLINE23 << 0x18U) | SYSCFG_ITLINE23_SR_I2C1_GLB)) /*!< I2C1 Interrupt -> exti[23] */ +#define HAL_ITLINE_I2C2 ((uint32_t) ((HAL_SYSCFG_ITLINE24 << 0x18U) | SYSCFG_ITLINE24_SR_I2C2_GLB)) /*!< I2C2 Interrupt */ +#define HAL_ITLINE_SPI1 ((uint32_t) ((HAL_SYSCFG_ITLINE25 << 0x18U) | SYSCFG_ITLINE25_SR_SPI1)) /*!< I2C1 Interrupt -> exti[23] */ +#define HAL_ITLINE_SPI2 ((uint32_t) ((HAL_SYSCFG_ITLINE26 << 0x18U) | SYSCFG_ITLINE26_SR_SPI2)) /*!< SPI1 Interrupt */ +#define HAL_ITLINE_USART1 ((uint32_t) ((HAL_SYSCFG_ITLINE27 << 0x18U) | SYSCFG_ITLINE27_SR_USART1_GLB)) /*!< USART1 GLB Interrupt -> exti[25] */ +#define HAL_ITLINE_USART2 ((uint32_t) ((HAL_SYSCFG_ITLINE28 << 0x18U) | SYSCFG_ITLINE28_SR_USART2_GLB)) /*!< USART2 GLB Interrupt -> exti[26] */ +#define HAL_ITLINE_USART3 ((uint32_t) ((HAL_SYSCFG_ITLINE29 << 0x18U) | SYSCFG_ITLINE29_SR_USART3_GLB)) /*!< USART3 Interrupt .... */ +#define HAL_ITLINE_USART4 ((uint32_t) ((HAL_SYSCFG_ITLINE29 << 0x18U) | SYSCFG_ITLINE29_SR_USART4_GLB)) /*!< USART4 Interrupt .... */ +#define HAL_ITLINE_USART5 ((uint32_t) ((HAL_SYSCFG_ITLINE29 << 0x18U) | SYSCFG_ITLINE29_SR_USART5_GLB)) /*!< USART5 Interrupt .... */ +#define HAL_ITLINE_USART6 ((uint32_t) ((HAL_SYSCFG_ITLINE29 << 0x18U) | SYSCFG_ITLINE29_SR_USART6_GLB)) /*!< USART6 Interrupt .... */ +#define HAL_ITLINE_USART7 ((uint32_t) ((HAL_SYSCFG_ITLINE29 << 0x18U) | SYSCFG_ITLINE29_SR_USART7_GLB)) /*!< USART7 Interrupt .... */ +#define HAL_ITLINE_USART8 ((uint32_t) ((HAL_SYSCFG_ITLINE29 << 0x18U) | SYSCFG_ITLINE29_SR_USART8_GLB)) /*!< USART8 Interrupt .... */ +#define HAL_ITLINE_CAN ((uint32_t) ((HAL_SYSCFG_ITLINE30 << 0x18U) | SYSCFG_ITLINE30_SR_CAN)) /*!< CAN Interrupt */ +#define HAL_ITLINE_CEC ((uint32_t) ((HAL_SYSCFG_ITLINE30 << 0x18U) | SYSCFG_ITLINE30_SR_CEC)) /*!< CEC Interrupt -> exti[27] */ +/** + * @} + */ +#endif /* STM32F091xC || STM32F098xx */ + +/** + * @} + */ + +/* Exported macros -----------------------------------------------------------*/ +/** @defgroup HAL_Exported_Macros HAL Exported Macros + * @{ + */ + +/** @defgroup HAL_Freeze_Unfreeze_Peripherals HAL Freeze Unfreeze Peripherals + * @brief Freeze/Unfreeze Peripherals in Debug mode + * @{ + */ + +#if defined(DBGMCU_APB1_FZ_DBG_CAN_STOP) +#define __HAL_FREEZE_CAN_DBGMCU() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_CAN_STOP)) +#define __HAL_UNFREEZE_CAN_DBGMCU() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_CAN_STOP)) +#endif /* DBGMCU_APB1_FZ_DBG_CAN_STOP */ + +#if defined(DBGMCU_APB1_FZ_DBG_RTC_STOP) +#define __HAL_DBGMCU_FREEZE_RTC() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_RTC_STOP)) +#define __HAL_DBGMCU_UNFREEZE_RTC() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_RTC_STOP)) +#endif /* DBGMCU_APB1_FZ_DBG_RTC_STOP */ + +#if defined(DBGMCU_APB1_FZ_DBG_I2C1_SMBUS_TIMEOUT) +#define __HAL_DBGMCU_FREEZE_I2C1_TIMEOUT() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_I2C1_SMBUS_TIMEOUT)) +#define __HAL_DBGMCU_UNFREEZE_I2C1_TIMEOUT() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_I2C1_SMBUS_TIMEOUT)) +#endif /* DBGMCU_APB1_FZ_DBG_I2C1_SMBUS_TIMEOUT */ + +#if defined(DBGMCU_APB1_FZ_DBG_IWDG_STOP) +#define __HAL_DBGMCU_FREEZE_IWDG() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_IWDG_STOP)) +#define __HAL_DBGMCU_UNFREEZE_IWDG() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_IWDG_STOP)) +#endif /* DBGMCU_APB1_FZ_DBG_IWDG_STOP */ + +#if defined(DBGMCU_APB1_FZ_DBG_WWDG_STOP) +#define __HAL_DBGMCU_FREEZE_WWDG() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_WWDG_STOP)) +#define __HAL_DBGMCU_UNFREEZE_WWDG() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_WWDG_STOP)) +#endif /* DBGMCU_APB1_FZ_DBG_WWDG_STOP */ + +#if defined(DBGMCU_APB1_FZ_DBG_TIM2_STOP) +#define __HAL_DBGMCU_FREEZE_TIM2() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM2_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM2() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM2_STOP)) +#endif /* DBGMCU_APB1_FZ_DBG_TIM2_STOP */ + +#if defined(DBGMCU_APB1_FZ_DBG_TIM3_STOP) +#define __HAL_DBGMCU_FREEZE_TIM3() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM3_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM3() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM3_STOP)) +#endif /* DBGMCU_APB1_FZ_DBG_TIM3_STOP */ + +#if defined(DBGMCU_APB1_FZ_DBG_TIM6_STOP) +#define __HAL_DBGMCU_FREEZE_TIM6() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM6_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM6() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM6_STOP)) +#endif /* DBGMCU_APB1_FZ_DBG_TIM6_STOP */ + +#if defined(DBGMCU_APB1_FZ_DBG_TIM7_STOP) +#define __HAL_DBGMCU_FREEZE_TIM7() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM7_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM7() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM7_STOP)) +#endif /* DBGMCU_APB1_FZ_DBG_TIM7_STOP */ + +#if defined(DBGMCU_APB1_FZ_DBG_TIM14_STOP) +#define __HAL_DBGMCU_FREEZE_TIM14() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM14_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM14() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM14_STOP)) +#endif /* DBGMCU_APB1_FZ_DBG_TIM14_STOP */ + +#if defined(DBGMCU_APB2_FZ_DBG_TIM1_STOP) +#define __HAL_DBGMCU_FREEZE_TIM1() (DBGMCU->APB2FZ |= (DBGMCU_APB2_FZ_DBG_TIM1_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM1() (DBGMCU->APB2FZ &= ~(DBGMCU_APB2_FZ_DBG_TIM1_STOP)) +#endif /* DBGMCU_APB2_FZ_DBG_TIM1_STOP */ + +#if defined(DBGMCU_APB2_FZ_DBG_TIM15_STOP) +#define __HAL_DBGMCU_FREEZE_TIM15() (DBGMCU->APB2FZ |= (DBGMCU_APB2_FZ_DBG_TIM15_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM15() (DBGMCU->APB2FZ &= ~(DBGMCU_APB2_FZ_DBG_TIM15_STOP)) +#endif /* DBGMCU_APB2_FZ_DBG_TIM15_STOP */ + +#if defined(DBGMCU_APB2_FZ_DBG_TIM16_STOP) +#define __HAL_DBGMCU_FREEZE_TIM16() (DBGMCU->APB2FZ |= (DBGMCU_APB2_FZ_DBG_TIM16_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM16() (DBGMCU->APB2FZ &= ~(DBGMCU_APB2_FZ_DBG_TIM16_STOP)) +#endif /* DBGMCU_APB2_FZ_DBG_TIM16_STOP */ + +#if defined(DBGMCU_APB2_FZ_DBG_TIM17_STOP) +#define __HAL_DBGMCU_FREEZE_TIM17() (DBGMCU->APB2FZ |= (DBGMCU_APB2_FZ_DBG_TIM17_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM17() (DBGMCU->APB2FZ &= ~(DBGMCU_APB2_FZ_DBG_TIM17_STOP)) +#endif /* DBGMCU_APB2_FZ_DBG_TIM17_STOP */ + +/** + * @} + */ + +/** @defgroup Memory_Mapping_Selection Memory Mapping Selection + * @{ + */ +#if defined(SYSCFG_CFGR1_MEM_MODE) +/** @brief Main Flash memory mapped at 0x00000000 + */ +#define __HAL_SYSCFG_REMAPMEMORY_FLASH() (SYSCFG->CFGR1 &= ~(SYSCFG_CFGR1_MEM_MODE)) +#endif /* SYSCFG_CFGR1_MEM_MODE */ + +#if defined(SYSCFG_CFGR1_MEM_MODE_0) +/** @brief System Flash memory mapped at 0x00000000 + */ +#define __HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH() do {SYSCFG->CFGR1 &= ~(SYSCFG_CFGR1_MEM_MODE); \ + SYSCFG->CFGR1 |= SYSCFG_CFGR1_MEM_MODE_0; \ + }while(0) +#endif /* SYSCFG_CFGR1_MEM_MODE_0 */ + +#if defined(SYSCFG_CFGR1_MEM_MODE_0) && defined(SYSCFG_CFGR1_MEM_MODE_1) +/** @brief Embedded SRAM mapped at 0x00000000 + */ +#define __HAL_SYSCFG_REMAPMEMORY_SRAM() do {SYSCFG->CFGR1 &= ~(SYSCFG_CFGR1_MEM_MODE); \ + SYSCFG->CFGR1 |= (SYSCFG_CFGR1_MEM_MODE_0 | SYSCFG_CFGR1_MEM_MODE_1); \ + }while(0) +#endif /* SYSCFG_CFGR1_MEM_MODE_0 && SYSCFG_CFGR1_MEM_MODE_1 */ +/** + * @} + */ + + +#if defined(SYSCFG_CFGR1_PA11_PA12_RMP) +/** @defgroup HAL_Pin_remap HAL Pin remap + * @brief Pin remapping enable/disable macros + * @param __PIN_REMAP__ This parameter can be a value of @ref HAL_Pin_remapping + * @{ + */ +#define __HAL_REMAP_PIN_ENABLE(__PIN_REMAP__) do {assert_param(IS_HAL_REMAP_PIN((__PIN_REMAP__))); \ + SYSCFG->CFGR1 |= (__PIN_REMAP__); \ + }while(0) +#define __HAL_REMAP_PIN_DISABLE(__PIN_REMAP__) do {assert_param(IS_HAL_REMAP_PIN((__PIN_REMAP__))); \ + SYSCFG->CFGR1 &= ~(__PIN_REMAP__); \ + }while(0) +/** + * @} + */ +#endif /* SYSCFG_CFGR1_PA11_PA12_RMP */ + +/** @brief Fast-mode Plus driving capability enable/disable macros + * @param __FASTMODEPLUS__ This parameter can be a value of @ref SYSCFG_FastModePlus_GPIO values. + * That you can find above these macros. + */ +#define __HAL_SYSCFG_FASTMODEPLUS_ENABLE(__FASTMODEPLUS__) do {assert_param(IS_SYSCFG_FASTMODEPLUS((__FASTMODEPLUS__)));\ + SET_BIT(SYSCFG->CFGR1, (__FASTMODEPLUS__));\ + }while(0) + +#define __HAL_SYSCFG_FASTMODEPLUS_DISABLE(__FASTMODEPLUS__) do {assert_param(IS_SYSCFG_FASTMODEPLUS((__FASTMODEPLUS__)));\ + CLEAR_BIT(SYSCFG->CFGR1, (__FASTMODEPLUS__));\ + }while(0) +#if defined(SYSCFG_CFGR2_LOCKUP_LOCK) +/** @defgroup Cortex_Lockup_Enable Cortex Lockup Enable + * @{ + */ +/** @brief SYSCFG Break Lockup lock + * Enables and locks the connection of Cortex-M0 LOCKUP (Hardfault) output to TIM1/15/16/17 Break input + * @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 /* SYSCFG_CFGR2_LOCKUP_LOCK */ + +#if defined(SYSCFG_CFGR2_PVD_LOCK) +/** @defgroup PVD_Lock_Enable PVD Lock + * @{ + */ +/** @brief SYSCFG Break PVD lock + * Enables and locks the PVD connection with Timer1/8/15/16/17 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_PVD_LOCK() do {SYSCFG->CFGR2 &= ~(SYSCFG_CFGR2_PVD_LOCK); \ + SYSCFG->CFGR2 |= SYSCFG_CFGR2_PVD_LOCK; \ + }while(0) +/** + * @} + */ +#endif /* SYSCFG_CFGR2_PVD_LOCK */ + +#if defined(SYSCFG_CFGR2_SRAM_PARITY_LOCK) +/** @defgroup SRAM_Parity_Lock SRAM Parity Lock + * @{ + */ +/** @brief SYSCFG Break SRAM PARITY lock + * Enables and locks the SRAM_PARITY error signal with Break Input of TIMER1/8/15/16/17 + * @note The selected configuration is locked and can be unlocked by system reset + */ +#define __HAL_SYSCFG_BREAK_SRAMPARITY_LOCK() do {SYSCFG->CFGR2 &= ~(SYSCFG_CFGR2_SRAM_PARITY_LOCK); \ + SYSCFG->CFGR2 |= SYSCFG_CFGR2_SRAM_PARITY_LOCK; \ + }while(0) +/** + * @} + */ +#endif /* SYSCFG_CFGR2_SRAM_PARITY_LOCK */ + +#if defined(SYSCFG_CFGR2_SRAM_PEF) +/** @defgroup HAL_SYSCFG_Parity_check_on_RAM HAL SYSCFG Parity check on RAM + * @brief Parity check on RAM disable macro + * @note Disabling the parity check on RAM locks the configuration bit. + * To re-enable the parity check on RAM perform a system reset. + * @{ + */ +#define __HAL_SYSCFG_RAM_PARITYCHECK_DISABLE() (SYSCFG->CFGR2 |= SYSCFG_CFGR2_SRAM_PEF) +/** + * @} + */ +#endif /* SYSCFG_CFGR2_SRAM_PEF */ + + +#if defined(STM32F091xC) || defined (STM32F098xx) +/** @defgroup HAL_ISR_wrapper_check HAL ISR wrapper check + * @brief ISR wrapper check + * @note This feature is applicable on STM32F09x + * @note Allow to determine interrupt source per line. + * @{ + */ +#define __HAL_GET_PENDING_IT(__SOURCE__) (SYSCFG->IT_LINE_SR[((__SOURCE__) >> 0x18U)] & ((__SOURCE__) & 0x00FFFFFF)) +/** + * @} + */ +#endif /* (STM32F091xC) || defined (STM32F098xx)*/ + +#if defined(STM32F091xC) || defined (STM32F098xx) +/** @defgroup HAL_SYSCFG_IRDA_modulation_envelope_selection HAL SYSCFG IRDA modulation envelope selection + * @brief selection of the modulation envelope signal macro, using bits [7:6] of SYS_CTRL(CFGR1) register + * @note This feature is applicable on STM32F09x + * @param __SOURCE__ This parameter can be a value of @ref HAL_IRDA_ENV_SEL + * @{ + */ +#define __HAL_SYSCFG_IRDA_ENV_SELECTION(__SOURCE__) do {assert_param(IS_HAL_SYSCFG_IRDA_ENV_SEL((__SOURCE__))); \ + SYSCFG->CFGR1 &= ~(SYSCFG_CFGR1_IRDA_ENV_SEL); \ + SYSCFG->CFGR1 |= (__SOURCE__); \ + }while(0) + +#define __HAL_SYSCFG_GET_IRDA_ENV_SELECTION() ((SYSCFG->CFGR1) & 0x000000C0) +/** + * @} + */ +#endif /* (STM32F091xC) || defined (STM32F098xx)*/ + +/** + * @} + */ + +/** @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 functions --------------------------------------------------------*/ + +/** @addtogroup HAL_Exported_Functions + * @{ + */ + +/** @addtogroup HAL_Exported_Functions_Group1 + * @{ + */ +/* Initialization and de-initialization 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); +/** + * @} + */ + +/* Exported variables ---------------------------------------------------------*/ +/** @addtogroup HAL_Exported_Variables + * @{ + */ +extern __IO uint32_t uwTick; +extern uint32_t uwTickPrio; +extern HAL_TickFreqTypeDef uwTickFreq; +/** + * @} + */ + +/** @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); +uint32_t HAL_GetUIDw0(void); +uint32_t HAL_GetUIDw1(void); +uint32_t HAL_GetUIDw2(void); +void HAL_DBGMCU_EnableDBGStopMode(void); +void HAL_DBGMCU_DisableDBGStopMode(void); +void HAL_DBGMCU_EnableDBGStandbyMode(void); +void HAL_DBGMCU_DisableDBGStandbyMode(void); +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F0xx_HAL_H */ + + diff --git a/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_cortex.h b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_cortex.h new file mode 100644 index 0000000..e54a18c --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_cortex.h @@ -0,0 +1,131 @@ +/** + ****************************************************************************** + * @file stm32f0xx_hal_cortex.h + * @author MCD Application Team + * @brief Header file of CORTEX 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 __STM32F0xx_HAL_CORTEX_H +#define __STM32F0xx_HAL_CORTEX_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f0xx_hal_def.h" + +/** @addtogroup STM32F0xx_HAL_Driver + * @{ + */ + +/** @addtogroup CORTEX CORTEX + * @{ + */ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup CORTEX_Exported_Constants CORTEX Exported Constants + * @{ + */ + +/** @defgroup CORTEX_SysTick_clock_source CORTEX SysTick clock source + * @{ + */ +#define SYSTICK_CLKSOURCE_HCLK_DIV8 (0x00000000U) +#define SYSTICK_CLKSOURCE_HCLK (0x00000004U) + +/** + * @} + */ + +/** + * @} + */ + +/* Exported Macros -----------------------------------------------------------*/ + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup CORTEX_Exported_Functions CORTEX Exported Functions + * @{ + */ +/** @addtogroup CORTEX_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and Configuration functions + * @{ + */ +/* Initialization and de-initialization functions *******************************/ +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 + * @brief Cortex control functions + * @{ + */ + +/* Peripheral Control functions *************************************************/ +uint32_t HAL_NVIC_GetPriority(IRQn_Type IRQn); +uint32_t HAL_NVIC_GetPendingIRQ(IRQn_Type IRQn); +void HAL_NVIC_SetPendingIRQ(IRQn_Type IRQn); +void HAL_NVIC_ClearPendingIRQ(IRQn_Type IRQn); +void HAL_SYSTICK_CLKSourceConfig(uint32_t CLKSource); +void HAL_SYSTICK_IRQHandler(void); +void HAL_SYSTICK_Callback(void); +/** + * @} + */ + +/** + * @} + */ + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/* Private macros ------------------------------------------------------------*/ +/** @defgroup CORTEX_Private_Macros CORTEX Private Macros + * @{ + */ +#define IS_NVIC_PREEMPTION_PRIORITY(PRIORITY) ((PRIORITY) < 0x4) + +#define IS_NVIC_DEVICE_IRQ(IRQ) ((IRQ) >= 0x00) + +#define IS_SYSTICK_CLK_SOURCE(SOURCE) (((SOURCE) == SYSTICK_CLKSOURCE_HCLK) || \ + ((SOURCE) == SYSTICK_CLKSOURCE_HCLK_DIV8)) +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F0xx_HAL_CORTEX_H */ + + + diff --git a/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_def.h b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_def.h new file mode 100644 index 0000000..55ab0c3 --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_def.h @@ -0,0 +1,179 @@ +/** + ****************************************************************************** + * @file stm32f0xx_hal_def.h + * @author MCD Application Team + * @brief This file contains HAL common defines, enumeration, macros and + * structures definitions. + ****************************************************************************** + * @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 __STM32F0xx_HAL_DEF +#define __STM32F0xx_HAL_DEF + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f0xx.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 ------------------------------------------------------------*/ + +#if !defined(UNUSED) +#define UNUSED(X) (void)X /* To avoid gcc/g++ warnings */ +#endif /* UNUSED */ + +#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 __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 /* ___STM32F0xx_HAL_DEF */ + + diff --git a/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h new file mode 100644 index 0000000..11322e5 --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h @@ -0,0 +1,561 @@ +/** + ****************************************************************************** + * @file stm32f0xx_hal_dma.h + * @author MCD Application Team + * @brief Header file of DMA 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 __STM32F0xx_HAL_DMA_H +#define __STM32F0xx_HAL_DMA_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f0xx_hal_def.h" + +/** @addtogroup STM32F0xx_HAL_Driver + * @{ + */ + +/** @addtogroup DMA + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ + +/** @defgroup DMA_Exported_Types DMA Exported Types + * @{ + */ + +/** + * @brief DMA Configuration Structure definition + */ +typedef struct +{ + 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 Channelx. + 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 Channel */ + + uint32_t Priority; /*!< Specifies the software priority for the DMAy Channelx. + This parameter can be a value of @ref DMA_Priority_level */ +} 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_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 Callback ID 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_ERROR_CB_ID = 0x02U, /*!< Error */ + HAL_DMA_XFER_ABORT_CB_ID = 0x03U, /*!< Abort */ + HAL_DMA_XFER_ALL_CB_ID = 0x04U /*!< All */ + +} HAL_DMA_CallbackIDTypeDef; + +/** + * @brief DMA handle Structure definition + */ +typedef struct __DMA_HandleTypeDef +{ + DMA_Channel_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 (* 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 */ + + DMA_TypeDef *DmaBaseAddress; /*!< DMA Channel Base Address */ + + uint32_t ChannelIndex; /*!< DMA Channel Index */ +} DMA_HandleTypeDef; + +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup DMA_Exported_Constants DMA Exported Constants + * @{ + */ + +/** @defgroup DMA_Error_Code DMA Error Code + * @{ + */ +#define HAL_DMA_ERROR_NONE (0x00000000U) /*!< No error */ +#define HAL_DMA_ERROR_TE (0x00000001U) /*!< Transfer error */ +#define HAL_DMA_ERROR_NO_XFER (0x00000004U) /*!< no ongoin transfer */ +#define HAL_DMA_ERROR_TIMEOUT (0x00000020U) /*!< Timeout error */ +#define HAL_DMA_ERROR_NOT_SUPPORTED (0x00000100U) /*!< Not supported mode */ +/** + * @} + */ + +/** @defgroup DMA_Data_transfer_direction DMA Data transfer direction + * @{ + */ +#define DMA_PERIPH_TO_MEMORY (0x00000000U) /*!< Peripheral to memory direction */ +#define DMA_MEMORY_TO_PERIPH ((uint32_t)DMA_CCR_DIR) /*!< Memory to peripheral direction */ +#define DMA_MEMORY_TO_MEMORY ((uint32_t)(DMA_CCR_MEM2MEM)) /*!< Memory to memory direction */ + +/** + * @} + */ + +/** @defgroup DMA_Peripheral_incremented_mode DMA Peripheral incremented mode + * @{ + */ +#define DMA_PINC_ENABLE ((uint32_t)DMA_CCR_PINC) /*!< Peripheral increment mode Enable */ +#define DMA_PINC_DISABLE (0x00000000U) /*!< Peripheral increment mode Disable */ +/** + * @} + */ + +/** @defgroup DMA_Memory_incremented_mode DMA Memory incremented mode + * @{ + */ +#define DMA_MINC_ENABLE ((uint32_t)DMA_CCR_MINC) /*!< Memory increment mode Enable */ +#define DMA_MINC_DISABLE (0x00000000U) /*!< Memory increment mode Disable */ +/** + * @} + */ + +/** @defgroup DMA_Peripheral_data_size DMA Peripheral data size + * @{ + */ +#define DMA_PDATAALIGN_BYTE (0x00000000U) /*!< Peripheral data alignment : Byte */ +#define DMA_PDATAALIGN_HALFWORD ((uint32_t)DMA_CCR_PSIZE_0) /*!< Peripheral data alignment : HalfWord */ +#define DMA_PDATAALIGN_WORD ((uint32_t)DMA_CCR_PSIZE_1) /*!< Peripheral data alignment : Word */ +/** + * @} + */ + +/** @defgroup DMA_Memory_data_size DMA Memory data size + * @{ + */ +#define DMA_MDATAALIGN_BYTE (0x00000000U) /*!< Memory data alignment : Byte */ +#define DMA_MDATAALIGN_HALFWORD ((uint32_t)DMA_CCR_MSIZE_0) /*!< Memory data alignment : HalfWord */ +#define DMA_MDATAALIGN_WORD ((uint32_t)DMA_CCR_MSIZE_1) /*!< Memory data alignment : Word */ +/** + * @} + */ + +/** @defgroup DMA_mode DMA mode + * @{ + */ +#define DMA_NORMAL (0x00000000U) /*!< Normal Mode */ +#define DMA_CIRCULAR ((uint32_t)DMA_CCR_CIRC) /*!< Circular Mode */ +/** + * @} + */ + +/** @defgroup DMA_Priority_level DMA Priority level + * @{ + */ +#define DMA_PRIORITY_LOW (0x00000000U) /*!< Priority level : Low */ +#define DMA_PRIORITY_MEDIUM ((uint32_t)DMA_CCR_PL_0) /*!< Priority level : Medium */ +#define DMA_PRIORITY_HIGH ((uint32_t)DMA_CCR_PL_1) /*!< Priority level : High */ +#define DMA_PRIORITY_VERY_HIGH ((uint32_t)DMA_CCR_PL) /*!< Priority level : Very_High */ +/** + * @} + */ + + +/** @defgroup DMA_interrupt_enable_definitions DMA interrupt enable definitions + * @{ + */ +#define DMA_IT_TC ((uint32_t)DMA_CCR_TCIE) +#define DMA_IT_HT ((uint32_t)DMA_CCR_HTIE) +#define DMA_IT_TE ((uint32_t)DMA_CCR_TEIE) +/** + * @} + */ + +/** @defgroup DMA_flag_definitions DMA flag definitions + * @{ + */ + +#define DMA_FLAG_GL1 (0x00000001U) /*!< Channel 1 global interrupt flag */ +#define DMA_FLAG_TC1 (0x00000002U) /*!< Channel 1 transfer complete flag */ +#define DMA_FLAG_HT1 (0x00000004U) /*!< Channel 1 half transfer flag */ +#define DMA_FLAG_TE1 (0x00000008U) /*!< Channel 1 transfer error flag */ +#define DMA_FLAG_GL2 (0x00000010U) /*!< Channel 2 global interrupt flag */ +#define DMA_FLAG_TC2 (0x00000020U) /*!< Channel 2 transfer complete flag */ +#define DMA_FLAG_HT2 (0x00000040U) /*!< Channel 2 half transfer flag */ +#define DMA_FLAG_TE2 (0x00000080U) /*!< Channel 2 transfer error flag */ +#define DMA_FLAG_GL3 (0x00000100U) /*!< Channel 3 global interrupt flag */ +#define DMA_FLAG_TC3 (0x00000200U) /*!< Channel 3 transfer complete flag */ +#define DMA_FLAG_HT3 (0x00000400U) /*!< Channel 3 half transfer flag */ +#define DMA_FLAG_TE3 (0x00000800U) /*!< Channel 3 transfer error flag */ +#define DMA_FLAG_GL4 (0x00001000U) /*!< Channel 4 global interrupt flag */ +#define DMA_FLAG_TC4 (0x00002000U) /*!< Channel 4 transfer complete flag */ +#define DMA_FLAG_HT4 (0x00004000U) /*!< Channel 4 half transfer flag */ +#define DMA_FLAG_TE4 (0x00008000U) /*!< Channel 4 transfer error flag */ +#define DMA_FLAG_GL5 (0x00010000U) /*!< Channel 5 global interrupt flag */ +#define DMA_FLAG_TC5 (0x00020000U) /*!< Channel 5 transfer complete flag */ +#define DMA_FLAG_HT5 (0x00040000U) /*!< Channel 5 half transfer flag */ +#define DMA_FLAG_TE5 (0x00080000U) /*!< Channel 5 transfer error flag */ +#define DMA_FLAG_GL6 (0x00100000U) /*!< Channel 6 global interrupt flag */ +#define DMA_FLAG_TC6 (0x00200000U) /*!< Channel 6 transfer complete flag */ +#define DMA_FLAG_HT6 (0x00400000U) /*!< Channel 6 half transfer flag */ +#define DMA_FLAG_TE6 (0x00800000U) /*!< Channel 6 transfer error flag */ +#define DMA_FLAG_GL7 (0x01000000U) /*!< Channel 7 global interrupt flag */ +#define DMA_FLAG_TC7 (0x02000000U) /*!< Channel 7 transfer complete flag */ +#define DMA_FLAG_HT7 (0x04000000U) /*!< Channel 7 half transfer flag */ +#define DMA_FLAG_TE7 (0x08000000U) /*!< Channel 7 transfer error flag */ + +/** + * @} + */ + +#if defined(SYSCFG_CFGR1_DMA_RMP) +/** @defgroup HAL_DMA_remapping HAL DMA remapping + * Elements values convention: 0xYYYYYYYY + * - YYYYYYYY : Position in the SYSCFG register CFGR1 + * @{ + */ +#define DMA_REMAP_ADC_DMA_CH2 ((uint32_t)SYSCFG_CFGR1_ADC_DMA_RMP) /*!< ADC DMA remap + 0: No remap (ADC DMA requests mapped on DMA channel 1 + 1: Remap (ADC DMA requests mapped on DMA channel 2 */ +#define DMA_REMAP_USART1_TX_DMA_CH4 ((uint32_t)SYSCFG_CFGR1_USART1TX_DMA_RMP) /*!< USART1 TX DMA remap + 0: No remap (USART1_TX DMA request mapped on DMA channel 2 + 1: Remap (USART1_TX DMA request mapped on DMA channel 4 */ +#define DMA_REMAP_USART1_RX_DMA_CH5 ((uint32_t)SYSCFG_CFGR1_USART1RX_DMA_RMP) /*!< USART1 RX DMA remap + 0: No remap (USART1_RX DMA request mapped on DMA channel 3 + 1: Remap (USART1_RX DMA request mapped on DMA channel 5 */ +#define DMA_REMAP_TIM16_DMA_CH4 ((uint32_t)SYSCFG_CFGR1_TIM16_DMA_RMP) /*!< TIM16 DMA request remap + 0: No remap (TIM16_CH1 and TIM16_UP DMA requests mapped on DMA channel 3) + 1: Remap (TIM16_CH1 and TIM16_UP DMA requests mapped on DMA channel 4) */ +#define DMA_REMAP_TIM17_DMA_CH2 ((uint32_t)SYSCFG_CFGR1_TIM17_DMA_RMP) /*!< TIM17 DMA request remap + 0: No remap (TIM17_CH1 and TIM17_UP DMA requests mapped on DMA channel 1 + 1: Remap (TIM17_CH1 and TIM17_UP DMA requests mapped on DMA channel 2) */ +#if defined (STM32F070xB) +#define DMA_REMAP_USART3_DMA_CH32 ((uint32_t)SYSCFG_CFGR1_USART3_DMA_RMP) /*!< USART3 DMA request remapping bit. Available on STM32F070xB devices only. + 0: Disabled, need to remap before use + 1: Remap (USART3_RX and USART3_TX DMA requests mapped on DMA channel 3 and 2 respectively) */ + +#endif + +#if defined (STM32F071xB) || defined (STM32F072xB) || defined (STM32F078xx) +#define DMA_REMAP_TIM16_DMA_CH6 ((uint32_t)SYSCFG_CFGR1_TIM16_DMA_RMP2) /*!< TIM16 alternate DMA request remapping bit. Available on STM32F07x devices only + 0: No alternate remap (TIM16 DMA requestsmapped according to TIM16_DMA_RMP bit) + 1: Alternate remap (TIM16_CH1 and TIM16_UP DMA requests mapped on DMA channel 6) */ +#define DMA_REMAP_TIM17_DMA_CH7 ((uint32_t)SYSCFG_CFGR1_TIM17_DMA_RMP2) /*!< TIM17 alternate DMA request remapping bit. Available on STM32F07x devices only + 0: No alternate remap (TIM17 DMA requestsmapped according to TIM17_DMA_RMP bit) + 1: Alternate remap (TIM17_CH1 and TIM17_UP DMA requests mapped on DMA channel 7) */ +#define DMA_REMAP_SPI2_DMA_CH67 ((uint32_t)SYSCFG_CFGR1_SPI2_DMA_RMP) /*!< SPI2 DMA request remapping bit. Available on STM32F07x devices only. + 0: No remap (SPI2_RX and SPI2_TX DMA requests mapped on DMA channel 4 and 5 respectively) + 1: Remap (SPI2_RX and SPI2_TX DMA requests mapped on DMA channel 6 and 7 respectively) */ +#define DMA_REMAP_USART2_DMA_CH67 ((uint32_t)SYSCFG_CFGR1_USART2_DMA_RMP) /*!< USART2 DMA request remapping bit. Available on STM32F07x devices only. + 0: No remap (USART2_RX and USART2_TX DMA requests mapped on DMA channel 5 and 4 respectively) + 1: 1: Remap (USART2_RX and USART2_TX DMA requests mapped on DMA channel 6 and 7 respectively) */ +#define DMA_REMAP_USART3_DMA_CH32 ((uint32_t)SYSCFG_CFGR1_USART3_DMA_RMP) /*!< USART3 DMA request remapping bit. Available on STM32F07x devices only. + 0: No remap (USART3_RX and USART3_TX DMA requests mapped on DMA channel 6 and 7 respectively) + 1: Remap (USART3_RX and USART3_TX DMA requests mapped on DMA channel 3 and 2 respectively) */ +#define DMA_REMAP_I2C1_DMA_CH76 ((uint32_t)SYSCFG_CFGR1_I2C1_DMA_RMP) /*!< I2C1 DMA request remapping bit. Available on STM32F07x devices only. + 0: No remap (I2C1_RX and I2C1_TX DMA requests mapped on DMA channel 3 and 2 respectively) + 1: Remap (I2C1_RX and I2C1_TX DMA requests mapped on DMA channel 7 and 6 respectively) */ +#define DMA_REMAP_TIM1_DMA_CH6 ((uint32_t)SYSCFG_CFGR1_TIM1_DMA_RMP) /*!< TIM1 DMA request remapping bit. Available on STM32F07x devices only. + 0: No remap (TIM1_CH1, TIM1_CH2 and TIM1_CH3 DMA requests mapped on DMA channel 2, 3 and 4 respectively) + 1: Remap (TIM1_CH1, TIM1_CH2 and TIM1_CH3 DMA requests mapped on DMA channel 6 */ +#define DMA_REMAP_TIM2_DMA_CH7 ((uint32_t)SYSCFG_CFGR1_TIM2_DMA_RMP) /*!< TIM2 DMA request remapping bit. Available on STM32F07x devices only. + 0: No remap (TIM2_CH2 and TIM2_CH4 DMA requests mapped on DMA channel 3 and 4 respectively) + 1: Remap (TIM2_CH2 and TIM2_CH4 DMA requests mapped on DMA channel 7 */ +#define DMA_REMAP_TIM3_DMA_CH6 ((uint32_t)SYSCFG_CFGR1_TIM3_DMA_RMP) /*!< TIM3 DMA request remapping bit. Available on STM32F07x devices only. + 0: No remap (TIM3_CH1 and TIM3_TRIG DMA requests mapped on DMA channel 4) + 1: Remap (TIM3_CH1 and TIM3_TRIG DMA requests mapped on DMA channel 6) */ +#endif + +/** + * @} + */ + +#endif /* SYSCFG_CFGR1_DMA_RMP */ +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup DMA_Exported_Macros DMA Exported Macros + * @{ + */ + +/** @brief Reset DMA handle state + * @param __HANDLE__ DMA handle. + * @retval None + */ +#define __HAL_DMA_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_DMA_STATE_RESET) + +/** + * @brief Enable the specified DMA Channel. + * @param __HANDLE__ DMA handle + * @retval None + */ +#define __HAL_DMA_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CCR |= DMA_CCR_EN) + +/** + * @brief Disable the specified DMA Channel. + * @param __HANDLE__ DMA handle + * @retval None + */ +#define __HAL_DMA_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CCR &= ~DMA_CCR_EN) + + +/* Interrupt & Flag management */ + +/** + * @brief Enables the specified DMA Channel 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 + * @retval None + */ +#define __HAL_DMA_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->CCR |= (__INTERRUPT__)) + +/** + * @brief Disables the specified DMA Channel 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 + * @retval None + */ +#define __HAL_DMA_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->CCR &= ~(__INTERRUPT__)) + +/** + * @brief Checks whether the specified DMA Channel 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 + * @retval The state of DMA_IT (SET or RESET). + */ +#define __HAL_DMA_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->CCR & (__INTERRUPT__))) + +/** + * @brief Returns the number of remaining data units in the current DMAy Channelx transfer. + * @param __HANDLE__ DMA handle + * + * @retval The number of remaining data units in the current DMA Channel transfer. + */ +#define __HAL_DMA_GET_COUNTER(__HANDLE__) ((__HANDLE__)->Instance->CNDTR) + +#if defined(SYSCFG_CFGR1_DMA_RMP) +/** @brief DMA remapping enable/disable macros + * @param __DMA_REMAP__ This parameter can be a value of @ref HAL_DMA_remapping + */ +#define __HAL_DMA_REMAP_CHANNEL_ENABLE(__DMA_REMAP__) do {assert_param(IS_DMA_REMAP((__DMA_REMAP__))); \ + SYSCFG->CFGR1 |= (__DMA_REMAP__); \ + }while(0) +#define __HAL_DMA_REMAP_CHANNEL_DISABLE(__DMA_REMAP__) do {assert_param(IS_DMA_REMAP((__DMA_REMAP__))); \ + SYSCFG->CFGR1 &= ~(__DMA_REMAP__); \ + }while(0) +#endif /* SYSCFG_CFGR1_DMA_RMP */ + +/** + * @} + */ + +/* Include DMA HAL Extension module */ +#include "stm32f0xx_hal_dma_ex.h" + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup DMA_Exported_Functions + * @{ + */ + +/** @addtogroup DMA_Exported_Functions_Group1 + * @{ + */ +/* Initialization and de-initialization functions *****************************/ +HAL_StatusTypeDef HAL_DMA_Init(DMA_HandleTypeDef *hdma); +HAL_StatusTypeDef HAL_DMA_DeInit(DMA_HandleTypeDef *hdma); +/** + * @} + */ + +/** @addtogroup DMA_Exported_Functions_Group2 + * @{ + */ +/* Input and Output 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, uint32_t CompleteLevel, uint32_t Timeout); +void HAL_DMA_IRQHandler(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); + +/** + * @} + */ + +/** @addtogroup DMA_Exported_Functions_Group3 + * @{ + */ +/* Peripheral State and Error functions ***************************************/ +HAL_DMA_StateTypeDef HAL_DMA_GetState(DMA_HandleTypeDef *hdma); +uint32_t HAL_DMA_GetError(DMA_HandleTypeDef *hdma); +/** + * @} + */ + +/** + * @} + */ + +/** @addtogroup DMA_Private_Macros + * @{ + */ +#define IS_DMA_DIRECTION(DIRECTION) (((DIRECTION) == DMA_PERIPH_TO_MEMORY ) || \ + ((DIRECTION) == DMA_MEMORY_TO_PERIPH) || \ + ((DIRECTION) == DMA_MEMORY_TO_MEMORY)) +#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)) +#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_BUFFER_SIZE(SIZE) (((SIZE) >= 0x1U) && ((SIZE) < 0x10000U)) + +#if defined(SYSCFG_CFGR1_DMA_RMP) + +#if defined (STM32F071xB) || defined (STM32F072xB) || defined (STM32F078xx) +#define IS_DMA_REMAP(RMP) (((RMP) == DMA_REMAP_ADC_DMA_CH2) || \ + ((RMP) == DMA_REMAP_USART1_TX_DMA_CH4) || \ + ((RMP) == DMA_REMAP_USART1_RX_DMA_CH5) || \ + ((RMP) == DMA_REMAP_TIM16_DMA_CH4) || \ + ((RMP) == DMA_REMAP_TIM17_DMA_CH2) || \ + ((RMP) == DMA_REMAP_TIM16_DMA_CH6) || \ + ((RMP) == DMA_REMAP_TIM17_DMA_CH7) || \ + ((RMP) == DMA_REMAP_SPI2_DMA_CH67) || \ + ((RMP) == DMA_REMAP_USART2_DMA_CH67) || \ + ((RMP) == DMA_REMAP_USART3_DMA_CH32) || \ + ((RMP) == DMA_REMAP_I2C1_DMA_CH76) || \ + ((RMP) == DMA_REMAP_TIM1_DMA_CH6) || \ + ((RMP) == DMA_REMAP_TIM2_DMA_CH7) || \ + ((RMP) == DMA_REMAP_TIM3_DMA_CH6)) +#elif defined (STM32F070xB) +#define IS_DMA_REMAP(RMP) (((RMP) == DMA_REMAP_USART3_DMA_CH32) || \ + ((RMP) == DMA_REMAP_ADC_DMA_CH2) || \ + ((RMP) == DMA_REMAP_USART1_TX_DMA_CH4) || \ + ((RMP) == DMA_REMAP_USART1_RX_DMA_CH5) || \ + ((RMP) == DMA_REMAP_TIM16_DMA_CH4) || \ + ((RMP) == DMA_REMAP_TIM17_DMA_CH2)) +#else +#define IS_DMA_REMAP(RMP) (((RMP) == DMA_REMAP_ADC_DMA_CH2) || \ + ((RMP) == DMA_REMAP_USART1_TX_DMA_CH4) || \ + ((RMP) == DMA_REMAP_USART1_RX_DMA_CH5) || \ + ((RMP) == DMA_REMAP_TIM16_DMA_CH4) || \ + ((RMP) == DMA_REMAP_TIM17_DMA_CH2)) +#endif + +#endif /* SYSCFG_CFGR1_DMA_RMP */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F0xx_HAL_DMA_H */ + + diff --git a/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma_ex.h b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma_ex.h new file mode 100644 index 0000000..3f34f8c --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma_ex.h @@ -0,0 +1,809 @@ +/** + ****************************************************************************** + * @file stm32f0xx_hal_dma_ex.h + * @author MCD Application Team + * @brief Header file of DMA HAL Extension 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 __STM32F0xx_HAL_DMA_EX_H +#define __STM32F0xx_HAL_DMA_EX_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f0xx_hal_def.h" + +/** @addtogroup STM32F0xx_HAL_Driver + * @{ + */ + +/** @defgroup DMAEx DMAEx + * @brief DMA HAL module driver + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +#if defined(STM32F091xC) || defined(STM32F098xx) || defined(STM32F030xC) +/** @defgroup DMAEx_Exported_Constants DMAEx Exported Constants + * @{ + */ +#define DMA1_CHANNEL1_RMP 0x00000000 /*!< Internal define for remapping on STM32F09x/30xC */ +#define DMA1_CHANNEL2_RMP 0x10000000 /*!< Internal define for remapping on STM32F09x/30xC */ +#define DMA1_CHANNEL3_RMP 0x20000000 /*!< Internal define for remapping on STM32F09x/30xC */ +#define DMA1_CHANNEL4_RMP 0x30000000 /*!< Internal define for remapping on STM32F09x/30xC */ +#define DMA1_CHANNEL5_RMP 0x40000000 /*!< Internal define for remapping on STM32F09x/30xC */ +#if !defined(STM32F030xC) +#define DMA1_CHANNEL6_RMP 0x50000000 /*!< Internal define for remapping on STM32F09x/30xC */ +#define DMA1_CHANNEL7_RMP 0x60000000 /*!< Internal define for remapping on STM32F09x/30xC */ +#define DMA2_CHANNEL1_RMP 0x00000000 /*!< Internal define for remapping on STM32F09x/30xC */ +#define DMA2_CHANNEL2_RMP 0x10000000 /*!< Internal define for remapping on STM32F09x/30xC */ +#define DMA2_CHANNEL3_RMP 0x20000000 /*!< Internal define for remapping on STM32F09x/30xC */ +#define DMA2_CHANNEL4_RMP 0x30000000 /*!< Internal define for remapping on STM32F09x/30xC */ +#define DMA2_CHANNEL5_RMP 0x40000000 /*!< Internal define for remapping on STM32F09x/30xC */ +#endif /* !defined(STM32F030xC) */ + +/****************** DMA1 remap bit field definition********************/ +/* DMA1 - Channel 1 */ +#define HAL_DMA1_CH1_DEFAULT (uint32_t) (DMA1_CHANNEL1_RMP | DMA1_CSELR_DEFAULT) /*!< Default remap position for DMA1 */ +#define HAL_DMA1_CH1_ADC (uint32_t) (DMA1_CHANNEL1_RMP | DMA1_CSELR_CH1_ADC) /*!< Remap ADC on DMA1 Channel 1*/ +#define HAL_DMA1_CH1_TIM17_CH1 (uint32_t) (DMA1_CHANNEL1_RMP | DMA1_CSELR_CH1_TIM17_CH1) /*!< Remap TIM17 channel 1 on DMA1 channel 1 */ +#define HAL_DMA1_CH1_TIM17_UP (uint32_t) (DMA1_CHANNEL1_RMP | DMA1_CSELR_CH1_TIM17_UP) /*!< Remap TIM17 up on DMA1 channel 1 */ +#define HAL_DMA1_CH1_USART1_RX (uint32_t) (DMA1_CHANNEL1_RMP | DMA1_CSELR_CH1_USART1_RX) /*!< Remap USART1 Rx on DMA1 channel 1 */ +#define HAL_DMA1_CH1_USART2_RX (uint32_t) (DMA1_CHANNEL1_RMP | DMA1_CSELR_CH1_USART2_RX) /*!< Remap USART2 Rx on DMA1 channel 1 */ +#define HAL_DMA1_CH1_USART3_RX (uint32_t) (DMA1_CHANNEL1_RMP | DMA1_CSELR_CH1_USART3_RX) /*!< Remap USART3 Rx on DMA1 channel 1 */ +#define HAL_DMA1_CH1_USART4_RX (uint32_t) (DMA1_CHANNEL1_RMP | DMA1_CSELR_CH1_USART4_RX) /*!< Remap USART4 Rx on DMA1 channel 1 */ +#define HAL_DMA1_CH1_USART5_RX (uint32_t) (DMA1_CHANNEL1_RMP | DMA1_CSELR_CH1_USART5_RX) /*!< Remap USART5 Rx on DMA1 channel 1 */ +#define HAL_DMA1_CH1_USART6_RX (uint32_t) (DMA1_CHANNEL1_RMP | DMA1_CSELR_CH1_USART6_RX) /*!< Remap USART6 Rx on DMA1 channel 1 */ +#if !defined(STM32F030xC) +#define HAL_DMA1_CH1_USART7_RX (uint32_t) (DMA1_CHANNEL1_RMP | DMA1_CSELR_CH1_USART7_RX) /*!< Remap USART7 Rx on DMA1 channel 1 */ +#define HAL_DMA1_CH1_USART8_RX (uint32_t) (DMA1_CHANNEL1_RMP | DMA1_CSELR_CH1_USART8_RX) /*!< Remap USART8 Rx on DMA1 channel 1 */ +#endif /* !defined(STM32F030xC) */ + +/* DMA1 - Channel 2 */ +#define HAL_DMA1_CH2_DEFAULT (uint32_t) (DMA1_CHANNEL2_RMP | DMA1_CSELR_DEFAULT) /*!< Default remap position for DMA1 */ +#define HAL_DMA1_CH2_ADC (uint32_t) (DMA1_CHANNEL2_RMP | DMA1_CSELR_CH2_ADC) /*!< Remap ADC on DMA1 channel 2 */ +#define HAL_DMA1_CH2_I2C1_TX (uint32_t) (DMA1_CHANNEL2_RMP | DMA1_CSELR_CH2_I2C1_TX) /*!< Remap I2C1 Tx on DMA1 channel 2 */ +#define HAL_DMA1_CH2_SPI1_RX (uint32_t) (DMA1_CHANNEL2_RMP | DMA1_CSELR_CH2_SPI1_RX) /*!< Remap SPI1 Rx on DMA1 channel 2 */ +#define HAL_DMA1_CH2_TIM1_CH1 (uint32_t) (DMA1_CHANNEL2_RMP | DMA1_CSELR_CH2_TIM1_CH1) /*!< Remap TIM1 channel 1 on DMA1 channel 2 */ +#define HAL_DMA1_CH2_TIM17_CH1 (uint32_t) (DMA1_CHANNEL2_RMP | DMA1_CSELR_CH2_TIM17_CH1) /*!< Remap TIM17 channel 1 on DMA1 channel 2 */ +#define HAL_DMA1_CH2_TIM17_UP (uint32_t) (DMA1_CHANNEL2_RMP | DMA1_CSELR_CH2_TIM17_UP) /*!< Remap TIM17 up on DMA1 channel 2 */ +#define HAL_DMA1_CH2_USART1_TX (uint32_t) (DMA1_CHANNEL2_RMP | DMA1_CSELR_CH2_USART1_TX) /*!< Remap USART1 Tx on DMA1 channel 2 */ +#define HAL_DMA1_CH2_USART2_TX (uint32_t) (DMA1_CHANNEL2_RMP | DMA1_CSELR_CH2_USART2_TX) /*!< Remap USART2 Tx on DMA1 channel 2 */ +#define HAL_DMA1_CH2_USART3_TX (uint32_t) (DMA1_CHANNEL2_RMP | DMA1_CSELR_CH2_USART3_TX) /*!< Remap USART3 Tx on DMA1 channel 2 */ +#define HAL_DMA1_CH2_USART4_TX (uint32_t) (DMA1_CHANNEL2_RMP | DMA1_CSELR_CH2_USART4_TX) /*!< Remap USART4 Tx on DMA1 channel 2 */ +#define HAL_DMA1_CH2_USART5_TX (uint32_t) (DMA1_CHANNEL2_RMP | DMA1_CSELR_CH2_USART5_TX) /*!< Remap USART5 Tx on DMA1 channel 2 */ +#define HAL_DMA1_CH2_USART6_TX (uint32_t) (DMA1_CHANNEL2_RMP | DMA1_CSELR_CH2_USART6_TX) /*!< Remap USART6 Tx on DMA1 channel 2 */ +#if !defined(STM32F030xC) +#define HAL_DMA1_CH2_USART7_TX (uint32_t) (DMA1_CHANNEL2_RMP | DMA1_CSELR_CH2_USART7_TX) /*!< Remap USART7 Tx on DMA1 channel 2 */ +#define HAL_DMA1_CH2_USART8_TX (uint32_t) (DMA1_CHANNEL2_RMP | DMA1_CSELR_CH2_USART8_TX) /*!< Remap USART8 Tx on DMA1 channel 2 */ +#endif /* !defined(STM32F030xC) */ + +/* DMA1 - Channel 3 */ +#define HAL_DMA1_CH3_DEFAULT (uint32_t) (DMA1_CHANNEL3_RMP | DMA1_CSELR_DEFAULT) /*!< Default remap position for DMA1 */ +#define HAL_DMA1_CH3_TIM6_UP (uint32_t) (DMA1_CHANNEL3_RMP | DMA1_CSELR_CH3_TIM6_UP) /*!< Remap TIM6 up on DMA1 channel 3 */ +#if !defined(STM32F030xC) +#define HAL_DMA1_CH3_DAC_CH1 (uint32_t) (DMA1_CHANNEL3_RMP | DMA1_CSELR_CH3_DAC_CH1) /*!< Remap DAC Channel 1on DMA1 channel 3 */ +#endif /* !defined(STM32F030xC) */ +#define HAL_DMA1_CH3_I2C1_RX (uint32_t) (DMA1_CHANNEL3_RMP | DMA1_CSELR_CH3_I2C1_RX) /*!< Remap I2C1 Rx on DMA1 channel 3 */ +#define HAL_DMA1_CH3_SPI1_TX (uint32_t) (DMA1_CHANNEL3_RMP | DMA1_CSELR_CH3_SPI1_TX) /*!< Remap SPI1 Tx on DMA1 channel 3 */ +#define HAL_DMA1_CH3_TIM1_CH2 (uint32_t) (DMA1_CHANNEL3_RMP | DMA1_CSELR_CH3_TIM1_CH2) /*!< Remap TIM1 channel 2 on DMA1 channel 3 */ +#if !defined(STM32F030xC) +#define HAL_DMA1_CH3_TIM2_CH2 (uint32_t) (DMA1_CHANNEL3_RMP | DMA1_CSELR_CH3_TIM2_CH2) /*!< Remap TIM2 channel 2 on DMA1 channel 3 */ +#endif /* !defined(STM32F030xC) */ +#define HAL_DMA1_CH3_TIM16_CH1 (uint32_t) (DMA1_CHANNEL3_RMP | DMA1_CSELR_CH3_TIM16_CH1) /*!< Remap TIM16 channel 1 on DMA1 channel 3 */ +#define HAL_DMA1_CH3_TIM16_UP (uint32_t) (DMA1_CHANNEL3_RMP | DMA1_CSELR_CH3_TIM16_UP) /*!< Remap TIM16 up on DMA1 channel 3 */ +#define HAL_DMA1_CH3_USART1_RX (uint32_t) (DMA1_CHANNEL3_RMP | DMA1_CSELR_CH3_USART1_RX) /*!< Remap USART1 Rx on DMA1 channel 3 */ +#define HAL_DMA1_CH3_USART2_RX (uint32_t) (DMA1_CHANNEL3_RMP | DMA1_CSELR_CH3_USART2_RX) /*!< Remap USART2 Rx on DMA1 channel 3 */ +#define HAL_DMA1_CH3_USART3_RX (uint32_t) (DMA1_CHANNEL3_RMP | DMA1_CSELR_CH3_USART3_RX) /*!< Remap USART3 Rx on DMA1 channel 3 */ +#define HAL_DMA1_CH3_USART4_RX (uint32_t) (DMA1_CHANNEL3_RMP | DMA1_CSELR_CH3_USART4_RX) /*!< Remap USART4 Rx on DMA1 channel 3 */ +#define HAL_DMA1_CH3_USART5_RX (uint32_t) (DMA1_CHANNEL3_RMP | DMA1_CSELR_CH3_USART5_RX) /*!< Remap USART5 Rx on DMA1 channel 3 */ +#define HAL_DMA1_CH3_USART6_RX (uint32_t) (DMA1_CHANNEL3_RMP | DMA1_CSELR_CH3_USART6_RX) /*!< Remap USART6 Rx on DMA1 channel 3 */ +#if !defined(STM32F030xC) +#define HAL_DMA1_CH3_USART7_RX (uint32_t) (DMA1_CHANNEL3_RMP | DMA1_CSELR_CH3_USART7_RX) /*!< Remap USART7 Rx on DMA1 channel 3 */ +#define HAL_DMA1_CH3_USART8_RX (uint32_t) (DMA1_CHANNEL3_RMP | DMA1_CSELR_CH3_USART8_RX) /*!< Remap USART8 Rx on DMA1 channel 3 */ +#endif /* !defined(STM32F030xC) */ + +/* DMA1 - Channel 4 */ +#define HAL_DMA1_CH4_DEFAULT (uint32_t) (DMA1_CHANNEL4_RMP | DMA1_CSELR_DEFAULT) /*!< Default remap position for DMA1 */ +#define HAL_DMA1_CH4_TIM7_UP (uint32_t) (DMA1_CHANNEL4_RMP | DMA1_CSELR_CH4_TIM7_UP) /*!< Remap TIM7 up on DMA1 channel 4 */ +#if !defined(STM32F030xC) +#define HAL_DMA1_CH4_DAC_CH2 (uint32_t) (DMA1_CHANNEL4_RMP | DMA1_CSELR_CH4_DAC_CH2) /*!< Remap DAC Channel 2 on DMA1 channel 4 */ +#endif /* !defined(STM32F030xC) */ +#define HAL_DMA1_CH4_I2C2_TX (uint32_t) (DMA1_CHANNEL4_RMP | DMA1_CSELR_CH4_I2C2_TX) /*!< Remap I2C2 Tx on DMA1 channel 4 */ +#define HAL_DMA1_CH4_SPI2_RX (uint32_t) (DMA1_CHANNEL4_RMP | DMA1_CSELR_CH4_SPI2_RX) /*!< Remap SPI2 Rx on DMA1 channel 4 */ +#if !defined(STM32F030xC) +#define HAL_DMA1_CH4_TIM2_CH4 (uint32_t) (DMA1_CHANNEL4_RMP | DMA1_CSELR_CH4_TIM2_CH4) /*!< Remap TIM2 channel 4 on DMA1 channel 4 */ +#endif /* !defined(STM32F030xC) */ +#define HAL_DMA1_CH4_TIM3_CH1 (uint32_t) (DMA1_CHANNEL4_RMP | DMA1_CSELR_CH4_TIM3_CH1) /*!< Remap TIM3 channel 1 on DMA1 channel 4 */ +#define HAL_DMA1_CH4_TIM3_TRIG (uint32_t) (DMA1_CHANNEL4_RMP | DMA1_CSELR_CH4_TIM3_TRIG) /*!< Remap TIM3 Trig on DMA1 channel 4 */ +#define HAL_DMA1_CH4_TIM16_CH1 (uint32_t) (DMA1_CHANNEL4_RMP | DMA1_CSELR_CH4_TIM16_CH1) /*!< Remap TIM16 channel 1 on DMA1 channel 4 */ +#define HAL_DMA1_CH4_TIM16_UP (uint32_t) (DMA1_CHANNEL4_RMP | DMA1_CSELR_CH4_TIM16_UP) /*!< Remap TIM16 up on DMA1 channel 4 */ +#define HAL_DMA1_CH4_USART1_TX (uint32_t) (DMA1_CHANNEL4_RMP | DMA1_CSELR_CH4_USART1_TX) /*!< Remap USART1 Tx on DMA1 channel 4 */ +#define HAL_DMA1_CH4_USART2_TX (uint32_t) (DMA1_CHANNEL4_RMP | DMA1_CSELR_CH4_USART2_TX) /*!< Remap USART2 Tx on DMA1 channel 4 */ +#define HAL_DMA1_CH4_USART3_TX (uint32_t) (DMA1_CHANNEL4_RMP | DMA1_CSELR_CH4_USART3_TX) /*!< Remap USART3 Tx on DMA1 channel 4 */ +#define HAL_DMA1_CH4_USART4_TX (uint32_t) (DMA1_CHANNEL4_RMP | DMA1_CSELR_CH4_USART4_TX) /*!< Remap USART4 Tx on DMA1 channel 4 */ +#define HAL_DMA1_CH4_USART5_TX (uint32_t) (DMA1_CHANNEL4_RMP | DMA1_CSELR_CH4_USART5_TX) /*!< Remap USART5 Tx on DMA1 channel 4 */ +#define HAL_DMA1_CH4_USART6_TX (uint32_t) (DMA1_CHANNEL4_RMP | DMA1_CSELR_CH4_USART6_TX) /*!< Remap USART6 Tx on DMA1 channel 4 */ +#if !defined(STM32F030xC) +#define HAL_DMA1_CH4_USART7_TX (uint32_t) (DMA1_CHANNEL4_RMP | DMA1_CSELR_CH4_USART7_TX) /*!< Remap USART7 Tx on DMA1 channel 4 */ +#define HAL_DMA1_CH4_USART8_TX (uint32_t) (DMA1_CHANNEL4_RMP | DMA1_CSELR_CH4_USART8_TX) /*!< Remap USART8 Tx on DMA1 channel 4 */ +#endif /* !defined(STM32F030xC) */ + +/* DMA1 - Channel 5 */ +#define HAL_DMA1_CH5_DEFAULT (uint32_t) (DMA1_CHANNEL5_RMP | DMA1_CSELR_DEFAULT) /*!< Default remap position for DMA1 */ +#define HAL_DMA1_CH5_I2C2_RX (uint32_t) (DMA1_CHANNEL5_RMP | DMA1_CSELR_CH5_I2C2_RX) /*!< Remap I2C2 Rx on DMA1 channel 5 */ +#define HAL_DMA1_CH5_SPI2_TX (uint32_t) (DMA1_CHANNEL5_RMP | DMA1_CSELR_CH5_SPI2_TX) /*!< Remap SPI1 Tx on DMA1 channel 5 */ +#define HAL_DMA1_CH5_TIM1_CH3 (uint32_t) (DMA1_CHANNEL5_RMP | DMA1_CSELR_CH5_TIM1_CH3) /*!< Remap TIM1 channel 3 on DMA1 channel 5 */ +#define HAL_DMA1_CH5_USART1_RX (uint32_t) (DMA1_CHANNEL5_RMP | DMA1_CSELR_CH5_USART1_RX) /*!< Remap USART1 Rx on DMA1 channel 5 */ +#define HAL_DMA1_CH5_USART2_RX (uint32_t) (DMA1_CHANNEL5_RMP | DMA1_CSELR_CH5_USART2_RX) /*!< Remap USART2 Rx on DMA1 channel 5 */ +#define HAL_DMA1_CH5_USART3_RX (uint32_t) (DMA1_CHANNEL5_RMP | DMA1_CSELR_CH5_USART3_RX) /*!< Remap USART3 Rx on DMA1 channel 5 */ +#define HAL_DMA1_CH5_USART4_RX (uint32_t) (DMA1_CHANNEL5_RMP | DMA1_CSELR_CH5_USART4_RX) /*!< Remap USART4 Rx on DMA1 channel 5 */ +#define HAL_DMA1_CH5_USART5_RX (uint32_t) (DMA1_CHANNEL5_RMP | DMA1_CSELR_CH5_USART5_RX) /*!< Remap USART5 Rx on DMA1 channel 5 */ +#define HAL_DMA1_CH5_USART6_RX (uint32_t) (DMA1_CHANNEL5_RMP | DMA1_CSELR_CH5_USART6_RX) /*!< Remap USART6 Rx on DMA1 channel 5 */ +#if !defined(STM32F030xC) +#define HAL_DMA1_CH5_USART7_RX (uint32_t) (DMA1_CHANNEL5_RMP | DMA1_CSELR_CH5_USART7_RX) /*!< Remap USART7 Rx on DMA1 channel 5 */ +#define HAL_DMA1_CH5_USART8_RX (uint32_t) (DMA1_CHANNEL5_RMP | DMA1_CSELR_CH5_USART8_RX) /*!< Remap USART8 Rx on DMA1 channel 5 */ +#endif /* !defined(STM32F030xC) */ + +#if !defined(STM32F030xC) +/* DMA1 - Channel 6 */ +#define HAL_DMA1_CH6_DEFAULT (uint32_t) (DMA1_CHANNEL6_RMP | DMA1_CSELR_DEFAULT) /*!< Default remap position for DMA1 */ +#define HAL_DMA1_CH6_I2C1_TX (uint32_t) (DMA1_CHANNEL6_RMP | DMA1_CSELR_CH6_I2C1_TX) /*!< Remap I2C1 Tx on DMA1 channel 6 */ +#define HAL_DMA1_CH6_SPI2_RX (uint32_t) (DMA1_CHANNEL6_RMP | DMA1_CSELR_CH6_SPI2_RX) /*!< Remap SPI2 Rx on DMA1 channel 6 */ +#define HAL_DMA1_CH6_TIM1_CH1 (uint32_t) (DMA1_CHANNEL6_RMP | DMA1_CSELR_CH6_TIM1_CH1) /*!< Remap TIM1 channel 1 on DMA1 channel 6 */ +#define HAL_DMA1_CH6_TIM1_CH2 (uint32_t) (DMA1_CHANNEL6_RMP | DMA1_CSELR_CH6_TIM1_CH2) /*!< Remap TIM1 channel 2 on DMA1 channel 6 */ +#define HAL_DMA1_CH6_TIM1_CH3 (uint32_t) (DMA1_CHANNEL6_RMP | DMA1_CSELR_CH6_TIM1_CH3) /*!< Remap TIM1 channel 3 on DMA1 channel 6 */ +#define HAL_DMA1_CH6_TIM3_CH1 (uint32_t) (DMA1_CHANNEL6_RMP | DMA1_CSELR_CH6_TIM3_CH1) /*!< Remap TIM3 channel 1 on DMA1 channel 6 */ +#define HAL_DMA1_CH6_TIM3_TRIG (uint32_t) (DMA1_CHANNEL6_RMP | DMA1_CSELR_CH6_TIM3_TRIG) /*!< Remap TIM3 Trig on DMA1 channel 6 */ +#define HAL_DMA1_CH6_TIM16_CH1 (uint32_t) (DMA1_CHANNEL6_RMP | DMA1_CSELR_CH6_TIM16_CH1) /*!< Remap TIM16 channel 1 on DMA1 channel 6 */ +#define HAL_DMA1_CH6_TIM16_UP (uint32_t) (DMA1_CHANNEL6_RMP | DMA1_CSELR_CH6_TIM16_UP) /*!< Remap TIM16 up on DMA1 channel 6 */ +#define HAL_DMA1_CH6_USART1_RX (uint32_t) (DMA1_CHANNEL6_RMP | DMA1_CSELR_CH6_USART1_RX) /*!< Remap USART1 Rx on DMA1 channel 6 */ +#define HAL_DMA1_CH6_USART2_RX (uint32_t) (DMA1_CHANNEL6_RMP | DMA1_CSELR_CH6_USART2_RX) /*!< Remap USART2 Rx on DMA1 channel 6 */ +#define HAL_DMA1_CH6_USART3_RX (uint32_t) (DMA1_CHANNEL6_RMP | DMA1_CSELR_CH6_USART3_RX) /*!< Remap USART3 Rx on DMA1 channel 6 */ +#define HAL_DMA1_CH6_USART4_RX (uint32_t) (DMA1_CHANNEL6_RMP | DMA1_CSELR_CH6_USART4_RX) /*!< Remap USART4 Rx on DMA1 channel 6 */ +#define HAL_DMA1_CH6_USART5_RX (uint32_t) (DMA1_CHANNEL6_RMP | DMA1_CSELR_CH6_USART5_RX) /*!< Remap USART5 Rx on DMA1 channel 6 */ +#define HAL_DMA1_CH6_USART6_RX (uint32_t) (DMA1_CHANNEL6_RMP | DMA1_CSELR_CH6_USART6_RX) /*!< Remap USART6 Rx on DMA1 channel 6 */ +#define HAL_DMA1_CH6_USART7_RX (uint32_t) (DMA1_CHANNEL6_RMP | DMA1_CSELR_CH6_USART7_RX) /*!< Remap USART7 Rx on DMA1 channel 6 */ +#define HAL_DMA1_CH6_USART8_RX (uint32_t) (DMA1_CHANNEL6_RMP | DMA1_CSELR_CH6_USART8_RX) /*!< Remap USART8 Rx on DMA1 channel 6 */ +/* DMA1 - Channel 7 */ +#define HAL_DMA1_CH7_DEFAULT (uint32_t) (DMA1_CHANNEL7_RMP | DMA1_CSELR_DEFAULT) /*!< Default remap position for DMA1 */ +#define HAL_DMA1_CH7_I2C1_RX (uint32_t) (DMA1_CHANNEL7_RMP | DMA1_CSELR_CH7_I2C1_RX) /*!< Remap I2C1 Rx on DMA1 channel 7 */ +#define HAL_DMA1_CH7_SPI2_TX (uint32_t) (DMA1_CHANNEL7_RMP | DMA1_CSELR_CH7_SPI2_TX) /*!< Remap SPI2 Tx on DMA1 channel 7 */ +#define HAL_DMA1_CH7_TIM2_CH2 (uint32_t) (DMA1_CHANNEL7_RMP | DMA1_CSELR_CH7_TIM2_CH2) /*!< Remap TIM2 channel 2 on DMA1 channel 7 */ +#define HAL_DMA1_CH7_TIM2_CH4 (uint32_t) (DMA1_CHANNEL7_RMP | DMA1_CSELR_CH7_TIM2_CH4) /*!< Remap TIM2 channel 4 on DMA1 channel 7 */ +#define HAL_DMA1_CH7_TIM17_CH1 (uint32_t) (DMA1_CHANNEL7_RMP | DMA1_CSELR_CH7_TIM17_CH1) /*!< Remap TIM17 channel 1 on DMA1 channel 7 */ +#define HAL_DMA1_CH7_TIM17_UP (uint32_t) (DMA1_CHANNEL7_RMP | DMA1_CSELR_CH7_TIM17_UP) /*!< Remap TIM17 up on DMA1 channel 7 */ +#define HAL_DMA1_CH7_USART1_TX (uint32_t) (DMA1_CHANNEL7_RMP | DMA1_CSELR_CH7_USART1_TX) /*!< Remap USART1 Tx on DMA1 channel 7 */ +#define HAL_DMA1_CH7_USART2_TX (uint32_t) (DMA1_CHANNEL7_RMP | DMA1_CSELR_CH7_USART2_TX) /*!< Remap USART2 Tx on DMA1 channel 7 */ +#define HAL_DMA1_CH7_USART3_TX (uint32_t) (DMA1_CHANNEL7_RMP | DMA1_CSELR_CH7_USART3_TX) /*!< Remap USART3 Tx on DMA1 channel 7 */ +#define HAL_DMA1_CH7_USART4_TX (uint32_t) (DMA1_CHANNEL7_RMP | DMA1_CSELR_CH7_USART4_TX) /*!< Remap USART4 Tx on DMA1 channel 7 */ +#define HAL_DMA1_CH7_USART5_TX (uint32_t) (DMA1_CHANNEL7_RMP | DMA1_CSELR_CH7_USART5_TX) /*!< Remap USART5 Tx on DMA1 channel 7 */ +#define HAL_DMA1_CH7_USART6_TX (uint32_t) (DMA1_CHANNEL7_RMP | DMA1_CSELR_CH7_USART6_TX) /*!< Remap USART6 Tx on DMA1 channel 7 */ +#define HAL_DMA1_CH7_USART7_TX (uint32_t) (DMA1_CHANNEL7_RMP | DMA1_CSELR_CH7_USART7_TX) /*!< Remap USART7 Tx on DMA1 channel 7 */ +#define HAL_DMA1_CH7_USART8_TX (uint32_t) (DMA1_CHANNEL7_RMP | DMA1_CSELR_CH7_USART8_TX) /*!< Remap USART8 Tx on DMA1 channel 7 */ + +/****************** DMA2 remap bit field definition********************/ +/* DMA2 - Channel 1 */ +#define HAL_DMA2_CH1_DEFAULT (uint32_t) (DMA2_CHANNEL1_RMP | DMA2_CSELR_DEFAULT) /*!< Default remap position for DMA2 */ +#define HAL_DMA2_CH1_I2C2_TX (uint32_t) (DMA2_CHANNEL1_RMP | DMA2_CSELR_CH1_I2C2_TX) /*!< Remap I2C2 TX on DMA2 channel 1 */ +#define HAL_DMA2_CH1_USART1_TX (uint32_t) (DMA2_CHANNEL1_RMP | DMA2_CSELR_CH1_USART1_TX) /*!< Remap USART1 Tx on DMA2 channel 1 */ +#define HAL_DMA2_CH1_USART2_TX (uint32_t) (DMA2_CHANNEL1_RMP | DMA2_CSELR_CH1_USART2_TX) /*!< Remap USART2 Tx on DMA2 channel 1 */ +#define HAL_DMA2_CH1_USART3_TX (uint32_t) (DMA2_CHANNEL1_RMP | DMA2_CSELR_CH1_USART3_TX) /*!< Remap USART3 Tx on DMA2 channel 1 */ +#define HAL_DMA2_CH1_USART4_TX (uint32_t) (DMA2_CHANNEL1_RMP | DMA2_CSELR_CH1_USART4_TX) /*!< Remap USART4 Tx on DMA2 channel 1 */ +#define HAL_DMA2_CH1_USART5_TX (uint32_t) (DMA2_CHANNEL1_RMP | DMA2_CSELR_CH1_USART5_TX) /*!< Remap USART5 Tx on DMA2 channel 1 */ +#define HAL_DMA2_CH1_USART6_TX (uint32_t) (DMA2_CHANNEL1_RMP | DMA2_CSELR_CH1_USART6_TX) /*!< Remap USART6 Tx on DMA2 channel 1 */ +#define HAL_DMA2_CH1_USART7_TX (uint32_t) (DMA2_CHANNEL1_RMP | DMA2_CSELR_CH1_USART7_TX) /*!< Remap USART7 Tx on DMA2 channel 1 */ +#define HAL_DMA2_CH1_USART8_TX (uint32_t) (DMA2_CHANNEL1_RMP | DMA2_CSELR_CH1_USART8_TX) /*!< Remap USART8 Tx on DMA2 channel 1 */ +/* DMA2 - Channel 2 */ +#define HAL_DMA2_CH2_DEFAULT (uint32_t) (DMA2_CHANNEL2_RMP | DMA2_CSELR_DEFAULT) /*!< Default remap position for DMA2 */ +#define HAL_DMA2_CH2_I2C2_RX (uint32_t) (DMA2_CHANNEL2_RMP | DMA2_CSELR_CH2_I2C2_RX) /*!< Remap I2C2 Rx on DMA2 channel 2 */ +#define HAL_DMA2_CH2_USART1_RX (uint32_t) (DMA2_CHANNEL2_RMP | DMA2_CSELR_CH2_USART1_RX) /*!< Remap USART1 Rx on DMA2 channel 2 */ +#define HAL_DMA2_CH2_USART2_RX (uint32_t) (DMA2_CHANNEL2_RMP | DMA2_CSELR_CH2_USART2_RX) /*!< Remap USART2 Rx on DMA2 channel 2 */ +#define HAL_DMA2_CH2_USART3_RX (uint32_t) (DMA2_CHANNEL2_RMP | DMA2_CSELR_CH2_USART3_RX) /*!< Remap USART3 Rx on DMA2 channel 2 */ +#define HAL_DMA2_CH2_USART4_RX (uint32_t) (DMA2_CHANNEL2_RMP | DMA2_CSELR_CH2_USART4_RX) /*!< Remap USART4 Rx on DMA2 channel 2 */ +#define HAL_DMA2_CH2_USART5_RX (uint32_t) (DMA2_CHANNEL2_RMP | DMA2_CSELR_CH2_USART5_RX) /*!< Remap USART5 Rx on DMA2 channel 2 */ +#define HAL_DMA2_CH2_USART6_RX (uint32_t) (DMA2_CHANNEL2_RMP | DMA2_CSELR_CH2_USART6_RX) /*!< Remap USART6 Rx on DMA2 channel 2 */ +#define HAL_DMA2_CH2_USART7_RX (uint32_t) (DMA2_CHANNEL2_RMP | DMA2_CSELR_CH2_USART7_RX) /*!< Remap USART7 Rx on DMA2 channel 2 */ +#define HAL_DMA2_CH2_USART8_RX (uint32_t) (DMA2_CHANNEL2_RMP | DMA2_CSELR_CH2_USART8_RX) /*!< Remap USART8 Rx on DMA2 channel 2 */ +/* DMA2 - Channel 3 */ +#define HAL_DMA2_CH3_DEFAULT (uint32_t) (DMA2_CHANNEL3_RMP | DMA2_CSELR_DEFAULT) /*!< Default remap position for DMA2 */ +#define HAL_DMA2_CH3_TIM6_UP (uint32_t) (DMA2_CHANNEL3_RMP | DMA2_CSELR_CH3_TIM6_UP) /*!< Remap TIM6 up on DMA2 channel 3 */ +#define HAL_DMA2_CH3_DAC_CH1 (uint32_t) (DMA2_CHANNEL3_RMP | DMA2_CSELR_CH3_DAC_CH1) /*!< Remap DAC channel 1 on DMA2 channel 3 */ +#define HAL_DMA2_CH3_SPI1_RX (uint32_t) (DMA2_CHANNEL3_RMP | DMA2_CSELR_CH3_SPI1_RX) /*!< Remap SPI1 Rx on DMA2 channel 3 */ +#define HAL_DMA2_CH3_USART1_RX (uint32_t) (DMA2_CHANNEL3_RMP | DMA2_CSELR_CH3_USART1_RX) /*!< Remap USART1 Rx on DMA2 channel 3 */ +#define HAL_DMA2_CH3_USART2_RX (uint32_t) (DMA2_CHANNEL3_RMP | DMA2_CSELR_CH3_USART2_RX) /*!< Remap USART2 Rx on DMA2 channel 3 */ +#define HAL_DMA2_CH3_USART3_RX (uint32_t) (DMA2_CHANNEL3_RMP | DMA2_CSELR_CH3_USART3_RX) /*!< Remap USART3 Rx on DMA2 channel 3 */ +#define HAL_DMA2_CH3_USART4_RX (uint32_t) (DMA2_CHANNEL3_RMP | DMA2_CSELR_CH3_USART4_RX) /*!< Remap USART4 Rx on DMA2 channel 3 */ +#define HAL_DMA2_CH3_USART5_RX (uint32_t) (DMA2_CHANNEL3_RMP | DMA2_CSELR_CH3_USART5_RX) /*!< Remap USART5 Rx on DMA2 channel 3 */ +#define HAL_DMA2_CH3_USART6_RX (uint32_t) (DMA2_CHANNEL3_RMP | DMA2_CSELR_CH3_USART6_RX) /*!< Remap USART6 Rx on DMA2 channel 3 */ +#define HAL_DMA2_CH3_USART7_RX (uint32_t) (DMA2_CHANNEL3_RMP | DMA2_CSELR_CH3_USART7_RX) /*!< Remap USART7 Rx on DMA2 channel 3 */ +#define HAL_DMA2_CH3_USART8_RX (uint32_t) (DMA2_CHANNEL3_RMP | DMA2_CSELR_CH3_USART8_RX) /*!< Remap USART8 Rx on DMA2 channel 3 */ +/* DMA2 - Channel 4 */ +#define HAL_DMA2_CH4_DEFAULT (uint32_t) (DMA2_CHANNEL4_RMP | DMA2_CSELR_DEFAULT) /*!< Default remap position for DMA2 */ +#define HAL_DMA2_CH4_TIM7_UP (uint32_t) (DMA2_CHANNEL4_RMP | DMA2_CSELR_CH4_TIM7_UP) /*!< Remap TIM7 up on DMA2 channel 4 */ +#define HAL_DMA2_CH4_DAC_CH2 (uint32_t) (DMA2_CHANNEL4_RMP | DMA2_CSELR_CH4_DAC_CH2) /*!< Remap DAC channel 2 on DMA2 channel 4 */ +#define HAL_DMA2_CH4_SPI1_TX (uint32_t) (DMA2_CHANNEL4_RMP | DMA2_CSELR_CH4_SPI1_TX) /*!< Remap SPI1 Tx on DMA2 channel 4 */ +#define HAL_DMA2_CH4_USART1_TX (uint32_t) (DMA2_CHANNEL4_RMP | DMA2_CSELR_CH4_USART1_TX) /*!< Remap USART1 Tx on DMA2 channel 4 */ +#define HAL_DMA2_CH4_USART2_TX (uint32_t) (DMA2_CHANNEL4_RMP | DMA2_CSELR_CH4_USART2_TX) /*!< Remap USART2 Tx on DMA2 channel 4 */ +#define HAL_DMA2_CH4_USART3_TX (uint32_t) (DMA2_CHANNEL4_RMP | DMA2_CSELR_CH4_USART3_TX) /*!< Remap USART3 Tx on DMA2 channel 4 */ +#define HAL_DMA2_CH4_USART4_TX (uint32_t) (DMA2_CHANNEL4_RMP | DMA2_CSELR_CH4_USART4_TX) /*!< Remap USART4 Tx on DMA2 channel 4 */ +#define HAL_DMA2_CH4_USART5_TX (uint32_t) (DMA2_CHANNEL4_RMP | DMA2_CSELR_CH4_USART5_TX) /*!< Remap USART5 Tx on DMA2 channel 4 */ +#define HAL_DMA2_CH4_USART6_TX (uint32_t) (DMA2_CHANNEL4_RMP | DMA2_CSELR_CH4_USART6_TX) /*!< Remap USART6 Tx on DMA2 channel 4 */ +#define HAL_DMA2_CH4_USART7_TX (uint32_t) (DMA2_CHANNEL4_RMP | DMA2_CSELR_CH4_USART7_TX) /*!< Remap USART7 Tx on DMA2 channel 4 */ +#define HAL_DMA2_CH4_USART8_TX (uint32_t) (DMA2_CHANNEL4_RMP | DMA2_CSELR_CH4_USART8_TX) /*!< Remap USART8 Tx on DMA2 channel 4 */ +/* DMA2 - Channel 5 */ +#define HAL_DMA2_CH5_DEFAULT (uint32_t) (DMA2_CHANNEL5_RMP | DMA2_CSELR_DEFAULT) /*!< Default remap position for DMA2 */ +#define HAL_DMA2_CH5_ADC (uint32_t) (DMA2_CHANNEL5_RMP | DMA2_CSELR_CH5_ADC) /*!< Remap ADC on DMA2 channel 5 */ +#define HAL_DMA2_CH5_USART1_TX (uint32_t) (DMA2_CHANNEL5_RMP | DMA2_CSELR_CH5_USART1_TX) /*!< Remap USART1 Tx on DMA2 channel 5 */ +#define HAL_DMA2_CH5_USART2_TX (uint32_t) (DMA2_CHANNEL5_RMP | DMA2_CSELR_CH5_USART2_TX) /*!< Remap USART2 Tx on DMA2 channel 5 */ +#define HAL_DMA2_CH5_USART3_TX (uint32_t) (DMA2_CHANNEL5_RMP | DMA2_CSELR_CH5_USART3_TX) /*!< Remap USART3 Tx on DMA2 channel 5 */ +#define HAL_DMA2_CH5_USART4_TX (uint32_t) (DMA2_CHANNEL5_RMP | DMA2_CSELR_CH5_USART4_TX) /*!< Remap USART4 Tx on DMA2 channel 5 */ +#define HAL_DMA2_CH5_USART5_TX (uint32_t) (DMA2_CHANNEL5_RMP | DMA2_CSELR_CH5_USART5_TX) /*!< Remap USART5 Tx on DMA2 channel 5 */ +#define HAL_DMA2_CH5_USART6_TX (uint32_t) (DMA2_CHANNEL5_RMP | DMA2_CSELR_CH5_USART6_TX) /*!< Remap USART6 Tx on DMA2 channel 5 */ +#define HAL_DMA2_CH5_USART7_TX (uint32_t) (DMA2_CHANNEL5_RMP | DMA2_CSELR_CH5_USART7_TX) /*!< Remap USART7 Tx on DMA2 channel 5 */ +#define HAL_DMA2_CH5_USART8_TX (uint32_t) (DMA2_CHANNEL5_RMP | DMA2_CSELR_CH5_USART8_TX) /*!< Remap USART8 Tx on DMA2 channel 5 */ +#endif /* !defined(STM32F030xC) */ + +#if defined(STM32F091xC) || defined(STM32F098xx) +#define IS_HAL_DMA1_REMAP(REQUEST) (((REQUEST) == HAL_DMA1_CH1_DEFAULT) ||\ + ((REQUEST) == HAL_DMA1_CH1_ADC) ||\ + ((REQUEST) == HAL_DMA1_CH1_TIM17_CH1) ||\ + ((REQUEST) == HAL_DMA1_CH1_TIM17_UP) ||\ + ((REQUEST) == HAL_DMA1_CH1_USART1_RX) ||\ + ((REQUEST) == HAL_DMA1_CH1_USART2_RX) ||\ + ((REQUEST) == HAL_DMA1_CH1_USART3_RX) ||\ + ((REQUEST) == HAL_DMA1_CH1_USART4_RX) ||\ + ((REQUEST) == HAL_DMA1_CH1_USART5_RX) ||\ + ((REQUEST) == HAL_DMA1_CH1_USART6_RX) ||\ + ((REQUEST) == HAL_DMA1_CH1_USART7_RX) ||\ + ((REQUEST) == HAL_DMA1_CH1_USART8_RX) ||\ + ((REQUEST) == HAL_DMA1_CH2_DEFAULT) ||\ + ((REQUEST) == HAL_DMA1_CH2_ADC) ||\ + ((REQUEST) == HAL_DMA1_CH2_I2C1_TX) ||\ + ((REQUEST) == HAL_DMA1_CH2_SPI1_RX) ||\ + ((REQUEST) == HAL_DMA1_CH2_TIM1_CH1) ||\ + ((REQUEST) == HAL_DMA1_CH2_I2C1_TX) ||\ + ((REQUEST) == HAL_DMA1_CH2_TIM17_CH1) ||\ + ((REQUEST) == HAL_DMA1_CH2_TIM17_UP) ||\ + ((REQUEST) == HAL_DMA1_CH2_USART1_TX) ||\ + ((REQUEST) == HAL_DMA1_CH2_USART2_TX) ||\ + ((REQUEST) == HAL_DMA1_CH2_USART3_TX) ||\ + ((REQUEST) == HAL_DMA1_CH2_USART4_TX) ||\ + ((REQUEST) == HAL_DMA1_CH2_USART5_TX) ||\ + ((REQUEST) == HAL_DMA1_CH2_USART6_TX) ||\ + ((REQUEST) == HAL_DMA1_CH2_USART7_TX) ||\ + ((REQUEST) == HAL_DMA1_CH2_USART8_TX) ||\ + ((REQUEST) == HAL_DMA1_CH3_DEFAULT) ||\ + ((REQUEST) == HAL_DMA1_CH3_TIM6_UP) ||\ + ((REQUEST) == HAL_DMA1_CH3_DAC_CH1) ||\ + ((REQUEST) == HAL_DMA1_CH3_I2C1_RX) ||\ + ((REQUEST) == HAL_DMA1_CH3_SPI1_TX) ||\ + ((REQUEST) == HAL_DMA1_CH3_TIM1_CH2) ||\ + ((REQUEST) == HAL_DMA1_CH3_TIM2_CH2) ||\ + ((REQUEST) == HAL_DMA1_CH3_TIM16_CH1) ||\ + ((REQUEST) == HAL_DMA1_CH3_TIM16_UP) ||\ + ((REQUEST) == HAL_DMA1_CH3_USART1_RX) ||\ + ((REQUEST) == HAL_DMA1_CH3_USART2_RX) ||\ + ((REQUEST) == HAL_DMA1_CH3_USART3_RX) ||\ + ((REQUEST) == HAL_DMA1_CH3_USART4_RX) ||\ + ((REQUEST) == HAL_DMA1_CH3_USART5_RX) ||\ + ((REQUEST) == HAL_DMA1_CH3_USART6_RX) ||\ + ((REQUEST) == HAL_DMA1_CH3_USART7_RX) ||\ + ((REQUEST) == HAL_DMA1_CH3_USART8_RX) ||\ + ((REQUEST) == HAL_DMA1_CH4_DEFAULT) ||\ + ((REQUEST) == HAL_DMA1_CH4_TIM7_UP) ||\ + ((REQUEST) == HAL_DMA1_CH4_DAC_CH2) ||\ + ((REQUEST) == HAL_DMA1_CH4_I2C2_TX) ||\ + ((REQUEST) == HAL_DMA1_CH4_SPI2_RX) ||\ + ((REQUEST) == HAL_DMA1_CH4_TIM2_CH4) ||\ + ((REQUEST) == HAL_DMA1_CH4_TIM3_CH1) ||\ + ((REQUEST) == HAL_DMA1_CH4_TIM3_TRIG) ||\ + ((REQUEST) == HAL_DMA1_CH4_TIM16_CH1) ||\ + ((REQUEST) == HAL_DMA1_CH4_TIM16_UP) ||\ + ((REQUEST) == HAL_DMA1_CH4_USART1_TX) ||\ + ((REQUEST) == HAL_DMA1_CH4_USART2_TX) ||\ + ((REQUEST) == HAL_DMA1_CH4_USART3_TX) ||\ + ((REQUEST) == HAL_DMA1_CH4_USART4_TX) ||\ + ((REQUEST) == HAL_DMA1_CH4_USART5_TX) ||\ + ((REQUEST) == HAL_DMA1_CH4_USART6_TX) ||\ + ((REQUEST) == HAL_DMA1_CH4_USART7_TX) ||\ + ((REQUEST) == HAL_DMA1_CH4_USART8_TX) ||\ + ((REQUEST) == HAL_DMA1_CH5_DEFAULT) ||\ + ((REQUEST) == HAL_DMA1_CH5_I2C2_RX) ||\ + ((REQUEST) == HAL_DMA1_CH5_SPI2_TX) ||\ + ((REQUEST) == HAL_DMA1_CH5_TIM1_CH3) ||\ + ((REQUEST) == HAL_DMA1_CH5_USART1_RX) ||\ + ((REQUEST) == HAL_DMA1_CH5_USART2_RX) ||\ + ((REQUEST) == HAL_DMA1_CH5_USART3_RX) ||\ + ((REQUEST) == HAL_DMA1_CH5_USART4_RX) ||\ + ((REQUEST) == HAL_DMA1_CH5_USART5_RX) ||\ + ((REQUEST) == HAL_DMA1_CH5_USART6_RX) ||\ + ((REQUEST) == HAL_DMA1_CH5_USART7_RX) ||\ + ((REQUEST) == HAL_DMA1_CH5_USART8_RX) ||\ + ((REQUEST) == HAL_DMA1_CH6_DEFAULT) ||\ + ((REQUEST) == HAL_DMA1_CH6_I2C1_TX) ||\ + ((REQUEST) == HAL_DMA1_CH6_SPI2_RX) ||\ + ((REQUEST) == HAL_DMA1_CH6_TIM1_CH1) ||\ + ((REQUEST) == HAL_DMA1_CH6_TIM1_CH2) ||\ + ((REQUEST) == HAL_DMA1_CH6_TIM1_CH3) ||\ + ((REQUEST) == HAL_DMA1_CH6_TIM3_CH1) ||\ + ((REQUEST) == HAL_DMA1_CH6_TIM3_TRIG) ||\ + ((REQUEST) == HAL_DMA1_CH6_TIM16_CH1) ||\ + ((REQUEST) == HAL_DMA1_CH6_TIM16_UP) ||\ + ((REQUEST) == HAL_DMA1_CH6_USART1_RX) ||\ + ((REQUEST) == HAL_DMA1_CH6_USART2_RX) ||\ + ((REQUEST) == HAL_DMA1_CH6_USART3_RX) ||\ + ((REQUEST) == HAL_DMA1_CH6_USART4_RX) ||\ + ((REQUEST) == HAL_DMA1_CH6_USART5_RX) ||\ + ((REQUEST) == HAL_DMA1_CH6_USART6_RX) ||\ + ((REQUEST) == HAL_DMA1_CH6_USART7_RX) ||\ + ((REQUEST) == HAL_DMA1_CH6_USART8_RX) ||\ + ((REQUEST) == HAL_DMA1_CH7_DEFAULT) ||\ + ((REQUEST) == HAL_DMA1_CH7_I2C1_RX) ||\ + ((REQUEST) == HAL_DMA1_CH7_SPI2_TX) ||\ + ((REQUEST) == HAL_DMA1_CH7_TIM2_CH2) ||\ + ((REQUEST) == HAL_DMA1_CH7_TIM2_CH4) ||\ + ((REQUEST) == HAL_DMA1_CH7_TIM17_CH1) ||\ + ((REQUEST) == HAL_DMA1_CH7_TIM17_UP) ||\ + ((REQUEST) == HAL_DMA1_CH7_USART1_TX) ||\ + ((REQUEST) == HAL_DMA1_CH7_USART2_TX) ||\ + ((REQUEST) == HAL_DMA1_CH7_USART3_TX) ||\ + ((REQUEST) == HAL_DMA1_CH7_USART4_TX) ||\ + ((REQUEST) == HAL_DMA1_CH7_USART5_TX) ||\ + ((REQUEST) == HAL_DMA1_CH7_USART6_TX) ||\ + ((REQUEST) == HAL_DMA1_CH7_USART7_TX) ||\ + ((REQUEST) == HAL_DMA1_CH7_USART8_TX)) + +#define IS_HAL_DMA2_REMAP(REQUEST) (((REQUEST) == HAL_DMA2_CH1_DEFAULT) ||\ + ((REQUEST) == HAL_DMA2_CH1_I2C2_TX) ||\ + ((REQUEST) == HAL_DMA2_CH1_USART1_TX) ||\ + ((REQUEST) == HAL_DMA2_CH1_USART2_TX) ||\ + ((REQUEST) == HAL_DMA2_CH1_USART3_TX) ||\ + ((REQUEST) == HAL_DMA2_CH1_USART4_TX) ||\ + ((REQUEST) == HAL_DMA2_CH1_USART5_TX) ||\ + ((REQUEST) == HAL_DMA2_CH1_USART6_TX) ||\ + ((REQUEST) == HAL_DMA2_CH1_USART7_TX) ||\ + ((REQUEST) == HAL_DMA2_CH1_USART8_TX) ||\ + ((REQUEST) == HAL_DMA2_CH2_DEFAULT) ||\ + ((REQUEST) == HAL_DMA2_CH2_I2C2_RX) ||\ + ((REQUEST) == HAL_DMA2_CH2_USART1_RX) ||\ + ((REQUEST) == HAL_DMA2_CH2_USART2_RX) ||\ + ((REQUEST) == HAL_DMA2_CH2_USART3_RX) ||\ + ((REQUEST) == HAL_DMA2_CH2_USART4_RX) ||\ + ((REQUEST) == HAL_DMA2_CH2_USART5_RX) ||\ + ((REQUEST) == HAL_DMA2_CH2_USART6_RX) ||\ + ((REQUEST) == HAL_DMA2_CH2_USART7_RX) ||\ + ((REQUEST) == HAL_DMA2_CH2_USART8_RX) ||\ + ((REQUEST) == HAL_DMA2_CH3_DEFAULT) ||\ + ((REQUEST) == HAL_DMA2_CH3_TIM6_UP) ||\ + ((REQUEST) == HAL_DMA2_CH3_DAC_CH1) ||\ + ((REQUEST) == HAL_DMA2_CH3_SPI1_RX) ||\ + ((REQUEST) == HAL_DMA2_CH3_USART1_RX) ||\ + ((REQUEST) == HAL_DMA2_CH3_USART2_RX) ||\ + ((REQUEST) == HAL_DMA2_CH3_USART3_RX) ||\ + ((REQUEST) == HAL_DMA2_CH3_USART4_RX) ||\ + ((REQUEST) == HAL_DMA2_CH3_USART5_RX) ||\ + ((REQUEST) == HAL_DMA2_CH3_USART6_RX) ||\ + ((REQUEST) == HAL_DMA2_CH3_USART7_RX) ||\ + ((REQUEST) == HAL_DMA2_CH3_USART8_RX) ||\ + ((REQUEST) == HAL_DMA2_CH4_DEFAULT) ||\ + ((REQUEST) == HAL_DMA2_CH4_TIM7_UP) ||\ + ((REQUEST) == HAL_DMA2_CH4_DAC_CH2) ||\ + ((REQUEST) == HAL_DMA2_CH4_SPI1_TX) ||\ + ((REQUEST) == HAL_DMA2_CH4_USART1_TX) ||\ + ((REQUEST) == HAL_DMA2_CH4_USART2_TX) ||\ + ((REQUEST) == HAL_DMA2_CH4_USART3_TX) ||\ + ((REQUEST) == HAL_DMA2_CH4_USART4_TX) ||\ + ((REQUEST) == HAL_DMA2_CH4_USART5_TX) ||\ + ((REQUEST) == HAL_DMA2_CH4_USART6_TX) ||\ + ((REQUEST) == HAL_DMA2_CH4_USART7_TX) ||\ + ((REQUEST) == HAL_DMA2_CH4_USART8_TX) ||\ + ((REQUEST) == HAL_DMA2_CH5_DEFAULT) ||\ + ((REQUEST) == HAL_DMA2_CH5_ADC) ||\ + ((REQUEST) == HAL_DMA2_CH5_USART1_TX) ||\ + ((REQUEST) == HAL_DMA2_CH5_USART2_TX) ||\ + ((REQUEST) == HAL_DMA2_CH5_USART3_TX) ||\ + ((REQUEST) == HAL_DMA2_CH5_USART4_TX) ||\ + ((REQUEST) == HAL_DMA2_CH5_USART5_TX) ||\ + ((REQUEST) == HAL_DMA2_CH5_USART6_TX) ||\ + ((REQUEST) == HAL_DMA2_CH5_USART7_TX) ||\ + ((REQUEST) == HAL_DMA2_CH5_USART8_TX )) +#endif /* STM32F091xC || STM32F098xx */ + +#if defined(STM32F030xC) +#define IS_HAL_DMA1_REMAP(REQUEST) (((REQUEST) == HAL_DMA1_CH1_DEFAULT) ||\ + ((REQUEST) == HAL_DMA1_CH1_ADC) ||\ + ((REQUEST) == HAL_DMA1_CH1_TIM17_CH1) ||\ + ((REQUEST) == HAL_DMA1_CH1_TIM17_UP) ||\ + ((REQUEST) == HAL_DMA1_CH1_USART1_RX) ||\ + ((REQUEST) == HAL_DMA1_CH1_USART2_RX) ||\ + ((REQUEST) == HAL_DMA1_CH1_USART3_RX) ||\ + ((REQUEST) == HAL_DMA1_CH1_USART4_RX) ||\ + ((REQUEST) == HAL_DMA1_CH1_USART5_RX) ||\ + ((REQUEST) == HAL_DMA1_CH1_USART6_RX) ||\ + ((REQUEST) == HAL_DMA1_CH2_DEFAULT) ||\ + ((REQUEST) == HAL_DMA1_CH2_ADC) ||\ + ((REQUEST) == HAL_DMA1_CH2_I2C1_TX) ||\ + ((REQUEST) == HAL_DMA1_CH2_SPI1_RX) ||\ + ((REQUEST) == HAL_DMA1_CH2_TIM1_CH1) ||\ + ((REQUEST) == HAL_DMA1_CH2_I2C1_TX) ||\ + ((REQUEST) == HAL_DMA1_CH2_TIM17_CH1) ||\ + ((REQUEST) == HAL_DMA1_CH2_TIM17_UP) ||\ + ((REQUEST) == HAL_DMA1_CH2_USART1_TX) ||\ + ((REQUEST) == HAL_DMA1_CH2_USART2_TX) ||\ + ((REQUEST) == HAL_DMA1_CH2_USART3_TX) ||\ + ((REQUEST) == HAL_DMA1_CH2_USART4_TX) ||\ + ((REQUEST) == HAL_DMA1_CH2_USART5_TX) ||\ + ((REQUEST) == HAL_DMA1_CH2_USART6_TX) ||\ + ((REQUEST) == HAL_DMA1_CH3_DEFAULT) ||\ + ((REQUEST) == HAL_DMA1_CH3_TIM6_UP) ||\ + ((REQUEST) == HAL_DMA1_CH3_I2C1_RX) ||\ + ((REQUEST) == HAL_DMA1_CH3_SPI1_TX) ||\ + ((REQUEST) == HAL_DMA1_CH3_TIM1_CH2) ||\ + ((REQUEST) == HAL_DMA1_CH3_TIM16_CH1) ||\ + ((REQUEST) == HAL_DMA1_CH3_TIM16_UP) ||\ + ((REQUEST) == HAL_DMA1_CH3_USART1_RX) ||\ + ((REQUEST) == HAL_DMA1_CH3_USART2_RX) ||\ + ((REQUEST) == HAL_DMA1_CH3_USART3_RX) ||\ + ((REQUEST) == HAL_DMA1_CH3_USART4_RX) ||\ + ((REQUEST) == HAL_DMA1_CH3_USART5_RX) ||\ + ((REQUEST) == HAL_DMA1_CH3_USART6_RX) ||\ + ((REQUEST) == HAL_DMA1_CH4_DEFAULT) ||\ + ((REQUEST) == HAL_DMA1_CH4_TIM7_UP) ||\ + ((REQUEST) == HAL_DMA1_CH4_I2C2_TX) ||\ + ((REQUEST) == HAL_DMA1_CH4_SPI2_RX) ||\ + ((REQUEST) == HAL_DMA1_CH4_TIM3_CH1) ||\ + ((REQUEST) == HAL_DMA1_CH4_TIM3_TRIG) ||\ + ((REQUEST) == HAL_DMA1_CH4_TIM16_CH1) ||\ + ((REQUEST) == HAL_DMA1_CH4_TIM16_UP) ||\ + ((REQUEST) == HAL_DMA1_CH4_USART1_TX) ||\ + ((REQUEST) == HAL_DMA1_CH4_USART2_TX) ||\ + ((REQUEST) == HAL_DMA1_CH4_USART3_TX) ||\ + ((REQUEST) == HAL_DMA1_CH4_USART4_TX) ||\ + ((REQUEST) == HAL_DMA1_CH4_USART5_TX) ||\ + ((REQUEST) == HAL_DMA1_CH4_USART6_TX) ||\ + ((REQUEST) == HAL_DMA1_CH5_DEFAULT) ||\ + ((REQUEST) == HAL_DMA1_CH5_I2C2_RX) ||\ + ((REQUEST) == HAL_DMA1_CH5_SPI2_TX) ||\ + ((REQUEST) == HAL_DMA1_CH5_TIM1_CH3) ||\ + ((REQUEST) == HAL_DMA1_CH5_USART1_RX) ||\ + ((REQUEST) == HAL_DMA1_CH5_USART2_RX) ||\ + ((REQUEST) == HAL_DMA1_CH5_USART3_RX) ||\ + ((REQUEST) == HAL_DMA1_CH5_USART4_RX) ||\ + ((REQUEST) == HAL_DMA1_CH5_USART5_RX) ||\ + ((REQUEST) == HAL_DMA1_CH5_USART6_RX)) +#endif /* STM32F030xC */ + +/** + * @} + */ +#endif /* STM32F091xC || STM32F098xx || STM32F030xC */ + +/* Exported macros -----------------------------------------------------------*/ + +/** @defgroup DMAEx_Exported_Macros DMAEx Exported Macros + * @{ + */ +/* Interrupt & Flag management */ + +#if defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx) +/** + * @brief Returns the current DMA Channel 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_Channel1))? DMA_FLAG_TC1 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_TC2 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_TC3 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_TC4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_TC5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_FLAG_TC6 :\ + DMA_FLAG_TC7) + +/** + * @brief Returns the current DMA Channel 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_Channel1))? DMA_FLAG_HT1 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_HT2 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_HT3 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_HT4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_HT5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_FLAG_HT6 :\ + DMA_FLAG_HT7) + +/** + * @brief Returns the current DMA Channel 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_Channel1))? DMA_FLAG_TE1 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_TE2 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_TE3 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_TE4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_TE5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_FLAG_TE6 :\ + DMA_FLAG_TE7) + +/** + * @brief Return the current DMA Channel Global interrupt flag. + * @param __HANDLE__ DMA handle + * @retval The specified transfer error flag index. + */ +#define __HAL_DMA_GET_GI_FLAG_INDEX(__HANDLE__)\ +(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_FLAG_GL1 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_GL2 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_GL3 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_GL4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_GL5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_FLAG_GL6 :\ + DMA_FLAG_GL7) + +/** + * @brief Get the DMA Channel 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_TCx: Transfer complete flag + * @arg DMA_FLAG_HTx: Half transfer complete flag + * @arg DMA_FLAG_TEx: Transfer error flag + * Where x can be 1_7 to select the DMA Channel flag. + * @retval The state of FLAG (SET or RESET). + */ + +#define __HAL_DMA_GET_FLAG(__HANDLE__, __FLAG__) (DMA1->ISR & (__FLAG__)) + +/** + * @brief Clears the DMA Channel 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_TCx: Transfer complete flag + * @arg DMA_FLAG_HTx: Half transfer complete flag + * @arg DMA_FLAG_TEx: Transfer error flag + * Where x can be 1_7 to select the DMA Channel flag. + * @retval None + */ +#define __HAL_DMA_CLEAR_FLAG(__HANDLE__, __FLAG__) (DMA1->IFCR = (__FLAG__)) + +#elif defined(STM32F091xC) || defined(STM32F098xx) +/** + * @brief Returns the current DMA Channel 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_Channel1))? DMA_FLAG_TC1 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_TC2 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_TC3 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_TC4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_TC5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_FLAG_TC6 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel7))? DMA_FLAG_TC7 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel1))? DMA_FLAG_TC1 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel2))? DMA_FLAG_TC2 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel3))? DMA_FLAG_TC3 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel4))? DMA_FLAG_TC4 :\ + DMA_FLAG_TC5) + +/** + * @brief Returns the current DMA Channel 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_Channel1))? DMA_FLAG_HT1 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_HT2 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_HT3 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_HT4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_HT5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_FLAG_HT6 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel7))? DMA_FLAG_HT7 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel1))? DMA_FLAG_HT1 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel2))? DMA_FLAG_HT2 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel3))? DMA_FLAG_HT3 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel4))? DMA_FLAG_HT4 :\ + DMA_FLAG_HT5) + +/** + * @brief Returns the current DMA Channel 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_Channel1))? DMA_FLAG_TE1 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_TE2 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_TE3 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_TE4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_TE5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_FLAG_TE6 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel7))? DMA_FLAG_TE7 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel1))? DMA_FLAG_TE1 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel2))? DMA_FLAG_TE2 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel3))? DMA_FLAG_TE3 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel4))? DMA_FLAG_TE4 :\ + DMA_FLAG_TE5) + +/** + * @brief Return the current DMA Channel Global interrupt flag. + * @param __HANDLE__ DMA handle + * @retval The specified transfer error flag index. + */ +#define __HAL_DMA_GET_GI_FLAG_INDEX(__HANDLE__)\ +(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_FLAG_GL1 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_GL2 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_GL3 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_GL4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_GL5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_FLAG_GL6 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel7))? DMA_FLAG_GL7 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel1))? DMA_FLAG_GL1 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel2))? DMA_FLAG_GL2 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel3))? DMA_FLAG_GL3 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel4))? DMA_FLAG_GL4 :\ + DMA_FLAG_GL5) + +/** + * @brief Get the DMA Channel 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_TCx: Transfer complete flag + * @arg DMA_FLAG_HTx: Half transfer complete flag + * @arg DMA_FLAG_TEx: Transfer error flag + * Where x can be 0_4, 1_5, 2_6 or 3_7 to select the DMA Channel flag. + * @retval The state of FLAG (SET or RESET). + */ + +#define __HAL_DMA_GET_FLAG(__HANDLE__, __FLAG__)\ +(((uint32_t)((__HANDLE__)->Instance) > (uint32_t)DMA1_Channel7)? (DMA2->ISR & (__FLAG__)) :\ + (DMA1->ISR & (__FLAG__))) + +/** + * @brief Clears the DMA Channel 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_TCx: Transfer complete flag + * @arg DMA_FLAG_HTx: Half transfer complete flag + * @arg DMA_FLAG_TEx: Transfer error flag + * Where x can be 0_4, 1_5, 2_6 or 3_7 to select the DMA Channel flag. + * @retval None + */ +#define __HAL_DMA_CLEAR_FLAG(__HANDLE__, __FLAG__) \ +(((uint32_t)((__HANDLE__)->Instance) > (uint32_t)DMA1_Channel7)? (DMA2->IFCR = (__FLAG__)) :\ + (DMA1->IFCR = (__FLAG__))) + +#else /* STM32F030x8_STM32F030xC_STM32F031x6_STM32F038xx_STM32F051x8_STM32F058xx_STM32F070x6_STM32F070xB Product devices */ +/** + * @brief Returns the current DMA Channel 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_Channel1))? DMA_FLAG_TC1 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_TC2 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_TC3 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_TC4 :\ + DMA_FLAG_TC5) + +/** + * @brief Returns the current DMA Channel 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_Channel1))? DMA_FLAG_HT1 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_HT2 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_HT3 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_HT4 :\ + DMA_FLAG_HT5) + +/** + * @brief Returns the current DMA Channel 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_Channel1))? DMA_FLAG_TE1 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_TE2 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_TE3 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_TE4 :\ + DMA_FLAG_TE5) + +/** + * @brief Return the current DMA Channel Global interrupt flag. + * @param __HANDLE__ DMA handle + * @retval The specified transfer error flag index. + */ +#define __HAL_DMA_GET_GI_FLAG_INDEX(__HANDLE__)\ +(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_FLAG_GL1 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_GL2 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_GL3 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_GL4 :\ + DMA_FLAG_GL5) + +/** + * @brief Get the DMA Channel 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_TCx: Transfer complete flag + * @arg DMA_FLAG_HTx: Half transfer complete flag + * @arg DMA_FLAG_TEx: Transfer error flag + * Where x can be 1_5 to select the DMA Channel flag. + * @retval The state of FLAG (SET or RESET). + */ + +#define __HAL_DMA_GET_FLAG(__HANDLE__, __FLAG__) (DMA1->ISR & (__FLAG__)) + +/** + * @brief Clears the DMA Channel 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_TCx: Transfer complete flag + * @arg DMA_FLAG_HTx: Half transfer complete flag + * @arg DMA_FLAG_TEx: Transfer error flag + * Where x can be 1_5 to select the DMA Channel flag. + * @retval None + */ +#define __HAL_DMA_CLEAR_FLAG(__HANDLE__, __FLAG__) (DMA1->IFCR = (__FLAG__)) + +#endif + + +#if defined(STM32F091xC) || defined(STM32F098xx) || defined(STM32F030xC) +#define __HAL_DMA1_REMAP(__REQUEST__) \ + do { assert_param(IS_HAL_DMA1_REMAP(__REQUEST__)); \ + DMA1->CSELR &= ~(0x0FU << (uint32_t)(((__REQUEST__) >> 28U) * 4U)); \ + DMA1->CSELR |= (uint32_t)((__REQUEST__) & 0x0FFFFFFFU); \ + }while(0) + +#if defined(STM32F091xC) || defined(STM32F098xx) +#define __HAL_DMA2_REMAP(__REQUEST__) \ + do { assert_param(IS_HAL_DMA2_REMAP(__REQUEST__)); \ + DMA2->CSELR &= ~(0x0FU << (uint32_t)(((__REQUEST__) >> 28U) * 4U)); \ + DMA2->CSELR |= (uint32_t)((__REQUEST__) & 0x0FFFFFFFU); \ + }while(0) +#endif /* STM32F091xC || STM32F098xx */ + +#endif /* STM32F091xC || STM32F098xx || STM32F030xC */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F0xx_HAL_DMA_EX_H */ + diff --git a/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_exti.h b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_exti.h new file mode 100644 index 0000000..5600ed9 --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_exti.h @@ -0,0 +1,373 @@ +/** + ****************************************************************************** + * @file stm32f0xx_hal_exti.h + * @author MCD Application Team + * @brief Header file of EXTI HAL module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2019 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 STM32F0xx_HAL_EXTI_H +#define STM32F0xx_HAL_EXTI_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f0xx_hal_def.h" + +/** @addtogroup STM32F0xx_HAL_Driver + * @{ + */ + +/** @defgroup EXTI EXTI + * @brief EXTI HAL module driver + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ + +/** @defgroup EXTI_Exported_Types EXTI Exported Types + * @{ + */ + +/** + * @brief HAL EXTI common Callback ID enumeration definition + */ +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 */ + +#if defined (EXTI_IMR_MR16) +#define EXTI_LINE_16 (EXTI_CONFIG | 0x10u) /*!< External interrupt line 16 Connected to the PVD Output */ +#else +#define EXTI_LINE_16 (EXTI_RESERVED | 0x10u) +#endif /* EXTI_IMR_MR16 */ + +#define EXTI_LINE_17 (EXTI_CONFIG | 0x11u) /*!< External interrupt line 17 Connected to the RTC Alarm event */ + +#if defined (EXTI_IMR_MR18) +#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) +#endif /* EXTI_IMR_MR18 */ + +#define EXTI_LINE_19 (EXTI_CONFIG | 0x13u) /*!< External interrupt line 19 Connected to the Ethernet Wakeup event */ + +#if defined (EXTI_IMR_MR20) +#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) +#endif /* EXTI_IMR_MR20 */ + +#if defined (EXTI_IMR_MR21) +#define EXTI_LINE_21 (EXTI_CONFIG | 0x15u) /*!< External interrupt line 21 Connected to the Comparator 1 output */ +#else +#define EXTI_LINE_21 (EXTI_RESERVED | 0x15u) +#endif /* EXTI_IMR_MR21 */ + +#if defined (EXTI_IMR_MR22) +#define EXTI_LINE_22 (EXTI_CONFIG | 0x16u) /*!< External interrupt line 22 Connected to the Comparator 2 output */ +#else +#define EXTI_LINE_22 (EXTI_RESERVED | 0x16u) +#endif /* EXTI_IMR_MR22 */ + +#if defined (EXTI_IMR_MR23) +#define EXTI_LINE_23 (EXTI_DIRECT | 0x17u) /*!< External interrupt line 23 Connected to the internal I2C1 wakeup event */ +#else +#define EXTI_LINE_23 (EXTI_RESERVED | 0x17u) +#endif /* EXTI_IMR_MR23 */ + +#define EXTI_LINE_24 (EXTI_RESERVED | 0x18u) + +#if defined (EXTI_IMR_MR25) +#define EXTI_LINE_25 (EXTI_CONFIG | 0x19u) /*!< External interrupt line 25 Connected to the internal USART1 wakeup event */ +#else +#define EXTI_LINE_25 (EXTI_RESERVED | 0x19u) +#endif /* EXTI_IMR_MR25 */ + +#if defined (EXTI_IMR_MR26) +#define EXTI_LINE_26 (EXTI_CONFIG | 0x1Au) /*!< External interrupt line 26 Connected to the internal USART2 wakeup event */ +#else +#define EXTI_LINE_26 (EXTI_RESERVED | 0x1Au) +#endif /* EXTI_IMR_MR26 */ + +#if defined (EXTI_IMR_MR27) +#define EXTI_LINE_27 (EXTI_CONFIG | 0x1Bu) /*!< External interrupt line 27 Connected to the internal CEC wakeup event */ +#else +#define EXTI_LINE_27 (EXTI_RESERVED | 0x1Bu) +#endif /* EXTI_IMR_MR27 */ + +#if defined (EXTI_IMR_MR28) +#define EXTI_LINE_28 (EXTI_CONFIG | 0x1Cu) /*!< External interrupt line 28 Connected to the internal USART3 wakeup event */ +#else +#define EXTI_LINE_28 (EXTI_RESERVED | 0x1Cu) +#endif /* EXTI_IMR_MR28 */ + +#define EXTI_LINE_29 (EXTI_RESERVED | 0x1Du) +#define EXTI_LINE_30 (EXTI_RESERVED | 0x1Eu) + +#if defined (EXTI_IMR_MR31) +#define EXTI_LINE_31 (EXTI_CONFIG | 0x1Fu) /*!< External interrupt line 31 Connected to the VDDIO2 supply comparator output */ +#else +#define EXTI_LINE_31 (EXTI_RESERVED | 0x1Fu) +#endif /* EXTI_IMR_MR31 */ + +/** + * @} + */ + +/** @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 */ +#define EXTI_GPIOF 0x00000005u +/** + * @} + */ + +/** + * @} + */ + +/* 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_DIRECT (0x01uL << EXTI_PROPERTY_SHIFT) +#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_DIRECT | 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 + */ +#define EXTI_LINE_NB 32uL + +/** + * @} + */ + +/* 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_DIRECT) || \ + (((__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 (GPIOE) +#define IS_EXTI_GPIO_PORT(__PORT__) (((__PORT__) == EXTI_GPIOA) || \ + ((__PORT__) == EXTI_GPIOB) || \ + ((__PORT__) == EXTI_GPIOC) || \ + ((__PORT__) == EXTI_GPIOD) || \ + ((__PORT__) == EXTI_GPIOE) || \ + ((__PORT__) == EXTI_GPIOF)) +#elif defined (GPIOD) +#define IS_EXTI_GPIO_PORT(__PORT__) (((__PORT__) == EXTI_GPIOA) || \ + ((__PORT__) == EXTI_GPIOB) || \ + ((__PORT__) == EXTI_GPIOC) || \ + ((__PORT__) == EXTI_GPIOD) || \ + ((__PORT__) == EXTI_GPIOF)) +#else +#define IS_EXTI_GPIO_PORT(__PORT__) (((__PORT__) == EXTI_GPIOA) || \ + ((__PORT__) == EXTI_GPIOB) || \ + ((__PORT__) == EXTI_GPIOC) || \ + ((__PORT__) == EXTI_GPIOF)) +#endif /* GPIOE */ + +#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 /* STM32F0xx_HAL_EXTI_H */ + diff --git a/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash.h b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash.h new file mode 100644 index 0000000..ea4b239 --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash.h @@ -0,0 +1,350 @@ +/** + ****************************************************************************** + * @file stm32f0xx_hal_flash.h + * @author MCD Application Team + * @brief Header file of Flash 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 __STM32F0xx_HAL_FLASH_H +#define __STM32F0xx_HAL_FLASH_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f0xx_hal_def.h" + +/** @addtogroup STM32F0xx_HAL_Driver + * @{ + */ + +/** @addtogroup FLASH + * @{ + */ + +/** @addtogroup FLASH_Private_Constants + * @{ + */ +#define FLASH_TIMEOUT_VALUE (50000U) /* 50 s */ +/** + * @} + */ + +/** @addtogroup FLASH_Private_Macros + * @{ + */ + +#define IS_FLASH_TYPEPROGRAM(VALUE) (((VALUE) == FLASH_TYPEPROGRAM_HALFWORD) || \ + ((VALUE) == FLASH_TYPEPROGRAM_WORD) || \ + ((VALUE) == FLASH_TYPEPROGRAM_DOUBLEWORD)) + +#define IS_FLASH_LATENCY(__LATENCY__) (((__LATENCY__) == FLASH_LATENCY_0) || \ + ((__LATENCY__) == FLASH_LATENCY_1)) + +/** + * @} + */ + +/* Exported types ------------------------------------------------------------*/ +/** @defgroup FLASH_Exported_Types FLASH Exported Types + * @{ + */ + +/** + * @brief FLASH Procedure structure definition + */ +typedef enum +{ + FLASH_PROC_NONE = 0U, + FLASH_PROC_PAGEERASE = 1U, + FLASH_PROC_MASSERASE = 2U, + FLASH_PROC_PROGRAMHALFWORD = 3U, + FLASH_PROC_PROGRAMWORD = 4U, + FLASH_PROC_PROGRAMDOUBLEWORD = 5U +} 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 DataRemaining; /*!< Internal variable to save the remaining pages to erase or half-word to program in IT context */ + + __IO uint32_t Address; /*!< Internal variable to save address selected for program or erase */ + + __IO uint64_t Data; /*!< Internal variable to save data to be programmed */ + + HAL_LockTypeDef Lock; /*!< FLASH locking object */ + + __IO uint32_t ErrorCode; /*!< FLASH error code + This parameter can be a value of @ref FLASH_Error_Codes */ +} FLASH_ProcessTypeDef; + +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup FLASH_Exported_Constants FLASH Exported Constants + * @{ + */ + +/** @defgroup FLASH_Error_Codes FLASH Error Codes + * @{ + */ + +#define HAL_FLASH_ERROR_NONE 0x00U /*!< No error */ +#define HAL_FLASH_ERROR_PROG 0x01U /*!< Programming error */ +#define HAL_FLASH_ERROR_WRP 0x02U /*!< Write protection error */ + +/** + * @} + */ + +/** @defgroup FLASH_Type_Program FLASH Type Program + * @{ + */ +#define FLASH_TYPEPROGRAM_HALFWORD (0x01U) /*!ACR = (FLASH->ACR&(~FLASH_ACR_LATENCY)) | (__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)) + +/** + * @} + */ + +/** @defgroup FLASH_Prefetch FLASH Prefetch + * @brief macros to handle FLASH Prefetch buffer + * @{ + */ +/** + * @brief Enable the FLASH prefetch buffer. + * @retval None + */ +#define __HAL_FLASH_PREFETCH_BUFFER_ENABLE() (FLASH->ACR |= FLASH_ACR_PRFTBE) + +/** + * @brief Disable the FLASH prefetch buffer. + * @retval None + */ +#define __HAL_FLASH_PREFETCH_BUFFER_DISABLE() (FLASH->ACR &= (~FLASH_ACR_PRFTBE)) + +/** + * @} + */ + +/** @defgroup FLASH_Interrupt FLASH Interrupts + * @brief macros to handle FLASH interrupts + * @{ + */ + +/** + * @brief Enable the specified FLASH interrupt. + * @param __INTERRUPT__ FLASH interrupt + * This parameter can be any combination of the following values: + * @arg @ref FLASH_IT_EOP End of FLASH Operation Interrupt + * @arg @ref FLASH_IT_ERR Error Interrupt + * @retval none + */ +#define __HAL_FLASH_ENABLE_IT(__INTERRUPT__) SET_BIT((FLASH->CR), (__INTERRUPT__)) + +/** + * @brief Disable the specified FLASH interrupt. + * @param __INTERRUPT__ FLASH interrupt + * This parameter can be any combination of the following values: + * @arg @ref FLASH_IT_EOP End of FLASH Operation Interrupt + * @arg @ref FLASH_IT_ERR Error Interrupt + * @retval none + */ +#define __HAL_FLASH_DISABLE_IT(__INTERRUPT__) CLEAR_BIT((FLASH->CR), (uint32_t)(__INTERRUPT__)) + +/** + * @brief Get the specified FLASH flag status. + * @param __FLAG__ specifies the FLASH flag to check. + * This parameter can be one of the following values: + * @arg @ref FLASH_FLAG_BSY FLASH Busy flag + * @arg @ref FLASH_FLAG_EOP FLASH End of Operation flag + * @arg @ref FLASH_FLAG_WRPERR FLASH Write protected error flag + * @arg @ref FLASH_FLAG_PGERR FLASH Programming error flag + * @retval The new state of __FLAG__ (SET or RESET). + */ +#define __HAL_FLASH_GET_FLAG(__FLAG__) (((FLASH->SR) & (__FLAG__)) == (__FLAG__)) + +/** + * @brief Clear the specified FLASH flag. + * @param __FLAG__ specifies the FLASH flags to clear. + * This parameter can be any combination of the following values: + * @arg @ref FLASH_FLAG_EOP FLASH End of Operation flag + * @arg @ref FLASH_FLAG_WRPERR FLASH Write protected error flag + * @arg @ref FLASH_FLAG_PGERR FLASH Programming error flag + * @retval none + */ +#define __HAL_FLASH_CLEAR_FLAG(__FLAG__) ((FLASH->SR) = (__FLAG__)) + +/** + * @} + */ + +/** + * @} + */ + +/* Include FLASH HAL Extended module */ +#include "stm32f0xx_hal_flash_ex.h" + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup FLASH_Exported_Functions + * @{ + */ + +/** @addtogroup FLASH_Exported_Functions_Group1 + * @{ + */ +/* IO 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 function */ +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); +HAL_StatusTypeDef HAL_FLASH_OB_Launch(void); + +/** + * @} + */ + +/** @addtogroup FLASH_Exported_Functions_Group3 + * @{ + */ +/* Peripheral State and Error functions ***************************************/ +uint32_t HAL_FLASH_GetError(void); + +/** + * @} + */ + +/** + * @} + */ + +/* Private function -------------------------------------------------*/ +/** @addtogroup FLASH_Private_Functions + * @{ + */ +HAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout); + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F0xx_HAL_FLASH_H */ + + diff --git a/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash_ex.h b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash_ex.h new file mode 100644 index 0000000..57fbc73 --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash_ex.h @@ -0,0 +1,445 @@ +/** + ****************************************************************************** + * @file stm32f0xx_hal_flash_ex.h + * @author MCD Application Team + * @brief Header file of Flash 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 __STM32F0xx_HAL_FLASH_EX_H +#define __STM32F0xx_HAL_FLASH_EX_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f0xx_hal_def.h" + +/** @addtogroup STM32F0xx_HAL_Driver + * @{ + */ + +/** @addtogroup FLASHEx + * @{ + */ + +/** @addtogroup FLASHEx_Private_Macros + * @{ + */ +#define IS_FLASH_TYPEERASE(VALUE) (((VALUE) == FLASH_TYPEERASE_PAGES) || \ + ((VALUE) == FLASH_TYPEERASE_MASSERASE)) + +#define IS_OPTIONBYTE(VALUE) ((VALUE) <= (OPTIONBYTE_WRP | OPTIONBYTE_RDP | OPTIONBYTE_USER | OPTIONBYTE_DATA)) + +#define IS_WRPSTATE(VALUE) (((VALUE) == OB_WRPSTATE_DISABLE) || \ + ((VALUE) == OB_WRPSTATE_ENABLE)) + +#define IS_OB_DATA_ADDRESS(ADDRESS) (((ADDRESS) == OB_DATA_ADDRESS_DATA0) || ((ADDRESS) == OB_DATA_ADDRESS_DATA1)) + +#define IS_OB_RDP_LEVEL(LEVEL) (((LEVEL) == OB_RDP_LEVEL_0) ||\ + ((LEVEL) == OB_RDP_LEVEL_1))/*||\ + ((LEVEL) == OB_RDP_LEVEL_2))*/ + +#define IS_OB_IWDG_SOURCE(SOURCE) (((SOURCE) == OB_IWDG_SW) || ((SOURCE) == OB_IWDG_HW)) + +#define IS_OB_STOP_SOURCE(SOURCE) (((SOURCE) == OB_STOP_NO_RST) || ((SOURCE) == OB_STOP_RST)) + +#define IS_OB_STDBY_SOURCE(SOURCE) (((SOURCE) == OB_STDBY_NO_RST) || ((SOURCE) == OB_STDBY_RST)) + +#define IS_OB_BOOT1(BOOT1) (((BOOT1) == OB_BOOT1_RESET) || ((BOOT1) == OB_BOOT1_SET)) + +#define IS_OB_VDDA_ANALOG(ANALOG) (((ANALOG) == OB_VDDA_ANALOG_ON) || ((ANALOG) == OB_VDDA_ANALOG_OFF)) + +#define IS_OB_SRAM_PARITY(PARITY) (((PARITY) == OB_SRAM_PARITY_SET) || ((PARITY) == OB_SRAM_PARITY_RESET)) + +#if defined(FLASH_OBR_BOOT_SEL) +#define IS_OB_BOOT_SEL(BOOT_SEL) (((BOOT_SEL) == OB_BOOT_SEL_RESET) || ((BOOT_SEL) == OB_BOOT_SEL_SET)) +#define IS_OB_BOOT0(BOOT0) (((BOOT0) == OB_BOOT0_RESET) || ((BOOT0) == OB_BOOT0_SET)) +#endif /* FLASH_OBR_BOOT_SEL */ + + +#define IS_OB_WRP(PAGE) (((PAGE) != 0x0000000U)) + +#define IS_FLASH_NB_PAGES(ADDRESS,NBPAGES) ((ADDRESS)+((NBPAGES)*FLASH_PAGE_SIZE)-1 <= FLASH_BANK1_END) + +#define IS_FLASH_PROGRAM_ADDRESS(ADDRESS) (((ADDRESS) >= FLASH_BASE) && ((ADDRESS) <= FLASH_BANK1_END)) + +/** + * @} + */ + +/* Exported types ------------------------------------------------------------*/ +/** @defgroup FLASHEx_Exported_Types FLASHEx Exported Types + * @{ + */ +/** + * @brief FLASH Erase structure definition + */ +typedef struct +{ + uint32_t TypeErase; /*!< TypeErase: Mass erase or page erase. + This parameter can be a value of @ref FLASHEx_Type_Erase */ + + uint32_t PageAddress; /*!< PageAdress: Initial FLASH page address to erase when mass erase is disabled + This parameter must be a number between Min_Data = FLASH_BASE and Max_Data = FLASH_BANK1_END */ + + uint32_t NbPages; /*!< NbPages: Number of pagess to be erased. + This parameter must be a value between Min_Data = 1 and Max_Data = (max number of pages - value of initial page)*/ + +} FLASH_EraseInitTypeDef; + +/** + * @brief FLASH Options bytes program structure definition + */ +typedef struct +{ + uint32_t OptionType; /*!< OptionType: Option byte to be configured. + This parameter can be a value of @ref FLASHEx_OB_Type */ + + uint32_t WRPState; /*!< WRPState: Write protection activation or deactivation. + This parameter can be a value of @ref FLASHEx_OB_WRP_State */ + + uint32_t WRPPage; /*!< WRPPage: specifies the page(s) to be write protected + This parameter can be a value of @ref FLASHEx_OB_Write_Protection */ + + uint8_t RDPLevel; /*!< RDPLevel: Set the read protection level.. + This parameter can be a value of @ref FLASHEx_OB_Read_Protection */ + + uint8_t USERConfig; /*!< USERConfig: Program the FLASH User Option Byte: + IWDG / STOP / STDBY / BOOT1 / VDDA_ANALOG / SRAM_PARITY + This parameter can be a combination of @ref FLASHEx_OB_IWatchdog, @ref FLASHEx_OB_nRST_STOP, + @ref FLASHEx_OB_nRST_STDBY, @ref FLASHEx_OB_BOOT1, @ref FLASHEx_OB_VDDA_Analog_Monitoring and + @ref FLASHEx_OB_RAM_Parity_Check_Enable */ + + uint32_t DATAAddress; /*!< DATAAddress: Address of the option byte DATA to be programmed + This parameter can be a value of @ref FLASHEx_OB_Data_Address */ + + uint8_t DATAData; /*!< DATAData: Data to be stored in the option byte DATA + This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF */ +} FLASH_OBProgramInitTypeDef; +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup FLASHEx_Exported_Constants FLASHEx Exported Constants + * @{ + */ + +/** @defgroup FLASHEx_Page_Size FLASHEx Page Size + * @{ + */ +#if defined(STM32F030x6) || defined(STM32F030x8) || defined(STM32F031x6) || defined(STM32F038xx) \ + || defined(STM32F051x8) || defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F058xx) || defined(STM32F070x6) +#define FLASH_PAGE_SIZE 0x400U +#endif /* STM32F030x6 || STM32F030x8 || STM32F031x6 || STM32F051x8 || STM32F042x6 || STM32F048xx || STM32F058xx || STM32F070x6 */ + +#if defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx) || defined(STM32F070xB) \ + || defined(STM32F091xC) || defined(STM32F098xx) || defined(STM32F030xC) +#define FLASH_PAGE_SIZE 0x800U +#endif /* STM32F071xB || STM32F072xB || STM32F078xx || STM32F091xC || STM32F098xx || STM32F030xC */ +/** + * @} + */ + +/** @defgroup FLASHEx_Type_Erase FLASH Type Erase + * @{ + */ +#define FLASH_TYPEERASE_PAGES (0x00U) /*!PR & (__EXTI_LINE__)) + +/** + * @brief Clear 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 Check 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 Clear 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 Generate 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__)) + +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/** @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) +/** + * @} + */ + +/** @addtogroup 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)) + +#define IS_GPIO_PULL(__PULL__) (((__PULL__) == GPIO_NOPULL) ||\ + ((__PULL__) == GPIO_PULLUP) || \ + ((__PULL__) == GPIO_PULLDOWN)) +/** + * @} + */ + +/* Include GPIO HAL Extended module */ +#include "stm32f0xx_hal_gpio_ex.h" + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup GPIO_Exported_Functions GPIO Exported Functions + * @{ + */ + +/** @addtogroup GPIO_Exported_Functions_Group1 Initialization/de-initialization functions + * @brief Initialization and Configuration functions + * @{ + */ + +/* 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 + * @{ + */ + +/* 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); + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F0xx_HAL_GPIO_H */ + diff --git a/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio_ex.h b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio_ex.h new file mode 100644 index 0000000..6d965e0 --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio_ex.h @@ -0,0 +1,797 @@ +/** + ****************************************************************************** + * @file stm32f0xx_hal_gpio_ex.h + * @author MCD Application Team + * @brief Header file of GPIO HAL Extension 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 __STM32F0xx_HAL_GPIO_EX_H +#define __STM32F0xx_HAL_GPIO_EX_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f0xx_hal_def.h" + +/** @addtogroup STM32F0xx_HAL_Driver + * @{ + */ + +/** @defgroup GPIOEx GPIOEx + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/** @defgroup GPIOEx_Exported_Constants GPIOEx Exported Constants + * @{ + */ + +/** @defgroup GPIOEx_Alternate_function_selection GPIOEx Alternate function selection + * @{ + */ + +#if defined (STM32F030x6) +/*------------------------- STM32F030x6---------------------------*/ +/* AF 0 */ +#define GPIO_AF0_EVENTOUT ((uint8_t)0x00U) /*!< AF0: EVENTOUT Alternate Function mapping */ +#define GPIO_AF0_MCO ((uint8_t)0x00U) /*!< AF0: MCO Alternate Function mapping */ +#define GPIO_AF0_SPI1 ((uint8_t)0x00U) /*!< AF0: SPI1 Alternate Function mapping */ +#define GPIO_AF0_TIM17 ((uint8_t)0x00U) /*!< AF0: TIM17 Alternate Function mapping */ +#define GPIO_AF0_SWDIO ((uint8_t)0x00U) /*!< AF0: SWDIO Alternate Function mapping */ +#define GPIO_AF0_SWCLK ((uint8_t)0x00U) /*!< AF0: SWCLK Alternate Function mapping */ +#define GPIO_AF0_TIM14 ((uint8_t)0x00U) /*!< AF0: TIM14 Alternate Function mapping */ +#define GPIO_AF0_USART1 ((uint8_t)0x00U) /*!< AF0: USART1 Alternate Function mapping */ +#define GPIO_AF0_IR ((uint8_t)0x00U) /*!< AF0: IR Alternate Function mapping */ +#define GPIO_AF0_TIM3 ((uint8_t)0x00U) /*!< AF0: TIM3 Alternate Function mapping */ + +/* AF 1 */ +#define GPIO_AF1_TIM3 ((uint8_t)0x01U) /*!< AF1: TIM3 Alternate Function mapping */ +#define GPIO_AF1_USART1 ((uint8_t)0x01U) /*!< AF1: USART1 Alternate Function mapping */ +#define GPIO_AF1_EVENTOUT ((uint8_t)0x01U) /*!< AF1: EVENTOUT Alternate Function mapping */ +#define GPIO_AF1_I2C1 ((uint8_t)0x01U) /*!< AF1: I2C1 Alternate Function mapping */ +#define GPIO_AF1_IR ((uint8_t)0x01U) /*!< AF1: IR Alternate Function mapping */ + +/* AF 2 */ +#define GPIO_AF2_TIM1 ((uint8_t)0x02U) /*!< AF2: TIM1 Alternate Function mapping */ +#define GPIO_AF2_TIM16 ((uint8_t)0x02U) /*!< AF2: TIM16 Alternate Function mapping */ +#define GPIO_AF2_TIM17 ((uint8_t)0x02U) /*!< AF2: TIM17 Alternate Function mapping */ +#define GPIO_AF2_EVENTOUT ((uint8_t)0x02U) /*!< AF2: EVENTOUT Alternate Function mapping */ + +/* AF 3 */ +#define GPIO_AF3_EVENTOUT ((uint8_t)0x03U) /*!< AF3: EVENTOUT Alternate Function mapping */ +#define GPIO_AF3_I2C1 ((uint8_t)0x03U) /*!< AF3: I2C1 Alternate Function mapping */ + +/* AF 4 */ +#define GPIO_AF4_TIM14 ((uint8_t)0x04U) /*!< AF4: TIM14 Alternate Function mapping */ +#define GPIO_AF4_I2C1 ((uint8_t)0x04U) /*!< AF4: I2C1 Alternate Function mapping */ + +/* AF 5 */ +#define GPIO_AF5_TIM16 ((uint8_t)0x05U) /*!< AF5: TIM16 Alternate Function mapping */ +#define GPIO_AF5_TIM17 ((uint8_t)0x05U) /*!< AF5: TIM17 Alternate Function mapping */ + +/* AF 6 */ +#define GPIO_AF6_EVENTOUT ((uint8_t)0x06U) /*!< AF6: EVENTOUT Alternate Function mapping */ + +#define IS_GPIO_AF(AF) ((AF) <= (uint8_t)0x06U) + +#endif /* STM32F030x6 */ + +/*---------------------------------- STM32F030x8 -------------------------------------------*/ +#if defined (STM32F030x8) +/* AF 0 */ +#define GPIO_AF0_EVENTOUT ((uint8_t)0x00U) /*!< AF0: EVENTOUT Alternate Function mapping */ +#define GPIO_AF0_MCO ((uint8_t)0x00U) /*!< AF0: MCO Alternate Function mapping */ +#define GPIO_AF0_SPI1 ((uint8_t)0x00U) /*!< AF0: SPI1 Alternate Function mapping */ +#define GPIO_AF0_SPI2 ((uint8_t)0x00U) /*!< AF0: SPI2 Alternate Function mapping */ +#define GPIO_AF0_TIM15 ((uint8_t)0x00U) /*!< AF0: TIM15 Alternate Function mapping */ +#define GPIO_AF0_TIM17 ((uint8_t)0x00U) /*!< AF0: TIM17 Alternate Function mapping */ +#define GPIO_AF0_SWDIO ((uint8_t)0x00U) /*!< AF0: SWDIO Alternate Function mapping */ +#define GPIO_AF0_SWCLK ((uint8_t)0x00U) /*!< AF0: SWCLK Alternate Function mapping */ +#define GPIO_AF0_TIM14 ((uint8_t)0x00U) /*!< AF0: TIM14 Alternate Function mapping */ +#define GPIO_AF0_USART1 ((uint8_t)0x00U) /*!< AF0: USART1 Alternate Function mapping */ +#define GPIO_AF0_IR ((uint8_t)0x00U) /*!< AF0: IR Alternate Function mapping */ +#define GPIO_AF0_TIM3 ((uint8_t)0x00U) /*!< AF0: TIM3 Alternate Function mapping */ + +/* AF 1 */ +#define GPIO_AF1_TIM3 ((uint8_t)0x01U) /*!< AF1: TIM3 Alternate Function mapping */ +#define GPIO_AF1_TIM15 ((uint8_t)0x01U) /*!< AF1: TIM15 Alternate Function mapping */ +#define GPIO_AF1_USART1 ((uint8_t)0x01U) /*!< AF1: USART1 Alternate Function mapping */ +#define GPIO_AF1_USART2 ((uint8_t)0x01U) /*!< AF1: USART2 Alternate Function mapping */ +#define GPIO_AF1_EVENTOUT ((uint8_t)0x01U) /*!< AF1: EVENTOUT Alternate Function mapping */ +#define GPIO_AF1_I2C1 ((uint8_t)0x01U) /*!< AF1: I2C1 Alternate Function mapping */ +#define GPIO_AF1_I2C2 ((uint8_t)0x01U) /*!< AF1: I2C2 Alternate Function mapping */ +#define GPIO_AF1_IR ((uint8_t)0x01U) /*!< AF1: IR Alternate Function mapping */ + +/* AF 2 */ +#define GPIO_AF2_TIM1 ((uint8_t)0x02U) /*!< AF2: TIM1 Alternate Function mapping */ +#define GPIO_AF2_TIM16 ((uint8_t)0x02U) /*!< AF2: TIM16 Alternate Function mapping */ +#define GPIO_AF2_TIM17 ((uint8_t)0x02U) /*!< AF2: TIM17 Alternate Function mapping */ +#define GPIO_AF2_EVENTOUT ((uint8_t)0x02U) /*!< AF2: EVENTOUT Alternate Function mapping */ + +/* AF 3 */ +#define GPIO_AF3_EVENTOUT ((uint8_t)0x03U) /*!< AF3: EVENTOUT Alternate Function mapping */ +#define GPIO_AF3_I2C1 ((uint8_t)0x03U) /*!< AF3: I2C1 Alternate Function mapping */ +#define GPIO_AF3_TIM15 ((uint8_t)0x03U) /*!< AF3: TIM15 Alternate Function mapping */ + +/* AF 4 */ +#define GPIO_AF4_TIM14 ((uint8_t)0x04U) /*!< AF4: TIM14 Alternate Function mapping */ + +/* AF 5 */ +#define GPIO_AF5_TIM16 ((uint8_t)0x05U) /*!< AF5: TIM16 Alternate Function mapping */ +#define GPIO_AF5_TIM17 ((uint8_t)0x05U) /*!< AF5: TIM17 Alternate Function mapping */ + +/* AF 6 */ +#define GPIO_AF6_EVENTOUT ((uint8_t)0x06U) /*!< AF6: EVENTOUT Alternate Function mapping */ + +#define IS_GPIO_AF(AF) ((AF) <= (uint8_t)0x06U) + +#endif /* STM32F030x8 */ + +#if defined (STM32F031x6) || defined (STM32F038xx) +/*--------------------------- STM32F031x6/STM32F038xx ---------------------------*/ +/* AF 0 */ +#define GPIO_AF0_EVENTOUT ((uint8_t)0x00U) /*!< AF0: EVENTOUT Alternate Function mapping */ +#define GPIO_AF0_MCO ((uint8_t)0x00U) /*!< AF0: MCO Alternate Function mapping */ +#define GPIO_AF0_SPI1 ((uint8_t)0x00U) /*!< AF0: SPI1/I2S1 Alternate Function mapping */ +#define GPIO_AF0_TIM17 ((uint8_t)0x00U) /*!< AF0: TIM17 Alternate Function mapping */ +#define GPIO_AF0_SWDAT ((uint8_t)0x00U) /*!< AF0: SWDAT Alternate Function mapping */ +#define GPIO_AF0_SWCLK ((uint8_t)0x00U) /*!< AF0: SWCLK Alternate Function mapping */ +#define GPIO_AF0_TIM14 ((uint8_t)0x00U) /*!< AF0: TIM14 Alternate Function mapping */ +#define GPIO_AF0_USART1 ((uint8_t)0x00U) /*!< AF0: USART1 Alternate Function mapping */ +#define GPIO_AF0_IR ((uint8_t)0x00U) /*!< AF0: IR Alternate Function mapping */ + +/* AF 1 */ +#define GPIO_AF1_TIM3 ((uint8_t)0x01U) /*!< AF1: TIM3 Alternate Function mapping */ +#define GPIO_AF1_USART1 ((uint8_t)0x01U) /*!< AF1: USART1 Alternate Function mapping */ +#define GPIO_AF1_IR ((uint8_t)0x01U) /*!< AF1: IR Alternate Function mapping */ +#define GPIO_AF1_EVENTOUT ((uint8_t)0x01U) /*!< AF1: EVENTOUT Alternate Function mapping */ +#define GPIO_AF1_I2C1 ((uint8_t)0x01U) /*!< AF1: I2C1 Alternate Function mapping */ + +/* AF 2 */ +#define GPIO_AF2_TIM1 ((uint8_t)0x02U) /*!< AF2: TIM1 Alternate Function mapping */ +#define GPIO_AF2_TIM2 ((uint8_t)0x02U) /*!< AF2: TIM2 Alternate Function mapping */ +#define GPIO_AF2_TIM16 ((uint8_t)0x02U) /*!< AF2: TIM16 Alternate Function mapping */ +#define GPIO_AF2_TIM17 ((uint8_t)0x02U) /*!< AF2: TIM17 Alternate Function mapping */ +#define GPIO_AF2_EVENTOUT ((uint8_t)0x02U) /*!< AF2: EVENTOUT Alternate Function mapping */ + +/* AF 3 */ +#define GPIO_AF3_EVENTOUT ((uint8_t)0x03U) /*!< AF3: EVENTOUT Alternate Function mapping */ +#define GPIO_AF3_I2C1 ((uint8_t)0x03U) /*!< AF3: I2C1 Alternate Function mapping */ + +/* AF 4 */ +#define GPIO_AF4_TIM14 ((uint8_t)0x04U) /*!< AF4: TIM14 Alternate Function mapping */ +#define GPIO_AF4_I2C1 ((uint8_t)0x04U) /*!< AF4: I2C1 Alternate Function mapping */ + +/* AF 5 */ +#define GPIO_AF5_TIM16 ((uint8_t)0x05U) /*!< AF5: TIM16 Alternate Function mapping */ +#define GPIO_AF5_TIM17 ((uint8_t)0x05U) /*!< AF5: TIM17 Alternate Function mapping */ + +/* AF 6 */ +#define GPIO_AF6_EVENTOUT ((uint8_t)0x06U) /*!< AF6: EVENTOUT Alternate Function mapping */ + +#define IS_GPIO_AF(AF) ((AF) <= (uint8_t)0x06U) + +#endif /* STM32F031x6 || STM32F038xx */ + +#if defined (STM32F051x8) || defined (STM32F058xx) +/*--------------------------- STM32F051x8/STM32F058xx---------------------------*/ +/* AF 0 */ +#define GPIO_AF0_EVENTOUT ((uint8_t)0x00U) /*!< AF0: EVENTOUT Alternate Function mapping */ +#define GPIO_AF0_MCO ((uint8_t)0x00U) /*!< AF0: MCO Alternate Function mapping */ +#define GPIO_AF0_SPI1 ((uint8_t)0x00U) /*!< AF0: SPI1/I2S1 Alternate Function mapping */ +#define GPIO_AF0_SPI2 ((uint8_t)0x00U) /*!< AF0: SPI2 Alternate Function mapping */ +#define GPIO_AF0_TIM15 ((uint8_t)0x00U) /*!< AF0: TIM15 Alternate Function mapping */ +#define GPIO_AF0_TIM17 ((uint8_t)0x00U) /*!< AF0: TIM17 Alternate Function mapping */ +#define GPIO_AF0_SWDIO ((uint8_t)0x00U) /*!< AF0: SWDIO Alternate Function mapping */ +#define GPIO_AF0_SWCLK ((uint8_t)0x00U) /*!< AF0: SWCLK Alternate Function mapping */ +#define GPIO_AF0_TIM14 ((uint8_t)0x00U) /*!< AF0: TIM14 Alternate Function mapping */ +#define GPIO_AF0_USART1 ((uint8_t)0x00U) /*!< AF0: USART1 Alternate Function mapping */ +#define GPIO_AF0_IR ((uint8_t)0x00U) /*!< AF0: IR Alternate Function mapping */ +#define GPIO_AF0_CEC ((uint8_t)0x00U) /*!< AF0: CEC Alternate Function mapping */ + +/* AF 1 */ +#define GPIO_AF1_TIM3 ((uint8_t)0x01U) /*!< AF1: TIM3 Alternate Function mapping */ +#define GPIO_AF1_TIM15 ((uint8_t)0x01U) /*!< AF1: TIM15 Alternate Function mapping */ +#define GPIO_AF1_USART1 ((uint8_t)0x01U) /*!< AF1: USART1 Alternate Function mapping */ +#define GPIO_AF1_USART2 ((uint8_t)0x01U) /*!< AF1: USART2 Alternate Function mapping */ +#define GPIO_AF1_EVENTOUT ((uint8_t)0x01U) /*!< AF1: EVENTOUT Alternate Function mapping */ +#define GPIO_AF1_I2C1 ((uint8_t)0x01U) /*!< AF1: I2C1 Alternate Function mapping */ +#define GPIO_AF1_I2C2 ((uint8_t)0x01U) /*!< AF1: I2C2 Alternate Function mapping */ +#define GPIO_AF1_IR ((uint8_t)0x01U) /*!< AF1: IR Alternate Function mapping */ +#define GPIO_AF1_CEC ((uint8_t)0x01U) /*!< AF1: CEC Alternate Function mapping */ + +/* AF 2 */ +#define GPIO_AF2_TIM1 ((uint8_t)0x02U) /*!< AF2: TIM1 Alternate Function mapping */ +#define GPIO_AF2_TIM2 ((uint8_t)0x02U) /*!< AF2: TIM2 Alternate Function mapping */ +#define GPIO_AF2_TIM16 ((uint8_t)0x02U) /*!< AF2: TIM16 Alternate Function mapping */ +#define GPIO_AF2_TIM17 ((uint8_t)0x02U) /*!< AF2: TIM17 Alternate Function mapping */ +#define GPIO_AF2_EVENTOUT ((uint8_t)0x02U) /*!< AF2: EVENTOUT Alternate Function mapping */ + +/* AF 3 */ +#define GPIO_AF3_EVENTOUT ((uint8_t)0x03U) /*!< AF3: EVENTOUT Alternate Function mapping */ +#define GPIO_AF3_I2C1 ((uint8_t)0x03U) /*!< AF3: I2C1 Alternate Function mapping */ +#define GPIO_AF3_TIM15 ((uint8_t)0x03U) /*!< AF3: TIM15 Alternate Function mapping */ +#define GPIO_AF3_TSC ((uint8_t)0x03U) /*!< AF3: TSC Alternate Function mapping */ + +/* AF 4 */ +#define GPIO_AF4_TIM14 ((uint8_t)0x04U) /*!< AF4: TIM14 Alternate Function mapping */ + +/* AF 5 */ +#define GPIO_AF5_TIM16 ((uint8_t)0x05U) /*!< AF5: TIM16 Alternate Function mapping */ +#define GPIO_AF5_TIM17 ((uint8_t)0x05U) /*!< AF5: TIM17 Alternate Function mapping */ + +/* AF 6 */ +#define GPIO_AF6_EVENTOUT ((uint8_t)0x06U) /*!< AF6: EVENTOUT Alternate Function mapping */ + +/* AF 7 */ +#define GPIO_AF7_COMP1 ((uint8_t)0x07U) /*!< AF7: COMP1 Alternate Function mapping */ +#define GPIO_AF7_COMP2 ((uint8_t)0x07U) /*!< AF7: COMP2 Alternate Function mapping */ + +#define IS_GPIO_AF(AF) ((AF) <= (uint8_t)0x07U) + +#endif /* STM32F051x8/STM32F058xx */ + +#if defined (STM32F071xB) +/*--------------------------- STM32F071xB ---------------------------*/ +/* AF 0 */ +#define GPIO_AF0_EVENTOUT ((uint8_t)0x00U) /*!< AF0: AEVENTOUT Alternate Function mapping */ +#define GPIO_AF0_SWDIO ((uint8_t)0x00U) /*!< AF0: SWDIO Alternate Function mapping */ +#define GPIO_AF0_SWCLK ((uint8_t)0x00U) /*!< AF0: SWCLK Alternate Function mapping */ +#define GPIO_AF0_MCO ((uint8_t)0x00U) /*!< AF0: MCO Alternate Function mapping */ +#define GPIO_AF0_CEC ((uint8_t)0x00U) /*!< AF0: CEC Alternate Function mapping */ +#define GPIO_AF0_CRS ((uint8_t)0x00U) /*!< AF0: CRS Alternate Function mapping */ +#define GPIO_AF0_IR ((uint8_t)0x00U) /*!< AF0: IR Alternate Function mapping */ +#define GPIO_AF0_SPI1 ((uint8_t)0x00U) /*!< AF0: SPI1/I2S1 Alternate Function mapping */ +#define GPIO_AF0_SPI2 ((uint8_t)0x00U) /*!< AF0: SPI2/I2S2 Alternate Function mapping */ +#define GPIO_AF0_TIM1 ((uint8_t)0x00U) /*!< AF0: TIM1 Alternate Function mapping */ +#define GPIO_AF0_TIM3 ((uint8_t)0x00U) /*!< AF0: TIM3 Alternate Function mapping */ +#define GPIO_AF0_TIM14 ((uint8_t)0x00U) /*!< AF0: TIM14 Alternate Function mapping */ +#define GPIO_AF0_TIM15 ((uint8_t)0x00U) /*!< AF0: TIM15 Alternate Function mapping */ +#define GPIO_AF0_TIM16 ((uint8_t)0x00U) /*!< AF0: TIM16 Alternate Function mapping */ +#define GPIO_AF0_TIM17 ((uint8_t)0x00U) /*!< AF0: TIM17 Alternate Function mapping */ +#define GPIO_AF0_TSC ((uint8_t)0x00U) /*!< AF0: TSC Alternate Function mapping */ +#define GPIO_AF0_USART1 ((uint8_t)0x00U) /*!< AF0: USART1 Alternate Function mapping */ +#define GPIO_AF0_USART2 ((uint8_t)0x00U) /*!< AF0: USART2 Alternate Function mapping */ +#define GPIO_AF0_USART3 ((uint8_t)0x00U) /*!< AF0: USART3 Alternate Function mapping */ +#define GPIO_AF0_USART4 ((uint8_t)0x00U) /*!< AF0: USART4 Alternate Function mapping */ + +/* AF 1 */ +#define GPIO_AF1_TIM3 ((uint8_t)0x01U) /*!< AF1: TIM3 Alternate Function mapping */ +#define GPIO_AF1_TIM15 ((uint8_t)0x01U) /*!< AF1: TIM15 Alternate Function mapping */ +#define GPIO_AF1_USART1 ((uint8_t)0x01U) /*!< AF1: USART1 Alternate Function mapping */ +#define GPIO_AF1_USART2 ((uint8_t)0x01U) /*!< AF1: USART2 Alternate Function mapping */ +#define GPIO_AF1_USART3 ((uint8_t)0x01U) /*!< AF1: USART3 Alternate Function mapping */ +#define GPIO_AF1_IR ((uint8_t)0x01U) /*!< AF1: IR Alternate Function mapping */ +#define GPIO_AF1_CEC ((uint8_t)0x01U) /*!< AF1: CEC Alternate Function mapping */ +#define GPIO_AF1_EVENTOUT ((uint8_t)0x01U) /*!< AF1: EVENTOUT Alternate Function mapping */ +#define GPIO_AF1_I2C1 ((uint8_t)0x01U) /*!< AF1: I2C1 Alternate Function mapping */ +#define GPIO_AF1_I2C2 ((uint8_t)0x01U) /*!< AF1: I2C2 Alternate Function mapping */ +#define GPIO_AF1_TSC ((uint8_t)0x01U) /*!< AF1: TSC Alternate Function mapping */ +#define GPIO_AF1_SPI1 ((uint8_t)0x01U) /*!< AF1: SPI1 Alternate Function mapping */ +#define GPIO_AF1_SPI2 ((uint8_t)0x01U) /*!< AF1: SPI2 Alternate Function mapping */ + +/* AF 2 */ +#define GPIO_AF2_TIM1 ((uint8_t)0x02U) /*!< AF2: TIM1 Alternate Function mapping */ +#define GPIO_AF2_TIM2 ((uint8_t)0x02U) /*!< AF2: TIM2 Alternate Function mapping */ +#define GPIO_AF2_TIM16 ((uint8_t)0x02U) /*!< AF2: TIM16 Alternate Function mapping */ +#define GPIO_AF2_TIM17 ((uint8_t)0x02U) /*!< AF2: TIM17 Alternate Function mapping */ +#define GPIO_AF2_EVENTOUT ((uint8_t)0x02U) /*!< AF2: EVENTOUT Alternate Function mapping */ + +/* AF 3 */ +#define GPIO_AF3_EVENTOUT ((uint8_t)0x03U) /*!< AF3: EVENTOUT Alternate Function mapping */ +#define GPIO_AF3_TSC ((uint8_t)0x03U) /*!< AF3: TSC Alternate Function mapping */ +#define GPIO_AF3_TIM15 ((uint8_t)0x03U) /*!< AF3: TIM15 Alternate Function mapping */ +#define GPIO_AF3_I2C1 ((uint8_t)0x03U) /*!< AF3: I2C1 Alternate Function mapping */ + +/* AF 4 */ +#define GPIO_AF4_TIM14 ((uint8_t)0x04U) /*!< AF4: TIM14 Alternate Function mapping */ +#define GPIO_AF4_USART4 ((uint8_t)0x04U) /*!< AF4: USART4 Alternate Function mapping */ +#define GPIO_AF4_USART3 ((uint8_t)0x04U) /*!< AF4: USART3 Alternate Function mapping */ +#define GPIO_AF4_CRS ((uint8_t)0x04U) /*!< AF4: CRS Alternate Function mapping */ + +/* AF 5 */ +#define GPIO_AF5_TIM15 ((uint8_t)0x05U) /*!< AF5: TIM15 Alternate Function mapping */ +#define GPIO_AF5_TIM16 ((uint8_t)0x05U) /*!< AF5: TIM16 Alternate Function mapping */ +#define GPIO_AF5_TIM17 ((uint8_t)0x05U) /*!< AF5: TIM17 Alternate Function mapping */ +#define GPIO_AF5_SPI2 ((uint8_t)0x05U) /*!< AF5: SPI2 Alternate Function mapping */ +#define GPIO_AF5_I2C2 ((uint8_t)0x05U) /*!< AF5: I2C2 Alternate Function mapping */ + +/* AF 6 */ +#define GPIO_AF6_EVENTOUT ((uint8_t)0x06U) /*!< AF6: EVENTOUT Alternate Function mapping */ + +/* AF 7 */ +#define GPIO_AF7_COMP1 ((uint8_t)0x07U) /*!< AF7: COMP1 Alternate Function mapping */ +#define GPIO_AF7_COMP2 ((uint8_t)0x07U) /*!< AF7: COMP2 Alternate Function mapping */ + +#define IS_GPIO_AF(AF) ((AF) <= (uint8_t)0x07U) + +#endif /* STM32F071xB */ + + +#if defined(STM32F091xC) || defined(STM32F098xx) +/*--------------------------- STM32F091xC || STM32F098xx ------------------------------*/ +/* AF 0 */ +#define GPIO_AF0_EVENTOUT ((uint8_t)0x00U) /*!< AF0: EVENTOUT Alternate Function mapping */ +#define GPIO_AF0_SWDIO ((uint8_t)0x00U) /*!< AF0: SWDIO Alternate Function mapping */ +#define GPIO_AF0_SWCLK ((uint8_t)0x00U) /*!< AF0: SWCLK Alternate Function mapping */ +#define GPIO_AF0_MCO ((uint8_t)0x00U) /*!< AF0: MCO Alternate Function mapping */ +#define GPIO_AF0_CEC ((uint8_t)0x00U) /*!< AF0: CEC Alternate Function mapping */ +#define GPIO_AF0_CRS ((uint8_t)0x00U) /*!< AF0: CRS Alternate Function mapping */ +#define GPIO_AF0_IR ((uint8_t)0x00U) /*!< AF0: IR Alternate Function mapping */ +#define GPIO_AF0_SPI1 ((uint8_t)0x00U) /*!< AF0: SPI1/I2S1 Alternate Function mapping */ +#define GPIO_AF0_SPI2 ((uint8_t)0x00U) /*!< AF0: SPI2/I2S2 Alternate Function mapping */ +#define GPIO_AF0_TIM1 ((uint8_t)0x00U) /*!< AF0: TIM1 Alternate Function mapping */ +#define GPIO_AF0_TIM3 ((uint8_t)0x00U) /*!< AF0: TIM3 Alternate Function mapping */ +#define GPIO_AF0_TIM14 ((uint8_t)0x00U) /*!< AF0: TIM14 Alternate Function mapping */ +#define GPIO_AF0_TIM15 ((uint8_t)0x00U) /*!< AF0: TIM15 Alternate Function mapping */ +#define GPIO_AF0_TIM16 ((uint8_t)0x00U) /*!< AF0: TIM16 Alternate Function mapping */ +#define GPIO_AF0_TIM17 ((uint8_t)0x00U) /*!< AF0: TIM17 Alternate Function mapping */ +#define GPIO_AF0_TSC ((uint8_t)0x00U) /*!< AF0: TSC Alternate Function mapping */ +#define GPIO_AF0_USART1 ((uint8_t)0x00U) /*!< AF0: USART1 Alternate Function mapping */ +#define GPIO_AF0_USART2 ((uint8_t)0x00U) /*!< AF0: USART2 Alternate Function mapping */ +#define GPIO_AF0_USART3 ((uint8_t)0x00U) /*!< AF0: USART3 Alternate Function mapping */ +#define GPIO_AF0_USART4 ((uint8_t)0x00U) /*!< AF0: USART4 Alternate Function mapping */ +#define GPIO_AF0_USART8 ((uint8_t)0x00U) /*!< AF0: USART8 Alternate Function mapping */ +#define GPIO_AF0_CAN ((uint8_t)0x00U) /*!< AF0: CAN Alternate Function mapping */ + +/* AF 1 */ +#define GPIO_AF1_TIM3 ((uint8_t)0x01U) /*!< AF1: TIM3 Alternate Function mapping */ +#define GPIO_AF1_TIM15 ((uint8_t)0x01U) /*!< AF1: TIM15 Alternate Function mapping */ +#define GPIO_AF1_USART1 ((uint8_t)0x01U) /*!< AF1: USART1 Alternate Function mapping */ +#define GPIO_AF1_USART2 ((uint8_t)0x01U) /*!< AF1: USART2 Alternate Function mapping */ +#define GPIO_AF1_USART3 ((uint8_t)0x01U) /*!< AF1: USART3 Alternate Function mapping */ +#define GPIO_AF1_USART4 ((uint8_t)0x01U) /*!< AF1: USART4 Alternate Function mapping */ +#define GPIO_AF1_USART5 ((uint8_t)0x01U) /*!< AF1: USART5 Alternate Function mapping */ +#define GPIO_AF1_USART6 ((uint8_t)0x01U) /*!< AF1: USART6 Alternate Function mapping */ +#define GPIO_AF1_USART7 ((uint8_t)0x01U) /*!< AF1: USART7 Alternate Function mapping */ +#define GPIO_AF1_USART8 ((uint8_t)0x01U) /*!< AF1: USART8 Alternate Function mapping */ +#define GPIO_AF1_IR ((uint8_t)0x01U) /*!< AF1: IR Alternate Function mapping */ +#define GPIO_AF1_CEC ((uint8_t)0x01U) /*!< AF1: CEC Alternate Function mapping */ +#define GPIO_AF1_EVENTOUT ((uint8_t)0x01U) /*!< AF1: EVENTOUT Alternate Function mapping */ +#define GPIO_AF1_I2C1 ((uint8_t)0x01U) /*!< AF1: I2C1 Alternate Function mapping */ +#define GPIO_AF1_I2C2 ((uint8_t)0x01U) /*!< AF1: I2C2 Alternate Function mapping */ +#define GPIO_AF1_TSC ((uint8_t)0x01U) /*!< AF1: TSC Alternate Function mapping */ +#define GPIO_AF1_SPI1 ((uint8_t)0x01U) /*!< AF1: SPI1 Alternate Function mapping */ +#define GPIO_AF1_SPI2 ((uint8_t)0x01U) /*!< AF1: SPI2 Alternate Function mapping */ + +/* AF 2 */ +#define GPIO_AF2_TIM1 ((uint8_t)0x02U) /*!< AF2: TIM1 Alternate Function mapping */ +#define GPIO_AF2_TIM2 ((uint8_t)0x02U) /*!< AF2: TIM2 Alternate Function mapping */ +#define GPIO_AF2_TIM16 ((uint8_t)0x02U) /*!< AF2: TIM16 Alternate Function mapping */ +#define GPIO_AF2_TIM17 ((uint8_t)0x02U) /*!< AF2: TIM17 Alternate Function mapping */ +#define GPIO_AF2_EVENTOUT ((uint8_t)0x02U) /*!< AF2: EVENTOUT Alternate Function mapping */ +#define GPIO_AF2_USART5 ((uint8_t)0x02U) /*!< AF2: USART5 Alternate Function mapping */ +#define GPIO_AF2_USART6 ((uint8_t)0x02U) /*!< AF2: USART6 Alternate Function mapping */ +#define GPIO_AF2_USART7 ((uint8_t)0x02U) /*!< AF2: USART7 Alternate Function mapping */ +#define GPIO_AF2_USART8 ((uint8_t)0x02U) /*!< AF2: USART8 Alternate Function mapping */ + +/* AF 3 */ +#define GPIO_AF3_EVENTOUT ((uint8_t)0x03U) /*!< AF3: EVENTOUT Alternate Function mapping */ +#define GPIO_AF3_TSC ((uint8_t)0x03U) /*!< AF3: TSC Alternate Function mapping */ +#define GPIO_AF3_TIM15 ((uint8_t)0x03U) /*!< AF3: TIM15 Alternate Function mapping */ +#define GPIO_AF3_I2C1 ((uint8_t)0x03U) /*!< AF3: I2C1 Alternate Function mapping */ + +/* AF 4 */ +#define GPIO_AF4_TIM14 ((uint8_t)0x04U) /*!< AF4: TIM14 Alternate Function mapping */ +#define GPIO_AF4_USART4 ((uint8_t)0x04U) /*!< AF4: USART4 Alternate Function mapping */ +#define GPIO_AF4_USART3 ((uint8_t)0x04U) /*!< AF4: USART3 Alternate Function mapping */ +#define GPIO_AF4_CRS ((uint8_t)0x04U) /*!< AF4: CRS Alternate Function mapping */ +#define GPIO_AF4_CAN ((uint8_t)0x04U) /*!< AF4: CAN Alternate Function mapping */ +#define GPIO_AF4_I2C1 ((uint8_t)0x04U) /*!< AF4: I2C1 Alternate Function mapping */ +#define GPIO_AF4_USART5 ((uint8_t)0x04U) /*!< AF4: USART5 Alternate Function mapping */ + +/* AF 5 */ +#define GPIO_AF5_TIM15 ((uint8_t)0x05U) /*!< AF5: TIM15 Alternate Function mapping */ +#define GPIO_AF5_TIM16 ((uint8_t)0x05U) /*!< AF5: TIM16 Alternate Function mapping */ +#define GPIO_AF5_TIM17 ((uint8_t)0x05U) /*!< AF5: TIM17 Alternate Function mapping */ +#define GPIO_AF5_SPI2 ((uint8_t)0x05U) /*!< AF5: SPI2 Alternate Function mapping */ +#define GPIO_AF5_I2C2 ((uint8_t)0x05U) /*!< AF5: I2C2 Alternate Function mapping */ +#define GPIO_AF5_MCO ((uint8_t)0x05U) /*!< AF5: MCO Alternate Function mapping */ +#define GPIO_AF5_USART6 ((uint8_t)0x05U) /*!< AF5: USART6 Alternate Function mapping */ + +/* AF 6 */ +#define GPIO_AF6_EVENTOUT ((uint8_t)0x06U) /*!< AF6: EVENTOUT Alternate Function mapping */ + +/* AF 7 */ +#define GPIO_AF7_COMP1 ((uint8_t)0x07U) /*!< AF7: COMP1 Alternate Function mapping */ +#define GPIO_AF7_COMP2 ((uint8_t)0x07U) /*!< AF7: COMP2 Alternate Function mapping */ + +#define IS_GPIO_AF(AF) ((AF) <= (uint8_t)0x07U) + +#endif /* STM32F091xC || STM32F098xx */ + +#if defined(STM32F030xC) +/*--------------------------- STM32F030xC ----------------------------------------------------*/ +/* AF 0 */ +#define GPIO_AF0_EVENTOUT ((uint8_t)0x00U) /*!< AF0: EVENTOUT Alternate Function mapping */ +#define GPIO_AF0_SWDIO ((uint8_t)0x00U) /*!< AF0: SWDIO Alternate Function mapping */ +#define GPIO_AF0_SWCLK ((uint8_t)0x00U) /*!< AF0: SWCLK Alternate Function mapping */ +#define GPIO_AF0_MCO ((uint8_t)0x00U) /*!< AF0: MCO Alternate Function mapping */ +#define GPIO_AF0_IR ((uint8_t)0x00U) /*!< AF0: IR Alternate Function mapping */ +#define GPIO_AF0_SPI1 ((uint8_t)0x00U) /*!< AF0: SPI1 Alternate Function mapping */ +#define GPIO_AF0_SPI2 ((uint8_t)0x00U) /*!< AF0: SPI2 Alternate Function mapping */ +#define GPIO_AF0_TIM3 ((uint8_t)0x00U) /*!< AF0: TIM3 Alternate Function mapping */ +#define GPIO_AF0_TIM14 ((uint8_t)0x00U) /*!< AF0: TIM14 Alternate Function mapping */ +#define GPIO_AF0_TIM15 ((uint8_t)0x00U) /*!< AF0: TIM15 Alternate Function mapping */ +#define GPIO_AF0_TIM17 ((uint8_t)0x00U) /*!< AF0: TIM17 Alternate Function mapping */ +#define GPIO_AF0_USART1 ((uint8_t)0x00U) /*!< AF0: USART1 Alternate Function mapping */ +#define GPIO_AF0_USART4 ((uint8_t)0x00U) /*!< AF0: USART4 Alternate Function mapping */ + +/* AF 1 */ +#define GPIO_AF1_TIM3 ((uint8_t)0x01U) /*!< AF1: TIM3 Alternate Function mapping */ +#define GPIO_AF1_TIM15 ((uint8_t)0x01U) /*!< AF1: TIM15 Alternate Function mapping */ +#define GPIO_AF1_USART1 ((uint8_t)0x01U) /*!< AF1: USART1 Alternate Function mapping */ +#define GPIO_AF1_USART2 ((uint8_t)0x01U) /*!< AF1: USART2 Alternate Function mapping */ +#define GPIO_AF1_USART3 ((uint8_t)0x01U) /*!< AF1: USART3 Alternate Function mapping */ +#define GPIO_AF1_IR ((uint8_t)0x01U) /*!< AF1: IR Alternate Function mapping */ +#define GPIO_AF1_EVENTOUT ((uint8_t)0x01U) /*!< AF1: EVENTOUT Alternate Function mapping */ +#define GPIO_AF1_I2C1 ((uint8_t)0x01U) /*!< AF1: I2C1 Alternate Function mapping */ +#define GPIO_AF1_I2C2 ((uint8_t)0x01U) /*!< AF1: I2C2 Alternate Function mapping */ +#define GPIO_AF1_SPI2 ((uint8_t)0x01U) /*!< AF1: SPI2 Alternate Function mapping */ + +/* AF 2 */ +#define GPIO_AF2_TIM1 ((uint8_t)0x02U) /*!< AF2: TIM1 Alternate Function mapping */ +#define GPIO_AF2_TIM16 ((uint8_t)0x02U) /*!< AF2: TIM16 Alternate Function mapping */ +#define GPIO_AF2_TIM17 ((uint8_t)0x02U) /*!< AF2: TIM17 Alternate Function mapping */ +#define GPIO_AF2_EVENTOUT ((uint8_t)0x02U) /*!< AF2: EVENTOUT Alternate Function mapping */ +#define GPIO_AF2_USART5 ((uint8_t)0x02U) /*!< AF2: USART5 Alternate Function mapping */ +#define GPIO_AF2_USART6 ((uint8_t)0x02U) /*!< AF2: USART6 Alternate Function mapping */ + +/* AF 3 */ +#define GPIO_AF3_EVENTOUT ((uint8_t)0x03U) /*!< AF3: EVENTOUT Alternate Function mapping */ +#define GPIO_AF3_TIM15 ((uint8_t)0x03U) /*!< AF3: TIM15 Alternate Function mapping */ +#define GPIO_AF3_I2C1 ((uint8_t)0x03U) /*!< AF3: I2C1 Alternate Function mapping */ + +/* AF 4 */ +#define GPIO_AF4_TIM14 ((uint8_t)0x04U) /*!< AF4: TIM14 Alternate Function mapping */ +#define GPIO_AF4_USART4 ((uint8_t)0x04U) /*!< AF4: USART4 Alternate Function mapping */ +#define GPIO_AF4_USART3 ((uint8_t)0x04U) /*!< AF4: USART3 Alternate Function mapping */ +#define GPIO_AF4_I2C1 ((uint8_t)0x04U) /*!< AF4: I2C1 Alternate Function mapping */ +#define GPIO_AF4_USART5 ((uint8_t)0x04U) /*!< AF4: USART5 Alternate Function mapping */ + +/* AF 5 */ +#define GPIO_AF5_TIM15 ((uint8_t)0x05U) /*!< AF5: TIM15 Alternate Function mapping */ +#define GPIO_AF5_TIM16 ((uint8_t)0x05U) /*!< AF5: TIM16 Alternate Function mapping */ +#define GPIO_AF5_TIM17 ((uint8_t)0x05U) /*!< AF5: TIM17 Alternate Function mapping */ +#define GPIO_AF5_SPI2 ((uint8_t)0x05U) /*!< AF5: SPI2 Alternate Function mapping */ +#define GPIO_AF5_I2C2 ((uint8_t)0x05U) /*!< AF5: I2C2 Alternate Function mapping */ +#define GPIO_AF5_MCO ((uint8_t)0x05U) /*!< AF5: MCO Alternate Function mapping */ +#define GPIO_AF5_USART6 ((uint8_t)0x05U) /*!< AF5: USART6 Alternate Function mapping */ + +/* AF 6 */ +#define GPIO_AF6_EVENTOUT ((uint8_t)0x06U) /*!< AF6: EVENTOUT Alternate Function mapping */ + +#define IS_GPIO_AF(AF) ((AF) <= (uint8_t)0x06U) + +#endif /* STM32F030xC */ + +#if defined (STM32F072xB) || defined (STM32F078xx) +/*--------------------------- STM32F072xB/STM32F078xx ---------------------------*/ +/* AF 0 */ +#define GPIO_AF0_EVENTOUT ((uint8_t)0x00U) /*!< AF0: EVENTOUT Alternate Function mapping */ +#define GPIO_AF0_SWDIO ((uint8_t)0x00U) /*!< AF0: SWDIO Alternate Function mapping */ +#define GPIO_AF0_SWCLK ((uint8_t)0x00U) /*!< AF0: SWCLK Alternate Function mapping */ +#define GPIO_AF0_MCO ((uint8_t)0x00U) /*!< AF0: MCO Alternate Function mapping */ +#define GPIO_AF0_CEC ((uint8_t)0x00U) /*!< AF0: CEC Alternate Function mapping */ +#define GPIO_AF0_CRS ((uint8_t)0x00U) /*!< AF0: CRS Alternate Function mapping */ +#define GPIO_AF0_IR ((uint8_t)0x00U) /*!< AF0: IR Alternate Function mapping */ +#define GPIO_AF0_SPI1 ((uint8_t)0x00U) /*!< AF0: SPI1/I2S1 Alternate Function mapping */ +#define GPIO_AF0_SPI2 ((uint8_t)0x00U) /*!< AF0: SPI2/I2S2 Alternate Function mapping */ +#define GPIO_AF0_TIM1 ((uint8_t)0x00U) /*!< AF0: TIM1 Alternate Function mapping */ +#define GPIO_AF0_TIM3 ((uint8_t)0x00U) /*!< AF0: TIM3 Alternate Function mapping */ +#define GPIO_AF0_TIM14 ((uint8_t)0x00U) /*!< AF0: TIM14 Alternate Function mapping */ +#define GPIO_AF0_TIM15 ((uint8_t)0x00U) /*!< AF0: TIM15 Alternate Function mapping */ +#define GPIO_AF0_TIM16 ((uint8_t)0x00U) /*!< AF0: TIM16 Alternate Function mapping */ +#define GPIO_AF0_TIM17 ((uint8_t)0x00U) /*!< AF0: TIM17 Alternate Function mapping */ +#define GPIO_AF0_TSC ((uint8_t)0x00U) /*!< AF0: TSC Alternate Function mapping */ +#define GPIO_AF0_USART1 ((uint8_t)0x00U) /*!< AF0: USART1 Alternate Function mapping */ +#define GPIO_AF0_USART2 ((uint8_t)0x00U) /*!< AF0: USART2 Alternate Function mapping */ +#define GPIO_AF0_USART3 ((uint8_t)0x00U) /*!< AF0: USART3 Alternate Function mapping */ +#define GPIO_AF0_USART4 ((uint8_t)0x00U) /*!< AF0: USART4 Alternate Function mapping */ +#define GPIO_AF0_CAN ((uint8_t)0x00U) /*!< AF0: CAN Alternate Function mapping */ + +/* AF 1 */ +#define GPIO_AF1_TIM3 ((uint8_t)0x01U) /*!< AF1: TIM3 Alternate Function mapping */ +#define GPIO_AF1_TIM15 ((uint8_t)0x01U) /*!< AF1: TIM15 Alternate Function mapping */ +#define GPIO_AF1_USART1 ((uint8_t)0x01U) /*!< AF1: USART1 Alternate Function mapping */ +#define GPIO_AF1_USART2 ((uint8_t)0x01U) /*!< AF1: USART2 Alternate Function mapping */ +#define GPIO_AF1_USART3 ((uint8_t)0x01U) /*!< AF1: USART3 Alternate Function mapping */ +#define GPIO_AF1_IR ((uint8_t)0x01U) /*!< AF1: IR Alternate Function mapping */ +#define GPIO_AF1_CEC ((uint8_t)0x01U) /*!< AF1: CEC Alternate Function mapping */ +#define GPIO_AF1_EVENTOUT ((uint8_t)0x01U) /*!< AF1: EVENTOUT Alternate Function mapping */ +#define GPIO_AF1_I2C1 ((uint8_t)0x01U) /*!< AF1: I2C1 Alternate Function mapping */ +#define GPIO_AF1_I2C2 ((uint8_t)0x01U) /*!< AF1: I2C2 Alternate Function mapping */ +#define GPIO_AF1_TSC ((uint8_t)0x01U) /*!< AF1: TSC Alternate Function mapping */ +#define GPIO_AF1_SPI1 ((uint8_t)0x01U) /*!< AF1: SPI1 Alternate Function mapping */ +#define GPIO_AF1_SPI2 ((uint8_t)0x01U) /*!< AF1: SPI2 Alternate Function mapping */ + +/* AF 2 */ +#define GPIO_AF2_TIM1 ((uint8_t)0x02U) /*!< AF2: TIM1 Alternate Function mapping */ +#define GPIO_AF2_TIM2 ((uint8_t)0x02U) /*!< AF2: TIM2 Alternate Function mapping */ +#define GPIO_AF2_TIM16 ((uint8_t)0x02U) /*!< AF2: TIM16 Alternate Function mapping */ +#define GPIO_AF2_TIM17 ((uint8_t)0x02U) /*!< AF2: TIM17 Alternate Function mapping */ +#define GPIO_AF2_EVENTOUT ((uint8_t)0x02U) /*!< AF2: EVENTOUT Alternate Function mapping */ +#define GPIO_AF2_USB ((uint8_t)0x02U) /*!< AF2: USB Alternate Function mapping */ + +/* AF 3 */ +#define GPIO_AF3_EVENTOUT ((uint8_t)0x03U) /*!< AF3: EVENTOUT Alternate Function mapping */ +#define GPIO_AF3_TSC ((uint8_t)0x03U) /*!< AF3: TSC Alternate Function mapping */ +#define GPIO_AF3_TIM15 ((uint8_t)0x03U) /*!< AF3: TIM15 Alternate Function mapping */ +#define GPIO_AF3_I2C1 ((uint8_t)0x03U) /*!< AF3: I2C1 Alternate Function mapping */ + +/* AF 4 */ +#define GPIO_AF4_TIM14 ((uint8_t)0x04U) /*!< AF4: TIM14 Alternate Function mapping */ +#define GPIO_AF4_USART4 ((uint8_t)0x04U) /*!< AF4: USART4 Alternate Function mapping */ +#define GPIO_AF4_USART3 ((uint8_t)0x04U) /*!< AF4: USART3 Alternate Function mapping */ +#define GPIO_AF4_CRS ((uint8_t)0x04U) /*!< AF4: CRS Alternate Function mapping */ +#define GPIO_AF4_CAN ((uint8_t)0x04U) /*!< AF4: CAN Alternate Function mapping */ + +/* AF 5 */ +#define GPIO_AF5_TIM15 ((uint8_t)0x05U) /*!< AF5: TIM15 Alternate Function mapping */ +#define GPIO_AF5_TIM16 ((uint8_t)0x05U) /*!< AF5: TIM16 Alternate Function mapping */ +#define GPIO_AF5_TIM17 ((uint8_t)0x05U) /*!< AF5: TIM17 Alternate Function mapping */ +#define GPIO_AF5_SPI2 ((uint8_t)0x05U) /*!< AF5: SPI2 Alternate Function mapping */ +#define GPIO_AF5_I2C2 ((uint8_t)0x05U) /*!< AF5: I2C2 Alternate Function mapping */ + +/* AF 6 */ +#define GPIO_AF6_EVENTOUT ((uint8_t)0x06U) /*!< AF6: EVENTOUT Alternate Function mapping */ + +/* AF 7 */ +#define GPIO_AF7_COMP1 ((uint8_t)0x07U) /*!< AF7: COMP1 Alternate Function mapping */ +#define GPIO_AF7_COMP2 ((uint8_t)0x07U) /*!< AF7: COMP2 Alternate Function mapping */ + +#define IS_GPIO_AF(AF) ((AF) <= (uint8_t)0x07U) + +#endif /* STM32F072xB || STM32F078xx */ + +#if defined (STM32F070xB) +/*---------------------------------- STM32F070xB ---------------------------------------------*/ +/* AF 0 */ +#define GPIO_AF0_EVENTOUT ((uint8_t)0x00U) /*!< AF0: EVENTOUT Alternate Function mapping */ +#define GPIO_AF0_SWDIO ((uint8_t)0x00U) /*!< AF0: SWDIO Alternate Function mapping */ +#define GPIO_AF0_SWCLK ((uint8_t)0x00U) /*!< AF0: SWCLK Alternate Function mapping */ +#define GPIO_AF0_MCO ((uint8_t)0x00U) /*!< AF0: MCO Alternate Function mapping */ +#define GPIO_AF0_IR ((uint8_t)0x00U) /*!< AF0: IR Alternate Function mapping */ +#define GPIO_AF0_SPI1 ((uint8_t)0x00U) /*!< AF0: SPI1 Alternate Function mapping */ +#define GPIO_AF0_SPI2 ((uint8_t)0x00U) /*!< AF0: SPI2 Alternate Function mapping */ +#define GPIO_AF0_TIM3 ((uint8_t)0x00U) /*!< AF0: TIM3 Alternate Function mapping */ +#define GPIO_AF0_TIM14 ((uint8_t)0x00U) /*!< AF0: TIM14 Alternate Function mapping */ +#define GPIO_AF0_TIM15 ((uint8_t)0x00U) /*!< AF0: TIM15 Alternate Function mapping */ +#define GPIO_AF0_TIM17 ((uint8_t)0x00U) /*!< AF0: TIM17 Alternate Function mapping */ +#define GPIO_AF0_USART1 ((uint8_t)0x00U) /*!< AF0: USART1 Alternate Function mapping */ +#define GPIO_AF0_USART4 ((uint8_t)0x00U) /*!< AF0: USART4 Alternate Function mapping */ + +/* AF 1 */ +#define GPIO_AF1_TIM3 ((uint8_t)0x01U) /*!< AF1: TIM3 Alternate Function mapping */ +#define GPIO_AF1_TIM15 ((uint8_t)0x01U) /*!< AF1: TIM15 Alternate Function mapping */ +#define GPIO_AF1_USART1 ((uint8_t)0x01U) /*!< AF1: USART1 Alternate Function mapping */ +#define GPIO_AF1_USART2 ((uint8_t)0x01U) /*!< AF1: USART2 Alternate Function mapping */ +#define GPIO_AF1_USART3 ((uint8_t)0x01U) /*!< AF1: USART4 Alternate Function mapping */ +#define GPIO_AF1_IR ((uint8_t)0x01U) /*!< AF1: IR Alternate Function mapping */ +#define GPIO_AF1_EVENTOUT ((uint8_t)0x01U) /*!< AF1: EVENTOUT Alternate Function mapping */ +#define GPIO_AF1_I2C1 ((uint8_t)0x01U) /*!< AF1: I2C1 Alternate Function mapping */ +#define GPIO_AF1_I2C2 ((uint8_t)0x01U) /*!< AF1: I2C2 Alternate Function mapping */ +#define GPIO_AF1_SPI2 ((uint8_t)0x01U) /*!< AF1: SPI2 Alternate Function mapping */ + +/* AF 2 */ +#define GPIO_AF2_TIM1 ((uint8_t)0x02U) /*!< AF2: TIM1 Alternate Function mapping */ +#define GPIO_AF2_TIM16 ((uint8_t)0x02U) /*!< AF2: TIM16 Alternate Function mapping */ +#define GPIO_AF2_TIM17 ((uint8_t)0x02U) /*!< AF2: TIM17 Alternate Function mapping */ +#define GPIO_AF2_EVENTOUT ((uint8_t)0x02U) /*!< AF2: EVENTOUT Alternate Function mapping */ +#define GPIO_AF2_USB ((uint8_t)0x02U) /*!< AF2: USB Alternate Function mapping */ + +/* AF 3 */ +#define GPIO_AF3_EVENTOUT ((uint8_t)0x03U) /*!< AF3: EVENTOUT Alternate Function mapping */ +#define GPIO_AF3_I2C1 ((uint8_t)0x03U) /*!< AF3: I2C1 Alternate Function mapping */ +#define GPIO_AF3_TIM15 ((uint8_t)0x03U) /*!< AF3: TIM15 Alternate Function mapping */ + +/* AF 4 */ +#define GPIO_AF4_TIM14 ((uint8_t)0x04U) /*!< AF4: TIM14 Alternate Function mapping */ +#define GPIO_AF4_USART4 ((uint8_t)0x04U) /*!< AF4: USART4 Alternate Function mapping */ +#define GPIO_AF4_USART3 ((uint8_t)0x04U) /*!< AF4: USART3 Alternate Function mapping */ + +/* AF 5 */ +#define GPIO_AF5_TIM15 ((uint8_t)0x05U) /*!< AF5: TIM15 Alternate Function mapping */ +#define GPIO_AF5_TIM16 ((uint8_t)0x05U) /*!< AF5: TIM16 Alternate Function mapping */ +#define GPIO_AF5_TIM17 ((uint8_t)0x05U) /*!< AF5: TIM17 Alternate Function mapping */ +#define GPIO_AF5_SPI2 ((uint8_t)0x05U) /*!< AF5: SPI2 Alternate Function mapping */ +#define GPIO_AF5_I2C2 ((uint8_t)0x05U) /*!< AF5: I2C2 Alternate Function mapping */ + +/* AF 6 */ +#define GPIO_AF6_EVENTOUT ((uint8_t)0x06U) /*!< AF6: EVENTOUT Alternate Function mapping */ + +#define IS_GPIO_AF(AF) ((AF) <= (uint8_t)0x06U) + +#endif /* STM32F070xB */ + +#if defined (STM32F042x6) || defined (STM32F048xx) +/*--------------------------- STM32F042x6/STM32F048xx ---------------------------*/ +/* AF 0 */ +#define GPIO_AF0_EVENTOUT ((uint8_t)0x00U) /*!< AF0: EVENTOUT Alternate Function mapping */ +#define GPIO_AF0_CEC ((uint8_t)0x00U) /*!< AF0: CEC Alternate Function mapping */ +#define GPIO_AF0_CRS ((uint8_t)0x00U) /*!< AF0: CRS Alternate Function mapping */ +#define GPIO_AF0_IR ((uint8_t)0x00U) /*!< AF0: IR Alternate Function mapping */ +#define GPIO_AF0_MCO ((uint8_t)0x00U) /*!< AF0: MCO Alternate Function mapping */ +#define GPIO_AF0_SPI1 ((uint8_t)0x00U) /*!< AF0: SPI1/I2S1 Alternate Function mapping */ +#define GPIO_AF0_SPI2 ((uint8_t)0x00U) /*!< AF0: SPI2/I2S2 Alternate Function mapping */ +#define GPIO_AF0_SWDIO ((uint8_t)0x00U) /*!< AF0: SWDIO Alternate Function mapping */ +#define GPIO_AF0_SWCLK ((uint8_t)0x00U) /*!< AF0: SWCLK Alternate Function mapping */ +#define GPIO_AF0_TIM14 ((uint8_t)0x00U) /*!< AF0: TIM14 Alternate Function mapping */ +#define GPIO_AF0_TIM17 ((uint8_t)0x00U) /*!< AF0: TIM17 Alternate Function mapping */ +#define GPIO_AF0_USART1 ((uint8_t)0x00U) /*!< AF0: USART1 Alternate Function mapping */ + +/* AF 1 */ +#define GPIO_AF1_CEC ((uint8_t)0x01U) /*!< AF1: CEC Alternate Function mapping */ +#define GPIO_AF1_EVENTOUT ((uint8_t)0x01U) /*!< AF1: EVENTOUT Alternate Function mapping */ +#define GPIO_AF1_I2C1 ((uint8_t)0x01U) /*!< AF1: I2C1 Alternate Function mapping */ +#define GPIO_AF1_IR ((uint8_t)0x01U) /*!< AF1: IR Alternate Function mapping */ +#define GPIO_AF1_USART1 ((uint8_t)0x01U) /*!< AF1: USART1 Alternate Function mapping */ +#define GPIO_AF1_USART2 ((uint8_t)0x01U) /*!< AF1: USART2 Alternate Function mapping */ +#define GPIO_AF1_TIM3 ((uint8_t)0x01U) /*!< AF1: TIM3 Alternate Function mapping */ + +/* AF 2 */ +#define GPIO_AF2_EVENTOUT ((uint8_t)0x02U) /*!< AF2: EVENTOUT Alternate Function mapping */ +#define GPIO_AF2_TIM1 ((uint8_t)0x02U) /*!< AF2: TIM1 Alternate Function mapping */ +#define GPIO_AF2_TIM2 ((uint8_t)0x02U) /*!< AF2: TIM2 Alternate Function mapping */ +#define GPIO_AF2_TIM16 ((uint8_t)0x02U) /*!< AF2: TIM16 Alternate Function mapping */ +#define GPIO_AF2_TIM17 ((uint8_t)0x02U) /*!< AF2: TIM17 Alternate Function mapping */ +#define GPIO_AF2_USB ((uint8_t)0x02U) /*!< AF2: USB Alternate Function mapping */ + +/* AF 3 */ +#define GPIO_AF3_EVENTOUT ((uint8_t)0x03U) /*!< AF3: EVENTOUT Alternate Function mapping */ +#define GPIO_AF3_I2C1 ((uint8_t)0x03U) /*!< AF3: I2C1 Alternate Function mapping */ +#define GPIO_AF3_TSC ((uint8_t)0x03U) /*!< AF3: TSC Alternate Function mapping */ + +/* AF 4 */ +#define GPIO_AF4_TIM14 ((uint8_t)0x04U) /*!< AF4: TIM14 Alternate Function mapping */ +#define GPIO_AF4_CAN ((uint8_t)0x04U) /*!< AF4: CAN Alternate Function mapping */ +#define GPIO_AF4_CRS ((uint8_t)0x04U) /*!< AF4: CRS Alternate Function mapping */ +#define GPIO_AF4_I2C1 ((uint8_t)0x04U) /*!< AF4: I2C1 Alternate Function mapping */ + +/* AF 5 */ +#define GPIO_AF5_MCO ((uint8_t)0x05U) /*!< AF5: MCO Alternate Function mapping */ +#define GPIO_AF5_I2C1 ((uint8_t)0x05U) /*!< AF5: I2C1 Alternate Function mapping */ +#define GPIO_AF5_I2C2 ((uint8_t)0x05U) /*!< AF5: I2C2 Alternate Function mapping */ +#define GPIO_AF5_SPI2 ((uint8_t)0x05U) /*!< AF5: SPI2 Alternate Function mapping */ +#define GPIO_AF5_TIM16 ((uint8_t)0x05U) /*!< AF5: TIM16 Alternate Function mapping */ +#define GPIO_AF5_TIM17 ((uint8_t)0x05U) /*!< AF5: TIM17 Alternate Function mapping */ +#define GPIO_AF5_USB ((uint8_t)0x05U) /*!< AF5: USB Alternate Function mapping */ + +/* AF 6 */ +#define GPIO_AF6_EVENTOUT ((uint8_t)0x06U) /*!< AF6: EVENTOUT Alternate Function mapping */ + +#define IS_GPIO_AF(AF) ((AF) <= (uint8_t)0x06U) + +#endif /* STM32F042x6 || STM32F048xx */ + +#if defined (STM32F070x6) +/*--------------------------------------- STM32F070x6 ----------------------------------------*/ +/* AF 0 */ +#define GPIO_AF0_EVENTOUT ((uint8_t)0x00U) /*!< AF0: EVENTOUT Alternate Function mapping */ +#define GPIO_AF0_IR ((uint8_t)0x00U) /*!< AF0: IR Alternate Function mapping */ +#define GPIO_AF0_MCO ((uint8_t)0x00U) /*!< AF0: MCO Alternate Function mapping */ +#define GPIO_AF0_SPI1 ((uint8_t)0x00U) /*!< AF0: SPI1 Alternate Function mapping */ +#define GPIO_AF0_SWDIO ((uint8_t)0x00U) /*!< AF0: SWDIO Alternate Function mapping */ +#define GPIO_AF0_SWCLK ((uint8_t)0x00U) /*!< AF0: SWCLK Alternate Function mapping */ +#define GPIO_AF0_TIM14 ((uint8_t)0x00U) /*!< AF0: TIM14 Alternate Function mapping */ +#define GPIO_AF0_TIM17 ((uint8_t)0x00U) /*!< AF0: TIM17 Alternate Function mapping */ +#define GPIO_AF0_USART1 ((uint8_t)0x00U) /*!< AF0: USART1 Alternate Function mapping */ + +/* AF 1 */ +#define GPIO_AF1_EVENTOUT ((uint8_t)0x01U) /*!< AF1: EVENTOUT Alternate Function mapping */ +#define GPIO_AF1_I2C1 ((uint8_t)0x01U) /*!< AF1: I2C1 Alternate Function mapping */ +#define GPIO_AF1_IR ((uint8_t)0x01U) /*!< AF1: IR Alternate Function mapping */ +#define GPIO_AF1_USART1 ((uint8_t)0x01U) /*!< AF1: USART1 Alternate Function mapping */ +#define GPIO_AF1_USART2 ((uint8_t)0x01U) /*!< AF1: USART2 Alternate Function mapping */ +#define GPIO_AF1_TIM3 ((uint8_t)0x01U) /*!< AF1: TIM3 Alternate Function mapping */ + +/* AF 2 */ +#define GPIO_AF2_EVENTOUT ((uint8_t)0x02U) /*!< AF2: EVENTOUT Alternate Function mapping */ +#define GPIO_AF2_TIM1 ((uint8_t)0x02U) /*!< AF2: TIM1 Alternate Function mapping */ +#define GPIO_AF2_TIM16 ((uint8_t)0x02U) /*!< AF2: TIM16 Alternate Function mapping */ +#define GPIO_AF2_TIM17 ((uint8_t)0x02U) /*!< AF2: TIM17 Alternate Function mapping */ +#define GPIO_AF2_USB ((uint8_t)0x02U) /*!< AF2: USB Alternate Function mapping */ + +/* AF 3 */ +#define GPIO_AF3_EVENTOUT ((uint8_t)0x03U) /*!< AF3: EVENTOUT Alternate Function mapping */ +#define GPIO_AF3_I2C1 ((uint8_t)0x03U) /*!< AF3: I2C1 Alternate Function mapping */ + +/* AF 4 */ +#define GPIO_AF4_TIM14 ((uint8_t)0x04U) /*!< AF4: TIM14 Alternate Function mapping */ +#define GPIO_AF4_I2C1 ((uint8_t)0x04U) /*!< AF4: I2C1 Alternate Function mapping */ + +/* AF 5 */ +#define GPIO_AF5_MCO ((uint8_t)0x05U) /*!< AF5: MCO Alternate Function mapping */ +#define GPIO_AF5_I2C1 ((uint8_t)0x05U) /*!< AF5: I2C1 Alternate Function mapping */ +#define GPIO_AF5_TIM16 ((uint8_t)0x05U) /*!< AF5: TIM16 Alternate Function mapping */ +#define GPIO_AF5_TIM17 ((uint8_t)0x05U) /*!< AF5: TIM17 Alternate Function mapping */ +#define GPIO_AF5_USB ((uint8_t)0x05U) /*!< AF5: USB Alternate Function mapping */ + +/* AF 6 */ +#define GPIO_AF6_EVENTOUT ((uint8_t)0x06U) /*!< AF6: EVENTOUT Alternate Function mapping */ + +#define IS_GPIO_AF(AF) ((AF) <= (uint8_t)0x06U) + +#endif /* STM32F070x6 */ +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup GPIOEx_Exported_Macros GPIOEx Exported Macros + * @{ + */ + +/** @defgroup GPIOEx_Get_Port_Index GPIOEx_Get Port Index +* @{ + */ +#if defined(GPIOD) && defined(GPIOE) +#define GPIO_GET_INDEX(__GPIOx__) (((__GPIOx__) == (GPIOA))? 0U :\ + ((__GPIOx__) == (GPIOB))? 1U :\ + ((__GPIOx__) == (GPIOC))? 2U :\ + ((__GPIOx__) == (GPIOD))? 3U :\ + ((__GPIOx__) == (GPIOE))? 4U : 5U) +#endif + +#if defined(GPIOD) && !defined(GPIOE) +#define GPIO_GET_INDEX(__GPIOx__) (((__GPIOx__) == (GPIOA))? 0U :\ + ((__GPIOx__) == (GPIOB))? 1U :\ + ((__GPIOx__) == (GPIOC))? 2U :\ + ((__GPIOx__) == (GPIOD))? 3U : 5U) +#endif + +#if !defined(GPIOD) && defined(GPIOE) +#define GPIO_GET_INDEX(__GPIOx__) (((__GPIOx__) == (GPIOA))? 0U :\ + ((__GPIOx__) == (GPIOB))? 1U :\ + ((__GPIOx__) == (GPIOC))? 2U :\ + ((__GPIOx__) == (GPIOE))? 4U : 5U) +#endif + +#if !defined(GPIOD) && !defined(GPIOE) +#define GPIO_GET_INDEX(__GPIOx__) (((__GPIOx__) == (GPIOA))? 0U :\ + ((__GPIOx__) == (GPIOB))? 1U :\ + ((__GPIOx__) == (GPIOC))? 2U : 5U) +#endif + +/** + * @} + */ + +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F0xx_HAL_GPIO_EX_H */ + diff --git a/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c.h b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c.h new file mode 100644 index 0000000..c55bc9e --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c.h @@ -0,0 +1,840 @@ +/** + ****************************************************************************** + * @file stm32f0xx_hal_i2c.h + * @author MCD Application Team + * @brief Header file of I2C 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 STM32F0xx_HAL_I2C_H +#define STM32F0xx_HAL_I2C_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f0xx_hal_def.h" + +/** @addtogroup STM32F0xx_HAL_Driver + * @{ + */ + +/** @addtogroup I2C + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/** @defgroup I2C_Exported_Types I2C Exported Types + * @{ + */ + +/** @defgroup I2C_Configuration_Structure_definition I2C Configuration Structure definition + * @brief I2C Configuration Structure definition + * @{ + */ +typedef struct +{ + uint32_t Timing; /*!< Specifies the I2C_TIMINGR_register value. + This parameter calculated by referring to I2C initialization section + in Reference manual */ + + uint32_t OwnAddress1; /*!< Specifies the first device own address. + This parameter can be a 7-bit or 10-bit address. */ + + uint32_t AddressingMode; /*!< Specifies if 7-bit or 10-bit addressing mode is selected. + This parameter can be a value of @ref I2C_ADDRESSING_MODE */ + + uint32_t DualAddressMode; /*!< Specifies if dual addressing mode is selected. + This parameter can be a value of @ref I2C_DUAL_ADDRESSING_MODE */ + + uint32_t OwnAddress2; /*!< Specifies the second device own address if dual addressing mode is selected + This parameter can be a 7-bit address. */ + + uint32_t OwnAddress2Masks; /*!< Specifies the acknowledge mask address second device own address if dual addressing + mode is selected. + This parameter can be a value of @ref I2C_OWN_ADDRESS2_MASKS */ + + uint32_t GeneralCallMode; /*!< Specifies if general call mode is selected. + This parameter can be a value of @ref I2C_GENERAL_CALL_ADDRESSING_MODE */ + + uint32_t NoStretchMode; /*!< Specifies if nostretch mode is selected. + This parameter can be a value of @ref I2C_NOSTRETCH_MODE */ + +} I2C_InitTypeDef; + +/** + * @} + */ + +/** @defgroup HAL_state_structure_definition HAL state structure definition + * @brief HAL State structure definition + * @note HAL I2C State value coding follow below described bitmap :\n + * b7-b6 Error information\n + * 00 : No Error\n + * 01 : Abort (Abort user request on going)\n + * 10 : Timeout\n + * 11 : Error\n + * b5 Peripheral initialization status\n + * 0 : Reset (peripheral not initialized)\n + * 1 : Init done (peripheral initialized and ready to use. HAL I2C Init function called)\n + * b4 (not used)\n + * x : Should be set to 0\n + * b3\n + * 0 : Ready or Busy (No Listen mode ongoing)\n + * 1 : Listen (peripheral in Address Listen Mode)\n + * b2 Intrinsic process state\n + * 0 : Ready\n + * 1 : Busy (peripheral busy with some configuration or internal operations)\n + * b1 Rx state\n + * 0 : Ready (no Rx operation ongoing)\n + * 1 : Busy (Rx operation ongoing)\n + * b0 Tx state\n + * 0 : Ready (no Tx operation ongoing)\n + * 1 : Busy (Tx operation ongoing) + * @{ + */ +typedef enum +{ + HAL_I2C_STATE_RESET = 0x00U, /*!< Peripheral is not yet Initialized */ + HAL_I2C_STATE_READY = 0x20U, /*!< Peripheral Initialized and ready for use */ + HAL_I2C_STATE_BUSY = 0x24U, /*!< An internal process is ongoing */ + HAL_I2C_STATE_BUSY_TX = 0x21U, /*!< Data Transmission process is ongoing */ + HAL_I2C_STATE_BUSY_RX = 0x22U, /*!< Data Reception process is ongoing */ + HAL_I2C_STATE_LISTEN = 0x28U, /*!< Address Listen Mode is ongoing */ + HAL_I2C_STATE_BUSY_TX_LISTEN = 0x29U, /*!< Address Listen Mode and Data Transmission + process is ongoing */ + HAL_I2C_STATE_BUSY_RX_LISTEN = 0x2AU, /*!< Address Listen Mode and Data Reception + process is ongoing */ + HAL_I2C_STATE_ABORT = 0x60U, /*!< Abort user request ongoing */ + HAL_I2C_STATE_TIMEOUT = 0xA0U, /*!< Timeout state */ + HAL_I2C_STATE_ERROR = 0xE0U /*!< Error */ + +} HAL_I2C_StateTypeDef; + +/** + * @} + */ + +/** @defgroup HAL_mode_structure_definition HAL mode structure definition + * @brief HAL Mode structure definition + * @note HAL I2C Mode value coding follow below described bitmap :\n + * b7 (not used)\n + * x : Should be set to 0\n + * b6\n + * 0 : None\n + * 1 : Memory (HAL I2C communication is in Memory Mode)\n + * b5\n + * 0 : None\n + * 1 : Slave (HAL I2C communication is in Slave Mode)\n + * b4\n + * 0 : None\n + * 1 : Master (HAL I2C communication is in Master Mode)\n + * b3-b2-b1-b0 (not used)\n + * xxxx : Should be set to 0000 + * @{ + */ +typedef enum +{ + HAL_I2C_MODE_NONE = 0x00U, /*!< No I2C communication on going */ + HAL_I2C_MODE_MASTER = 0x10U, /*!< I2C communication is in Master Mode */ + HAL_I2C_MODE_SLAVE = 0x20U, /*!< I2C communication is in Slave Mode */ + HAL_I2C_MODE_MEM = 0x40U /*!< I2C communication is in Memory Mode */ + +} HAL_I2C_ModeTypeDef; + +/** + * @} + */ + +/** @defgroup I2C_Error_Code_definition I2C Error Code definition + * @brief I2C Error Code definition + * @{ + */ +#define HAL_I2C_ERROR_NONE (0x00000000U) /*!< No error */ +#define HAL_I2C_ERROR_BERR (0x00000001U) /*!< BERR error */ +#define HAL_I2C_ERROR_ARLO (0x00000002U) /*!< ARLO error */ +#define HAL_I2C_ERROR_AF (0x00000004U) /*!< ACKF error */ +#define HAL_I2C_ERROR_OVR (0x00000008U) /*!< OVR error */ +#define HAL_I2C_ERROR_DMA (0x00000010U) /*!< DMA transfer error */ +#define HAL_I2C_ERROR_TIMEOUT (0x00000020U) /*!< Timeout error */ +#define HAL_I2C_ERROR_SIZE (0x00000040U) /*!< Size Management error */ +#define HAL_I2C_ERROR_DMA_PARAM (0x00000080U) /*!< DMA Parameter Error */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) +#define HAL_I2C_ERROR_INVALID_CALLBACK (0x00000100U) /*!< Invalid Callback error */ +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ +#define HAL_I2C_ERROR_INVALID_PARAM (0x00000200U) /*!< Invalid Parameters error */ +/** + * @} + */ + +/** @defgroup I2C_handle_Structure_definition I2C handle Structure definition + * @brief I2C handle Structure definition + * @{ + */ +typedef struct __I2C_HandleTypeDef +{ + I2C_TypeDef *Instance; /*!< I2C registers base address */ + + I2C_InitTypeDef Init; /*!< I2C communication parameters */ + + uint8_t *pBuffPtr; /*!< Pointer to I2C transfer buffer */ + + uint16_t XferSize; /*!< I2C transfer size */ + + __IO uint16_t XferCount; /*!< I2C transfer counter */ + + __IO uint32_t XferOptions; /*!< I2C sequantial transfer options, this parameter can + be a value of @ref I2C_XFEROPTIONS */ + + __IO uint32_t PreviousState; /*!< I2C communication Previous state */ + + HAL_StatusTypeDef(*XferISR)(struct __I2C_HandleTypeDef *hi2c, uint32_t ITFlags, uint32_t ITSources); + /*!< I2C transfer IRQ handler function pointer */ + + DMA_HandleTypeDef *hdmatx; /*!< I2C Tx DMA handle parameters */ + + DMA_HandleTypeDef *hdmarx; /*!< I2C Rx DMA handle parameters */ + + + HAL_LockTypeDef Lock; /*!< I2C locking object */ + + __IO HAL_I2C_StateTypeDef State; /*!< I2C communication state */ + + __IO HAL_I2C_ModeTypeDef Mode; /*!< I2C communication mode */ + + __IO uint32_t ErrorCode; /*!< I2C Error code */ + + __IO uint32_t AddrEventCount; /*!< I2C Address Event counter */ + + __IO uint32_t Devaddress; /*!< I2C Target device address */ + + __IO uint32_t Memaddress; /*!< I2C Target memory address */ + +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + void (* MasterTxCpltCallback)(struct __I2C_HandleTypeDef *hi2c); + /*!< I2C Master Tx Transfer completed callback */ + void (* MasterRxCpltCallback)(struct __I2C_HandleTypeDef *hi2c); + /*!< I2C Master Rx Transfer completed callback */ + void (* SlaveTxCpltCallback)(struct __I2C_HandleTypeDef *hi2c); + /*!< I2C Slave Tx Transfer completed callback */ + void (* SlaveRxCpltCallback)(struct __I2C_HandleTypeDef *hi2c); + /*!< I2C Slave Rx Transfer completed callback */ + void (* ListenCpltCallback)(struct __I2C_HandleTypeDef *hi2c); + /*!< I2C Listen Complete callback */ + void (* MemTxCpltCallback)(struct __I2C_HandleTypeDef *hi2c); + /*!< I2C Memory Tx Transfer completed callback */ + void (* MemRxCpltCallback)(struct __I2C_HandleTypeDef *hi2c); + /*!< I2C Memory Rx Transfer completed callback */ + void (* ErrorCallback)(struct __I2C_HandleTypeDef *hi2c); + /*!< I2C Error callback */ + void (* AbortCpltCallback)(struct __I2C_HandleTypeDef *hi2c); + /*!< I2C Abort callback */ + + void (* AddrCallback)(struct __I2C_HandleTypeDef *hi2c, uint8_t TransferDirection, uint16_t AddrMatchCode); + /*!< I2C Slave Address Match callback */ + + void (* MspInitCallback)(struct __I2C_HandleTypeDef *hi2c); + /*!< I2C Msp Init callback */ + void (* MspDeInitCallback)(struct __I2C_HandleTypeDef *hi2c); + /*!< I2C Msp DeInit callback */ + +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ +} I2C_HandleTypeDef; + +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) +/** + * @brief HAL I2C Callback ID enumeration definition + */ +typedef enum +{ + HAL_I2C_MASTER_TX_COMPLETE_CB_ID = 0x00U, /*!< I2C Master Tx Transfer completed callback ID */ + HAL_I2C_MASTER_RX_COMPLETE_CB_ID = 0x01U, /*!< I2C Master Rx Transfer completed callback ID */ + HAL_I2C_SLAVE_TX_COMPLETE_CB_ID = 0x02U, /*!< I2C Slave Tx Transfer completed callback ID */ + HAL_I2C_SLAVE_RX_COMPLETE_CB_ID = 0x03U, /*!< I2C Slave Rx Transfer completed callback ID */ + HAL_I2C_LISTEN_COMPLETE_CB_ID = 0x04U, /*!< I2C Listen Complete callback ID */ + HAL_I2C_MEM_TX_COMPLETE_CB_ID = 0x05U, /*!< I2C Memory Tx Transfer callback ID */ + HAL_I2C_MEM_RX_COMPLETE_CB_ID = 0x06U, /*!< I2C Memory Rx Transfer completed callback ID */ + HAL_I2C_ERROR_CB_ID = 0x07U, /*!< I2C Error callback ID */ + HAL_I2C_ABORT_CB_ID = 0x08U, /*!< I2C Abort callback ID */ + + HAL_I2C_MSPINIT_CB_ID = 0x09U, /*!< I2C Msp Init callback ID */ + HAL_I2C_MSPDEINIT_CB_ID = 0x0AU /*!< I2C Msp DeInit callback ID */ + +} HAL_I2C_CallbackIDTypeDef; + +/** + * @brief HAL I2C Callback pointer definition + */ +typedef void (*pI2C_CallbackTypeDef)(I2C_HandleTypeDef *hi2c); +/*!< pointer to an I2C callback function */ +typedef void (*pI2C_AddrCallbackTypeDef)(I2C_HandleTypeDef *hi2c, uint8_t TransferDirection, + uint16_t AddrMatchCode); +/*!< pointer to an I2C Address Match callback function */ + +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ +/** + * @} + */ + +/** + * @} + */ +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup I2C_Exported_Constants I2C Exported Constants + * @{ + */ + +/** @defgroup I2C_XFEROPTIONS I2C Sequential Transfer Options + * @{ + */ +#define I2C_FIRST_FRAME ((uint32_t)I2C_SOFTEND_MODE) +#define I2C_FIRST_AND_NEXT_FRAME ((uint32_t)(I2C_RELOAD_MODE | I2C_SOFTEND_MODE)) +#define I2C_NEXT_FRAME ((uint32_t)(I2C_RELOAD_MODE | I2C_SOFTEND_MODE)) +#define I2C_FIRST_AND_LAST_FRAME ((uint32_t)I2C_AUTOEND_MODE) +#define I2C_LAST_FRAME ((uint32_t)I2C_AUTOEND_MODE) +#define I2C_LAST_FRAME_NO_STOP ((uint32_t)I2C_SOFTEND_MODE) + +/* List of XferOptions in usage of : + * 1- Restart condition in all use cases (direction change or not) + */ +#define I2C_OTHER_FRAME (0x000000AAU) +#define I2C_OTHER_AND_LAST_FRAME (0x0000AA00U) +/** + * @} + */ + +/** @defgroup I2C_ADDRESSING_MODE I2C Addressing Mode + * @{ + */ +#define I2C_ADDRESSINGMODE_7BIT (0x00000001U) +#define I2C_ADDRESSINGMODE_10BIT (0x00000002U) +/** + * @} + */ + +/** @defgroup I2C_DUAL_ADDRESSING_MODE I2C Dual Addressing Mode + * @{ + */ +#define I2C_DUALADDRESS_DISABLE (0x00000000U) +#define I2C_DUALADDRESS_ENABLE I2C_OAR2_OA2EN +/** + * @} + */ + +/** @defgroup I2C_OWN_ADDRESS2_MASKS I2C Own Address2 Masks + * @{ + */ +#define I2C_OA2_NOMASK ((uint8_t)0x00U) +#define I2C_OA2_MASK01 ((uint8_t)0x01U) +#define I2C_OA2_MASK02 ((uint8_t)0x02U) +#define I2C_OA2_MASK03 ((uint8_t)0x03U) +#define I2C_OA2_MASK04 ((uint8_t)0x04U) +#define I2C_OA2_MASK05 ((uint8_t)0x05U) +#define I2C_OA2_MASK06 ((uint8_t)0x06U) +#define I2C_OA2_MASK07 ((uint8_t)0x07U) +/** + * @} + */ + +/** @defgroup I2C_GENERAL_CALL_ADDRESSING_MODE I2C General Call Addressing Mode + * @{ + */ +#define I2C_GENERALCALL_DISABLE (0x00000000U) +#define I2C_GENERALCALL_ENABLE I2C_CR1_GCEN +/** + * @} + */ + +/** @defgroup I2C_NOSTRETCH_MODE I2C No-Stretch Mode + * @{ + */ +#define I2C_NOSTRETCH_DISABLE (0x00000000U) +#define I2C_NOSTRETCH_ENABLE I2C_CR1_NOSTRETCH +/** + * @} + */ + +/** @defgroup I2C_MEMORY_ADDRESS_SIZE I2C Memory Address Size + * @{ + */ +#define I2C_MEMADD_SIZE_8BIT (0x00000001U) +#define I2C_MEMADD_SIZE_16BIT (0x00000002U) +/** + * @} + */ + +/** @defgroup I2C_XFERDIRECTION I2C Transfer Direction Master Point of View + * @{ + */ +#define I2C_DIRECTION_TRANSMIT (0x00000000U) +#define I2C_DIRECTION_RECEIVE (0x00000001U) +/** + * @} + */ + +/** @defgroup I2C_RELOAD_END_MODE I2C Reload End Mode + * @{ + */ +#define I2C_RELOAD_MODE I2C_CR2_RELOAD +#define I2C_AUTOEND_MODE I2C_CR2_AUTOEND +#define I2C_SOFTEND_MODE (0x00000000U) +/** + * @} + */ + +/** @defgroup I2C_START_STOP_MODE I2C Start or Stop Mode + * @{ + */ +#define I2C_NO_STARTSTOP (0x00000000U) +#define I2C_GENERATE_STOP (uint32_t)(0x80000000U | I2C_CR2_STOP) +#define I2C_GENERATE_START_READ (uint32_t)(0x80000000U | I2C_CR2_START | I2C_CR2_RD_WRN) +#define I2C_GENERATE_START_WRITE (uint32_t)(0x80000000U | I2C_CR2_START) +/** + * @} + */ + +/** @defgroup I2C_Interrupt_configuration_definition I2C Interrupt configuration definition + * @brief I2C Interrupt definition + * Elements values convention: 0xXXXXXXXX + * - XXXXXXXX : Interrupt control mask + * @{ + */ +#define I2C_IT_ERRI I2C_CR1_ERRIE +#define I2C_IT_TCI I2C_CR1_TCIE +#define I2C_IT_STOPI I2C_CR1_STOPIE +#define I2C_IT_NACKI I2C_CR1_NACKIE +#define I2C_IT_ADDRI I2C_CR1_ADDRIE +#define I2C_IT_RXI I2C_CR1_RXIE +#define I2C_IT_TXI I2C_CR1_TXIE +/** + * @} + */ + +/** @defgroup I2C_Flag_definition I2C Flag definition + * @{ + */ +#define I2C_FLAG_TXE I2C_ISR_TXE +#define I2C_FLAG_TXIS I2C_ISR_TXIS +#define I2C_FLAG_RXNE I2C_ISR_RXNE +#define I2C_FLAG_ADDR I2C_ISR_ADDR +#define I2C_FLAG_AF I2C_ISR_NACKF +#define I2C_FLAG_STOPF I2C_ISR_STOPF +#define I2C_FLAG_TC I2C_ISR_TC +#define I2C_FLAG_TCR I2C_ISR_TCR +#define I2C_FLAG_BERR I2C_ISR_BERR +#define I2C_FLAG_ARLO I2C_ISR_ARLO +#define I2C_FLAG_OVR I2C_ISR_OVR +#define I2C_FLAG_PECERR I2C_ISR_PECERR +#define I2C_FLAG_TIMEOUT I2C_ISR_TIMEOUT +#define I2C_FLAG_ALERT I2C_ISR_ALERT +#define I2C_FLAG_BUSY I2C_ISR_BUSY +#define I2C_FLAG_DIR I2C_ISR_DIR +/** + * @} + */ + +/** + * @} + */ + +/* Exported macros -----------------------------------------------------------*/ + +/** @defgroup I2C_Exported_Macros I2C Exported Macros + * @{ + */ + +/** @brief Reset I2C handle state. + * @param __HANDLE__ specifies the I2C Handle. + * @retval None + */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) +#define __HAL_I2C_RESET_HANDLE_STATE(__HANDLE__) do{ \ + (__HANDLE__)->State = HAL_I2C_STATE_RESET; \ + (__HANDLE__)->MspInitCallback = NULL; \ + (__HANDLE__)->MspDeInitCallback = NULL; \ + } while(0) +#else +#define __HAL_I2C_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_I2C_STATE_RESET) +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + +/** @brief Enable the specified I2C interrupt. + * @param __HANDLE__ specifies the I2C Handle. + * @param __INTERRUPT__ specifies the interrupt source to enable. + * This parameter can be one of the following values: + * @arg @ref I2C_IT_ERRI Errors interrupt enable + * @arg @ref I2C_IT_TCI Transfer complete interrupt enable + * @arg @ref I2C_IT_STOPI STOP detection interrupt enable + * @arg @ref I2C_IT_NACKI NACK received interrupt enable + * @arg @ref I2C_IT_ADDRI Address match interrupt enable + * @arg @ref I2C_IT_RXI RX interrupt enable + * @arg @ref I2C_IT_TXI TX interrupt enable + * + * @retval None + */ +#define __HAL_I2C_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->CR1 |= (__INTERRUPT__)) + +/** @brief Disable the specified I2C interrupt. + * @param __HANDLE__ specifies the I2C Handle. + * @param __INTERRUPT__ specifies the interrupt source to disable. + * This parameter can be one of the following values: + * @arg @ref I2C_IT_ERRI Errors interrupt enable + * @arg @ref I2C_IT_TCI Transfer complete interrupt enable + * @arg @ref I2C_IT_STOPI STOP detection interrupt enable + * @arg @ref I2C_IT_NACKI NACK received interrupt enable + * @arg @ref I2C_IT_ADDRI Address match interrupt enable + * @arg @ref I2C_IT_RXI RX interrupt enable + * @arg @ref I2C_IT_TXI TX interrupt enable + * + * @retval None + */ +#define __HAL_I2C_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->CR1 &= (~(__INTERRUPT__))) + +/** @brief Check whether the specified I2C interrupt source is enabled or not. + * @param __HANDLE__ specifies the I2C Handle. + * @param __INTERRUPT__ specifies the I2C interrupt source to check. + * This parameter can be one of the following values: + * @arg @ref I2C_IT_ERRI Errors interrupt enable + * @arg @ref I2C_IT_TCI Transfer complete interrupt enable + * @arg @ref I2C_IT_STOPI STOP detection interrupt enable + * @arg @ref I2C_IT_NACKI NACK received interrupt enable + * @arg @ref I2C_IT_ADDRI Address match interrupt enable + * @arg @ref I2C_IT_RXI RX interrupt enable + * @arg @ref I2C_IT_TXI TX interrupt enable + * + * @retval The new state of __INTERRUPT__ (SET or RESET). + */ +#define __HAL_I2C_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->CR1 & \ + (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET) + +/** @brief Check whether the specified I2C flag is set or not. + * @param __HANDLE__ specifies the I2C Handle. + * @param __FLAG__ specifies the flag to check. + * This parameter can be one of the following values: + * @arg @ref I2C_FLAG_TXE Transmit data register empty + * @arg @ref I2C_FLAG_TXIS Transmit interrupt status + * @arg @ref I2C_FLAG_RXNE Receive data register not empty + * @arg @ref I2C_FLAG_ADDR Address matched (slave mode) + * @arg @ref I2C_FLAG_AF Acknowledge failure received flag + * @arg @ref I2C_FLAG_STOPF STOP detection flag + * @arg @ref I2C_FLAG_TC Transfer complete (master mode) + * @arg @ref I2C_FLAG_TCR Transfer complete reload + * @arg @ref I2C_FLAG_BERR Bus error + * @arg @ref I2C_FLAG_ARLO Arbitration lost + * @arg @ref I2C_FLAG_OVR Overrun/Underrun + * @arg @ref I2C_FLAG_PECERR PEC error in reception + * @arg @ref I2C_FLAG_TIMEOUT Timeout or Tlow detection flag + * @arg @ref I2C_FLAG_ALERT SMBus alert + * @arg @ref I2C_FLAG_BUSY Bus busy + * @arg @ref I2C_FLAG_DIR Transfer direction (slave mode) + * + * @retval The new state of __FLAG__ (SET or RESET). + */ +#define I2C_FLAG_MASK (0x0001FFFFU) +#define __HAL_I2C_GET_FLAG(__HANDLE__, __FLAG__) (((((__HANDLE__)->Instance->ISR) & \ + (__FLAG__)) == (__FLAG__)) ? SET : RESET) + +/** @brief Clear the I2C pending flags which are cleared by writing 1 in a specific bit. + * @param __HANDLE__ specifies the I2C Handle. + * @param __FLAG__ specifies the flag to clear. + * This parameter can be any combination of the following values: + * @arg @ref I2C_FLAG_TXE Transmit data register empty + * @arg @ref I2C_FLAG_ADDR Address matched (slave mode) + * @arg @ref I2C_FLAG_AF Acknowledge failure received flag + * @arg @ref I2C_FLAG_STOPF STOP detection flag + * @arg @ref I2C_FLAG_BERR Bus error + * @arg @ref I2C_FLAG_ARLO Arbitration lost + * @arg @ref I2C_FLAG_OVR Overrun/Underrun + * @arg @ref I2C_FLAG_PECERR PEC error in reception + * @arg @ref I2C_FLAG_TIMEOUT Timeout or Tlow detection flag + * @arg @ref I2C_FLAG_ALERT SMBus alert + * + * @retval None + */ +#define __HAL_I2C_CLEAR_FLAG(__HANDLE__, __FLAG__) (((__FLAG__) == I2C_FLAG_TXE) ? \ + ((__HANDLE__)->Instance->ISR |= (__FLAG__)) : \ + ((__HANDLE__)->Instance->ICR = (__FLAG__))) + +/** @brief Enable the specified I2C peripheral. + * @param __HANDLE__ specifies the I2C Handle. + * @retval None + */ +#define __HAL_I2C_ENABLE(__HANDLE__) (SET_BIT((__HANDLE__)->Instance->CR1, I2C_CR1_PE)) + +/** @brief Disable the specified I2C peripheral. + * @param __HANDLE__ specifies the I2C Handle. + * @retval None + */ +#define __HAL_I2C_DISABLE(__HANDLE__) (CLEAR_BIT((__HANDLE__)->Instance->CR1, I2C_CR1_PE)) + +/** @brief Generate a Non-Acknowledge I2C peripheral in Slave mode. + * @param __HANDLE__ specifies the I2C Handle. + * @retval None + */ +#define __HAL_I2C_GENERATE_NACK(__HANDLE__) (SET_BIT((__HANDLE__)->Instance->CR2, I2C_CR2_NACK)) +/** + * @} + */ + +/* Include I2C HAL Extended module */ +#include "stm32f0xx_hal_i2c_ex.h" + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup I2C_Exported_Functions + * @{ + */ + +/** @addtogroup I2C_Exported_Functions_Group1 Initialization and de-initialization functions + * @{ + */ +/* Initialization and de-initialization functions******************************/ +HAL_StatusTypeDef HAL_I2C_Init(I2C_HandleTypeDef *hi2c); +HAL_StatusTypeDef HAL_I2C_DeInit(I2C_HandleTypeDef *hi2c); +void HAL_I2C_MspInit(I2C_HandleTypeDef *hi2c); +void HAL_I2C_MspDeInit(I2C_HandleTypeDef *hi2c); + +/* Callbacks Register/UnRegister functions ***********************************/ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) +HAL_StatusTypeDef HAL_I2C_RegisterCallback(I2C_HandleTypeDef *hi2c, HAL_I2C_CallbackIDTypeDef CallbackID, + pI2C_CallbackTypeDef pCallback); +HAL_StatusTypeDef HAL_I2C_UnRegisterCallback(I2C_HandleTypeDef *hi2c, HAL_I2C_CallbackIDTypeDef CallbackID); + +HAL_StatusTypeDef HAL_I2C_RegisterAddrCallback(I2C_HandleTypeDef *hi2c, pI2C_AddrCallbackTypeDef pCallback); +HAL_StatusTypeDef HAL_I2C_UnRegisterAddrCallback(I2C_HandleTypeDef *hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ +/** + * @} + */ + +/** @addtogroup I2C_Exported_Functions_Group2 Input and Output operation functions + * @{ + */ +/* IO operation functions ****************************************************/ +/******* Blocking mode: Polling */ +HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, + uint16_t Size, uint32_t Timeout); +HAL_StatusTypeDef HAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, + uint16_t Size, uint32_t Timeout); +HAL_StatusTypeDef HAL_I2C_Slave_Transmit(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, + uint32_t Timeout); +HAL_StatusTypeDef HAL_I2C_Slave_Receive(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, + uint32_t Timeout); +HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, + uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout); +HAL_StatusTypeDef HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, + uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout); +HAL_StatusTypeDef HAL_I2C_IsDeviceReady(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint32_t Trials, + uint32_t Timeout); + +/******* Non-Blocking mode: Interrupt */ +HAL_StatusTypeDef HAL_I2C_Master_Transmit_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, + uint16_t Size); +HAL_StatusTypeDef HAL_I2C_Master_Receive_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, + uint16_t Size); +HAL_StatusTypeDef HAL_I2C_Slave_Transmit_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size); +HAL_StatusTypeDef HAL_I2C_Slave_Receive_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size); +HAL_StatusTypeDef HAL_I2C_Mem_Write_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, + uint16_t MemAddSize, uint8_t *pData, uint16_t Size); +HAL_StatusTypeDef HAL_I2C_Mem_Read_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, + uint16_t MemAddSize, uint8_t *pData, uint16_t Size); + +HAL_StatusTypeDef HAL_I2C_Master_Seq_Transmit_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, + uint16_t Size, uint32_t XferOptions); +HAL_StatusTypeDef HAL_I2C_Master_Seq_Receive_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, + uint16_t Size, uint32_t XferOptions); +HAL_StatusTypeDef HAL_I2C_Slave_Seq_Transmit_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, + uint32_t XferOptions); +HAL_StatusTypeDef HAL_I2C_Slave_Seq_Receive_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, + uint32_t XferOptions); +HAL_StatusTypeDef HAL_I2C_EnableListen_IT(I2C_HandleTypeDef *hi2c); +HAL_StatusTypeDef HAL_I2C_DisableListen_IT(I2C_HandleTypeDef *hi2c); +HAL_StatusTypeDef HAL_I2C_Master_Abort_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress); + +/******* Non-Blocking mode: DMA */ +HAL_StatusTypeDef HAL_I2C_Master_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, + uint16_t Size); +HAL_StatusTypeDef HAL_I2C_Master_Receive_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, + uint16_t Size); +HAL_StatusTypeDef HAL_I2C_Slave_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size); +HAL_StatusTypeDef HAL_I2C_Slave_Receive_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size); +HAL_StatusTypeDef HAL_I2C_Mem_Write_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, + uint16_t MemAddSize, uint8_t *pData, uint16_t Size); +HAL_StatusTypeDef HAL_I2C_Mem_Read_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, + uint16_t MemAddSize, uint8_t *pData, uint16_t Size); + +HAL_StatusTypeDef HAL_I2C_Master_Seq_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, + uint16_t Size, uint32_t XferOptions); +HAL_StatusTypeDef HAL_I2C_Master_Seq_Receive_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, + uint16_t Size, uint32_t XferOptions); +HAL_StatusTypeDef HAL_I2C_Slave_Seq_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, + uint32_t XferOptions); +HAL_StatusTypeDef HAL_I2C_Slave_Seq_Receive_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, + uint32_t XferOptions); +/** + * @} + */ + +/** @addtogroup I2C_IRQ_Handler_and_Callbacks IRQ Handler and Callbacks + * @{ + */ +/******* I2C IRQHandler and Callbacks used in non blocking modes (Interrupt and DMA) */ +void HAL_I2C_EV_IRQHandler(I2C_HandleTypeDef *hi2c); +void HAL_I2C_ER_IRQHandler(I2C_HandleTypeDef *hi2c); +void HAL_I2C_MasterTxCpltCallback(I2C_HandleTypeDef *hi2c); +void HAL_I2C_MasterRxCpltCallback(I2C_HandleTypeDef *hi2c); +void HAL_I2C_SlaveTxCpltCallback(I2C_HandleTypeDef *hi2c); +void HAL_I2C_SlaveRxCpltCallback(I2C_HandleTypeDef *hi2c); +void HAL_I2C_AddrCallback(I2C_HandleTypeDef *hi2c, uint8_t TransferDirection, uint16_t AddrMatchCode); +void HAL_I2C_ListenCpltCallback(I2C_HandleTypeDef *hi2c); +void HAL_I2C_MemTxCpltCallback(I2C_HandleTypeDef *hi2c); +void HAL_I2C_MemRxCpltCallback(I2C_HandleTypeDef *hi2c); +void HAL_I2C_ErrorCallback(I2C_HandleTypeDef *hi2c); +void HAL_I2C_AbortCpltCallback(I2C_HandleTypeDef *hi2c); +/** + * @} + */ + +/** @addtogroup I2C_Exported_Functions_Group3 Peripheral State, Mode and Error functions + * @{ + */ +/* Peripheral State, Mode and Error functions *********************************/ +HAL_I2C_StateTypeDef HAL_I2C_GetState(const I2C_HandleTypeDef *hi2c); +HAL_I2C_ModeTypeDef HAL_I2C_GetMode(const I2C_HandleTypeDef *hi2c); +uint32_t HAL_I2C_GetError(const I2C_HandleTypeDef *hi2c); + +/** + * @} + */ + +/** + * @} + */ + +/* Private constants ---------------------------------------------------------*/ +/** @defgroup I2C_Private_Constants I2C Private Constants + * @{ + */ + +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/** @defgroup I2C_Private_Macro I2C Private Macros + * @{ + */ + +#define IS_I2C_ADDRESSING_MODE(MODE) (((MODE) == I2C_ADDRESSINGMODE_7BIT) || \ + ((MODE) == I2C_ADDRESSINGMODE_10BIT)) + +#define IS_I2C_DUAL_ADDRESS(ADDRESS) (((ADDRESS) == I2C_DUALADDRESS_DISABLE) || \ + ((ADDRESS) == I2C_DUALADDRESS_ENABLE)) + +#define IS_I2C_OWN_ADDRESS2_MASK(MASK) (((MASK) == I2C_OA2_NOMASK) || \ + ((MASK) == I2C_OA2_MASK01) || \ + ((MASK) == I2C_OA2_MASK02) || \ + ((MASK) == I2C_OA2_MASK03) || \ + ((MASK) == I2C_OA2_MASK04) || \ + ((MASK) == I2C_OA2_MASK05) || \ + ((MASK) == I2C_OA2_MASK06) || \ + ((MASK) == I2C_OA2_MASK07)) + +#define IS_I2C_GENERAL_CALL(CALL) (((CALL) == I2C_GENERALCALL_DISABLE) || \ + ((CALL) == I2C_GENERALCALL_ENABLE)) + +#define IS_I2C_NO_STRETCH(STRETCH) (((STRETCH) == I2C_NOSTRETCH_DISABLE) || \ + ((STRETCH) == I2C_NOSTRETCH_ENABLE)) + +#define IS_I2C_MEMADD_SIZE(SIZE) (((SIZE) == I2C_MEMADD_SIZE_8BIT) || \ + ((SIZE) == I2C_MEMADD_SIZE_16BIT)) + +#define IS_TRANSFER_MODE(MODE) (((MODE) == I2C_RELOAD_MODE) || \ + ((MODE) == I2C_AUTOEND_MODE) || \ + ((MODE) == I2C_SOFTEND_MODE)) + +#define IS_TRANSFER_REQUEST(REQUEST) (((REQUEST) == I2C_GENERATE_STOP) || \ + ((REQUEST) == I2C_GENERATE_START_READ) || \ + ((REQUEST) == I2C_GENERATE_START_WRITE) || \ + ((REQUEST) == I2C_NO_STARTSTOP)) + +#define IS_I2C_TRANSFER_OPTIONS_REQUEST(REQUEST) (((REQUEST) == I2C_FIRST_FRAME) || \ + ((REQUEST) == I2C_FIRST_AND_NEXT_FRAME) || \ + ((REQUEST) == I2C_NEXT_FRAME) || \ + ((REQUEST) == I2C_FIRST_AND_LAST_FRAME) || \ + ((REQUEST) == I2C_LAST_FRAME) || \ + ((REQUEST) == I2C_LAST_FRAME_NO_STOP) || \ + IS_I2C_TRANSFER_OTHER_OPTIONS_REQUEST(REQUEST)) + +#define IS_I2C_TRANSFER_OTHER_OPTIONS_REQUEST(REQUEST) (((REQUEST) == I2C_OTHER_FRAME) || \ + ((REQUEST) == I2C_OTHER_AND_LAST_FRAME)) + +#define I2C_RESET_CR2(__HANDLE__) ((__HANDLE__)->Instance->CR2 &= \ + (uint32_t)~((uint32_t)(I2C_CR2_SADD | I2C_CR2_HEAD10R | \ + I2C_CR2_NBYTES | I2C_CR2_RELOAD | \ + I2C_CR2_RD_WRN))) + +#define I2C_GET_ADDR_MATCH(__HANDLE__) ((uint16_t)(((__HANDLE__)->Instance->ISR & I2C_ISR_ADDCODE) \ + >> 16U)) +#define I2C_GET_DIR(__HANDLE__) ((uint8_t)(((__HANDLE__)->Instance->ISR & I2C_ISR_DIR) \ + >> 16U)) +#define I2C_GET_STOP_MODE(__HANDLE__) ((__HANDLE__)->Instance->CR2 & I2C_CR2_AUTOEND) +#define I2C_GET_OWN_ADDRESS1(__HANDLE__) ((uint16_t)((__HANDLE__)->Instance->OAR1 & I2C_OAR1_OA1)) +#define I2C_GET_OWN_ADDRESS2(__HANDLE__) ((uint16_t)((__HANDLE__)->Instance->OAR2 & I2C_OAR2_OA2)) + +#define IS_I2C_OWN_ADDRESS1(ADDRESS1) ((ADDRESS1) <= 0x000003FFU) +#define IS_I2C_OWN_ADDRESS2(ADDRESS2) ((ADDRESS2) <= (uint16_t)0x00FFU) + +#define I2C_MEM_ADD_MSB(__ADDRESS__) ((uint8_t)((uint16_t)(((uint16_t)((__ADDRESS__) & \ + (uint16_t)(0xFF00U))) >> 8U))) +#define I2C_MEM_ADD_LSB(__ADDRESS__) ((uint8_t)((uint16_t)((__ADDRESS__) & (uint16_t)(0x00FFU)))) + +#define I2C_GENERATE_START(__ADDMODE__,__ADDRESS__) (((__ADDMODE__) == I2C_ADDRESSINGMODE_7BIT) ? \ + (uint32_t)((((uint32_t)(__ADDRESS__) & (I2C_CR2_SADD)) | \ + (I2C_CR2_START) | (I2C_CR2_AUTOEND)) & \ + (~I2C_CR2_RD_WRN)) : \ + (uint32_t)((((uint32_t)(__ADDRESS__) & (I2C_CR2_SADD)) | \ + (I2C_CR2_ADD10) | (I2C_CR2_START) | \ + (I2C_CR2_AUTOEND)) & (~I2C_CR2_RD_WRN))) + +#define I2C_CHECK_FLAG(__ISR__, __FLAG__) ((((__ISR__) & ((__FLAG__) & I2C_FLAG_MASK)) == \ + ((__FLAG__) & I2C_FLAG_MASK)) ? SET : RESET) +#define I2C_CHECK_IT_SOURCE(__CR1__, __IT__) ((((__CR1__) & (__IT__)) == (__IT__)) ? SET : RESET) +/** + * @} + */ + +/* Private Functions ---------------------------------------------------------*/ +/** @defgroup I2C_Private_Functions I2C Private Functions + * @{ + */ +/* Private functions are defined in stm32f0xx_hal_i2c.c file */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + + +#endif /* STM32F0xx_HAL_I2C_H */ diff --git a/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c_ex.h b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c_ex.h new file mode 100644 index 0000000..83035a0 --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c_ex.h @@ -0,0 +1,190 @@ +/** + ****************************************************************************** + * @file stm32f0xx_hal_i2c_ex.h + * @author MCD Application Team + * @brief Header file of I2C 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 STM32F0xx_HAL_I2C_EX_H +#define STM32F0xx_HAL_I2C_EX_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f0xx_hal_def.h" + +/** @addtogroup STM32F0xx_HAL_Driver + * @{ + */ + +/** @addtogroup I2CEx + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup I2CEx_Exported_Constants I2C Extended Exported Constants + * @{ + */ + +/** @defgroup I2CEx_Analog_Filter I2C Extended Analog Filter + * @{ + */ +#define I2C_ANALOGFILTER_ENABLE 0x00000000U +#define I2C_ANALOGFILTER_DISABLE I2C_CR1_ANFOFF +/** + * @} + */ + +/** @defgroup I2CEx_FastModePlus I2C Extended Fast Mode Plus + * @{ + */ +#define I2C_FMP_NOT_SUPPORTED 0xAAAA0000U /*!< Fast Mode Plus not supported */ +#if defined(SYSCFG_CFGR1_I2C_FMP_PA9) +#define I2C_FASTMODEPLUS_PA9 SYSCFG_CFGR1_I2C_FMP_PA9 /*!< Enable Fast Mode Plus on PA9 */ +#define I2C_FASTMODEPLUS_PA10 SYSCFG_CFGR1_I2C_FMP_PA10 /*!< Enable Fast Mode Plus on PA10 */ +#else +#define I2C_FASTMODEPLUS_PA9 (uint32_t)(0x00000001U | I2C_FMP_NOT_SUPPORTED) /*!< Fast Mode Plus PA9 not supported */ +#define I2C_FASTMODEPLUS_PA10 (uint32_t)(0x00000002U | I2C_FMP_NOT_SUPPORTED) /*!< Fast Mode Plus PA10 not supported */ +#endif /* SYSCFG_CFGR1_I2C_FMP_PA9 */ +#define I2C_FASTMODEPLUS_PB6 SYSCFG_CFGR1_I2C_FMP_PB6 /*!< Enable Fast Mode Plus on PB6 */ +#define I2C_FASTMODEPLUS_PB7 SYSCFG_CFGR1_I2C_FMP_PB7 /*!< Enable Fast Mode Plus on PB7 */ +#define I2C_FASTMODEPLUS_PB8 SYSCFG_CFGR1_I2C_FMP_PB8 /*!< Enable Fast Mode Plus on PB8 */ +#define I2C_FASTMODEPLUS_PB9 SYSCFG_CFGR1_I2C_FMP_PB9 /*!< Enable Fast Mode Plus on PB9 */ +#if defined(SYSCFG_CFGR1_I2C_FMP_I2C1) +#define I2C_FASTMODEPLUS_I2C1 SYSCFG_CFGR1_I2C_FMP_I2C1 /*!< Enable Fast Mode Plus on I2C1 pins */ +#else +#define I2C_FASTMODEPLUS_I2C1 (uint32_t)(0x00000100U | I2C_FMP_NOT_SUPPORTED) /*!< Fast Mode Plus I2C1 not supported */ +#endif /* SYSCFG_CFGR1_I2C_FMP_I2C1 */ +#if defined(SYSCFG_CFGR1_I2C_FMP_I2C2) +#define I2C_FASTMODEPLUS_I2C2 SYSCFG_CFGR1_I2C_FMP_I2C2 /*!< Enable Fast Mode Plus on I2C2 pins */ +#else +#define I2C_FASTMODEPLUS_I2C2 (uint32_t)(0x00000200U | I2C_FMP_NOT_SUPPORTED) /*!< Fast Mode Plus I2C2 not supported */ +#endif /* SYSCFG_CFGR1_I2C_FMP_I2C2 */ +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ + +/** @addtogroup I2CEx_Exported_Functions I2C Extended Exported Functions + * @{ + */ + +/** @addtogroup I2CEx_Exported_Functions_Group1 Extended features functions + * @brief Extended features functions + * @{ + */ + +/** @addtogroup I2CEx_Exported_Functions_Group1 Filter Mode Functions + * @{ + */ +HAL_StatusTypeDef HAL_I2CEx_ConfigAnalogFilter(I2C_HandleTypeDef *hi2c, + uint32_t AnalogFilter); +HAL_StatusTypeDef HAL_I2CEx_ConfigDigitalFilter(I2C_HandleTypeDef *hi2c, + uint32_t DigitalFilter); +/** + * @} + */ +#if defined(I2C_CR1_WUPEN) + +/** @addtogroup I2CEx_Exported_Functions_Group2 WakeUp Mode Functions + * @{ + */ +HAL_StatusTypeDef HAL_I2CEx_EnableWakeUp(I2C_HandleTypeDef *hi2c); +HAL_StatusTypeDef HAL_I2CEx_DisableWakeUp(I2C_HandleTypeDef *hi2c); +/** + * @} + */ +#endif /* I2C_CR1_WUPEN */ + +/** @addtogroup I2CEx_Exported_Functions_Group3 Fast Mode Plus Functions + * @{ + */ +void HAL_I2CEx_EnableFastModePlus(uint32_t ConfigFastModePlus); +void HAL_I2CEx_DisableFastModePlus(uint32_t ConfigFastModePlus); +/** + * @} + */ + +/* Private constants ---------------------------------------------------------*/ +/** @defgroup I2CEx_Private_Constants I2C Extended Private Constants + * @{ + */ + +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/** @defgroup I2CEx_Private_Macro I2C Extended Private Macros + * @{ + */ +#define IS_I2C_ANALOG_FILTER(FILTER) (((FILTER) == I2C_ANALOGFILTER_ENABLE) || \ + ((FILTER) == I2C_ANALOGFILTER_DISABLE)) + +#define IS_I2C_DIGITAL_FILTER(FILTER) ((FILTER) <= 0x0000000FU) + +#define IS_I2C_FASTMODEPLUS(__CONFIG__) ((((__CONFIG__) & I2C_FMP_NOT_SUPPORTED) != I2C_FMP_NOT_SUPPORTED) && \ + ((((__CONFIG__) & (I2C_FASTMODEPLUS_PA9)) == I2C_FASTMODEPLUS_PA9) || \ + (((__CONFIG__) & (I2C_FASTMODEPLUS_PA10)) == I2C_FASTMODEPLUS_PA10) || \ + (((__CONFIG__) & (I2C_FASTMODEPLUS_PB6)) == I2C_FASTMODEPLUS_PB6) || \ + (((__CONFIG__) & (I2C_FASTMODEPLUS_PB7)) == I2C_FASTMODEPLUS_PB7) || \ + (((__CONFIG__) & (I2C_FASTMODEPLUS_PB8)) == I2C_FASTMODEPLUS_PB8) || \ + (((__CONFIG__) & (I2C_FASTMODEPLUS_PB9)) == I2C_FASTMODEPLUS_PB9) || \ + (((__CONFIG__) & (I2C_FASTMODEPLUS_I2C1)) == I2C_FASTMODEPLUS_I2C1) || \ + (((__CONFIG__) & (I2C_FASTMODEPLUS_I2C2)) == I2C_FASTMODEPLUS_I2C2))) +/** + * @} + */ + +/* Private Functions ---------------------------------------------------------*/ +/** @defgroup I2CEx_Private_Functions I2C Extended Private Functions + * @{ + */ +/* Private functions are defined in stm32f0xx_hal_i2c_ex.c file */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* STM32F0xx_HAL_I2C_EX_H */ diff --git a/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr.h b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr.h new file mode 100644 index 0000000..7ee4791 --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr.h @@ -0,0 +1,185 @@ +/** + ****************************************************************************** + * @file stm32f0xx_hal_pwr.h + * @author MCD Application Team + * @brief Header file of PWR 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 __STM32F0xx_HAL_PWR_H +#define __STM32F0xx_HAL_PWR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f0xx_hal_def.h" + +/** @addtogroup STM32F0xx_HAL_Driver + * @{ + */ + +/** @addtogroup PWR PWR + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup PWR_Exported_Constants PWR Exported Constants + * @{ + */ + +/** @defgroup PWR_Regulator_state_in_STOP_mode PWR Regulator state in STOP mode + * @{ + */ +#define PWR_MAINREGULATOR_ON (0x00000000U) +#define PWR_LOWPOWERREGULATOR_ON PWR_CR_LPDS + +#define IS_PWR_REGULATOR(REGULATOR) (((REGULATOR) == PWR_MAINREGULATOR_ON) || \ + ((REGULATOR) == PWR_LOWPOWERREGULATOR_ON)) +/** + * @} + */ + +/** @defgroup PWR_SLEEP_mode_entry PWR SLEEP mode entry + * @{ + */ +#define PWR_SLEEPENTRY_WFI ((uint8_t)0x01U) +#define PWR_SLEEPENTRY_WFE ((uint8_t)0x02U) +#define IS_PWR_SLEEP_ENTRY(ENTRY) (((ENTRY) == PWR_SLEEPENTRY_WFI) || ((ENTRY) == PWR_SLEEPENTRY_WFE)) +/** + * @} + */ + +/** @defgroup PWR_STOP_mode_entry PWR STOP mode entry + * @{ + */ +#define PWR_STOPENTRY_WFI ((uint8_t)0x01U) +#define PWR_STOPENTRY_WFE ((uint8_t)0x02U) +#define IS_PWR_STOP_ENTRY(ENTRY) (((ENTRY) == PWR_STOPENTRY_WFI) || ((ENTRY) == PWR_STOPENTRY_WFE)) +/** + * @} + */ + + +/** + * @} + */ + +/* 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), + * 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. + * Warning: this Flag is not available on STM32F030x8 products + * @arg PWR_FLAG_VREFINTRDY: This flag indicates that the internal reference + * voltage VREFINT is ready. + * Warning: this Flag is not available on STM32F030x8 products + * @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) + + +/** + * @} + */ + +/* Include PWR HAL Extension module */ +#include "stm32f0xx_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); + +/** + * @} + */ + +/** @addtogroup PWR_Exported_Functions_Group2 Peripheral Control functions + * @{ + */ + +/* Peripheral Control functions **********************************************/ +void HAL_PWR_EnableBkUpAccess(void); +void HAL_PWR_DisableBkUpAccess(void); + +/* WakeUp pins configuration functions ****************************************/ +void HAL_PWR_EnableWakeUpPin(uint32_t WakeUpPinx); +void HAL_PWR_DisableWakeUpPin(uint32_t WakeUpPinx); + +/* Low Power modes configuration functions ************************************/ +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); + +void HAL_PWR_EnableSleepOnExit(void); +void HAL_PWR_DisableSleepOnExit(void); +void HAL_PWR_EnableSEVOnPend(void); +void HAL_PWR_DisableSEVOnPend(void); + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + + +#endif /* __STM32F0xx_HAL_PWR_H */ diff --git a/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr_ex.h b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr_ex.h new file mode 100644 index 0000000..f4e41b7 --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr_ex.h @@ -0,0 +1,455 @@ +/** + ****************************************************************************** + * @file stm32f0xx_hal_pwr_ex.h + * @author MCD Application Team + * @brief Header file of PWR HAL Extension 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 __STM32F0xx_HAL_PWR_EX_H +#define __STM32F0xx_HAL_PWR_EX_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f0xx_hal_def.h" + +/** @addtogroup STM32F0xx_HAL_Driver + * @{ + */ + +/** @addtogroup PWREx + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ + +/** @defgroup PWREx_Exported_Types PWREx Exported Types + * @{ + */ + +#if defined (STM32F031x6) || defined (STM32F042x6) || defined (STM32F051x8) || \ + defined (STM32F071xB) || defined (STM32F072xB) || \ + defined (STM32F091xC) + +/** + * @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 PWREx_PVD_detection_level */ + + uint32_t Mode; /*!< Mode: Specifies the operating mode for the selected pins. + This parameter can be a value of @ref PWREx_PVD_Mode */ +}PWR_PVDTypeDef; + +#endif /* defined (STM32F031x6) || defined (STM32F042x6) || defined (STM32F051x8) || */ + /* defined (STM32F071xB) || defined (STM32F072xB) || */ + /* defined (STM32F091xC) */ +/** + * @} + */ +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup PWREx_Exported_Constants PWREx Exported Constants + * @{ + */ + + +/** @defgroup PWREx_WakeUp_Pins PWREx Wakeup Pins + * @{ + */ +#if defined (STM32F071xB) || defined (STM32F072xB) || defined (STM32F078xx) || \ + defined (STM32F091xC) || defined (STM32F098xx) +#define PWR_WAKEUP_PIN1 ((uint32_t)PWR_CSR_EWUP1) +#define PWR_WAKEUP_PIN2 ((uint32_t)PWR_CSR_EWUP2) +#define PWR_WAKEUP_PIN3 ((uint32_t)PWR_CSR_EWUP3) +#define PWR_WAKEUP_PIN4 ((uint32_t)PWR_CSR_EWUP4) +#define PWR_WAKEUP_PIN5 ((uint32_t)PWR_CSR_EWUP5) +#define PWR_WAKEUP_PIN6 ((uint32_t)PWR_CSR_EWUP6) +#define PWR_WAKEUP_PIN7 ((uint32_t)PWR_CSR_EWUP7) +#define PWR_WAKEUP_PIN8 ((uint32_t)PWR_CSR_EWUP8) + +#define IS_PWR_WAKEUP_PIN(PIN) (((PIN) == PWR_WAKEUP_PIN1) || \ + ((PIN) == PWR_WAKEUP_PIN2) || \ + ((PIN) == PWR_WAKEUP_PIN3) || \ + ((PIN) == PWR_WAKEUP_PIN4) || \ + ((PIN) == PWR_WAKEUP_PIN5) || \ + ((PIN) == PWR_WAKEUP_PIN6) || \ + ((PIN) == PWR_WAKEUP_PIN7) || \ + ((PIN) == PWR_WAKEUP_PIN8)) + +#elif defined(STM32F030xC) || defined (STM32F070xB) +#define PWR_WAKEUP_PIN1 ((uint32_t)PWR_CSR_EWUP1) +#define PWR_WAKEUP_PIN2 ((uint32_t)PWR_CSR_EWUP2) +#define PWR_WAKEUP_PIN4 ((uint32_t)PWR_CSR_EWUP4) +#define PWR_WAKEUP_PIN5 ((uint32_t)PWR_CSR_EWUP5) +#define PWR_WAKEUP_PIN6 ((uint32_t)PWR_CSR_EWUP6) +#define PWR_WAKEUP_PIN7 ((uint32_t)PWR_CSR_EWUP7) + +#define IS_PWR_WAKEUP_PIN(PIN) (((PIN) == PWR_WAKEUP_PIN1) || \ + ((PIN) == PWR_WAKEUP_PIN2) || \ + ((PIN) == PWR_WAKEUP_PIN4) || \ + ((PIN) == PWR_WAKEUP_PIN5) || \ + ((PIN) == PWR_WAKEUP_PIN6) || \ + ((PIN) == PWR_WAKEUP_PIN7)) + +#elif defined(STM32F042x6) || defined (STM32F048xx) +#define PWR_WAKEUP_PIN1 ((uint32_t)PWR_CSR_EWUP1) +#define PWR_WAKEUP_PIN2 ((uint32_t)PWR_CSR_EWUP2) +#define PWR_WAKEUP_PIN4 ((uint32_t)PWR_CSR_EWUP4) +#define PWR_WAKEUP_PIN6 ((uint32_t)PWR_CSR_EWUP6) +#define PWR_WAKEUP_PIN7 ((uint32_t)PWR_CSR_EWUP7) + +#define IS_PWR_WAKEUP_PIN(PIN) (((PIN) == PWR_WAKEUP_PIN1) || \ + ((PIN) == PWR_WAKEUP_PIN2) || \ + ((PIN) == PWR_WAKEUP_PIN4) || \ + ((PIN) == PWR_WAKEUP_PIN6) || \ + ((PIN) == PWR_WAKEUP_PIN7)) + +#else +#define PWR_WAKEUP_PIN1 ((uint32_t)PWR_CSR_EWUP1) +#define PWR_WAKEUP_PIN2 ((uint32_t)PWR_CSR_EWUP2) + + +#define IS_PWR_WAKEUP_PIN(PIN) (((PIN) == PWR_WAKEUP_PIN1) || \ + ((PIN) == PWR_WAKEUP_PIN2)) + +#endif + +/** + * @} + */ + +/** @defgroup PWREx_EXTI_Line PWREx EXTI Line + * @{ + */ +#if defined (STM32F031x6) || defined (STM32F042x6) || defined (STM32F051x8) || \ + defined (STM32F071xB) || defined (STM32F072xB) || \ + defined (STM32F091xC) + +#define PWR_EXTI_LINE_PVD ((uint32_t)EXTI_IMR_MR16) /*!< External interrupt line 16 Connected to the PVD EXTI Line */ + +#endif /* defined (STM32F031x6) || defined (STM32F042x6) || defined (STM32F051x8) || */ + /* defined (STM32F071xB) || defined (STM32F072xB) || */ + /* defined (STM32F091xC) */ + +#if defined (STM32F042x6) || defined (STM32F048xx) || \ + defined (STM32F071xB) || defined (STM32F072xB) || defined (STM32F078xx) || \ + defined (STM32F091xC) || defined (STM32F098xx) + +#define PWR_EXTI_LINE_VDDIO2 ((uint32_t)EXTI_IMR_MR31) /*!< External interrupt line 31 Connected to the Vddio2 Monitor EXTI Line */ + +#endif /* defined (STM32F042x6) || defined (STM32F048xx) ||\ + defined (STM32F071xB) || defined (STM32F072xB) || defined (STM32F078xx) || \ + defined (STM32F091xC) || defined (STM32F098xx) ||*/ +/** + * @} + */ + +#if defined (STM32F031x6) || defined (STM32F042x6) || defined (STM32F051x8) || \ + defined (STM32F071xB) || defined (STM32F072xB) || \ + defined (STM32F091xC) +/** @defgroup PWREx_PVD_detection_level PWREx 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 +#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)) +/** + * @} + */ + +/** @defgroup PWREx_PVD_Mode PWREx 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 */ + +#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)) +/** + * @} + */ +#endif /* defined (STM32F031x6) || defined (STM32F042x6) || defined (STM32F051x8) || */ + /* defined (STM32F071xB) || defined (STM32F072xB) || */ + /* defined (STM32F091xC) */ + +/** @defgroup PWREx_Flag PWREx Flag + * @{ + */ +#if defined (STM32F031x6) || defined (STM32F042x6) || defined (STM32F051x8) || \ + defined (STM32F071xB) || defined (STM32F072xB) || \ + defined (STM32F091xC) + +#define PWR_FLAG_WU PWR_CSR_WUF +#define PWR_FLAG_SB PWR_CSR_SBF +#define PWR_FLAG_PVDO PWR_CSR_PVDO +#define PWR_FLAG_VREFINTRDY PWR_CSR_VREFINTRDYF +#elif defined (STM32F070x6) || defined (STM32F070xB) || defined (STM32F030xC) +#define PWR_FLAG_WU PWR_CSR_WUF +#define PWR_FLAG_SB PWR_CSR_SBF +#define PWR_FLAG_VREFINTRDY PWR_CSR_VREFINTRDYF +#else +#define PWR_FLAG_WU PWR_CSR_WUF +#define PWR_FLAG_SB PWR_CSR_SBF + +#endif /* defined (STM32F031x6) || defined (STM32F042x6) || defined (STM32F051x8) || */ + /* defined (STM32F071xB) || defined (STM32F072xB) || */ + /* defined (STM32F091xC) */ +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup PWREx_Exported_Macros PWREx Exported Macros + * @{ + */ +#if defined (STM32F031x6) || defined (STM32F042x6) || defined (STM32F051x8) || \ + defined (STM32F071xB) || defined (STM32F072xB) || \ + defined (STM32F091xC) +/** + * @brief Enable interrupt on PVD Exti Line 16. + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_ENABLE_IT() (EXTI->IMR |= (PWR_EXTI_LINE_PVD)) + +/** + * @brief Disable interrupt on 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 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 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 Disable the PVD Extended Interrupt Rising & Falling Trigger. + * @retval None + */ +#define __HAL_PWR_PVD_EXTI_DISABLE_RISING_FALLING_EDGE() __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE();__HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE(); + + +/** + * @brief PVD EXTI line configuration: set falling edge trigger. + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE() EXTI->FTSR |= (PWR_EXTI_LINE_PVD) + +/** + * @brief PVD EXTI line configuration: set rising edge trigger. + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE() EXTI->RTSR |= (PWR_EXTI_LINE_PVD) + +/** + * @brief Enable the PVD Extended Interrupt Rising & Falling Trigger. + * @retval None + */ +#define __HAL_PWR_PVD_EXTI_ENABLE_RISING_FALLING_EDGE() __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE();__HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE(); + +/** + * @brief Check 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 Generate a Software interrupt on selected EXTI line. + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_GENERATE_SWIT() (EXTI->SWIER |= (PWR_EXTI_LINE_PVD)) + +#endif /* defined (STM32F031x6) || defined (STM32F042x6) || defined (STM32F051x8) || */ + /* defined (STM32F071xB) || defined (STM32F072xB) || */ + /* defined (STM32F091xC) */ + + +#if defined (STM32F042x6) || defined (STM32F048xx) || \ + defined (STM32F071xB) || defined (STM32F072xB) || defined (STM32F078xx) || \ + defined (STM32F091xC) || defined (STM32F098xx) +/** + * @brief Enable interrupt on Vddio2 Monitor Exti Line 31. + * @retval None. + */ +#define __HAL_PWR_VDDIO2_EXTI_ENABLE_IT() (EXTI->IMR |= (PWR_EXTI_LINE_VDDIO2)) + +/** + * @brief Disable interrupt on Vddio2 Monitor Exti Line 31. + * @retval None. + */ +#define __HAL_PWR_VDDIO2_EXTI_DISABLE_IT() (EXTI->IMR &= ~(PWR_EXTI_LINE_VDDIO2)) + +/** + * @brief Vddio2 Monitor EXTI line configuration: clear falling edge and rising edge trigger. + * @retval None. + */ +#define __HAL_PWR_VDDIO2_EXTI_DISABLE_FALLING_EDGE() \ + do{ \ + EXTI->FTSR &= ~(PWR_EXTI_LINE_VDDIO2); \ + EXTI->RTSR &= ~(PWR_EXTI_LINE_VDDIO2); \ + } while(0) + +/** + * @brief Vddio2 Monitor EXTI line configuration: set falling edge trigger. + * @retval None. + */ +#define __HAL_PWR_VDDIO2_EXTI_ENABLE_FALLING_EDGE() EXTI->FTSR |= (PWR_EXTI_LINE_VDDIO2) + +/** + * @brief Check whether the specified VDDIO2 monitor EXTI interrupt flag is set or not. + * @retval EXTI VDDIO2 Monitor Line Status. + */ +#define __HAL_PWR_VDDIO2_EXTI_GET_FLAG() (EXTI->PR & (PWR_EXTI_LINE_VDDIO2)) + +/** + * @brief Clear the VDDIO2 Monitor EXTI flag. + * @retval None. + */ +#define __HAL_PWR_VDDIO2_EXTI_CLEAR_FLAG() (EXTI->PR = (PWR_EXTI_LINE_VDDIO2)) + +/** + * @brief Generate a Software interrupt on selected EXTI line. + * @retval None. + */ +#define __HAL_PWR_VDDIO2_EXTI_GENERATE_SWIT() (EXTI->SWIER |= (PWR_EXTI_LINE_VDDIO2)) + + +#endif /* defined (STM32F042x6) || defined (STM32F048xx) ||\ + defined (STM32F071xB) || defined (STM32F072xB) || defined (STM32F078xx) || \ + defined (STM32F091xC) || defined (STM32F098xx) */ + +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ + +/** @addtogroup PWREx_Exported_Functions PWREx Exported Functions + * @{ + */ + +/** @addtogroup PWREx_Exported_Functions_Group1 + * @{ + */ +/* I/O operation functions ***************************************************/ +#if defined (STM32F031x6) || defined (STM32F042x6) || defined (STM32F051x8) || \ + defined (STM32F071xB) || defined (STM32F072xB) || \ + defined (STM32F091xC) +void HAL_PWR_PVD_IRQHandler(void); +void HAL_PWR_PVDCallback(void); +#endif /* defined (STM32F031x6) || defined (STM32F042x6) || defined (STM32F051x8) || */ + /* defined (STM32F071xB) || defined (STM32F072xB) || */ + /* defined (STM32F091xC) */ + +#if defined (STM32F042x6) || defined (STM32F048xx) || \ + defined (STM32F071xB) || defined (STM32F072xB) || defined (STM32F078xx) || \ + defined (STM32F091xC) || defined (STM32F098xx) +void HAL_PWREx_Vddio2Monitor_IRQHandler(void); +void HAL_PWREx_Vddio2MonitorCallback(void); +#endif /* defined (STM32F042x6) || defined (STM32F048xx) || \ + defined (STM32F071xB) || defined (STM32F072xB) || defined (STM32F078xx) || \ + defined (STM32F091xC) || defined (STM32F098xx) */ + +/* Peripheral Control functions **********************************************/ +#if defined (STM32F031x6) || defined (STM32F042x6) || defined (STM32F051x8) || \ + defined (STM32F071xB) || defined (STM32F072xB) || \ + defined (STM32F091xC) +void HAL_PWR_ConfigPVD(PWR_PVDTypeDef *sConfigPVD); +void HAL_PWR_EnablePVD(void); +void HAL_PWR_DisablePVD(void); +#endif /* defined (STM32F031x6) || defined (STM32F042x6) || defined (STM32F051x8) || */ + /* defined (STM32F071xB) || defined (STM32F072xB) || */ + /* defined (STM32F091xC) */ + +#if defined (STM32F042x6) || defined (STM32F048xx) || \ + defined (STM32F071xB) || defined (STM32F072xB) || defined (STM32F078xx) || \ + defined (STM32F091xC) || defined (STM32F098xx) +void HAL_PWREx_EnableVddio2Monitor(void); +void HAL_PWREx_DisableVddio2Monitor(void); +#endif /* defined (STM32F042x6) || defined (STM32F048xx) || \ + defined (STM32F071xB) || defined (STM32F072xB) || defined (STM32F078xx) || \ + defined (STM32F091xC) || defined (STM32F098xx) */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F0xx_HAL_PWR_EX_H */ diff --git a/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc.h b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc.h new file mode 100644 index 0000000..da100d2 --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc.h @@ -0,0 +1,1683 @@ +/** + ****************************************************************************** + * @file stm32f0xx_hal_rcc.h + * @author MCD Application Team + * @brief Header file of RCC 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 __STM32F0xx_HAL_RCC_H +#define __STM32F0xx_HAL_RCC_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f0xx_hal_def.h" + +/** @addtogroup STM32F0xx_HAL_Driver + * @{ + */ + +/** @addtogroup RCC + * @{ + */ + +/** @addtogroup RCC_Private_Constants + * @{ + */ + +/** @defgroup RCC_Timeout RCC Timeout + * @{ + */ + +/* Disable Backup domain write protection state change timeout */ +#define RCC_DBP_TIMEOUT_VALUE (100U) /* 100 ms */ +/* LSE state change timeout */ +#define RCC_LSE_TIMEOUT_VALUE LSE_STARTUP_TIMEOUT +#define CLOCKSWITCH_TIMEOUT_VALUE (5000U) /* 5 s */ +#define HSE_TIMEOUT_VALUE HSE_STARTUP_TIMEOUT +#define HSI_TIMEOUT_VALUE (2U) /* 2 ms (minimum Tick + 1U) */ +#define LSI_TIMEOUT_VALUE (2U) /* 2 ms (minimum Tick + 1U) */ +#define PLL_TIMEOUT_VALUE (2U) /* 2 ms (minimum Tick + 1U) */ +#define HSI14_TIMEOUT_VALUE (2U) /* 2 ms (minimum Tick + 1U) */ +#if defined(RCC_HSI48_SUPPORT) +#define HSI48_TIMEOUT_VALUE (2U) /* 2 ms (minimum Tick + 1U) */ +#endif /* RCC_HSI48_SUPPORT */ +/** + * @} + */ + +/** @defgroup RCC_Register_Offset Register offsets + * @{ + */ +#define RCC_OFFSET (RCC_BASE - PERIPH_BASE) +#define RCC_CR_OFFSET 0x00 +#define RCC_CFGR_OFFSET 0x04 +#define RCC_CIR_OFFSET 0x08 +#define RCC_BDCR_OFFSET 0x20 +#define RCC_CSR_OFFSET 0x24 + +/** + * @} + */ + + +/* CR register byte 2 (Bits[23:16]) base address */ +#define RCC_CR_BYTE2_ADDRESS ((uint32_t)(RCC_BASE + RCC_CR_OFFSET + 0x02U)) + +/* CIR register byte 1 (Bits[15:8]) base address */ +#define RCC_CIR_BYTE1_ADDRESS ((uint32_t)(RCC_BASE + RCC_CIR_OFFSET + 0x01U)) + +/* CIR register byte 2 (Bits[23:16]) base address */ +#define RCC_CIR_BYTE2_ADDRESS ((uint32_t)(RCC_BASE + RCC_CIR_OFFSET + 0x02U)) + +/* Defines used for Flags */ +#define CR_REG_INDEX ((uint8_t)1U) +#define CR2_REG_INDEX ((uint8_t)2U) +#define BDCR_REG_INDEX ((uint8_t)3U) +#define CSR_REG_INDEX ((uint8_t)4U) + +/* Bits position in in the CFGR register */ +#define RCC_CFGR_PLLMUL_BITNUMBER 18U +#define RCC_CFGR_HPRE_BITNUMBER 4U +#define RCC_CFGR_PPRE_BITNUMBER 8U +/* Flags in the CFGR2 register */ +#define RCC_CFGR2_PREDIV_BITNUMBER 0 +/* Flags in the CR register */ +#define RCC_CR_HSIRDY_BitNumber 1 +#define RCC_CR_HSERDY_BitNumber 17 +#define RCC_CR_PLLRDY_BitNumber 25 +/* Flags in the CR2 register */ +#define RCC_CR2_HSI14RDY_BitNumber 1 +#define RCC_CR2_HSI48RDY_BitNumber 17 +/* Flags in the BDCR register */ +#define RCC_BDCR_LSERDY_BitNumber 1 +/* Flags in the CSR register */ +#define RCC_CSR_LSIRDY_BitNumber 1 +#define RCC_CSR_V18PWRRSTF_BitNumber 23 +#define RCC_CSR_RMVF_BitNumber 24 +#define RCC_CSR_OBLRSTF_BitNumber 25 +#define RCC_CSR_PINRSTF_BitNumber 26 +#define RCC_CSR_PORRSTF_BitNumber 27 +#define RCC_CSR_SFTRSTF_BitNumber 28 +#define RCC_CSR_IWDGRSTF_BitNumber 29 +#define RCC_CSR_WWDGRSTF_BitNumber 30 +#define RCC_CSR_LPWRRSTF_BitNumber 31 +/* Flags in the HSITRIM register */ +#define RCC_CR_HSITRIM_BitNumber 3 +#define RCC_HSI14TRIM_BIT_NUMBER 3 +#define RCC_FLAG_MASK ((uint8_t)0x1FU) + +/** + * @} + */ + +/** @addtogroup RCC_Private_Macros + * @{ + */ +#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_HSI14(__HSI14__) (((__HSI14__) == RCC_HSI14_OFF) || ((__HSI14__) == RCC_HSI14_ON) || ((__HSI14__) == RCC_HSI14_ADC_CONTROL)) +#define IS_RCC_CALIBRATION_VALUE(__VALUE__) ((__VALUE__) <= 0x1FU) +#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_PREDIV(__PREDIV__) (((__PREDIV__) == RCC_PREDIV_DIV1) || ((__PREDIV__) == RCC_PREDIV_DIV2) || \ + ((__PREDIV__) == RCC_PREDIV_DIV3) || ((__PREDIV__) == RCC_PREDIV_DIV4) || \ + ((__PREDIV__) == RCC_PREDIV_DIV5) || ((__PREDIV__) == RCC_PREDIV_DIV6) || \ + ((__PREDIV__) == RCC_PREDIV_DIV7) || ((__PREDIV__) == RCC_PREDIV_DIV8) || \ + ((__PREDIV__) == RCC_PREDIV_DIV9) || ((__PREDIV__) == RCC_PREDIV_DIV10) || \ + ((__PREDIV__) == RCC_PREDIV_DIV11) || ((__PREDIV__) == RCC_PREDIV_DIV12) || \ + ((__PREDIV__) == RCC_PREDIV_DIV13) || ((__PREDIV__) == RCC_PREDIV_DIV14) || \ + ((__PREDIV__) == RCC_PREDIV_DIV15) || ((__PREDIV__) == RCC_PREDIV_DIV16)) + +#define IS_RCC_PLL_MUL(__MUL__) (((__MUL__) == RCC_PLL_MUL2) || ((__MUL__) == RCC_PLL_MUL3) || \ + ((__MUL__) == RCC_PLL_MUL4) || ((__MUL__) == RCC_PLL_MUL5) || \ + ((__MUL__) == RCC_PLL_MUL6) || ((__MUL__) == RCC_PLL_MUL7) || \ + ((__MUL__) == RCC_PLL_MUL8) || ((__MUL__) == RCC_PLL_MUL9) || \ + ((__MUL__) == RCC_PLL_MUL10) || ((__MUL__) == RCC_PLL_MUL11) || \ + ((__MUL__) == RCC_PLL_MUL12) || ((__MUL__) == RCC_PLL_MUL13) || \ + ((__MUL__) == RCC_PLL_MUL14) || ((__MUL__) == RCC_PLL_MUL15) || \ + ((__MUL__) == RCC_PLL_MUL16)) +#define IS_RCC_CLOCKTYPE(__CLK__) ((((__CLK__) & RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK) || \ + (((__CLK__) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK) || \ + (((__CLK__) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1)) +#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_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(__MCO__) ((__MCO__) == RCC_MCO) +#define IS_RCC_RTCCLKSOURCE(__SOURCE__) (((__SOURCE__) == RCC_RTCCLKSOURCE_NO_CLK) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_LSE) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_LSI) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV32)) +#define IS_RCC_USART1CLKSOURCE(__SOURCE__) (((__SOURCE__) == RCC_USART1CLKSOURCE_PCLK1) || \ + ((__SOURCE__) == RCC_USART1CLKSOURCE_SYSCLK) || \ + ((__SOURCE__) == RCC_USART1CLKSOURCE_LSE) || \ + ((__SOURCE__) == RCC_USART1CLKSOURCE_HSI)) +#define IS_RCC_I2C1CLKSOURCE(__SOURCE__) (((__SOURCE__) == RCC_I2C1CLKSOURCE_HSI) || \ + ((__SOURCE__) == RCC_I2C1CLKSOURCE_SYSCLK)) + +/** + * @} + */ + +/* Exported types ------------------------------------------------------------*/ + +/** @defgroup RCC_Exported_Types RCC Exported Types + * @{ + */ + +/** + * @brief RCC PLL configuration structure definition + */ +typedef struct +{ + uint32_t PLLState; /*!< PLLState: The new state of the PLL. + This parameter can be a value of @ref RCC_PLL_Config */ + + uint32_t PLLSource; /*!< PLLSource: PLL entry clock source. + This parameter must be a value of @ref RCC_PLL_Clock_Source */ + + uint32_t PLLMUL; /*!< PLLMUL: Multiplication factor for PLL VCO input clock + This parameter must be a value of @ref RCC_PLL_Multiplication_Factor*/ + + uint32_t PREDIV; /*!< PREDIV: Predivision factor for PLL VCO input clock + This parameter must be a value of @ref RCC_PLL_Prediv_Factor */ + +} RCC_PLLInitTypeDef; + +/** + * @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 = 0x1FU */ + + uint32_t HSI14State; /*!< The new state of the HSI14. + This parameter can be a value of @ref RCC_HSI14_Config */ + + uint32_t HSI14CalibrationValue; /*!< The HSI14 calibration trimming value (default is RCC_HSI14CALIBRATION_DEFAULT). + This parameter must be a number between Min_Data = 0x00 and Max_Data = 0x1FU */ + + uint32_t LSIState; /*!< The new state of the LSI. + This parameter can be a value of @ref RCC_LSI_Config */ + +#if defined(RCC_HSI48_SUPPORT) + uint32_t HSI48State; /*!< The new state of the HSI48. + This parameter can be a value of @ref RCC_HSI48_Config */ + +#endif /* RCC_HSI48_SUPPORT */ + 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_Clock_Source */ + +} RCC_ClkInitTypeDef; + +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup RCC_Exported_Constants RCC Exported Constants + * @{ + */ + +/** @defgroup RCC_PLL_Clock_Source PLL Clock Source + * @{ + */ + +#define RCC_PLLSOURCE_HSE RCC_CFGR_PLLSRC_HSE_PREDIV /*!< HSE clock selected as PLL entry clock source */ + +/** + * @} + */ + +/** @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) +#define RCC_OSCILLATORTYPE_HSI14 (0x00000010U) +#if defined(RCC_HSI48_SUPPORT) +#define RCC_OSCILLATORTYPE_HSI48 (0x00000020U) +#endif /* RCC_HSI48_SUPPORT */ +/** + * @} + */ + +/** @defgroup RCC_HSE_Config HSE Config + * @{ + */ +#define RCC_HSE_OFF (0x00000000U) /*!< HSE clock deactivation */ +#define RCC_HSE_ON (0x00000001U) /*!< HSE clock activation */ +#define RCC_HSE_BYPASS (0x00000005U) /*!< External clock source for HSE clock */ +/** + * @} + */ + +/** @defgroup RCC_LSE_Config LSE Config + * @{ + */ +#define RCC_LSE_OFF (0x00000000U) /*!< LSE clock deactivation */ +#define RCC_LSE_ON (0x00000001U) /*!< LSE clock activation */ +#define RCC_LSE_BYPASS (0x00000005U) /*!< External clock source for LSE clock */ + +/** + * @} + */ + +/** @defgroup RCC_HSI_Config HSI Config + * @{ + */ +#define RCC_HSI_OFF (0x00000000U) /*!< HSI clock deactivation */ +#define RCC_HSI_ON RCC_CR_HSION /*!< HSI clock activation */ + +#define RCC_HSICALIBRATION_DEFAULT (0x10U) /* Default HSI calibration trimming value */ + +/** + * @} + */ + +/** @defgroup RCC_HSI14_Config RCC HSI14 Config + * @{ + */ +#define RCC_HSI14_OFF (0x00000000U) +#define RCC_HSI14_ON RCC_CR2_HSI14ON +#define RCC_HSI14_ADC_CONTROL (~RCC_CR2_HSI14DIS) + +#define RCC_HSI14CALIBRATION_DEFAULT (0x10U) /* Default HSI14 calibration trimming value */ +/** + * @} + */ + +/** @defgroup RCC_LSI_Config LSI Config + * @{ + */ +#define RCC_LSI_OFF (0x00000000U) /*!< LSI clock deactivation */ +#define RCC_LSI_ON RCC_CSR_LSION /*!< LSI clock activation */ + +/** + * @} + */ + +#if defined(RCC_HSI48_SUPPORT) +/** @defgroup RCC_HSI48_Config HSI48 Config + * @{ + */ +#define RCC_HSI48_OFF ((uint8_t)0x00U) +#define RCC_HSI48_ON ((uint8_t)0x01U) + +/** + * @} + */ +#endif /* RCC_HSI48_SUPPORT */ + +/** @defgroup RCC_PLL_Config PLL Config + * @{ + */ +#define RCC_PLL_NONE (0x00000000U) /*!< PLL is not configured */ +#define RCC_PLL_OFF (0x00000001U) /*!< PLL deactivation */ +#define RCC_PLL_ON (0x00000002U) /*!< PLL activation */ + +/** + * @} + */ + +/** @defgroup RCC_System_Clock_Type System Clock Type + * @{ + */ +#define RCC_CLOCKTYPE_SYSCLK (0x00000001U) /*!< SYSCLK to configure */ +#define RCC_CLOCKTYPE_HCLK (0x00000002U) /*!< HCLK to configure */ +#define RCC_CLOCKTYPE_PCLK1 (0x00000004U) /*!< PCLK1 to configure */ + +/** + * @} + */ + +/** @defgroup RCC_System_Clock_Source System Clock Source + * @{ + */ +#define RCC_SYSCLKSOURCE_HSI RCC_CFGR_SW_HSI /*!< HSI selected as system clock */ +#define RCC_SYSCLKSOURCE_HSE RCC_CFGR_SW_HSE /*!< HSE selected as system clock */ +#define RCC_SYSCLKSOURCE_PLLCLK RCC_CFGR_SW_PLL /*!< PLL selected as system clock */ + +/** + * @} + */ + +/** @defgroup RCC_System_Clock_Source_Status System Clock Source Status + * @{ + */ +#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 */ + +/** + * @} + */ + +/** @defgroup RCC_AHB_Clock_Source AHB Clock Source + * @{ + */ +#define RCC_SYSCLK_DIV1 RCC_CFGR_HPRE_DIV1 /*!< SYSCLK not divided */ +#define RCC_SYSCLK_DIV2 RCC_CFGR_HPRE_DIV2 /*!< SYSCLK divided by 2 */ +#define RCC_SYSCLK_DIV4 RCC_CFGR_HPRE_DIV4 /*!< SYSCLK divided by 4 */ +#define RCC_SYSCLK_DIV8 RCC_CFGR_HPRE_DIV8 /*!< SYSCLK divided by 8 */ +#define RCC_SYSCLK_DIV16 RCC_CFGR_HPRE_DIV16 /*!< SYSCLK divided by 16 */ +#define RCC_SYSCLK_DIV64 RCC_CFGR_HPRE_DIV64 /*!< SYSCLK divided by 64 */ +#define RCC_SYSCLK_DIV128 RCC_CFGR_HPRE_DIV128 /*!< SYSCLK divided by 128 */ +#define RCC_SYSCLK_DIV256 RCC_CFGR_HPRE_DIV256 /*!< SYSCLK divided by 256 */ +#define RCC_SYSCLK_DIV512 RCC_CFGR_HPRE_DIV512 /*!< SYSCLK divided by 512 */ + +/** + * @} + */ + +/** @defgroup RCC_APB1_Clock_Source RCC APB1 Clock Source + * @{ + */ +#define RCC_HCLK_DIV1 RCC_CFGR_PPRE_DIV1 /*!< HCLK not divided */ +#define RCC_HCLK_DIV2 RCC_CFGR_PPRE_DIV2 /*!< HCLK divided by 2 */ +#define RCC_HCLK_DIV4 RCC_CFGR_PPRE_DIV4 /*!< HCLK divided by 4 */ +#define RCC_HCLK_DIV8 RCC_CFGR_PPRE_DIV8 /*!< HCLK divided by 8 */ +#define RCC_HCLK_DIV16 RCC_CFGR_PPRE_DIV16 /*!< HCLK divided by 16 */ + +/** + * @} + */ + +/** @defgroup RCC_RTC_Clock_Source RTC Clock Source + * @{ + */ +#define RCC_RTCCLKSOURCE_NO_CLK (0x00000000U) /*!< No clock */ +#define RCC_RTCCLKSOURCE_LSE RCC_BDCR_RTCSEL_LSE /*!< LSE oscillator clock used as RTC clock */ +#define RCC_RTCCLKSOURCE_LSI RCC_BDCR_RTCSEL_LSI /*!< LSI oscillator clock used as RTC clock */ +#define RCC_RTCCLKSOURCE_HSE_DIV32 RCC_BDCR_RTCSEL_HSE /*!< HSE oscillator clock divided by 32 used as RTC clock */ +/** + * @} + */ + +/** @defgroup RCC_PLL_Multiplication_Factor RCC PLL Multiplication Factor + * @{ + */ +#define RCC_PLL_MUL2 RCC_CFGR_PLLMUL2 +#define RCC_PLL_MUL3 RCC_CFGR_PLLMUL3 +#define RCC_PLL_MUL4 RCC_CFGR_PLLMUL4 +#define RCC_PLL_MUL5 RCC_CFGR_PLLMUL5 +#define RCC_PLL_MUL6 RCC_CFGR_PLLMUL6 +#define RCC_PLL_MUL7 RCC_CFGR_PLLMUL7 +#define RCC_PLL_MUL8 RCC_CFGR_PLLMUL8 +#define RCC_PLL_MUL9 RCC_CFGR_PLLMUL9 +#define RCC_PLL_MUL10 RCC_CFGR_PLLMUL10 +#define RCC_PLL_MUL11 RCC_CFGR_PLLMUL11 +#define RCC_PLL_MUL12 RCC_CFGR_PLLMUL12 +#define RCC_PLL_MUL13 RCC_CFGR_PLLMUL13 +#define RCC_PLL_MUL14 RCC_CFGR_PLLMUL14 +#define RCC_PLL_MUL15 RCC_CFGR_PLLMUL15 +#define RCC_PLL_MUL16 RCC_CFGR_PLLMUL16 + +/** + * @} + */ + +/** @defgroup RCC_PLL_Prediv_Factor RCC PLL Prediv Factor + * @{ + */ + +#define RCC_PREDIV_DIV1 RCC_CFGR2_PREDIV_DIV1 +#define RCC_PREDIV_DIV2 RCC_CFGR2_PREDIV_DIV2 +#define RCC_PREDIV_DIV3 RCC_CFGR2_PREDIV_DIV3 +#define RCC_PREDIV_DIV4 RCC_CFGR2_PREDIV_DIV4 +#define RCC_PREDIV_DIV5 RCC_CFGR2_PREDIV_DIV5 +#define RCC_PREDIV_DIV6 RCC_CFGR2_PREDIV_DIV6 +#define RCC_PREDIV_DIV7 RCC_CFGR2_PREDIV_DIV7 +#define RCC_PREDIV_DIV8 RCC_CFGR2_PREDIV_DIV8 +#define RCC_PREDIV_DIV9 RCC_CFGR2_PREDIV_DIV9 +#define RCC_PREDIV_DIV10 RCC_CFGR2_PREDIV_DIV10 +#define RCC_PREDIV_DIV11 RCC_CFGR2_PREDIV_DIV11 +#define RCC_PREDIV_DIV12 RCC_CFGR2_PREDIV_DIV12 +#define RCC_PREDIV_DIV13 RCC_CFGR2_PREDIV_DIV13 +#define RCC_PREDIV_DIV14 RCC_CFGR2_PREDIV_DIV14 +#define RCC_PREDIV_DIV15 RCC_CFGR2_PREDIV_DIV15 +#define RCC_PREDIV_DIV16 RCC_CFGR2_PREDIV_DIV16 + +/** + * @} + */ + + +/** @defgroup RCC_USART1_Clock_Source RCC USART1 Clock Source + * @{ + */ +#define RCC_USART1CLKSOURCE_PCLK1 RCC_CFGR3_USART1SW_PCLK +#define RCC_USART1CLKSOURCE_SYSCLK RCC_CFGR3_USART1SW_SYSCLK +#define RCC_USART1CLKSOURCE_LSE RCC_CFGR3_USART1SW_LSE +#define RCC_USART1CLKSOURCE_HSI RCC_CFGR3_USART1SW_HSI + +/** + * @} + */ + +/** @defgroup RCC_I2C1_Clock_Source RCC I2C1 Clock Source + * @{ + */ +#define RCC_I2C1CLKSOURCE_HSI RCC_CFGR3_I2C1SW_HSI +#define RCC_I2C1CLKSOURCE_SYSCLK RCC_CFGR3_I2C1SW_SYSCLK + +/** + * @} + */ +/** @defgroup RCC_MCO_Index MCO Index + * @{ + */ +#define RCC_MCO1 (0x00000000U) +#define RCC_MCO RCC_MCO1 /*!< MCO1 to be compliant with other families with 2 MCOs*/ + +/** + * @} + */ + +/** @defgroup RCC_MCO_Clock_Source RCC MCO Clock Source + * @{ + */ +#define RCC_MCO1SOURCE_NOCLOCK RCC_CFGR_MCO_NOCLOCK +#define RCC_MCO1SOURCE_LSI RCC_CFGR_MCO_LSI +#define RCC_MCO1SOURCE_LSE RCC_CFGR_MCO_LSE +#define RCC_MCO1SOURCE_SYSCLK RCC_CFGR_MCO_SYSCLK +#define RCC_MCO1SOURCE_HSI RCC_CFGR_MCO_HSI +#define RCC_MCO1SOURCE_HSE RCC_CFGR_MCO_HSE +#define RCC_MCO1SOURCE_PLLCLK_DIV2 RCC_CFGR_MCO_PLL +#define RCC_MCO1SOURCE_HSI14 RCC_CFGR_MCO_HSI14 + +/** + * @} + */ + +/** @defgroup RCC_Interrupt Interrupts + * @{ + */ +#define RCC_IT_LSIRDY ((uint8_t)RCC_CIR_LSIRDYF) /*!< LSI Ready Interrupt flag */ +#define RCC_IT_LSERDY ((uint8_t)RCC_CIR_LSERDYF) /*!< LSE Ready Interrupt flag */ +#define RCC_IT_HSIRDY ((uint8_t)RCC_CIR_HSIRDYF) /*!< HSI Ready Interrupt flag */ +#define RCC_IT_HSERDY ((uint8_t)RCC_CIR_HSERDYF) /*!< HSE Ready Interrupt flag */ +#define RCC_IT_PLLRDY ((uint8_t)RCC_CIR_PLLRDYF) /*!< PLL Ready Interrupt flag */ +#define RCC_IT_HSI14RDY ((uint8_t)RCC_CIR_HSI14RDYF) /*!< HSI14 Ready Interrupt flag */ +#if defined(RCC_CIR_HSI48RDYF) +#define RCC_IT_HSI48RDY ((uint8_t)RCC_CIR_HSI48RDYF) /*!< HSI48 Ready Interrupt flag */ +#endif +#define RCC_IT_CSS ((uint8_t)RCC_CIR_CSSF) /*!< Clock Security System Interrupt flag */ +/** + * @} + */ + +/** @defgroup RCC_Flag Flags + * Elements values convention: XXXYYYYYb + * - YYYYY : Flag position in the register + * - XXX : Register index + * - 001: CR register + * - 010: CR2 register + * - 011: BDCR register + * - 0100: CSR register + * @{ + */ +/* Flags in the CR register */ +#define RCC_FLAG_HSIRDY ((uint8_t)((CR_REG_INDEX << 5U) | RCC_CR_HSIRDY_BitNumber)) +#define RCC_FLAG_HSERDY ((uint8_t)((CR_REG_INDEX << 5U) | RCC_CR_HSERDY_BitNumber)) +#define RCC_FLAG_PLLRDY ((uint8_t)((CR_REG_INDEX << 5U) | RCC_CR_PLLRDY_BitNumber)) +/* Flags in the CR2 register */ +#define RCC_FLAG_HSI14RDY ((uint8_t)((CR2_REG_INDEX << 5U) | RCC_CR2_HSI14RDY_BitNumber)) + +/* Flags in the CSR register */ +#define RCC_FLAG_LSIRDY ((uint8_t)((CSR_REG_INDEX << 5U) | RCC_CSR_LSIRDY_BitNumber)) +#if defined(RCC_CSR_V18PWRRSTF) +#define RCC_FLAG_V18PWRRST ((uint8_t)((CSR_REG_INDEX << 5U) | RCC_CSR_V18PWRRSTF_BitNumber)) +#endif +#define RCC_FLAG_OBLRST ((uint8_t)((CSR_REG_INDEX << 5U) | RCC_CSR_OBLRSTF_BitNumber)) +#define RCC_FLAG_PINRST ((uint8_t)((CSR_REG_INDEX << 5U) | RCC_CSR_PINRSTF_BitNumber)) /*!< PIN reset flag */ +#define RCC_FLAG_PORRST ((uint8_t)((CSR_REG_INDEX << 5U) | RCC_CSR_PORRSTF_BitNumber)) /*!< POR/PDR reset flag */ +#define RCC_FLAG_SFTRST ((uint8_t)((CSR_REG_INDEX << 5U) | RCC_CSR_SFTRSTF_BitNumber)) /*!< Software Reset flag */ +#define RCC_FLAG_IWDGRST ((uint8_t)((CSR_REG_INDEX << 5U) | RCC_CSR_IWDGRSTF_BitNumber)) /*!< Independent Watchdog reset flag */ +#define RCC_FLAG_WWDGRST ((uint8_t)((CSR_REG_INDEX << 5U) | RCC_CSR_WWDGRSTF_BitNumber)) /*!< Window watchdog reset flag */ +#define RCC_FLAG_LPWRRST ((uint8_t)((CSR_REG_INDEX << 5U) | RCC_CSR_LPWRRSTF_BitNumber)) /*!< Low-Power reset flag */ + +/* Flags in the BDCR register */ +#define RCC_FLAG_LSERDY ((uint8_t)((BDCR_REG_INDEX << 5U) | RCC_BDCR_LSERDY_BitNumber)) /*!< External Low Speed oscillator Ready */ + +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ + +/** @defgroup RCC_Exported_Macros RCC Exported Macros + * @{ + */ + +/** @defgroup RCC_AHB_Clock_Enable_Disable RCC AHB Clock Enable Disable + * @brief Enable or disable the AHB 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; \ + SET_BIT(RCC->AHBENR, RCC_AHBENR_GPIOAEN);\ + /* Delay after an RCC peripheral clock enabling */\ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_GPIOAEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOB_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHBENR, RCC_AHBENR_GPIOBEN);\ + /* Delay after an RCC peripheral clock enabling */\ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_GPIOBEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHBENR, RCC_AHBENR_GPIOCEN);\ + /* Delay after an RCC peripheral clock enabling */\ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_GPIOCEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOF_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHBENR, RCC_AHBENR_GPIOFEN);\ + /* Delay after an RCC peripheral clock enabling */\ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_GPIOFEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_CRC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHBENR, RCC_AHBENR_CRCEN);\ + /* Delay after an RCC peripheral clock enabling */\ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_CRCEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_DMA1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHBENR, RCC_AHBENR_DMA1EN);\ + /* Delay after an RCC peripheral clock enabling */\ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_DMA1EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SRAM_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHBENR, RCC_AHBENR_SRAMEN);\ + /* Delay after an RCC peripheral clock enabling */\ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_SRAMEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_FLITF_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHBENR, RCC_AHBENR_FLITFEN);\ + /* Delay after an RCC peripheral clock enabling */\ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_FLITFEN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_GPIOA_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_GPIOAEN)) +#define __HAL_RCC_GPIOB_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_GPIOBEN)) +#define __HAL_RCC_GPIOC_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_GPIOCEN)) +#define __HAL_RCC_GPIOF_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_GPIOFEN)) +#define __HAL_RCC_CRC_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_CRCEN)) +#define __HAL_RCC_DMA1_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_DMA1EN)) +#define __HAL_RCC_SRAM_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_SRAMEN)) +#define __HAL_RCC_FLITF_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_FLITFEN)) +/** + * @} + */ + +/** @defgroup RCC_AHB_Peripheral_Clock_Enable_Disable_Status AHB Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the AHB 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->AHBENR & (RCC_AHBENR_GPIOAEN)) != RESET) +#define __HAL_RCC_GPIOB_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_GPIOBEN)) != RESET) +#define __HAL_RCC_GPIOC_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_GPIOCEN)) != RESET) +#define __HAL_RCC_GPIOF_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_GPIOFEN)) != RESET) +#define __HAL_RCC_CRC_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_CRCEN)) != RESET) +#define __HAL_RCC_DMA1_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_DMA1EN)) != RESET) +#define __HAL_RCC_SRAM_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_SRAMEN)) != RESET) +#define __HAL_RCC_FLITF_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_FLITFEN)) != RESET) +#define __HAL_RCC_GPIOA_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_GPIOAEN)) == RESET) +#define __HAL_RCC_GPIOB_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_GPIOBEN)) == RESET) +#define __HAL_RCC_GPIOC_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_GPIOCEN)) == RESET) +#define __HAL_RCC_GPIOF_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_GPIOFEN)) == RESET) +#define __HAL_RCC_CRC_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_CRCEN)) == RESET) +#define __HAL_RCC_DMA1_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_DMA1EN)) == RESET) +#define __HAL_RCC_SRAM_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_SRAMEN)) == RESET) +#define __HAL_RCC_FLITF_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_FLITFEN)) == RESET) +/** + * @} + */ + +/** @defgroup RCC_APB1_Clock_Enable_Disable RCC APB1 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_TIM3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + 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_TIM14_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + 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_WWDG_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + 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_I2C1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + 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_PWR_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + 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_TIM3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM3EN)) +#define __HAL_RCC_TIM14_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM14EN)) +#define __HAL_RCC_WWDG_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_WWDGEN)) +#define __HAL_RCC_I2C1_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_I2C1EN)) +#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_TIM3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM3EN)) != RESET) +#define __HAL_RCC_TIM14_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM14EN)) != RESET) +#define __HAL_RCC_WWDG_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_WWDGEN)) != RESET) +#define __HAL_RCC_I2C1_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C1EN)) != RESET) +#define __HAL_RCC_PWR_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_PWREN)) != RESET) +#define __HAL_RCC_TIM3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM3EN)) == RESET) +#define __HAL_RCC_TIM14_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM14EN)) == RESET) +#define __HAL_RCC_WWDG_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_WWDGEN)) == RESET) +#define __HAL_RCC_I2C1_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C1EN)) == RESET) +#define __HAL_RCC_PWR_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_PWREN)) == RESET) +/** + * @} + */ + + +/** @defgroup RCC_APB2_Clock_Enable_Disable RCC APB2 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_SYSCFG_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + 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_ADC1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + 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_TIM1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + 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_SPI1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + 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_TIM16_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM16EN);\ + /* Delay after an RCC peripheral clock enabling */\ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM16EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM17_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM17EN);\ + /* Delay after an RCC peripheral clock enabling */\ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM17EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_USART1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + 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_DBGMCU_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_DBGMCUEN);\ + /* Delay after an RCC peripheral clock enabling */\ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_DBGMCUEN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_SYSCFG_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SYSCFGEN)) +#define __HAL_RCC_ADC1_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_ADC1EN)) +#define __HAL_RCC_TIM1_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM1EN)) +#define __HAL_RCC_SPI1_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SPI1EN)) +#define __HAL_RCC_TIM16_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM16EN)) +#define __HAL_RCC_TIM17_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM17EN)) +#define __HAL_RCC_USART1_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_USART1EN)) +#define __HAL_RCC_DBGMCU_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_DBGMCUEN)) +/** + * @} + */ + +/** @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_SYSCFG_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SYSCFGEN)) != RESET) +#define __HAL_RCC_ADC1_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC1EN)) != RESET) +#define __HAL_RCC_TIM1_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM1EN)) != RESET) +#define __HAL_RCC_SPI1_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI1EN)) != RESET) +#define __HAL_RCC_TIM16_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM16EN)) != RESET) +#define __HAL_RCC_TIM17_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM17EN)) != RESET) +#define __HAL_RCC_USART1_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_USART1EN)) != RESET) +#define __HAL_RCC_DBGMCU_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_DBGMCUEN)) != RESET) +#define __HAL_RCC_SYSCFG_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SYSCFGEN)) == RESET) +#define __HAL_RCC_ADC1_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC1EN)) == RESET) +#define __HAL_RCC_TIM1_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM1EN)) == RESET) +#define __HAL_RCC_SPI1_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI1EN)) == RESET) +#define __HAL_RCC_TIM16_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM16EN)) == RESET) +#define __HAL_RCC_TIM17_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM17EN)) == RESET) +#define __HAL_RCC_USART1_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_USART1EN)) == RESET) +#define __HAL_RCC_DBGMCU_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_DBGMCUEN)) == RESET) +/** + * @} + */ + +/** @defgroup RCC_AHB_Force_Release_Reset RCC AHB Force Release Reset + * @brief Force or release AHB peripheral reset. + * @{ + */ +#define __HAL_RCC_AHB_FORCE_RESET() (RCC->AHBRSTR = 0xFFFFFFFFU) +#define __HAL_RCC_GPIOA_FORCE_RESET() (RCC->AHBRSTR |= (RCC_AHBRSTR_GPIOARST)) +#define __HAL_RCC_GPIOB_FORCE_RESET() (RCC->AHBRSTR |= (RCC_AHBRSTR_GPIOBRST)) +#define __HAL_RCC_GPIOC_FORCE_RESET() (RCC->AHBRSTR |= (RCC_AHBRSTR_GPIOCRST)) +#define __HAL_RCC_GPIOF_FORCE_RESET() (RCC->AHBRSTR |= (RCC_AHBRSTR_GPIOFRST)) + +#define __HAL_RCC_AHB_RELEASE_RESET() (RCC->AHBRSTR = 0x00000000U) +#define __HAL_RCC_GPIOA_RELEASE_RESET() (RCC->AHBRSTR &= ~(RCC_AHBRSTR_GPIOARST)) +#define __HAL_RCC_GPIOB_RELEASE_RESET() (RCC->AHBRSTR &= ~(RCC_AHBRSTR_GPIOBRST)) +#define __HAL_RCC_GPIOC_RELEASE_RESET() (RCC->AHBRSTR &= ~(RCC_AHBRSTR_GPIOCRST)) +#define __HAL_RCC_GPIOF_RELEASE_RESET() (RCC->AHBRSTR &= ~(RCC_AHBRSTR_GPIOFRST)) +/** + * @} + */ + +/** @defgroup RCC_APB1_Force_Release_Reset RCC APB1 Force Release Reset + * @brief Force or release APB1 peripheral reset. + * @{ + */ +#define __HAL_RCC_APB1_FORCE_RESET() (RCC->APB1RSTR = 0xFFFFFFFFU) +#define __HAL_RCC_TIM3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM3RST)) +#define __HAL_RCC_TIM14_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM14RST)) +#define __HAL_RCC_WWDG_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_WWDGRST)) +#define __HAL_RCC_I2C1_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_I2C1RST)) +#define __HAL_RCC_PWR_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_PWRRST)) + +#define __HAL_RCC_APB1_RELEASE_RESET() (RCC->APB1RSTR = 0x00000000U) +#define __HAL_RCC_TIM3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM3RST)) +#define __HAL_RCC_TIM14_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM14RST)) +#define __HAL_RCC_WWDG_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_WWDGRST)) +#define __HAL_RCC_I2C1_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_I2C1RST)) +#define __HAL_RCC_PWR_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_PWRRST)) +/** + * @} + */ + +/** @defgroup RCC_APB2_Force_Release_Reset RCC APB2 Force Release Reset + * @brief Force or release APB2 peripheral reset. + * @{ + */ +#define __HAL_RCC_APB2_FORCE_RESET() (RCC->APB2RSTR = 0xFFFFFFFFU) +#define __HAL_RCC_SYSCFG_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SYSCFGRST)) +#define __HAL_RCC_ADC1_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_ADC1RST)) +#define __HAL_RCC_TIM1_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM1RST)) +#define __HAL_RCC_SPI1_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SPI1RST)) +#define __HAL_RCC_USART1_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_USART1RST)) +#define __HAL_RCC_TIM16_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM16RST)) +#define __HAL_RCC_TIM17_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM17RST)) +#define __HAL_RCC_DBGMCU_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_DBGMCURST)) + +#define __HAL_RCC_APB2_RELEASE_RESET() (RCC->APB2RSTR = 0x00000000U) +#define __HAL_RCC_SYSCFG_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SYSCFGRST)) +#define __HAL_RCC_ADC1_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_ADC1RST)) +#define __HAL_RCC_TIM1_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM1RST)) +#define __HAL_RCC_SPI1_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SPI1RST)) +#define __HAL_RCC_USART1_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_USART1RST)) +#define __HAL_RCC_TIM16_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM16RST)) +#define __HAL_RCC_TIM17_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM17RST)) +#define __HAL_RCC_DBGMCU_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_DBGMCURST)) +/** + * @} + */ +/** @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. + * @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. + * @note When the HSI is stopped, HSIRDY flag goes low after 6 HSI oscillator + * clock cycles. + */ +#define __HAL_RCC_HSI_ENABLE() SET_BIT(RCC->CR, RCC_CR_HSION) +#define __HAL_RCC_HSI_DISABLE() CLEAR_BIT(RCC->CR, RCC_CR_HSION) + +/** @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_BitNumber) + +/** + * @} + */ + +/** @defgroup RCC_LSI_Configuration LSI Configuration + * @{ + */ + +/** @brief Macro to enable 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. + */ +#define __HAL_RCC_LSI_ENABLE() SET_BIT(RCC->CSR, RCC_CSR_LSION) + +/** @brief Macro to disable the Internal Low Speed oscillator (LSI). + * @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_DISABLE() CLEAR_BIT(RCC->CSR, RCC_CSR_LSION) + +/** + * @} + */ + +/** @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 @ref RCC_HSE_OFF turn OFF the HSE oscillator, HSERDY flag goes low after + * 6 HSE oscillator clock cycles. + * @arg @ref RCC_HSE_ON turn ON the HSE oscillator + * @arg @ref 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_OFF) \ + { \ + CLEAR_BIT(RCC->CR, RCC_CR_HSEON); \ + CLEAR_BIT(RCC->CR, RCC_CR_HSEBYP); \ + } \ + 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) + +/** + * @brief Macro to configure the External High Speed oscillator (HSE) Predivision factor for PLL. + * @note Predivision factor can not be changed if PLL is used as system clock + * In this case, you have to select another source of the system clock, disable the PLL and + * then change the HSE predivision factor. + * @param __HSE_PREDIV_VALUE__ specifies the division value applied to HSE. + * This parameter must be a number between RCC_HSE_PREDIV_DIV1 and RCC_HSE_PREDIV_DIV16. + */ +#define __HAL_RCC_HSE_PREDIV_CONFIG(__HSE_PREDIV_VALUE__) \ + MODIFY_REG(RCC->CFGR2, RCC_CFGR2_PREDIV, (uint32_t)(__HSE_PREDIV_VALUE__)) + +/** + * @} + */ + +/** @defgroup RCC_LSE_Configuration LSE Configuration + * @{ + */ + +/** + * @brief Macro to configure the External Low Speed oscillator (LSE). + * @note Transitions LSE Bypass to LSE On and LSE On to LSE Bypass are not supported by this macro. + * @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 + * @ref 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 @ref RCC_LSE_OFF turn OFF the LSE oscillator, LSERDY flag goes low after + * 6 LSE oscillator clock cycles. + * @arg @ref RCC_LSE_ON turn ON the LSE oscillator. + * @arg @ref 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_OFF) \ + { \ + CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEON); \ + CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEBYP); \ + } \ + 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_HSI14_Configuration RCC_HSI14_Configuration + * @{ + */ + +/** @brief Macro to enable the Internal 14Mhz High Speed oscillator (HSI14). + * @note After enabling the HSI14 with @ref __HAL_RCC_HSI14_ENABLE(), the application software + * should wait on HSI14RDY flag to be set indicating that HSI clock is stable and can be + * used as system clock source. This is not necessary if @ref HAL_RCC_OscConfig() is used. + * clock cycles. + */ +#define __HAL_RCC_HSI14_ENABLE() SET_BIT(RCC->CR2, RCC_CR2_HSI14ON) + +/** @brief Macro to disable the Internal 14Mhz High Speed oscillator (HSI14). + * @note The HSI14 is stopped by hardware when entering STOP and STANDBY modes. + * @note HSI14 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 HSI14. + * @note When the HSI14 is stopped, HSI14RDY flag goes low after 6 HSI14 oscillator + * clock cycles. + */ +#define __HAL_RCC_HSI14_DISABLE() CLEAR_BIT(RCC->CR2, RCC_CR2_HSI14ON) + +/** @brief Macro to enable the Internal 14Mhz High Speed oscillator (HSI14) used by ADC. + */ +#define __HAL_RCC_HSI14ADC_ENABLE() CLEAR_BIT(RCC->CR2, RCC_CR2_HSI14DIS) + +/** @brief Macro to disable the Internal 14Mhz High Speed oscillator (HSI14) used by ADC. + */ +#define __HAL_RCC_HSI14ADC_DISABLE() SET_BIT(RCC->CR2, RCC_CR2_HSI14DIS) + +/** @brief Macro to adjust the Internal 14Mhz 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 HSI14 RC. + * @param __HSI14CALIBRATIONVALUE__ specifies the calibration trimming value + * (default is RCC_HSI14CALIBRATION_DEFAULT). + * This parameter must be a number between 0 and 0x1F. + */ +#define __HAL_RCC_HSI14_CALIBRATIONVALUE_ADJUST(__HSI14CALIBRATIONVALUE__) \ + MODIFY_REG(RCC->CR2, RCC_CR2_HSI14TRIM, (uint32_t)(__HSI14CALIBRATIONVALUE__) << RCC_HSI14TRIM_BIT_NUMBER) +/** + * @} + */ + +/** @defgroup RCC_USARTx_Clock_Config RCC USARTx Clock Config + * @{ + */ + +/** @brief Macro to configure the USART1 clock (USART1CLK). + * @param __USART1CLKSOURCE__ specifies the USART1 clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_USART1CLKSOURCE_PCLK1 PCLK1 selected as USART1 clock + * @arg @ref RCC_USART1CLKSOURCE_HSI HSI selected as USART1 clock + * @arg @ref RCC_USART1CLKSOURCE_SYSCLK System Clock selected as USART1 clock + * @arg @ref RCC_USART1CLKSOURCE_LSE LSE selected as USART1 clock + */ +#define __HAL_RCC_USART1_CONFIG(__USART1CLKSOURCE__) \ + MODIFY_REG(RCC->CFGR3, RCC_CFGR3_USART1SW, (uint32_t)(__USART1CLKSOURCE__)) + +/** @brief Macro to get the USART1 clock source. + * @retval The clock source can be one of the following values: + * @arg @ref RCC_USART1CLKSOURCE_PCLK1 PCLK1 selected as USART1 clock + * @arg @ref RCC_USART1CLKSOURCE_HSI HSI selected as USART1 clock + * @arg @ref RCC_USART1CLKSOURCE_SYSCLK System Clock selected as USART1 clock + * @arg @ref RCC_USART1CLKSOURCE_LSE LSE selected as USART1 clock + */ +#define __HAL_RCC_GET_USART1_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR3, RCC_CFGR3_USART1SW))) + +/** + * @} + */ + +/** @defgroup RCC_I2Cx_Clock_Config RCC I2Cx Clock Config + * @{ + */ + +/** @brief Macro to configure the I2C1 clock (I2C1CLK). + * @param __I2C1CLKSOURCE__ specifies the I2C1 clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_I2C1CLKSOURCE_HSI HSI selected as I2C1 clock + * @arg @ref RCC_I2C1CLKSOURCE_SYSCLK System Clock selected as I2C1 clock + */ +#define __HAL_RCC_I2C1_CONFIG(__I2C1CLKSOURCE__) \ + MODIFY_REG(RCC->CFGR3, RCC_CFGR3_I2C1SW, (uint32_t)(__I2C1CLKSOURCE__)) + +/** @brief Macro to get the I2C1 clock source. + * @retval The clock source can be one of the following values: + * @arg @ref RCC_I2C1CLKSOURCE_HSI HSI selected as I2C1 clock + * @arg @ref RCC_I2C1CLKSOURCE_SYSCLK System Clock selected as I2C1 clock + */ +#define __HAL_RCC_GET_I2C1_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR3, RCC_CFGR3_I2C1SW))) +/** + * @} + */ + +/** @defgroup RCC_PLL_Configuration PLL Configuration + * @{ + */ + +/** @brief Macro to enable 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 is disabled by hardware when entering STOP and STANDBY modes. + */ +#define __HAL_RCC_PLL_ENABLE() SET_BIT(RCC->CR, RCC_CR_PLLON) + +/** @brief Macro to disable the main PLL. + * @note The main PLL can not be disabled if it is used as system clock source + */ +#define __HAL_RCC_PLL_DISABLE() CLEAR_BIT(RCC->CR, RCC_CR_PLLON) + +/** @brief Macro to configure the 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 @ref RCC_PLLSOURCE_HSI HSI oscillator clock selected as PLL clock entry + * @arg @ref RCC_PLLSOURCE_HSE HSE oscillator clock selected as PLL clock entry + * @param __PLLMUL__ specifies the multiplication factor for PLL VCO output clock + * This parameter can be one of the following values: + * This parameter must be a number between RCC_PLL_MUL2 and RCC_PLL_MUL16. + * @param __PREDIV__ specifies the predivider factor for PLL VCO input clock + * This parameter must be a number between RCC_PREDIV_DIV1 and RCC_PREDIV_DIV16. + * + */ +#define __HAL_RCC_PLL_CONFIG(__RCC_PLLSOURCE__ , __PREDIV__, __PLLMUL__) \ + do { \ + MODIFY_REG(RCC->CFGR2, RCC_CFGR2_PREDIV, (__PREDIV__)); \ + MODIFY_REG(RCC->CFGR, RCC_CFGR_PLLMUL | RCC_CFGR_PLLSRC, (uint32_t)((__PLLMUL__)|(__RCC_PLLSOURCE__))); \ + } while(0U) + + +/** @brief Get oscillator clock selected as PLL input clock + * @retval The clock source used for PLL entry. The returned value can be one + * of the following: + * @arg @ref RCC_PLLSOURCE_HSE HSE oscillator clock selected as PLL input clock + */ +#define __HAL_RCC_GET_PLL_OSCSOURCE() ((uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PLLSRC))) + +/** + * @} + */ + +/** @defgroup RCC_Get_Clock_source Get Clock source + * @{ + */ + +/** + * @brief Macro to configure the system clock source. + * @param __SYSCLKSOURCE__ specifies the system clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_SYSCLKSOURCE_HSI HSI oscillator is used as system clock source. + * @arg @ref RCC_SYSCLKSOURCE_HSE HSE oscillator is used as system clock source. + * @arg @ref RCC_SYSCLKSOURCE_PLLCLK PLL output is used as system clock source. + */ +#define __HAL_RCC_SYSCLK_CONFIG(__SYSCLKSOURCE__) \ + MODIFY_REG(RCC->CFGR, RCC_CFGR_SW, (__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: + * @arg @ref RCC_SYSCLKSOURCE_STATUS_HSI HSI used as system clock + * @arg @ref RCC_SYSCLKSOURCE_STATUS_HSE HSE used as system clock + * @arg @ref RCC_SYSCLKSOURCE_STATUS_PLLCLK PLL used as system clock + */ +#define __HAL_RCC_GET_SYSCLK_SOURCE() ((uint32_t)(RCC->CFGR & RCC_CFGR_SWS)) + +/** + * @} + */ + +/** @defgroup RCCEx_MCOx_Clock_Config RCC Extended MCOx Clock Config + * @{ + */ + +#if defined(RCC_CFGR_MCOPRE) +/** @brief Macro to configure the MCO clock. + * @param __MCOCLKSOURCE__ specifies the MCO clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_MCO1SOURCE_NOCLOCK No clock selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_SYSCLK System Clock selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_HSI HSI oscillator clock selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_HSE HSE selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_LSI LSI selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_LSE LSE selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_HSI14 HSI14 selected as MCO clock + @if STM32F042x6 + * @arg @ref RCC_MCO1SOURCE_HSI48 HSI48 selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_PLLCLK PLLCLK selected as MCO clock + @elseif STM32F048xx + * @arg @ref RCC_MCO1SOURCE_HSI48 HSI48 selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_PLLCLK PLLCLK selected as MCO clock + @elseif STM32F071xB + * @arg @ref RCC_MCO1SOURCE_HSI48 HSI48 selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_PLLCLK PLLCLK selected as MCO clock + @elseif STM32F072xB + * @arg @ref RCC_MCO1SOURCE_HSI48 HSI48 selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_PLLCLK PLLCLK selected as MCO clock + @elseif STM32F078xx + * @arg @ref RCC_MCO1SOURCE_HSI48 HSI48 selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_PLLCLK PLLCLK selected as MCO clock + @elseif STM32F091xC + * @arg @ref RCC_MCO1SOURCE_HSI48 HSI48 selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_PLLCLK PLLCLK selected as MCO clock + @elseif STM32F098xx + * @arg @ref RCC_MCO1SOURCE_HSI48 HSI48 selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_PLLCLK PLLCLK selected as MCO clock + @elseif STM32F030x6 + * @arg @ref RCC_MCO1SOURCE_PLLCLK PLLCLK selected as MCO clock + @elseif STM32F030xC + * @arg @ref RCC_MCO1SOURCE_PLLCLK PLLCLK selected as MCO clock + @elseif STM32F031x6 + * @arg @ref RCC_MCO1SOURCE_PLLCLK PLLCLK selected as MCO clock + @elseif STM32F038xx + * @arg @ref RCC_MCO1SOURCE_PLLCLK PLLCLK selected as MCO clock + @elseif STM32F070x6 + * @arg @ref RCC_MCO1SOURCE_PLLCLK PLLCLK selected as MCO clock + @elseif STM32F070xB + * @arg @ref RCC_MCO1SOURCE_PLLCLK PLLCLK selected as MCO clock + @endif + * @arg @ref RCC_MCO1SOURCE_PLLCLK_DIV2 PLLCLK Divided by 2 selected as MCO clock + * @param __MCODIV__ specifies the MCO clock prescaler. + * This parameter can be one of the following values: + * @arg @ref RCC_MCODIV_1 MCO clock source is divided by 1 + * @arg @ref RCC_MCODIV_2 MCO clock source is divided by 2 + * @arg @ref RCC_MCODIV_4 MCO clock source is divided by 4 + * @arg @ref RCC_MCODIV_8 MCO clock source is divided by 8 + * @arg @ref RCC_MCODIV_16 MCO clock source is divided by 16 + * @arg @ref RCC_MCODIV_32 MCO clock source is divided by 32 + * @arg @ref RCC_MCODIV_64 MCO clock source is divided by 64 + * @arg @ref RCC_MCODIV_128 MCO clock source is divided by 128 + */ +#else +/** @brief Macro to configure the MCO clock. + * @param __MCOCLKSOURCE__ specifies the MCO clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_MCO1SOURCE_NOCLOCK No clock selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_SYSCLK System Clock selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_HSI HSI selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_HSE HSE selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_LSI LSI selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_LSE LSE selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_HSI14 HSI14 selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_PLLCLK_DIV2 PLLCLK Divided by 2 selected as MCO clock + * @param __MCODIV__ specifies the MCO clock prescaler. + * This parameter can be one of the following values: + * @arg @ref RCC_MCODIV_1 No division applied on MCO clock source + */ +#endif +#if defined(RCC_CFGR_MCOPRE) +#define __HAL_RCC_MCO1_CONFIG(__MCOCLKSOURCE__, __MCODIV__) \ + MODIFY_REG(RCC->CFGR, (RCC_CFGR_MCO | RCC_CFGR_MCOPRE), ((__MCOCLKSOURCE__) | (__MCODIV__))) +#else + +#define __HAL_RCC_MCO1_CONFIG(__MCOCLKSOURCE__, __MCODIV__) \ + MODIFY_REG(RCC->CFGR, RCC_CFGR_MCO, (__MCOCLKSOURCE__)) + +#endif + +/** + * @} + */ + + /** @defgroup RCC_RTC_Clock_Configuration RCC RTC Clock Configuration + * @{ + */ + +/** @brief Macro 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 cannot be changed unless the + * Backup domain is reset using @ref __HAL_RCC_BACKUPRESET_FORCE() macro, or by + * a Power On Reset (POR). + * + * @param __RTC_CLKSOURCE__ 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_DIV32 HSE clock divided by 32 + * @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 wakeup source. + * However, when the LSI clock and HSE clock divided by 32 is used as RTC clock source, + * the RTC cannot be used in STOP and STANDBY modes. + * @note The system must always be configured so as to get a PCLK frequency greater than or + * equal to the RTCCLK frequency for a proper operation of the RTC. + */ +#define __HAL_RCC_RTC_CONFIG(__RTC_CLKSOURCE__) MODIFY_REG(RCC->BDCR, RCC_BDCR_RTCSEL, (__RTC_CLKSOURCE__)) + +/** @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_DIV32 HSE clock divided by 32 + */ +#define __HAL_RCC_GET_RTC_SOURCE() (READ_BIT(RCC->BDCR, RCC_BDCR_RTCSEL)) + +/** @brief Macro to enable the the RTC clock. + * @note These macros must be used only after the RTC clock source was selected. + */ +#define __HAL_RCC_RTC_ENABLE() SET_BIT(RCC->BDCR, RCC_BDCR_RTCEN) + +/** @brief Macro to disable the the RTC clock. + * @note These macros must be used only after the RTC clock source was selected. + */ +#define __HAL_RCC_RTC_DISABLE() CLEAR_BIT(RCC->BDCR, RCC_BDCR_RTCEN) + +/** @brief Macro to force the Backup domain reset. + * @note This function resets the RTC peripheral (including the backup registers) + * and the RTC clock source selection in RCC_BDCR register. + */ +#define __HAL_RCC_BACKUPRESET_FORCE() SET_BIT(RCC->BDCR, RCC_BDCR_BDRST) + +/** @brief Macros to release the Backup domain reset. + */ +#define __HAL_RCC_BACKUPRESET_RELEASE() CLEAR_BIT(RCC->BDCR, RCC_BDCR_BDRST) + +/** + * @} + */ + +/** @defgroup RCC_Flags_Interrupts_Management Flags Interrupts Management + * @brief macros to manage the specified RCC Flags and interrupts. + * @{ + */ + +/** @brief Enable RCC interrupt. + * @param __INTERRUPT__ specifies the RCC interrupt sources to be enabled. + * This parameter can be any combination of the following values: + * @arg @ref RCC_IT_LSIRDY LSI ready interrupt + * @arg @ref RCC_IT_LSERDY LSE ready interrupt + * @arg @ref RCC_IT_HSIRDY HSI ready interrupt + * @arg @ref RCC_IT_HSERDY HSE ready interrupt + * @arg @ref RCC_IT_PLLRDY main PLL ready interrupt + * @arg @ref RCC_IT_HSI14RDY HSI14 ready interrupt + @if STM32F042x6 + * @arg @ref RCC_IT_HSI48RDY HSI48 ready interrupt + @elseif STM32F048xx + * @arg @ref RCC_IT_HSI48RDY HSI48 ready interrupt + @elseif STM32F071xB + * @arg @ref RCC_IT_HSI48RDY HSI48 ready interrupt + @elseif STM32F072xB + * @arg @ref RCC_IT_HSI48RDY HSI48 ready interrupt + @elseif STM32F078xx + * @arg @ref RCC_IT_HSI48RDY HSI48 ready interrupt + @elseif STM32F091xC + * @arg @ref RCC_IT_HSI48RDY HSI48 ready interrupt + @elseif STM32F098xx + * @arg @ref RCC_IT_HSI48RDY HSI48 ready interrupt + @endif + */ +#define __HAL_RCC_ENABLE_IT(__INTERRUPT__) (*(__IO uint8_t *) RCC_CIR_BYTE1_ADDRESS |= (__INTERRUPT__)) + +/** @brief Disable RCC interrupt. + * @param __INTERRUPT__ specifies the RCC interrupt sources to be disabled. + * This parameter can be any combination of the following values: + * @arg @ref RCC_IT_LSIRDY LSI ready interrupt + * @arg @ref RCC_IT_LSERDY LSE ready interrupt + * @arg @ref RCC_IT_HSIRDY HSI ready interrupt + * @arg @ref RCC_IT_HSERDY HSE ready interrupt + * @arg @ref RCC_IT_PLLRDY main PLL ready interrupt + * @arg @ref RCC_IT_HSI14RDY HSI14 ready interrupt + @if STM32F042x6 + * @arg @ref RCC_IT_HSI48RDY HSI48 ready interrupt + @elseif STM32F048xx + * @arg @ref RCC_IT_HSI48RDY HSI48 ready interrupt + @elseif STM32F071xB + * @arg @ref RCC_IT_HSI48RDY HSI48 ready interrupt + @elseif STM32F072xB + * @arg @ref RCC_IT_HSI48RDY HSI48 ready interrupt + @elseif STM32F078xx + * @arg @ref RCC_IT_HSI48RDY HSI48 ready interrupt + @elseif STM32F091xC + * @arg @ref RCC_IT_HSI48RDY HSI48 ready interrupt + @elseif STM32F098xx + * @arg @ref RCC_IT_HSI48RDY HSI48 ready interrupt + @endif + */ +#define __HAL_RCC_DISABLE_IT(__INTERRUPT__) (*(__IO uint8_t *) RCC_CIR_BYTE1_ADDRESS &= (uint8_t)(~(__INTERRUPT__))) + +/** @brief Clear the RCC's interrupt pending bits. + * @param __INTERRUPT__ specifies the interrupt pending bit to clear. + * This parameter can be any combination of the following values: + * @arg @ref RCC_IT_LSIRDY LSI ready interrupt. + * @arg @ref RCC_IT_LSERDY LSE ready interrupt. + * @arg @ref RCC_IT_HSIRDY HSI ready interrupt. + * @arg @ref RCC_IT_HSERDY HSE ready interrupt. + * @arg @ref RCC_IT_PLLRDY Main PLL ready interrupt. + * @arg @ref RCC_IT_CSS Clock Security System interrupt + * @arg @ref RCC_IT_HSI14RDY HSI14 ready interrupt + @if STM32F042x6 + * @arg @ref RCC_IT_HSI48RDY HSI48 ready interrupt + @elseif STM32F048xx + * @arg @ref RCC_IT_HSI48RDY HSI48 ready interrupt + @elseif STM32F071xB + * @arg @ref RCC_IT_HSI48RDY HSI48 ready interrupt + @elseif STM32F072xB + * @arg @ref RCC_IT_HSI48RDY HSI48 ready interrupt + @elseif STM32F078xx + * @arg @ref RCC_IT_HSI48RDY HSI48 ready interrupt + @elseif STM32F091xC + * @arg @ref RCC_IT_HSI48RDY HSI48 ready interrupt + @elseif STM32F098xx + * @arg @ref RCC_IT_HSI48RDY HSI48 ready interrupt + @endif + */ +#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 @ref RCC_IT_LSIRDY LSI ready interrupt. + * @arg @ref RCC_IT_LSERDY LSE ready interrupt. + * @arg @ref RCC_IT_HSIRDY HSI ready interrupt. + * @arg @ref RCC_IT_HSERDY HSE ready interrupt. + * @arg @ref RCC_IT_PLLRDY Main PLL ready interrupt. + * @arg @ref RCC_IT_CSS Clock Security System interrupt + * @arg @ref RCC_IT_HSI14RDY HSI14 ready interrupt enable + @if STM32F042x6 + * @arg @ref RCC_IT_HSI48RDY HSI48 ready interrupt + @elseif STM32F048xx + * @arg @ref RCC_IT_HSI48RDY HSI48 ready interrupt + @elseif STM32F071xB + * @arg @ref RCC_IT_HSI48RDY HSI48 ready interrupt + @elseif STM32F072xB + * @arg @ref RCC_IT_HSI48RDY HSI48 ready interrupt + @elseif STM32F078xx + * @arg @ref RCC_IT_HSI48RDY HSI48 ready interrupt + @elseif STM32F091xC + * @arg @ref RCC_IT_HSI48RDY HSI48 ready interrupt + @elseif STM32F098xx + * @arg @ref RCC_IT_HSI48RDY HSI48 ready interrupt + @endif + * @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. + * The reset flags are RCC_FLAG_PINRST, RCC_FLAG_PORRST, RCC_FLAG_SFTRST, + * RCC_FLAG_OBLRST, RCC_FLAG_IWDGRST, RCC_FLAG_WWDGRST, 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 @ref RCC_FLAG_HSIRDY HSI oscillator clock ready. + * @arg @ref RCC_FLAG_HSERDY HSE oscillator clock ready. + * @arg @ref RCC_FLAG_PLLRDY Main PLL clock ready. + * @arg @ref RCC_FLAG_HSI14RDY HSI14 oscillator clock ready + @if STM32F038xx + * @arg @ref RCC_FLAG_V18PWRRST Reset flag of the 1.8 V domain + @elseif STM32F042x6 + * @arg @ref RCC_FLAG_HSI48RDY HSI48 oscillator clock ready + @elseif STM32F048xx + * @arg @ref RCC_FLAG_HSI48RDY HSI48 oscillator clock ready + * @arg @ref RCC_FLAG_V18PWRRST Reset flag of the 1.8 V domain + @elseif STM32F058xx + * @arg @ref RCC_FLAG_V18PWRRST Reset flag of the 1.8 V domain + @elseif STM32F071xB + * @arg @ref RCC_FLAG_HSI48RDY HSI48 oscillator clock ready + @elseif STM32F072xB + * @arg @ref RCC_FLAG_HSI48RDY HSI48 oscillator clock ready + @elseif STM32F078xx + * @arg @ref RCC_FLAG_HSI48RDY HSI48 oscillator clock ready + * @arg @ref RCC_FLAG_V18PWRRST Reset flag of the 1.8 V domain + @elseif STM32F091xC + * @arg @ref RCC_FLAG_HSI48RDY HSI48 oscillator clock ready + @elseif STM32F098xx + * @arg @ref RCC_FLAG_HSI48RDY HSI48 oscillator clock ready + * @arg @ref RCC_FLAG_V18PWRRST Reset flag of the 1.8 V domain + @endif + * @arg @ref RCC_FLAG_LSERDY LSE oscillator clock ready. + * @arg @ref RCC_FLAG_LSIRDY LSI oscillator clock ready. + * @arg @ref RCC_FLAG_OBLRST Option Byte Load reset + * @arg @ref RCC_FLAG_PINRST Pin reset. + * @arg @ref RCC_FLAG_PORRST POR/PDR reset. + * @arg @ref RCC_FLAG_SFTRST Software reset. + * @arg @ref RCC_FLAG_IWDGRST Independent Watchdog reset. + * @arg @ref RCC_FLAG_WWDGRST Window Watchdog reset. + * @arg @ref RCC_FLAG_LPWRRST Low Power reset. + * @retval The new state of __FLAG__ (TRUE or FALSE). + */ +#define __HAL_RCC_GET_FLAG(__FLAG__) (((((__FLAG__) >> 5U) == CR_REG_INDEX)? RCC->CR : \ + (((__FLAG__) >> 5U) == CR2_REG_INDEX)? RCC->CR2 : \ + (((__FLAG__) >> 5U) == BDCR_REG_INDEX) ? RCC->BDCR : \ + RCC->CSR) & (1U << ((__FLAG__) & RCC_FLAG_MASK))) + +/** + * @} + */ + +/** + * @} + */ + +/* Include RCC HAL Extension module */ +#include "stm32f0xx_hal_rcc_ex.h" + +/* 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); +/* CSS NMI IRQ handler */ +void HAL_RCC_NMI_IRQHandler(void); +/* User Callbacks in non blocking mode (IT mode) */ +void HAL_RCC_CSSCallback(void); +void HAL_RCC_DisableCSS(void); +uint32_t HAL_RCC_GetSysClockFreq(void); +uint32_t HAL_RCC_GetHCLKFreq(void); +uint32_t HAL_RCC_GetPCLK1Freq(void); +void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct); +void HAL_RCC_GetClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t *pFLatency); + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F0xx_HAL_RCC_H */ + + diff --git a/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h new file mode 100644 index 0000000..a7d75f6 --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h @@ -0,0 +1,2082 @@ +/** + ****************************************************************************** + * @file stm32f0xx_hal_rcc_ex.h + * @author MCD Application Team + * @brief Header file of RCC HAL Extension 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 __STM32F0xx_HAL_RCC_EX_H +#define __STM32F0xx_HAL_RCC_EX_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f0xx_hal_def.h" + +/** @addtogroup STM32F0xx_HAL_Driver + * @{ + */ + +/** @addtogroup RCC + * @{ + */ + +/** @addtogroup RCC_Private_Macros + * @{ + */ +#if defined(RCC_HSI48_SUPPORT) +#define IS_RCC_OSCILLATORTYPE(OSCILLATOR) (((OSCILLATOR) == RCC_OSCILLATORTYPE_NONE) || \ + (((OSCILLATOR) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE) || \ + (((OSCILLATOR) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI) || \ + (((OSCILLATOR) & RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI) || \ + (((OSCILLATOR) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE) || \ + (((OSCILLATOR) & RCC_OSCILLATORTYPE_HSI14) == RCC_OSCILLATORTYPE_HSI14) || \ + (((OSCILLATOR) & RCC_OSCILLATORTYPE_HSI48) == RCC_OSCILLATORTYPE_HSI48)) + +#define IS_RCC_SYSCLKSOURCE(SOURCE) (((SOURCE) == RCC_SYSCLKSOURCE_HSI) || \ + ((SOURCE) == RCC_SYSCLKSOURCE_HSE) || \ + ((SOURCE) == RCC_SYSCLKSOURCE_PLLCLK) || \ + ((SOURCE) == RCC_SYSCLKSOURCE_HSI48)) + +#define IS_RCC_SYSCLKSOURCE_STATUS(SOURCE) (((SOURCE) == RCC_SYSCLKSOURCE_STATUS_HSI) || \ + ((SOURCE) == RCC_SYSCLKSOURCE_STATUS_HSE) || \ + ((SOURCE) == RCC_SYSCLKSOURCE_STATUS_PLLCLK) || \ + ((SOURCE) == RCC_SYSCLKSOURCE_STATUS_HSI48)) + +#define IS_RCC_PLLSOURCE(SOURCE) (((SOURCE) == RCC_PLLSOURCE_HSI) || \ + ((SOURCE) == RCC_PLLSOURCE_HSI48) || \ + ((SOURCE) == RCC_PLLSOURCE_HSE)) + +#define IS_RCC_HSI48(HSI48) (((HSI48) == RCC_HSI48_OFF) || ((HSI48) == RCC_HSI48_ON)) + +#else + +#define IS_RCC_OSCILLATORTYPE(OSCILLATOR) (((OSCILLATOR) == RCC_OSCILLATORTYPE_NONE) || \ + (((OSCILLATOR) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE) || \ + (((OSCILLATOR) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI) || \ + (((OSCILLATOR) & RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI) || \ + (((OSCILLATOR) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE) || \ + (((OSCILLATOR) & RCC_OSCILLATORTYPE_HSI14) == RCC_OSCILLATORTYPE_HSI14)) +#define IS_RCC_SYSCLKSOURCE(SOURCE) (((SOURCE) == RCC_SYSCLKSOURCE_HSI) || \ + ((SOURCE) == RCC_SYSCLKSOURCE_HSE) || \ + ((SOURCE) == RCC_SYSCLKSOURCE_PLLCLK)) + +#define IS_RCC_SYSCLKSOURCE_STATUS(SOURCE) (((SOURCE) == RCC_SYSCLKSOURCE_STATUS_HSI) || \ + ((SOURCE) == RCC_SYSCLKSOURCE_STATUS_HSE) || \ + ((SOURCE) == RCC_SYSCLKSOURCE_STATUS_PLLCLK)) +#define IS_RCC_PLLSOURCE(SOURCE) (((SOURCE) == RCC_PLLSOURCE_HSI) || \ + ((SOURCE) == RCC_PLLSOURCE_HSE)) + +#endif /* RCC_HSI48_SUPPORT */ + +#if defined(RCC_CFGR_PLLNODIV) && !defined(RCC_CFGR_MCO_HSI48) + +#define IS_RCC_MCO1SOURCE(SOURCE) (((SOURCE) == RCC_MCO1SOURCE_NOCLOCK) || \ + ((SOURCE) == RCC_MCO1SOURCE_LSI) || \ + ((SOURCE) == RCC_MCO1SOURCE_LSE) || \ + ((SOURCE) == RCC_MCO1SOURCE_SYSCLK) || \ + ((SOURCE) == RCC_MCO1SOURCE_HSI) || \ + ((SOURCE) == RCC_MCO1SOURCE_HSE) || \ + ((SOURCE) == RCC_MCO1SOURCE_PLLCLK) || \ + ((SOURCE) == RCC_MCO1SOURCE_PLLCLK_DIV2) || \ + ((SOURCE) == RCC_MCO1SOURCE_HSI14)) + +#elif defined(RCC_CFGR_PLLNODIV) && defined(RCC_CFGR_MCO_HSI48) + +#define IS_RCC_MCO1SOURCE(SOURCE) (((SOURCE) == RCC_MCO1SOURCE_NOCLOCK) || \ + ((SOURCE) == RCC_MCO1SOURCE_LSI) || \ + ((SOURCE) == RCC_MCO1SOURCE_LSE) || \ + ((SOURCE) == RCC_MCO1SOURCE_SYSCLK) || \ + ((SOURCE) == RCC_MCO1SOURCE_HSI) || \ + ((SOURCE) == RCC_MCO1SOURCE_HSE) || \ + ((SOURCE) == RCC_MCO1SOURCE_PLLCLK) || \ + ((SOURCE) == RCC_MCO1SOURCE_PLLCLK_DIV2) || \ + ((SOURCE) == RCC_MCO1SOURCE_HSI14) || \ + ((SOURCE) == RCC_MCO1SOURCE_HSI48)) + +#elif !defined(RCC_CFGR_PLLNODIV) && !defined(RCC_CFGR_MCO_HSI48) + +#define IS_RCC_MCO1SOURCE(SOURCE) (((SOURCE) == RCC_MCO1SOURCE_NOCLOCK) || \ + ((SOURCE) == RCC_MCO1SOURCE_LSI) || \ + ((SOURCE) == RCC_MCO1SOURCE_LSE) || \ + ((SOURCE) == RCC_MCO1SOURCE_SYSCLK) || \ + ((SOURCE) == RCC_MCO1SOURCE_HSI) || \ + ((SOURCE) == RCC_MCO1SOURCE_HSE) || \ + ((SOURCE) == RCC_MCO1SOURCE_PLLCLK_DIV2) || \ + ((SOURCE) == RCC_MCO1SOURCE_HSI14)) + +#endif /* RCC_CFGR_PLLNODIV && !RCC_CFGR_MCO_HSI48 */ + +/** + * @} + */ + +/** @addtogroup RCC_Exported_Constants + * @{ + */ +#if defined(RCC_HSI48_SUPPORT) + +/** @addtogroup RCC_PLL_Clock_Source + * @{ + */ +#define RCC_PLLSOURCE_HSI RCC_CFGR_PLLSRC_HSI_PREDIV +#define RCC_PLLSOURCE_HSI48 RCC_CFGR_PLLSRC_HSI48_PREDIV + +/** + * @} + */ + +/** @addtogroup RCC_Interrupt + * @{ + */ +#define RCC_IT_HSI48 RCC_CIR_HSI48RDYF /*!< HSI48 Ready Interrupt flag */ +/** + * @} + */ + +/** @addtogroup RCC_Flag + * @{ + */ +#define RCC_FLAG_HSI48RDY ((uint8_t)((CR2_REG_INDEX << 5U) | RCC_CR2_HSI48RDY_BitNumber)) +/** + * @} + */ + +/** @addtogroup RCC_System_Clock_Source + * @{ + */ +#define RCC_SYSCLKSOURCE_HSI48 RCC_CFGR_SW_HSI48 +/** + * @} + */ + +/** @addtogroup RCC_System_Clock_Source_Status + * @{ + */ +#define RCC_SYSCLKSOURCE_STATUS_HSI48 RCC_CFGR_SWS_HSI48 +/** + * @} + */ + +#else +/** @addtogroup RCC_PLL_Clock_Source + * @{ + */ + +#if defined(STM32F070xB) || defined(STM32F070x6) || defined(STM32F030xC) +#define RCC_PLLSOURCE_HSI RCC_CFGR_PLLSRC_HSI_PREDIV +#else +#define RCC_PLLSOURCE_HSI RCC_CFGR_PLLSRC_HSI_DIV2 +#endif + +/** + * @} + */ + +#endif /* RCC_HSI48_SUPPORT */ + +/** @addtogroup RCC_MCO_Clock_Source + * @{ + */ + +#if defined(RCC_CFGR_PLLNODIV) + +#define RCC_MCO1SOURCE_PLLCLK (RCC_CFGR_MCO_PLL | RCC_CFGR_PLLNODIV) + +#endif /* RCC_CFGR_PLLNODIV */ + +#if defined(RCC_CFGR_MCO_HSI48) + +#define RCC_MCO1SOURCE_HSI48 RCC_CFGR_MCO_HSI48 + +#endif /* SRCC_CFGR_MCO_HSI48 */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** @addtogroup RCCEx + * @{ + */ + +/* Private Constants -------------------------------------------------------------*/ +#if defined(CRS) +/** @addtogroup RCCEx_Private_Constants + * @{ + */ + +/* CRS IT Error Mask */ +#define RCC_CRS_IT_ERROR_MASK ((uint32_t)(RCC_CRS_IT_TRIMOVF | RCC_CRS_IT_SYNCERR | RCC_CRS_IT_SYNCMISS)) + +/* CRS Flag Error Mask */ +#define RCC_CRS_FLAG_ERROR_MASK ((uint32_t)(RCC_CRS_FLAG_TRIMOVF | RCC_CRS_FLAG_SYNCERR | RCC_CRS_FLAG_SYNCMISS)) + +/** + * @} + */ +#endif /* CRS */ + +/* Private macro -------------------------------------------------------------*/ +/** @defgroup RCCEx_Private_Macros RCCEx Private Macros + * @{ + */ +#if defined(STM32F030x6) || defined(STM32F030x8) || defined(STM32F031x6) || defined(STM32F038xx)\ + || defined(STM32F030xC) + +#define IS_RCC_PERIPHCLOCK(SELECTION) ((SELECTION) <= (RCC_PERIPHCLK_USART1 | RCC_PERIPHCLK_I2C1 | \ + RCC_PERIPHCLK_RTC)) +#endif /* STM32F030x6 || STM32F030x8 || STM32F031x6 || STM32F038xx || + STM32F030xC */ + +#if defined(STM32F070x6) || defined(STM32F070xB) + +#define IS_RCC_PERIPHCLOCK(SELECTION) ((SELECTION) <= (RCC_PERIPHCLK_USART1 | RCC_PERIPHCLK_I2C1 | \ + RCC_PERIPHCLK_RTC | RCC_PERIPHCLK_USB)) +#endif /* STM32F070x6 || STM32F070xB */ + +#if defined(STM32F042x6) || defined(STM32F048xx) + +#define IS_RCC_PERIPHCLOCK(SELECTION) ((SELECTION) <= (RCC_PERIPHCLK_USART1 | RCC_PERIPHCLK_I2C1 | \ + RCC_PERIPHCLK_CEC | RCC_PERIPHCLK_RTC | \ + RCC_PERIPHCLK_USB)) +#endif /* STM32F042x6 || STM32F048xx */ + +#if defined(STM32F051x8) || defined(STM32F058xx) + +#define IS_RCC_PERIPHCLOCK(SELECTION) ((SELECTION) <= (RCC_PERIPHCLK_USART1 | RCC_PERIPHCLK_I2C1 | \ + RCC_PERIPHCLK_CEC | RCC_PERIPHCLK_RTC)) +#endif /* STM32F051x8 || STM32F058xx */ + +#if defined(STM32F071xB) + +#define IS_RCC_PERIPHCLOCK(SELECTION) ((SELECTION) <= (RCC_PERIPHCLK_USART1 | RCC_PERIPHCLK_USART2 | \ + RCC_PERIPHCLK_I2C1 | RCC_PERIPHCLK_CEC | \ + RCC_PERIPHCLK_RTC)) +#endif /* STM32F071xB */ + +#if defined(STM32F072xB) || defined(STM32F078xx) + +#define IS_RCC_PERIPHCLOCK(SELECTION) ((SELECTION) <= (RCC_PERIPHCLK_USART1 | RCC_PERIPHCLK_USART2 | \ + RCC_PERIPHCLK_I2C1 | RCC_PERIPHCLK_CEC | \ + RCC_PERIPHCLK_RTC | RCC_PERIPHCLK_USB)) +#endif /* STM32F072xB || STM32F078xx */ + +#if defined(STM32F091xC) || defined(STM32F098xx) + +#define IS_RCC_PERIPHCLOCK(SELECTION) ((SELECTION) <= (RCC_PERIPHCLK_USART1 | RCC_PERIPHCLK_USART2 | \ + RCC_PERIPHCLK_I2C1 | RCC_PERIPHCLK_CEC | \ + RCC_PERIPHCLK_RTC | RCC_PERIPHCLK_USART3 )) +#endif /* STM32F091xC || STM32F098xx */ + +#if defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F072xB) || defined(STM32F078xx) + +#define IS_RCC_USBCLKSOURCE(SOURCE) (((SOURCE) == RCC_USBCLKSOURCE_HSI48) || \ + ((SOURCE) == RCC_USBCLKSOURCE_PLL)) + +#endif /* STM32F042x6 || STM32F048xx || STM32F072xB || STM32F078xx */ + +#if defined(STM32F070x6) || defined(STM32F070xB) + +#define IS_RCC_USBCLKSOURCE(SOURCE) (((SOURCE) == RCC_USBCLKSOURCE_NONE) || \ + ((SOURCE) == RCC_USBCLKSOURCE_PLL)) + +#endif /* STM32F070x6 || STM32F070xB */ + +#if defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx)\ + || defined(STM32F091xC) || defined(STM32F098xx) + +#define IS_RCC_USART2CLKSOURCE(SOURCE) (((SOURCE) == RCC_USART2CLKSOURCE_PCLK1) || \ + ((SOURCE) == RCC_USART2CLKSOURCE_SYSCLK) || \ + ((SOURCE) == RCC_USART2CLKSOURCE_LSE) || \ + ((SOURCE) == RCC_USART2CLKSOURCE_HSI)) + +#endif /* STM32F071xB || STM32F072xB || STM32F078xx || */ + /* STM32F091xC || STM32F098xx */ + +#if defined(STM32F091xC) || defined(STM32F098xx) + +#define IS_RCC_USART3CLKSOURCE(SOURCE) (((SOURCE) == RCC_USART3CLKSOURCE_PCLK1) || \ + ((SOURCE) == RCC_USART3CLKSOURCE_SYSCLK) || \ + ((SOURCE) == RCC_USART3CLKSOURCE_LSE) || \ + ((SOURCE) == RCC_USART3CLKSOURCE_HSI)) +#endif /* STM32F091xC || STM32F098xx */ + + +#if defined(STM32F042x6) || defined(STM32F048xx)\ + || defined(STM32F051x8) || defined(STM32F058xx)\ + || defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx)\ + || defined(STM32F091xC) || defined(STM32F098xx) + +#define IS_RCC_CECCLKSOURCE(SOURCE) (((SOURCE) == RCC_CECCLKSOURCE_HSI) || \ + ((SOURCE) == RCC_CECCLKSOURCE_LSE)) +#endif /* STM32F042x6 || STM32F048xx || */ + /* STM32F051x8 || STM32F058xx || */ + /* STM32F071xB || STM32F072xB || STM32F078xx || */ + /* STM32F091xC || STM32F098xx */ + +#if defined(RCC_CFGR_MCOPRE) + +#define IS_RCC_MCODIV(DIV) (((DIV) == RCC_MCODIV_1) || ((DIV) == RCC_MCODIV_2) || \ + ((DIV) == RCC_MCODIV_4) || ((DIV) == RCC_MCODIV_8) || \ + ((DIV) == RCC_MCODIV_16) || ((DIV) == RCC_MCODIV_32) || \ + ((DIV) == RCC_MCODIV_64) || ((DIV) == RCC_MCODIV_128)) +#else + +#define IS_RCC_MCODIV(DIV) (((DIV) == RCC_MCODIV_1)) + +#endif /* RCC_CFGR_MCOPRE */ + +#define IS_RCC_LSE_DRIVE(__DRIVE__) (((__DRIVE__) == RCC_LSEDRIVE_LOW) || \ + ((__DRIVE__) == RCC_LSEDRIVE_MEDIUMLOW) || \ + ((__DRIVE__) == RCC_LSEDRIVE_MEDIUMHIGH) || \ + ((__DRIVE__) == RCC_LSEDRIVE_HIGH)) + +#if defined(CRS) + +#define IS_RCC_CRS_SYNC_SOURCE(_SOURCE_) (((_SOURCE_) == RCC_CRS_SYNC_SOURCE_GPIO) || \ + ((_SOURCE_) == RCC_CRS_SYNC_SOURCE_LSE) || \ + ((_SOURCE_) == RCC_CRS_SYNC_SOURCE_USB)) +#define IS_RCC_CRS_SYNC_DIV(_DIV_) (((_DIV_) == RCC_CRS_SYNC_DIV1) || ((_DIV_) == RCC_CRS_SYNC_DIV2) || \ + ((_DIV_) == RCC_CRS_SYNC_DIV4) || ((_DIV_) == RCC_CRS_SYNC_DIV8) || \ + ((_DIV_) == RCC_CRS_SYNC_DIV16) || ((_DIV_) == RCC_CRS_SYNC_DIV32) || \ + ((_DIV_) == RCC_CRS_SYNC_DIV64) || ((_DIV_) == RCC_CRS_SYNC_DIV128)) +#define IS_RCC_CRS_SYNC_POLARITY(_POLARITY_) (((_POLARITY_) == RCC_CRS_SYNC_POLARITY_RISING) || \ + ((_POLARITY_) == RCC_CRS_SYNC_POLARITY_FALLING)) +#define IS_RCC_CRS_RELOADVALUE(_VALUE_) (((_VALUE_) <= 0xFFFFU)) +#define IS_RCC_CRS_ERRORLIMIT(_VALUE_) (((_VALUE_) <= 0xFFU)) +#define IS_RCC_CRS_HSI48CALIBRATION(_VALUE_) (((_VALUE_) <= 0x3FU)) +#define IS_RCC_CRS_FREQERRORDIR(_DIR_) (((_DIR_) == RCC_CRS_FREQERRORDIR_UP) || \ + ((_DIR_) == RCC_CRS_FREQERRORDIR_DOWN)) +#endif /* CRS */ +/** + * @} + */ + +/* Exported types ------------------------------------------------------------*/ + +/** @defgroup RCCEx_Exported_Types RCCEx Exported Types + * @{ + */ + +/** + * @brief RCC extended clocks structure definition + */ +#if defined(STM32F030x6) || defined(STM32F030x8) || defined(STM32F031x6) || defined(STM32F038xx)\ + || defined(STM32F030xC) +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 RTCClockSelection; /*!< Specifies RTC Clock Prescalers Selection + This parameter can be a value of @ref RCC_RTC_Clock_Source */ + + uint32_t Usart1ClockSelection; /*!< USART1 clock source + This parameter can be a value of @ref RCC_USART1_Clock_Source */ + + uint32_t I2c1ClockSelection; /*!< I2C1 clock source + This parameter can be a value of @ref RCC_I2C1_Clock_Source */ + +}RCC_PeriphCLKInitTypeDef; +#endif /* STM32F030x6 || STM32F030x8 || STM32F031x6 || STM32F038xx || + STM32F030xC */ + +#if defined(STM32F070x6) || defined(STM32F070xB) +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 RTCClockSelection; /*!< Specifies RTC Clock Prescalers Selection + This parameter can be a value of @ref RCC_RTC_Clock_Source */ + + uint32_t Usart1ClockSelection; /*!< USART1 clock source + This parameter can be a value of @ref RCC_USART1_Clock_Source */ + + uint32_t I2c1ClockSelection; /*!< I2C1 clock source + This parameter can be a value of @ref RCC_I2C1_Clock_Source */ + + uint32_t UsbClockSelection; /*!< USB clock source + This parameter can be a value of @ref RCCEx_USB_Clock_Source */ + +}RCC_PeriphCLKInitTypeDef; +#endif /* STM32F070x6 || STM32F070xB */ + +#if defined(STM32F042x6) || defined(STM32F048xx) +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 RTCClockSelection; /*!< Specifies RTC Clock Prescalers Selection + This parameter can be a value of @ref RCC_RTC_Clock_Source */ + + uint32_t Usart1ClockSelection; /*!< USART1 clock source + This parameter can be a value of @ref RCC_USART1_Clock_Source */ + + uint32_t I2c1ClockSelection; /*!< I2C1 clock source + This parameter can be a value of @ref RCC_I2C1_Clock_Source */ + + uint32_t CecClockSelection; /*!< HDMI CEC clock source + This parameter can be a value of @ref RCCEx_CEC_Clock_Source */ + + uint32_t UsbClockSelection; /*!< USB clock source + This parameter can be a value of @ref RCCEx_USB_Clock_Source */ + +}RCC_PeriphCLKInitTypeDef; +#endif /* STM32F042x6 || STM32F048xx */ + +#if defined(STM32F051x8) || defined(STM32F058xx) +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 RTCClockSelection; /*!< Specifies RTC Clock Prescalers Selection + This parameter can be a value of @ref RCC_RTC_Clock_Source */ + + uint32_t Usart1ClockSelection; /*!< USART1 clock source + This parameter can be a value of @ref RCC_USART1_Clock_Source */ + + uint32_t I2c1ClockSelection; /*!< I2C1 clock source + This parameter can be a value of @ref RCC_I2C1_Clock_Source */ + + uint32_t CecClockSelection; /*!< HDMI CEC clock source + This parameter can be a value of @ref RCCEx_CEC_Clock_Source */ + +}RCC_PeriphCLKInitTypeDef; +#endif /* STM32F051x8 || STM32F058xx */ + +#if defined(STM32F071xB) +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 RTCClockSelection; /*!< Specifies RTC Clock Prescalers Selection + This parameter can be a value of @ref RCC_RTC_Clock_Source */ + + uint32_t Usart1ClockSelection; /*!< USART1 clock source + This parameter can be a value of @ref RCC_USART1_Clock_Source */ + + uint32_t Usart2ClockSelection; /*!< USART2 clock source + This parameter can be a value of @ref RCCEx_USART2_Clock_Source */ + + uint32_t I2c1ClockSelection; /*!< I2C1 clock source + This parameter can be a value of @ref RCC_I2C1_Clock_Source */ + + uint32_t CecClockSelection; /*!< HDMI CEC clock source + This parameter can be a value of @ref RCCEx_CEC_Clock_Source */ + +}RCC_PeriphCLKInitTypeDef; +#endif /* STM32F071xB */ + +#if defined(STM32F072xB) || defined(STM32F078xx) +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 RTCClockSelection; /*!< Specifies RTC Clock Prescalers Selection + This parameter can be a value of @ref RCC_RTC_Clock_Source */ + + uint32_t Usart1ClockSelection; /*!< USART1 clock source + This parameter can be a value of @ref RCC_USART1_Clock_Source */ + + uint32_t Usart2ClockSelection; /*!< USART2 clock source + This parameter can be a value of @ref RCCEx_USART2_Clock_Source */ + + uint32_t I2c1ClockSelection; /*!< I2C1 clock source + This parameter can be a value of @ref RCC_I2C1_Clock_Source */ + + uint32_t CecClockSelection; /*!< HDMI CEC clock source + This parameter can be a value of @ref RCCEx_CEC_Clock_Source */ + + uint32_t UsbClockSelection; /*!< USB clock source + This parameter can be a value of @ref RCCEx_USB_Clock_Source */ + +}RCC_PeriphCLKInitTypeDef; +#endif /* STM32F072xB || STM32F078xx */ + + +#if defined(STM32F091xC) || defined(STM32F098xx) +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 RTCClockSelection; /*!< Specifies RTC Clock Prescalers Selection + This parameter can be a value of @ref RCC_RTC_Clock_Source */ + + uint32_t Usart1ClockSelection; /*!< USART1 clock source + This parameter can be a value of @ref RCC_USART1_Clock_Source */ + + uint32_t Usart2ClockSelection; /*!< USART2 clock source + This parameter can be a value of @ref RCCEx_USART2_Clock_Source */ + + uint32_t Usart3ClockSelection; /*!< USART3 clock source + This parameter can be a value of @ref RCCEx_USART3_Clock_Source */ + + uint32_t I2c1ClockSelection; /*!< I2C1 clock source + This parameter can be a value of @ref RCC_I2C1_Clock_Source */ + + uint32_t CecClockSelection; /*!< HDMI CEC clock source + This parameter can be a value of @ref RCCEx_CEC_Clock_Source */ + +}RCC_PeriphCLKInitTypeDef; +#endif /* STM32F091xC || STM32F098xx */ + +#if defined(CRS) + +/** + * @brief RCC_CRS Init structure definition + */ +typedef struct +{ + uint32_t Prescaler; /*!< Specifies the division factor of the SYNC signal. + This parameter can be a value of @ref RCCEx_CRS_SynchroDivider */ + + uint32_t Source; /*!< Specifies the SYNC signal source. + This parameter can be a value of @ref RCCEx_CRS_SynchroSource */ + + uint32_t Polarity; /*!< Specifies the input polarity for the SYNC signal source. + This parameter can be a value of @ref RCCEx_CRS_SynchroPolarity */ + + uint32_t ReloadValue; /*!< Specifies the value to be loaded in the frequency error counter with each SYNC event. + It can be calculated in using macro @ref __HAL_RCC_CRS_RELOADVALUE_CALCULATE(__FTARGET__, __FSYNC__) + This parameter must be a number between 0 and 0xFFFF or a value of @ref RCCEx_CRS_ReloadValueDefault .*/ + + uint32_t ErrorLimitValue; /*!< Specifies the value to be used to evaluate the captured frequency error value. + This parameter must be a number between 0 and 0xFF or a value of @ref RCCEx_CRS_ErrorLimitDefault */ + + uint32_t HSI48CalibrationValue; /*!< Specifies a user-programmable trimming value to the HSI48 oscillator. + This parameter must be a number between 0 and 0x3F or a value of @ref RCCEx_CRS_HSI48CalibrationDefault */ + +}RCC_CRSInitTypeDef; + +/** + * @brief RCC_CRS Synchronization structure definition + */ +typedef struct +{ + uint32_t ReloadValue; /*!< Specifies the value loaded in the Counter reload value. + This parameter must be a number between 0 and 0xFFFFU */ + + uint32_t HSI48CalibrationValue; /*!< Specifies value loaded in HSI48 oscillator smooth trimming. + This parameter must be a number between 0 and 0x3FU */ + + uint32_t FreqErrorCapture; /*!< Specifies the value loaded in the .FECAP, the frequency error counter + value latched in the time of the last SYNC event. + This parameter must be a number between 0 and 0xFFFFU */ + + uint32_t FreqErrorDirection; /*!< Specifies the value loaded in the .FEDIR, the counting direction of the + frequency error counter latched in the time of the last SYNC event. + It shows whether the actual frequency is below or above the target. + This parameter must be a value of @ref RCCEx_CRS_FreqErrorDirection*/ + +}RCC_CRSSynchroInfoTypeDef; + +#endif /* CRS */ + +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup RCCEx_Exported_Constants RCCEx Exported Constants + * @{ + */ + +/** @defgroup RCCEx_Periph_Clock_Selection RCCEx Periph Clock Selection + * @{ + */ +#if defined(STM32F030x6) || defined(STM32F030x8) || defined(STM32F031x6) || defined(STM32F038xx)\ + || defined(STM32F030xC) +#define RCC_PERIPHCLK_USART1 (0x00000001U) +#define RCC_PERIPHCLK_I2C1 (0x00000020U) +#define RCC_PERIPHCLK_RTC (0x00010000U) + +#endif /* STM32F030x6 || STM32F030x8 || STM32F031x6 || STM32F038xx || + STM32F030xC */ + +#if defined(STM32F070x6) || defined(STM32F070xB) +#define RCC_PERIPHCLK_USART1 (0x00000001U) +#define RCC_PERIPHCLK_I2C1 (0x00000020U) +#define RCC_PERIPHCLK_RTC (0x00010000U) +#define RCC_PERIPHCLK_USB (0x00020000U) + +#endif /* STM32F070x6 || STM32F070xB */ + +#if defined(STM32F042x6) || defined(STM32F048xx) +#define RCC_PERIPHCLK_USART1 (0x00000001U) +#define RCC_PERIPHCLK_I2C1 (0x00000020U) +#define RCC_PERIPHCLK_CEC (0x00000400U) +#define RCC_PERIPHCLK_RTC (0x00010000U) +#define RCC_PERIPHCLK_USB (0x00020000U) + +#endif /* STM32F042x6 || STM32F048xx */ + +#if defined(STM32F051x8) || defined(STM32F058xx) +#define RCC_PERIPHCLK_USART1 (0x00000001U) +#define RCC_PERIPHCLK_I2C1 (0x00000020U) +#define RCC_PERIPHCLK_CEC (0x00000400U) +#define RCC_PERIPHCLK_RTC (0x00010000U) + +#endif /* STM32F051x8 || STM32F058xx */ + +#if defined(STM32F071xB) +#define RCC_PERIPHCLK_USART1 (0x00000001U) +#define RCC_PERIPHCLK_USART2 (0x00000002U) +#define RCC_PERIPHCLK_I2C1 (0x00000020U) +#define RCC_PERIPHCLK_CEC (0x00000400U) +#define RCC_PERIPHCLK_RTC (0x00010000U) + +#endif /* STM32F071xB */ + +#if defined(STM32F072xB) || defined(STM32F078xx) +#define RCC_PERIPHCLK_USART1 (0x00000001U) +#define RCC_PERIPHCLK_USART2 (0x00000002U) +#define RCC_PERIPHCLK_I2C1 (0x00000020U) +#define RCC_PERIPHCLK_CEC (0x00000400U) +#define RCC_PERIPHCLK_RTC (0x00010000U) +#define RCC_PERIPHCLK_USB (0x00020000U) + +#endif /* STM32F072xB || STM32F078xx */ + +#if defined(STM32F091xC) || defined(STM32F098xx) +#define RCC_PERIPHCLK_USART1 (0x00000001U) +#define RCC_PERIPHCLK_USART2 (0x00000002U) +#define RCC_PERIPHCLK_I2C1 (0x00000020U) +#define RCC_PERIPHCLK_CEC (0x00000400U) +#define RCC_PERIPHCLK_RTC (0x00010000U) +#define RCC_PERIPHCLK_USART3 (0x00040000U) + +#endif /* STM32F091xC || STM32F098xx */ + +/** + * @} + */ + +#if defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F072xB) || defined(STM32F078xx) + +/** @defgroup RCCEx_USB_Clock_Source RCCEx USB Clock Source + * @{ + */ +#define RCC_USBCLKSOURCE_HSI48 RCC_CFGR3_USBSW_HSI48 /*!< HSI48 clock selected as USB clock source */ +#define RCC_USBCLKSOURCE_PLL RCC_CFGR3_USBSW_PLLCLK /*!< PLL clock (PLLCLK) selected as USB clock */ + +/** + * @} + */ + +#endif /* STM32F042x6 || STM32F048xx || STM32F072xB || STM32F078xx */ + +#if defined(STM32F070x6) || defined(STM32F070xB) + +/** @defgroup RCCEx_USB_Clock_Source RCCEx USB Clock Source + * @{ + */ +#define RCC_USBCLKSOURCE_NONE (0x00000000U) /*!< USB clock disabled */ +#define RCC_USBCLKSOURCE_PLL RCC_CFGR3_USBSW_PLLCLK /*!< PLL clock (PLLCLK) selected as USB clock */ + +/** + * @} + */ + +#endif /* STM32F070x6 || STM32F070xB */ + +#if defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx)\ + || defined(STM32F091xC) || defined(STM32F098xx) + +/** @defgroup RCCEx_USART2_Clock_Source RCCEx USART2 Clock Source + * @{ + */ +#define RCC_USART2CLKSOURCE_PCLK1 RCC_CFGR3_USART2SW_PCLK +#define RCC_USART2CLKSOURCE_SYSCLK RCC_CFGR3_USART2SW_SYSCLK +#define RCC_USART2CLKSOURCE_LSE RCC_CFGR3_USART2SW_LSE +#define RCC_USART2CLKSOURCE_HSI RCC_CFGR3_USART2SW_HSI + +/** + * @} + */ + +#endif /* STM32F071xB || STM32F072xB || STM32F078xx || */ + /* STM32F091xC || STM32F098xx */ + +#if defined(STM32F091xC) || defined(STM32F098xx) + +/** @defgroup RCCEx_USART3_Clock_Source RCCEx USART3 Clock Source + * @{ + */ +#define RCC_USART3CLKSOURCE_PCLK1 RCC_CFGR3_USART3SW_PCLK +#define RCC_USART3CLKSOURCE_SYSCLK RCC_CFGR3_USART3SW_SYSCLK +#define RCC_USART3CLKSOURCE_LSE RCC_CFGR3_USART3SW_LSE +#define RCC_USART3CLKSOURCE_HSI RCC_CFGR3_USART3SW_HSI + +/** + * @} + */ + +#endif /* STM32F091xC || STM32F098xx */ + + +#if defined(STM32F042x6) || defined(STM32F048xx)\ + || defined(STM32F051x8) || defined(STM32F058xx)\ + || defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx)\ + || defined(STM32F091xC) || defined(STM32F098xx) + +/** @defgroup RCCEx_CEC_Clock_Source RCCEx CEC Clock Source + * @{ + */ +#define RCC_CECCLKSOURCE_HSI RCC_CFGR3_CECSW_HSI_DIV244 +#define RCC_CECCLKSOURCE_LSE RCC_CFGR3_CECSW_LSE + +/** + * @} + */ + +#endif /* STM32F042x6 || STM32F048xx || */ + /* STM32F051x8 || STM32F058xx || */ + /* STM32F071xB || STM32F072xB || STM32F078xx || */ + /* STM32F091xC || STM32F098xx */ + +/** @defgroup RCCEx_MCOx_Clock_Prescaler RCCEx MCOx Clock Prescaler + * @{ + */ + +#if defined(RCC_CFGR_MCOPRE) + +#define RCC_MCODIV_1 (0x00000000U) +#define RCC_MCODIV_2 (0x10000000U) +#define RCC_MCODIV_4 (0x20000000U) +#define RCC_MCODIV_8 (0x30000000U) +#define RCC_MCODIV_16 (0x40000000U) +#define RCC_MCODIV_32 (0x50000000U) +#define RCC_MCODIV_64 (0x60000000U) +#define RCC_MCODIV_128 (0x70000000U) + +#else + +#define RCC_MCODIV_1 (0x00000000U) + +#endif /* RCC_CFGR_MCOPRE */ + +/** + * @} + */ + +/** @defgroup RCCEx_LSEDrive_Configuration RCC LSE Drive Configuration + * @{ + */ + +#define RCC_LSEDRIVE_LOW (0x00000000U) /*!< Xtal mode lower driving capability */ +#define RCC_LSEDRIVE_MEDIUMLOW RCC_BDCR_LSEDRV_1 /*!< Xtal mode medium low driving capability */ +#define RCC_LSEDRIVE_MEDIUMHIGH RCC_BDCR_LSEDRV_0 /*!< Xtal mode medium high driving capability */ +#define RCC_LSEDRIVE_HIGH RCC_BDCR_LSEDRV /*!< Xtal mode higher driving capability */ + +/** + * @} + */ + +#if defined(CRS) + +/** @defgroup RCCEx_CRS_Status RCCEx CRS Status + * @{ + */ +#define RCC_CRS_NONE (0x00000000U) +#define RCC_CRS_TIMEOUT (0x00000001U) +#define RCC_CRS_SYNCOK (0x00000002U) +#define RCC_CRS_SYNCWARN (0x00000004U) +#define RCC_CRS_SYNCERR (0x00000008U) +#define RCC_CRS_SYNCMISS (0x00000010U) +#define RCC_CRS_TRIMOVF (0x00000020U) + +/** + * @} + */ + +/** @defgroup RCCEx_CRS_SynchroSource RCCEx CRS Synchronization Source + * @{ + */ +#define RCC_CRS_SYNC_SOURCE_GPIO (0x00000000U) /*!< Synchro Signal source GPIO */ +#define RCC_CRS_SYNC_SOURCE_LSE CRS_CFGR_SYNCSRC_0 /*!< Synchro Signal source LSE */ +#define RCC_CRS_SYNC_SOURCE_USB CRS_CFGR_SYNCSRC_1 /*!< Synchro Signal source USB SOF (default)*/ +/** + * @} + */ + +/** @defgroup RCCEx_CRS_SynchroDivider RCCEx CRS Synchronization Divider + * @{ + */ +#define RCC_CRS_SYNC_DIV1 (0x00000000U) /*!< Synchro Signal not divided (default) */ +#define RCC_CRS_SYNC_DIV2 CRS_CFGR_SYNCDIV_0 /*!< Synchro Signal divided by 2 */ +#define RCC_CRS_SYNC_DIV4 CRS_CFGR_SYNCDIV_1 /*!< Synchro Signal divided by 4 */ +#define RCC_CRS_SYNC_DIV8 (CRS_CFGR_SYNCDIV_1 | CRS_CFGR_SYNCDIV_0) /*!< Synchro Signal divided by 8 */ +#define RCC_CRS_SYNC_DIV16 CRS_CFGR_SYNCDIV_2 /*!< Synchro Signal divided by 16 */ +#define RCC_CRS_SYNC_DIV32 (CRS_CFGR_SYNCDIV_2 | CRS_CFGR_SYNCDIV_0) /*!< Synchro Signal divided by 32 */ +#define RCC_CRS_SYNC_DIV64 (CRS_CFGR_SYNCDIV_2 | CRS_CFGR_SYNCDIV_1) /*!< Synchro Signal divided by 64 */ +#define RCC_CRS_SYNC_DIV128 CRS_CFGR_SYNCDIV /*!< Synchro Signal divided by 128 */ +/** + * @} + */ + +/** @defgroup RCCEx_CRS_SynchroPolarity RCCEx CRS Synchronization Polarity + * @{ + */ +#define RCC_CRS_SYNC_POLARITY_RISING (0x00000000U) /*!< Synchro Active on rising edge (default) */ +#define RCC_CRS_SYNC_POLARITY_FALLING CRS_CFGR_SYNCPOL /*!< Synchro Active on falling edge */ +/** + * @} + */ + +/** @defgroup RCCEx_CRS_ReloadValueDefault RCCEx CRS Default Reload Value + * @{ + */ +#define RCC_CRS_RELOADVALUE_DEFAULT (0x0000BB7FU) /*!< The reset value of the RELOAD field corresponds + to a target frequency of 48 MHz and a synchronization signal frequency of 1 kHz (SOF signal from USB). */ +/** + * @} + */ + +/** @defgroup RCCEx_CRS_ErrorLimitDefault RCCEx CRS Default Error Limit Value + * @{ + */ +#define RCC_CRS_ERRORLIMIT_DEFAULT (0x00000022U) /*!< Default Frequency error limit */ +/** + * @} + */ + +/** @defgroup RCCEx_CRS_HSI48CalibrationDefault RCCEx CRS Default HSI48 Calibration vakye + * @{ + */ +#define RCC_CRS_HSI48CALIBRATION_DEFAULT (0x00000020U) /*!< The default value is 32, which corresponds to the middle of the trimming interval. + The trimming step is around 67 kHz between two consecutive TRIM steps. A higher TRIM value + corresponds to a higher output frequency */ +/** + * @} + */ + +/** @defgroup RCCEx_CRS_FreqErrorDirection RCCEx CRS Frequency Error Direction + * @{ + */ +#define RCC_CRS_FREQERRORDIR_UP (0x00000000U) /*!< Upcounting direction, the actual frequency is above the target */ +#define RCC_CRS_FREQERRORDIR_DOWN ((uint32_t)CRS_ISR_FEDIR) /*!< Downcounting direction, the actual frequency is below the target */ +/** + * @} + */ + +/** @defgroup RCCEx_CRS_Interrupt_Sources RCCEx CRS Interrupt Sources + * @{ + */ +#define RCC_CRS_IT_SYNCOK CRS_CR_SYNCOKIE /*!< SYNC event OK */ +#define RCC_CRS_IT_SYNCWARN CRS_CR_SYNCWARNIE /*!< SYNC warning */ +#define RCC_CRS_IT_ERR CRS_CR_ERRIE /*!< Error */ +#define RCC_CRS_IT_ESYNC CRS_CR_ESYNCIE /*!< Expected SYNC */ +#define RCC_CRS_IT_SYNCERR CRS_CR_ERRIE /*!< SYNC error */ +#define RCC_CRS_IT_SYNCMISS CRS_CR_ERRIE /*!< SYNC missed */ +#define RCC_CRS_IT_TRIMOVF CRS_CR_ERRIE /*!< Trimming overflow or underflow */ + +/** + * @} + */ + +/** @defgroup RCCEx_CRS_Flags RCCEx CRS Flags + * @{ + */ +#define RCC_CRS_FLAG_SYNCOK CRS_ISR_SYNCOKF /*!< SYNC event OK flag */ +#define RCC_CRS_FLAG_SYNCWARN CRS_ISR_SYNCWARNF /*!< SYNC warning flag */ +#define RCC_CRS_FLAG_ERR CRS_ISR_ERRF /*!< Error flag */ +#define RCC_CRS_FLAG_ESYNC CRS_ISR_ESYNCF /*!< Expected SYNC flag */ +#define RCC_CRS_FLAG_SYNCERR CRS_ISR_SYNCERR /*!< SYNC error */ +#define RCC_CRS_FLAG_SYNCMISS CRS_ISR_SYNCMISS /*!< SYNC missed*/ +#define RCC_CRS_FLAG_TRIMOVF CRS_ISR_TRIMOVF /*!< Trimming overflow or underflow */ + +/** + * @} + */ + +#endif /* CRS */ + +/** + * @} + */ + +/* Exported macros ------------------------------------------------------------*/ +/** @defgroup RCCEx_Exported_Macros RCCEx Exported Macros + * @{ + */ + +/** @defgroup RCCEx_Peripheral_Clock_Enable_Disable RCCEx_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(GPIOD) + +#define __HAL_RCC_GPIOD_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHBENR, RCC_AHBENR_GPIODEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_GPIODEN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_GPIOD_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_GPIODEN)) + +#endif /* GPIOD */ + +#if defined(GPIOE) + +#define __HAL_RCC_GPIOE_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHBENR, RCC_AHBENR_GPIOEEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_GPIOEEN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_GPIOE_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_GPIOEEN)) + +#endif /* GPIOE */ + +#if defined(STM32F042x6) || defined(STM32F048xx)\ + || defined(STM32F051x8) || defined(STM32F058xx)\ + || defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx)\ + || defined(STM32F091xC) || defined(STM32F098xx) + +#define __HAL_RCC_TSC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHBENR, RCC_AHBENR_TSCEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_TSCEN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_TSC_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_TSCEN)) + +#endif /* STM32F042x6 || STM32F048xx || */ + /* STM32F051x8 || STM32F058xx || */ + /* STM32F071xB || STM32F072xB || STM32F078xx || */ + /* STM32F091xC || STM32F098xx */ + +#if defined(STM32F091xC) || defined(STM32F098xx) + +#define __HAL_RCC_DMA2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHBENR, RCC_AHBENR_DMA2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_DMA2EN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_DMA2_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_DMA2EN)) + +#endif /* STM32F091xC || STM32F098xx */ + +/** @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. + */ +#if defined(STM32F030x8)\ + || defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F070x6)\ + || defined(STM32F051x8) || defined(STM32F058xx)\ + || defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx) || defined(STM32F070xB)\ + || defined(STM32F091xC) || defined(STM32F098xx) || defined(STM32F030xC) + +#define __HAL_RCC_USART2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + 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_USART2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_USART2EN)) + +#endif /* STM32F030x8 || STM32F042x6 || STM32F048xx || */ + /* STM32F051x8 || STM32F058xx || STM32F070x6 || */ + /* STM32F071xB || STM32F072xB || STM32F078xx || STM32F070xB || */ + /* STM32F091xC || STM32F098xx || STM32F030xC */ + +#if defined(STM32F030x8)\ + || defined(STM32F042x6) || defined(STM32F048xx)\ + || defined(STM32F051x8) || defined(STM32F058xx)\ + || defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx) || defined(STM32F070xB)\ + || defined(STM32F091xC) || defined(STM32F098xx) || defined(STM32F030xC) + +#define __HAL_RCC_SPI2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + 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_SPI2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_SPI2EN)) + +#endif /* STM32F030x8 || STM32F042x6 || STM32F048xx || */ + /* STM32F051x8 || STM32F058xx || */ + /* STM32F071xB || STM32F072xB || STM32F078xx || STM32F070xB || */ + /* STM32F091xC || STM32F098xx || STM32F030xC */ + +#if defined(STM32F031x6) || defined(STM32F038xx)\ + || defined(STM32F042x6) || defined(STM32F048xx)\ + || defined(STM32F051x8) || defined(STM32F058xx)\ + || defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx)\ + || defined(STM32F091xC) || defined(STM32F098xx) + +#define __HAL_RCC_TIM2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + 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_TIM2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM2EN)) + +#endif /* STM32F031x6 || STM32F038xx || */ + /* STM32F042x6 || STM32F048xx || */ + /* STM32F051x8 || STM32F058xx || */ + /* STM32F071xB || STM32F072xB || STM32F078xx || */ + /* STM32F091xC || STM32F098xx */ + +#if defined(STM32F030x8) \ + || defined(STM32F051x8) || defined(STM32F058xx)\ + || defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx) || defined(STM32F070xB)\ + || defined(STM32F091xC) || defined(STM32F098xx) || defined(STM32F030xC) + +#define __HAL_RCC_TIM6_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + 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_I2C2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + 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_TIM6_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM6EN)) +#define __HAL_RCC_I2C2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_I2C2EN)) + +#endif /* STM32F030x8 || */ + /* STM32F051x8 || STM32F058xx || */ + /* STM32F071xB || STM32F072xB || STM32F078xx || STM32F070xB || */ + /* STM32F091xC || STM32F098xx || STM32F030xC */ + +#if defined(STM32F051x8) || defined(STM32F058xx)\ + || defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx)\ + || defined(STM32F091xC) || defined(STM32F098xx) + +#define __HAL_RCC_DAC1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + 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_DAC1_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_DACEN)) + +#endif /* STM32F051x8 || STM32F058xx || */ + /* STM32F071xB || STM32F072xB || STM32F078xx || */ + /* STM32F091xC || STM32F098xx */ + +#if defined(STM32F042x6) || defined(STM32F048xx)\ + || defined(STM32F051x8) || defined(STM32F058xx)\ + || defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx)\ + || defined(STM32F091xC) || defined(STM32F098xx) + +#define __HAL_RCC_CEC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + 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_CEC_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_CECEN)) + +#endif /* STM32F042x6 || STM32F048xx || */ + /* STM32F051x8 || STM32F058xx || */ + /* STM32F071xB || STM32F072xB || STM32F078xx || */ + /* STM32F091xC || STM32F098xx */ + +#if defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx) || defined(STM32F070xB)\ + || defined(STM32F091xC) || defined(STM32F098xx) || defined(STM32F030xC) + +#define __HAL_RCC_TIM7_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + 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_USART3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + 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_USART4_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_USART4EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_USART4EN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_TIM7_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM7EN)) +#define __HAL_RCC_USART3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_USART3EN)) +#define __HAL_RCC_USART4_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_USART4EN)) + +#endif /* STM32F071xB || STM32F072xB || STM32F078xx || STM32F070xB || */ + /* STM32F091xC || STM32F098xx || STM32F030xC */ + +#if defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F070x6)\ + || defined(STM32F072xB) || defined(STM32F078xx) || defined(STM32F070xB) + +#define __HAL_RCC_USB_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_USBEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_USBEN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_USB_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_USBEN)) + +#endif /* STM32F042x6 || STM32F048xx || STM32F070x6 || */ + /* STM32F072xB || STM32F078xx || STM32F070xB */ + +#if defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F072xB)\ + || defined(STM32F091xC) || defined(STM32F098xx) + +#define __HAL_RCC_CAN1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_CANEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_CANEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_CAN1_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_CANEN)) + +#endif /* STM32F042x6 || STM32F048xx || STM32F072xB || */ + /* STM32F091xC || STM32F098xx */ + +#if defined(CRS) + +#define __HAL_RCC_CRS_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_CRSEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_CRSEN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_CRS_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_CRSEN)) + +#endif /* CRS */ + +#if defined(STM32F091xC) || defined(STM32F098xx) || defined(STM32F030xC) + +#define __HAL_RCC_USART5_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_USART5EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_USART5EN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_USART5_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_USART5EN)) + +#endif /* STM32F091xC || STM32F098xx || STM32F030xC */ + +/** @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. + */ +#if defined(STM32F030x8) || defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F070x6)\ + || defined(STM32F051x8) || defined(STM32F058xx)\ + || defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx) || defined(STM32F070xB)\ + || defined(STM32F091xC) || defined(STM32F098xx) || defined(STM32F030xC) + +#define __HAL_RCC_TIM15_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM15EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM15EN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_TIM15_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM15EN)) + +#endif /* STM32F030x8 || STM32F042x6 || STM32F048xx || STM32F070x6 || */ + /* STM32F051x8 || STM32F058xx || */ + /* STM32F071xB || STM32F072xB || STM32F078xx || STM32F070xB || */ + /* STM32F091xC || STM32F098xx || STM32F030xC */ + +#if defined(STM32F091xC) || defined(STM32F098xx) || defined(STM32F030xC) + +#define __HAL_RCC_USART6_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + 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_USART6_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_USART6EN)) + +#endif /* STM32F091xC || STM32F098xx || STM32F030xC */ + +#if defined(STM32F091xC) || defined(STM32F098xx) + +#define __HAL_RCC_USART7_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_USART7EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_USART7EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_USART8_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_USART8EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_USART8EN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_USART7_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_USART7EN)) +#define __HAL_RCC_USART8_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_USART8EN)) + +#endif /* STM32F091xC || STM32F098xx */ + +/** + * @} + */ + + +/** @defgroup RCCEx_Force_Release_Peripheral_Reset RCCEx Force Release Peripheral Reset + * @brief Forces or releases peripheral reset. + * @{ + */ + +/** @brief Force or release AHB peripheral reset. + */ +#if defined(GPIOD) + +#define __HAL_RCC_GPIOD_FORCE_RESET() (RCC->AHBRSTR |= (RCC_AHBRSTR_GPIODRST)) + +#define __HAL_RCC_GPIOD_RELEASE_RESET() (RCC->AHBRSTR &= ~(RCC_AHBRSTR_GPIODRST)) + +#endif /* GPIOD */ + +#if defined(GPIOE) + +#define __HAL_RCC_GPIOE_FORCE_RESET() (RCC->AHBRSTR |= (RCC_AHBRSTR_GPIOERST)) + +#define __HAL_RCC_GPIOE_RELEASE_RESET() (RCC->AHBRSTR &= ~(RCC_AHBRSTR_GPIOERST)) + +#endif /* GPIOE */ + +#if defined(STM32F042x6) || defined(STM32F048xx)\ + || defined(STM32F051x8) || defined(STM32F058xx)\ + || defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx)\ + || defined(STM32F091xC) || defined(STM32F098xx) + +#define __HAL_RCC_TSC_FORCE_RESET() (RCC->AHBRSTR |= (RCC_AHBRSTR_TSCRST)) + +#define __HAL_RCC_TSC_RELEASE_RESET() (RCC->AHBRSTR &= ~(RCC_AHBRSTR_TSCRST)) + +#endif /* STM32F042x6 || STM32F048xx || */ + /* STM32F051x8 || STM32F058xx || */ + /* STM32F071xB || STM32F072xB || STM32F078xx || */ + /* STM32F091xC || STM32F098xx */ + +/** @brief Force or release APB1 peripheral reset. + */ +#if defined(STM32F030x8) \ + || defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F070x6)\ + || defined(STM32F051x8) || defined(STM32F058xx)\ + || defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx) || defined(STM32F070xB)\ + || defined(STM32F091xC) || defined(STM32F098xx) || defined(STM32F030xC) + +#define __HAL_RCC_USART2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_USART2RST)) +#define __HAL_RCC_SPI2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_SPI2RST)) + +#define __HAL_RCC_USART2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_USART2RST)) +#define __HAL_RCC_SPI2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_SPI2RST)) + +#endif /* STM32F030x8 || STM32F042x6 || STM32F048xx || STM32F070x6 || */ + /* STM32F051x8 || STM32F058xx || */ + /* STM32F071xB || STM32F072xB || STM32F078xx || STM32F070xB || */ + /* STM32F091xC || STM32F098xx || STM32F030xC */ + +#if defined(STM32F031x6) || defined(STM32F038xx)\ + || defined(STM32F042x6) || defined(STM32F048xx)\ + || defined(STM32F051x8) || defined(STM32F058xx)\ + || defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx)\ + || defined(STM32F091xC) || defined(STM32F098xx) + +#define __HAL_RCC_TIM2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM2RST)) + +#define __HAL_RCC_TIM2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM2RST)) + +#endif /* STM32F031x6 || STM32F038xx || */ + /* STM32F042x6 || STM32F048xx || */ + /* STM32F051x8 || STM32F058xx || */ + /* STM32F071xB || STM32F072xB || STM32F078xx || */ + /* STM32F091xC || STM32F098xx */ + +#if defined(STM32F030x8) \ + || defined(STM32F051x8) || defined(STM32F058xx)\ + || defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx) || defined(STM32F070xB)\ + || defined(STM32F091xC) || defined(STM32F098xx) || defined(STM32F030xC) + +#define __HAL_RCC_TIM6_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM6RST)) +#define __HAL_RCC_I2C2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_I2C2RST)) + +#define __HAL_RCC_TIM6_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM6RST)) +#define __HAL_RCC_I2C2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_I2C2RST)) + +#endif /* STM32F030x8 || */ + /* STM32F051x8 || STM32F058xx || */ + /* STM32F071xB || STM32F072xB || STM32F078xx || STM32F070xB || */ + /* STM32F091xC || STM32F098xx || STM32F030xC */ + +#if defined(STM32F051x8) || defined(STM32F058xx)\ + || defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx)\ + || defined(STM32F091xC) || defined(STM32F098xx) + +#define __HAL_RCC_DAC1_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_DACRST)) + +#define __HAL_RCC_DAC1_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_DACRST)) + +#endif /* STM32F051x8 || STM32F058xx || */ + /* STM32F071xB || STM32F072xB || STM32F078xx || */ + /* STM32F091xC || STM32F098xx */ + +#if defined(STM32F042x6) || defined(STM32F048xx)\ + || defined(STM32F051x8) || defined(STM32F058xx)\ + || defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx)\ + || defined(STM32F091xC) || defined(STM32F098xx) + +#define __HAL_RCC_CEC_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_CECRST)) + +#define __HAL_RCC_CEC_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_CECRST)) + +#endif /* STM32F042x6 || STM32F048xx || */ + /* STM32F051x8 || STM32F058xx || */ + /* STM32F071xB || STM32F072xB || STM32F078xx || */ + /* STM32F091xC || STM32F098xx */ + +#if defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx) || defined(STM32F070xB)\ + || defined(STM32F091xC) || defined(STM32F098xx) || defined(STM32F030xC) + +#define __HAL_RCC_TIM7_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM7RST)) +#define __HAL_RCC_USART3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_USART3RST)) +#define __HAL_RCC_USART4_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_USART4RST)) + +#define __HAL_RCC_TIM7_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM7RST)) +#define __HAL_RCC_USART3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_USART3RST)) +#define __HAL_RCC_USART4_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_USART4RST)) + +#endif /* STM32F071xB || STM32F072xB || STM32F078xx || STM32F070xB || */ + /* STM32F091xC || STM32F098xx || STM32F030xC */ + +#if defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F070x6)\ + || defined(STM32F072xB) || defined(STM32F078xx) || defined(STM32F070xB) + +#define __HAL_RCC_USB_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_USBRST)) + +#define __HAL_RCC_USB_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_USBRST)) + +#endif /* STM32F042x6 || STM32F048xx || STM32F070x6 || */ + /* STM32F072xB || STM32F078xx || STM32F070xB */ + +#if defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F072xB)\ + || defined(STM32F091xC) || defined(STM32F098xx) + +#define __HAL_RCC_CAN1_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_CANRST)) + +#define __HAL_RCC_CAN1_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_CANRST)) + +#endif /* STM32F042x6 || STM32F048xx || STM32F072xB || */ + /* STM32F091xC || STM32F098xx */ + +#if defined(CRS) + +#define __HAL_RCC_CRS_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_CRSRST)) + +#define __HAL_RCC_CRS_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_CRSRST)) + +#endif /* CRS */ + +#if defined(STM32F091xC) || defined(STM32F098xx) || defined(STM32F030xC) + +#define __HAL_RCC_USART5_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_USART5RST)) + +#define __HAL_RCC_USART5_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_USART5RST)) + +#endif /* STM32F091xC || STM32F098xx || STM32F030xC */ + + +/** @brief Force or release APB2 peripheral reset. + */ +#if defined(STM32F030x8) || defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F070x6)\ + || defined(STM32F051x8) || defined(STM32F058xx)\ + || defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx) || defined(STM32F070xB)\ + || defined(STM32F091xC) || defined(STM32F098xx) || defined(STM32F030xC) + +#define __HAL_RCC_TIM15_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM15RST)) + +#define __HAL_RCC_TIM15_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM15RST)) + +#endif /* STM32F030x8 || STM32F042x6 || STM32F048xx || STM32F070x6 || */ + /* STM32F051x8 || STM32F058xx || */ + /* STM32F071xB || STM32F072xB || STM32F078xx || STM32F070xB || */ + /* STM32F091xC || STM32F098xx || STM32F030xC */ + +#if defined(STM32F091xC) || defined(STM32F098xx) || defined(STM32F030xC) + +#define __HAL_RCC_USART6_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_USART6RST)) + +#define __HAL_RCC_USART6_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_USART6RST)) + +#endif /* STM32F091xC || STM32F098xx || STM32F030xC */ + +#if defined(STM32F091xC) || defined(STM32F098xx) + +#define __HAL_RCC_USART7_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_USART7RST)) +#define __HAL_RCC_USART8_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_USART8RST)) + +#define __HAL_RCC_USART7_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_USART7RST)) +#define __HAL_RCC_USART8_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_USART8RST)) + +#endif /* STM32F091xC || STM32F098xx */ + +/** + * @} + */ + +/** @defgroup RCCEx_Peripheral_Clock_Enable_Disable_Status Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of 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. + * @{ + */ +/** @brief AHB Peripheral Clock Enable Disable Status + */ +#if defined(GPIOD) + +#define __HAL_RCC_GPIOD_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_GPIODEN)) != RESET) +#define __HAL_RCC_GPIOD_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_GPIODEN)) == RESET) + +#endif /* GPIOD */ + +#if defined(GPIOE) + +#define __HAL_RCC_GPIOE_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_GPIOEEN)) != RESET) +#define __HAL_RCC_GPIOE_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_GPIOEEN)) == RESET) + +#endif /* GPIOE */ + +#if defined(STM32F042x6) || defined(STM32F048xx)\ + || defined(STM32F051x8) || defined(STM32F058xx)\ + || defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx)\ + || defined(STM32F091xC) || defined(STM32F098xx) + +#define __HAL_RCC_TSC_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_TSCEN)) != RESET) +#define __HAL_RCC_TSC_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_TSCEN)) == RESET) + +#endif /* STM32F042x6 || STM32F048xx || */ + /* STM32F051x8 || STM32F058xx || */ + /* STM32F071xB || STM32F072xB || STM32F078xx || */ + /* STM32F091xC || STM32F098xx */ + +#if defined(STM32F091xC) || defined(STM32F098xx) + +#define __HAL_RCC_DMA2_IS_CLK_ENABLED() ((RCC->AHBENR & (RCC_AHBENR_DMA2EN)) != RESET) +#define __HAL_RCC_DMA2_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_DMA2EN)) == RESET) + +#endif /* STM32F091xC || STM32F098xx */ + +/** @brief APB1 Peripheral Clock Enable Disable Status + */ +#if defined(STM32F030x8)\ + || defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F070x6)\ + || defined(STM32F051x8) || defined(STM32F058xx)\ + || defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx) || defined(STM32F070xB)\ + || defined(STM32F091xC) || defined(STM32F098xx) || defined(STM32F030xC) + +#define __HAL_RCC_USART2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USART2EN)) != RESET) +#define __HAL_RCC_USART2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USART2EN)) == RESET) + +#endif /* STM32F030x8 || STM32F042x6 || STM32F048xx || */ + /* STM32F051x8 || STM32F058xx || STM32F070x6 || */ + /* STM32F071xB || STM32F072xB || STM32F078xx || STM32F070xB || */ + /* STM32F091xC || STM32F098xx || STM32F030xC */ + +#if defined(STM32F030x8)\ + || defined(STM32F042x6) || defined(STM32F048xx)\ + || defined(STM32F051x8) || defined(STM32F058xx)\ + || defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx) || defined(STM32F070xB)\ + || defined(STM32F091xC) || defined(STM32F098xx) || defined(STM32F030xC) + +#define __HAL_RCC_SPI2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI2EN)) != RESET) +#define __HAL_RCC_SPI2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI2EN)) == RESET) + +#endif /* STM32F030x8 || STM32F042x6 || STM32F048xx || */ + /* STM32F051x8 || STM32F058xx || */ + /* STM32F071xB || STM32F072xB || STM32F078xx || STM32F070xB || */ + /* STM32F091xC || STM32F098xx || STM32F030xC */ + +#if defined(STM32F031x6) || defined(STM32F038xx)\ + || defined(STM32F042x6) || defined(STM32F048xx)\ + || defined(STM32F051x8) || defined(STM32F058xx)\ + || defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx)\ + || defined(STM32F091xC) || defined(STM32F098xx) + +#define __HAL_RCC_TIM2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM2EN)) != RESET) +#define __HAL_RCC_TIM2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM2EN)) == RESET) + +#endif /* STM32F031x6 || STM32F038xx || */ + /* STM32F042x6 || STM32F048xx || */ + /* STM32F051x8 || STM32F058xx || */ + /* STM32F071xB || STM32F072xB || STM32F078xx || */ + /* STM32F091xC || STM32F098xx */ + +#if defined(STM32F030x8) \ + || defined(STM32F051x8) || defined(STM32F058xx)\ + || defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx) || defined(STM32F070xB)\ + || defined(STM32F091xC) || defined(STM32F098xx) || defined(STM32F030xC) + +#define __HAL_RCC_TIM6_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) != RESET) +#define __HAL_RCC_I2C2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C2EN)) != RESET) +#define __HAL_RCC_TIM6_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) == RESET) +#define __HAL_RCC_I2C2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C2EN)) == RESET) + +#endif /* STM32F030x8 || */ + /* STM32F051x8 || STM32F058xx || */ + /* STM32F071xB || STM32F072xB || STM32F078xx || STM32F070xB || */ + /* STM32F091xC || STM32F098xx || STM32F030xC */ + +#if defined(STM32F051x8) || defined(STM32F058xx)\ + || defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx)\ + || defined(STM32F091xC) || defined(STM32F098xx) + +#define __HAL_RCC_DAC1_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_DAC1EN)) != RESET) +#define __HAL_RCC_DAC1_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_DAC1EN)) == RESET) + +#endif /* STM32F051x8 || STM32F058xx || */ + /* STM32F071xB || STM32F072xB || STM32F078xx || */ + /* STM32F091xC || STM32F098xx */ + +#if defined(STM32F042x6) || defined(STM32F048xx)\ + || defined(STM32F051x8) || defined(STM32F058xx)\ + || defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx)\ + || defined(STM32F091xC) || defined(STM32F098xx) + +#define __HAL_RCC_CEC_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CECEN)) != RESET) +#define __HAL_RCC_CEC_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CECEN)) == RESET) + +#endif /* STM32F042x6 || STM32F048xx || */ + /* STM32F051x8 || STM32F058xx || */ + /* STM32F071xB || STM32F072xB || STM32F078xx || */ + /* STM32F091xC || STM32F098xx */ + +#if defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx) || defined(STM32F070xB)\ + || defined(STM32F091xC) || defined(STM32F098xx) || defined(STM32F030xC) + +#define __HAL_RCC_TIM7_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM7EN)) != RESET) +#define __HAL_RCC_USART3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USART3EN)) != RESET) +#define __HAL_RCC_USART4_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USART4EN)) != RESET) +#define __HAL_RCC_TIM7_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM7EN)) == RESET) +#define __HAL_RCC_USART3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USART3EN)) == RESET) +#define __HAL_RCC_USART4_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USART4EN)) == RESET) + +#endif /* STM32F071xB || STM32F072xB || STM32F078xx || STM32F070xB || */ + /* STM32F091xC || STM32F098xx || STM32F030xC */ + +#if defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F070x6)\ + || defined(STM32F072xB) || defined(STM32F078xx) || defined(STM32F070xB) + +#define __HAL_RCC_USB_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USBEN)) != RESET) +#define __HAL_RCC_USB_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USBEN)) == RESET) + +#endif /* STM32F042x6 || STM32F048xx || STM32F070x6 || */ + /* STM32F072xB || STM32F078xx || STM32F070xB */ + +#if defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F072xB)\ + || defined(STM32F091xC) || defined(STM32F098xx) + +#define __HAL_RCC_CAN1_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN1EN)) != RESET) +#define __HAL_RCC_CAN1_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN1EN)) == RESET) + +#endif /* STM32F042x6 || STM32F048xx || STM32F072xB || */ + /* STM32F091xC || STM32F098xx */ + +#if defined(CRS) + +#define __HAL_RCC_CRS_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CRSEN)) != RESET) +#define __HAL_RCC_CRS_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CRSEN)) == RESET) + +#endif /* CRS */ + +#if defined(STM32F091xC) || defined(STM32F098xx) || defined(STM32F030xC) + +#define __HAL_RCC_USART5_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USART5EN)) != RESET) +#define __HAL_RCC_USART5_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USART5EN)) == RESET) + +#endif /* STM32F091xC || STM32F098xx || STM32F030xC */ + +/** @brief APB1 Peripheral Clock Enable Disable Status + */ +#if defined(STM32F030x8) || defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F070x6)\ + || defined(STM32F051x8) || defined(STM32F058xx)\ + || defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx) || defined(STM32F070xB)\ + || defined(STM32F091xC) || defined(STM32F098xx) || defined(STM32F030xC) + +#define __HAL_RCC_TIM15_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM15EN)) != RESET) +#define __HAL_RCC_TIM15_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM15EN)) == RESET) + +#endif /* STM32F030x8 || STM32F042x6 || STM32F048xx || STM32F070x6 || */ + /* STM32F051x8 || STM32F058xx || */ + /* STM32F071xB || STM32F072xB || STM32F078xx || STM32F070xB || */ + /* STM32F091xC || STM32F098xx || STM32F030xC */ + +#if defined(STM32F091xC) || defined(STM32F098xx) || defined(STM32F030xC) + +#define __HAL_RCC_USART6_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_USART6EN)) != RESET) +#define __HAL_RCC_USART6_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_USART6EN)) == RESET) + +#endif /* STM32F091xC || STM32F098xx || STM32F030xC */ + +#if defined(STM32F091xC) || defined(STM32F098xx) + +#define __HAL_RCC_USART7_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_USART7EN)) != RESET) +#define __HAL_RCC_USART8_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_USART8EN)) != RESET) +#define __HAL_RCC_USART7_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_USART7EN)) == RESET) +#define __HAL_RCC_USART8_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_USART8EN)) == RESET) + +#endif /* STM32F091xC || STM32F098xx */ +/** + * @} + */ + + +/** @defgroup RCCEx_HSI48_Enable_Disable RCCEx HSI48 Enable Disable + * @brief Macros to enable or disable the Internal 48Mhz High Speed oscillator (HSI48). + * @note The HSI48 is stopped by hardware when entering STOP and STANDBY modes. + * @note HSI48 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 HSI14. + * @note After enabling the HSI48 with __HAL_RCC_HSI48_ENABLE(), the application software + * should wait on HSI48RDY flag to be set indicating that HSI48 clock is stable and can be + * used as system clock source. This is not necessary if HAL_RCC_OscConfig() is used. + * @note When the HSI48 is stopped, HSI48RDY flag goes low after 6 HSI48 oscillator + * clock cycles. + * @{ + */ +#if defined(RCC_HSI48_SUPPORT) + +#define __HAL_RCC_HSI48_ENABLE() SET_BIT(RCC->CR2, RCC_CR2_HSI48ON) +#define __HAL_RCC_HSI48_DISABLE() CLEAR_BIT(RCC->CR2, RCC_CR2_HSI48ON) + +/** @brief Macro to get the Internal 48Mhz High Speed oscillator (HSI48) state. + * @retval The clock source can be one of the following values: + * @arg @ref RCC_HSI48_ON HSI48 enabled + * @arg @ref RCC_HSI48_OFF HSI48 disabled + */ +#define __HAL_RCC_GET_HSI48_STATE() \ + (((uint32_t)(READ_BIT(RCC->CR2, RCC_CR2_HSI48ON)) != RESET) ? RCC_HSI48_ON : RCC_HSI48_OFF) + +#endif /* RCC_HSI48_SUPPORT */ + +/** + * @} + */ + +/** @defgroup RCCEx_Peripheral_Clock_Source_Config RCCEx Peripheral Clock Source Config + * @{ + */ +#if defined(STM32F042x6) || defined(STM32F048xx)\ + || defined(STM32F072xB) || defined(STM32F078xx)\ + || defined(STM32F070x6) || defined(STM32F070xB) + +/** @brief Macro to configure the USB clock (USBCLK). + * @param __USBCLKSOURCE__ specifies the USB clock source. + * This parameter can be one of the following values: +@if STM32F070xB +@elseif STM32F070x6 +@else + * @arg @ref RCC_USBCLKSOURCE_HSI48 HSI48 selected as USB clock +@endif + * @arg @ref RCC_USBCLKSOURCE_PLL PLL Clock selected as USB clock + */ +#define __HAL_RCC_USB_CONFIG(__USBCLKSOURCE__) \ + MODIFY_REG(RCC->CFGR3, RCC_CFGR3_USBSW, (uint32_t)(__USBCLKSOURCE__)) + +/** @brief Macro to get the USB clock source. + * @retval The clock source can be one of the following values: +@if STM32F070xB +@elseif STM32F070x6 +@else + * @arg @ref RCC_USBCLKSOURCE_HSI48 HSI48 selected as USB clock +@endif + * @arg @ref RCC_USBCLKSOURCE_PLL PLL Clock selected as USB clock + */ +#define __HAL_RCC_GET_USB_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR3, RCC_CFGR3_USBSW))) + +#endif /* STM32F042x6 || STM32F048xx || */ + /* STM32F072xB || STM32F078xx || */ + /* STM32F070x6 || STM32F070xB */ + +#if defined(STM32F042x6) || defined(STM32F048xx)\ + || defined(STM32F051x8) || defined(STM32F058xx)\ + || defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx)\ + || defined(STM32F091xC) || defined(STM32F098xx) + +/** @brief Macro to configure the CEC clock. + * @param __CECCLKSOURCE__ specifies the CEC clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_CECCLKSOURCE_HSI HSI selected as CEC clock + * @arg @ref RCC_CECCLKSOURCE_LSE LSE selected as CEC clock + */ +#define __HAL_RCC_CEC_CONFIG(__CECCLKSOURCE__) \ + MODIFY_REG(RCC->CFGR3, RCC_CFGR3_CECSW, (uint32_t)(__CECCLKSOURCE__)) + +/** @brief Macro to get the HDMI CEC clock source. + * @retval The clock source can be one of the following values: + * @arg @ref RCC_CECCLKSOURCE_HSI HSI selected as CEC clock + * @arg @ref RCC_CECCLKSOURCE_LSE LSE selected as CEC clock + */ +#define __HAL_RCC_GET_CEC_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR3, RCC_CFGR3_CECSW))) + +#endif /* STM32F042x6 || STM32F048xx || */ + /* STM32F051x8 || STM32F058xx || */ + /* STM32F071xB || STM32F072xB || STM32F078xx || */ + /* STM32F091xC || defined(STM32F098xx) */ + +#if defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx)\ + || defined(STM32F091xC) || defined(STM32F098xx) +/** @brief Macro to configure the USART2 clock (USART2CLK). + * @param __USART2CLKSOURCE__ specifies the USART2 clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_USART2CLKSOURCE_PCLK1 PCLK1 selected as USART2 clock + * @arg @ref RCC_USART2CLKSOURCE_HSI HSI selected as USART2 clock + * @arg @ref RCC_USART2CLKSOURCE_SYSCLK System Clock selected as USART2 clock + * @arg @ref RCC_USART2CLKSOURCE_LSE LSE selected as USART2 clock + */ +#define __HAL_RCC_USART2_CONFIG(__USART2CLKSOURCE__) \ + MODIFY_REG(RCC->CFGR3, RCC_CFGR3_USART2SW, (uint32_t)(__USART2CLKSOURCE__)) + +/** @brief Macro to get the USART2 clock source. + * @retval The clock source can be one of the following values: + * @arg @ref RCC_USART2CLKSOURCE_PCLK1 PCLK1 selected as USART2 clock + * @arg @ref RCC_USART2CLKSOURCE_HSI HSI selected as USART2 clock + * @arg @ref RCC_USART2CLKSOURCE_SYSCLK System Clock selected as USART2 clock + * @arg @ref RCC_USART2CLKSOURCE_LSE LSE selected as USART2 clock + */ +#define __HAL_RCC_GET_USART2_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR3, RCC_CFGR3_USART2SW))) +#endif /* STM32F071xB || STM32F072xB || STM32F078xx || STM32F091xC || STM32F098xx*/ + +#if defined(STM32F091xC) || defined(STM32F098xx) +/** @brief Macro to configure the USART3 clock (USART3CLK). + * @param __USART3CLKSOURCE__ specifies the USART3 clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_USART3CLKSOURCE_PCLK1 PCLK1 selected as USART3 clock + * @arg @ref RCC_USART3CLKSOURCE_HSI HSI selected as USART3 clock + * @arg @ref RCC_USART3CLKSOURCE_SYSCLK System Clock selected as USART3 clock + * @arg @ref RCC_USART3CLKSOURCE_LSE LSE selected as USART3 clock + */ +#define __HAL_RCC_USART3_CONFIG(__USART3CLKSOURCE__) \ + MODIFY_REG(RCC->CFGR3, RCC_CFGR3_USART3SW, (uint32_t)(__USART3CLKSOURCE__)) + +/** @brief Macro to get the USART3 clock source. + * @retval The clock source can be one of the following values: + * @arg @ref RCC_USART3CLKSOURCE_PCLK1 PCLK1 selected as USART3 clock + * @arg @ref RCC_USART3CLKSOURCE_HSI HSI selected as USART3 clock + * @arg @ref RCC_USART3CLKSOURCE_SYSCLK System Clock selected as USART3 clock + * @arg @ref RCC_USART3CLKSOURCE_LSE LSE selected as USART3 clock + */ +#define __HAL_RCC_GET_USART3_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR3, RCC_CFGR3_USART3SW))) + +#endif /* STM32F091xC || STM32F098xx */ +/** + * @} + */ + +/** @defgroup RCCEx_LSE_Configuration LSE Drive Configuration + * @{ + */ + +/** + * @brief Macro to configure the External Low Speed oscillator (LSE) drive capability. + * @param __RCC_LSEDRIVE__ specifies the new state of the LSE drive capability. + * This parameter can be one of the following values: + * @arg @ref RCC_LSEDRIVE_LOW LSE oscillator low drive capability. + * @arg @ref RCC_LSEDRIVE_MEDIUMLOW LSE oscillator medium low drive capability. + * @arg @ref RCC_LSEDRIVE_MEDIUMHIGH LSE oscillator medium high drive capability. + * @arg @ref RCC_LSEDRIVE_HIGH LSE oscillator high drive capability. + * @retval None + */ +#define __HAL_RCC_LSEDRIVE_CONFIG(__RCC_LSEDRIVE__) (MODIFY_REG(RCC->BDCR,\ + RCC_BDCR_LSEDRV, (uint32_t)(__RCC_LSEDRIVE__) )) + +/** + * @} + */ + +#if defined(CRS) + +/** @defgroup RCCEx_IT_And_Flag RCCEx IT and Flag + * @{ + */ +/* Interrupt & Flag management */ + +/** + * @brief Enable the specified CRS interrupts. + * @param __INTERRUPT__ specifies the CRS interrupt sources to be enabled. + * This parameter can be any combination of the following values: + * @arg @ref RCC_CRS_IT_SYNCOK SYNC event OK interrupt + * @arg @ref RCC_CRS_IT_SYNCWARN SYNC warning interrupt + * @arg @ref RCC_CRS_IT_ERR Synchronization or trimming error interrupt + * @arg @ref RCC_CRS_IT_ESYNC Expected SYNC interrupt + * @retval None + */ +#define __HAL_RCC_CRS_ENABLE_IT(__INTERRUPT__) SET_BIT(CRS->CR, (__INTERRUPT__)) + +/** + * @brief Disable the specified CRS interrupts. + * @param __INTERRUPT__ specifies the CRS interrupt sources to be disabled. + * This parameter can be any combination of the following values: + * @arg @ref RCC_CRS_IT_SYNCOK SYNC event OK interrupt + * @arg @ref RCC_CRS_IT_SYNCWARN SYNC warning interrupt + * @arg @ref RCC_CRS_IT_ERR Synchronization or trimming error interrupt + * @arg @ref RCC_CRS_IT_ESYNC Expected SYNC interrupt + * @retval None + */ +#define __HAL_RCC_CRS_DISABLE_IT(__INTERRUPT__) CLEAR_BIT(CRS->CR, (__INTERRUPT__)) + +/** @brief Check whether the CRS interrupt has occurred or not. + * @param __INTERRUPT__ specifies the CRS interrupt source to check. + * This parameter can be one of the following values: + * @arg @ref RCC_CRS_IT_SYNCOK SYNC event OK interrupt + * @arg @ref RCC_CRS_IT_SYNCWARN SYNC warning interrupt + * @arg @ref RCC_CRS_IT_ERR Synchronization or trimming error interrupt + * @arg @ref RCC_CRS_IT_ESYNC Expected SYNC interrupt + * @retval The new state of __INTERRUPT__ (SET or RESET). + */ +#define __HAL_RCC_CRS_GET_IT_SOURCE(__INTERRUPT__) ((READ_BIT(CRS->CR, (__INTERRUPT__)) != RESET) ? SET : RESET) + +/** @brief Clear the CRS interrupt pending bits + * @param __INTERRUPT__ specifies the interrupt pending bit to clear. + * This parameter can be any combination of the following values: + * @arg @ref RCC_CRS_IT_SYNCOK SYNC event OK interrupt + * @arg @ref RCC_CRS_IT_SYNCWARN SYNC warning interrupt + * @arg @ref RCC_CRS_IT_ERR Synchronization or trimming error interrupt + * @arg @ref RCC_CRS_IT_ESYNC Expected SYNC interrupt + * @arg @ref RCC_CRS_IT_TRIMOVF Trimming overflow or underflow interrupt + * @arg @ref RCC_CRS_IT_SYNCERR SYNC error interrupt + * @arg @ref RCC_CRS_IT_SYNCMISS SYNC missed interrupt + */ +#define __HAL_RCC_CRS_CLEAR_IT(__INTERRUPT__) do { \ + if(((__INTERRUPT__) & RCC_CRS_IT_ERROR_MASK) != RESET) \ + { \ + WRITE_REG(CRS->ICR, CRS_ICR_ERRC | ((__INTERRUPT__) & ~RCC_CRS_IT_ERROR_MASK)); \ + } \ + else \ + { \ + WRITE_REG(CRS->ICR, (__INTERRUPT__)); \ + } \ + } while(0U) + +/** + * @brief Check whether the specified CRS flag is set or not. + * @param __FLAG__ specifies the flag to check. + * This parameter can be one of the following values: + * @arg @ref RCC_CRS_FLAG_SYNCOK SYNC event OK + * @arg @ref RCC_CRS_FLAG_SYNCWARN SYNC warning + * @arg @ref RCC_CRS_FLAG_ERR Error + * @arg @ref RCC_CRS_FLAG_ESYNC Expected SYNC + * @arg @ref RCC_CRS_FLAG_TRIMOVF Trimming overflow or underflow + * @arg @ref RCC_CRS_FLAG_SYNCERR SYNC error + * @arg @ref RCC_CRS_FLAG_SYNCMISS SYNC missed + * @retval The new state of _FLAG_ (TRUE or FALSE). + */ +#define __HAL_RCC_CRS_GET_FLAG(__FLAG__) (READ_BIT(CRS->ISR, (__FLAG__)) == (__FLAG__)) + +/** + * @brief Clear the CRS specified FLAG. + * @param __FLAG__ specifies the flag to clear. + * This parameter can be one of the following values: + * @arg @ref RCC_CRS_FLAG_SYNCOK SYNC event OK + * @arg @ref RCC_CRS_FLAG_SYNCWARN SYNC warning + * @arg @ref RCC_CRS_FLAG_ERR Error + * @arg @ref RCC_CRS_FLAG_ESYNC Expected SYNC + * @arg @ref RCC_CRS_FLAG_TRIMOVF Trimming overflow or underflow + * @arg @ref RCC_CRS_FLAG_SYNCERR SYNC error + * @arg @ref RCC_CRS_FLAG_SYNCMISS SYNC missed + * @note RCC_CRS_FLAG_ERR clears RCC_CRS_FLAG_TRIMOVF, RCC_CRS_FLAG_SYNCERR, RCC_CRS_FLAG_SYNCMISS and consequently RCC_CRS_FLAG_ERR + * @retval None + */ +#define __HAL_RCC_CRS_CLEAR_FLAG(__FLAG__) do { \ + if(((__FLAG__) & RCC_CRS_FLAG_ERROR_MASK) != RESET) \ + { \ + WRITE_REG(CRS->ICR, CRS_ICR_ERRC | ((__FLAG__) & ~RCC_CRS_FLAG_ERROR_MASK)); \ + } \ + else \ + { \ + WRITE_REG(CRS->ICR, (__FLAG__)); \ + } \ + } while(0U) + +/** + * @} + */ + +/** @defgroup RCCEx_CRS_Extended_Features RCCEx CRS Extended Features + * @{ + */ +/** + * @brief Enable the oscillator clock for frequency error counter. + * @note when the CEN bit is set the CRS_CFGR register becomes write-protected. + * @retval None + */ +#define __HAL_RCC_CRS_FREQ_ERROR_COUNTER_ENABLE() SET_BIT(CRS->CR, CRS_CR_CEN) + +/** + * @brief Disable the oscillator clock for frequency error counter. + * @retval None + */ +#define __HAL_RCC_CRS_FREQ_ERROR_COUNTER_DISABLE() CLEAR_BIT(CRS->CR, CRS_CR_CEN) + +/** + * @brief Enable the automatic hardware adjustment of TRIM bits. + * @note When the AUTOTRIMEN bit is set the CRS_CFGR register becomes write-protected. + * @retval None + */ +#define __HAL_RCC_CRS_AUTOMATIC_CALIB_ENABLE() SET_BIT(CRS->CR, CRS_CR_AUTOTRIMEN) + +/** + * @brief Disable the automatic hardware adjustment of TRIM bits. + * @retval None + */ +#define __HAL_RCC_CRS_AUTOMATIC_CALIB_DISABLE() CLEAR_BIT(CRS->CR, CRS_CR_AUTOTRIMEN) + +/** + * @brief Macro to calculate reload value to be set in CRS register according to target and sync frequencies + * @note The RELOAD value should be selected according to the ratio between the target frequency and the frequency + * of the synchronization source after prescaling. It is then decreased by one in order to + * reach the expected synchronization on the zero value. The formula is the following: + * RELOAD = (fTARGET / fSYNC) -1 + * @param __FTARGET__ Target frequency (value in Hz) + * @param __FSYNC__ Synchronization signal frequency (value in Hz) + * @retval None + */ +#define __HAL_RCC_CRS_RELOADVALUE_CALCULATE(__FTARGET__, __FSYNC__) (((__FTARGET__) / (__FSYNC__)) - 1U) + +/** + * @} + */ + +#endif /* CRS */ + +/** + * @} + */ + +/* 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(CRS) + +/** @addtogroup RCCEx_Exported_Functions_Group3 + * @{ + */ + +void HAL_RCCEx_CRSConfig(RCC_CRSInitTypeDef *pInit); +void HAL_RCCEx_CRSSoftwareSynchronizationGenerate(void); +void HAL_RCCEx_CRSGetSynchronizationInfo(RCC_CRSSynchroInfoTypeDef *pSynchroInfo); +uint32_t HAL_RCCEx_CRSWaitSynchronization(uint32_t Timeout); +void HAL_RCCEx_CRS_IRQHandler(void); +void HAL_RCCEx_CRS_SyncOkCallback(void); +void HAL_RCCEx_CRS_SyncWarnCallback(void); +void HAL_RCCEx_CRS_ExpectedSyncCallback(void); +void HAL_RCCEx_CRS_ErrorCallback(uint32_t Error); + +/** + * @} + */ + +#endif /* CRS */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F0xx_HAL_RCC_EX_H */ + diff --git a/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_tim.h b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_tim.h new file mode 100644 index 0000000..95a30eb --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_tim.h @@ -0,0 +1,2157 @@ +/** + ****************************************************************************** + * @file stm32f0xx_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 STM32F0xx_HAL_TIM_H +#define STM32F0xx_HAL_TIM_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f0xx_hal_def.h" + +/** @addtogroup STM32F0xx_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 */ +#define TIM_CLEARINPUTSOURCE_OCREFCLR 0x00000002U /*!< OCREF_CLR is connected to OCREF_CLR_INT */ +/** + * @} + */ + +/** @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) || \ + ((__MODE__) == TIM_CLEARINPUTSOURCE_OCREFCLR)) + +#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_PERIOD(__HANDLE__, __PERIOD__) \ + ((IS_TIM_32B_COUNTER_INSTANCE(((__HANDLE__)->Instance)) == 0U) ? (((__PERIOD__) > 0U) && ((__PERIOD__) <= 0x0000FFFFU)) : ((__PERIOD__) > 0U)) + +#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 "stm32f0xx_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, const 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, const 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, const 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, const 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, const TIM_OC_InitTypeDef *sConfig, + uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim, const TIM_OC_InitTypeDef *sConfig, + uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_IC_ConfigChannel(TIM_HandleTypeDef *htim, const 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, + const TIM_ClearInputConfigTypeDef *sClearInputConfig, + uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, const TIM_ClockConfigTypeDef *sClockSourceConfig); +HAL_StatusTypeDef HAL_TIM_ConfigTI1Input(TIM_HandleTypeDef *htim, uint32_t TI1_Selection); +HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro(TIM_HandleTypeDef *htim, const TIM_SlaveConfigTypeDef *sSlaveConfig); +HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro_IT(TIM_HandleTypeDef *htim, const TIM_SlaveConfigTypeDef *sSlaveConfig); +HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, + uint32_t BurstRequestSrc, const uint32_t *BurstBuffer, uint32_t BurstLength); +HAL_StatusTypeDef HAL_TIM_DMABurst_MultiWriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, + uint32_t BurstRequestSrc, const 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(const 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(const TIM_HandleTypeDef *htim); +HAL_TIM_StateTypeDef HAL_TIM_OC_GetState(const TIM_HandleTypeDef *htim); +HAL_TIM_StateTypeDef HAL_TIM_PWM_GetState(const TIM_HandleTypeDef *htim); +HAL_TIM_StateTypeDef HAL_TIM_IC_GetState(const TIM_HandleTypeDef *htim); +HAL_TIM_StateTypeDef HAL_TIM_OnePulse_GetState(const TIM_HandleTypeDef *htim); +HAL_TIM_StateTypeDef HAL_TIM_Encoder_GetState(const TIM_HandleTypeDef *htim); + +/* Peripheral Channel state functions ************************************************/ +HAL_TIM_ActiveChannel HAL_TIM_GetActiveChannel(const TIM_HandleTypeDef *htim); +HAL_TIM_ChannelStateTypeDef HAL_TIM_GetChannelState(const TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_TIM_DMABurstStateTypeDef HAL_TIM_DMABurstState(const TIM_HandleTypeDef *htim); +/** + * @} + */ + +/** + * @} + */ +/* End of exported functions -------------------------------------------------*/ + +/* Private functions----------------------------------------------------------*/ +/** @defgroup TIM_Private_Functions TIM Private Functions + * @{ + */ +void TIM_Base_SetConfig(TIM_TypeDef *TIMx, const 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, const 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 /* STM32F0xx_HAL_TIM_H */ diff --git a/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_tim_ex.h b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_tim_ex.h new file mode 100644 index 0000000..ed68e38 --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_tim_ex.h @@ -0,0 +1,267 @@ +/** + ****************************************************************************** + * @file stm32f0xx_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 STM32F0xx_HAL_TIM_EX_H +#define STM32F0xx_HAL_TIM_EX_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f0xx_hal_def.h" + +/** @addtogroup STM32F0xx_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 + * @{ + */ +#define TIM_TIM14_GPIO (0x00000000U) /*!< TIM14 TI1 is connected to GPIO */ +#define TIM_TIM14_RTC (0x00000001U) /*!< TIM14 TI1 is connected to RTC_clock */ +#define TIM_TIM14_HSE (0x00000002U) /*!< TIM14 TI1 is connected to HSE/32U */ +#define TIM_TIM14_MCO (0x00000003U) /*!< TIM14 TI1 is connected to MCO */ +/** + * @} + */ + +/** + * @} + */ +/* 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 + * @{ + */ +#define IS_TIM_REMAP(__INSTANCE__, __REMAP__) \ + (((__INSTANCE__) == TIM14) && (((__REMAP__) & 0xFFFFFFFCU) == 0x00000000U)) + +/** + * @} + */ +/* 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, const 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, const 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, const 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, + const TIM_MasterConfigTypeDef *sMasterConfig); +HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim, + const 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(const TIM_HandleTypeDef *htim); +HAL_TIM_ChannelStateTypeDef HAL_TIMEx_GetChannelNState(const 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 /* STM32F0xx_HAL_TIM_EX_H */ diff --git a/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart.h b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart.h new file mode 100644 index 0000000..ac8e1fe --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart.h @@ -0,0 +1,1672 @@ +/** + ****************************************************************************** + * @file stm32f0xx_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 STM32F0xx_HAL_UART_H +#define STM32F0xx_HAL_UART_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f0xx_hal_def.h" + +/** @addtogroup STM32F0xx_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 register is computed using the following formula: + - If oversampling is 16 or in LIN mode, + Baud Rate Register = ((uart_ker_ck) / ((huart->Init.BaudRate))) + - If oversampling is 8, + Baud Rate Register[15:4] = ((2 * uart_ker_ck) / + ((huart->Init.BaudRate)))[15:4] + Baud Rate Register[3] = 0 + Baud Rate Register[2:0] = (((2 * uart_ker_ck) / + ((huart->Init.BaudRate)))[3:0]) >> 1 + where uart_ker_ck is the UART input clock */ + + uint32_t WordLength; /*!< Specifies the number of data bits transmitted or received in a frame. + This parameter can be a value of @ref UARTEx_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 f_PCLK/8). + This parameter can be a value of @ref UART_Over_Sampling. */ + + uint32_t OneBitSampling; /*!< Specifies whether a single sample or three samples' majority vote is selected. + Selecting the single sample method increases the receiver tolerance to clock + deviations. This parameter can be a value of @ref UART_OneBit_Sampling. */ + + +} UART_InitTypeDef; + +/** + * @brief UART Advanced Features initialization structure definition + */ +typedef struct +{ + uint32_t AdvFeatureInit; /*!< Specifies which advanced UART features is initialized. Several + Advanced Features may be initialized at the same time . + This parameter can be a value of + @ref UART_Advanced_Features_Initialization_Type. */ + + uint32_t TxPinLevelInvert; /*!< Specifies whether the TX pin active level is inverted. + This parameter can be a value of @ref UART_Tx_Inv. */ + + uint32_t RxPinLevelInvert; /*!< Specifies whether the RX pin active level is inverted. + This parameter can be a value of @ref UART_Rx_Inv. */ + + uint32_t DataInvert; /*!< Specifies whether data are inverted (positive/direct logic + vs negative/inverted logic). + This parameter can be a value of @ref UART_Data_Inv. */ + + uint32_t Swap; /*!< Specifies whether TX and RX pins are swapped. + This parameter can be a value of @ref UART_Rx_Tx_Swap. */ + + uint32_t OverrunDisable; /*!< Specifies whether the reception overrun detection is disabled. + This parameter can be a value of @ref UART_Overrun_Disable. */ + + uint32_t DMADisableonRxError; /*!< Specifies whether the DMA is disabled in case of reception error. + This parameter can be a value of @ref UART_DMA_Disable_on_Rx_Error. */ + + uint32_t AutoBaudRateEnable; /*!< Specifies whether auto Baud rate detection is enabled. + This parameter can be a value of @ref UART_AutoBaudRate_Enable. */ + + uint32_t AutoBaudRateMode; /*!< If auto Baud rate detection is enabled, specifies how the rate + detection is carried out. + This parameter can be a value of @ref UART_AutoBaud_Rate_Mode. */ + + uint32_t MSBFirst; /*!< Specifies whether MSB is sent first on UART line. + This parameter can be a value of @ref UART_MSB_First. */ +} UART_AdvFeatureInitTypeDef; + +/** + * @brief HAL UART State definition + * @note HAL UART State value is a combination of 2 different substates: + * gState and RxState (see @ref UART_State_Definition). + * - 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 uint32_t HAL_UART_StateTypeDef; + +/** + * @brief UART clock sources definition + */ +typedef enum +{ + UART_CLOCKSOURCE_PCLK1 = 0x00U, /*!< PCLK1 clock source */ + UART_CLOCKSOURCE_HSI = 0x02U, /*!< HSI clock source */ + UART_CLOCKSOURCE_SYSCLK = 0x04U, /*!< SYSCLK clock source */ + UART_CLOCKSOURCE_LSE = 0x08U, /*!< LSE clock source */ + UART_CLOCKSOURCE_UNDEFINED = 0x10U /*!< Undefined clock source */ +} UART_ClockSourceTypeDef; + +/** + * @brief HAL UART Reception type definition + * @note HAL UART Reception type value aims to identify which type of Reception is ongoing. + * This parameter can be a value of @ref UART_Reception_Type_Values : + * HAL_UART_RECEPTION_STANDARD = 0x00U, + * HAL_UART_RECEPTION_TOIDLE = 0x01U, + * HAL_UART_RECEPTION_TORTO = 0x02U, + * HAL_UART_RECEPTION_TOCHARMATCH = 0x03U, + */ +typedef uint32_t HAL_UART_RxTypeTypeDef; + +/** + * @brief HAL UART Rx Event type definition + * @note HAL UART Rx Event type value aims to identify which type of Event has occurred + * leading to call of the RxEvent callback. + * This parameter can be a value of @ref UART_RxEvent_Type_Values : + * HAL_UART_RXEVENT_TC = 0x00U, + * HAL_UART_RXEVENT_HT = 0x01U, + * HAL_UART_RXEVENT_IDLE = 0x02U, + */ +typedef uint32_t HAL_UART_RxEventTypeTypeDef; + +/** + * @brief UART handle Structure definition + */ +typedef struct __UART_HandleTypeDef +{ + USART_TypeDef *Instance; /*!< UART registers base address */ + + UART_InitTypeDef Init; /*!< UART communication parameters */ + + UART_AdvFeatureInitTypeDef AdvancedInit; /*!< UART Advanced Features initialization 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 */ + + uint16_t Mask; /*!< UART Rx RDR register mask */ + + __IO HAL_UART_RxTypeTypeDef ReceptionType; /*!< Type of ongoing reception */ + + __IO HAL_UART_RxEventTypeTypeDef RxEventType; /*!< Type of Rx Event */ + + void (*RxISR)(struct __UART_HandleTypeDef *huart); /*!< Function pointer on Rx IRQ handler */ + + void (*TxISR)(struct __UART_HandleTypeDef *huart); /*!< Function pointer on Tx IRQ handler */ + + 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 */ +#if defined(USART_CR1_UESM) +#if defined(USART_CR3_WUFIE) + void (* WakeupCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Wakeup Callback */ +#endif /* USART_CR3_WUFIE */ +#endif /* USART_CR1_UESM */ + 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_State_Definition UART State Code Definition + * @{ + */ +#define HAL_UART_STATE_RESET 0x00000000U /*!< Peripheral is not initialized + Value is allowed for gState and RxState */ +#define HAL_UART_STATE_READY 0x00000020U /*!< Peripheral Initialized and ready for use + Value is allowed for gState and RxState */ +#define HAL_UART_STATE_BUSY 0x00000024U /*!< an internal process is ongoing + Value is allowed for gState only */ +#define HAL_UART_STATE_BUSY_TX 0x00000021U /*!< Data Transmission process is ongoing + Value is allowed for gState only */ +#define HAL_UART_STATE_BUSY_RX 0x00000022U /*!< Data Reception process is ongoing + Value is allowed for RxState only */ +#define HAL_UART_STATE_BUSY_TX_RX 0x00000023U /*!< 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 */ +#define HAL_UART_STATE_TIMEOUT 0x000000A0U /*!< Timeout state + Value is allowed for gState only */ +#define HAL_UART_STATE_ERROR 0x000000E0U /*!< Error + Value is allowed for gState only */ +/** + * @} + */ + +/** @defgroup UART_Error_Definition UART Error Definition + * @{ + */ +#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 */ +#define HAL_UART_ERROR_RTO (0x00000020U) /*!< Receiver Timeout error */ + +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) +#define HAL_UART_ERROR_INVALID_CALLBACK (0x00000040U) /*!< Invalid Callback error */ +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ +/** + * @} + */ + +/** @defgroup UART_Stop_Bits UART Number of Stop Bits + * @{ + */ +#define UART_STOPBITS_0_5 USART_CR2_STOP_0 /*!< UART frame with 0.5 stop bit */ +#define UART_STOPBITS_1 0x00000000U /*!< UART frame with 1 stop bit */ +#define UART_STOPBITS_1_5 (USART_CR2_STOP_0 | USART_CR2_STOP_1) /*!< UART frame with 1.5 stop bits */ +#define UART_STOPBITS_2 USART_CR2_STOP_1 /*!< UART frame with 2 stop bits */ +/** + * @} + */ + +/** @defgroup UART_Parity UART Parity + * @{ + */ +#define UART_PARITY_NONE 0x00000000U /*!< No parity */ +#define UART_PARITY_EVEN USART_CR1_PCE /*!< Even parity */ +#define UART_PARITY_ODD (USART_CR1_PCE | USART_CR1_PS) /*!< Odd parity */ +/** + * @} + */ + +/** @defgroup UART_Hardware_Flow_Control UART Hardware Flow Control + * @{ + */ +#define UART_HWCONTROL_NONE 0x00000000U /*!< No hardware control */ +#define UART_HWCONTROL_RTS USART_CR3_RTSE /*!< Request To Send */ +#define UART_HWCONTROL_CTS USART_CR3_CTSE /*!< Clear To Send */ +#define UART_HWCONTROL_RTS_CTS (USART_CR3_RTSE | USART_CR3_CTSE) /*!< Request and Clear To Send */ +/** + * @} + */ + +/** @defgroup UART_Mode UART Transfer Mode + * @{ + */ +#define UART_MODE_RX USART_CR1_RE /*!< RX mode */ +#define UART_MODE_TX USART_CR1_TE /*!< TX mode */ +#define UART_MODE_TX_RX (USART_CR1_TE |USART_CR1_RE) /*!< RX and TX mode */ +/** + * @} + */ + +/** @defgroup UART_State UART State + * @{ + */ +#define UART_STATE_DISABLE 0x00000000U /*!< UART disabled */ +#define UART_STATE_ENABLE USART_CR1_UE /*!< UART enabled */ +/** + * @} + */ + +/** @defgroup UART_Over_Sampling UART Over Sampling + * @{ + */ +#define UART_OVERSAMPLING_16 0x00000000U /*!< Oversampling by 16 */ +#define UART_OVERSAMPLING_8 USART_CR1_OVER8 /*!< Oversampling by 8 */ +/** + * @} + */ + +/** @defgroup UART_OneBit_Sampling UART One Bit Sampling Method + * @{ + */ +#define UART_ONE_BIT_SAMPLE_DISABLE 0x00000000U /*!< One-bit sampling disable */ +#define UART_ONE_BIT_SAMPLE_ENABLE USART_CR3_ONEBIT /*!< One-bit sampling enable */ +/** + * @} + */ + +/** @defgroup UART_AutoBaud_Rate_Mode UART Advanced Feature AutoBaud Rate Mode + * @{ + */ +#define UART_ADVFEATURE_AUTOBAUDRATE_ONSTARTBIT 0x00000000U /*!< Auto Baud rate detection + on start bit */ +#define UART_ADVFEATURE_AUTOBAUDRATE_ONFALLINGEDGE USART_CR2_ABRMODE_0 /*!< Auto Baud rate detection + on falling edge */ +#define UART_ADVFEATURE_AUTOBAUDRATE_ON0X7FFRAME USART_CR2_ABRMODE_1 /*!< Auto Baud rate detection + on 0x7F frame detection */ +#define UART_ADVFEATURE_AUTOBAUDRATE_ON0X55FRAME USART_CR2_ABRMODE /*!< Auto Baud rate detection + on 0x55 frame detection */ +/** + * @} + */ + +/** @defgroup UART_Receiver_Timeout UART Receiver Timeout + * @{ + */ +#define UART_RECEIVER_TIMEOUT_DISABLE 0x00000000U /*!< UART Receiver Timeout disable */ +#define UART_RECEIVER_TIMEOUT_ENABLE USART_CR2_RTOEN /*!< UART Receiver Timeout enable */ +/** + * @} + */ + +/** @defgroup UART_LIN UART Local Interconnection Network mode + * @{ + */ +#define UART_LIN_DISABLE 0x00000000U /*!< Local Interconnect Network disable */ +#define UART_LIN_ENABLE USART_CR2_LINEN /*!< Local Interconnect Network enable */ +/** + * @} + */ + +/** @defgroup UART_LIN_Break_Detection UART LIN Break Detection + * @{ + */ +#define UART_LINBREAKDETECTLENGTH_10B 0x00000000U /*!< LIN 10-bit break detection length */ +#define UART_LINBREAKDETECTLENGTH_11B USART_CR2_LBDL /*!< LIN 11-bit break detection length */ +/** + * @} + */ + +/** @defgroup UART_DMA_Tx UART DMA Tx + * @{ + */ +#define UART_DMA_TX_DISABLE 0x00000000U /*!< UART DMA TX disabled */ +#define UART_DMA_TX_ENABLE USART_CR3_DMAT /*!< UART DMA TX enabled */ +/** + * @} + */ + +/** @defgroup UART_DMA_Rx UART DMA Rx + * @{ + */ +#define UART_DMA_RX_DISABLE 0x00000000U /*!< UART DMA RX disabled */ +#define UART_DMA_RX_ENABLE USART_CR3_DMAR /*!< UART DMA RX enabled */ +/** + * @} + */ + +/** @defgroup UART_Half_Duplex_Selection UART Half Duplex Selection + * @{ + */ +#define UART_HALF_DUPLEX_DISABLE 0x00000000U /*!< UART half-duplex disabled */ +#define UART_HALF_DUPLEX_ENABLE USART_CR3_HDSEL /*!< UART half-duplex enabled */ +/** + * @} + */ + +/** @defgroup UART_WakeUp_Methods UART WakeUp Methods + * @{ + */ +#define UART_WAKEUPMETHOD_IDLELINE 0x00000000U /*!< UART wake-up on idle line */ +#define UART_WAKEUPMETHOD_ADDRESSMARK USART_CR1_WAKE /*!< UART wake-up on address mark */ +/** + * @} + */ + +/** @defgroup UART_Request_Parameters UART Request Parameters + * @{ + */ +#define UART_AUTOBAUD_REQUEST USART_RQR_ABRRQ /*!< Auto-Baud Rate Request */ +#define UART_SENDBREAK_REQUEST USART_RQR_SBKRQ /*!< Send Break Request */ +#define UART_MUTE_MODE_REQUEST USART_RQR_MMRQ /*!< Mute Mode Request */ +#define UART_RXDATA_FLUSH_REQUEST USART_RQR_RXFRQ /*!< Receive Data flush Request */ +#if defined(USART_RQR_TXFRQ) +#define UART_TXDATA_FLUSH_REQUEST USART_RQR_TXFRQ /*!< Transmit data flush Request */ +#endif /* USART_RQR_TXFRQ */ +/** + * @} + */ + +/** @defgroup UART_Advanced_Features_Initialization_Type UART Advanced Feature Initialization Type + * @{ + */ +#define UART_ADVFEATURE_NO_INIT 0x00000000U /*!< No advanced feature initialization */ +#define UART_ADVFEATURE_TXINVERT_INIT 0x00000001U /*!< TX pin active level inversion */ +#define UART_ADVFEATURE_RXINVERT_INIT 0x00000002U /*!< RX pin active level inversion */ +#define UART_ADVFEATURE_DATAINVERT_INIT 0x00000004U /*!< Binary data inversion */ +#define UART_ADVFEATURE_SWAP_INIT 0x00000008U /*!< TX/RX pins swap */ +#define UART_ADVFEATURE_RXOVERRUNDISABLE_INIT 0x00000010U /*!< RX overrun disable */ +#define UART_ADVFEATURE_DMADISABLEONERROR_INIT 0x00000020U /*!< DMA disable on Reception Error */ +#define UART_ADVFEATURE_AUTOBAUDRATE_INIT 0x00000040U /*!< Auto Baud rate detection initialization */ +#define UART_ADVFEATURE_MSBFIRST_INIT 0x00000080U /*!< Most significant bit sent/received first */ +/** + * @} + */ + +/** @defgroup UART_Tx_Inv UART Advanced Feature TX Pin Active Level Inversion + * @{ + */ +#define UART_ADVFEATURE_TXINV_DISABLE 0x00000000U /*!< TX pin active level inversion disable */ +#define UART_ADVFEATURE_TXINV_ENABLE USART_CR2_TXINV /*!< TX pin active level inversion enable */ +/** + * @} + */ + +/** @defgroup UART_Rx_Inv UART Advanced Feature RX Pin Active Level Inversion + * @{ + */ +#define UART_ADVFEATURE_RXINV_DISABLE 0x00000000U /*!< RX pin active level inversion disable */ +#define UART_ADVFEATURE_RXINV_ENABLE USART_CR2_RXINV /*!< RX pin active level inversion enable */ +/** + * @} + */ + +/** @defgroup UART_Data_Inv UART Advanced Feature Binary Data Inversion + * @{ + */ +#define UART_ADVFEATURE_DATAINV_DISABLE 0x00000000U /*!< Binary data inversion disable */ +#define UART_ADVFEATURE_DATAINV_ENABLE USART_CR2_DATAINV /*!< Binary data inversion enable */ +/** + * @} + */ + +/** @defgroup UART_Rx_Tx_Swap UART Advanced Feature RX TX Pins Swap + * @{ + */ +#define UART_ADVFEATURE_SWAP_DISABLE 0x00000000U /*!< TX/RX pins swap disable */ +#define UART_ADVFEATURE_SWAP_ENABLE USART_CR2_SWAP /*!< TX/RX pins swap enable */ +/** + * @} + */ + +/** @defgroup UART_Overrun_Disable UART Advanced Feature Overrun Disable + * @{ + */ +#define UART_ADVFEATURE_OVERRUN_ENABLE 0x00000000U /*!< RX overrun enable */ +#define UART_ADVFEATURE_OVERRUN_DISABLE USART_CR3_OVRDIS /*!< RX overrun disable */ +/** + * @} + */ + +/** @defgroup UART_AutoBaudRate_Enable UART Advanced Feature Auto BaudRate Enable + * @{ + */ +#define UART_ADVFEATURE_AUTOBAUDRATE_DISABLE 0x00000000U /*!< RX Auto Baud rate detection enable */ +#define UART_ADVFEATURE_AUTOBAUDRATE_ENABLE USART_CR2_ABREN /*!< RX Auto Baud rate detection disable */ +/** + * @} + */ + +/** @defgroup UART_DMA_Disable_on_Rx_Error UART Advanced Feature DMA Disable On Rx Error + * @{ + */ +#define UART_ADVFEATURE_DMA_ENABLEONRXERROR 0x00000000U /*!< DMA enable on Reception Error */ +#define UART_ADVFEATURE_DMA_DISABLEONRXERROR USART_CR3_DDRE /*!< DMA disable on Reception Error */ +/** + * @} + */ + +/** @defgroup UART_MSB_First UART Advanced Feature MSB First + * @{ + */ +#define UART_ADVFEATURE_MSBFIRST_DISABLE 0x00000000U /*!< Most significant bit sent/received + first disable */ +#define UART_ADVFEATURE_MSBFIRST_ENABLE USART_CR2_MSBFIRST /*!< Most significant bit sent/received + first enable */ +/** + * @} + */ +#if defined(USART_CR1_UESM) + +/** @defgroup UART_Stop_Mode_Enable UART Advanced Feature Stop Mode Enable + * @{ + */ +#define UART_ADVFEATURE_STOPMODE_DISABLE 0x00000000U /*!< UART stop mode disable */ +#define UART_ADVFEATURE_STOPMODE_ENABLE USART_CR1_UESM /*!< UART stop mode enable */ +/** + * @} + */ +#endif /* USART_CR1_UESM */ + +/** @defgroup UART_Mute_Mode UART Advanced Feature Mute Mode Enable + * @{ + */ +#define UART_ADVFEATURE_MUTEMODE_DISABLE 0x00000000U /*!< UART mute mode disable */ +#define UART_ADVFEATURE_MUTEMODE_ENABLE USART_CR1_MME /*!< UART mute mode enable */ +/** + * @} + */ + +/** @defgroup UART_CR2_ADDRESS_LSB_POS UART Address-matching LSB Position In CR2 Register + * @{ + */ +#define UART_CR2_ADDRESS_LSB_POS 24U /*!< UART address-matching LSB position in CR2 register */ +/** + * @} + */ +#if defined(USART_CR1_UESM) + +/** @defgroup UART_WakeUp_from_Stop_Selection UART WakeUp From Stop Selection + * @{ + */ +#if defined(USART_CR3_WUS) +#define UART_WAKEUP_ON_ADDRESS 0x00000000U /*!< UART wake-up on address */ +#define UART_WAKEUP_ON_STARTBIT USART_CR3_WUS_1 /*!< UART wake-up on start bit */ +#define UART_WAKEUP_ON_READDATA_NONEMPTY USART_CR3_WUS /*!< UART wake-up on receive data register + not empty or RXFIFO is not empty */ +#else +#define UART_WAKEUP_ON_ADDRESS 0x00000000U /*!< UART wake-up on address */ +#define UART_WAKEUP_ON_READDATA_NONEMPTY 0x00000001U /*!< UART wake-up on receive data register + not empty or RXFIFO is not empty */ +#endif /* USART_CR3_WUS */ +/** + * @} + */ +#endif /* USART_CR1_UESM */ + +/** @defgroup UART_DriverEnable_Polarity UART DriverEnable Polarity + * @{ + */ +#define UART_DE_POLARITY_HIGH 0x00000000U /*!< Driver enable signal is active high */ +#define UART_DE_POLARITY_LOW USART_CR3_DEP /*!< Driver enable signal is active low */ +/** + * @} + */ + +/** @defgroup UART_CR1_DEAT_ADDRESS_LSB_POS UART Driver Enable Assertion Time LSB Position In CR1 Register + * @{ + */ +#define UART_CR1_DEAT_ADDRESS_LSB_POS 21U /*!< UART Driver Enable assertion time LSB + position in CR1 register */ +/** + * @} + */ + +/** @defgroup UART_CR1_DEDT_ADDRESS_LSB_POS UART Driver Enable DeAssertion Time LSB Position In CR1 Register + * @{ + */ +#define UART_CR1_DEDT_ADDRESS_LSB_POS 16U /*!< UART Driver Enable de-assertion time LSB + position in CR1 register */ +/** + * @} + */ + +/** @defgroup UART_Interruption_Mask UART Interruptions Flag Mask + * @{ + */ +#define UART_IT_MASK 0x001FU /*!< UART interruptions flags mask */ +/** + * @} + */ + +/** @defgroup UART_TimeOut_Value UART polling-based communications time-out value + * @{ + */ +#define HAL_UART_TIMEOUT_VALUE 0x1FFFFFFU /*!< UART polling-based communications time-out value */ +/** + * @} + */ + +/** @defgroup UART_Flags UART Status Flags + * Elements values convention: 0xXXXX + * - 0xXXXX : Flag mask in the ISR register + * @{ + */ +#define UART_FLAG_REACK USART_ISR_REACK /*!< UART receive enable acknowledge flag */ +#define UART_FLAG_TEACK USART_ISR_TEACK /*!< UART transmit enable acknowledge flag */ +#if defined(USART_CR1_UESM) +#if defined(USART_CR3_WUFIE) +#define UART_FLAG_WUF USART_ISR_WUF /*!< UART wake-up from stop mode flag */ +#endif /* USART_CR3_WUFIE */ +#endif /* USART_CR1_UESM */ +#define UART_FLAG_RWU USART_ISR_RWU /*!< UART receiver wake-up from mute mode flag */ +#define UART_FLAG_SBKF USART_ISR_SBKF /*!< UART send break flag */ +#define UART_FLAG_CMF USART_ISR_CMF /*!< UART character match flag */ +#define UART_FLAG_BUSY USART_ISR_BUSY /*!< UART busy flag */ +#define UART_FLAG_ABRF USART_ISR_ABRF /*!< UART auto Baud rate flag */ +#define UART_FLAG_ABRE USART_ISR_ABRE /*!< UART auto Baud rate error */ +#define UART_FLAG_RTOF USART_ISR_RTOF /*!< UART receiver timeout flag */ +#define UART_FLAG_CTS USART_ISR_CTS /*!< UART clear to send flag */ +#define UART_FLAG_CTSIF USART_ISR_CTSIF /*!< UART clear to send interrupt flag */ +#define UART_FLAG_LBDF USART_ISR_LBDF /*!< UART LIN break detection flag */ +#define UART_FLAG_TXE USART_ISR_TXE /*!< UART transmit data register empty */ +#define UART_FLAG_TC USART_ISR_TC /*!< UART transmission complete */ +#define UART_FLAG_RXNE USART_ISR_RXNE /*!< UART read data register not empty */ +#define UART_FLAG_IDLE USART_ISR_IDLE /*!< UART idle flag */ +#define UART_FLAG_ORE USART_ISR_ORE /*!< UART overrun error */ +#define UART_FLAG_NE USART_ISR_NE /*!< UART noise error */ +#define UART_FLAG_FE USART_ISR_FE /*!< UART frame error */ +#define UART_FLAG_PE USART_ISR_PE /*!< UART parity error */ +/** + * @} + */ + +/** @defgroup UART_Interrupt_definition UART Interrupts Definition + * Elements values convention: 000ZZZZZ0XXYYYYYb + * - YYYYY : Interrupt source position in the XX register (5bits) + * - XX : Interrupt source register (2bits) + * - 01: CR1 register + * - 10: CR2 register + * - 11: CR3 register + * - ZZZZZ : Flag position in the ISR register(5bits) + * Elements values convention: 000000000XXYYYYYb + * - YYYYY : Interrupt source position in the XX register (5bits) + * - XX : Interrupt source register (2bits) + * - 01: CR1 register + * - 10: CR2 register + * - 11: CR3 register + * Elements values convention: 0000ZZZZ00000000b + * - ZZZZ : Flag position in the ISR register(4bits) + * @{ + */ +#define UART_IT_PE 0x0028U /*!< UART parity error interruption */ +#define UART_IT_TXE 0x0727U /*!< UART transmit data register empty interruption */ +#define UART_IT_TC 0x0626U /*!< UART transmission complete interruption */ +#define UART_IT_RXNE 0x0525U /*!< UART read data register not empty interruption */ +#define UART_IT_IDLE 0x0424U /*!< UART idle interruption */ +#define UART_IT_LBD 0x0846U /*!< UART LIN break detection interruption */ +#define UART_IT_CTS 0x096AU /*!< UART CTS interruption */ +#define UART_IT_CM 0x112EU /*!< UART character match interruption */ +#if defined(USART_CR1_UESM) +#if defined(USART_CR3_WUFIE) +#define UART_IT_WUF 0x1476U /*!< UART wake-up from stop mode interruption */ +#endif /* USART_CR3_WUFIE */ +#endif /* USART_CR1_UESM */ +#define UART_IT_RTO 0x0B3AU /*!< UART receiver timeout interruption */ + +#define UART_IT_ERR 0x0060U /*!< UART error interruption */ + +#define UART_IT_ORE 0x0300U /*!< UART overrun error interruption */ +#define UART_IT_NE 0x0200U /*!< UART noise error interruption */ +#define UART_IT_FE 0x0100U /*!< UART frame error interruption */ +/** + * @} + */ + +/** @defgroup UART_IT_CLEAR_Flags UART Interruption Clear Flags + * @{ + */ +#define UART_CLEAR_PEF USART_ICR_PECF /*!< Parity Error Clear Flag */ +#define UART_CLEAR_FEF USART_ICR_FECF /*!< Framing Error Clear Flag */ +#define UART_CLEAR_NEF USART_ICR_NCF /*!< Noise Error detected Clear Flag */ +#define UART_CLEAR_OREF USART_ICR_ORECF /*!< Overrun Error Clear Flag */ +#define UART_CLEAR_IDLEF USART_ICR_IDLECF /*!< IDLE line detected Clear Flag */ +#define UART_CLEAR_TCF USART_ICR_TCCF /*!< Transmission Complete Clear Flag */ +#define UART_CLEAR_LBDF USART_ICR_LBDCF /*!< LIN Break Detection Clear Flag */ +#define UART_CLEAR_CTSF USART_ICR_CTSCF /*!< CTS Interrupt Clear Flag */ +#define UART_CLEAR_CMF USART_ICR_CMCF /*!< Character Match Clear Flag */ +#if defined(USART_CR1_UESM) +#if defined(USART_CR3_WUFIE) +#define UART_CLEAR_WUF USART_ICR_WUCF /*!< Wake Up from stop mode Clear Flag */ +#endif /* USART_CR3_WUFIE */ +#endif /* USART_CR1_UESM */ +#define UART_CLEAR_RTOF USART_ICR_RTOCF /*!< UART receiver timeout clear flag */ +/** + * @} + */ + +/** @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 */ +#define HAL_UART_RECEPTION_TORTO (0x00000002U) /*!< Reception till completion or RTO event */ +#define HAL_UART_RECEPTION_TOCHARMATCH (0x00000003U) /*!< Reception till completion or CM event */ +/** + * @} + */ + +/** @defgroup UART_RxEvent_Type_Values UART RxEvent type values + * @{ + */ +#define HAL_UART_RXEVENT_TC (0x00000000U) /*!< RxEvent linked to Transfer Complete event */ +#define HAL_UART_RXEVENT_HT (0x00000001U) /*!< RxEvent linked to Half Transfer event */ +#define HAL_UART_RXEVENT_IDLE (0x00000002U) /*!< RxEvent linked to IDLE event */ +/** + * @} + */ + +/** + * @} + */ + +/* Exported macros -----------------------------------------------------------*/ +/** @defgroup UART_Exported_Macros UART Exported Macros + * @{ + */ + +/** @brief Reset UART handle states. + * @param __HANDLE__ UART handle. + * @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 Flush the UART Data registers. + * @param __HANDLE__ specifies the UART Handle. + * @retval None + */ +#if defined(USART_RQR_TXFRQ) +#define __HAL_UART_FLUSH_DRREGISTER(__HANDLE__) \ + do{ \ + SET_BIT((__HANDLE__)->Instance->RQR, UART_RXDATA_FLUSH_REQUEST); \ + SET_BIT((__HANDLE__)->Instance->RQR, UART_TXDATA_FLUSH_REQUEST); \ + } while(0U) +#else +#define __HAL_UART_FLUSH_DRREGISTER(__HANDLE__) \ + do{ \ + SET_BIT((__HANDLE__)->Instance->RQR, UART_RXDATA_FLUSH_REQUEST); \ + } while(0U) +#endif /* USART_RQR_TXFRQ */ + +/** @brief Clear the specified UART pending flag. + * @param __HANDLE__ specifies the UART Handle. + * @param __FLAG__ specifies the flag to check. + * This parameter can be any combination of the following values: + * @arg @ref UART_CLEAR_PEF Parity Error Clear Flag + * @arg @ref UART_CLEAR_FEF Framing Error Clear Flag + * @arg @ref UART_CLEAR_NEF Noise detected Clear Flag + * @arg @ref UART_CLEAR_OREF Overrun Error Clear Flag + * @arg @ref UART_CLEAR_IDLEF IDLE line detected Clear Flag + * @arg @ref UART_CLEAR_TCF Transmission Complete Clear Flag + * @arg @ref UART_CLEAR_RTOF Receiver Timeout clear flag + * @arg @ref UART_CLEAR_LBDF LIN Break Detection Clear Flag + * @arg @ref UART_CLEAR_CTSF CTS Interrupt Clear Flag + * @arg @ref UART_CLEAR_CMF Character Match Clear Flag +#if defined(USART_CR1_UESM) +#if defined(USART_CR3_WUFIE) + * @arg @ref UART_CLEAR_WUF Wake Up from stop mode Clear Flag +#endif +#endif + * @retval None + */ +#define __HAL_UART_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->ICR = (__FLAG__)) + +/** @brief Clear the UART PE pending flag. + * @param __HANDLE__ specifies the UART Handle. + * @retval None + */ +#define __HAL_UART_CLEAR_PEFLAG(__HANDLE__) __HAL_UART_CLEAR_FLAG((__HANDLE__), UART_CLEAR_PEF) + +/** @brief Clear the UART FE pending flag. + * @param __HANDLE__ specifies the UART Handle. + * @retval None + */ +#define __HAL_UART_CLEAR_FEFLAG(__HANDLE__) __HAL_UART_CLEAR_FLAG((__HANDLE__), UART_CLEAR_FEF) + +/** @brief Clear the UART NE pending flag. + * @param __HANDLE__ specifies the UART Handle. + * @retval None + */ +#define __HAL_UART_CLEAR_NEFLAG(__HANDLE__) __HAL_UART_CLEAR_FLAG((__HANDLE__), UART_CLEAR_NEF) + +/** @brief Clear the UART ORE pending flag. + * @param __HANDLE__ specifies the UART Handle. + * @retval None + */ +#define __HAL_UART_CLEAR_OREFLAG(__HANDLE__) __HAL_UART_CLEAR_FLAG((__HANDLE__), UART_CLEAR_OREF) + +/** @brief Clear the UART IDLE pending flag. + * @param __HANDLE__ specifies the UART Handle. + * @retval None + */ +#define __HAL_UART_CLEAR_IDLEFLAG(__HANDLE__) __HAL_UART_CLEAR_FLAG((__HANDLE__), UART_CLEAR_IDLEF) + + +/** @brief Check whether the specified UART flag is set or not. + * @param __HANDLE__ specifies the UART Handle. + * @param __FLAG__ specifies the flag to check. + * This parameter can be one of the following values: + * @arg @ref UART_FLAG_REACK Receive enable acknowledge flag + * @arg @ref UART_FLAG_TEACK Transmit enable acknowledge flag +#if defined(USART_CR1_UESM) +#if defined(USART_CR3_WUFIE) + * @arg @ref UART_FLAG_WUF Wake up from stop mode flag +#endif +#endif + * @arg @ref UART_FLAG_RWU Receiver wake up flag (if the UART in mute mode) + * @arg @ref UART_FLAG_SBKF Send Break flag + * @arg @ref UART_FLAG_CMF Character match flag + * @arg @ref UART_FLAG_BUSY Busy flag + * @arg @ref UART_FLAG_ABRF Auto Baud rate detection flag + * @arg @ref UART_FLAG_ABRE Auto Baud rate detection error flag + * @arg @ref UART_FLAG_CTS CTS Change flag + * @arg @ref UART_FLAG_LBDF LIN Break detection flag + * @arg @ref UART_FLAG_TXE Transmit data register empty flag + * @arg @ref UART_FLAG_TC Transmission Complete flag + * @arg @ref UART_FLAG_RXNE Receive data register not empty flag + * @arg @ref UART_FLAG_RTOF Receiver Timeout flag + * @arg @ref UART_FLAG_IDLE Idle Line detection flag + * @arg @ref UART_FLAG_ORE Overrun Error flag + * @arg @ref UART_FLAG_NE Noise Error flag + * @arg @ref UART_FLAG_FE Framing Error flag + * @arg @ref UART_FLAG_PE Parity Error flag + * @retval The new state of __FLAG__ (TRUE or FALSE). + */ +#define __HAL_UART_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->ISR & (__FLAG__)) == (__FLAG__)) + +/** @brief Enable the specified UART interrupt. + * @param __HANDLE__ specifies the UART Handle. + * @param __INTERRUPT__ specifies the UART interrupt source to enable. + * This parameter can be one of the following values: +#if defined(USART_CR1_UESM) +#if defined(USART_CR3_WUFIE) + * @arg @ref UART_IT_WUF Wakeup from stop mode interrupt +#endif +#endif + * @arg @ref UART_IT_CM Character match interrupt + * @arg @ref UART_IT_CTS CTS change interrupt + * @arg @ref UART_IT_LBD LIN Break detection interrupt + * @arg @ref UART_IT_TXE Transmit Data Register empty interrupt + * @arg @ref UART_IT_TC Transmission complete interrupt + * @arg @ref UART_IT_RXNE Receive Data register not empty interrupt + * @arg @ref UART_IT_RTO Receive Timeout interrupt + * @arg @ref UART_IT_IDLE Idle line detection interrupt + * @arg @ref UART_IT_PE Parity Error interrupt + * @arg @ref UART_IT_ERR Error interrupt (frame error, noise error, overrun error) + * @retval None + */ +#define __HAL_UART_ENABLE_IT(__HANDLE__, __INTERRUPT__) (\ + ((((uint8_t)(__INTERRUPT__)) >> 5U) == 1U)?\ + ((__HANDLE__)->Instance->CR1 |= (1U <<\ + ((__INTERRUPT__) & UART_IT_MASK))): \ + ((((uint8_t)(__INTERRUPT__)) >> 5U) == 2U)?\ + ((__HANDLE__)->Instance->CR2 |= (1U <<\ + ((__INTERRUPT__) & UART_IT_MASK))): \ + ((__HANDLE__)->Instance->CR3 |= (1U <<\ + ((__INTERRUPT__) & UART_IT_MASK)))) + +/** @brief Disable the specified UART interrupt. + * @param __HANDLE__ specifies the UART Handle. + * @param __INTERRUPT__ specifies the UART interrupt source to disable. + * This parameter can be one of the following values: +#if defined(USART_CR1_UESM) +#if defined(USART_CR3_WUFIE) + * @arg @ref UART_IT_WUF Wakeup from stop mode interrupt +#endif +#endif + * @arg @ref UART_IT_CM Character match interrupt + * @arg @ref UART_IT_CTS CTS change interrupt + * @arg @ref UART_IT_LBD LIN Break detection interrupt + * @arg @ref UART_IT_TXE Transmit Data Register empty interrupt + * @arg @ref UART_IT_TC Transmission complete interrupt + * @arg @ref UART_IT_RXNE Receive Data register not empty interrupt + * @arg @ref UART_IT_RTO Receive Timeout interrupt + * @arg @ref UART_IT_IDLE Idle line detection interrupt + * @arg @ref UART_IT_PE Parity Error interrupt + * @arg @ref UART_IT_ERR Error interrupt (Frame error, noise error, overrun error) + * @retval None + */ +#define __HAL_UART_DISABLE_IT(__HANDLE__, __INTERRUPT__) (\ + ((((uint8_t)(__INTERRUPT__)) >> 5U) == 1U)?\ + ((__HANDLE__)->Instance->CR1 &= ~ (1U <<\ + ((__INTERRUPT__) & UART_IT_MASK))): \ + ((((uint8_t)(__INTERRUPT__)) >> 5U) == 2U)?\ + ((__HANDLE__)->Instance->CR2 &= ~ (1U <<\ + ((__INTERRUPT__) & UART_IT_MASK))): \ + ((__HANDLE__)->Instance->CR3 &= ~ (1U <<\ + ((__INTERRUPT__) & UART_IT_MASK)))) + +/** @brief Check whether the specified UART interrupt has occurred or not. + * @param __HANDLE__ specifies the UART Handle. + * @param __INTERRUPT__ specifies the UART interrupt to check. + * This parameter can be one of the following values: +#if defined(USART_CR1_UESM) +#if defined(USART_CR3_WUFIE) + * @arg @ref UART_IT_WUF Wakeup from stop mode interrupt +#endif +#endif + * @arg @ref UART_IT_CM Character match interrupt + * @arg @ref UART_IT_CTS CTS change interrupt + * @arg @ref UART_IT_LBD LIN Break detection interrupt + * @arg @ref UART_IT_TXE Transmit Data Register empty interrupt + * @arg @ref UART_IT_TC Transmission complete interrupt + * @arg @ref UART_IT_RXNE Receive Data register not empty interrupt + * @arg @ref UART_IT_RTO Receive Timeout interrupt + * @arg @ref UART_IT_IDLE Idle line detection interrupt + * @arg @ref UART_IT_PE Parity Error interrupt + * @arg @ref UART_IT_ERR Error interrupt (Frame error, noise error, overrun error) + * @retval The new state of __INTERRUPT__ (SET or RESET). + */ +#define __HAL_UART_GET_IT(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->ISR\ + & (1U << ((__INTERRUPT__)>> 8U))) != RESET) ? SET : RESET) + +/** @brief Check whether the specified UART interrupt source is enabled or not. + * @param __HANDLE__ specifies the UART Handle. + * @param __INTERRUPT__ specifies the UART interrupt source to check. + * This parameter can be one of the following values: +#if defined(USART_CR1_UESM) +#if defined(USART_CR3_WUFIE) + * @arg @ref UART_IT_WUF Wakeup from stop mode interrupt +#endif +#endif + * @arg @ref UART_IT_CM Character match interrupt + * @arg @ref UART_IT_CTS CTS change interrupt + * @arg @ref UART_IT_LBD LIN Break detection interrupt + * @arg @ref UART_IT_TXE Transmit Data Register empty interrupt + * @arg @ref UART_IT_TC Transmission complete interrupt + * @arg @ref UART_IT_RXNE Receive Data register not empty interrupt + * @arg @ref UART_IT_RTO Receive Timeout interrupt + * @arg @ref UART_IT_IDLE Idle line detection interrupt + * @arg @ref UART_IT_PE Parity Error interrupt + * @arg @ref UART_IT_ERR Error interrupt (Frame error, noise error, overrun error) + * @retval The new state of __INTERRUPT__ (SET or RESET). + */ +#define __HAL_UART_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((((((uint8_t)(__INTERRUPT__)) >> 5U) == 1U) ?\ + (__HANDLE__)->Instance->CR1 : \ + (((((uint8_t)(__INTERRUPT__)) >> 5U) == 2U) ?\ + (__HANDLE__)->Instance->CR2 : \ + (__HANDLE__)->Instance->CR3)) & (1U <<\ + (((uint16_t)(__INTERRUPT__)) &\ + UART_IT_MASK))) != RESET) ? SET : RESET) + +/** @brief Clear the specified UART ISR flag, in setting the proper ICR register flag. + * @param __HANDLE__ specifies the UART Handle. + * @param __IT_CLEAR__ specifies the interrupt clear register flag that needs to be set + * to clear the corresponding interrupt + * This parameter can be one of the following values: + * @arg @ref UART_CLEAR_PEF Parity Error Clear Flag + * @arg @ref UART_CLEAR_FEF Framing Error Clear Flag + * @arg @ref UART_CLEAR_NEF Noise detected Clear Flag + * @arg @ref UART_CLEAR_OREF Overrun Error Clear Flag + * @arg @ref UART_CLEAR_IDLEF IDLE line detected Clear Flag + * @arg @ref UART_CLEAR_RTOF Receiver timeout clear flag + * @arg @ref UART_CLEAR_TCF Transmission Complete Clear Flag + * @arg @ref UART_CLEAR_LBDF LIN Break Detection Clear Flag + * @arg @ref UART_CLEAR_CTSF CTS Interrupt Clear Flag + * @arg @ref UART_CLEAR_CMF Character Match Clear Flag +#if defined(USART_CR1_UESM) +#if defined(USART_CR3_WUFIE) + * @arg @ref UART_CLEAR_WUF Wake Up from stop mode Clear Flag +#endif +#endif + * @retval None + */ +#define __HAL_UART_CLEAR_IT(__HANDLE__, __IT_CLEAR__) ((__HANDLE__)->Instance->ICR = (uint32_t)(__IT_CLEAR__)) + +/** @brief Set a specific UART request flag. + * @param __HANDLE__ specifies the UART Handle. + * @param __REQ__ specifies the request flag to set + * This parameter can be one of the following values: + * @arg @ref UART_AUTOBAUD_REQUEST Auto-Baud Rate Request + * @arg @ref UART_SENDBREAK_REQUEST Send Break Request + * @arg @ref UART_MUTE_MODE_REQUEST Mute Mode Request + * @arg @ref UART_RXDATA_FLUSH_REQUEST Receive Data flush Request +#if defined(USART_RQR_TXFRQ) + * @arg @ref UART_TXDATA_FLUSH_REQUEST Transmit data flush Request +#endif + * @retval None + */ +#define __HAL_UART_SEND_REQ(__HANDLE__, __REQ__) ((__HANDLE__)->Instance->RQR |= (uint16_t)(__REQ__)) + +/** @brief Enable the UART 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 Disable the UART one bit sample method. + * @param __HANDLE__ specifies the UART Handle. + * @retval None + */ +#define __HAL_UART_ONE_BIT_SAMPLE_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR3 &= ~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) + +/** @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. + * @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. + * @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. + * @note 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. + * @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. + * @note 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. + * @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) +/** + * @} + */ + +/* Private macros --------------------------------------------------------*/ +/** @defgroup UART_Private_Macros UART Private Macros + * @{ + */ + + +/** @brief BRR division operation to set BRR register in 8-bit oversampling mode. + * @param __PCLK__ UART clock. + * @param __BAUD__ Baud rate set by the user. + * @retval Division result + */ +#define UART_DIV_SAMPLING8(__PCLK__, __BAUD__) ((((__PCLK__)*2U) + ((__BAUD__)/2U)) / (__BAUD__)) + +/** @brief BRR division operation to set BRR register in 16-bit oversampling mode. + * @param __PCLK__ UART clock. + * @param __BAUD__ Baud rate set by the user. + * @retval Division result + */ +#define UART_DIV_SAMPLING16(__PCLK__, __BAUD__) (((__PCLK__) + ((__BAUD__)/2U)) / (__BAUD__)) + + +/** @brief Check UART Baud rate. + * @param __BAUDRATE__ Baudrate specified by the user. + * The maximum Baud Rate is derived from the maximum clock on F0 (i.e. 48 MHz) + * divided by the smallest oversampling used on the USART (i.e. 8) + * @retval SET (__BAUDRATE__ is valid) or RESET (__BAUDRATE__ is invalid) + */ +#define IS_UART_BAUDRATE(__BAUDRATE__) ((__BAUDRATE__) < 6000001U) + +/** @brief Check UART assertion time. + * @param __TIME__ 5-bit value assertion time. + * @retval Test result (TRUE or FALSE). + */ +#define IS_UART_ASSERTIONTIME(__TIME__) ((__TIME__) <= 0x1FU) + +/** @brief Check UART deassertion time. + * @param __TIME__ 5-bit value deassertion time. + * @retval Test result (TRUE or FALSE). + */ +#define IS_UART_DEASSERTIONTIME(__TIME__) ((__TIME__) <= 0x1FU) + +/** + * @brief Ensure that UART frame number of stop bits is valid. + * @param __STOPBITS__ UART frame number of stop bits. + * @retval SET (__STOPBITS__ is valid) or RESET (__STOPBITS__ is invalid) + */ +#define IS_UART_STOPBITS(__STOPBITS__) (((__STOPBITS__) == UART_STOPBITS_0_5) || \ + ((__STOPBITS__) == UART_STOPBITS_1) || \ + ((__STOPBITS__) == UART_STOPBITS_1_5) || \ + ((__STOPBITS__) == UART_STOPBITS_2)) + + +/** + * @brief Ensure that UART frame parity is valid. + * @param __PARITY__ UART frame parity. + * @retval SET (__PARITY__ is valid) or RESET (__PARITY__ is invalid) + */ +#define IS_UART_PARITY(__PARITY__) (((__PARITY__) == UART_PARITY_NONE) || \ + ((__PARITY__) == UART_PARITY_EVEN) || \ + ((__PARITY__) == UART_PARITY_ODD)) + +/** + * @brief Ensure that UART hardware flow control is valid. + * @param __CONTROL__ UART hardware flow control. + * @retval SET (__CONTROL__ is valid) or RESET (__CONTROL__ is invalid) + */ +#define IS_UART_HARDWARE_FLOW_CONTROL(__CONTROL__)\ + (((__CONTROL__) == UART_HWCONTROL_NONE) || \ + ((__CONTROL__) == UART_HWCONTROL_RTS) || \ + ((__CONTROL__) == UART_HWCONTROL_CTS) || \ + ((__CONTROL__) == UART_HWCONTROL_RTS_CTS)) + +/** + * @brief Ensure that UART communication mode is valid. + * @param __MODE__ UART communication mode. + * @retval SET (__MODE__ is valid) or RESET (__MODE__ is invalid) + */ +#define IS_UART_MODE(__MODE__) ((((__MODE__) & (~((uint32_t)(UART_MODE_TX_RX)))) == 0x00U) && ((__MODE__) != 0x00U)) + +/** + * @brief Ensure that UART state is valid. + * @param __STATE__ UART state. + * @retval SET (__STATE__ is valid) or RESET (__STATE__ is invalid) + */ +#define IS_UART_STATE(__STATE__) (((__STATE__) == UART_STATE_DISABLE) || \ + ((__STATE__) == UART_STATE_ENABLE)) + +/** + * @brief Ensure that UART oversampling is valid. + * @param __SAMPLING__ UART oversampling. + * @retval SET (__SAMPLING__ is valid) or RESET (__SAMPLING__ is invalid) + */ +#define IS_UART_OVERSAMPLING(__SAMPLING__) (((__SAMPLING__) == UART_OVERSAMPLING_16) || \ + ((__SAMPLING__) == UART_OVERSAMPLING_8)) + +/** + * @brief Ensure that UART frame sampling is valid. + * @param __ONEBIT__ UART frame sampling. + * @retval SET (__ONEBIT__ is valid) or RESET (__ONEBIT__ is invalid) + */ +#define IS_UART_ONE_BIT_SAMPLE(__ONEBIT__) (((__ONEBIT__) == UART_ONE_BIT_SAMPLE_DISABLE) || \ + ((__ONEBIT__) == UART_ONE_BIT_SAMPLE_ENABLE)) + +/** + * @brief Ensure that UART auto Baud rate detection mode is valid. + * @param __MODE__ UART auto Baud rate detection mode. + * @retval SET (__MODE__ is valid) or RESET (__MODE__ is invalid) + */ +#define IS_UART_ADVFEATURE_AUTOBAUDRATEMODE(__MODE__) (((__MODE__) == UART_ADVFEATURE_AUTOBAUDRATE_ONSTARTBIT) || \ + ((__MODE__) == UART_ADVFEATURE_AUTOBAUDRATE_ONFALLINGEDGE) || \ + ((__MODE__) == UART_ADVFEATURE_AUTOBAUDRATE_ON0X7FFRAME) || \ + ((__MODE__) == UART_ADVFEATURE_AUTOBAUDRATE_ON0X55FRAME)) + +/** + * @brief Ensure that UART receiver timeout setting is valid. + * @param __TIMEOUT__ UART receiver timeout setting. + * @retval SET (__TIMEOUT__ is valid) or RESET (__TIMEOUT__ is invalid) + */ +#define IS_UART_RECEIVER_TIMEOUT(__TIMEOUT__) (((__TIMEOUT__) == UART_RECEIVER_TIMEOUT_DISABLE) || \ + ((__TIMEOUT__) == UART_RECEIVER_TIMEOUT_ENABLE)) + +/** @brief Check the receiver timeout value. + * @note The maximum UART receiver timeout value is 0xFFFFFF. + * @param __TIMEOUTVALUE__ receiver timeout value. + * @retval Test result (TRUE or FALSE) + */ +#define IS_UART_RECEIVER_TIMEOUT_VALUE(__TIMEOUTVALUE__) ((__TIMEOUTVALUE__) <= 0xFFFFFFU) + +/** + * @brief Ensure that UART LIN state is valid. + * @param __LIN__ UART LIN state. + * @retval SET (__LIN__ is valid) or RESET (__LIN__ is invalid) + */ +#define IS_UART_LIN(__LIN__) (((__LIN__) == UART_LIN_DISABLE) || \ + ((__LIN__) == UART_LIN_ENABLE)) + +/** + * @brief Ensure that UART LIN break detection length is valid. + * @param __LENGTH__ UART LIN break detection length. + * @retval SET (__LENGTH__ is valid) or RESET (__LENGTH__ is invalid) + */ +#define IS_UART_LIN_BREAK_DETECT_LENGTH(__LENGTH__) (((__LENGTH__) == UART_LINBREAKDETECTLENGTH_10B) || \ + ((__LENGTH__) == UART_LINBREAKDETECTLENGTH_11B)) + +/** + * @brief Ensure that UART DMA TX state is valid. + * @param __DMATX__ UART DMA TX state. + * @retval SET (__DMATX__ is valid) or RESET (__DMATX__ is invalid) + */ +#define IS_UART_DMA_TX(__DMATX__) (((__DMATX__) == UART_DMA_TX_DISABLE) || \ + ((__DMATX__) == UART_DMA_TX_ENABLE)) + +/** + * @brief Ensure that UART DMA RX state is valid. + * @param __DMARX__ UART DMA RX state. + * @retval SET (__DMARX__ is valid) or RESET (__DMARX__ is invalid) + */ +#define IS_UART_DMA_RX(__DMARX__) (((__DMARX__) == UART_DMA_RX_DISABLE) || \ + ((__DMARX__) == UART_DMA_RX_ENABLE)) + +/** + * @brief Ensure that UART half-duplex state is valid. + * @param __HDSEL__ UART half-duplex state. + * @retval SET (__HDSEL__ is valid) or RESET (__HDSEL__ is invalid) + */ +#define IS_UART_HALF_DUPLEX(__HDSEL__) (((__HDSEL__) == UART_HALF_DUPLEX_DISABLE) || \ + ((__HDSEL__) == UART_HALF_DUPLEX_ENABLE)) + +/** + * @brief Ensure that UART wake-up method is valid. + * @param __WAKEUP__ UART wake-up method . + * @retval SET (__WAKEUP__ is valid) or RESET (__WAKEUP__ is invalid) + */ +#define IS_UART_WAKEUPMETHOD(__WAKEUP__) (((__WAKEUP__) == UART_WAKEUPMETHOD_IDLELINE) || \ + ((__WAKEUP__) == UART_WAKEUPMETHOD_ADDRESSMARK)) + +/** + * @brief Ensure that UART request parameter is valid. + * @param __PARAM__ UART request parameter. + * @retval SET (__PARAM__ is valid) or RESET (__PARAM__ is invalid) + */ +#if defined(USART_RQR_TXFRQ) +#define IS_UART_REQUEST_PARAMETER(__PARAM__) (((__PARAM__) == UART_AUTOBAUD_REQUEST) || \ + ((__PARAM__) == UART_SENDBREAK_REQUEST) || \ + ((__PARAM__) == UART_MUTE_MODE_REQUEST) || \ + ((__PARAM__) == UART_RXDATA_FLUSH_REQUEST) || \ + ((__PARAM__) == UART_TXDATA_FLUSH_REQUEST)) +#else +#define IS_UART_REQUEST_PARAMETER(__PARAM__) (((__PARAM__) == UART_AUTOBAUD_REQUEST) || \ + ((__PARAM__) == UART_SENDBREAK_REQUEST) || \ + ((__PARAM__) == UART_MUTE_MODE_REQUEST) || \ + ((__PARAM__) == UART_RXDATA_FLUSH_REQUEST)) +#endif /* USART_RQR_TXFRQ */ + +/** + * @brief Ensure that UART advanced features initialization is valid. + * @param __INIT__ UART advanced features initialization. + * @retval SET (__INIT__ is valid) or RESET (__INIT__ is invalid) + */ +#define IS_UART_ADVFEATURE_INIT(__INIT__) ((__INIT__) <= (UART_ADVFEATURE_NO_INIT | \ + UART_ADVFEATURE_TXINVERT_INIT | \ + UART_ADVFEATURE_RXINVERT_INIT | \ + UART_ADVFEATURE_DATAINVERT_INIT | \ + UART_ADVFEATURE_SWAP_INIT | \ + UART_ADVFEATURE_RXOVERRUNDISABLE_INIT | \ + UART_ADVFEATURE_DMADISABLEONERROR_INIT | \ + UART_ADVFEATURE_AUTOBAUDRATE_INIT | \ + UART_ADVFEATURE_MSBFIRST_INIT)) + +/** + * @brief Ensure that UART frame TX inversion setting is valid. + * @param __TXINV__ UART frame TX inversion setting. + * @retval SET (__TXINV__ is valid) or RESET (__TXINV__ is invalid) + */ +#define IS_UART_ADVFEATURE_TXINV(__TXINV__) (((__TXINV__) == UART_ADVFEATURE_TXINV_DISABLE) || \ + ((__TXINV__) == UART_ADVFEATURE_TXINV_ENABLE)) + +/** + * @brief Ensure that UART frame RX inversion setting is valid. + * @param __RXINV__ UART frame RX inversion setting. + * @retval SET (__RXINV__ is valid) or RESET (__RXINV__ is invalid) + */ +#define IS_UART_ADVFEATURE_RXINV(__RXINV__) (((__RXINV__) == UART_ADVFEATURE_RXINV_DISABLE) || \ + ((__RXINV__) == UART_ADVFEATURE_RXINV_ENABLE)) + +/** + * @brief Ensure that UART frame data inversion setting is valid. + * @param __DATAINV__ UART frame data inversion setting. + * @retval SET (__DATAINV__ is valid) or RESET (__DATAINV__ is invalid) + */ +#define IS_UART_ADVFEATURE_DATAINV(__DATAINV__) (((__DATAINV__) == UART_ADVFEATURE_DATAINV_DISABLE) || \ + ((__DATAINV__) == UART_ADVFEATURE_DATAINV_ENABLE)) + +/** + * @brief Ensure that UART frame RX/TX pins swap setting is valid. + * @param __SWAP__ UART frame RX/TX pins swap setting. + * @retval SET (__SWAP__ is valid) or RESET (__SWAP__ is invalid) + */ +#define IS_UART_ADVFEATURE_SWAP(__SWAP__) (((__SWAP__) == UART_ADVFEATURE_SWAP_DISABLE) || \ + ((__SWAP__) == UART_ADVFEATURE_SWAP_ENABLE)) + +/** + * @brief Ensure that UART frame overrun setting is valid. + * @param __OVERRUN__ UART frame overrun setting. + * @retval SET (__OVERRUN__ is valid) or RESET (__OVERRUN__ is invalid) + */ +#define IS_UART_OVERRUN(__OVERRUN__) (((__OVERRUN__) == UART_ADVFEATURE_OVERRUN_ENABLE) || \ + ((__OVERRUN__) == UART_ADVFEATURE_OVERRUN_DISABLE)) + +/** + * @brief Ensure that UART auto Baud rate state is valid. + * @param __AUTOBAUDRATE__ UART auto Baud rate state. + * @retval SET (__AUTOBAUDRATE__ is valid) or RESET (__AUTOBAUDRATE__ is invalid) + */ +#define IS_UART_ADVFEATURE_AUTOBAUDRATE(__AUTOBAUDRATE__) (((__AUTOBAUDRATE__) == \ + UART_ADVFEATURE_AUTOBAUDRATE_DISABLE) || \ + ((__AUTOBAUDRATE__) == UART_ADVFEATURE_AUTOBAUDRATE_ENABLE)) + +/** + * @brief Ensure that UART DMA enabling or disabling on error setting is valid. + * @param __DMA__ UART DMA enabling or disabling on error setting. + * @retval SET (__DMA__ is valid) or RESET (__DMA__ is invalid) + */ +#define IS_UART_ADVFEATURE_DMAONRXERROR(__DMA__) (((__DMA__) == UART_ADVFEATURE_DMA_ENABLEONRXERROR) || \ + ((__DMA__) == UART_ADVFEATURE_DMA_DISABLEONRXERROR)) + +/** + * @brief Ensure that UART frame MSB first setting is valid. + * @param __MSBFIRST__ UART frame MSB first setting. + * @retval SET (__MSBFIRST__ is valid) or RESET (__MSBFIRST__ is invalid) + */ +#define IS_UART_ADVFEATURE_MSBFIRST(__MSBFIRST__) (((__MSBFIRST__) == UART_ADVFEATURE_MSBFIRST_DISABLE) || \ + ((__MSBFIRST__) == UART_ADVFEATURE_MSBFIRST_ENABLE)) + +#if defined(USART_CR1_UESM) +/** + * @brief Ensure that UART stop mode state is valid. + * @param __STOPMODE__ UART stop mode state. + * @retval SET (__STOPMODE__ is valid) or RESET (__STOPMODE__ is invalid) + */ +#define IS_UART_ADVFEATURE_STOPMODE(__STOPMODE__) (((__STOPMODE__) == UART_ADVFEATURE_STOPMODE_DISABLE) || \ + ((__STOPMODE__) == UART_ADVFEATURE_STOPMODE_ENABLE)) + +#endif /* USART_CR1_UESM */ +/** + * @brief Ensure that UART mute mode state is valid. + * @param __MUTE__ UART mute mode state. + * @retval SET (__MUTE__ is valid) or RESET (__MUTE__ is invalid) + */ +#define IS_UART_MUTE_MODE(__MUTE__) (((__MUTE__) == UART_ADVFEATURE_MUTEMODE_DISABLE) || \ + ((__MUTE__) == UART_ADVFEATURE_MUTEMODE_ENABLE)) +#if defined(USART_CR1_UESM) + +/** + * @brief Ensure that UART wake-up selection is valid. + * @param __WAKE__ UART wake-up selection. + * @retval SET (__WAKE__ is valid) or RESET (__WAKE__ is invalid) + */ +#if defined(USART_CR3_WUFIE) +#define IS_UART_WAKEUP_SELECTION(__WAKE__) (((__WAKE__) == UART_WAKEUP_ON_ADDRESS) || \ + ((__WAKE__) == UART_WAKEUP_ON_STARTBIT) || \ + ((__WAKE__) == UART_WAKEUP_ON_READDATA_NONEMPTY)) +#else +#define IS_UART_WAKEUP_SELECTION(__WAKE__) (((__WAKE__) == UART_WAKEUP_ON_ADDRESS) || \ + ((__WAKE__) == UART_WAKEUP_ON_READDATA_NONEMPTY)) +#endif /* USART_CR3_WUFIE */ +#endif /* USART_CR1_UESM */ + +/** + * @brief Ensure that UART driver enable polarity is valid. + * @param __POLARITY__ UART driver enable polarity. + * @retval SET (__POLARITY__ is valid) or RESET (__POLARITY__ is invalid) + */ +#define IS_UART_DE_POLARITY(__POLARITY__) (((__POLARITY__) == UART_DE_POLARITY_HIGH) || \ + ((__POLARITY__) == UART_DE_POLARITY_LOW)) + + +/** + * @} + */ + +/* Include UART HAL Extended module */ +#include "stm32f0xx_hal_uart_ex.h" + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup UART_Exported_Functions UART Exported Functions + * @{ + */ + +/** @addtogroup UART_Exported_Functions_Group1 Initialization and de-initialization functions + * @{ + */ + +/* Initialization and de-initialization functions ****************************/ +HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart); +HAL_StatusTypeDef HAL_HalfDuplex_Init(UART_HandleTypeDef *huart); +#if defined(USART_CR2_LINEN) +HAL_StatusTypeDef HAL_LIN_Init(UART_HandleTypeDef *huart, uint32_t BreakDetectLength); +#endif /* USART_CR2_LINEN */ +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); +/* 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_TxHalfCpltCallback(UART_HandleTypeDef *huart); +void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart); +void HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart); +void HAL_UART_RxCpltCallback(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 + * @{ + */ + +/* Peripheral Control functions ************************************************/ +void HAL_UART_ReceiverTimeout_Config(UART_HandleTypeDef *huart, uint32_t TimeoutValue); +HAL_StatusTypeDef HAL_UART_EnableReceiverTimeout(UART_HandleTypeDef *huart); +HAL_StatusTypeDef HAL_UART_DisableReceiverTimeout(UART_HandleTypeDef *huart); + +#if defined(USART_CR2_LINEN) +HAL_StatusTypeDef HAL_LIN_SendBreak(UART_HandleTypeDef *huart); +#endif /* USART_CR2_LINEN */ +HAL_StatusTypeDef HAL_MultiProcessor_EnableMuteMode(UART_HandleTypeDef *huart); +HAL_StatusTypeDef HAL_MultiProcessor_DisableMuteMode(UART_HandleTypeDef *huart); +void HAL_MultiProcessor_EnterMuteMode(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 and Error functions + * @{ + */ + +/* Peripheral State and Errors functions **************************************************/ +HAL_UART_StateTypeDef HAL_UART_GetState(const UART_HandleTypeDef *huart); +uint32_t HAL_UART_GetError(const UART_HandleTypeDef *huart); + +/** + * @} + */ + +/** + * @} + */ + +/* Private functions -----------------------------------------------------------*/ +/** @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 */ +HAL_StatusTypeDef UART_SetConfig(UART_HandleTypeDef *huart); +HAL_StatusTypeDef UART_CheckIdleState(UART_HandleTypeDef *huart); +HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_t Flag, FlagStatus Status, + uint32_t Tickstart, uint32_t Timeout); +void UART_AdvFeatureConfig(UART_HandleTypeDef *huart); +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); + +/** + * @} + */ + +/* Private variables -----------------------------------------------------------*/ +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* STM32F0xx_HAL_UART_H */ + diff --git a/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h new file mode 100644 index 0000000..fef655c --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h @@ -0,0 +1,593 @@ +/** + ****************************************************************************** + * @file stm32f0xx_hal_uart_ex.h + * @author MCD Application Team + * @brief Header file of UART 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 STM32F0xx_HAL_UART_EX_H +#define STM32F0xx_HAL_UART_EX_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f0xx_hal_def.h" + +/** @addtogroup STM32F0xx_HAL_Driver + * @{ + */ + +/** @addtogroup UARTEx + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/** @defgroup UARTEx_Exported_Types UARTEx Exported Types + * @{ + */ + +#if defined(USART_CR1_UESM) +/** + * @brief UART wake up from stop mode parameters + */ +typedef struct +{ + uint32_t WakeUpEvent; /*!< Specifies which event will activate the Wakeup from Stop mode flag (WUF). + This parameter can be a value of @ref UART_WakeUp_from_Stop_Selection. + If set to UART_WAKEUP_ON_ADDRESS, the two other fields below must + be filled up. */ + + uint16_t AddressLength; /*!< Specifies whether the address is 4 or 7-bit long. + This parameter can be a value of @ref UARTEx_WakeUp_Address_Length. */ + + uint8_t Address; /*!< UART/USART node address (7-bit long max). */ +} UART_WakeUpTypeDef; + +#endif /* USART_CR1_UESM */ +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup UARTEx_Exported_Constants UARTEx Exported Constants + * @{ + */ + +/** @defgroup UARTEx_Word_Length UARTEx Word Length + * @{ + */ +#if defined(USART_CR1_M1) +#define UART_WORDLENGTH_7B USART_CR1_M1 /*!< 7-bit long UART frame */ +#endif /* USART_CR1_M1 */ +#define UART_WORDLENGTH_8B 0x00000000U /*!< 8-bit long UART frame */ +#if defined (USART_CR1_M0) +#define UART_WORDLENGTH_9B USART_CR1_M0 /*!< 9-bit long UART frame */ +#else +#define UART_WORDLENGTH_9B USART_CR1_M /*!< 9-bit long UART frame */ +#endif /* USART_CR1_M0 */ +/** + * @} + */ + +/** @defgroup UARTEx_WakeUp_Address_Length UARTEx WakeUp Address Length + * @{ + */ +#define UART_ADDRESS_DETECT_4B 0x00000000U /*!< 4-bit long wake-up address */ +#define UART_ADDRESS_DETECT_7B USART_CR2_ADDM7 /*!< 7-bit long wake-up address */ +/** + * @} + */ + +/** + * @} + */ + +/* Exported macros -----------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup UARTEx_Exported_Functions + * @{ + */ + +/** @addtogroup UARTEx_Exported_Functions_Group1 + * @{ + */ + +/* Initialization and de-initialization functions ****************************/ +HAL_StatusTypeDef HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity, uint32_t AssertionTime, + uint32_t DeassertionTime); + +/** + * @} + */ + +/** @addtogroup UARTEx_Exported_Functions_Group2 + * @{ + */ + +#if defined(USART_CR1_UESM) +void HAL_UARTEx_WakeupCallback(UART_HandleTypeDef *huart); + +#endif /* USART_CR1_UESM */ +/** + * @} + */ + +/** @addtogroup UARTEx_Exported_Functions_Group3 + * @{ + */ + +/* Peripheral Control functions **********************************************/ +#if defined(USART_CR1_UESM) +HAL_StatusTypeDef HAL_UARTEx_StopModeWakeUpSourceConfig(UART_HandleTypeDef *huart, UART_WakeUpTypeDef WakeUpSelection); +HAL_StatusTypeDef HAL_UARTEx_EnableStopMode(UART_HandleTypeDef *huart); +HAL_StatusTypeDef HAL_UARTEx_DisableStopMode(UART_HandleTypeDef *huart); + +#endif /* USART_CR1_UESM */ +HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *huart, uint32_t AddressLength); + + +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); + +HAL_UART_RxEventTypeTypeDef HAL_UARTEx_GetRxEventType(UART_HandleTypeDef *huart); + + +/** + * @} + */ + +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/** @defgroup UARTEx_Private_Macros UARTEx Private Macros + * @{ + */ + +/** @brief Report the UART clock source. + * @param __HANDLE__ specifies the UART Handle. + * @param __CLOCKSOURCE__ output variable. + * @retval UART clocking source, written in __CLOCKSOURCE__. + */ + +#if defined(STM32F030x6) || defined(STM32F031x6) || defined(STM32F038xx) +#define UART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \ + do { \ + switch(__HAL_RCC_GET_USART1_SOURCE()) \ + { \ + case RCC_USART1CLKSOURCE_PCLK1: \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \ + break; \ + case RCC_USART1CLKSOURCE_HSI: \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \ + break; \ + case RCC_USART1CLKSOURCE_SYSCLK: \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \ + break; \ + case RCC_USART1CLKSOURCE_LSE: \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \ + break; \ + default: \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \ + break; \ + } \ + } while(0) +#elif defined (STM32F030x8) || defined (STM32F070x6) || defined (STM32F042x6) || defined (STM32F048xx) \ + || defined (STM32F051x8) || defined (STM32F058xx) +#define UART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \ + do { \ + if((__HANDLE__)->Instance == USART1) \ + { \ + switch(__HAL_RCC_GET_USART1_SOURCE()) \ + { \ + case RCC_USART1CLKSOURCE_PCLK1: \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \ + break; \ + case RCC_USART1CLKSOURCE_HSI: \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \ + break; \ + case RCC_USART1CLKSOURCE_SYSCLK: \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \ + break; \ + case RCC_USART1CLKSOURCE_LSE: \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \ + break; \ + default: \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \ + break; \ + } \ + } \ + else if((__HANDLE__)->Instance == USART2) \ + { \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \ + } \ + else \ + { \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \ + } \ + } while(0) +#elif defined(STM32F070xB) +#define UART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \ + do { \ + if((__HANDLE__)->Instance == USART1) \ + { \ + switch(__HAL_RCC_GET_USART1_SOURCE()) \ + { \ + case RCC_USART1CLKSOURCE_PCLK1: \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \ + break; \ + case RCC_USART1CLKSOURCE_HSI: \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \ + break; \ + case RCC_USART1CLKSOURCE_SYSCLK: \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \ + break; \ + case RCC_USART1CLKSOURCE_LSE: \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \ + break; \ + default: \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \ + break; \ + } \ + } \ + else if((__HANDLE__)->Instance == USART2) \ + { \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \ + } \ + else if((__HANDLE__)->Instance == USART3) \ + { \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \ + } \ + else if((__HANDLE__)->Instance == USART4) \ + { \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \ + } \ + else \ + { \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \ + } \ + } while(0) +#elif defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx) +#define UART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \ + do { \ + if((__HANDLE__)->Instance == USART1) \ + { \ + switch(__HAL_RCC_GET_USART1_SOURCE()) \ + { \ + case RCC_USART1CLKSOURCE_PCLK1: \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \ + break; \ + case RCC_USART1CLKSOURCE_HSI: \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \ + break; \ + case RCC_USART1CLKSOURCE_SYSCLK: \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \ + break; \ + case RCC_USART1CLKSOURCE_LSE: \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \ + break; \ + default: \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \ + break; \ + } \ + } \ + else if((__HANDLE__)->Instance == USART2) \ + { \ + switch(__HAL_RCC_GET_USART2_SOURCE()) \ + { \ + case RCC_USART2CLKSOURCE_PCLK1: \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \ + break; \ + case RCC_USART2CLKSOURCE_HSI: \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \ + break; \ + case RCC_USART2CLKSOURCE_SYSCLK: \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \ + break; \ + case RCC_USART2CLKSOURCE_LSE: \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \ + break; \ + default: \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \ + break; \ + } \ + } \ + else if((__HANDLE__)->Instance == USART3) \ + { \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \ + } \ + else if((__HANDLE__)->Instance == USART4) \ + { \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \ + } \ + else \ + { \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \ + } \ + } while(0) +#elif defined(STM32F091xC) || defined (STM32F098xx) +#define UART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \ + do { \ + if((__HANDLE__)->Instance == USART1) \ + { \ + switch(__HAL_RCC_GET_USART1_SOURCE()) \ + { \ + case RCC_USART1CLKSOURCE_PCLK1: \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \ + break; \ + case RCC_USART1CLKSOURCE_HSI: \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \ + break; \ + case RCC_USART1CLKSOURCE_SYSCLK: \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \ + break; \ + case RCC_USART1CLKSOURCE_LSE: \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \ + break; \ + default: \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \ + break; \ + } \ + } \ + else if((__HANDLE__)->Instance == USART2) \ + { \ + switch(__HAL_RCC_GET_USART2_SOURCE()) \ + { \ + case RCC_USART2CLKSOURCE_PCLK1: \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \ + break; \ + case RCC_USART2CLKSOURCE_HSI: \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \ + break; \ + case RCC_USART2CLKSOURCE_SYSCLK: \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \ + break; \ + case RCC_USART2CLKSOURCE_LSE: \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \ + break; \ + default: \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \ + break; \ + } \ + } \ + else if((__HANDLE__)->Instance == USART3) \ + { \ + switch(__HAL_RCC_GET_USART3_SOURCE()) \ + { \ + case RCC_USART3CLKSOURCE_PCLK1: \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \ + break; \ + case RCC_USART3CLKSOURCE_HSI: \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \ + break; \ + case RCC_USART3CLKSOURCE_SYSCLK: \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \ + break; \ + case RCC_USART3CLKSOURCE_LSE: \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \ + break; \ + default: \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \ + break; \ + } \ + } \ + else if((__HANDLE__)->Instance == USART4) \ + { \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \ + } \ + else if((__HANDLE__)->Instance == USART5) \ + { \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \ + } \ + else if((__HANDLE__)->Instance == USART6) \ + { \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \ + } \ + else if((__HANDLE__)->Instance == USART7) \ + { \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \ + } \ + else if((__HANDLE__)->Instance == USART8) \ + { \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \ + } \ + else \ + { \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \ + } \ + } while(0) +#elif defined(STM32F030xC) +#define UART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \ + do { \ + if((__HANDLE__)->Instance == USART1) \ + { \ + switch(__HAL_RCC_GET_USART1_SOURCE()) \ + { \ + case RCC_USART1CLKSOURCE_PCLK1: \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \ + break; \ + case RCC_USART1CLKSOURCE_HSI: \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \ + break; \ + case RCC_USART1CLKSOURCE_SYSCLK: \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \ + break; \ + case RCC_USART1CLKSOURCE_LSE: \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \ + break; \ + default: \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \ + break; \ + } \ + } \ + else if((__HANDLE__)->Instance == USART2) \ + { \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \ + } \ + else if((__HANDLE__)->Instance == USART3) \ + { \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \ + } \ + else if((__HANDLE__)->Instance == USART4) \ + { \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \ + } \ + else if((__HANDLE__)->Instance == USART5) \ + { \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \ + } \ + else if((__HANDLE__)->Instance == USART6) \ + { \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \ + } \ + else \ + { \ + (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \ + } \ + } while(0) + +#endif /* defined(STM32F030x6) || defined(STM32F031x6) || defined(STM32F038xx) */ + +/** @brief Report the UART mask to apply to retrieve the received data + * according to the word length and to the parity bits activation. + * @note If PCE = 1, the parity bit is not included in the data extracted + * by the reception API(). + * This masking operation is not carried out in the case of + * DMA transfers. + * @param __HANDLE__ specifies the UART Handle. + * @retval None, the mask to apply to UART RDR register is stored in (__HANDLE__)->Mask field. + */ +#if defined (USART_CR1_M1) +#define UART_MASK_COMPUTATION(__HANDLE__) \ + do { \ + if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_9B) \ + { \ + if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \ + { \ + (__HANDLE__)->Mask = 0x01FFU ; \ + } \ + else \ + { \ + (__HANDLE__)->Mask = 0x00FFU ; \ + } \ + } \ + else if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_8B) \ + { \ + if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \ + { \ + (__HANDLE__)->Mask = 0x00FFU ; \ + } \ + else \ + { \ + (__HANDLE__)->Mask = 0x007FU ; \ + } \ + } \ + else if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_7B) \ + { \ + if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \ + { \ + (__HANDLE__)->Mask = 0x007FU ; \ + } \ + else \ + { \ + (__HANDLE__)->Mask = 0x003FU ; \ + } \ + } \ + else \ + { \ + (__HANDLE__)->Mask = 0x0000U; \ + } \ + } while(0U) + +#else +#define UART_MASK_COMPUTATION(__HANDLE__) \ + do { \ + if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_9B) \ + { \ + if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \ + { \ + (__HANDLE__)->Mask = 0x01FFU ; \ + } \ + else \ + { \ + (__HANDLE__)->Mask = 0x00FFU ; \ + } \ + } \ + else if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_8B) \ + { \ + if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \ + { \ + (__HANDLE__)->Mask = 0x00FFU ; \ + } \ + else \ + { \ + (__HANDLE__)->Mask = 0x007FU ; \ + } \ + } \ + else \ + { \ + (__HANDLE__)->Mask = 0x0000U; \ + } \ + } while(0U) + +#endif /* USART_CR1_M1 */ + +/** + * @brief Ensure that UART frame length is valid. + * @param __LENGTH__ UART frame length. + * @retval SET (__LENGTH__ is valid) or RESET (__LENGTH__ is invalid) + */ +#if defined (USART_CR1_M1) +#define IS_UART_WORD_LENGTH(__LENGTH__) (((__LENGTH__) == UART_WORDLENGTH_7B) || \ + ((__LENGTH__) == UART_WORDLENGTH_8B) || \ + ((__LENGTH__) == UART_WORDLENGTH_9B)) +#else +#define IS_UART_WORD_LENGTH(__LENGTH__) (((__LENGTH__) == UART_WORDLENGTH_8B) || \ + ((__LENGTH__) == UART_WORDLENGTH_9B)) +#endif /* USART_CR1_M1 */ + +/** + * @brief Ensure that UART wake-up address length is valid. + * @param __ADDRESS__ UART wake-up address length. + * @retval SET (__ADDRESS__ is valid) or RESET (__ADDRESS__ is invalid) + */ +#define IS_UART_ADDRESSLENGTH_DETECT(__ADDRESS__) (((__ADDRESS__) == UART_ADDRESS_DETECT_4B) || \ + ((__ADDRESS__) == UART_ADDRESS_DETECT_7B)) + +/** + * @} + */ + +/* Private functions ---------------------------------------------------------*/ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* STM32F0xx_HAL_UART_EX_H */ + diff --git a/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_bus.h b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_bus.h new file mode 100644 index 0000000..d5c54be --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_bus.h @@ -0,0 +1,842 @@ +/** + ****************************************************************************** + * @file stm32f0xx_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) 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 __STM32F0xx_LL_BUS_H +#define __STM32F0xx_LL_BUS_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f0xx.h" + +/** @addtogroup STM32F0xx_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 (uint32_t)0xFFFFFFFFU +#define LL_AHB1_GRP1_PERIPH_DMA1 RCC_AHBENR_DMA1EN +#if defined(DMA2) +#define LL_AHB1_GRP1_PERIPH_DMA2 RCC_AHBENR_DMA2EN +#endif /*DMA2*/ +#define LL_AHB1_GRP1_PERIPH_SRAM RCC_AHBENR_SRAMEN +#define LL_AHB1_GRP1_PERIPH_FLASH RCC_AHBENR_FLITFEN +#define LL_AHB1_GRP1_PERIPH_CRC RCC_AHBENR_CRCEN +#define LL_AHB1_GRP1_PERIPH_GPIOA RCC_AHBENR_GPIOAEN +#define LL_AHB1_GRP1_PERIPH_GPIOB RCC_AHBENR_GPIOBEN +#define LL_AHB1_GRP1_PERIPH_GPIOC RCC_AHBENR_GPIOCEN +#if defined(GPIOD) +#define LL_AHB1_GRP1_PERIPH_GPIOD RCC_AHBENR_GPIODEN +#endif /*GPIOD*/ +#if defined(GPIOE) +#define LL_AHB1_GRP1_PERIPH_GPIOE RCC_AHBENR_GPIOEEN +#endif /*GPIOE*/ +#define LL_AHB1_GRP1_PERIPH_GPIOF RCC_AHBENR_GPIOFEN +#if defined(TSC) +#define LL_AHB1_GRP1_PERIPH_TSC RCC_AHBENR_TSCEN +#endif /*TSC*/ +/** + * @} + */ + +/** @defgroup BUS_LL_EC_APB1_GRP1_PERIPH APB1 GRP1 PERIPH + * @{ + */ +#define LL_APB1_GRP1_PERIPH_ALL (uint32_t)0xFFFFFFFFU +#if defined(TIM2) +#define LL_APB1_GRP1_PERIPH_TIM2 RCC_APB1ENR_TIM2EN +#endif /*TIM2*/ +#define LL_APB1_GRP1_PERIPH_TIM3 RCC_APB1ENR_TIM3EN +#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*/ +#define LL_APB1_GRP1_PERIPH_TIM14 RCC_APB1ENR_TIM14EN +#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(USART2) +#define LL_APB1_GRP1_PERIPH_USART2 RCC_APB1ENR_USART2EN +#endif /* USART2 */ +#if defined(USART3) +#define LL_APB1_GRP1_PERIPH_USART3 RCC_APB1ENR_USART3EN +#endif /* USART3 */ +#if defined(USART4) +#define LL_APB1_GRP1_PERIPH_USART4 RCC_APB1ENR_USART4EN +#endif /* USART4 */ +#if defined(USART5) +#define LL_APB1_GRP1_PERIPH_USART5 RCC_APB1ENR_USART5EN +#endif /* USART5 */ +#define LL_APB1_GRP1_PERIPH_I2C1 RCC_APB1ENR_I2C1EN +#if defined(I2C2) +#define LL_APB1_GRP1_PERIPH_I2C2 RCC_APB1ENR_I2C2EN +#endif /*I2C2*/ +#if defined(USB) +#define LL_APB1_GRP1_PERIPH_USB RCC_APB1ENR_USBEN +#endif /* USB */ +#if defined(CAN) +#define LL_APB1_GRP1_PERIPH_CAN RCC_APB1ENR_CANEN +#endif /*CAN*/ +#if defined(CRS) +#define LL_APB1_GRP1_PERIPH_CRS RCC_APB1ENR_CRSEN +#endif /*CRS*/ +#define LL_APB1_GRP1_PERIPH_PWR RCC_APB1ENR_PWREN +#if defined(DAC) +#define LL_APB1_GRP1_PERIPH_DAC1 RCC_APB1ENR_DACEN +#endif /*DAC*/ +#if defined(CEC) +#define LL_APB1_GRP1_PERIPH_CEC RCC_APB1ENR_CECEN +#endif /*CEC*/ +/** + * @} + */ + +/** @defgroup BUS_LL_EC_APB1_GRP2_PERIPH APB1 GRP2 PERIPH + * @{ + */ +#define LL_APB1_GRP2_PERIPH_ALL (uint32_t)0xFFFFFFFFU +#define LL_APB1_GRP2_PERIPH_SYSCFG RCC_APB2ENR_SYSCFGEN +#define LL_APB1_GRP2_PERIPH_ADC1 RCC_APB2ENR_ADC1EN +#if defined(USART8) +#define LL_APB1_GRP2_PERIPH_USART8 RCC_APB2ENR_USART8EN +#endif /*USART8*/ +#if defined(USART7) +#define LL_APB1_GRP2_PERIPH_USART7 RCC_APB2ENR_USART7EN +#endif /*USART7*/ +#if defined(USART6) +#define LL_APB1_GRP2_PERIPH_USART6 RCC_APB2ENR_USART6EN +#endif /*USART6*/ +#define LL_APB1_GRP2_PERIPH_TIM1 RCC_APB2ENR_TIM1EN +#define LL_APB1_GRP2_PERIPH_SPI1 RCC_APB2ENR_SPI1EN +#define LL_APB1_GRP2_PERIPH_USART1 RCC_APB2ENR_USART1EN +#if defined(TIM15) +#define LL_APB1_GRP2_PERIPH_TIM15 RCC_APB2ENR_TIM15EN +#endif /*TIM15*/ +#define LL_APB1_GRP2_PERIPH_TIM16 RCC_APB2ENR_TIM16EN +#define LL_APB1_GRP2_PERIPH_TIM17 RCC_APB2ENR_TIM17EN +#define LL_APB1_GRP2_PERIPH_DBGMCU RCC_APB2ENR_DBGMCUEN +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ +/** @defgroup BUS_LL_Exported_Functions BUS Exported Functions + * @{ + */ + +/** @defgroup BUS_LL_EF_AHB1 AHB1 + * @{ + */ + +/** + * @brief Enable AHB1 peripherals clock. + * @rmtoll AHBENR DMA1EN LL_AHB1_GRP1_EnableClock\n + * AHBENR DMA2EN LL_AHB1_GRP1_EnableClock\n + * AHBENR SRAMEN LL_AHB1_GRP1_EnableClock\n + * AHBENR FLITFEN LL_AHB1_GRP1_EnableClock\n + * AHBENR CRCEN LL_AHB1_GRP1_EnableClock\n + * AHBENR GPIOAEN LL_AHB1_GRP1_EnableClock\n + * AHBENR GPIOBEN LL_AHB1_GRP1_EnableClock\n + * AHBENR GPIOCEN LL_AHB1_GRP1_EnableClock\n + * AHBENR GPIODEN LL_AHB1_GRP1_EnableClock\n + * AHBENR GPIOEEN LL_AHB1_GRP1_EnableClock\n + * AHBENR GPIOFEN LL_AHB1_GRP1_EnableClock\n + * AHBENR TSCEN LL_AHB1_GRP1_EnableClock + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA1 + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2 (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_SRAM + * @arg @ref LL_AHB1_GRP1_PERIPH_FLASH + * @arg @ref LL_AHB1_GRP1_PERIPH_CRC + * @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_TSC (*) + * + * (*) 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->AHBENR, Periphs); + /* Delay after an RCC peripheral clock enabling */ + tmpreg = READ_BIT(RCC->AHBENR, Periphs); + (void)tmpreg; +} + +/** + * @brief Check if AHB1 peripheral clock is enabled or not + * @rmtoll AHBENR DMA1EN LL_AHB1_GRP1_IsEnabledClock\n + * AHBENR DMA2EN LL_AHB1_GRP1_IsEnabledClock\n + * AHBENR SRAMEN LL_AHB1_GRP1_IsEnabledClock\n + * AHBENR FLITFEN LL_AHB1_GRP1_IsEnabledClock\n + * AHBENR CRCEN LL_AHB1_GRP1_IsEnabledClock\n + * AHBENR GPIOAEN LL_AHB1_GRP1_IsEnabledClock\n + * AHBENR GPIOBEN LL_AHB1_GRP1_IsEnabledClock\n + * AHBENR GPIOCEN LL_AHB1_GRP1_IsEnabledClock\n + * AHBENR GPIODEN LL_AHB1_GRP1_IsEnabledClock\n + * AHBENR GPIOEEN LL_AHB1_GRP1_IsEnabledClock\n + * AHBENR GPIOFEN LL_AHB1_GRP1_IsEnabledClock\n + * AHBENR TSCEN LL_AHB1_GRP1_IsEnabledClock + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA1 + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2 (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_SRAM + * @arg @ref LL_AHB1_GRP1_PERIPH_FLASH + * @arg @ref LL_AHB1_GRP1_PERIPH_CRC + * @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_TSC (*) + * + * (*) 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->AHBENR, Periphs) == Periphs); +} + +/** + * @brief Disable AHB1 peripherals clock. + * @rmtoll AHBENR DMA1EN LL_AHB1_GRP1_DisableClock\n + * AHBENR DMA2EN LL_AHB1_GRP1_DisableClock\n + * AHBENR SRAMEN LL_AHB1_GRP1_DisableClock\n + * AHBENR FLITFEN LL_AHB1_GRP1_DisableClock\n + * AHBENR CRCEN LL_AHB1_GRP1_DisableClock\n + * AHBENR GPIOAEN LL_AHB1_GRP1_DisableClock\n + * AHBENR GPIOBEN LL_AHB1_GRP1_DisableClock\n + * AHBENR GPIOCEN LL_AHB1_GRP1_DisableClock\n + * AHBENR GPIODEN LL_AHB1_GRP1_DisableClock\n + * AHBENR GPIOEEN LL_AHB1_GRP1_DisableClock\n + * AHBENR GPIOFEN LL_AHB1_GRP1_DisableClock\n + * AHBENR TSCEN LL_AHB1_GRP1_DisableClock + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA1 + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2 (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_SRAM + * @arg @ref LL_AHB1_GRP1_PERIPH_FLASH + * @arg @ref LL_AHB1_GRP1_PERIPH_CRC + * @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_TSC (*) + * + * (*) value not defined in all devices. + * @retval None +*/ +__STATIC_INLINE void LL_AHB1_GRP1_DisableClock(uint32_t Periphs) +{ + CLEAR_BIT(RCC->AHBENR, Periphs); +} + +/** + * @brief Force AHB1 peripherals reset. + * @rmtoll AHBRSTR GPIOARST LL_AHB1_GRP1_ForceReset\n + * AHBRSTR GPIOBRST LL_AHB1_GRP1_ForceReset\n + * AHBRSTR GPIOCRST LL_AHB1_GRP1_ForceReset\n + * AHBRSTR GPIODRST LL_AHB1_GRP1_ForceReset\n + * AHBRSTR GPIOERST LL_AHB1_GRP1_ForceReset\n + * AHBRSTR GPIOFRST LL_AHB1_GRP1_ForceReset\n + * AHBRSTR TSCRST 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_TSC (*) + * + * (*) value not defined in all devices. + * @retval None +*/ +__STATIC_INLINE void LL_AHB1_GRP1_ForceReset(uint32_t Periphs) +{ + SET_BIT(RCC->AHBRSTR, Periphs); +} + +/** + * @brief Release AHB1 peripherals reset. + * @rmtoll AHBRSTR GPIOARST LL_AHB1_GRP1_ReleaseReset\n + * AHBRSTR GPIOBRST LL_AHB1_GRP1_ReleaseReset\n + * AHBRSTR GPIOCRST LL_AHB1_GRP1_ReleaseReset\n + * AHBRSTR GPIODRST LL_AHB1_GRP1_ReleaseReset\n + * AHBRSTR GPIOERST LL_AHB1_GRP1_ReleaseReset\n + * AHBRSTR GPIOFRST LL_AHB1_GRP1_ReleaseReset\n + * AHBRSTR TSCRST 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_TSC (*) + * + * (*) value not defined in all devices. + * @retval None +*/ +__STATIC_INLINE void LL_AHB1_GRP1_ReleaseReset(uint32_t Periphs) +{ + CLEAR_BIT(RCC->AHBRSTR, Periphs); +} + +/** + * @} + */ + +/** @defgroup BUS_LL_EF_APB1_GRP1 APB1 GRP1 + * @{ + */ + +/** + * @brief Enable APB1 peripherals clock (available in register 1). + * @rmtoll APB1ENR TIM2EN LL_APB1_GRP1_EnableClock\n + * APB1ENR TIM3EN LL_APB1_GRP1_EnableClock\n + * APB1ENR TIM6EN LL_APB1_GRP1_EnableClock\n + * APB1ENR TIM7EN LL_APB1_GRP1_EnableClock\n + * APB1ENR TIM14EN LL_APB1_GRP1_EnableClock\n + * APB1ENR WWDGEN LL_APB1_GRP1_EnableClock\n + * APB1ENR SPI2EN LL_APB1_GRP1_EnableClock\n + * APB1ENR USART2EN LL_APB1_GRP1_EnableClock\n + * APB1ENR USART3EN LL_APB1_GRP1_EnableClock\n + * APB1ENR USART4EN LL_APB1_GRP1_EnableClock\n + * APB1ENR USART5EN LL_APB1_GRP1_EnableClock\n + * APB1ENR I2C1EN LL_APB1_GRP1_EnableClock\n + * APB1ENR I2C2EN LL_APB1_GRP1_EnableClock\n + * APB1ENR USBEN LL_APB1_GRP1_EnableClock\n + * APB1ENR CANEN LL_APB1_GRP1_EnableClock\n + * APB1ENR CRSEN LL_APB1_GRP1_EnableClock\n + * APB1ENR PWREN LL_APB1_GRP1_EnableClock\n + * APB1ENR DACEN LL_APB1_GRP1_EnableClock\n + * APB1ENR CECEN 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_TIM6 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM7 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM14 + * @arg @ref LL_APB1_GRP1_PERIPH_WWDG + * @arg @ref LL_APB1_GRP1_PERIPH_SPI2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_USART2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_USART3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_USART4 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_USART5 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_I2C1 + * @arg @ref LL_APB1_GRP1_PERIPH_I2C2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_USB (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CAN (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CRS (*) + * @arg @ref LL_APB1_GRP1_PERIPH_PWR + * @arg @ref LL_APB1_GRP1_PERIPH_DAC1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CEC (*) + * + * (*) 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 (available in register 1). + * @rmtoll APB1ENR TIM2EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR TIM3EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR TIM6EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR TIM7EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR TIM14EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR WWDGEN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR SPI2EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR USART2EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR USART3EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR USART4EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR USART5EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR I2C1EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR I2C2EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR USBEN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR CANEN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR CRSEN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR PWREN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR DACEN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR CECEN 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_TIM6 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM7 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM14 + * @arg @ref LL_APB1_GRP1_PERIPH_WWDG + * @arg @ref LL_APB1_GRP1_PERIPH_SPI2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_USART2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_USART3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_USART4 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_USART5 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_I2C1 + * @arg @ref LL_APB1_GRP1_PERIPH_I2C2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_USB (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CAN (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CRS (*) + * @arg @ref LL_APB1_GRP1_PERIPH_PWR + * @arg @ref LL_APB1_GRP1_PERIPH_DAC1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CEC (*) + * + * (*) 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 (available in register 1). + * @rmtoll APB1ENR TIM2EN LL_APB1_GRP1_DisableClock\n + * APB1ENR TIM3EN LL_APB1_GRP1_DisableClock\n + * APB1ENR TIM6EN LL_APB1_GRP1_DisableClock\n + * APB1ENR TIM7EN LL_APB1_GRP1_DisableClock\n + * APB1ENR TIM14EN LL_APB1_GRP1_DisableClock\n + * APB1ENR WWDGEN LL_APB1_GRP1_DisableClock\n + * APB1ENR SPI2EN LL_APB1_GRP1_DisableClock\n + * APB1ENR USART2EN LL_APB1_GRP1_DisableClock\n + * APB1ENR USART3EN LL_APB1_GRP1_DisableClock\n + * APB1ENR USART4EN LL_APB1_GRP1_DisableClock\n + * APB1ENR USART5EN LL_APB1_GRP1_DisableClock\n + * APB1ENR I2C1EN LL_APB1_GRP1_DisableClock\n + * APB1ENR I2C2EN LL_APB1_GRP1_DisableClock\n + * APB1ENR USBEN LL_APB1_GRP1_DisableClock\n + * APB1ENR CANEN LL_APB1_GRP1_DisableClock\n + * APB1ENR CRSEN LL_APB1_GRP1_DisableClock\n + * APB1ENR PWREN LL_APB1_GRP1_DisableClock\n + * APB1ENR DACEN LL_APB1_GRP1_DisableClock\n + * APB1ENR CECEN 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_TIM6 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM7 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM14 + * @arg @ref LL_APB1_GRP1_PERIPH_WWDG + * @arg @ref LL_APB1_GRP1_PERIPH_SPI2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_USART2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_USART3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_USART4 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_USART5 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_I2C1 + * @arg @ref LL_APB1_GRP1_PERIPH_I2C2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_USB (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CAN (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CRS (*) + * @arg @ref LL_APB1_GRP1_PERIPH_PWR + * @arg @ref LL_APB1_GRP1_PERIPH_DAC1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CEC (*) + * + * (*) 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 (available in register 1). + * @rmtoll APB1RSTR TIM2RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR TIM3RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR TIM6RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR TIM7RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR TIM14RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR WWDGRST LL_APB1_GRP1_ForceReset\n + * APB1RSTR SPI2RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR USART2RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR USART3RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR USART4RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR USART5RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR I2C1RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR I2C2RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR USBRST LL_APB1_GRP1_ForceReset\n + * APB1RSTR CANRST LL_APB1_GRP1_ForceReset\n + * APB1RSTR CRSRST LL_APB1_GRP1_ForceReset\n + * APB1RSTR PWRRST LL_APB1_GRP1_ForceReset\n + * APB1RSTR DACRST LL_APB1_GRP1_ForceReset\n + * APB1RSTR CECRST LL_APB1_GRP1_ForceReset + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_APB1_GRP1_PERIPH_ALL + * @arg @ref LL_APB1_GRP1_PERIPH_TIM2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM3 + * @arg @ref LL_APB1_GRP1_PERIPH_TIM6 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM7 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM14 + * @arg @ref LL_APB1_GRP1_PERIPH_WWDG + * @arg @ref LL_APB1_GRP1_PERIPH_SPI2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_USART2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_USART3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_USART4 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_USART5 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_I2C1 + * @arg @ref LL_APB1_GRP1_PERIPH_I2C2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_USB (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CAN (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CRS (*) + * @arg @ref LL_APB1_GRP1_PERIPH_PWR + * @arg @ref LL_APB1_GRP1_PERIPH_DAC1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CEC (*) + * + * (*) 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 (available in register 1). + * @rmtoll APB1RSTR TIM2RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR TIM3RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR TIM6RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR TIM7RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR TIM14RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR WWDGRST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR SPI2RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR USART2RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR USART3RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR USART4RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR USART5RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR I2C1RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR I2C2RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR USBRST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR CANRST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR CRSRST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR PWRRST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR DACRST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR CECRST LL_APB1_GRP1_ReleaseReset + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_APB1_GRP1_PERIPH_ALL + * @arg @ref LL_APB1_GRP1_PERIPH_TIM2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM3 + * @arg @ref LL_APB1_GRP1_PERIPH_TIM6 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM7 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM14 + * @arg @ref LL_APB1_GRP1_PERIPH_WWDG + * @arg @ref LL_APB1_GRP1_PERIPH_SPI2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_USART2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_USART3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_USART4 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_USART5 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_I2C1 + * @arg @ref LL_APB1_GRP1_PERIPH_I2C2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_USB (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CAN (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CRS (*) + * @arg @ref LL_APB1_GRP1_PERIPH_PWR + * @arg @ref LL_APB1_GRP1_PERIPH_DAC1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CEC (*) + * + * (*) value not defined in all devices. + * @retval None +*/ +__STATIC_INLINE void LL_APB1_GRP1_ReleaseReset(uint32_t Periphs) +{ + CLEAR_BIT(RCC->APB1RSTR, Periphs); +} + +/** + * @} + */ + +/** @defgroup BUS_LL_EF_APB1_GRP2 APB1 GRP2 + * @{ + */ + +/** + * @brief Enable APB1 peripherals clock (available in register 2). + * @rmtoll APB2ENR SYSCFGEN LL_APB1_GRP2_EnableClock\n + * APB2ENR ADC1EN LL_APB1_GRP2_EnableClock\n + * APB2ENR USART8EN LL_APB1_GRP2_EnableClock\n + * APB2ENR USART7EN LL_APB1_GRP2_EnableClock\n + * APB2ENR USART6EN LL_APB1_GRP2_EnableClock\n + * APB2ENR TIM1EN LL_APB1_GRP2_EnableClock\n + * APB2ENR SPI1EN LL_APB1_GRP2_EnableClock\n + * APB2ENR USART1EN LL_APB1_GRP2_EnableClock\n + * APB2ENR TIM15EN LL_APB1_GRP2_EnableClock\n + * APB2ENR TIM16EN LL_APB1_GRP2_EnableClock\n + * APB2ENR TIM17EN LL_APB1_GRP2_EnableClock\n + * APB2ENR DBGMCUEN LL_APB1_GRP2_EnableClock + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_APB1_GRP2_PERIPH_SYSCFG + * @arg @ref LL_APB1_GRP2_PERIPH_ADC1 + * @arg @ref LL_APB1_GRP2_PERIPH_USART8 (*) + * @arg @ref LL_APB1_GRP2_PERIPH_USART7 (*) + * @arg @ref LL_APB1_GRP2_PERIPH_USART6 (*) + * @arg @ref LL_APB1_GRP2_PERIPH_TIM1 + * @arg @ref LL_APB1_GRP2_PERIPH_SPI1 + * @arg @ref LL_APB1_GRP2_PERIPH_USART1 + * @arg @ref LL_APB1_GRP2_PERIPH_TIM15 (*) + * @arg @ref LL_APB1_GRP2_PERIPH_TIM16 + * @arg @ref LL_APB1_GRP2_PERIPH_TIM17 + * @arg @ref LL_APB1_GRP2_PERIPH_DBGMCU + * + * (*) value not defined in all devices. + * @retval None +*/ +__STATIC_INLINE void LL_APB1_GRP2_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 APB1 peripheral clock is enabled or not (available in register 2). + * @rmtoll APB2ENR SYSCFGEN LL_APB1_GRP2_IsEnabledClock\n + * APB2ENR ADC1EN LL_APB1_GRP2_IsEnabledClock\n + * APB2ENR USART8EN LL_APB1_GRP2_IsEnabledClock\n + * APB2ENR USART7EN LL_APB1_GRP2_IsEnabledClock\n + * APB2ENR USART6EN LL_APB1_GRP2_IsEnabledClock\n + * APB2ENR TIM1EN LL_APB1_GRP2_IsEnabledClock\n + * APB2ENR SPI1EN LL_APB1_GRP2_IsEnabledClock\n + * APB2ENR USART1EN LL_APB1_GRP2_IsEnabledClock\n + * APB2ENR TIM15EN LL_APB1_GRP2_IsEnabledClock\n + * APB2ENR TIM16EN LL_APB1_GRP2_IsEnabledClock\n + * APB2ENR TIM17EN LL_APB1_GRP2_IsEnabledClock\n + * APB2ENR DBGMCUEN LL_APB1_GRP2_IsEnabledClock + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_APB1_GRP2_PERIPH_SYSCFG + * @arg @ref LL_APB1_GRP2_PERIPH_ADC1 + * @arg @ref LL_APB1_GRP2_PERIPH_USART8 (*) + * @arg @ref LL_APB1_GRP2_PERIPH_USART7 (*) + * @arg @ref LL_APB1_GRP2_PERIPH_USART6 (*) + * @arg @ref LL_APB1_GRP2_PERIPH_TIM1 + * @arg @ref LL_APB1_GRP2_PERIPH_SPI1 + * @arg @ref LL_APB1_GRP2_PERIPH_USART1 + * @arg @ref LL_APB1_GRP2_PERIPH_TIM15 (*) + * @arg @ref LL_APB1_GRP2_PERIPH_TIM16 + * @arg @ref LL_APB1_GRP2_PERIPH_TIM17 + * @arg @ref LL_APB1_GRP2_PERIPH_DBGMCU + * + * (*) value not defined in all devices. + * @retval State of Periphs (1 or 0). +*/ +__STATIC_INLINE uint32_t LL_APB1_GRP2_IsEnabledClock(uint32_t Periphs) +{ + return (READ_BIT(RCC->APB2ENR, Periphs) == Periphs); +} + +/** + * @brief Disable APB1 peripherals clock (available in register 2). + * @rmtoll APB2ENR SYSCFGEN LL_APB1_GRP2_DisableClock\n + * APB2ENR ADC1EN LL_APB1_GRP2_DisableClock\n + * APB2ENR USART8EN LL_APB1_GRP2_DisableClock\n + * APB2ENR USART7EN LL_APB1_GRP2_DisableClock\n + * APB2ENR USART6EN LL_APB1_GRP2_DisableClock\n + * APB2ENR TIM1EN LL_APB1_GRP2_DisableClock\n + * APB2ENR SPI1EN LL_APB1_GRP2_DisableClock\n + * APB2ENR USART1EN LL_APB1_GRP2_DisableClock\n + * APB2ENR TIM15EN LL_APB1_GRP2_DisableClock\n + * APB2ENR TIM16EN LL_APB1_GRP2_DisableClock\n + * APB2ENR TIM17EN LL_APB1_GRP2_DisableClock\n + * APB2ENR DBGMCUEN LL_APB1_GRP2_DisableClock + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_APB1_GRP2_PERIPH_SYSCFG + * @arg @ref LL_APB1_GRP2_PERIPH_ADC1 + * @arg @ref LL_APB1_GRP2_PERIPH_USART8 (*) + * @arg @ref LL_APB1_GRP2_PERIPH_USART7 (*) + * @arg @ref LL_APB1_GRP2_PERIPH_USART6 (*) + * @arg @ref LL_APB1_GRP2_PERIPH_TIM1 + * @arg @ref LL_APB1_GRP2_PERIPH_SPI1 + * @arg @ref LL_APB1_GRP2_PERIPH_USART1 + * @arg @ref LL_APB1_GRP2_PERIPH_TIM15 (*) + * @arg @ref LL_APB1_GRP2_PERIPH_TIM16 + * @arg @ref LL_APB1_GRP2_PERIPH_TIM17 + * @arg @ref LL_APB1_GRP2_PERIPH_DBGMCU + * + * (*) value not defined in all devices. + * @retval None +*/ +__STATIC_INLINE void LL_APB1_GRP2_DisableClock(uint32_t Periphs) +{ + CLEAR_BIT(RCC->APB2ENR, Periphs); +} + +/** + * @brief Force APB1 peripherals reset (available in register 2). + * @rmtoll APB2RSTR SYSCFGRST LL_APB1_GRP2_ForceReset\n + * APB2RSTR ADC1RST LL_APB1_GRP2_ForceReset\n + * APB2RSTR USART8RST LL_APB1_GRP2_ForceReset\n + * APB2RSTR USART7RST LL_APB1_GRP2_ForceReset\n + * APB2RSTR USART6RST LL_APB1_GRP2_ForceReset\n + * APB2RSTR TIM1RST LL_APB1_GRP2_ForceReset\n + * APB2RSTR SPI1RST LL_APB1_GRP2_ForceReset\n + * APB2RSTR USART1RST LL_APB1_GRP2_ForceReset\n + * APB2RSTR TIM15RST LL_APB1_GRP2_ForceReset\n + * APB2RSTR TIM16RST LL_APB1_GRP2_ForceReset\n + * APB2RSTR TIM17RST LL_APB1_GRP2_ForceReset\n + * APB2RSTR DBGMCURST LL_APB1_GRP2_ForceReset + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_APB1_GRP2_PERIPH_ALL + * @arg @ref LL_APB1_GRP2_PERIPH_SYSCFG + * @arg @ref LL_APB1_GRP2_PERIPH_ADC1 + * @arg @ref LL_APB1_GRP2_PERIPH_USART8 (*) + * @arg @ref LL_APB1_GRP2_PERIPH_USART7 (*) + * @arg @ref LL_APB1_GRP2_PERIPH_USART6 (*) + * @arg @ref LL_APB1_GRP2_PERIPH_TIM1 + * @arg @ref LL_APB1_GRP2_PERIPH_SPI1 + * @arg @ref LL_APB1_GRP2_PERIPH_USART1 + * @arg @ref LL_APB1_GRP2_PERIPH_TIM15 (*) + * @arg @ref LL_APB1_GRP2_PERIPH_TIM16 + * @arg @ref LL_APB1_GRP2_PERIPH_TIM17 + * @arg @ref LL_APB1_GRP2_PERIPH_DBGMCU + * + * (*) value not defined in all devices. + * @retval None +*/ +__STATIC_INLINE void LL_APB1_GRP2_ForceReset(uint32_t Periphs) +{ + SET_BIT(RCC->APB2RSTR, Periphs); +} + +/** + * @brief Release APB1 peripherals reset (available in register 2). + * @rmtoll APB2RSTR SYSCFGRST LL_APB1_GRP2_ReleaseReset\n + * APB2RSTR ADC1RST LL_APB1_GRP2_ReleaseReset\n + * APB2RSTR USART8RST LL_APB1_GRP2_ReleaseReset\n + * APB2RSTR USART7RST LL_APB1_GRP2_ReleaseReset\n + * APB2RSTR USART6RST LL_APB1_GRP2_ReleaseReset\n + * APB2RSTR TIM1RST LL_APB1_GRP2_ReleaseReset\n + * APB2RSTR SPI1RST LL_APB1_GRP2_ReleaseReset\n + * APB2RSTR USART1RST LL_APB1_GRP2_ReleaseReset\n + * APB2RSTR TIM15RST LL_APB1_GRP2_ReleaseReset\n + * APB2RSTR TIM16RST LL_APB1_GRP2_ReleaseReset\n + * APB2RSTR TIM17RST LL_APB1_GRP2_ReleaseReset\n + * APB2RSTR DBGMCURST LL_APB1_GRP2_ReleaseReset + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_APB1_GRP2_PERIPH_ALL + * @arg @ref LL_APB1_GRP2_PERIPH_SYSCFG + * @arg @ref LL_APB1_GRP2_PERIPH_ADC1 + * @arg @ref LL_APB1_GRP2_PERIPH_USART8 (*) + * @arg @ref LL_APB1_GRP2_PERIPH_USART7 (*) + * @arg @ref LL_APB1_GRP2_PERIPH_USART6 (*) + * @arg @ref LL_APB1_GRP2_PERIPH_TIM1 + * @arg @ref LL_APB1_GRP2_PERIPH_SPI1 + * @arg @ref LL_APB1_GRP2_PERIPH_USART1 + * @arg @ref LL_APB1_GRP2_PERIPH_TIM15 (*) + * @arg @ref LL_APB1_GRP2_PERIPH_TIM16 + * @arg @ref LL_APB1_GRP2_PERIPH_TIM17 + * @arg @ref LL_APB1_GRP2_PERIPH_DBGMCU + * + * (*) value not defined in all devices. + * @retval None +*/ +__STATIC_INLINE void LL_APB1_GRP2_ReleaseReset(uint32_t Periphs) +{ + CLEAR_BIT(RCC->APB2RSTR, Periphs); +} + +/** + * @} + */ + + +/** + * @} + */ + +/** + * @} + */ + +#endif /* defined(RCC) */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F0xx_LL_BUS_H */ + diff --git a/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_cortex.h b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_cortex.h new file mode 100644 index 0000000..25c8bba --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_cortex.h @@ -0,0 +1,318 @@ +/** + ****************************************************************************** + * @file stm32f0xx_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) + (+) API to access to MCU info (CPUID register) + + @endverbatim + ****************************************************************************** + * @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 __STM32F0xx_LL_CORTEX_H +#define __STM32F0xx_LL_CORTEX_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f0xx.h" + +/** @addtogroup STM32F0xx_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. */ +/** + * @} + */ + +/** + * @} + */ + +/* 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_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 Architecture number + * @rmtoll SCB_CPUID ARCHITECTURE LL_CPUID_GetArchitecture + * @retval Value should be equal to 0xC for Cortex-M0 devices + */ +__STATIC_INLINE uint32_t LL_CPUID_GetArchitecture(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 0xC20 for Cortex-M0 + */ +__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); +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F0xx_LL_CORTEX_H */ + diff --git a/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_crs.h b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_crs.h new file mode 100644 index 0000000..b307753 --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_crs.h @@ -0,0 +1,780 @@ +/** + ****************************************************************************** + * @file stm32f0xx_ll_crs.h + * @author MCD Application Team + * @brief Header file of CRS 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 __STM32F0xx_LL_CRS_H +#define __STM32F0xx_LL_CRS_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f0xx.h" + +/** @addtogroup STM32F0xx_LL_Driver + * @{ + */ + +#if defined(CRS) + +/** @defgroup CRS_LL CRS + * @{ + */ + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/* Private macros ------------------------------------------------------------*/ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/** @defgroup CRS_LL_Exported_Constants CRS Exported Constants + * @{ + */ + +/** @defgroup CRS_LL_EC_GET_FLAG Get Flags Defines + * @brief Flags defines which can be used with LL_CRS_ReadReg function + * @{ + */ +#define LL_CRS_ISR_SYNCOKF CRS_ISR_SYNCOKF +#define LL_CRS_ISR_SYNCWARNF CRS_ISR_SYNCWARNF +#define LL_CRS_ISR_ERRF CRS_ISR_ERRF +#define LL_CRS_ISR_ESYNCF CRS_ISR_ESYNCF +#define LL_CRS_ISR_SYNCERR CRS_ISR_SYNCERR +#define LL_CRS_ISR_SYNCMISS CRS_ISR_SYNCMISS +#define LL_CRS_ISR_TRIMOVF CRS_ISR_TRIMOVF +/** + * @} + */ + +/** @defgroup CRS_LL_EC_IT IT Defines + * @brief IT defines which can be used with LL_CRS_ReadReg and LL_CRS_WriteReg functions + * @{ + */ +#define LL_CRS_CR_SYNCOKIE CRS_CR_SYNCOKIE +#define LL_CRS_CR_SYNCWARNIE CRS_CR_SYNCWARNIE +#define LL_CRS_CR_ERRIE CRS_CR_ERRIE +#define LL_CRS_CR_ESYNCIE CRS_CR_ESYNCIE +/** + * @} + */ + +/** @defgroup CRS_LL_EC_SYNC_DIV Synchronization Signal Divider + * @{ + */ +#define LL_CRS_SYNC_DIV_1 ((uint32_t)0x00U) /*!< Synchro Signal not divided (default) */ +#define LL_CRS_SYNC_DIV_2 CRS_CFGR_SYNCDIV_0 /*!< Synchro Signal divided by 2 */ +#define LL_CRS_SYNC_DIV_4 CRS_CFGR_SYNCDIV_1 /*!< Synchro Signal divided by 4 */ +#define LL_CRS_SYNC_DIV_8 (CRS_CFGR_SYNCDIV_1 | CRS_CFGR_SYNCDIV_0) /*!< Synchro Signal divided by 8 */ +#define LL_CRS_SYNC_DIV_16 CRS_CFGR_SYNCDIV_2 /*!< Synchro Signal divided by 16 */ +#define LL_CRS_SYNC_DIV_32 (CRS_CFGR_SYNCDIV_2 | CRS_CFGR_SYNCDIV_0) /*!< Synchro Signal divided by 32 */ +#define LL_CRS_SYNC_DIV_64 (CRS_CFGR_SYNCDIV_2 | CRS_CFGR_SYNCDIV_1) /*!< Synchro Signal divided by 64 */ +#define LL_CRS_SYNC_DIV_128 CRS_CFGR_SYNCDIV /*!< Synchro Signal divided by 128 */ +/** + * @} + */ + +/** @defgroup CRS_LL_EC_SYNC_SOURCE Synchronization Signal Source + * @{ + */ +#define LL_CRS_SYNC_SOURCE_GPIO ((uint32_t)0x00U) /*!< Synchro Signal source GPIO */ +#define LL_CRS_SYNC_SOURCE_LSE CRS_CFGR_SYNCSRC_0 /*!< Synchro Signal source LSE */ +#define LL_CRS_SYNC_SOURCE_USB CRS_CFGR_SYNCSRC_1 /*!< Synchro Signal source USB SOF (default)*/ +/** + * @} + */ + +/** @defgroup CRS_LL_EC_SYNC_POLARITY Synchronization Signal Polarity + * @{ + */ +#define LL_CRS_SYNC_POLARITY_RISING ((uint32_t)0x00U) /*!< Synchro Active on rising edge (default) */ +#define LL_CRS_SYNC_POLARITY_FALLING CRS_CFGR_SYNCPOL /*!< Synchro Active on falling edge */ +/** + * @} + */ + +/** @defgroup CRS_LL_EC_FREQERRORDIR Frequency Error Direction + * @{ + */ +#define LL_CRS_FREQ_ERROR_DIR_UP ((uint32_t)0x00U) /*!< Upcounting direction, the actual frequency is above the target */ +#define LL_CRS_FREQ_ERROR_DIR_DOWN ((uint32_t)CRS_ISR_FEDIR) /*!< Downcounting direction, the actual frequency is below the target */ +/** + * @} + */ + +/** @defgroup CRS_LL_EC_DEFAULTVALUES Default Values + * @{ + */ +/** + * @brief Reset value of the RELOAD field + * @note The reset value of the RELOAD field corresponds to a target frequency of 48 MHz + * and a synchronization signal frequency of 1 kHz (SOF signal from USB) + */ +#define LL_CRS_RELOADVALUE_DEFAULT ((uint32_t)0xBB7FU) + +/** + * @brief Reset value of Frequency error limit. + */ +#define LL_CRS_ERRORLIMIT_DEFAULT ((uint32_t)0x22U) + +/** + * @brief Reset value of the HSI48 Calibration field + * @note The default value is 32, which corresponds to the middle of the trimming interval. + * The trimming step is around 67 kHz between two consecutive TRIM steps. + * A higher TRIM value corresponds to a higher output frequency + */ +#define LL_CRS_HSI48CALIBRATION_DEFAULT ((uint32_t)0x20U) +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup CRS_LL_Exported_Macros CRS Exported Macros + * @{ + */ + +/** @defgroup CRS_LL_EM_WRITE_READ Common Write and read registers Macros + * @{ + */ + +/** + * @brief Write a value in CRS register + * @param __INSTANCE__ CRS Instance + * @param __REG__ Register to be written + * @param __VALUE__ Value to be written in the register + * @retval None + */ +#define LL_CRS_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__)) + +/** + * @brief Read a value in CRS register + * @param __INSTANCE__ CRS Instance + * @param __REG__ Register to be read + * @retval Register value + */ +#define LL_CRS_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__) +/** + * @} + */ + +/** @defgroup CRS_LL_EM_Exported_Macros_Calculate_Reload Exported_Macros_Calculate_Reload + * @{ + */ + +/** + * @brief Macro to calculate reload value to be set in CRS register according to target and sync frequencies + * @note The RELOAD value should be selected according to the ratio between + * the target frequency and the frequency of the synchronization source after + * prescaling. It is then decreased by one in order to reach the expected + * synchronization on the zero value. The formula is the following: + * RELOAD = (fTARGET / fSYNC) -1 + * @param __FTARGET__ Target frequency (value in Hz) + * @param __FSYNC__ Synchronization signal frequency (value in Hz) + * @retval Reload value (in Hz) + */ +#define __LL_CRS_CALC_CALCULATE_RELOADVALUE(__FTARGET__, __FSYNC__) (((__FTARGET__) / (__FSYNC__)) - 1U) + +/** + * @} + */ + +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ +/** @defgroup CRS_LL_Exported_Functions CRS Exported Functions + * @{ + */ + +/** @defgroup CRS_LL_EF_Configuration Configuration + * @{ + */ + +/** + * @brief Enable Frequency error counter + * @note When this bit is set, the CRS_CFGR register is write-protected and cannot be modified + * @rmtoll CR CEN LL_CRS_EnableFreqErrorCounter + * @retval None + */ +__STATIC_INLINE void LL_CRS_EnableFreqErrorCounter(void) +{ + SET_BIT(CRS->CR, CRS_CR_CEN); +} + +/** + * @brief Disable Frequency error counter + * @rmtoll CR CEN LL_CRS_DisableFreqErrorCounter + * @retval None + */ +__STATIC_INLINE void LL_CRS_DisableFreqErrorCounter(void) +{ + CLEAR_BIT(CRS->CR, CRS_CR_CEN); +} + +/** + * @brief Check if Frequency error counter is enabled or not + * @rmtoll CR CEN LL_CRS_IsEnabledFreqErrorCounter + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_CRS_IsEnabledFreqErrorCounter(void) +{ + return (READ_BIT(CRS->CR, CRS_CR_CEN) == (CRS_CR_CEN)); +} + +/** + * @brief Enable Automatic trimming counter + * @rmtoll CR AUTOTRIMEN LL_CRS_EnableAutoTrimming + * @retval None + */ +__STATIC_INLINE void LL_CRS_EnableAutoTrimming(void) +{ + SET_BIT(CRS->CR, CRS_CR_AUTOTRIMEN); +} + +/** + * @brief Disable Automatic trimming counter + * @rmtoll CR AUTOTRIMEN LL_CRS_DisableAutoTrimming + * @retval None + */ +__STATIC_INLINE void LL_CRS_DisableAutoTrimming(void) +{ + CLEAR_BIT(CRS->CR, CRS_CR_AUTOTRIMEN); +} + +/** + * @brief Check if Automatic trimming is enabled or not + * @rmtoll CR AUTOTRIMEN LL_CRS_IsEnabledAutoTrimming + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_CRS_IsEnabledAutoTrimming(void) +{ + return (READ_BIT(CRS->CR, CRS_CR_AUTOTRIMEN) == (CRS_CR_AUTOTRIMEN)); +} + +/** + * @brief Set HSI48 oscillator smooth trimming + * @note When the AUTOTRIMEN bit is set, this field is controlled by hardware and is read-only + * @rmtoll CR TRIM LL_CRS_SetHSI48SmoothTrimming + * @param Value a number between Min_Data = 0 and Max_Data = 63 + * @note Default value can be set thanks to @ref LL_CRS_HSI48CALIBRATION_DEFAULT + * @retval None + */ +__STATIC_INLINE void LL_CRS_SetHSI48SmoothTrimming(uint32_t Value) +{ + MODIFY_REG(CRS->CR, CRS_CR_TRIM, Value << CRS_CR_TRIM_Pos); +} + +/** + * @brief Get HSI48 oscillator smooth trimming + * @rmtoll CR TRIM LL_CRS_GetHSI48SmoothTrimming + * @retval a number between Min_Data = 0 and Max_Data = 63 + */ +__STATIC_INLINE uint32_t LL_CRS_GetHSI48SmoothTrimming(void) +{ + return (uint32_t)(READ_BIT(CRS->CR, CRS_CR_TRIM) >> CRS_CR_TRIM_Pos); +} + +/** + * @brief Set counter reload value + * @rmtoll CFGR RELOAD LL_CRS_SetReloadCounter + * @param Value a number between Min_Data = 0 and Max_Data = 0xFFFF + * @note Default value can be set thanks to @ref LL_CRS_RELOADVALUE_DEFAULT + * Otherwise it can be calculated in using macro @ref __LL_CRS_CALC_CALCULATE_RELOADVALUE (_FTARGET_, _FSYNC_) + * @retval None + */ +__STATIC_INLINE void LL_CRS_SetReloadCounter(uint32_t Value) +{ + MODIFY_REG(CRS->CFGR, CRS_CFGR_RELOAD, Value); +} + +/** + * @brief Get counter reload value + * @rmtoll CFGR RELOAD LL_CRS_GetReloadCounter + * @retval a number between Min_Data = 0 and Max_Data = 0xFFFF + */ +__STATIC_INLINE uint32_t LL_CRS_GetReloadCounter(void) +{ + return (uint32_t)(READ_BIT(CRS->CFGR, CRS_CFGR_RELOAD)); +} + +/** + * @brief Set frequency error limit + * @rmtoll CFGR FELIM LL_CRS_SetFreqErrorLimit + * @param Value a number between Min_Data = 0 and Max_Data = 255 + * @note Default value can be set thanks to @ref LL_CRS_ERRORLIMIT_DEFAULT + * @retval None + */ +__STATIC_INLINE void LL_CRS_SetFreqErrorLimit(uint32_t Value) +{ + MODIFY_REG(CRS->CFGR, CRS_CFGR_FELIM, Value << CRS_CFGR_FELIM_Pos); +} + +/** + * @brief Get frequency error limit + * @rmtoll CFGR FELIM LL_CRS_GetFreqErrorLimit + * @retval A number between Min_Data = 0 and Max_Data = 255 + */ +__STATIC_INLINE uint32_t LL_CRS_GetFreqErrorLimit(void) +{ + return (uint32_t)(READ_BIT(CRS->CFGR, CRS_CFGR_FELIM) >> CRS_CFGR_FELIM_Pos); +} + +/** + * @brief Set division factor for SYNC signal + * @rmtoll CFGR SYNCDIV LL_CRS_SetSyncDivider + * @param Divider This parameter can be one of the following values: + * @arg @ref LL_CRS_SYNC_DIV_1 + * @arg @ref LL_CRS_SYNC_DIV_2 + * @arg @ref LL_CRS_SYNC_DIV_4 + * @arg @ref LL_CRS_SYNC_DIV_8 + * @arg @ref LL_CRS_SYNC_DIV_16 + * @arg @ref LL_CRS_SYNC_DIV_32 + * @arg @ref LL_CRS_SYNC_DIV_64 + * @arg @ref LL_CRS_SYNC_DIV_128 + * @retval None + */ +__STATIC_INLINE void LL_CRS_SetSyncDivider(uint32_t Divider) +{ + MODIFY_REG(CRS->CFGR, CRS_CFGR_SYNCDIV, Divider); +} + +/** + * @brief Get division factor for SYNC signal + * @rmtoll CFGR SYNCDIV LL_CRS_GetSyncDivider + * @retval Returned value can be one of the following values: + * @arg @ref LL_CRS_SYNC_DIV_1 + * @arg @ref LL_CRS_SYNC_DIV_2 + * @arg @ref LL_CRS_SYNC_DIV_4 + * @arg @ref LL_CRS_SYNC_DIV_8 + * @arg @ref LL_CRS_SYNC_DIV_16 + * @arg @ref LL_CRS_SYNC_DIV_32 + * @arg @ref LL_CRS_SYNC_DIV_64 + * @arg @ref LL_CRS_SYNC_DIV_128 + */ +__STATIC_INLINE uint32_t LL_CRS_GetSyncDivider(void) +{ + return (uint32_t)(READ_BIT(CRS->CFGR, CRS_CFGR_SYNCDIV)); +} + +/** + * @brief Set SYNC signal source + * @rmtoll CFGR SYNCSRC LL_CRS_SetSyncSignalSource + * @param Source This parameter can be one of the following values: + * @arg @ref LL_CRS_SYNC_SOURCE_GPIO + * @arg @ref LL_CRS_SYNC_SOURCE_LSE + * @arg @ref LL_CRS_SYNC_SOURCE_USB + * @retval None + */ +__STATIC_INLINE void LL_CRS_SetSyncSignalSource(uint32_t Source) +{ + MODIFY_REG(CRS->CFGR, CRS_CFGR_SYNCSRC, Source); +} + +/** + * @brief Get SYNC signal source + * @rmtoll CFGR SYNCSRC LL_CRS_GetSyncSignalSource + * @retval Returned value can be one of the following values: + * @arg @ref LL_CRS_SYNC_SOURCE_GPIO + * @arg @ref LL_CRS_SYNC_SOURCE_LSE + * @arg @ref LL_CRS_SYNC_SOURCE_USB + */ +__STATIC_INLINE uint32_t LL_CRS_GetSyncSignalSource(void) +{ + return (uint32_t)(READ_BIT(CRS->CFGR, CRS_CFGR_SYNCSRC)); +} + +/** + * @brief Set input polarity for the SYNC signal source + * @rmtoll CFGR SYNCPOL LL_CRS_SetSyncPolarity + * @param Polarity This parameter can be one of the following values: + * @arg @ref LL_CRS_SYNC_POLARITY_RISING + * @arg @ref LL_CRS_SYNC_POLARITY_FALLING + * @retval None + */ +__STATIC_INLINE void LL_CRS_SetSyncPolarity(uint32_t Polarity) +{ + MODIFY_REG(CRS->CFGR, CRS_CFGR_SYNCPOL, Polarity); +} + +/** + * @brief Get input polarity for the SYNC signal source + * @rmtoll CFGR SYNCPOL LL_CRS_GetSyncPolarity + * @retval Returned value can be one of the following values: + * @arg @ref LL_CRS_SYNC_POLARITY_RISING + * @arg @ref LL_CRS_SYNC_POLARITY_FALLING + */ +__STATIC_INLINE uint32_t LL_CRS_GetSyncPolarity(void) +{ + return (uint32_t)(READ_BIT(CRS->CFGR, CRS_CFGR_SYNCPOL)); +} + +/** + * @brief Configure CRS for the synchronization + * @rmtoll CR TRIM LL_CRS_ConfigSynchronization\n + * CFGR RELOAD LL_CRS_ConfigSynchronization\n + * CFGR FELIM LL_CRS_ConfigSynchronization\n + * CFGR SYNCDIV LL_CRS_ConfigSynchronization\n + * CFGR SYNCSRC LL_CRS_ConfigSynchronization\n + * CFGR SYNCPOL LL_CRS_ConfigSynchronization + * @param HSI48CalibrationValue a number between Min_Data = 0 and Max_Data = 63 + * @param ErrorLimitValue a number between Min_Data = 0 and Max_Data = 0xFFFF + * @param ReloadValue a number between Min_Data = 0 and Max_Data = 255 + * @param Settings This parameter can be a combination of the following values: + * @arg @ref LL_CRS_SYNC_DIV_1 or @ref LL_CRS_SYNC_DIV_2 or @ref LL_CRS_SYNC_DIV_4 or @ref LL_CRS_SYNC_DIV_8 + * or @ref LL_CRS_SYNC_DIV_16 or @ref LL_CRS_SYNC_DIV_32 or @ref LL_CRS_SYNC_DIV_64 or @ref LL_CRS_SYNC_DIV_128 + * @arg @ref LL_CRS_SYNC_SOURCE_GPIO or @ref LL_CRS_SYNC_SOURCE_LSE or @ref LL_CRS_SYNC_SOURCE_USB + * @arg @ref LL_CRS_SYNC_POLARITY_RISING or @ref LL_CRS_SYNC_POLARITY_FALLING + * @retval None + */ +__STATIC_INLINE void LL_CRS_ConfigSynchronization(uint32_t HSI48CalibrationValue, uint32_t ErrorLimitValue, uint32_t ReloadValue, uint32_t Settings) +{ + MODIFY_REG(CRS->CR, CRS_CR_TRIM, HSI48CalibrationValue << CRS_CR_TRIM_Pos); + MODIFY_REG(CRS->CFGR, + CRS_CFGR_RELOAD | CRS_CFGR_FELIM | CRS_CFGR_SYNCDIV | CRS_CFGR_SYNCSRC | CRS_CFGR_SYNCPOL, + ReloadValue | (ErrorLimitValue << CRS_CFGR_FELIM_Pos) | Settings); +} + +/** + * @} + */ + +/** @defgroup CRS_LL_EF_CRS_Management CRS_Management + * @{ + */ + +/** + * @brief Generate software SYNC event + * @rmtoll CR SWSYNC LL_CRS_GenerateEvent_SWSYNC + * @retval None + */ +__STATIC_INLINE void LL_CRS_GenerateEvent_SWSYNC(void) +{ + SET_BIT(CRS->CR, CRS_CR_SWSYNC); +} + +/** + * @brief Get the frequency error direction latched in the time of the last + * SYNC event + * @rmtoll ISR FEDIR LL_CRS_GetFreqErrorDirection + * @retval Returned value can be one of the following values: + * @arg @ref LL_CRS_FREQ_ERROR_DIR_UP + * @arg @ref LL_CRS_FREQ_ERROR_DIR_DOWN + */ +__STATIC_INLINE uint32_t LL_CRS_GetFreqErrorDirection(void) +{ + return (uint32_t)(READ_BIT(CRS->ISR, CRS_ISR_FEDIR)); +} + +/** + * @brief Get the frequency error counter value latched in the time of the last SYNC event + * @rmtoll ISR FECAP LL_CRS_GetFreqErrorCapture + * @retval A number between Min_Data = 0x0000 and Max_Data = 0xFFFF + */ +__STATIC_INLINE uint32_t LL_CRS_GetFreqErrorCapture(void) +{ + return (uint32_t)(READ_BIT(CRS->ISR, CRS_ISR_FECAP) >> CRS_ISR_FECAP_Pos); +} + +/** + * @} + */ + +/** @defgroup CRS_LL_EF_FLAG_Management FLAG_Management + * @{ + */ + +/** + * @brief Check if SYNC event OK signal occurred or not + * @rmtoll ISR SYNCOKF LL_CRS_IsActiveFlag_SYNCOK + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_CRS_IsActiveFlag_SYNCOK(void) +{ + return (READ_BIT(CRS->ISR, CRS_ISR_SYNCOKF) == (CRS_ISR_SYNCOKF)); +} + +/** + * @brief Check if SYNC warning signal occurred or not + * @rmtoll ISR SYNCWARNF LL_CRS_IsActiveFlag_SYNCWARN + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_CRS_IsActiveFlag_SYNCWARN(void) +{ + return (READ_BIT(CRS->ISR, CRS_ISR_SYNCWARNF) == (CRS_ISR_SYNCWARNF)); +} + +/** + * @brief Check if Synchronization or trimming error signal occurred or not + * @rmtoll ISR ERRF LL_CRS_IsActiveFlag_ERR + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_CRS_IsActiveFlag_ERR(void) +{ + return (READ_BIT(CRS->ISR, CRS_ISR_ERRF) == (CRS_ISR_ERRF)); +} + +/** + * @brief Check if Expected SYNC signal occurred or not + * @rmtoll ISR ESYNCF LL_CRS_IsActiveFlag_ESYNC + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_CRS_IsActiveFlag_ESYNC(void) +{ + return (READ_BIT(CRS->ISR, CRS_ISR_ESYNCF) == (CRS_ISR_ESYNCF)); +} + +/** + * @brief Check if SYNC error signal occurred or not + * @rmtoll ISR SYNCERR LL_CRS_IsActiveFlag_SYNCERR + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_CRS_IsActiveFlag_SYNCERR(void) +{ + return (READ_BIT(CRS->ISR, CRS_ISR_SYNCERR) == (CRS_ISR_SYNCERR)); +} + +/** + * @brief Check if SYNC missed error signal occurred or not + * @rmtoll ISR SYNCMISS LL_CRS_IsActiveFlag_SYNCMISS + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_CRS_IsActiveFlag_SYNCMISS(void) +{ + return (READ_BIT(CRS->ISR, CRS_ISR_SYNCMISS) == (CRS_ISR_SYNCMISS)); +} + +/** + * @brief Check if Trimming overflow or underflow occurred or not + * @rmtoll ISR TRIMOVF LL_CRS_IsActiveFlag_TRIMOVF + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_CRS_IsActiveFlag_TRIMOVF(void) +{ + return (READ_BIT(CRS->ISR, CRS_ISR_TRIMOVF) == (CRS_ISR_TRIMOVF)); +} + +/** + * @brief Clear the SYNC event OK flag + * @rmtoll ICR SYNCOKC LL_CRS_ClearFlag_SYNCOK + * @retval None + */ +__STATIC_INLINE void LL_CRS_ClearFlag_SYNCOK(void) +{ + WRITE_REG(CRS->ICR, CRS_ICR_SYNCOKC); +} + +/** + * @brief Clear the SYNC warning flag + * @rmtoll ICR SYNCWARNC LL_CRS_ClearFlag_SYNCWARN + * @retval None + */ +__STATIC_INLINE void LL_CRS_ClearFlag_SYNCWARN(void) +{ + WRITE_REG(CRS->ICR, CRS_ICR_SYNCWARNC); +} + +/** + * @brief Clear TRIMOVF, SYNCMISS and SYNCERR bits and consequently also + * the ERR flag + * @rmtoll ICR ERRC LL_CRS_ClearFlag_ERR + * @retval None + */ +__STATIC_INLINE void LL_CRS_ClearFlag_ERR(void) +{ + WRITE_REG(CRS->ICR, CRS_ICR_ERRC); +} + +/** + * @brief Clear Expected SYNC flag + * @rmtoll ICR ESYNCC LL_CRS_ClearFlag_ESYNC + * @retval None + */ +__STATIC_INLINE void LL_CRS_ClearFlag_ESYNC(void) +{ + WRITE_REG(CRS->ICR, CRS_ICR_ESYNCC); +} + +/** + * @} + */ + +/** @defgroup CRS_LL_EF_IT_Management IT_Management + * @{ + */ + +/** + * @brief Enable SYNC event OK interrupt + * @rmtoll CR SYNCOKIE LL_CRS_EnableIT_SYNCOK + * @retval None + */ +__STATIC_INLINE void LL_CRS_EnableIT_SYNCOK(void) +{ + SET_BIT(CRS->CR, CRS_CR_SYNCOKIE); +} + +/** + * @brief Disable SYNC event OK interrupt + * @rmtoll CR SYNCOKIE LL_CRS_DisableIT_SYNCOK + * @retval None + */ +__STATIC_INLINE void LL_CRS_DisableIT_SYNCOK(void) +{ + CLEAR_BIT(CRS->CR, CRS_CR_SYNCOKIE); +} + +/** + * @brief Check if SYNC event OK interrupt is enabled or not + * @rmtoll CR SYNCOKIE LL_CRS_IsEnabledIT_SYNCOK + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_CRS_IsEnabledIT_SYNCOK(void) +{ + return (READ_BIT(CRS->CR, CRS_CR_SYNCOKIE) == (CRS_CR_SYNCOKIE)); +} + +/** + * @brief Enable SYNC warning interrupt + * @rmtoll CR SYNCWARNIE LL_CRS_EnableIT_SYNCWARN + * @retval None + */ +__STATIC_INLINE void LL_CRS_EnableIT_SYNCWARN(void) +{ + SET_BIT(CRS->CR, CRS_CR_SYNCWARNIE); +} + +/** + * @brief Disable SYNC warning interrupt + * @rmtoll CR SYNCWARNIE LL_CRS_DisableIT_SYNCWARN + * @retval None + */ +__STATIC_INLINE void LL_CRS_DisableIT_SYNCWARN(void) +{ + CLEAR_BIT(CRS->CR, CRS_CR_SYNCWARNIE); +} + +/** + * @brief Check if SYNC warning interrupt is enabled or not + * @rmtoll CR SYNCWARNIE LL_CRS_IsEnabledIT_SYNCWARN + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_CRS_IsEnabledIT_SYNCWARN(void) +{ + return (READ_BIT(CRS->CR, CRS_CR_SYNCWARNIE) == (CRS_CR_SYNCWARNIE)); +} + +/** + * @brief Enable Synchronization or trimming error interrupt + * @rmtoll CR ERRIE LL_CRS_EnableIT_ERR + * @retval None + */ +__STATIC_INLINE void LL_CRS_EnableIT_ERR(void) +{ + SET_BIT(CRS->CR, CRS_CR_ERRIE); +} + +/** + * @brief Disable Synchronization or trimming error interrupt + * @rmtoll CR ERRIE LL_CRS_DisableIT_ERR + * @retval None + */ +__STATIC_INLINE void LL_CRS_DisableIT_ERR(void) +{ + CLEAR_BIT(CRS->CR, CRS_CR_ERRIE); +} + +/** + * @brief Check if Synchronization or trimming error interrupt is enabled or not + * @rmtoll CR ERRIE LL_CRS_IsEnabledIT_ERR + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_CRS_IsEnabledIT_ERR(void) +{ + return (READ_BIT(CRS->CR, CRS_CR_ERRIE) == (CRS_CR_ERRIE)); +} + +/** + * @brief Enable Expected SYNC interrupt + * @rmtoll CR ESYNCIE LL_CRS_EnableIT_ESYNC + * @retval None + */ +__STATIC_INLINE void LL_CRS_EnableIT_ESYNC(void) +{ + SET_BIT(CRS->CR, CRS_CR_ESYNCIE); +} + +/** + * @brief Disable Expected SYNC interrupt + * @rmtoll CR ESYNCIE LL_CRS_DisableIT_ESYNC + * @retval None + */ +__STATIC_INLINE void LL_CRS_DisableIT_ESYNC(void) +{ + CLEAR_BIT(CRS->CR, CRS_CR_ESYNCIE); +} + +/** + * @brief Check if Expected SYNC interrupt is enabled or not + * @rmtoll CR ESYNCIE LL_CRS_IsEnabledIT_ESYNC + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_CRS_IsEnabledIT_ESYNC(void) +{ + return (READ_BIT(CRS->CR, CRS_CR_ESYNCIE) == (CRS_CR_ESYNCIE)); +} + +/** + * @} + */ + +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup CRS_LL_EF_Init Initialization and de-initialization functions + * @{ + */ + +ErrorStatus LL_CRS_DeInit(void); + +/** + * @} + */ +#endif /* USE_FULL_LL_DRIVER */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* defined(CRS) */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F0xx_LL_CRS_H */ diff --git a/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_dma.h b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_dma.h new file mode 100644 index 0000000..998c4b9 --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_dma.h @@ -0,0 +1,2234 @@ +/** + ****************************************************************************** + * @file stm32f0xx_ll_dma.h + * @author MCD Application Team + * @brief Header file of DMA 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 __STM32F0xx_LL_DMA_H +#define __STM32F0xx_LL_DMA_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f0xx.h" + +/** @addtogroup STM32F0xx_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 channel register offset versus channel index LL_DMA_CHANNEL_x */ +static const uint8_t CHANNEL_OFFSET_TAB[] = +{ + (uint8_t)(DMA1_Channel1_BASE - DMA1_BASE), + (uint8_t)(DMA1_Channel2_BASE - DMA1_BASE), + (uint8_t)(DMA1_Channel3_BASE - DMA1_BASE), + (uint8_t)(DMA1_Channel4_BASE - DMA1_BASE), + (uint8_t)(DMA1_Channel5_BASE - DMA1_BASE), +#if defined(DMA1_Channel6) + (uint8_t)(DMA1_Channel6_BASE - DMA1_BASE), +#endif /*DMA1_Channel6*/ +#if defined(DMA1_Channel7) + (uint8_t)(DMA1_Channel7_BASE - DMA1_BASE) +#endif /*DMA1_Channel7*/ +}; +/** + * @} + */ + +/* Private constants ---------------------------------------------------------*/ +/** @defgroup DMA_LL_Private_Constants DMA Private Constants + * @{ + */ +/* Define used to get CSELR register offset */ +#define DMA_CSELR_OFFSET (uint32_t)(DMA1_CSELR_BASE - DMA1_BASE) + +/* Defines used for the bit position in the register and perform offsets */ +#define DMA_POSITION_CSELR_CXS ((Channel-1U)*4U) +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup DMA_LL_Private_Macros DMA Private Macros + * @{ + */ +/** + * @} + */ +#endif /*USE_FULL_LL_DRIVER*/ + +/* 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 Channel + + 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(). */ +#if (defined(DMA1_CSELR_DEFAULT)||defined(DMA2_CSELR_DEFAULT)) + + uint32_t PeriphRequest; /*!< Specifies the peripheral request. + This parameter can be a value of @ref DMA_LL_EC_REQUEST + + This feature can be modified afterwards using unitary function @ref LL_DMA_SetPeriphRequest(). */ +#endif + + 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_SetChannelPriorityLevel(). */ + +} LL_DMA_InitTypeDef; +/** + * @} + */ +#endif /*USE_FULL_LL_DRIVER*/ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup DMA_LL_Exported_Constants DMA Exported Constants + * @{ + */ +/** @defgroup DMA_LL_EC_CLEAR_FLAG Clear Flags Defines + * @brief Flags defines which can be used with LL_DMA_WriteReg function + * @{ + */ +#define LL_DMA_IFCR_CGIF1 DMA_IFCR_CGIF1 /*!< Channel 1 global flag */ +#define LL_DMA_IFCR_CTCIF1 DMA_IFCR_CTCIF1 /*!< Channel 1 transfer complete flag */ +#define LL_DMA_IFCR_CHTIF1 DMA_IFCR_CHTIF1 /*!< Channel 1 half transfer flag */ +#define LL_DMA_IFCR_CTEIF1 DMA_IFCR_CTEIF1 /*!< Channel 1 transfer error flag */ +#define LL_DMA_IFCR_CGIF2 DMA_IFCR_CGIF2 /*!< Channel 2 global flag */ +#define LL_DMA_IFCR_CTCIF2 DMA_IFCR_CTCIF2 /*!< Channel 2 transfer complete flag */ +#define LL_DMA_IFCR_CHTIF2 DMA_IFCR_CHTIF2 /*!< Channel 2 half transfer flag */ +#define LL_DMA_IFCR_CTEIF2 DMA_IFCR_CTEIF2 /*!< Channel 2 transfer error flag */ +#define LL_DMA_IFCR_CGIF3 DMA_IFCR_CGIF3 /*!< Channel 3 global flag */ +#define LL_DMA_IFCR_CTCIF3 DMA_IFCR_CTCIF3 /*!< Channel 3 transfer complete flag */ +#define LL_DMA_IFCR_CHTIF3 DMA_IFCR_CHTIF3 /*!< Channel 3 half transfer flag */ +#define LL_DMA_IFCR_CTEIF3 DMA_IFCR_CTEIF3 /*!< Channel 3 transfer error flag */ +#define LL_DMA_IFCR_CGIF4 DMA_IFCR_CGIF4 /*!< Channel 4 global flag */ +#define LL_DMA_IFCR_CTCIF4 DMA_IFCR_CTCIF4 /*!< Channel 4 transfer complete flag */ +#define LL_DMA_IFCR_CHTIF4 DMA_IFCR_CHTIF4 /*!< Channel 4 half transfer flag */ +#define LL_DMA_IFCR_CTEIF4 DMA_IFCR_CTEIF4 /*!< Channel 4 transfer error flag */ +#define LL_DMA_IFCR_CGIF5 DMA_IFCR_CGIF5 /*!< Channel 5 global flag */ +#define LL_DMA_IFCR_CTCIF5 DMA_IFCR_CTCIF5 /*!< Channel 5 transfer complete flag */ +#define LL_DMA_IFCR_CHTIF5 DMA_IFCR_CHTIF5 /*!< Channel 5 half transfer flag */ +#define LL_DMA_IFCR_CTEIF5 DMA_IFCR_CTEIF5 /*!< Channel 5 transfer error flag */ +#if defined(DMA1_Channel6) +#define LL_DMA_IFCR_CGIF6 DMA_IFCR_CGIF6 /*!< Channel 6 global flag */ +#define LL_DMA_IFCR_CTCIF6 DMA_IFCR_CTCIF6 /*!< Channel 6 transfer complete flag */ +#define LL_DMA_IFCR_CHTIF6 DMA_IFCR_CHTIF6 /*!< Channel 6 half transfer flag */ +#define LL_DMA_IFCR_CTEIF6 DMA_IFCR_CTEIF6 /*!< Channel 6 transfer error flag */ +#endif +#if defined(DMA1_Channel7) +#define LL_DMA_IFCR_CGIF7 DMA_IFCR_CGIF7 /*!< Channel 7 global flag */ +#define LL_DMA_IFCR_CTCIF7 DMA_IFCR_CTCIF7 /*!< Channel 7 transfer complete flag */ +#define LL_DMA_IFCR_CHTIF7 DMA_IFCR_CHTIF7 /*!< Channel 7 half transfer flag */ +#define LL_DMA_IFCR_CTEIF7 DMA_IFCR_CTEIF7 /*!< Channel 7 transfer error flag */ +#endif +/** + * @} + */ + +/** @defgroup DMA_LL_EC_GET_FLAG Get Flags Defines + * @brief Flags defines which can be used with LL_DMA_ReadReg function + * @{ + */ +#define LL_DMA_ISR_GIF1 DMA_ISR_GIF1 /*!< Channel 1 global flag */ +#define LL_DMA_ISR_TCIF1 DMA_ISR_TCIF1 /*!< Channel 1 transfer complete flag */ +#define LL_DMA_ISR_HTIF1 DMA_ISR_HTIF1 /*!< Channel 1 half transfer flag */ +#define LL_DMA_ISR_TEIF1 DMA_ISR_TEIF1 /*!< Channel 1 transfer error flag */ +#define LL_DMA_ISR_GIF2 DMA_ISR_GIF2 /*!< Channel 2 global flag */ +#define LL_DMA_ISR_TCIF2 DMA_ISR_TCIF2 /*!< Channel 2 transfer complete flag */ +#define LL_DMA_ISR_HTIF2 DMA_ISR_HTIF2 /*!< Channel 2 half transfer flag */ +#define LL_DMA_ISR_TEIF2 DMA_ISR_TEIF2 /*!< Channel 2 transfer error flag */ +#define LL_DMA_ISR_GIF3 DMA_ISR_GIF3 /*!< Channel 3 global flag */ +#define LL_DMA_ISR_TCIF3 DMA_ISR_TCIF3 /*!< Channel 3 transfer complete flag */ +#define LL_DMA_ISR_HTIF3 DMA_ISR_HTIF3 /*!< Channel 3 half transfer flag */ +#define LL_DMA_ISR_TEIF3 DMA_ISR_TEIF3 /*!< Channel 3 transfer error flag */ +#define LL_DMA_ISR_GIF4 DMA_ISR_GIF4 /*!< Channel 4 global flag */ +#define LL_DMA_ISR_TCIF4 DMA_ISR_TCIF4 /*!< Channel 4 transfer complete flag */ +#define LL_DMA_ISR_HTIF4 DMA_ISR_HTIF4 /*!< Channel 4 half transfer flag */ +#define LL_DMA_ISR_TEIF4 DMA_ISR_TEIF4 /*!< Channel 4 transfer error flag */ +#define LL_DMA_ISR_GIF5 DMA_ISR_GIF5 /*!< Channel 5 global flag */ +#define LL_DMA_ISR_TCIF5 DMA_ISR_TCIF5 /*!< Channel 5 transfer complete flag */ +#define LL_DMA_ISR_HTIF5 DMA_ISR_HTIF5 /*!< Channel 5 half transfer flag */ +#define LL_DMA_ISR_TEIF5 DMA_ISR_TEIF5 /*!< Channel 5 transfer error flag */ +#if defined(DMA1_Channel6) +#define LL_DMA_ISR_GIF6 DMA_ISR_GIF6 /*!< Channel 6 global flag */ +#define LL_DMA_ISR_TCIF6 DMA_ISR_TCIF6 /*!< Channel 6 transfer complete flag */ +#define LL_DMA_ISR_HTIF6 DMA_ISR_HTIF6 /*!< Channel 6 half transfer flag */ +#define LL_DMA_ISR_TEIF6 DMA_ISR_TEIF6 /*!< Channel 6 transfer error flag */ +#endif +#if defined(DMA1_Channel7) +#define LL_DMA_ISR_GIF7 DMA_ISR_GIF7 /*!< Channel 7 global flag */ +#define LL_DMA_ISR_TCIF7 DMA_ISR_TCIF7 /*!< Channel 7 transfer complete flag */ +#define LL_DMA_ISR_HTIF7 DMA_ISR_HTIF7 /*!< Channel 7 half transfer flag */ +#define LL_DMA_ISR_TEIF7 DMA_ISR_TEIF7 /*!< Channel 7 transfer error flag */ +#endif +/** + * @} + */ + +/** @defgroup DMA_LL_EC_IT IT Defines + * @brief IT defines which can be used with LL_DMA_ReadReg and LL_DMA_WriteReg functions + * @{ + */ +#define LL_DMA_CCR_TCIE DMA_CCR_TCIE /*!< Transfer complete interrupt */ +#define LL_DMA_CCR_HTIE DMA_CCR_HTIE /*!< Half Transfer interrupt */ +#define LL_DMA_CCR_TEIE DMA_CCR_TEIE /*!< Transfer error interrupt */ +/** + * @} + */ + +/** @defgroup DMA_LL_EC_CHANNEL CHANNEL + * @{ + */ +#define LL_DMA_CHANNEL_1 0x00000001U /*!< DMA Channel 1 */ +#define LL_DMA_CHANNEL_2 0x00000002U /*!< DMA Channel 2 */ +#define LL_DMA_CHANNEL_3 0x00000003U /*!< DMA Channel 3 */ +#define LL_DMA_CHANNEL_4 0x00000004U /*!< DMA Channel 4 */ +#define LL_DMA_CHANNEL_5 0x00000005U /*!< DMA Channel 5 */ +#if defined(DMA1_Channel6) +#define LL_DMA_CHANNEL_6 0x00000006U /*!< DMA Channel 6 */ +#endif +#if defined(DMA1_Channel7) +#define LL_DMA_CHANNEL_7 0x00000007U /*!< DMA Channel 7 */ +#endif +#if defined(USE_FULL_LL_DRIVER) +#define LL_DMA_CHANNEL_ALL 0xFFFF0000U /*!< DMA Channel all (used only for function @ref LL_DMA_DeInit(). */ +#endif /*USE_FULL_LL_DRIVER*/ +/** + * @} + */ + +/** @defgroup DMA_LL_EC_DIRECTION Transfer Direction + * @{ + */ +#define LL_DMA_DIRECTION_PERIPH_TO_MEMORY 0x00000000U /*!< Peripheral to memory direction */ +#define LL_DMA_DIRECTION_MEMORY_TO_PERIPH DMA_CCR_DIR /*!< Memory to peripheral direction */ +#define LL_DMA_DIRECTION_MEMORY_TO_MEMORY DMA_CCR_MEM2MEM /*!< Memory to memory direction */ +/** + * @} + */ + +/** @defgroup DMA_LL_EC_MODE Transfer mode + * @{ + */ +#define LL_DMA_MODE_NORMAL 0x00000000U /*!< Normal Mode */ +#define LL_DMA_MODE_CIRCULAR DMA_CCR_CIRC /*!< Circular Mode */ +/** + * @} + */ + +/** @defgroup DMA_LL_EC_PERIPH Peripheral increment mode + * @{ + */ +#define LL_DMA_PERIPH_INCREMENT DMA_CCR_PINC /*!< Peripheral increment mode Enable */ +#define LL_DMA_PERIPH_NOINCREMENT 0x00000000U /*!< Peripheral increment mode Disable */ +/** + * @} + */ + +/** @defgroup DMA_LL_EC_MEMORY Memory increment mode + * @{ + */ +#define LL_DMA_MEMORY_INCREMENT DMA_CCR_MINC /*!< Memory increment mode Enable */ +#define LL_DMA_MEMORY_NOINCREMENT 0x00000000U /*!< Memory increment mode Disable */ +/** + * @} + */ + +/** @defgroup DMA_LL_EC_PDATAALIGN Peripheral data alignment + * @{ + */ +#define LL_DMA_PDATAALIGN_BYTE 0x00000000U /*!< Peripheral data alignment : Byte */ +#define LL_DMA_PDATAALIGN_HALFWORD DMA_CCR_PSIZE_0 /*!< Peripheral data alignment : HalfWord */ +#define LL_DMA_PDATAALIGN_WORD DMA_CCR_PSIZE_1 /*!< Peripheral data alignment : Word */ +/** + * @} + */ + +/** @defgroup DMA_LL_EC_MDATAALIGN Memory data alignment + * @{ + */ +#define LL_DMA_MDATAALIGN_BYTE 0x00000000U /*!< Memory data alignment : Byte */ +#define LL_DMA_MDATAALIGN_HALFWORD DMA_CCR_MSIZE_0 /*!< Memory data alignment : HalfWord */ +#define LL_DMA_MDATAALIGN_WORD DMA_CCR_MSIZE_1 /*!< Memory data alignment : Word */ +/** + * @} + */ + +/** @defgroup DMA_LL_EC_PRIORITY Transfer Priority level + * @{ + */ +#define LL_DMA_PRIORITY_LOW 0x00000000U /*!< Priority level : Low */ +#define LL_DMA_PRIORITY_MEDIUM DMA_CCR_PL_0 /*!< Priority level : Medium */ +#define LL_DMA_PRIORITY_HIGH DMA_CCR_PL_1 /*!< Priority level : High */ +#define LL_DMA_PRIORITY_VERYHIGH DMA_CCR_PL /*!< Priority level : Very_High */ +/** + * @} + */ + +#if (defined(DMA1_CSELR_DEFAULT)||defined(DMA2_CSELR_DEFAULT)) +/** @defgroup DMA_LL_EC_REQUEST Transfer peripheral request + * @{ + */ +#define LL_DMA_REQUEST_0 0x00000000U /*!< DMA peripheral request 0 */ +#define LL_DMA_REQUEST_1 0x00000001U /*!< DMA peripheral request 1 */ +#define LL_DMA_REQUEST_2 0x00000002U /*!< DMA peripheral request 2 */ +#define LL_DMA_REQUEST_3 0x00000003U /*!< DMA peripheral request 3 */ +#define LL_DMA_REQUEST_4 0x00000004U /*!< DMA peripheral request 4 */ +#define LL_DMA_REQUEST_5 0x00000005U /*!< DMA peripheral request 5 */ +#define LL_DMA_REQUEST_6 0x00000006U /*!< DMA peripheral request 6 */ +#define LL_DMA_REQUEST_7 0x00000007U /*!< DMA peripheral request 7 */ +#define LL_DMA_REQUEST_8 0x00000008U /*!< DMA peripheral request 8 */ +#define LL_DMA_REQUEST_9 0x00000009U /*!< DMA peripheral request 9 */ +#define LL_DMA_REQUEST_10 0x0000000AU /*!< DMA peripheral request 10 */ +#define LL_DMA_REQUEST_11 0x0000000BU /*!< DMA peripheral request 11 */ +#define LL_DMA_REQUEST_12 0x0000000CU /*!< DMA peripheral request 12 */ +#define LL_DMA_REQUEST_13 0x0000000DU /*!< DMA peripheral request 13 */ +#define LL_DMA_REQUEST_14 0x0000000EU /*!< DMA peripheral request 14 */ +#define LL_DMA_REQUEST_15 0x0000000FU /*!< DMA peripheral request 15 */ +/** + * @} + */ +#endif + +/** + * @} + */ + +/* 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 DMAxChannely + * @{ + */ +/** + * @brief Convert DMAx_Channely into DMAx + * @param __CHANNEL_INSTANCE__ DMAx_Channely + * @retval DMAx + */ +#if defined(DMA2) +#define __LL_DMA_GET_INSTANCE(__CHANNEL_INSTANCE__) \ +(((uint32_t)(__CHANNEL_INSTANCE__) > ((uint32_t)DMA1_Channel7)) ? DMA2 : DMA1) +#else +#define __LL_DMA_GET_INSTANCE(__CHANNEL_INSTANCE__) (DMA1) +#endif + +/** + * @brief Convert DMAx_Channely into LL_DMA_CHANNEL_y + * @param __CHANNEL_INSTANCE__ DMAx_Channely + * @retval LL_DMA_CHANNEL_y + */ +#if defined (DMA2) +#if defined (DMA2_Channel6) && defined (DMA2_Channel7) +#define __LL_DMA_GET_CHANNEL(__CHANNEL_INSTANCE__) \ +(((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel1)) ? LL_DMA_CHANNEL_1 : \ + ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA2_Channel1)) ? LL_DMA_CHANNEL_1 : \ + ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel2)) ? LL_DMA_CHANNEL_2 : \ + ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA2_Channel2)) ? LL_DMA_CHANNEL_2 : \ + ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel3)) ? LL_DMA_CHANNEL_3 : \ + ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA2_Channel3)) ? LL_DMA_CHANNEL_3 : \ + ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel4)) ? LL_DMA_CHANNEL_4 : \ + ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA2_Channel4)) ? LL_DMA_CHANNEL_4 : \ + ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel5)) ? LL_DMA_CHANNEL_5 : \ + ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA2_Channel5)) ? LL_DMA_CHANNEL_5 : \ + ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel6)) ? LL_DMA_CHANNEL_6 : \ + ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA2_Channel6)) ? LL_DMA_CHANNEL_6 : \ + LL_DMA_CHANNEL_7) +#else +#define __LL_DMA_GET_CHANNEL(__CHANNEL_INSTANCE__) \ +(((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel1)) ? LL_DMA_CHANNEL_1 : \ + ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA2_Channel1)) ? LL_DMA_CHANNEL_1 : \ + ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel2)) ? LL_DMA_CHANNEL_2 : \ + ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA2_Channel2)) ? LL_DMA_CHANNEL_2 : \ + ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel3)) ? LL_DMA_CHANNEL_3 : \ + ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA2_Channel3)) ? LL_DMA_CHANNEL_3 : \ + ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel4)) ? LL_DMA_CHANNEL_4 : \ + ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA2_Channel4)) ? LL_DMA_CHANNEL_4 : \ + ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel5)) ? LL_DMA_CHANNEL_5 : \ + ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA2_Channel5)) ? LL_DMA_CHANNEL_5 : \ + ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel6)) ? LL_DMA_CHANNEL_6 : \ + LL_DMA_CHANNEL_7) +#endif +#else +#if defined (DMA1_Channel6) && defined (DMA1_Channel7) +#define __LL_DMA_GET_CHANNEL(__CHANNEL_INSTANCE__) \ +(((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel1)) ? LL_DMA_CHANNEL_1 : \ + ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel2)) ? LL_DMA_CHANNEL_2 : \ + ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel3)) ? LL_DMA_CHANNEL_3 : \ + ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel4)) ? LL_DMA_CHANNEL_4 : \ + ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel5)) ? LL_DMA_CHANNEL_5 : \ + ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel6)) ? LL_DMA_CHANNEL_6 : \ + LL_DMA_CHANNEL_7) +#elif defined (DMA1_Channel6) +#define __LL_DMA_GET_CHANNEL(__CHANNEL_INSTANCE__) \ +(((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel1)) ? LL_DMA_CHANNEL_1 : \ + ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel2)) ? LL_DMA_CHANNEL_2 : \ + ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel3)) ? LL_DMA_CHANNEL_3 : \ + ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel4)) ? LL_DMA_CHANNEL_4 : \ + ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel5)) ? LL_DMA_CHANNEL_5 : \ + LL_DMA_CHANNEL_6) +#else +#define __LL_DMA_GET_CHANNEL(__CHANNEL_INSTANCE__) \ +(((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel1)) ? LL_DMA_CHANNEL_1 : \ + ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel2)) ? LL_DMA_CHANNEL_2 : \ + ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel3)) ? LL_DMA_CHANNEL_3 : \ + ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel4)) ? LL_DMA_CHANNEL_4 : \ + LL_DMA_CHANNEL_5) +#endif /* DMA1_Channel6 && DMA1_Channel7 */ +#endif + +/** + * @brief Convert DMA Instance DMAx and LL_DMA_CHANNEL_y into DMAx_Channely + * @param __DMA_INSTANCE__ DMAx + * @param __CHANNEL__ LL_DMA_CHANNEL_y + * @retval DMAx_Channely + */ +#if defined (DMA2) +#if defined (DMA2_Channel6) && defined (DMA2_Channel7) +#define __LL_DMA_GET_CHANNEL_INSTANCE(__DMA_INSTANCE__, __CHANNEL__) \ +((((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_1))) ? DMA1_Channel1 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_1))) ? DMA2_Channel1 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_2))) ? DMA1_Channel2 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_2))) ? DMA2_Channel2 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_3))) ? DMA1_Channel3 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_3))) ? DMA2_Channel3 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_4))) ? DMA1_Channel4 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_4))) ? DMA2_Channel4 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_5))) ? DMA1_Channel5 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_5))) ? DMA2_Channel5 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_6))) ? DMA1_Channel6 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_6))) ? DMA2_Channel6 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_7))) ? DMA1_Channel7 : \ + DMA2_Channel7) +#else +#define __LL_DMA_GET_CHANNEL_INSTANCE(__DMA_INSTANCE__, __CHANNEL__) \ +((((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_1))) ? DMA1_Channel1 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_1))) ? DMA2_Channel1 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_2))) ? DMA1_Channel2 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_2))) ? DMA2_Channel2 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_3))) ? DMA1_Channel3 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_3))) ? DMA2_Channel3 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_4))) ? DMA1_Channel4 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_4))) ? DMA2_Channel4 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_5))) ? DMA1_Channel5 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_5))) ? DMA2_Channel5 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_6))) ? DMA1_Channel6 : \ + DMA1_Channel7) +#endif +#else +#if defined (DMA1_Channel6) && defined (DMA1_Channel7) +#define __LL_DMA_GET_CHANNEL_INSTANCE(__DMA_INSTANCE__, __CHANNEL__) \ +((((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_1))) ? DMA1_Channel1 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_2))) ? DMA1_Channel2 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_3))) ? DMA1_Channel3 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_4))) ? DMA1_Channel4 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_5))) ? DMA1_Channel5 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_6))) ? DMA1_Channel6 : \ + DMA1_Channel7) +#elif defined (DMA1_Channel6) +#define __LL_DMA_GET_CHANNEL_INSTANCE(__DMA_INSTANCE__, __CHANNEL__) \ +((((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_1))) ? DMA1_Channel1 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_2))) ? DMA1_Channel2 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_3))) ? DMA1_Channel3 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_4))) ? DMA1_Channel4 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_5))) ? DMA1_Channel5 : \ + DMA1_Channel6) +#else +#define __LL_DMA_GET_CHANNEL_INSTANCE(__DMA_INSTANCE__, __CHANNEL__) \ +((((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_1))) ? DMA1_Channel1 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_2))) ? DMA1_Channel2 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_3))) ? DMA1_Channel3 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_4))) ? DMA1_Channel4 : \ + DMA1_Channel5) +#endif /* DMA1_Channel6 && DMA1_Channel7 */ +#endif + +/** + * @} + */ + +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ +/** @defgroup DMA_LL_Exported_Functions DMA Exported Functions + * @{ + */ + +/** @defgroup DMA_LL_EF_Configuration Configuration + * @{ + */ +/** + * @brief Enable DMA channel. + * @rmtoll CCR EN LL_DMA_EnableChannel + * @param DMAx DMAx Instance + * @param Channel This parameter can be one of the following values: + * @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_EnableChannel(DMA_TypeDef *DMAx, uint32_t Channel) +{ + SET_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, DMA_CCR_EN); +} + +/** + * @brief Disable DMA channel. + * @rmtoll CCR EN LL_DMA_DisableChannel + * @param DMAx DMAx Instance + * @param Channel This parameter can be one of the following values: + * @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_DisableChannel(DMA_TypeDef *DMAx, uint32_t Channel) +{ + CLEAR_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, DMA_CCR_EN); +} + +/** + * @brief Check if DMA channel is enabled or disabled. + * @rmtoll CCR EN LL_DMA_IsEnabledChannel + * @param DMAx DMAx Instance + * @param Channel This parameter can be one of the following values: + * @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 State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsEnabledChannel(DMA_TypeDef *DMAx, uint32_t Channel) +{ + return (READ_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, + DMA_CCR_EN) == (DMA_CCR_EN)); +} + +/** + * @brief Configure all parameters link to DMA transfer. + * @rmtoll CCR DIR LL_DMA_ConfigTransfer\n + * CCR MEM2MEM LL_DMA_ConfigTransfer\n + * CCR CIRC LL_DMA_ConfigTransfer\n + * CCR PINC LL_DMA_ConfigTransfer\n + * CCR MINC LL_DMA_ConfigTransfer\n + * CCR PSIZE LL_DMA_ConfigTransfer\n + * CCR MSIZE LL_DMA_ConfigTransfer\n + * CCR PL LL_DMA_ConfigTransfer + * @param DMAx DMAx Instance + * @param Channel This parameter can be one of the following values: + * @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 + * @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 + * @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 Channel, uint32_t Configuration) +{ + MODIFY_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, + DMA_CCR_DIR | DMA_CCR_MEM2MEM | DMA_CCR_CIRC | DMA_CCR_PINC | DMA_CCR_MINC | DMA_CCR_PSIZE | DMA_CCR_MSIZE | DMA_CCR_PL, + Configuration); +} + +/** + * @brief Set Data transfer direction (read from peripheral or from memory). + * @rmtoll CCR DIR LL_DMA_SetDataTransferDirection\n + * CCR MEM2MEM LL_DMA_SetDataTransferDirection + * @param DMAx DMAx Instance + * @param Channel This parameter can be one of the following values: + * @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 + * @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 Channel, uint32_t Direction) +{ + MODIFY_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, + DMA_CCR_DIR | DMA_CCR_MEM2MEM, Direction); +} + +/** + * @brief Get Data transfer direction (read from peripheral or from memory). + * @rmtoll CCR DIR LL_DMA_GetDataTransferDirection\n + * CCR MEM2MEM LL_DMA_GetDataTransferDirection + * @param DMAx DMAx Instance + * @param Channel This parameter can be one of the following values: + * @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 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 Channel) +{ + return (READ_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, + DMA_CCR_DIR | DMA_CCR_MEM2MEM)); +} + +/** + * @brief Set DMA mode circular or normal. + * @note The circular buffer mode cannot be used if the memory-to-memory + * data transfer is configured on the selected Channel. + * @rmtoll CCR CIRC LL_DMA_SetMode + * @param DMAx DMAx Instance + * @param Channel This parameter can be one of the following values: + * @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 + * @param Mode This parameter can be one of the following values: + * @arg @ref LL_DMA_MODE_NORMAL + * @arg @ref LL_DMA_MODE_CIRCULAR + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetMode(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Mode) +{ + MODIFY_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, DMA_CCR_CIRC, + Mode); +} + +/** + * @brief Get DMA mode circular or normal. + * @rmtoll CCR CIRC LL_DMA_GetMode + * @param DMAx DMAx Instance + * @param Channel This parameter can be one of the following values: + * @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 Returned value can be one of the following values: + * @arg @ref LL_DMA_MODE_NORMAL + * @arg @ref LL_DMA_MODE_CIRCULAR + */ +__STATIC_INLINE uint32_t LL_DMA_GetMode(DMA_TypeDef *DMAx, uint32_t Channel) +{ + return (READ_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, + DMA_CCR_CIRC)); +} + +/** + * @brief Set Peripheral increment mode. + * @rmtoll CCR PINC LL_DMA_SetPeriphIncMode + * @param DMAx DMAx Instance + * @param Channel This parameter can be one of the following values: + * @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 + * @param PeriphOrM2MSrcIncMode This parameter can be one of the following values: + * @arg @ref LL_DMA_PERIPH_INCREMENT + * @arg @ref LL_DMA_PERIPH_NOINCREMENT + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetPeriphIncMode(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t PeriphOrM2MSrcIncMode) +{ + MODIFY_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, DMA_CCR_PINC, + PeriphOrM2MSrcIncMode); +} + +/** + * @brief Get Peripheral increment mode. + * @rmtoll CCR PINC LL_DMA_GetPeriphIncMode + * @param DMAx DMAx Instance + * @param Channel This parameter can be one of the following values: + * @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 Returned value can be one of the following values: + * @arg @ref LL_DMA_PERIPH_INCREMENT + * @arg @ref LL_DMA_PERIPH_NOINCREMENT + */ +__STATIC_INLINE uint32_t LL_DMA_GetPeriphIncMode(DMA_TypeDef *DMAx, uint32_t Channel) +{ + return (READ_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, + DMA_CCR_PINC)); +} + +/** + * @brief Set Memory increment mode. + * @rmtoll CCR MINC LL_DMA_SetMemoryIncMode + * @param DMAx DMAx Instance + * @param Channel This parameter can be one of the following values: + * @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 + * @param MemoryOrM2MDstIncMode This parameter can be one of the following values: + * @arg @ref LL_DMA_MEMORY_INCREMENT + * @arg @ref LL_DMA_MEMORY_NOINCREMENT + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetMemoryIncMode(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t MemoryOrM2MDstIncMode) +{ + MODIFY_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, DMA_CCR_MINC, + MemoryOrM2MDstIncMode); +} + +/** + * @brief Get Memory increment mode. + * @rmtoll CCR MINC LL_DMA_GetMemoryIncMode + * @param DMAx DMAx Instance + * @param Channel This parameter can be one of the following values: + * @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 Returned value can be one of the following values: + * @arg @ref LL_DMA_MEMORY_INCREMENT + * @arg @ref LL_DMA_MEMORY_NOINCREMENT + */ +__STATIC_INLINE uint32_t LL_DMA_GetMemoryIncMode(DMA_TypeDef *DMAx, uint32_t Channel) +{ + return (READ_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, + DMA_CCR_MINC)); +} + +/** + * @brief Set Peripheral size. + * @rmtoll CCR PSIZE LL_DMA_SetPeriphSize + * @param DMAx DMAx Instance + * @param Channel This parameter can be one of the following values: + * @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 + * @param PeriphOrM2MSrcDataSize 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 Channel, uint32_t PeriphOrM2MSrcDataSize) +{ + MODIFY_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, DMA_CCR_PSIZE, + PeriphOrM2MSrcDataSize); +} + +/** + * @brief Get Peripheral size. + * @rmtoll CCR PSIZE LL_DMA_GetPeriphSize + * @param DMAx DMAx Instance + * @param Channel This parameter can be one of the following values: + * @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 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 Channel) +{ + return (READ_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, + DMA_CCR_PSIZE)); +} + +/** + * @brief Set Memory size. + * @rmtoll CCR MSIZE LL_DMA_SetMemorySize + * @param DMAx DMAx Instance + * @param Channel This parameter can be one of the following values: + * @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 + * @param MemoryOrM2MDstDataSize 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 Channel, uint32_t MemoryOrM2MDstDataSize) +{ + MODIFY_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, DMA_CCR_MSIZE, + MemoryOrM2MDstDataSize); +} + +/** + * @brief Get Memory size. + * @rmtoll CCR MSIZE LL_DMA_GetMemorySize + * @param DMAx DMAx Instance + * @param Channel This parameter can be one of the following values: + * @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 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 Channel) +{ + return (READ_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, + DMA_CCR_MSIZE)); +} + +/** + * @brief Set Channel priority level. + * @rmtoll CCR PL LL_DMA_SetChannelPriorityLevel + * @param DMAx DMAx Instance + * @param Channel This parameter can be one of the following values: + * @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 + * @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_SetChannelPriorityLevel(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Priority) +{ + MODIFY_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, DMA_CCR_PL, + Priority); +} + +/** + * @brief Get Channel priority level. + * @rmtoll CCR PL LL_DMA_GetChannelPriorityLevel + * @param DMAx DMAx Instance + * @param Channel This parameter can be one of the following values: + * @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 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_GetChannelPriorityLevel(DMA_TypeDef *DMAx, uint32_t Channel) +{ + return (READ_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, + DMA_CCR_PL)); +} + +/** + * @brief Set Number of data to transfer. + * @note This action has no effect if + * channel is enabled. + * @rmtoll CNDTR NDT LL_DMA_SetDataLength + * @param DMAx DMAx Instance + * @param Channel This parameter can be one of the following values: + * @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 + * @param NbData Between Min_Data = 0 and Max_Data = 0x0000FFFF + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetDataLength(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t NbData) +{ + MODIFY_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CNDTR, + DMA_CNDTR_NDT, NbData); +} + +/** + * @brief Get Number of data to transfer. + * @note Once the channel is enabled, the return value indicate the + * remaining bytes to be transmitted. + * @rmtoll CNDTR NDT LL_DMA_GetDataLength + * @param DMAx DMAx Instance + * @param Channel This parameter can be one of the following values: + * @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 Between Min_Data = 0 and Max_Data = 0xFFFFFFFF + */ +__STATIC_INLINE uint32_t LL_DMA_GetDataLength(DMA_TypeDef *DMAx, uint32_t Channel) +{ + return (READ_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CNDTR, + DMA_CNDTR_NDT)); +} + +/** + * @brief Configure the Source and Destination addresses. + * @note This API must not be called when the DMA channel is enabled. + * @note Each IP using DMA provides an API to get directly the register address (LL_PPP_DMA_GetRegAddr). + * @rmtoll CPAR PA LL_DMA_ConfigAddresses\n + * CMAR MA LL_DMA_ConfigAddresses + * @param DMAx DMAx Instance + * @param Channel This parameter can be one of the following values: + * @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 + * @param SrcAddress Between Min_Data = 0 and Max_Data = 0xFFFFFFFF + * @param DstAddress Between Min_Data = 0 and Max_Data = 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 Channel, uint32_t SrcAddress, + uint32_t DstAddress, uint32_t Direction) +{ + /* Direction Memory to Periph */ + if (Direction == LL_DMA_DIRECTION_MEMORY_TO_PERIPH) + { + WRITE_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CMAR, SrcAddress); + WRITE_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CPAR, DstAddress); + } + /* Direction Periph to Memory and Memory to Memory */ + else + { + WRITE_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CPAR, SrcAddress); + WRITE_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CMAR, DstAddress); + } +} + +/** + * @brief Set the Memory address. + * @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. + * @rmtoll CMAR MA LL_DMA_SetMemoryAddress + * @param DMAx DMAx Instance + * @param Channel This parameter can be one of the following values: + * @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 + * @param MemoryAddress Between Min_Data = 0 and Max_Data = 0xFFFFFFFF + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetMemoryAddress(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t MemoryAddress) +{ + WRITE_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CMAR, MemoryAddress); +} + +/** + * @brief Set the Peripheral address. + * @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. + * @rmtoll CPAR PA LL_DMA_SetPeriphAddress + * @param DMAx DMAx Instance + * @param Channel This parameter can be one of the following values: + * @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 + * @param PeriphAddress Between Min_Data = 0 and Max_Data = 0xFFFFFFFF + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetPeriphAddress(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t PeriphAddress) +{ + WRITE_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CPAR, PeriphAddress); +} + +/** + * @brief Get Memory address. + * @note Interface used for direction LL_DMA_DIRECTION_PERIPH_TO_MEMORY or LL_DMA_DIRECTION_MEMORY_TO_PERIPH only. + * @rmtoll CMAR MA LL_DMA_GetMemoryAddress + * @param DMAx DMAx Instance + * @param Channel This parameter can be one of the following values: + * @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 Between Min_Data = 0 and Max_Data = 0xFFFFFFFF + */ +__STATIC_INLINE uint32_t LL_DMA_GetMemoryAddress(DMA_TypeDef *DMAx, uint32_t Channel) +{ + return (READ_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CMAR)); +} + +/** + * @brief Get Peripheral address. + * @note Interface used for direction LL_DMA_DIRECTION_PERIPH_TO_MEMORY or LL_DMA_DIRECTION_MEMORY_TO_PERIPH only. + * @rmtoll CPAR PA LL_DMA_GetPeriphAddress + * @param DMAx DMAx Instance + * @param Channel This parameter can be one of the following values: + * @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 Between Min_Data = 0 and Max_Data = 0xFFFFFFFF + */ +__STATIC_INLINE uint32_t LL_DMA_GetPeriphAddress(DMA_TypeDef *DMAx, uint32_t Channel) +{ + return (READ_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CPAR)); +} + +/** + * @brief Set the Memory to Memory Source address. + * @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. + * @rmtoll CPAR PA LL_DMA_SetM2MSrcAddress + * @param DMAx DMAx Instance + * @param Channel This parameter can be one of the following values: + * @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 + * @param MemoryAddress Between Min_Data = 0 and Max_Data = 0xFFFFFFFF + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetM2MSrcAddress(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t MemoryAddress) +{ + WRITE_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CPAR, MemoryAddress); +} + +/** + * @brief Set the Memory to Memory Destination address. + * @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. + * @rmtoll CMAR MA LL_DMA_SetM2MDstAddress + * @param DMAx DMAx Instance + * @param Channel This parameter can be one of the following values: + * @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 + * @param MemoryAddress Between Min_Data = 0 and Max_Data = 0xFFFFFFFF + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetM2MDstAddress(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t MemoryAddress) +{ + WRITE_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CMAR, MemoryAddress); +} + +/** + * @brief Get the Memory to Memory Source address. + * @note Interface used for direction LL_DMA_DIRECTION_MEMORY_TO_MEMORY only. + * @rmtoll CPAR PA LL_DMA_GetM2MSrcAddress + * @param DMAx DMAx Instance + * @param Channel This parameter can be one of the following values: + * @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 Between Min_Data = 0 and Max_Data = 0xFFFFFFFF + */ +__STATIC_INLINE uint32_t LL_DMA_GetM2MSrcAddress(DMA_TypeDef *DMAx, uint32_t Channel) +{ + return (READ_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CPAR)); +} + +/** + * @brief Get the Memory to Memory Destination address. + * @note Interface used for direction LL_DMA_DIRECTION_MEMORY_TO_MEMORY only. + * @rmtoll CMAR MA LL_DMA_GetM2MDstAddress + * @param DMAx DMAx Instance + * @param Channel This parameter can be one of the following values: + * @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 Between Min_Data = 0 and Max_Data = 0xFFFFFFFF + */ +__STATIC_INLINE uint32_t LL_DMA_GetM2MDstAddress(DMA_TypeDef *DMAx, uint32_t Channel) +{ + return (READ_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CMAR)); +} + +#if (defined(DMA1_CSELR_DEFAULT)||defined(DMA2_CSELR_DEFAULT)) +/** + * @brief Set DMA request for DMA instance on Channel x. + * @note Please refer to Reference Manual to get the available mapping of Request value link to Channel Selection. + * @rmtoll CSELR C1S LL_DMA_SetPeriphRequest\n + * CSELR C2S LL_DMA_SetPeriphRequest\n + * CSELR C3S LL_DMA_SetPeriphRequest\n + * CSELR C4S LL_DMA_SetPeriphRequest\n + * CSELR C5S LL_DMA_SetPeriphRequest\n + * CSELR C6S LL_DMA_SetPeriphRequest\n + * CSELR C7S LL_DMA_SetPeriphRequest + * @param DMAx DMAx Instance + * @param Channel This parameter can be one of the following values: + * @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 + * @param PeriphRequest This parameter can be one of the following values: + * @arg @ref LL_DMA_REQUEST_0 + * @arg @ref LL_DMA_REQUEST_1 + * @arg @ref LL_DMA_REQUEST_2 + * @arg @ref LL_DMA_REQUEST_3 + * @arg @ref LL_DMA_REQUEST_4 + * @arg @ref LL_DMA_REQUEST_5 + * @arg @ref LL_DMA_REQUEST_6 + * @arg @ref LL_DMA_REQUEST_7 + * @arg @ref LL_DMA_REQUEST_8 + * @arg @ref LL_DMA_REQUEST_9 + * @arg @ref LL_DMA_REQUEST_10 + * @arg @ref LL_DMA_REQUEST_11 + * @arg @ref LL_DMA_REQUEST_12 + * @arg @ref LL_DMA_REQUEST_13 + * @arg @ref LL_DMA_REQUEST_14 + * @arg @ref LL_DMA_REQUEST_15 + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetPeriphRequest(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t PeriphRequest) +{ + MODIFY_REG(DMAx->CSELR, + DMA_CSELR_C1S << ((Channel - 1U) * 4U), PeriphRequest << DMA_POSITION_CSELR_CXS); +} + +/** + * @brief Get DMA request for DMA instance on Channel x. + * @rmtoll CSELR C1S LL_DMA_GetPeriphRequest\n + * CSELR C2S LL_DMA_GetPeriphRequest\n + * CSELR C3S LL_DMA_GetPeriphRequest\n + * CSELR C4S LL_DMA_GetPeriphRequest\n + * CSELR C5S LL_DMA_GetPeriphRequest\n + * CSELR C6S LL_DMA_GetPeriphRequest\n + * CSELR C7S LL_DMA_GetPeriphRequest + * @param DMAx DMAx Instance + * @param Channel This parameter can be one of the following values: + * @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 Returned value can be one of the following values: + * @arg @ref LL_DMA_REQUEST_0 + * @arg @ref LL_DMA_REQUEST_1 + * @arg @ref LL_DMA_REQUEST_2 + * @arg @ref LL_DMA_REQUEST_3 + * @arg @ref LL_DMA_REQUEST_4 + * @arg @ref LL_DMA_REQUEST_5 + * @arg @ref LL_DMA_REQUEST_6 + * @arg @ref LL_DMA_REQUEST_7 + * @arg @ref LL_DMA_REQUEST_8 + * @arg @ref LL_DMA_REQUEST_9 + * @arg @ref LL_DMA_REQUEST_10 + * @arg @ref LL_DMA_REQUEST_11 + * @arg @ref LL_DMA_REQUEST_12 + * @arg @ref LL_DMA_REQUEST_13 + * @arg @ref LL_DMA_REQUEST_14 + * @arg @ref LL_DMA_REQUEST_15 + */ +__STATIC_INLINE uint32_t LL_DMA_GetPeriphRequest(DMA_TypeDef *DMAx, uint32_t Channel) +{ + return (READ_BIT(DMAx->CSELR, + DMA_CSELR_C1S << ((Channel - 1U) * 4U)) >> DMA_POSITION_CSELR_CXS); +} +#endif + +/** + * @} + */ + +/** @defgroup DMA_LL_EF_FLAG_Management FLAG_Management + * @{ + */ + +/** + * @brief Get Channel 1 global interrupt flag. + * @rmtoll ISR GIF1 LL_DMA_IsActiveFlag_GI1 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_GI1(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->ISR, DMA_ISR_GIF1) == (DMA_ISR_GIF1)); +} + +/** + * @brief Get Channel 2 global interrupt flag. + * @rmtoll ISR GIF2 LL_DMA_IsActiveFlag_GI2 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_GI2(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->ISR, DMA_ISR_GIF2) == (DMA_ISR_GIF2)); +} + +/** + * @brief Get Channel 3 global interrupt flag. + * @rmtoll ISR GIF3 LL_DMA_IsActiveFlag_GI3 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_GI3(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->ISR, DMA_ISR_GIF3) == (DMA_ISR_GIF3)); +} + +/** + * @brief Get Channel 4 global interrupt flag. + * @rmtoll ISR GIF4 LL_DMA_IsActiveFlag_GI4 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_GI4(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->ISR, DMA_ISR_GIF4) == (DMA_ISR_GIF4)); +} + +/** + * @brief Get Channel 5 global interrupt flag. + * @rmtoll ISR GIF5 LL_DMA_IsActiveFlag_GI5 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_GI5(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->ISR, DMA_ISR_GIF5) == (DMA_ISR_GIF5)); +} + +#if defined(DMA1_Channel6) +/** + * @brief Get Channel 6 global interrupt flag. + * @rmtoll ISR GIF6 LL_DMA_IsActiveFlag_GI6 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_GI6(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->ISR, DMA_ISR_GIF6) == (DMA_ISR_GIF6)); +} +#endif + +#if defined(DMA1_Channel7) +/** + * @brief Get Channel 7 global interrupt flag. + * @rmtoll ISR GIF7 LL_DMA_IsActiveFlag_GI7 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_GI7(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->ISR, DMA_ISR_GIF7) == (DMA_ISR_GIF7)); +} +#endif + +/** + * @brief Get Channel 1 transfer complete flag. + * @rmtoll ISR 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->ISR, DMA_ISR_TCIF1) == (DMA_ISR_TCIF1)); +} + +/** + * @brief Get Channel 2 transfer complete flag. + * @rmtoll ISR 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->ISR, DMA_ISR_TCIF2) == (DMA_ISR_TCIF2)); +} + +/** + * @brief Get Channel 3 transfer complete flag. + * @rmtoll ISR 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->ISR, DMA_ISR_TCIF3) == (DMA_ISR_TCIF3)); +} + +/** + * @brief Get Channel 4 transfer complete flag. + * @rmtoll ISR 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->ISR, DMA_ISR_TCIF4) == (DMA_ISR_TCIF4)); +} + +/** + * @brief Get Channel 5 transfer complete flag. + * @rmtoll ISR TCIF5 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->ISR, DMA_ISR_TCIF5) == (DMA_ISR_TCIF5)); +} + +#if defined(DMA1_Channel6) +/** + * @brief Get Channel 6 transfer complete flag. + * @rmtoll ISR 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->ISR, DMA_ISR_TCIF6) == (DMA_ISR_TCIF6)); +} +#endif + +#if defined(DMA1_Channel7) +/** + * @brief Get Channel 7 transfer complete flag. + * @rmtoll ISR 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->ISR, DMA_ISR_TCIF7) == (DMA_ISR_TCIF7)); +} +#endif + +/** + * @brief Get Channel 1 half transfer flag. + * @rmtoll ISR 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->ISR, DMA_ISR_HTIF1) == (DMA_ISR_HTIF1)); +} + +/** + * @brief Get Channel 2 half transfer flag. + * @rmtoll ISR 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->ISR, DMA_ISR_HTIF2) == (DMA_ISR_HTIF2)); +} + +/** + * @brief Get Channel 3 half transfer flag. + * @rmtoll ISR 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->ISR, DMA_ISR_HTIF3) == (DMA_ISR_HTIF3)); +} + +/** + * @brief Get Channel 4 half transfer flag. + * @rmtoll ISR 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->ISR, DMA_ISR_HTIF4) == (DMA_ISR_HTIF4)); +} + +/** + * @brief Get Channel 5 half transfer flag. + * @rmtoll ISR HTIF5 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->ISR, DMA_ISR_HTIF5) == (DMA_ISR_HTIF5)); +} + +#if defined(DMA1_Channel6) +/** + * @brief Get Channel 6 half transfer flag. + * @rmtoll ISR 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->ISR, DMA_ISR_HTIF6) == (DMA_ISR_HTIF6)); +} +#endif + +#if defined(DMA1_Channel7) +/** + * @brief Get Channel 7 half transfer flag. + * @rmtoll ISR 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->ISR, DMA_ISR_HTIF7) == (DMA_ISR_HTIF7)); +} +#endif + +/** + * @brief Get Channel 1 transfer error flag. + * @rmtoll ISR 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->ISR, DMA_ISR_TEIF1) == (DMA_ISR_TEIF1)); +} + +/** + * @brief Get Channel 2 transfer error flag. + * @rmtoll ISR 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->ISR, DMA_ISR_TEIF2) == (DMA_ISR_TEIF2)); +} + +/** + * @brief Get Channel 3 transfer error flag. + * @rmtoll ISR 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->ISR, DMA_ISR_TEIF3) == (DMA_ISR_TEIF3)); +} + +/** + * @brief Get Channel 4 transfer error flag. + * @rmtoll ISR 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->ISR, DMA_ISR_TEIF4) == (DMA_ISR_TEIF4)); +} + +/** + * @brief Get Channel 5 transfer error flag. + * @rmtoll ISR TEIF5 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->ISR, DMA_ISR_TEIF5) == (DMA_ISR_TEIF5)); +} + +#if defined(DMA1_Channel6) +/** + * @brief Get Channel 6 transfer error flag. + * @rmtoll ISR 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->ISR, DMA_ISR_TEIF6) == (DMA_ISR_TEIF6)); +} +#endif + +#if defined(DMA1_Channel7) +/** + * @brief Get Channel 7 transfer error flag. + * @rmtoll ISR 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->ISR, DMA_ISR_TEIF7) == (DMA_ISR_TEIF7)); +} +#endif + +/** + * @brief Clear Channel 1 global interrupt flag. + * @note Do not Clear Channel 1 global interrupt flag when the channel in ON. + Instead clear specific flags transfer complete, half transfer & transfer + error flag with LL_DMA_ClearFlag_TC1, LL_DMA_ClearFlag_HT1, + LL_DMA_ClearFlag_TE1. bug id 2.4.1 in Product Errata Sheet. + * @rmtoll IFCR CGIF1 LL_DMA_ClearFlag_GI1 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_GI1(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->IFCR, DMA_IFCR_CGIF1); +} + +/** + * @brief Clear Channel 2 global interrupt flag. + * @note Do not Clear Channel 2 global interrupt flag when the channel in ON. + Instead clear specific flags transfer complete, half transfer & transfer + error flag with LL_DMA_ClearFlag_TC2, LL_DMA_ClearFlag_HT2, + LL_DMA_ClearFlag_TE2. bug id 2.4.1 in Product Errata Sheet. + * @rmtoll IFCR CGIF2 LL_DMA_ClearFlag_GI2 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_GI2(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->IFCR, DMA_IFCR_CGIF2); +} + +/** + * @brief Clear Channel 3 global interrupt flag. + * @note Do not Clear Channel 3 global interrupt flag when the channel in ON. + Instead clear specific flags transfer complete, half transfer & transfer + error flag with LL_DMA_ClearFlag_TC3, LL_DMA_ClearFlag_HT3, + LL_DMA_ClearFlag_TE3. bug id 2.4.1 in Product Errata Sheet. + * @rmtoll IFCR CGIF3 LL_DMA_ClearFlag_GI3 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_GI3(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->IFCR, DMA_IFCR_CGIF3); +} + +/** + * @brief Clear Channel 4 global interrupt flag. + * @note Do not Clear Channel 4 global interrupt flag when the channel in ON. + Instead clear specific flags transfer complete, half transfer & transfer + error flag with LL_DMA_ClearFlag_TC4, LL_DMA_ClearFlag_HT4, + LL_DMA_ClearFlag_TE4. bug id 2.4.1 in Product Errata Sheet. + * @rmtoll IFCR CGIF4 LL_DMA_ClearFlag_GI4 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_GI4(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->IFCR, DMA_IFCR_CGIF4); +} + +/** + * @brief Clear Channel 5 global interrupt flag. + * @note Do not Clear Channel 5 global interrupt flag when the channel in ON. + Instead clear specific flags transfer complete, half transfer & transfer + error flag with LL_DMA_ClearFlag_TC5, LL_DMA_ClearFlag_HT5, + LL_DMA_ClearFlag_TE5. bug id 2.4.1 in Product Errata Sheet. + * @rmtoll IFCR CGIF5 LL_DMA_ClearFlag_GI5 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_GI5(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->IFCR, DMA_IFCR_CGIF5); +} + +#if defined(DMA1_Channel6) +/** + * @brief Clear Channel 6 global interrupt flag. + * @note Do not Clear Channel 6 global interrupt flag when the channel in ON. + Instead clear specific flags transfer complete, half transfer & transfer + error flag with LL_DMA_ClearFlag_TC6, LL_DMA_ClearFlag_HT6, + LL_DMA_ClearFlag_TE6. bug id 2.4.1 in Product Errata Sheet. + * @rmtoll IFCR CGIF6 LL_DMA_ClearFlag_GI6 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_GI6(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->IFCR, DMA_IFCR_CGIF6); +} +#endif + +#if defined(DMA1_Channel7) +/** + * @brief Clear Channel 7 global interrupt flag. + * @note Do not Clear Channel 7 global interrupt flag when the channel in ON. + Instead clear specific flags transfer complete, half transfer & transfer + error flag with LL_DMA_ClearFlag_TC7, LL_DMA_ClearFlag_HT7, + LL_DMA_ClearFlag_TE7. bug id 2.4.1 in Product Errata Sheet. + * @rmtoll IFCR CGIF7 LL_DMA_ClearFlag_GI7 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_GI7(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->IFCR, DMA_IFCR_CGIF7); +} +#endif + +/** + * @brief Clear Channel 1 transfer complete flag. + * @rmtoll IFCR CTCIF1 LL_DMA_ClearFlag_TC1 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_TC1(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->IFCR, DMA_IFCR_CTCIF1); +} + +/** + * @brief Clear Channel 2 transfer complete flag. + * @rmtoll IFCR CTCIF2 LL_DMA_ClearFlag_TC2 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_TC2(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->IFCR, DMA_IFCR_CTCIF2); +} + +/** + * @brief Clear Channel 3 transfer complete flag. + * @rmtoll IFCR CTCIF3 LL_DMA_ClearFlag_TC3 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_TC3(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->IFCR, DMA_IFCR_CTCIF3); +} + +/** + * @brief Clear Channel 4 transfer complete flag. + * @rmtoll IFCR CTCIF4 LL_DMA_ClearFlag_TC4 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_TC4(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->IFCR, DMA_IFCR_CTCIF4); +} + +/** + * @brief Clear Channel 5 transfer complete flag. + * @rmtoll IFCR CTCIF5 LL_DMA_ClearFlag_TC5 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_TC5(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->IFCR, DMA_IFCR_CTCIF5); +} + +#if defined(DMA1_Channel6) +/** + * @brief Clear Channel 6 transfer complete flag. + * @rmtoll IFCR CTCIF6 LL_DMA_ClearFlag_TC6 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_TC6(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->IFCR, DMA_IFCR_CTCIF6); +} +#endif + +#if defined(DMA1_Channel7) +/** + * @brief Clear Channel 7 transfer complete flag. + * @rmtoll IFCR CTCIF7 LL_DMA_ClearFlag_TC7 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_TC7(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->IFCR, DMA_IFCR_CTCIF7); +} +#endif + +/** + * @brief Clear Channel 1 half transfer flag. + * @rmtoll IFCR CHTIF1 LL_DMA_ClearFlag_HT1 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_HT1(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->IFCR, DMA_IFCR_CHTIF1); +} + +/** + * @brief Clear Channel 2 half transfer flag. + * @rmtoll IFCR CHTIF2 LL_DMA_ClearFlag_HT2 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_HT2(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->IFCR, DMA_IFCR_CHTIF2); +} + +/** + * @brief Clear Channel 3 half transfer flag. + * @rmtoll IFCR CHTIF3 LL_DMA_ClearFlag_HT3 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_HT3(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->IFCR, DMA_IFCR_CHTIF3); +} + +/** + * @brief Clear Channel 4 half transfer flag. + * @rmtoll IFCR CHTIF4 LL_DMA_ClearFlag_HT4 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_HT4(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->IFCR, DMA_IFCR_CHTIF4); +} + +/** + * @brief Clear Channel 5 half transfer flag. + * @rmtoll IFCR CHTIF5 LL_DMA_ClearFlag_HT5 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_HT5(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->IFCR, DMA_IFCR_CHTIF5); +} + +#if defined(DMA1_Channel6) +/** + * @brief Clear Channel 6 half transfer flag. + * @rmtoll IFCR CHTIF6 LL_DMA_ClearFlag_HT6 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_HT6(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->IFCR, DMA_IFCR_CHTIF6); +} +#endif + +#if defined(DMA1_Channel7) +/** + * @brief Clear Channel 7 half transfer flag. + * @rmtoll IFCR CHTIF7 LL_DMA_ClearFlag_HT7 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_HT7(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->IFCR, DMA_IFCR_CHTIF7); +} +#endif + +/** + * @brief Clear Channel 1 transfer error flag. + * @rmtoll IFCR CTEIF1 LL_DMA_ClearFlag_TE1 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_TE1(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->IFCR, DMA_IFCR_CTEIF1); +} + +/** + * @brief Clear Channel 2 transfer error flag. + * @rmtoll IFCR CTEIF2 LL_DMA_ClearFlag_TE2 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_TE2(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->IFCR, DMA_IFCR_CTEIF2); +} + +/** + * @brief Clear Channel 3 transfer error flag. + * @rmtoll IFCR CTEIF3 LL_DMA_ClearFlag_TE3 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_TE3(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->IFCR, DMA_IFCR_CTEIF3); +} + +/** + * @brief Clear Channel 4 transfer error flag. + * @rmtoll IFCR CTEIF4 LL_DMA_ClearFlag_TE4 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_TE4(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->IFCR, DMA_IFCR_CTEIF4); +} + +/** + * @brief Clear Channel 5 transfer error flag. + * @rmtoll IFCR CTEIF5 LL_DMA_ClearFlag_TE5 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_TE5(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->IFCR, DMA_IFCR_CTEIF5); +} + +#if defined(DMA1_Channel6) +/** + * @brief Clear Channel 6 transfer error flag. + * @rmtoll IFCR CTEIF6 LL_DMA_ClearFlag_TE6 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_TE6(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->IFCR, DMA_IFCR_CTEIF6); +} +#endif + +#if defined(DMA1_Channel7) +/** + * @brief Clear Channel 7 transfer error flag. + * @rmtoll IFCR CTEIF7 LL_DMA_ClearFlag_TE7 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_TE7(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->IFCR, DMA_IFCR_CTEIF7); +} +#endif + +/** + * @} + */ + +/** @defgroup DMA_LL_EF_IT_Management IT_Management + * @{ + */ +/** + * @brief Enable Transfer complete interrupt. + * @rmtoll CCR TCIE LL_DMA_EnableIT_TC + * @param DMAx DMAx Instance + * @param Channel This parameter can be one of the following values: + * @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_EnableIT_TC(DMA_TypeDef *DMAx, uint32_t Channel) +{ + SET_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, DMA_CCR_TCIE); +} + +/** + * @brief Enable Half transfer interrupt. + * @rmtoll CCR HTIE LL_DMA_EnableIT_HT + * @param DMAx DMAx Instance + * @param Channel This parameter can be one of the following values: + * @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_EnableIT_HT(DMA_TypeDef *DMAx, uint32_t Channel) +{ + SET_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, DMA_CCR_HTIE); +} + +/** + * @brief Enable Transfer error interrupt. + * @rmtoll CCR TEIE LL_DMA_EnableIT_TE + * @param DMAx DMAx Instance + * @param Channel This parameter can be one of the following values: + * @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_EnableIT_TE(DMA_TypeDef *DMAx, uint32_t Channel) +{ + SET_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, DMA_CCR_TEIE); +} + +/** + * @brief Disable Transfer complete interrupt. + * @rmtoll CCR TCIE LL_DMA_DisableIT_TC + * @param DMAx DMAx Instance + * @param Channel This parameter can be one of the following values: + * @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_DisableIT_TC(DMA_TypeDef *DMAx, uint32_t Channel) +{ + CLEAR_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, DMA_CCR_TCIE); +} + +/** + * @brief Disable Half transfer interrupt. + * @rmtoll CCR HTIE LL_DMA_DisableIT_HT + * @param DMAx DMAx Instance + * @param Channel This parameter can be one of the following values: + * @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_DisableIT_HT(DMA_TypeDef *DMAx, uint32_t Channel) +{ + CLEAR_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, DMA_CCR_HTIE); +} + +/** + * @brief Disable Transfer error interrupt. + * @rmtoll CCR TEIE LL_DMA_DisableIT_TE + * @param DMAx DMAx Instance + * @param Channel This parameter can be one of the following values: + * @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_DisableIT_TE(DMA_TypeDef *DMAx, uint32_t Channel) +{ + CLEAR_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, DMA_CCR_TEIE); +} + +/** + * @brief Check if Transfer complete Interrupt is enabled. + * @rmtoll CCR TCIE LL_DMA_IsEnabledIT_TC + * @param DMAx DMAx Instance + * @param Channel This parameter can be one of the following values: + * @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 State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsEnabledIT_TC(DMA_TypeDef *DMAx, uint32_t Channel) +{ + return (READ_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, + DMA_CCR_TCIE) == (DMA_CCR_TCIE)); +} + +/** + * @brief Check if Half transfer Interrupt is enabled. + * @rmtoll CCR HTIE LL_DMA_IsEnabledIT_HT + * @param DMAx DMAx Instance + * @param Channel This parameter can be one of the following values: + * @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 State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsEnabledIT_HT(DMA_TypeDef *DMAx, uint32_t Channel) +{ + return (READ_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, + DMA_CCR_HTIE) == (DMA_CCR_HTIE)); +} + +/** + * @brief Check if Transfer error Interrupt is enabled. + * @rmtoll CCR TEIE LL_DMA_IsEnabledIT_TE + * @param DMAx DMAx Instance + * @param Channel This parameter can be one of the following values: + * @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 State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsEnabledIT_TE(DMA_TypeDef *DMAx, uint32_t Channel) +{ + return (READ_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, + DMA_CCR_TEIE) == (DMA_CCR_TEIE)); +} + +/** + * @} + */ + +#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 Channel, LL_DMA_InitTypeDef *DMA_InitStruct); +uint32_t LL_DMA_DeInit(DMA_TypeDef *DMAx, uint32_t Channel); +void LL_DMA_StructInit(LL_DMA_InitTypeDef *DMA_InitStruct); + +/** + * @} + */ +#endif /* USE_FULL_LL_DRIVER */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* DMA1 || DMA2 */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F0xx_LL_DMA_H */ + diff --git a/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_exti.h b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_exti.h new file mode 100644 index 0000000..4c08cc9 --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_exti.h @@ -0,0 +1,1014 @@ +/** + ****************************************************************************** + * @file stm32f0xx_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. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F0xx_LL_EXTI_H +#define __STM32F0xx_LL_EXTI_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f0xx.h" + +/** @addtogroup STM32F0xx_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 +#define LL_EXTI_LINE_23 EXTI_IMR_IM23 /*!< Extended line 23 */ +#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 (0xFFFFFFFFU) /*!< All Extended line */ + +#if defined(USE_FULL_LL_DRIVER) +#define LL_EXTI_LINE_NONE (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_24 + * @arg @ref LL_EXTI_LINE_25 + * @arg @ref LL_EXTI_LINE_26 + * @arg @ref LL_EXTI_LINE_27 + * @arg @ref LL_EXTI_LINE_28 + * @arg @ref LL_EXTI_LINE_29 + * @arg @ref LL_EXTI_LINE_30 + * @arg @ref LL_EXTI_LINE_31 + * @arg @ref LL_EXTI_LINE_ALL_0_31 + * @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_24 + * @arg @ref LL_EXTI_LINE_25 + * @arg @ref LL_EXTI_LINE_26 + * @arg @ref LL_EXTI_LINE_27 + * @arg @ref LL_EXTI_LINE_28 + * @arg @ref LL_EXTI_LINE_29 + * @arg @ref LL_EXTI_LINE_30 + * @arg @ref LL_EXTI_LINE_31 + * @arg @ref LL_EXTI_LINE_ALL_0_31 + * @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_24 + * @arg @ref LL_EXTI_LINE_25 + * @arg @ref LL_EXTI_LINE_26 + * @arg @ref LL_EXTI_LINE_27 + * @arg @ref LL_EXTI_LINE_28 + * @arg @ref LL_EXTI_LINE_29 + * @arg @ref LL_EXTI_LINE_30 + * @arg @ref LL_EXTI_LINE_31 + * @arg @ref LL_EXTI_LINE_ALL_0_31 + * @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_24 + * @arg @ref LL_EXTI_LINE_25 + * @arg @ref LL_EXTI_LINE_26 + * @arg @ref LL_EXTI_LINE_27 + * @arg @ref LL_EXTI_LINE_28 + * @arg @ref LL_EXTI_LINE_29 + * @arg @ref LL_EXTI_LINE_30 + * @arg @ref LL_EXTI_LINE_31 + * @arg @ref LL_EXTI_LINE_ALL_0_31 + * @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_24 + * @arg @ref LL_EXTI_LINE_25 + * @arg @ref LL_EXTI_LINE_26 + * @arg @ref LL_EXTI_LINE_27 + * @arg @ref LL_EXTI_LINE_28 + * @arg @ref LL_EXTI_LINE_29 + * @arg @ref LL_EXTI_LINE_30 + * @arg @ref LL_EXTI_LINE_31 + * @arg @ref LL_EXTI_LINE_ALL_0_31 + * @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_24 + * @arg @ref LL_EXTI_LINE_25 + * @arg @ref LL_EXTI_LINE_26 + * @arg @ref LL_EXTI_LINE_27 + * @arg @ref LL_EXTI_LINE_28 + * @arg @ref LL_EXTI_LINE_29 + * @arg @ref LL_EXTI_LINE_30 + * @arg @ref LL_EXTI_LINE_31 + * @arg @ref LL_EXTI_LINE_ALL_0_31 + * @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 + * @arg @ref LL_EXTI_LINE_29 + * @arg @ref LL_EXTI_LINE_30 + * @arg @ref LL_EXTI_LINE_31 + * @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 + * @arg @ref LL_EXTI_LINE_29 + * @arg @ref LL_EXTI_LINE_30 + * @arg @ref LL_EXTI_LINE_31 + * @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 + * @arg @ref LL_EXTI_LINE_29 + * @arg @ref LL_EXTI_LINE_30 + * @arg @ref LL_EXTI_LINE_31 + * @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 + * @arg @ref LL_EXTI_LINE_29 + * @arg @ref LL_EXTI_LINE_30 + * @arg @ref LL_EXTI_LINE_31 + * @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 + * @arg @ref LL_EXTI_LINE_29 + * @arg @ref LL_EXTI_LINE_30 + * @arg @ref LL_EXTI_LINE_31 + * @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 + * @arg @ref LL_EXTI_LINE_29 + * @arg @ref LL_EXTI_LINE_30 + * @arg @ref LL_EXTI_LINE_31 + * @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 + * @arg @ref LL_EXTI_LINE_29 + * @arg @ref LL_EXTI_LINE_30 + * @arg @ref LL_EXTI_LINE_31 + * @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 + * @arg @ref LL_EXTI_LINE_29 + * @arg @ref LL_EXTI_LINE_30 + * @arg @ref LL_EXTI_LINE_31 + * @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 + * @arg @ref LL_EXTI_LINE_29 + * @arg @ref LL_EXTI_LINE_30 + * @arg @ref LL_EXTI_LINE_31 + * @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 + * @arg @ref LL_EXTI_LINE_29 + * @arg @ref LL_EXTI_LINE_30 + * @arg @ref LL_EXTI_LINE_31 + * @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 /* __STM32F0xx_LL_EXTI_H */ + diff --git a/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_gpio.h b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_gpio.h new file mode 100644 index 0000000..c938dbb --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_gpio.h @@ -0,0 +1,938 @@ +/** + ****************************************************************************** + * @file stm32f0xx_ll_gpio.h + * @author MCD Application Team + * @brief Header file of GPIO 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 __STM32F0xx_LL_GPIO_H +#define __STM32F0xx_LL_GPIO_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f0xx.h" + +/** @addtogroup STM32F0xx_LL_Driver + * @{ + */ + +#if defined (GPIOA) || defined (GPIOB) || defined (GPIOC) || defined (GPIOD) || defined (GPIOE) || defined (GPIOF) + +/** @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_OSPEEDR_OSPEEDR0_0 /*!< Select I/O medium output speed */ +#define LL_GPIO_SPEED_FREQ_HIGH GPIO_OSPEEDR_OSPEEDR0 /*!< Select I/O high output speed */ +/** + * @} + */ +#define LL_GPIO_SPEED_LOW LL_GPIO_SPEED_FREQ_LOW +#define LL_GPIO_SPEED_MEDIUM LL_GPIO_SPEED_FREQ_MEDIUM +#define LL_GPIO_SPEED_HIGH LL_GPIO_SPEED_FREQ_HIGH + +/** @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 */ +/** + * @} + */ + +/** + * @} + */ + +/* 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, ((Pin * Pin) * GPIO_MODER_MODER0), ((Pin * Pin) * Mode)); +} + +/** + * @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, ((Pin * Pin) * GPIO_MODER_MODER0)) / (Pin * Pin)); +} + +/** + * @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) / 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 + * @retval None + */ +__STATIC_INLINE void LL_GPIO_SetPinSpeed(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Speed) +{ + MODIFY_REG(GPIOx->OSPEEDR, ((Pin * Pin) * GPIO_OSPEEDR_OSPEEDR0), ((Pin * Pin) * Speed)); +} + +/** + * @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 + */ +__STATIC_INLINE uint32_t LL_GPIO_GetPinSpeed(GPIO_TypeDef *GPIOx, uint32_t Pin) +{ + return (uint32_t)(READ_BIT(GPIOx->OSPEEDR, ((Pin * Pin) * GPIO_OSPEEDR_OSPEEDR0)) / (Pin * Pin)); +} + +/** + * @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, ((Pin * Pin) * GPIO_PUPDR_PUPDR0), ((Pin * Pin) * Pull)); +} + +/** + * @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, ((Pin * Pin) * GPIO_PUPDR_PUPDR0)) / (Pin * Pin)); +} + +/** + * @brief Configure gpio alternate function of a dedicated pin from 0 to 7 for a dedicated port. + * @note Possible values are from AF0 to AF7 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 + * @retval None + */ +__STATIC_INLINE void LL_GPIO_SetAFPin_0_7(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Alternate) +{ + MODIFY_REG(GPIOx->AFR[0], ((((Pin * Pin) * Pin) * Pin) * GPIO_AFRL_AFSEL0), + ((((Pin * Pin) * Pin) * Pin) * Alternate)); +} + +/** + * @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 + */ +__STATIC_INLINE uint32_t LL_GPIO_GetAFPin_0_7(GPIO_TypeDef *GPIOx, uint32_t Pin) +{ + return (uint32_t)(READ_BIT(GPIOx->AFR[0], + ((((Pin * Pin) * Pin) * Pin) * GPIO_AFRL_AFSEL0)) / (((Pin * Pin) * Pin) * Pin)); +} + +/** + * @brief Configure gpio alternate function of a dedicated pin from 8 to 15 for a dedicated port. + * @note Possible values are from AF0 to AF7 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 + * @retval None + */ +__STATIC_INLINE void LL_GPIO_SetAFPin_8_15(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Alternate) +{ + MODIFY_REG(GPIOx->AFR[1], (((((Pin >> 8U) * (Pin >> 8U)) * (Pin >> 8U)) * (Pin >> 8U)) * GPIO_AFRH_AFSEL8), + (((((Pin >> 8U) * (Pin >> 8U)) * (Pin >> 8U)) * (Pin >> 8U)) * Alternate)); +} + +/** + * @brief Return gpio alternate function of a dedicated pin from 8 to 15 for a dedicated port. + * @note Possible values are from AF0 to AF7 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 + */ +__STATIC_INLINE uint32_t LL_GPIO_GetAFPin_8_15(GPIO_TypeDef *GPIOx, uint32_t Pin) +{ + return (uint32_t)(READ_BIT(GPIOx->AFR[1], + (((((Pin >> 8U) * (Pin >> 8U)) * (Pin >> 8U)) * (Pin >> 8U)) * GPIO_AFRH_AFSEL8)) / ((((Pin >> 8U) * + (Pin >> 8U)) * (Pin >> 8U)) * (Pin >> 8U))); +} + + +/** + * @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 BRR 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->BRR, PinMask); +} + +/** + * @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) */ +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F0xx_LL_GPIO_H */ + diff --git a/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_pwr.h b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_pwr.h new file mode 100644 index 0000000..5ba5878 --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_pwr.h @@ -0,0 +1,549 @@ +/** + ****************************************************************************** + * @file stm32f0xx_ll_pwr.h + * @author MCD Application Team + * @brief Header file of PWR 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 __STM32F0xx_LL_PWR_H +#define __STM32F0xx_LL_PWR_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f0xx.h" + +/** @addtogroup STM32F0xx_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 */ +#if defined(PWR_PVD_SUPPORT) +#define LL_PWR_CSR_PVDO PWR_CSR_PVDO /*!< Power voltage detector output flag */ +#endif /* PWR_PVD_SUPPORT */ +#if defined(PWR_CSR_VREFINTRDYF) +#define LL_PWR_CSR_VREFINTRDYF PWR_CSR_VREFINTRDYF /*!< VREFINT ready flag */ +#endif /* PWR_CSR_VREFINTRDYF */ +#define LL_PWR_CSR_EWUP1 PWR_CSR_EWUP1 /*!< Enable WKUP pin 1 */ +#define LL_PWR_CSR_EWUP2 PWR_CSR_EWUP2 /*!< Enable WKUP pin 2 */ +#if defined(PWR_CSR_EWUP3) +#define LL_PWR_CSR_EWUP3 PWR_CSR_EWUP3 /*!< Enable WKUP pin 3 */ +#endif /* PWR_CSR_EWUP3 */ +#if defined(PWR_CSR_EWUP4) +#define LL_PWR_CSR_EWUP4 PWR_CSR_EWUP4 /*!< Enable WKUP pin 4 */ +#endif /* PWR_CSR_EWUP4 */ +#if defined(PWR_CSR_EWUP5) +#define LL_PWR_CSR_EWUP5 PWR_CSR_EWUP5 /*!< Enable WKUP pin 5 */ +#endif /* PWR_CSR_EWUP5 */ +#if defined(PWR_CSR_EWUP6) +#define LL_PWR_CSR_EWUP6 PWR_CSR_EWUP6 /*!< Enable WKUP pin 6 */ +#endif /* PWR_CSR_EWUP6 */ +#if defined(PWR_CSR_EWUP7) +#define LL_PWR_CSR_EWUP7 PWR_CSR_EWUP7 /*!< Enable WKUP pin 7 */ +#endif /* PWR_CSR_EWUP7 */ +#if defined(PWR_CSR_EWUP8) +#define LL_PWR_CSR_EWUP8 PWR_CSR_EWUP8 /*!< Enable WKUP pin 8 */ +#endif /* PWR_CSR_EWUP8 */ +/** + * @} + */ + + +/** @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 */ +#define LL_PWR_MODE_STANDBY (PWR_CR_PDDS) /*!< Enter Standby mode when the CPU enters deepsleep */ +/** + * @} + */ + +#if defined(PWR_CR_LPDS) +/** @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 */ +/** + * @} + */ +#endif /* PWR_CR_LPDS */ + +#if defined(PWR_PVD_SUPPORT) +/** @defgroup PWR_LL_EC_PVDLEVEL Power Voltage Detector Level + * @{ + */ +#define LL_PWR_PVDLEVEL_0 (PWR_CR_PLS_LEV0) /*!< Voltage threshold 0 */ +#define LL_PWR_PVDLEVEL_1 (PWR_CR_PLS_LEV1) /*!< Voltage threshold 1 */ +#define LL_PWR_PVDLEVEL_2 (PWR_CR_PLS_LEV2) /*!< Voltage threshold 2 */ +#define LL_PWR_PVDLEVEL_3 (PWR_CR_PLS_LEV3) /*!< Voltage threshold 3 */ +#define LL_PWR_PVDLEVEL_4 (PWR_CR_PLS_LEV4) /*!< Voltage threshold 4 */ +#define LL_PWR_PVDLEVEL_5 (PWR_CR_PLS_LEV5) /*!< Voltage threshold 5 */ +#define LL_PWR_PVDLEVEL_6 (PWR_CR_PLS_LEV6) /*!< Voltage threshold 6 */ +#define LL_PWR_PVDLEVEL_7 (PWR_CR_PLS_LEV7) /*!< Voltage threshold 7 */ +/** + * @} + */ +#endif /* PWR_PVD_SUPPORT */ +/** @defgroup PWR_LL_EC_WAKEUP_PIN Wakeup Pins + * @{ + */ +#define LL_PWR_WAKEUP_PIN1 (PWR_CSR_EWUP1) /*!< WKUP pin 1 : PA0 */ +#define LL_PWR_WAKEUP_PIN2 (PWR_CSR_EWUP2) /*!< WKUP pin 2 : PC13 */ +#if defined(PWR_CSR_EWUP3) +#define LL_PWR_WAKEUP_PIN3 (PWR_CSR_EWUP3) /*!< WKUP pin 3 : PE6 or PA2 according to device */ +#endif /* PWR_CSR_EWUP3 */ +#if defined(PWR_CSR_EWUP4) +#define LL_PWR_WAKEUP_PIN4 (PWR_CSR_EWUP4) /*!< WKUP pin 4 : PA2 */ +#endif /* PWR_CSR_EWUP4 */ +#if defined(PWR_CSR_EWUP5) +#define LL_PWR_WAKEUP_PIN5 (PWR_CSR_EWUP5) /*!< WKUP pin 5 : PC5 */ +#endif /* PWR_CSR_EWUP5 */ +#if defined(PWR_CSR_EWUP6) +#define LL_PWR_WAKEUP_PIN6 (PWR_CSR_EWUP6) /*!< WKUP pin 6 : PB5 */ +#endif /* PWR_CSR_EWUP6 */ +#if defined(PWR_CSR_EWUP7) +#define LL_PWR_WAKEUP_PIN7 (PWR_CSR_EWUP7) /*!< WKUP pin 7 : PB15 */ +#endif /* PWR_CSR_EWUP7 */ +#if defined(PWR_CSR_EWUP8) +#define LL_PWR_WAKEUP_PIN8 (PWR_CSR_EWUP8) /*!< WKUP pin 8 : PF2 */ +#endif /* PWR_CSR_EWUP8 */ +/** + * @} + */ + +/** + * @} + */ + + +/* 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 + * @{ + */ + +/** + * @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)); +} + +#if defined(PWR_CR_LPDS) +/** + * @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)); +} +#endif /* PWR_CR_LPDS */ + +/** + * @brief Set Power Down mode when CPU enters deepsleep + * @rmtoll CR PDDS 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_STANDBY + * @retval None + */ +__STATIC_INLINE void LL_PWR_SetPowerMode(uint32_t PDMode) +{ + MODIFY_REG(PWR->CR, (PWR_CR_PDDS| PWR_CR_LPDS), PDMode); +} + +/** + * @brief Get Power Down mode when CPU enters deepsleep + * @rmtoll CR PDDS 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_STANDBY + */ +__STATIC_INLINE uint32_t LL_PWR_GetPowerMode(void) +{ + return (uint32_t)(READ_BIT(PWR->CR, (PWR_CR_PDDS| PWR_CR_LPDS))); +} + +#if defined(PWR_PVD_SUPPORT) +/** + * @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)); +} +#endif /* PWR_PVD_SUPPORT */ + +/** + * @brief Enable the WakeUp PINx functionality + * @rmtoll CSR EWUP1 LL_PWR_EnableWakeUpPin\n + * @rmtoll CSR EWUP2 LL_PWR_EnableWakeUpPin\n + * @rmtoll CSR EWUP3 LL_PWR_EnableWakeUpPin\n + * @rmtoll CSR EWUP4 LL_PWR_EnableWakeUpPin\n + * @rmtoll CSR EWUP5 LL_PWR_EnableWakeUpPin\n + * @rmtoll CSR EWUP6 LL_PWR_EnableWakeUpPin\n + * @rmtoll CSR EWUP7 LL_PWR_EnableWakeUpPin\n + * @rmtoll CSR EWUP8 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 (*) + * @arg @ref LL_PWR_WAKEUP_PIN4 (*) + * @arg @ref LL_PWR_WAKEUP_PIN5 (*) + * @arg @ref LL_PWR_WAKEUP_PIN6 (*) + * @arg @ref LL_PWR_WAKEUP_PIN7 (*) + * @arg @ref LL_PWR_WAKEUP_PIN8 (*) + * + * (*) 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 EWUP1 LL_PWR_DisableWakeUpPin\n + * @rmtoll CSR EWUP2 LL_PWR_DisableWakeUpPin\n + * @rmtoll CSR EWUP3 LL_PWR_DisableWakeUpPin\n + * @rmtoll CSR EWUP4 LL_PWR_DisableWakeUpPin\n + * @rmtoll CSR EWUP5 LL_PWR_DisableWakeUpPin\n + * @rmtoll CSR EWUP6 LL_PWR_DisableWakeUpPin\n + * @rmtoll CSR EWUP7 LL_PWR_DisableWakeUpPin\n + * @rmtoll CSR EWUP8 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 (*) + * @arg @ref LL_PWR_WAKEUP_PIN4 (*) + * @arg @ref LL_PWR_WAKEUP_PIN5 (*) + * @arg @ref LL_PWR_WAKEUP_PIN6 (*) + * @arg @ref LL_PWR_WAKEUP_PIN7 (*) + * @arg @ref LL_PWR_WAKEUP_PIN8 (*) + * + * (*) 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 EWUP1 LL_PWR_IsEnabledWakeUpPin\n + * @rmtoll CSR EWUP2 LL_PWR_IsEnabledWakeUpPin\n + * @rmtoll CSR EWUP3 LL_PWR_IsEnabledWakeUpPin\n + * @rmtoll CSR EWUP4 LL_PWR_IsEnabledWakeUpPin\n + * @rmtoll CSR EWUP5 LL_PWR_IsEnabledWakeUpPin\n + * @rmtoll CSR EWUP6 LL_PWR_IsEnabledWakeUpPin\n + * @rmtoll CSR EWUP7 LL_PWR_IsEnabledWakeUpPin\n + * @rmtoll CSR EWUP8 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 (*) + * @arg @ref LL_PWR_WAKEUP_PIN4 (*) + * @arg @ref LL_PWR_WAKEUP_PIN5 (*) + * @arg @ref LL_PWR_WAKEUP_PIN6 (*) + * @arg @ref LL_PWR_WAKEUP_PIN7 (*) + * @arg @ref LL_PWR_WAKEUP_PIN8 (*) + * + * (*) 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)); +} + +#if defined(PWR_PVD_SUPPORT) +/** + * @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)); +} +#endif /* PWR_PVD_SUPPORT */ + +#if defined(PWR_CSR_VREFINTRDYF) +/** + * @brief Get Internal Reference VrefInt Flag + * @rmtoll CSR VREFINTRDYF LL_PWR_IsActiveFlag_VREFINTRDY + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsActiveFlag_VREFINTRDY(void) +{ + return (READ_BIT(PWR->CSR, PWR_CSR_VREFINTRDYF) == (PWR_CSR_VREFINTRDYF)); +} +#endif /* PWR_CSR_VREFINTRDYF */ +/** + * @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(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 /* __STM32F0xx_LL_PWR_H */ diff --git a/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_rcc.h b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_rcc.h new file mode 100644 index 0000000..322de5a --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_rcc.h @@ -0,0 +1,2258 @@ +/** + ****************************************************************************** + * @file stm32f0xx_ll_rcc.h + * @author MCD Application Team + * @brief Header file of RCC 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 __STM32F0xx_LL_RCC_H +#define __STM32F0xx_LL_RCC_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f0xx.h" + +/** @addtogroup STM32F0xx_LL_Driver + * @{ + */ + +#if defined(RCC) + +/** @defgroup RCC_LL RCC + * @{ + */ + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/** @defgroup RCC_LL_Private_Constants RCC Private Constants + * @{ + */ +/* Defines used for the bit position in the register and perform offsets*/ +#define RCC_POSITION_HPRE (uint32_t)4U /*!< field position in register RCC_CFGR */ +#define RCC_POSITION_PPRE1 (uint32_t)8U /*!< field position in register RCC_CFGR */ +#define RCC_POSITION_PLLMUL (uint32_t)18U /*!< field position in register RCC_CFGR */ +#define RCC_POSITION_HSICAL (uint32_t)8U /*!< field position in register RCC_CR */ +#define RCC_POSITION_HSITRIM (uint32_t)3U /*!< field position in register RCC_CR */ +#define RCC_POSITION_HSI14TRIM (uint32_t)3U /*!< field position in register RCC_CR2 */ +#define RCC_POSITION_HSI14CAL (uint32_t)8U /*!< field position in register RCC_CR2 */ +#if defined(RCC_HSI48_SUPPORT) +#define RCC_POSITION_HSI48CAL (uint32_t)24U /*!< field position in register RCC_CR2 */ +#endif /* RCC_HSI48_SUPPORT */ +#define RCC_POSITION_USART1SW (uint32_t)0U /*!< field position in register RCC_CFGR3 */ +#define RCC_POSITION_USART2SW (uint32_t)16U /*!< field position in register RCC_CFGR3 */ +#define RCC_POSITION_USART3SW (uint32_t)18U /*!< field position in register RCC_CFGR3 */ + +/** + * @} + */ + +/* 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 */ +} 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 8000000U /*!< Value of the HSE oscillator in Hz */ +#endif /* HSE_VALUE */ + +#if !defined (HSI_VALUE) +#define HSI_VALUE 8000000U /*!< 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(RCC_HSI48_SUPPORT) + +#if !defined (HSI48_VALUE) +#define HSI48_VALUE 48000000U /*!< Value of the HSI48 oscillator in Hz */ +#endif /* HSI48_VALUE */ +#endif /* RCC_HSI48_SUPPORT */ +/** + * @} + */ + +/** @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 */ +#define LL_RCC_CIR_HSI14RDYC RCC_CIR_HSI14RDYC /*!< HSI14 Ready Interrupt Clear */ +#if defined(RCC_HSI48_SUPPORT) +#define LL_RCC_CIR_HSI48RDYC RCC_CIR_HSI48RDYC /*!< HSI48 Ready Interrupt Clear */ +#endif /* RCC_HSI48_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 */ +#define LL_RCC_CIR_HSI14RDYF RCC_CIR_HSI14RDYF /*!< HSI14 Ready Interrupt flag */ +#if defined(RCC_HSI48_SUPPORT) +#define LL_RCC_CIR_HSI48RDYF RCC_CIR_HSI48RDYF /*!< HSI48 Ready Interrupt flag */ +#endif /* RCC_HSI48_SUPPORT */ +#define LL_RCC_CIR_CSSF RCC_CIR_CSSF /*!< Clock Security System Interrupt flag */ +#define LL_RCC_CSR_OBLRSTF RCC_CSR_OBLRSTF /*!< OBL 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 */ +#define LL_RCC_CSR_LPWRRSTF RCC_CSR_LPWRRSTF /*!< Low-Power reset flag */ +#if defined(RCC_CSR_V18PWRRSTF) +#define LL_RCC_CSR_V18PWRRSTF RCC_CSR_V18PWRRSTF /*!< Reset flag of the 1.8 V domain. */ +#endif /* RCC_CSR_V18PWRRSTF */ +/** + * @} + */ + +/** @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 */ +#define LL_RCC_CIR_HSI14RDYIE RCC_CIR_HSI14RDYIE /*!< HSI14 Ready Interrupt Enable */ +#if defined(RCC_HSI48_SUPPORT) +#define LL_RCC_CIR_HSI48RDYIE RCC_CIR_HSI48RDYIE /*!< HSI48 Ready Interrupt Enable */ +#endif /* RCC_HSI48_SUPPORT */ +/** + * @} + */ + +/** @defgroup RCC_LL_EC_LSEDRIVE LSE oscillator drive capability + * @{ + */ +#define LL_RCC_LSEDRIVE_LOW ((uint32_t)0x00000000U) /*!< Xtal mode lower driving capability */ +#define LL_RCC_LSEDRIVE_MEDIUMLOW RCC_BDCR_LSEDRV_1 /*!< Xtal mode medium low driving capability */ +#define LL_RCC_LSEDRIVE_MEDIUMHIGH RCC_BDCR_LSEDRV_0 /*!< Xtal mode medium high driving capability */ +#define LL_RCC_LSEDRIVE_HIGH RCC_BDCR_LSEDRV /*!< Xtal mode higher driving capability */ +/** + * @} + */ + +/** @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_HSI48) +#define LL_RCC_SYS_CLKSOURCE_HSI48 RCC_CFGR_SW_HSI48 /*!< HSI48 selection as system clock */ +#endif /* RCC_CFGR_SW_HSI48 */ +/** + * @} + */ + +/** @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_CFGR_SWS_HSI48) +#define LL_RCC_SYS_CLKSOURCE_STATUS_HSI48 RCC_CFGR_SWS_HSI48 /*!< HSI48 used as system clock */ +#endif /* RCC_CFGR_SWS_HSI48 */ +/** + * @} + */ + +/** @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_PPRE_DIV1 /*!< HCLK not divided */ +#define LL_RCC_APB1_DIV_2 RCC_CFGR_PPRE_DIV2 /*!< HCLK divided by 2 */ +#define LL_RCC_APB1_DIV_4 RCC_CFGR_PPRE_DIV4 /*!< HCLK divided by 4 */ +#define LL_RCC_APB1_DIV_8 RCC_CFGR_PPRE_DIV8 /*!< HCLK divided by 8 */ +#define LL_RCC_APB1_DIV_16 RCC_CFGR_PPRE_DIV16 /*!< HCLK divided by 16 */ +/** + * @} + */ + +/** @defgroup RCC_LL_EC_MCO1SOURCE MCO1 SOURCE selection + * @{ + */ +#define LL_RCC_MCO1SOURCE_NOCLOCK RCC_CFGR_MCOSEL_NOCLOCK /*!< MCO output disabled, no clock on MCO */ +#define LL_RCC_MCO1SOURCE_HSI14 RCC_CFGR_MCOSEL_HSI14 /*!< HSI14 oscillator clock selected */ +#define LL_RCC_MCO1SOURCE_SYSCLK RCC_CFGR_MCOSEL_SYSCLK /*!< SYSCLK selection as MCO source */ +#define LL_RCC_MCO1SOURCE_HSI RCC_CFGR_MCOSEL_HSI /*!< HSI selection as MCO source */ +#define LL_RCC_MCO1SOURCE_HSE RCC_CFGR_MCOSEL_HSE /*!< HSE selection as MCO source */ +#define LL_RCC_MCO1SOURCE_LSI RCC_CFGR_MCOSEL_LSI /*!< LSI selection as MCO source */ +#define LL_RCC_MCO1SOURCE_LSE RCC_CFGR_MCOSEL_LSE /*!< LSE selection as MCO source */ +#if defined(RCC_CFGR_MCOSEL_HSI48) +#define LL_RCC_MCO1SOURCE_HSI48 RCC_CFGR_MCOSEL_HSI48 /*!< HSI48 selection as MCO source */ +#endif /* RCC_CFGR_MCOSEL_HSI48 */ +#define LL_RCC_MCO1SOURCE_PLLCLK_DIV_2 RCC_CFGR_MCOSEL_PLL_DIV2 /*!< PLL clock divided by 2*/ +#if defined(RCC_CFGR_PLLNODIV) +#define LL_RCC_MCO1SOURCE_PLLCLK (RCC_CFGR_MCOSEL_PLL_DIV2 | RCC_CFGR_PLLNODIV) /*!< PLL clock selected*/ +#endif /* RCC_CFGR_PLLNODIV */ +/** + * @} + */ + +/** @defgroup RCC_LL_EC_MCO1_DIV MCO1 prescaler + * @{ + */ +#define LL_RCC_MCO1_DIV_1 ((uint32_t)0x00000000U)/*!< MCO Clock divided by 1 */ +#if defined(RCC_CFGR_MCOPRE) +#define LL_RCC_MCO1_DIV_2 RCC_CFGR_MCOPRE_DIV2 /*!< MCO Clock divided by 2 */ +#define LL_RCC_MCO1_DIV_4 RCC_CFGR_MCOPRE_DIV4 /*!< MCO Clock divided by 4 */ +#define LL_RCC_MCO1_DIV_8 RCC_CFGR_MCOPRE_DIV8 /*!< MCO Clock divided by 8 */ +#define LL_RCC_MCO1_DIV_16 RCC_CFGR_MCOPRE_DIV16 /*!< MCO Clock divided by 16 */ +#define LL_RCC_MCO1_DIV_32 RCC_CFGR_MCOPRE_DIV32 /*!< MCO Clock divided by 32 */ +#define LL_RCC_MCO1_DIV_64 RCC_CFGR_MCOPRE_DIV64 /*!< MCO Clock divided by 64 */ +#define LL_RCC_MCO1_DIV_128 RCC_CFGR_MCOPRE_DIV128 /*!< MCO Clock divided by 128 */ +#endif /* RCC_CFGR_MCOPRE */ +/** + * @} + */ + +#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 */ + +/** @defgroup RCC_LL_EC_USART1_CLKSOURCE Peripheral USART clock source selection + * @{ + */ +#define LL_RCC_USART1_CLKSOURCE_PCLK1 (uint32_t)((RCC_POSITION_USART1SW << 24) | RCC_CFGR3_USART1SW_PCLK) /*!< PCLK1 clock used as USART1 clock source */ +#define LL_RCC_USART1_CLKSOURCE_SYSCLK (uint32_t)((RCC_POSITION_USART1SW << 24) | RCC_CFGR3_USART1SW_SYSCLK) /*!< System clock selected as USART1 clock source */ +#define LL_RCC_USART1_CLKSOURCE_LSE (uint32_t)((RCC_POSITION_USART1SW << 24) | RCC_CFGR3_USART1SW_LSE) /*!< LSE oscillator clock used as USART1 clock source */ +#define LL_RCC_USART1_CLKSOURCE_HSI (uint32_t)((RCC_POSITION_USART1SW << 24) | RCC_CFGR3_USART1SW_HSI) /*!< HSI oscillator clock used as USART1 clock source */ +#if defined(RCC_CFGR3_USART2SW) +#define LL_RCC_USART2_CLKSOURCE_PCLK1 (uint32_t)((RCC_POSITION_USART2SW << 24) | RCC_CFGR3_USART2SW_PCLK) /*!< PCLK1 clock used as USART2 clock source */ +#define LL_RCC_USART2_CLKSOURCE_SYSCLK (uint32_t)((RCC_POSITION_USART2SW << 24) | RCC_CFGR3_USART2SW_SYSCLK) /*!< System clock selected as USART2 clock source */ +#define LL_RCC_USART2_CLKSOURCE_LSE (uint32_t)((RCC_POSITION_USART2SW << 24) | RCC_CFGR3_USART2SW_LSE) /*!< LSE oscillator clock used as USART2 clock source */ +#define LL_RCC_USART2_CLKSOURCE_HSI (uint32_t)((RCC_POSITION_USART2SW << 24) | RCC_CFGR3_USART2SW_HSI) /*!< HSI oscillator clock used as USART2 clock source */ +#endif /* RCC_CFGR3_USART2SW */ +#if defined(RCC_CFGR3_USART3SW) +#define LL_RCC_USART3_CLKSOURCE_PCLK1 (uint32_t)((RCC_POSITION_USART3SW << 24) | RCC_CFGR3_USART3SW_PCLK) /*!< PCLK1 clock used as USART3 clock source */ +#define LL_RCC_USART3_CLKSOURCE_SYSCLK (uint32_t)((RCC_POSITION_USART3SW << 24) | RCC_CFGR3_USART3SW_SYSCLK) /*!< System clock selected as USART3 clock source */ +#define LL_RCC_USART3_CLKSOURCE_LSE (uint32_t)((RCC_POSITION_USART3SW << 24) | RCC_CFGR3_USART3SW_LSE) /*!< LSE oscillator clock used as USART3 clock source */ +#define LL_RCC_USART3_CLKSOURCE_HSI (uint32_t)((RCC_POSITION_USART3SW << 24) | RCC_CFGR3_USART3SW_HSI) /*!< HSI oscillator clock used as USART3 clock source */ +#endif /* RCC_CFGR3_USART3SW */ +/** + * @} + */ + +/** @defgroup RCC_LL_EC_I2C1_CLKSOURCE Peripheral I2C clock source selection + * @{ + */ +#define LL_RCC_I2C1_CLKSOURCE_HSI RCC_CFGR3_I2C1SW_HSI /*!< HSI oscillator clock used as I2C1 clock source */ +#define LL_RCC_I2C1_CLKSOURCE_SYSCLK RCC_CFGR3_I2C1SW_SYSCLK /*!< System clock selected as I2C1 clock source */ +/** + * @} + */ + +#if defined(CEC) +/** @defgroup RCC_LL_EC_CEC_CLKSOURCE Peripheral CEC clock source selection + * @{ + */ +#define LL_RCC_CEC_CLKSOURCE_HSI_DIV244 RCC_CFGR3_CECSW_HSI_DIV244 /*!< HSI clock divided by 244 selected as HDMI CEC entry clock source */ +#define LL_RCC_CEC_CLKSOURCE_LSE RCC_CFGR3_CECSW_LSE /*!< LSE clock selected as HDMI CEC entry clock source */ +/** + * @} + */ + +#endif /* CEC */ + +#if defined(USB) +/** @defgroup RCC_LL_EC_USB_CLKSOURCE Peripheral USB clock source selection + * @{ + */ +#if defined(RCC_CFGR3_USBSW_HSI48) +#define LL_RCC_USB_CLKSOURCE_HSI48 RCC_CFGR3_USBSW_HSI48 /*!< HSI48 oscillator clock used as USB clock source */ +#else +#define LL_RCC_USB_CLKSOURCE_NONE ((uint32_t)0x00000000) /*!< USB Clock disabled */ +#endif /*RCC_CFGR3_USBSW_HSI48*/ +#define LL_RCC_USB_CLKSOURCE_PLL RCC_CFGR3_USBSW_PLLCLK /*!< PLL selected as USB clock source */ +/** + * @} + */ + +#endif /* USB */ + +/** @defgroup RCC_LL_EC_USART1 Peripheral USART get clock source + * @{ + */ +#define LL_RCC_USART1_CLKSOURCE RCC_POSITION_USART1SW /*!< USART1 Clock source selection */ +#if defined(RCC_CFGR3_USART2SW) +#define LL_RCC_USART2_CLKSOURCE RCC_POSITION_USART2SW /*!< USART2 Clock source selection */ +#endif /* RCC_CFGR3_USART2SW */ +#if defined(RCC_CFGR3_USART3SW) +#define LL_RCC_USART3_CLKSOURCE RCC_POSITION_USART3SW /*!< USART3 Clock source selection */ +#endif /* RCC_CFGR3_USART3SW */ +/** + * @} + */ + +/** @defgroup RCC_LL_EC_I2C1 Peripheral I2C get clock source + * @{ + */ +#define LL_RCC_I2C1_CLKSOURCE RCC_CFGR3_I2C1SW /*!< I2C1 Clock source selection */ +/** + * @} + */ + +#if defined(CEC) +/** @defgroup RCC_LL_EC_CEC Peripheral CEC get clock source + * @{ + */ +#define LL_RCC_CEC_CLKSOURCE RCC_CFGR3_CECSW /*!< CEC Clock source selection */ +/** + * @} + */ +#endif /* CEC */ + +#if defined(USB) +/** @defgroup RCC_LL_EC_USB Peripheral USB get clock source + * @{ + */ +#define LL_RCC_USB_CLKSOURCE RCC_CFGR3_USBSW /*!< USB Clock source selection */ +/** + * @} + */ +#endif /* USB */ + +/** @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_DIV32 RCC_BDCR_RTCSEL /*!< HSE oscillator clock divided by 32 used as RTC clock */ +/** + * @} + */ + +/** @defgroup RCC_LL_EC_PLL_MUL PLL Multiplicator factor + * @{ + */ +#define LL_RCC_PLL_MUL_2 RCC_CFGR_PLLMUL2 /*!< PLL input clock*2 */ +#define LL_RCC_PLL_MUL_3 RCC_CFGR_PLLMUL3 /*!< PLL input clock*3 */ +#define LL_RCC_PLL_MUL_4 RCC_CFGR_PLLMUL4 /*!< PLL input clock*4 */ +#define LL_RCC_PLL_MUL_5 RCC_CFGR_PLLMUL5 /*!< PLL input clock*5 */ +#define LL_RCC_PLL_MUL_6 RCC_CFGR_PLLMUL6 /*!< PLL input clock*6 */ +#define LL_RCC_PLL_MUL_7 RCC_CFGR_PLLMUL7 /*!< PLL input clock*7 */ +#define LL_RCC_PLL_MUL_8 RCC_CFGR_PLLMUL8 /*!< PLL input clock*8 */ +#define LL_RCC_PLL_MUL_9 RCC_CFGR_PLLMUL9 /*!< PLL input clock*9 */ +#define LL_RCC_PLL_MUL_10 RCC_CFGR_PLLMUL10 /*!< PLL input clock*10 */ +#define LL_RCC_PLL_MUL_11 RCC_CFGR_PLLMUL11 /*!< PLL input clock*11 */ +#define LL_RCC_PLL_MUL_12 RCC_CFGR_PLLMUL12 /*!< PLL input clock*12 */ +#define LL_RCC_PLL_MUL_13 RCC_CFGR_PLLMUL13 /*!< PLL input clock*13 */ +#define LL_RCC_PLL_MUL_14 RCC_CFGR_PLLMUL14 /*!< PLL input clock*14 */ +#define LL_RCC_PLL_MUL_15 RCC_CFGR_PLLMUL15 /*!< PLL input clock*15 */ +#define LL_RCC_PLL_MUL_16 RCC_CFGR_PLLMUL16 /*!< PLL input clock*16 */ +/** + * @} + */ + +/** @defgroup RCC_LL_EC_PLLSOURCE PLL SOURCE + * @{ + */ +#define LL_RCC_PLLSOURCE_NONE 0x00000000U /*!< No clock selected as main PLL entry clock source */ +#define LL_RCC_PLLSOURCE_HSE RCC_CFGR_PLLSRC_HSE_PREDIV /*!< HSE/PREDIV clock selected as PLL entry clock source */ +#if defined(RCC_PLLSRC_PREDIV1_SUPPORT) +#define LL_RCC_PLLSOURCE_HSI RCC_CFGR_PLLSRC_HSI_PREDIV /*!< HSI/PREDIV clock selected as PLL entry clock source */ +#if defined(RCC_CFGR_SW_HSI48) +#define LL_RCC_PLLSOURCE_HSI48 RCC_CFGR_PLLSRC_HSI48_PREDIV /*!< HSI48/PREDIV clock selected as PLL entry clock source */ +#endif /* RCC_CFGR_SW_HSI48 */ +#else +#define LL_RCC_PLLSOURCE_HSI_DIV_2 RCC_CFGR_PLLSRC_HSI_DIV2 /*!< HSI clock divided by 2 selected as PLL entry clock source */ +#define LL_RCC_PLLSOURCE_HSE_DIV_1 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV1) /*!< HSE clock selected as PLL entry clock source */ +#define LL_RCC_PLLSOURCE_HSE_DIV_2 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV2) /*!< HSE/2 clock selected as PLL entry clock source */ +#define LL_RCC_PLLSOURCE_HSE_DIV_3 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV3) /*!< HSE/3 clock selected as PLL entry clock source */ +#define LL_RCC_PLLSOURCE_HSE_DIV_4 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV4) /*!< HSE/4 clock selected as PLL entry clock source */ +#define LL_RCC_PLLSOURCE_HSE_DIV_5 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV5) /*!< HSE/5 clock selected as PLL entry clock source */ +#define LL_RCC_PLLSOURCE_HSE_DIV_6 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV6) /*!< HSE/6 clock selected as PLL entry clock source */ +#define LL_RCC_PLLSOURCE_HSE_DIV_7 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV7) /*!< HSE/7 clock selected as PLL entry clock source */ +#define LL_RCC_PLLSOURCE_HSE_DIV_8 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV8) /*!< HSE/8 clock selected as PLL entry clock source */ +#define LL_RCC_PLLSOURCE_HSE_DIV_9 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV9) /*!< HSE/9 clock selected as PLL entry clock source */ +#define LL_RCC_PLLSOURCE_HSE_DIV_10 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV10) /*!< HSE/10 clock selected as PLL entry clock source */ +#define LL_RCC_PLLSOURCE_HSE_DIV_11 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV11) /*!< HSE/11 clock selected as PLL entry clock source */ +#define LL_RCC_PLLSOURCE_HSE_DIV_12 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV12) /*!< HSE/12 clock selected as PLL entry clock source */ +#define LL_RCC_PLLSOURCE_HSE_DIV_13 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV13) /*!< HSE/13 clock selected as PLL entry clock source */ +#define LL_RCC_PLLSOURCE_HSE_DIV_14 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV14) /*!< HSE/14 clock selected as PLL entry clock source */ +#define LL_RCC_PLLSOURCE_HSE_DIV_15 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV15) /*!< HSE/15 clock selected as PLL entry clock source */ +#define LL_RCC_PLLSOURCE_HSE_DIV_16 (RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR2_PREDIV_DIV16) /*!< HSE/16 clock selected as PLL entry clock source */ +#endif /* RCC_PLLSRC_PREDIV1_SUPPORT */ +/** + * @} + */ + +/** @defgroup RCC_LL_EC_PREDIV_DIV PREDIV Division factor + * @{ + */ +#define LL_RCC_PREDIV_DIV_1 RCC_CFGR2_PREDIV_DIV1 /*!< PREDIV input clock not divided */ +#define LL_RCC_PREDIV_DIV_2 RCC_CFGR2_PREDIV_DIV2 /*!< PREDIV input clock divided by 2 */ +#define LL_RCC_PREDIV_DIV_3 RCC_CFGR2_PREDIV_DIV3 /*!< PREDIV input clock divided by 3 */ +#define LL_RCC_PREDIV_DIV_4 RCC_CFGR2_PREDIV_DIV4 /*!< PREDIV input clock divided by 4 */ +#define LL_RCC_PREDIV_DIV_5 RCC_CFGR2_PREDIV_DIV5 /*!< PREDIV input clock divided by 5 */ +#define LL_RCC_PREDIV_DIV_6 RCC_CFGR2_PREDIV_DIV6 /*!< PREDIV input clock divided by 6 */ +#define LL_RCC_PREDIV_DIV_7 RCC_CFGR2_PREDIV_DIV7 /*!< PREDIV input clock divided by 7 */ +#define LL_RCC_PREDIV_DIV_8 RCC_CFGR2_PREDIV_DIV8 /*!< PREDIV input clock divided by 8 */ +#define LL_RCC_PREDIV_DIV_9 RCC_CFGR2_PREDIV_DIV9 /*!< PREDIV input clock divided by 9 */ +#define LL_RCC_PREDIV_DIV_10 RCC_CFGR2_PREDIV_DIV10 /*!< PREDIV input clock divided by 10 */ +#define LL_RCC_PREDIV_DIV_11 RCC_CFGR2_PREDIV_DIV11 /*!< PREDIV input clock divided by 11 */ +#define LL_RCC_PREDIV_DIV_12 RCC_CFGR2_PREDIV_DIV12 /*!< PREDIV input clock divided by 12 */ +#define LL_RCC_PREDIV_DIV_13 RCC_CFGR2_PREDIV_DIV13 /*!< PREDIV input clock divided by 13 */ +#define LL_RCC_PREDIV_DIV_14 RCC_CFGR2_PREDIV_DIV14 /*!< PREDIV input clock divided by 14 */ +#define LL_RCC_PREDIV_DIV_15 RCC_CFGR2_PREDIV_DIV15 /*!< PREDIV input clock divided by 15 */ +#define LL_RCC_PREDIV_DIV_16 RCC_CFGR2_PREDIV_DIV16 /*!< PREDIV input clock divided by 16 */ +/** + * @} + */ + +/** + * @} + */ + +/* 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 + * @{ + */ + +#if defined(RCC_PLLSRC_PREDIV1_SUPPORT) +/** + * @brief Helper macro to calculate the PLLCLK frequency + * @note ex: @ref __LL_RCC_CALC_PLLCLK_FREQ (HSE_VALUE, @ref LL_RCC_PLL_GetMultiplicator() + * , @ref LL_RCC_PLL_GetPrediv()); + * @param __INPUTFREQ__ PLL Input frequency (based on HSE/HSI/HSI48) + * @param __PLLMUL__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLL_MUL_2 + * @arg @ref LL_RCC_PLL_MUL_3 + * @arg @ref LL_RCC_PLL_MUL_4 + * @arg @ref LL_RCC_PLL_MUL_5 + * @arg @ref LL_RCC_PLL_MUL_6 + * @arg @ref LL_RCC_PLL_MUL_7 + * @arg @ref LL_RCC_PLL_MUL_8 + * @arg @ref LL_RCC_PLL_MUL_9 + * @arg @ref LL_RCC_PLL_MUL_10 + * @arg @ref LL_RCC_PLL_MUL_11 + * @arg @ref LL_RCC_PLL_MUL_12 + * @arg @ref LL_RCC_PLL_MUL_13 + * @arg @ref LL_RCC_PLL_MUL_14 + * @arg @ref LL_RCC_PLL_MUL_15 + * @arg @ref LL_RCC_PLL_MUL_16 + * @param __PLLPREDIV__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PREDIV_DIV_1 + * @arg @ref LL_RCC_PREDIV_DIV_2 + * @arg @ref LL_RCC_PREDIV_DIV_3 + * @arg @ref LL_RCC_PREDIV_DIV_4 + * @arg @ref LL_RCC_PREDIV_DIV_5 + * @arg @ref LL_RCC_PREDIV_DIV_6 + * @arg @ref LL_RCC_PREDIV_DIV_7 + * @arg @ref LL_RCC_PREDIV_DIV_8 + * @arg @ref LL_RCC_PREDIV_DIV_9 + * @arg @ref LL_RCC_PREDIV_DIV_10 + * @arg @ref LL_RCC_PREDIV_DIV_11 + * @arg @ref LL_RCC_PREDIV_DIV_12 + * @arg @ref LL_RCC_PREDIV_DIV_13 + * @arg @ref LL_RCC_PREDIV_DIV_14 + * @arg @ref LL_RCC_PREDIV_DIV_15 + * @arg @ref LL_RCC_PREDIV_DIV_16 + * @retval PLL clock frequency (in Hz) + */ +#define __LL_RCC_CALC_PLLCLK_FREQ(__INPUTFREQ__, __PLLMUL__, __PLLPREDIV__) \ + (((__INPUTFREQ__) / ((((__PLLPREDIV__) & RCC_CFGR2_PREDIV) + 1U))) * ((((__PLLMUL__) & RCC_CFGR_PLLMUL) >> RCC_POSITION_PLLMUL) + 2U)) + +#else +/** + * @brief Helper macro to calculate the PLLCLK frequency + * @note ex: @ref __LL_RCC_CALC_PLLCLK_FREQ (HSE_VALUE / (@ref LL_RCC_PLL_GetPrediv () + 1), @ref LL_RCC_PLL_GetMultiplicator()); + * @param __INPUTFREQ__ PLL Input frequency (based on HSE div Prediv / HSI div 2) + * @param __PLLMUL__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLL_MUL_2 + * @arg @ref LL_RCC_PLL_MUL_3 + * @arg @ref LL_RCC_PLL_MUL_4 + * @arg @ref LL_RCC_PLL_MUL_5 + * @arg @ref LL_RCC_PLL_MUL_6 + * @arg @ref LL_RCC_PLL_MUL_7 + * @arg @ref LL_RCC_PLL_MUL_8 + * @arg @ref LL_RCC_PLL_MUL_9 + * @arg @ref LL_RCC_PLL_MUL_10 + * @arg @ref LL_RCC_PLL_MUL_11 + * @arg @ref LL_RCC_PLL_MUL_12 + * @arg @ref LL_RCC_PLL_MUL_13 + * @arg @ref LL_RCC_PLL_MUL_14 + * @arg @ref LL_RCC_PLL_MUL_15 + * @arg @ref LL_RCC_PLL_MUL_16 + * @retval PLL clock frequency (in Hz) + */ +#define __LL_RCC_CALC_PLLCLK_FREQ(__INPUTFREQ__, __PLLMUL__) \ + ((__INPUTFREQ__) * ((((__PLLMUL__) & RCC_CFGR_PLLMUL) >> RCC_POSITION_PLLMUL) + 2U)) +#endif /* RCC_PLLSRC_PREDIV1_SUPPORT */ +/** + * @brief Helper macro to calculate the HCLK frequency + * @note: __AHBPRESCALER__ be retrieved by @ref LL_RCC_GetAHBPrescaler + * ex: __LL_RCC_CALC_HCLK_FREQ(LL_RCC_GetAHBPrescaler()) + * @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) + * @note: __APB1PRESCALER__ be retrieved by @ref LL_RCC_GetAPB1Prescaler + * ex: __LL_RCC_CALC_PCLK1_FREQ(LL_RCC_GetAPB1Prescaler()) + * @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_PPRE_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 Disable the Clock Security System. + * @note Cannot be disabled in HSE is ready (only by hardware) + * @rmtoll CR CSSON LL_RCC_HSE_DisableCSS + * @retval None + */ +__STATIC_INLINE void LL_RCC_HSE_DisableCSS(void) +{ + CLEAR_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 = 0x00 and Max_Data = 0x1F + * @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 = 0x00 and Max_Data = 0x1F + */ +__STATIC_INLINE uint32_t LL_RCC_HSI_GetCalibTrimming(void) +{ + return (uint32_t)(READ_BIT(RCC->CR, RCC_CR_HSITRIM) >> RCC_CR_HSITRIM_Pos); +} + +/** + * @} + */ + +#if defined(RCC_HSI48_SUPPORT) +/** @defgroup RCC_LL_EF_HSI48 HSI48 + * @{ + */ + +/** + * @brief Enable HSI48 + * @rmtoll CR2 HSI48ON LL_RCC_HSI48_Enable + * @retval None + */ +__STATIC_INLINE void LL_RCC_HSI48_Enable(void) +{ + SET_BIT(RCC->CR2, RCC_CR2_HSI48ON); +} + +/** + * @brief Disable HSI48 + * @rmtoll CR2 HSI48ON LL_RCC_HSI48_Disable + * @retval None + */ +__STATIC_INLINE void LL_RCC_HSI48_Disable(void) +{ + CLEAR_BIT(RCC->CR2, RCC_CR2_HSI48ON); +} + +/** + * @brief Check if HSI48 oscillator Ready + * @rmtoll CR2 HSI48RDY LL_RCC_HSI48_IsReady + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_HSI48_IsReady(void) +{ + return (READ_BIT(RCC->CR2, RCC_CR2_HSI48RDY) == (RCC_CR2_HSI48RDY)); +} + +/** + * @brief Get HSI48 Calibration value + * @rmtoll CR2 HSI48CAL LL_RCC_HSI48_GetCalibration + * @retval Between Min_Data = 0x00 and Max_Data = 0xFF + */ +__STATIC_INLINE uint32_t LL_RCC_HSI48_GetCalibration(void) +{ + return (uint32_t)(READ_BIT(RCC->CR2, RCC_CR2_HSI48CAL) >> RCC_POSITION_HSI48CAL); +} + +/** + * @} + */ + +#endif /* RCC_HSI48_SUPPORT */ + +/** @defgroup RCC_LL_EF_HSI14 HSI14 + * @{ + */ + +/** + * @brief Enable HSI14 + * @rmtoll CR2 HSI14ON LL_RCC_HSI14_Enable + * @retval None + */ +__STATIC_INLINE void LL_RCC_HSI14_Enable(void) +{ + SET_BIT(RCC->CR2, RCC_CR2_HSI14ON); +} + +/** + * @brief Disable HSI14 + * @rmtoll CR2 HSI14ON LL_RCC_HSI14_Disable + * @retval None + */ +__STATIC_INLINE void LL_RCC_HSI14_Disable(void) +{ + CLEAR_BIT(RCC->CR2, RCC_CR2_HSI14ON); +} + +/** + * @brief Check if HSI14 oscillator Ready + * @rmtoll CR2 HSI14RDY LL_RCC_HSI14_IsReady + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_HSI14_IsReady(void) +{ + return (READ_BIT(RCC->CR2, RCC_CR2_HSI14RDY) == (RCC_CR2_HSI14RDY)); +} + +/** + * @brief ADC interface can turn on the HSI14 oscillator + * @rmtoll CR2 HSI14DIS LL_RCC_HSI14_EnableADCControl + * @retval None + */ +__STATIC_INLINE void LL_RCC_HSI14_EnableADCControl(void) +{ + CLEAR_BIT(RCC->CR2, RCC_CR2_HSI14DIS); +} + +/** + * @brief ADC interface can not turn on the HSI14 oscillator + * @rmtoll CR2 HSI14DIS LL_RCC_HSI14_DisableADCControl + * @retval None + */ +__STATIC_INLINE void LL_RCC_HSI14_DisableADCControl(void) +{ + SET_BIT(RCC->CR2, RCC_CR2_HSI14DIS); +} + +/** + * @brief Set HSI14 Calibration trimming + * @note user-programmable trimming value that is added to the HSI14CAL + * @note Default value is 16, which, when added to the HSI14CAL value, + * should trim the HSI14 to 14 MHz +/- 1 % + * @rmtoll CR2 HSI14TRIM LL_RCC_HSI14_SetCalibTrimming + * @param Value between Min_Data = 0x00 and Max_Data = 0xFF + * @retval None + */ +__STATIC_INLINE void LL_RCC_HSI14_SetCalibTrimming(uint32_t Value) +{ + MODIFY_REG(RCC->CR2, RCC_CR2_HSI14TRIM, Value << RCC_POSITION_HSI14TRIM); +} + +/** + * @brief Get HSI14 Calibration value + * @note When HSI14TRIM is written, HSI14CAL is updated with the sum of + * HSI14TRIM and the factory trim value + * @rmtoll CR2 HSI14TRIM LL_RCC_HSI14_GetCalibTrimming + * @retval Between Min_Data = 0x00 and Max_Data = 0x1F + */ +__STATIC_INLINE uint32_t LL_RCC_HSI14_GetCalibTrimming(void) +{ + return (uint32_t)(READ_BIT(RCC->CR2, RCC_CR2_HSI14TRIM) >> RCC_POSITION_HSI14TRIM); +} + +/** + * @brief Get HSI14 Calibration trimming + * @rmtoll CR2 HSI14CAL LL_RCC_HSI14_GetCalibration + * @retval Between Min_Data = 0x00 and Max_Data = 0x1F + */ +__STATIC_INLINE uint32_t LL_RCC_HSI14_GetCalibration(void) +{ + return (uint32_t)(READ_BIT(RCC->CR2, RCC_CR2_HSI14CAL) >> RCC_POSITION_HSI14CAL); +} + +/** + * @} + */ + +/** @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 Set LSE oscillator drive capability + * @note The oscillator is in Xtal mode when it is not in bypass mode. + * @rmtoll BDCR LSEDRV LL_RCC_LSE_SetDriveCapability + * @param LSEDrive This parameter can be one of the following values: + * @arg @ref LL_RCC_LSEDRIVE_LOW + * @arg @ref LL_RCC_LSEDRIVE_MEDIUMLOW + * @arg @ref LL_RCC_LSEDRIVE_MEDIUMHIGH + * @arg @ref LL_RCC_LSEDRIVE_HIGH + * @retval None + */ +__STATIC_INLINE void LL_RCC_LSE_SetDriveCapability(uint32_t LSEDrive) +{ + MODIFY_REG(RCC->BDCR, RCC_BDCR_LSEDRV, LSEDrive); +} + +/** + * @brief Get LSE oscillator drive capability + * @rmtoll BDCR LSEDRV LL_RCC_LSE_GetDriveCapability + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_LSEDRIVE_LOW + * @arg @ref LL_RCC_LSEDRIVE_MEDIUMLOW + * @arg @ref LL_RCC_LSEDRIVE_MEDIUMHIGH + * @arg @ref LL_RCC_LSEDRIVE_HIGH + */ +__STATIC_INLINE uint32_t LL_RCC_LSE_GetDriveCapability(void) +{ + return (uint32_t)(READ_BIT(RCC->BDCR, RCC_BDCR_LSEDRV)); +} + +/** + * @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)); +} + +/** + * @} + */ + +/** @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_HSI48 (*) + * + * (*) 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_HSI48 (*) + * + * (*) 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 PPRE 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_PPRE, 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 PPRE 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_PPRE)); +} + +/** + * @} + */ + +/** @defgroup RCC_LL_EF_MCO MCO + * @{ + */ + +/** + * @brief Configure MCOx + * @rmtoll CFGR MCO LL_RCC_ConfigMCO\n + * CFGR MCOPRE LL_RCC_ConfigMCO\n + * CFGR PLLNODIV LL_RCC_ConfigMCO + * @param MCOxSource This parameter can be one of the following values: + * @arg @ref LL_RCC_MCO1SOURCE_NOCLOCK + * @arg @ref LL_RCC_MCO1SOURCE_HSI14 + * @arg @ref LL_RCC_MCO1SOURCE_SYSCLK + * @arg @ref LL_RCC_MCO1SOURCE_HSI + * @arg @ref LL_RCC_MCO1SOURCE_HSE + * @arg @ref LL_RCC_MCO1SOURCE_LSI + * @arg @ref LL_RCC_MCO1SOURCE_LSE + * @arg @ref LL_RCC_MCO1SOURCE_HSI48 (*) + * @arg @ref LL_RCC_MCO1SOURCE_PLLCLK (*) + * @arg @ref LL_RCC_MCO1SOURCE_PLLCLK_DIV_2 + * + * (*) value not defined in all devices + * @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_4 (*) + * @arg @ref LL_RCC_MCO1_DIV_8 (*) + * @arg @ref LL_RCC_MCO1_DIV_16 (*) + * @arg @ref LL_RCC_MCO1_DIV_32 (*) + * @arg @ref LL_RCC_MCO1_DIV_64 (*) + * @arg @ref LL_RCC_MCO1_DIV_128 (*) + * + * (*) value not defined in all devices + * @retval None + */ +__STATIC_INLINE void LL_RCC_ConfigMCO(uint32_t MCOxSource, uint32_t MCOxPrescaler) +{ +#if defined(RCC_CFGR_MCOPRE) +#if defined(RCC_CFGR_PLLNODIV) + MODIFY_REG(RCC->CFGR, RCC_CFGR_MCOSEL | RCC_CFGR_MCOPRE | RCC_CFGR_PLLNODIV, MCOxSource | MCOxPrescaler); +#else + MODIFY_REG(RCC->CFGR, RCC_CFGR_MCOSEL | RCC_CFGR_MCOPRE, MCOxSource | MCOxPrescaler); +#endif /* RCC_CFGR_PLLNODIV */ +#else + MODIFY_REG(RCC->CFGR, RCC_CFGR_MCOSEL, MCOxSource); +#endif /* RCC_CFGR_MCOPRE */ +} + +/** + * @} + */ + +/** @defgroup RCC_LL_EF_Peripheral_Clock_Source Peripheral Clock Source + * @{ + */ + +/** + * @brief Configure USARTx clock source + * @rmtoll CFGR3 USART1SW LL_RCC_SetUSARTClockSource\n + * CFGR3 USART2SW LL_RCC_SetUSARTClockSource\n + * CFGR3 USART3SW LL_RCC_SetUSARTClockSource + * @param USARTxSource This parameter can be one of the following values: + * @arg @ref LL_RCC_USART1_CLKSOURCE_PCLK1 + * @arg @ref LL_RCC_USART1_CLKSOURCE_SYSCLK + * @arg @ref LL_RCC_USART1_CLKSOURCE_LSE + * @arg @ref LL_RCC_USART1_CLKSOURCE_HSI + * @arg @ref LL_RCC_USART2_CLKSOURCE_PCLK1 (*) + * @arg @ref LL_RCC_USART2_CLKSOURCE_SYSCLK (*) + * @arg @ref LL_RCC_USART2_CLKSOURCE_LSE (*) + * @arg @ref LL_RCC_USART2_CLKSOURCE_HSI (*) + * @arg @ref LL_RCC_USART3_CLKSOURCE_PCLK1 (*) + * @arg @ref LL_RCC_USART3_CLKSOURCE_SYSCLK (*) + * @arg @ref LL_RCC_USART3_CLKSOURCE_LSE (*) + * @arg @ref LL_RCC_USART3_CLKSOURCE_HSI (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetUSARTClockSource(uint32_t USARTxSource) +{ + MODIFY_REG(RCC->CFGR3, (RCC_CFGR3_USART1SW << ((USARTxSource & 0xFF000000U) >> 24U)), (USARTxSource & 0x00FFFFFFU)); +} + +/** + * @brief Configure I2Cx clock source + * @rmtoll CFGR3 I2C1SW LL_RCC_SetI2CClockSource + * @param I2CxSource This parameter can be one of the following values: + * @arg @ref LL_RCC_I2C1_CLKSOURCE_HSI + * @arg @ref LL_RCC_I2C1_CLKSOURCE_SYSCLK + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetI2CClockSource(uint32_t I2CxSource) +{ + MODIFY_REG(RCC->CFGR3, RCC_CFGR3_I2C1SW, I2CxSource); +} + +#if defined(CEC) +/** + * @brief Configure CEC clock source + * @rmtoll CFGR3 CECSW LL_RCC_SetCECClockSource + * @param CECxSource This parameter can be one of the following values: + * @arg @ref LL_RCC_CEC_CLKSOURCE_HSI_DIV244 + * @arg @ref LL_RCC_CEC_CLKSOURCE_LSE + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetCECClockSource(uint32_t CECxSource) +{ + MODIFY_REG(RCC->CFGR3, RCC_CFGR3_CECSW, CECxSource); +} +#endif /* CEC */ + +#if defined(USB) +/** + * @brief Configure USB clock source + * @rmtoll CFGR3 USBSW LL_RCC_SetUSBClockSource + * @param USBxSource This parameter can be one of the following values: + * @arg @ref LL_RCC_USB_CLKSOURCE_HSI48 (*) + * @arg @ref LL_RCC_USB_CLKSOURCE_NONE (*) + * @arg @ref LL_RCC_USB_CLKSOURCE_PLL + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetUSBClockSource(uint32_t USBxSource) +{ + MODIFY_REG(RCC->CFGR3, RCC_CFGR3_USBSW, USBxSource); +} +#endif /* USB */ + +/** + * @brief Get USARTx clock source + * @rmtoll CFGR3 USART1SW LL_RCC_GetUSARTClockSource\n + * CFGR3 USART2SW LL_RCC_GetUSARTClockSource\n + * CFGR3 USART3SW LL_RCC_GetUSARTClockSource + * @param USARTx This parameter can be one of the following values: + * @arg @ref LL_RCC_USART1_CLKSOURCE + * @arg @ref LL_RCC_USART2_CLKSOURCE (*) + * @arg @ref LL_RCC_USART3_CLKSOURCE (*) + * + * (*) value not defined in all devices. + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_USART1_CLKSOURCE_PCLK1 + * @arg @ref LL_RCC_USART1_CLKSOURCE_SYSCLK + * @arg @ref LL_RCC_USART1_CLKSOURCE_LSE + * @arg @ref LL_RCC_USART1_CLKSOURCE_HSI + * @arg @ref LL_RCC_USART2_CLKSOURCE_PCLK1 (*) + * @arg @ref LL_RCC_USART2_CLKSOURCE_SYSCLK (*) + * @arg @ref LL_RCC_USART2_CLKSOURCE_LSE (*) + * @arg @ref LL_RCC_USART2_CLKSOURCE_HSI (*) + * @arg @ref LL_RCC_USART3_CLKSOURCE_PCLK1 (*) + * @arg @ref LL_RCC_USART3_CLKSOURCE_SYSCLK (*) + * @arg @ref LL_RCC_USART3_CLKSOURCE_LSE (*) + * @arg @ref LL_RCC_USART3_CLKSOURCE_HSI (*) + * + * (*) value not defined in all devices. + */ +__STATIC_INLINE uint32_t LL_RCC_GetUSARTClockSource(uint32_t USARTx) +{ + return (uint32_t)(READ_BIT(RCC->CFGR3, (RCC_CFGR3_USART1SW << USARTx)) | (USARTx << 24U)); +} + +/** + * @brief Get I2Cx clock source + * @rmtoll CFGR3 I2C1SW LL_RCC_GetI2CClockSource + * @param I2Cx This parameter can be one of the following values: + * @arg @ref LL_RCC_I2C1_CLKSOURCE + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_I2C1_CLKSOURCE_HSI + * @arg @ref LL_RCC_I2C1_CLKSOURCE_SYSCLK + */ +__STATIC_INLINE uint32_t LL_RCC_GetI2CClockSource(uint32_t I2Cx) +{ + return (uint32_t)(READ_BIT(RCC->CFGR3, I2Cx)); +} + +#if defined(CEC) +/** + * @brief Get CEC clock source + * @rmtoll CFGR3 CECSW 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_DIV244 + * @arg @ref LL_RCC_CEC_CLKSOURCE_LSE + */ +__STATIC_INLINE uint32_t LL_RCC_GetCECClockSource(uint32_t CECx) +{ + return (uint32_t)(READ_BIT(RCC->CFGR3, CECx)); +} +#endif /* CEC */ + +#if defined(USB) +/** + * @brief Get USBx clock source + * @rmtoll CFGR3 USBSW 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_HSI48 (*) + * @arg @ref LL_RCC_USB_CLKSOURCE_NONE (*) + * @arg @ref LL_RCC_USB_CLKSOURCE_PLL + * + * (*) value not defined in all devices. + */ +__STATIC_INLINE uint32_t LL_RCC_GetUSBClockSource(uint32_t USBx) +{ + return (uint32_t)(READ_BIT(RCC->CFGR3, USBx)); +} +#endif /* USB */ + +/** + * @} + */ + +/** @defgroup RCC_LL_EF_RTC RTC + * @{ + */ + +/** + * @brief Set RTC Clock Source + * @note Once the RTC clock source has been selected, it cannot be changed any more unless + * the Backup domain is reset. 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_DIV32 + * @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_DIV32 + */ +__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); +} + +/** + * @} + */ + +/** @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)); +} + +#if defined(RCC_PLLSRC_PREDIV1_SUPPORT) +/** + * @brief Configure PLL used for SYSCLK Domain + * @rmtoll CFGR PLLSRC LL_RCC_PLL_ConfigDomain_SYS\n + * CFGR PLLMUL LL_RCC_PLL_ConfigDomain_SYS\n + * CFGR2 PREDIV 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 + * @arg @ref LL_RCC_PLLSOURCE_HSI48 (*) + * + * (*) value not defined in all devices + * @param PLLMul This parameter can be one of the following values: + * @arg @ref LL_RCC_PLL_MUL_2 + * @arg @ref LL_RCC_PLL_MUL_3 + * @arg @ref LL_RCC_PLL_MUL_4 + * @arg @ref LL_RCC_PLL_MUL_5 + * @arg @ref LL_RCC_PLL_MUL_6 + * @arg @ref LL_RCC_PLL_MUL_7 + * @arg @ref LL_RCC_PLL_MUL_8 + * @arg @ref LL_RCC_PLL_MUL_9 + * @arg @ref LL_RCC_PLL_MUL_10 + * @arg @ref LL_RCC_PLL_MUL_11 + * @arg @ref LL_RCC_PLL_MUL_12 + * @arg @ref LL_RCC_PLL_MUL_13 + * @arg @ref LL_RCC_PLL_MUL_14 + * @arg @ref LL_RCC_PLL_MUL_15 + * @arg @ref LL_RCC_PLL_MUL_16 + * @param PLLDiv This parameter can be one of the following values: + * @arg @ref LL_RCC_PREDIV_DIV_1 + * @arg @ref LL_RCC_PREDIV_DIV_2 + * @arg @ref LL_RCC_PREDIV_DIV_3 + * @arg @ref LL_RCC_PREDIV_DIV_4 + * @arg @ref LL_RCC_PREDIV_DIV_5 + * @arg @ref LL_RCC_PREDIV_DIV_6 + * @arg @ref LL_RCC_PREDIV_DIV_7 + * @arg @ref LL_RCC_PREDIV_DIV_8 + * @arg @ref LL_RCC_PREDIV_DIV_9 + * @arg @ref LL_RCC_PREDIV_DIV_10 + * @arg @ref LL_RCC_PREDIV_DIV_11 + * @arg @ref LL_RCC_PREDIV_DIV_12 + * @arg @ref LL_RCC_PREDIV_DIV_13 + * @arg @ref LL_RCC_PREDIV_DIV_14 + * @arg @ref LL_RCC_PREDIV_DIV_15 + * @arg @ref LL_RCC_PREDIV_DIV_16 + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLL_ConfigDomain_SYS(uint32_t Source, uint32_t PLLMul, uint32_t PLLDiv) +{ + MODIFY_REG(RCC->CFGR, RCC_CFGR_PLLSRC | RCC_CFGR_PLLMUL, Source | PLLMul); + MODIFY_REG(RCC->CFGR2, RCC_CFGR2_PREDIV, PLLDiv); +} + +#else + +/** + * @brief Configure PLL used for SYSCLK Domain + * @rmtoll CFGR PLLSRC LL_RCC_PLL_ConfigDomain_SYS\n + * CFGR PLLMUL LL_RCC_PLL_ConfigDomain_SYS\n + * CFGR2 PREDIV LL_RCC_PLL_ConfigDomain_SYS + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSOURCE_HSI_DIV_2 + * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_1 + * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_2 + * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_3 + * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_4 + * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_5 + * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_6 + * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_7 + * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_8 + * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_9 + * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_10 + * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_11 + * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_12 + * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_13 + * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_14 + * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_15 + * @arg @ref LL_RCC_PLLSOURCE_HSE_DIV_16 + * @param PLLMul This parameter can be one of the following values: + * @arg @ref LL_RCC_PLL_MUL_2 + * @arg @ref LL_RCC_PLL_MUL_3 + * @arg @ref LL_RCC_PLL_MUL_4 + * @arg @ref LL_RCC_PLL_MUL_5 + * @arg @ref LL_RCC_PLL_MUL_6 + * @arg @ref LL_RCC_PLL_MUL_7 + * @arg @ref LL_RCC_PLL_MUL_8 + * @arg @ref LL_RCC_PLL_MUL_9 + * @arg @ref LL_RCC_PLL_MUL_10 + * @arg @ref LL_RCC_PLL_MUL_11 + * @arg @ref LL_RCC_PLL_MUL_12 + * @arg @ref LL_RCC_PLL_MUL_13 + * @arg @ref LL_RCC_PLL_MUL_14 + * @arg @ref LL_RCC_PLL_MUL_15 + * @arg @ref LL_RCC_PLL_MUL_16 + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLL_ConfigDomain_SYS(uint32_t Source, uint32_t PLLMul) +{ + MODIFY_REG(RCC->CFGR, RCC_CFGR_PLLSRC | RCC_CFGR_PLLMUL, (Source & RCC_CFGR_PLLSRC) | PLLMul); + MODIFY_REG(RCC->CFGR2, RCC_CFGR2_PREDIV, (Source & RCC_CFGR2_PREDIV)); +} +#endif /* RCC_PLLSRC_PREDIV1_SUPPORT */ + +/** + * @brief Configure PLL clock source + * @rmtoll CFGR PLLSRC LL_RCC_PLL_SetMainSource + * @param PLLSource This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSOURCE_NONE + * @arg @ref LL_RCC_PLLSOURCE_HSI (*) + * @arg @ref LL_RCC_PLLSOURCE_HSI_DIV_2 (*) + * @arg @ref LL_RCC_PLLSOURCE_HSE + * @arg @ref LL_RCC_PLLSOURCE_HSI48 (*) + * + * (*) value not defined in all devices + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLL_SetMainSource(uint32_t PLLSource) +{ + MODIFY_REG(RCC->CFGR, RCC_CFGR_PLLSRC, PLLSource); +} + +/** + * @brief Get the oscillator used as PLL clock source. + * @rmtoll CFGR PLLSRC LL_RCC_PLL_GetMainSource + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_PLLSOURCE_NONE + * @arg @ref LL_RCC_PLLSOURCE_HSI (*) + * @arg @ref LL_RCC_PLLSOURCE_HSI_DIV_2 (*) + * @arg @ref LL_RCC_PLLSOURCE_HSE + * @arg @ref LL_RCC_PLLSOURCE_HSI48 (*) + * + * (*) value not defined in all devices + */ +__STATIC_INLINE uint32_t LL_RCC_PLL_GetMainSource(void) +{ + return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PLLSRC)); +} + +/** + * @brief Get PLL multiplication Factor + * @rmtoll CFGR PLLMUL LL_RCC_PLL_GetMultiplicator + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_PLL_MUL_2 + * @arg @ref LL_RCC_PLL_MUL_3 + * @arg @ref LL_RCC_PLL_MUL_4 + * @arg @ref LL_RCC_PLL_MUL_5 + * @arg @ref LL_RCC_PLL_MUL_6 + * @arg @ref LL_RCC_PLL_MUL_7 + * @arg @ref LL_RCC_PLL_MUL_8 + * @arg @ref LL_RCC_PLL_MUL_9 + * @arg @ref LL_RCC_PLL_MUL_10 + * @arg @ref LL_RCC_PLL_MUL_11 + * @arg @ref LL_RCC_PLL_MUL_12 + * @arg @ref LL_RCC_PLL_MUL_13 + * @arg @ref LL_RCC_PLL_MUL_14 + * @arg @ref LL_RCC_PLL_MUL_15 + * @arg @ref LL_RCC_PLL_MUL_16 + */ +__STATIC_INLINE uint32_t LL_RCC_PLL_GetMultiplicator(void) +{ + return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PLLMUL)); +} + +/** + * @brief Get PREDIV division factor for the main PLL + * @note They can be written only when the PLL is disabled + * @rmtoll CFGR2 PREDIV LL_RCC_PLL_GetPrediv + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_PREDIV_DIV_1 + * @arg @ref LL_RCC_PREDIV_DIV_2 + * @arg @ref LL_RCC_PREDIV_DIV_3 + * @arg @ref LL_RCC_PREDIV_DIV_4 + * @arg @ref LL_RCC_PREDIV_DIV_5 + * @arg @ref LL_RCC_PREDIV_DIV_6 + * @arg @ref LL_RCC_PREDIV_DIV_7 + * @arg @ref LL_RCC_PREDIV_DIV_8 + * @arg @ref LL_RCC_PREDIV_DIV_9 + * @arg @ref LL_RCC_PREDIV_DIV_10 + * @arg @ref LL_RCC_PREDIV_DIV_11 + * @arg @ref LL_RCC_PREDIV_DIV_12 + * @arg @ref LL_RCC_PREDIV_DIV_13 + * @arg @ref LL_RCC_PREDIV_DIV_14 + * @arg @ref LL_RCC_PREDIV_DIV_15 + * @arg @ref LL_RCC_PREDIV_DIV_16 + */ +__STATIC_INLINE uint32_t LL_RCC_PLL_GetPrediv(void) +{ + return (uint32_t)(READ_BIT(RCC->CFGR2, RCC_CFGR2_PREDIV)); +} + +/** + * @} + */ + +/** @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); +} + +/** + * @brief Clear HSI14 ready interrupt flag + * @rmtoll CIR HSI14RDYC LL_RCC_ClearFlag_HSI14RDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_ClearFlag_HSI14RDY(void) +{ + SET_BIT(RCC->CIR, RCC_CIR_HSI14RDYC); +} + +#if defined(RCC_HSI48_SUPPORT) +/** + * @brief Clear HSI48 ready interrupt flag + * @rmtoll CIR HSI48RDYC LL_RCC_ClearFlag_HSI48RDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_ClearFlag_HSI48RDY(void) +{ + SET_BIT(RCC->CIR, RCC_CIR_HSI48RDYC); +} +#endif /* RCC_HSI48_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)); +} + +/** + * @brief Check if HSI14 ready interrupt occurred or not + * @rmtoll CIR HSI14RDYF LL_RCC_IsActiveFlag_HSI14RDY + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSI14RDY(void) +{ + return (READ_BIT(RCC->CIR, RCC_CIR_HSI14RDYF) == (RCC_CIR_HSI14RDYF)); +} + +#if defined(RCC_HSI48_SUPPORT) +/** + * @brief Check if HSI48 ready interrupt occurred or not + * @rmtoll CIR HSI48RDYF LL_RCC_IsActiveFlag_HSI48RDY + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSI48RDY(void) +{ + return (READ_BIT(RCC->CIR, RCC_CIR_HSI48RDYF) == (RCC_CIR_HSI48RDYF)); +} +#endif /* RCC_HSI48_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 is set or not. + * @rmtoll CSR OBLRSTF LL_RCC_IsActiveFlag_OBLRST + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_OBLRST(void) +{ + return (READ_BIT(RCC->CSR, RCC_CSR_OBLRSTF) == (RCC_CSR_OBLRSTF)); +} + +/** + * @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_V18PWRRSTF) +/** + * @brief Check if RCC Reset flag of the 1.8 V domain is set or not. + * @rmtoll CSR V18PWRRSTF LL_RCC_IsActiveFlag_V18PWRRST + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_V18PWRRST(void) +{ + return (READ_BIT(RCC->CSR, RCC_CSR_V18PWRRSTF) == (RCC_CSR_V18PWRRSTF)); +} +#endif /* RCC_CSR_V18PWRRSTF */ + +/** + * @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); +} + +/** + * @brief Enable HSI14 ready interrupt + * @rmtoll CIR HSI14RDYIE LL_RCC_EnableIT_HSI14RDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_EnableIT_HSI14RDY(void) +{ + SET_BIT(RCC->CIR, RCC_CIR_HSI14RDYIE); +} + +#if defined(RCC_HSI48_SUPPORT) +/** + * @brief Enable HSI48 ready interrupt + * @rmtoll CIR HSI48RDYIE LL_RCC_EnableIT_HSI48RDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_EnableIT_HSI48RDY(void) +{ + SET_BIT(RCC->CIR, RCC_CIR_HSI48RDYIE); +} +#endif /* RCC_HSI48_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); +} + +/** + * @brief Disable HSI14 ready interrupt + * @rmtoll CIR HSI14RDYIE LL_RCC_DisableIT_HSI14RDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_DisableIT_HSI14RDY(void) +{ + CLEAR_BIT(RCC->CIR, RCC_CIR_HSI14RDYIE); +} + +#if defined(RCC_HSI48_SUPPORT) +/** + * @brief Disable HSI48 ready interrupt + * @rmtoll CIR HSI48RDYIE LL_RCC_DisableIT_HSI48RDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_DisableIT_HSI48RDY(void) +{ + CLEAR_BIT(RCC->CIR, RCC_CIR_HSI48RDYIE); +} +#endif /* RCC_HSI48_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)); +} + +/** + * @brief Checks if HSI14 ready interrupt source is enabled or disabled. + * @rmtoll CIR HSI14RDYIE LL_RCC_IsEnabledIT_HSI14RDY + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_HSI14RDY(void) +{ + return (READ_BIT(RCC->CIR, RCC_CIR_HSI14RDYIE) == (RCC_CIR_HSI14RDYIE)); +} + +#if defined(RCC_HSI48_SUPPORT) +/** + * @brief Checks if HSI48 ready interrupt source is enabled or disabled. + * @rmtoll CIR HSI48RDYIE LL_RCC_IsEnabledIT_HSI48RDY + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_HSI48RDY(void) +{ + return (READ_BIT(RCC->CIR, RCC_CIR_HSI48RDYIE) == (RCC_CIR_HSI48RDYIE)); +} +#endif /* RCC_HSI48_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); +uint32_t LL_RCC_GetUSARTClockFreq(uint32_t USARTxSource); +uint32_t LL_RCC_GetI2CClockFreq(uint32_t I2CxSource); +#if defined(USB_OTG_FS) || defined(USB) +uint32_t LL_RCC_GetUSBClockFreq(uint32_t USBxSource); +#endif /* USB_OTG_FS || USB */ +#if defined(CEC) +uint32_t LL_RCC_GetCECClockFreq(uint32_t CECxSource); +#endif /* CEC */ +/** + * @} + */ +#endif /* USE_FULL_LL_DRIVER */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* RCC */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F0xx_LL_RCC_H */ + diff --git a/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_system.h b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_system.h new file mode 100644 index 0000000..83c5f8e --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_system.h @@ -0,0 +1,1851 @@ +/** + ****************************************************************************** + * @file stm32f0xx_ll_system.h + * @author MCD Application Team + * @brief Header file of SYSTEM LL module. + @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 + ****************************************************************************** + * @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 __STM32F0xx_LL_SYSTEM_H +#define __STM32F0xx_LL_SYSTEM_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f0xx.h" + +/** @addtogroup STM32F0xx_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)0x00000000U /*!< Main Flash memory mapped at 0x00000000 */ +#define LL_SYSCFG_REMAP_SYSTEMFLASH SYSCFG_CFGR1_MEM_MODE_0 /*!< System Flash memory mapped at 0x00000000 */ +#define LL_SYSCFG_REMAP_SRAM (SYSCFG_CFGR1_MEM_MODE_1 | SYSCFG_CFGR1_MEM_MODE_0) /*!< Embedded SRAM mapped at 0x00000000 */ +/** + * @} + */ + +#if defined(SYSCFG_CFGR1_IR_MOD) +/** @defgroup SYSTEM_LL_EC_IR_MOD SYSCFG IR Modulation + * @{ + */ +#define LL_SYSCFG_IR_MOD_TIM16 (SYSCFG_CFGR1_IR_MOD_0 & SYSCFG_CFGR1_IR_MOD_1) /*!< Timer16 is selected as IR Modulation envelope source */ +#define LL_SYSCFG_IR_MOD_USART1 (SYSCFG_CFGR1_IR_MOD_0) /*!< USART1 is selected as IR Modulation envelope source */ +#define LL_SYSCFG_IR_MOD_USART4 (SYSCFG_CFGR1_IR_MOD_1) /*!< USART4 is selected as IR Modulation envelope source */ +/** + * @} + */ + +#endif /* SYSCFG_CFGR1_IR_MOD */ + +#if defined(SYSCFG_CFGR1_USART1TX_DMA_RMP) || defined(SYSCFG_CFGR1_USART1RX_DMA_RMP) || defined(SYSCFG_CFGR1_USART2_DMA_RMP) || defined(SYSCFG_CFGR1_USART3_DMA_RMP) +/** @defgroup SYSTEM_LL_EC_USART1TX_RMP SYSCFG USART DMA Remap + * @{ + */ +#if defined (SYSCFG_CFGR1_USART1TX_DMA_RMP) +#define LL_SYSCFG_USART1TX_RMP_DMA1CH2 ((SYSCFG_CFGR1_USART1TX_DMA_RMP >> 8U) | (uint32_t)0x00000000U) /*!< USART1_TX DMA request mapped on DMA channel 2U */ +#define LL_SYSCFG_USART1TX_RMP_DMA1CH4 ((SYSCFG_CFGR1_USART1TX_DMA_RMP >> 8U) | SYSCFG_CFGR1_USART1TX_DMA_RMP) /*!< USART1_TX DMA request mapped on DMA channel 4U */ +#endif /*SYSCFG_CFGR1_USART1TX_DMA_RMP*/ +#if defined (SYSCFG_CFGR1_USART1RX_DMA_RMP) +#define LL_SYSCFG_USART1RX_RMP_DMA1CH3 ((SYSCFG_CFGR1_USART1RX_DMA_RMP >> 8U) | (uint32_t)0x00000000U) /*!< USART1_RX DMA request mapped on DMA channel 3U */ +#define LL_SYSCFG_USART1RX_RMP_DMA1CH5 ((SYSCFG_CFGR1_USART1RX_DMA_RMP >> 8U) | SYSCFG_CFGR1_USART1RX_DMA_RMP) /*!< USART1_RX DMA request mapped on DMA channel 5 */ +#endif /*SYSCFG_CFGR1_USART1RX_DMA_RMP*/ +#if defined (SYSCFG_CFGR1_USART2_DMA_RMP) +#define LL_SYSCFG_USART2_RMP_DMA1CH54 ((SYSCFG_CFGR1_USART2_DMA_RMP >> 8U) | (uint32_t)0x00000000U) /*!< USART2_RX and USART2_TX DMA requests mapped on DMA channel 5 and 4U respectively */ +#define LL_SYSCFG_USART2_RMP_DMA1CH67 ((SYSCFG_CFGR1_USART2_DMA_RMP >> 8U) | SYSCFG_CFGR1_USART2_DMA_RMP) /*!< USART2_RX and USART2_TX DMA requests mapped on DMA channel 6 and 7 respectively */ +#endif /*SYSCFG_CFGR1_USART2_DMA_RMP*/ +#if defined (SYSCFG_CFGR1_USART3_DMA_RMP) +#define LL_SYSCFG_USART3_RMP_DMA1CH67 ((SYSCFG_CFGR1_USART3_DMA_RMP >> 8U) | (uint32_t)0x00000000U) /*!< USART3_RX and USART3_TX DMA requests mapped on DMA channel 6 and 7 respectively */ +#define LL_SYSCFG_USART3_RMP_DMA1CH32 ((SYSCFG_CFGR1_USART3_DMA_RMP >> 8U) | SYSCFG_CFGR1_USART3_DMA_RMP) /*!< USART3_RX and USART3_TX DMA requests mapped on DMA channel 3U and 2U respectively */ +#endif /* SYSCFG_CFGR1_USART3_DMA_RMP */ +/** + * @} + */ +#endif /* SYSCFG_CFGR1_USART1TX_DMA_RMP || SYSCFG_CFGR1_USART1RX_DMA_RMP || SYSCFG_CFGR1_USART2_DMA_RMP || SYSCFG_CFGR1_USART3_DMA_RMP */ + +#if defined (SYSCFG_CFGR1_SPI2_DMA_RMP) +/** @defgroup SYSTEM_LL_EC_SPI2_RMP_DMA1 SYSCFG SPI2 DMA Remap + * @{ + */ +#define LL_SYSCFG_SPI2_RMP_DMA1_CH45 (uint32_t)0x00000000U /*!< SPI2_RX and SPI2_TX DMA requests mapped on DMA channel 4U and 5 respectively */ +#define LL_SYSCFG_SPI2_RMP_DMA1_CH67 SYSCFG_CFGR1_SPI2_DMA_RMP /*!< SPI2_RX and SPI2_TX DMA requests mapped on DMA channel 6 and 7 respectively */ +/** + * @} + */ + +#endif /*SYSCFG_CFGR1_SPI2_DMA_RMP*/ + +#if defined (SYSCFG_CFGR1_I2C1_DMA_RMP) +/** @defgroup SYSTEM_LL_EC_I2C1_RMP_DMA1 SYSCFG I2C1 DMA Remap + * @{ + */ +#define LL_SYSCFG_I2C1_RMP_DMA1_CH32 (uint32_t)0x00000000U /*!< I2C1_RX and I2C1_TX DMA requests mapped on DMA channel 3U and 2U respectively */ +#define LL_SYSCFG_I2C1_RMP_DMA1_CH76 SYSCFG_CFGR1_I2C1_DMA_RMP /*!< I2C1_RX and I2C1_TX DMA requests mapped on DMA channel 7 and 6 respectively */ +/** + * @} + */ + +#endif /*SYSCFG_CFGR1_I2C1_DMA_RMP*/ + +#if defined(SYSCFG_CFGR1_ADC_DMA_RMP) +/** @defgroup SYSTEM_LL_EC_ADC1_RMP_DMA1 SYSCFG ADC1 DMA Remap + * @{ + */ +#define LL_SYSCFG_ADC1_RMP_DMA1_CH1 (uint32_t)0x00000000U /*!< ADC DMA request mapped on DMA channel 1U */ +#define LL_SYSCFG_ADC1_RMP_DMA1_CH2 SYSCFG_CFGR1_ADC_DMA_RMP /*!< ADC DMA request mapped on DMA channel 2U */ +/** + * @} + */ + +#endif /* SYSCFG_CFGR1_ADC_DMA_RMP */ + +#if defined(SYSCFG_CFGR1_TIM16_DMA_RMP) || defined(SYSCFG_CFGR1_TIM17_DMA_RMP) || defined(SYSCFG_CFGR1_TIM1_DMA_RMP) || defined(SYSCFG_CFGR1_TIM2_DMA_RMP) || defined(SYSCFG_CFGR1_TIM3_DMA_RMP) +/** @defgroup SYSTEM_LL_EC_TIM16_RMP_DMA1 SYSCFG TIM DMA Remap + * @{ + */ +#if defined(SYSCFG_CFGR1_TIM16_DMA_RMP) +#if defined (SYSCFG_CFGR1_TIM16_DMA_RMP2) +#define LL_SYSCFG_TIM16_RMP_DMA1_CH3 (((SYSCFG_CFGR1_TIM16_DMA_RMP | SYSCFG_CFGR1_TIM16_DMA_RMP2) >> 8U) | (uint32_t)0x00000000U) /*!< TIM16_CH1 and TIM16_UP DMA requests mapped on DMA channel 3 */ +#define LL_SYSCFG_TIM16_RMP_DMA1_CH4 (((SYSCFG_CFGR1_TIM16_DMA_RMP | SYSCFG_CFGR1_TIM16_DMA_RMP2) >> 8U) | SYSCFG_CFGR1_TIM16_DMA_RMP) /*!< TIM16_CH1 and TIM16_UP DMA requests mapped on DMA channel 4 */ +#define LL_SYSCFG_TIM16_RMP_DMA1_CH6 ((SYSCFG_CFGR1_TIM16_DMA_RMP2 >> 8U) | SYSCFG_CFGR1_TIM16_DMA_RMP2) /*!< TIM16_CH1 and TIM16_UP DMA requests mapped on DMA channel 6 */ +#else +#define LL_SYSCFG_TIM16_RMP_DMA1_CH3 ((SYSCFG_CFGR1_TIM16_DMA_RMP >> 8U) | (uint32_t)0x00000000U) /*!< TIM16_CH1 and TIM16_UP DMA requests mapped on DMA channel 3 */ +#define LL_SYSCFG_TIM16_RMP_DMA1_CH4 ((SYSCFG_CFGR1_TIM16_DMA_RMP >> 8U) | SYSCFG_CFGR1_TIM16_DMA_RMP) /*!< TIM16_CH1 and TIM16_UP DMA requests mapped on DMA channel 4 */ +#endif /* SYSCFG_CFGR1_TIM16_DMA_RMP2 */ +#endif /* SYSCFG_CFGR1_TIM16_DMA_RMP */ +#if defined(SYSCFG_CFGR1_TIM17_DMA_RMP) +#if defined (SYSCFG_CFGR1_TIM17_DMA_RMP2) +#define LL_SYSCFG_TIM17_RMP_DMA1_CH1 (((SYSCFG_CFGR1_TIM17_DMA_RMP | SYSCFG_CFGR1_TIM17_DMA_RMP2) >> 8U) | (uint32_t)0x00000000U) /*!< TIM17_CH1 and TIM17_UP DMA requests mapped on DMA channel 1 */ +#define LL_SYSCFG_TIM17_RMP_DMA1_CH2 (((SYSCFG_CFGR1_TIM17_DMA_RMP | SYSCFG_CFGR1_TIM17_DMA_RMP2) >> 8U) | SYSCFG_CFGR1_TIM17_DMA_RMP) /*!< TIM17_CH1 and TIM17_UP DMA requests mapped on DMA channel 2 */ +#define LL_SYSCFG_TIM17_RMP_DMA1_CH7 ((SYSCFG_CFGR1_TIM17_DMA_RMP2 >> 8U) | SYSCFG_CFGR1_TIM17_DMA_RMP2) /*!< TIM17_CH1 and TIM17_UP DMA requests mapped on DMA channel 7 */ +#else +#define LL_SYSCFG_TIM17_RMP_DMA1_CH1 ((SYSCFG_CFGR1_TIM17_DMA_RMP >> 8U) | (uint32_t)0x00000000U) /*!< TIM17_CH1 and TIM17_UP DMA requests mapped on DMA channel 1 */ +#define LL_SYSCFG_TIM17_RMP_DMA1_CH2 ((SYSCFG_CFGR1_TIM17_DMA_RMP >> 8U) | SYSCFG_CFGR1_TIM17_DMA_RMP) /*!< TIM17_CH1 and TIM17_UP DMA requests mapped on DMA channel 2 */ +#endif /* SYSCFG_CFGR1_TIM17_DMA_RMP2 */ +#endif /* SYSCFG_CFGR1_TIM17_DMA_RMP */ +#if defined (SYSCFG_CFGR1_TIM1_DMA_RMP) +#define LL_SYSCFG_TIM1_RMP_DMA1_CH234 ((SYSCFG_CFGR1_TIM1_DMA_RMP >> 8U) | (uint32_t)0x00000000U) /*!< TIM1_CH1, TIM1_CH2 and TIM1_CH3 DMA requests mapped on DMAchannel 2, 3 and 4 respectively */ +#define LL_SYSCFG_TIM1_RMP_DMA1_CH6 ((SYSCFG_CFGR1_TIM1_DMA_RMP >> 8U) | SYSCFG_CFGR1_TIM1_DMA_RMP) /*!< TIM1_CH1, TIM1_CH2 and TIM1_CH3 DMA requests mapped on DMA channel 6 */ +#endif /*SYSCFG_CFGR1_TIM1_DMA_RMP*/ +#if defined (SYSCFG_CFGR1_TIM2_DMA_RMP) +#define LL_SYSCFG_TIM2_RMP_DMA1_CH34 ((SYSCFG_CFGR1_TIM2_DMA_RMP >> 8U) | (uint32_t)0x00000000U) /*!< TIM2_CH2 and TIM2_CH4 DMA requests mapped on DMA channel 3 and 4 respectively */ +#define LL_SYSCFG_TIM2_RMP_DMA1_CH7 ((SYSCFG_CFGR1_TIM2_DMA_RMP >> 8U) | SYSCFG_CFGR1_TIM2_DMA_RMP) /*!< TIM2_CH2 and TIM2_CH4 DMA requests mapped on DMA channel 7 */ +#endif /*SYSCFG_CFGR1_TIM2_DMA_RMP*/ +#if defined (SYSCFG_CFGR1_TIM3_DMA_RMP) +#define LL_SYSCFG_TIM3_RMP_DMA1_CH4 ((SYSCFG_CFGR1_TIM3_DMA_RMP >> 8U) | (uint32_t)0x00000000U) /*!< TIM3_CH1 and TIM3_TRIG DMA requests mapped on DMA channel 4 */ +#define LL_SYSCFG_TIM3_RMP_DMA1_CH6 ((SYSCFG_CFGR1_TIM3_DMA_RMP >> 8U) | SYSCFG_CFGR1_TIM3_DMA_RMP) /*!< TIM3_CH1 and TIM3_TRIG DMA requests mapped on DMA channel 6 */ +#endif /*SYSCFG_CFGR1_TIM3_DMA_RMP*/ +/** + * @} + */ + +#endif /* SYSCFG_CFGR1_TIM16_DMA_RMP || SYSCFG_CFGR1_TIM17_DMA_RMP || SYSCFG_CFGR1_TIM1_DMA_RMP || SYSCFG_CFGR1_TIM2_DMA_RMP || SYSCFG_CFGR1_TIM3_DMA_RMP */ + +/** @defgroup SYSTEM_LL_EC_I2C_FASTMODEPLUS SYSCFG I2C FASTMODEPLUS + * @{ + */ +#define LL_SYSCFG_I2C_FASTMODEPLUS_PB6 SYSCFG_CFGR1_I2C_FMP_PB6 /*!< I2C PB6 Fast mode plus */ +#define LL_SYSCFG_I2C_FASTMODEPLUS_PB7 SYSCFG_CFGR1_I2C_FMP_PB7 /*!< I2C PB7 Fast mode plus */ +#define LL_SYSCFG_I2C_FASTMODEPLUS_PB8 SYSCFG_CFGR1_I2C_FMP_PB8 /*!< I2C PB8 Fast mode plus */ +#define LL_SYSCFG_I2C_FASTMODEPLUS_PB9 SYSCFG_CFGR1_I2C_FMP_PB9 /*!< I2C PB9 Fast mode plus */ +#if defined(SYSCFG_CFGR1_I2C_FMP_I2C1) +#define LL_SYSCFG_I2C_FASTMODEPLUS_I2C1 SYSCFG_CFGR1_I2C_FMP_I2C1 /*!< Enable Fast Mode Plus on PB10, PB11, PF6 and PF7 */ +#endif /*SYSCFG_CFGR1_I2C_FMP_I2C1*/ +#if defined(SYSCFG_CFGR1_I2C_FMP_I2C2) +#define LL_SYSCFG_I2C_FASTMODEPLUS_I2C2 SYSCFG_CFGR1_I2C_FMP_I2C2 /*!< Enable I2C2 Fast mode plus */ +#endif /*SYSCFG_CFGR1_I2C_FMP_I2C2*/ +#if defined(SYSCFG_CFGR1_I2C_FMP_PA9) +#define LL_SYSCFG_I2C_FASTMODEPLUS_PA9 SYSCFG_CFGR1_I2C_FMP_PA9 /*!< Enable Fast Mode Plus on PA9 */ +#endif /*SYSCFG_CFGR1_I2C_FMP_PA9*/ +#if defined(SYSCFG_CFGR1_I2C_FMP_PA10) +#define LL_SYSCFG_I2C_FASTMODEPLUS_PA10 SYSCFG_CFGR1_I2C_FMP_PA10 /*!< Enable Fast Mode Plus on PA10 */ +#endif /*SYSCFG_CFGR1_I2C_FMP_PA10*/ +/** + * @} + */ + +/** @defgroup SYSTEM_LL_EC_EXTI_PORT SYSCFG EXTI PORT + * @{ + */ +#define LL_SYSCFG_EXTI_PORTA (uint32_t)0U /*!< EXTI PORT A */ +#define LL_SYSCFG_EXTI_PORTB (uint32_t)1U /*!< EXTI PORT B */ +#define LL_SYSCFG_EXTI_PORTC (uint32_t)2U /*!< EXTI PORT C */ +#if defined(GPIOD_BASE) +#define LL_SYSCFG_EXTI_PORTD (uint32_t)3U /*!< EXTI PORT D */ +#endif /*GPIOD_BASE*/ +#if defined(GPIOE_BASE) +#define LL_SYSCFG_EXTI_PORTE (uint32_t)4U /*!< EXTI PORT E */ +#endif /*GPIOE_BASE*/ +#define LL_SYSCFG_EXTI_PORTF (uint32_t)5U /*!< EXTI PORT F */ +/** + * @} + */ + +/** @defgroup SYSTEM_LL_EC_EXTI_LINE SYSCFG EXTI LINE + * @{ + */ +#define LL_SYSCFG_EXTI_LINE0 (uint32_t)(0U << 16U | 0U) /*!< EXTI_POSITION_0 | EXTICR[0] */ +#define LL_SYSCFG_EXTI_LINE1 (uint32_t)(4U << 16U | 0U) /*!< EXTI_POSITION_4 | EXTICR[0] */ +#define LL_SYSCFG_EXTI_LINE2 (uint32_t)(8U << 16U | 0U) /*!< EXTI_POSITION_8 | EXTICR[0] */ +#define LL_SYSCFG_EXTI_LINE3 (uint32_t)(12U << 16U | 0U) /*!< EXTI_POSITION_12 | EXTICR[0] */ +#define LL_SYSCFG_EXTI_LINE4 (uint32_t)(0U << 16U | 1U) /*!< EXTI_POSITION_0 | EXTICR[1] */ +#define LL_SYSCFG_EXTI_LINE5 (uint32_t)(4U << 16U | 1U) /*!< EXTI_POSITION_4 | EXTICR[1] */ +#define LL_SYSCFG_EXTI_LINE6 (uint32_t)(8U << 16U | 1U) /*!< EXTI_POSITION_8 | EXTICR[1] */ +#define LL_SYSCFG_EXTI_LINE7 (uint32_t)(12U << 16U | 1U) /*!< EXTI_POSITION_12 | EXTICR[1] */ +#define LL_SYSCFG_EXTI_LINE8 (uint32_t)(0U << 16U | 2U) /*!< EXTI_POSITION_0 | EXTICR[2] */ +#define LL_SYSCFG_EXTI_LINE9 (uint32_t)(4U << 16U | 2U) /*!< EXTI_POSITION_4 | EXTICR[2] */ +#define LL_SYSCFG_EXTI_LINE10 (uint32_t)(8U << 16U | 2U) /*!< EXTI_POSITION_8 | EXTICR[2] */ +#define LL_SYSCFG_EXTI_LINE11 (uint32_t)(12U << 16U | 2U) /*!< EXTI_POSITION_12 | EXTICR[2] */ +#define LL_SYSCFG_EXTI_LINE12 (uint32_t)(0U << 16U | 3U) /*!< EXTI_POSITION_0 | EXTICR[3] */ +#define LL_SYSCFG_EXTI_LINE13 (uint32_t)(4U << 16U | 3U) /*!< EXTI_POSITION_4 | EXTICR[3] */ +#define LL_SYSCFG_EXTI_LINE14 (uint32_t)(8U << 16U | 3U) /*!< EXTI_POSITION_8 | EXTICR[3] */ +#define LL_SYSCFG_EXTI_LINE15 (uint32_t)(12U << 16U | 3U) /*!< EXTI_POSITION_12 | EXTICR[3] */ +/** + * @} + */ + +/** @defgroup SYSTEM_LL_EC_TIMBREAK SYSCFG TIMER BREAK + * @{ + */ +#if defined(SYSCFG_CFGR2_PVD_LOCK) +#define LL_SYSCFG_TIMBREAK_PVD SYSCFG_CFGR2_PVD_LOCK /*!< Enables and locks the PVD connection + with TIM1/15/16U/17 Break Input and also + the PVDE and PLS bits of the Power Control Interface */ +#endif /*SYSCFG_CFGR2_PVD_LOCK*/ +#define LL_SYSCFG_TIMBREAK_SRAM_PARITY SYSCFG_CFGR2_SRAM_PARITY_LOCK /*!< Enables and locks the SRAM_PARITY error signal + with Break Input of TIM1/15/16/17 */ +#define LL_SYSCFG_TIMBREAK_LOCKUP SYSCFG_CFGR2_LOCKUP_LOCK /*!< Enables and locks the LOCKUP (Hardfault) output of + CortexM0 with Break Input of TIM1/15/16/17 */ +/** + * @} + */ + +/** @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*/ +#define LL_DBGMCU_APB1_GRP1_TIM3_STOP DBGMCU_APB1_FZ_DBG_TIM3_STOP /*!< TIM3 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*/ +#define LL_DBGMCU_APB1_GRP1_TIM14_STOP DBGMCU_APB1_FZ_DBG_TIM14_STOP /*!< TIM14 counter stopped when core is halted */ +#define LL_DBGMCU_APB1_GRP1_RTC_STOP DBGMCU_APB1_FZ_DBG_RTC_STOP /*!< RTC Calendar frozen 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 */ +#if defined(DBGMCU_APB1_FZ_DBG_CAN_STOP) +#define LL_DBGMCU_APB1_GRP1_CAN_STOP DBGMCU_APB1_FZ_DBG_CAN_STOP /*!< CAN debug stopped when Core is halted */ +#endif /*DBGMCU_APB1_FZ_DBG_CAN_STOP*/ +/** + * @} + */ + +/** @defgroup SYSTEM_LL_EC_APB1 GRP2_STOP_IP DBGMCU APB1 GRP2 STOP IP + * @{ + */ +#define LL_DBGMCU_APB1_GRP2_TIM1_STOP DBGMCU_APB2_FZ_DBG_TIM1_STOP /*!< TIM1 counter stopped when core is halted */ +#if defined(DBGMCU_APB2_FZ_DBG_TIM15_STOP) +#define LL_DBGMCU_APB1_GRP2_TIM15_STOP DBGMCU_APB2_FZ_DBG_TIM15_STOP /*!< TIM15 counter stopped when core is halted */ +#endif /*DBGMCU_APB2_FZ_DBG_TIM15_STOP*/ +#define LL_DBGMCU_APB1_GRP2_TIM16_STOP DBGMCU_APB2_FZ_DBG_TIM16_STOP /*!< TIM16 counter stopped when core is halted */ +#define LL_DBGMCU_APB1_GRP2_TIM17_STOP DBGMCU_APB2_FZ_DBG_TIM17_STOP /*!< TIM17 counter stopped when core is halted */ +/** + * @} + */ + +/** @defgroup SYSTEM_LL_EC_LATENCY FLASH LATENCY + * @{ + */ +#define LL_FLASH_LATENCY_0 0x00000000U /*!< FLASH Zero Latency cycle */ +#define LL_FLASH_LATENCY_1 FLASH_ACR_LATENCY /*!< FLASH One Latency cycle */ +/** + * @} + */ + +/** + * @} + */ + +/* 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_CFGR1 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 + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_SetRemapMemory(uint32_t Memory) +{ + MODIFY_REG(SYSCFG->CFGR1, SYSCFG_CFGR1_MEM_MODE, Memory); +} + +/** + * @brief Get memory mapping at address 0x00000000 + * @rmtoll SYSCFG_CFGR1 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 + */ +__STATIC_INLINE uint32_t LL_SYSCFG_GetRemapMemory(void) +{ + return (uint32_t)(READ_BIT(SYSCFG->CFGR1, SYSCFG_CFGR1_MEM_MODE)); +} + +#if defined(SYSCFG_CFGR1_IR_MOD) +/** + * @brief Set IR Modulation Envelope signal source. + * @rmtoll SYSCFG_CFGR1 IR_MOD LL_SYSCFG_SetIRModEnvelopeSignal + * @param Source This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_IR_MOD_TIM16 + * @arg @ref LL_SYSCFG_IR_MOD_USART1 + * @arg @ref LL_SYSCFG_IR_MOD_USART4 + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_SetIRModEnvelopeSignal(uint32_t Source) +{ + MODIFY_REG(SYSCFG->CFGR1, SYSCFG_CFGR1_IR_MOD, Source); +} + +/** + * @brief Get IR Modulation Envelope signal source. + * @rmtoll SYSCFG_CFGR1 IR_MOD LL_SYSCFG_GetIRModEnvelopeSignal + * @retval Returned value can be one of the following values: + * @arg @ref LL_SYSCFG_IR_MOD_TIM16 + * @arg @ref LL_SYSCFG_IR_MOD_USART1 + * @arg @ref LL_SYSCFG_IR_MOD_USART4 + */ +__STATIC_INLINE uint32_t LL_SYSCFG_GetIRModEnvelopeSignal(void) +{ + return (uint32_t)(READ_BIT(SYSCFG->CFGR1, SYSCFG_CFGR1_IR_MOD)); +} +#endif /* SYSCFG_CFGR1_IR_MOD */ + +#if defined(SYSCFG_CFGR1_USART1TX_DMA_RMP) || defined(SYSCFG_CFGR1_USART1RX_DMA_RMP) || defined(SYSCFG_CFGR1_USART2_DMA_RMP) || defined(SYSCFG_CFGR1_USART3_DMA_RMP) +/** + * @brief Set DMA request remapping bits for USART + * @rmtoll SYSCFG_CFGR1 USART1TX_DMA_RMP LL_SYSCFG_SetRemapDMA_USART\n + * SYSCFG_CFGR1 USART1RX_DMA_RMP LL_SYSCFG_SetRemapDMA_USART\n + * SYSCFG_CFGR1 USART2_DMA_RMP LL_SYSCFG_SetRemapDMA_USART\n + * SYSCFG_CFGR1 USART3_DMA_RMP LL_SYSCFG_SetRemapDMA_USART + * @param Remap This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_USART1TX_RMP_DMA1CH2 (*) + * @arg @ref LL_SYSCFG_USART1TX_RMP_DMA1CH4 (*) + * @arg @ref LL_SYSCFG_USART1RX_RMP_DMA1CH3 (*) + * @arg @ref LL_SYSCFG_USART1RX_RMP_DMA1CH5 (*) + * @arg @ref LL_SYSCFG_USART2_RMP_DMA1CH54 (*) + * @arg @ref LL_SYSCFG_USART2_RMP_DMA1CH67 (*) + * @arg @ref LL_SYSCFG_USART3_RMP_DMA1CH67 (*) + * @arg @ref LL_SYSCFG_USART3_RMP_DMA1CH32 (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_SetRemapDMA_USART(uint32_t Remap) +{ + MODIFY_REG(SYSCFG->CFGR1, (Remap & 0x00FF00FFU) << 8U, (Remap & 0xFF00FF00U)); +} +#endif /* SYSCFG_CFGR1_USART1TX_DMA_RMP || SYSCFG_CFGR1_USART1RX_DMA_RMP || SYSCFG_CFGR1_USART2_DMA_RMP || SYSCFG_CFGR1_USART3_DMA_RMP */ + +#if defined(SYSCFG_CFGR1_SPI2_DMA_RMP) +/** + * @brief Set DMA request remapping bits for SPI + * @rmtoll SYSCFG_CFGR1 SPI2_DMA_RMP LL_SYSCFG_SetRemapDMA_SPI + * @param Remap This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_SPI2_RMP_DMA1_CH45 + * @arg @ref LL_SYSCFG_SPI2_RMP_DMA1_CH67 + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_SetRemapDMA_SPI(uint32_t Remap) +{ + MODIFY_REG(SYSCFG->CFGR1, SYSCFG_CFGR1_SPI2_DMA_RMP, Remap); +} +#endif /* SYSCFG_CFGR1_SPI2_DMA_RMP */ + +#if defined(SYSCFG_CFGR1_I2C1_DMA_RMP) +/** + * @brief Set DMA request remapping bits for I2C + * @rmtoll SYSCFG_CFGR1 I2C1_DMA_RMP LL_SYSCFG_SetRemapDMA_I2C + * @param Remap This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_I2C1_RMP_DMA1_CH32 + * @arg @ref LL_SYSCFG_I2C1_RMP_DMA1_CH76 + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_SetRemapDMA_I2C(uint32_t Remap) +{ + MODIFY_REG(SYSCFG->CFGR1, SYSCFG_CFGR1_I2C1_DMA_RMP, Remap); +} +#endif /* SYSCFG_CFGR1_I2C1_DMA_RMP */ + +#if defined(SYSCFG_CFGR1_ADC_DMA_RMP) +/** + * @brief Set DMA request remapping bits for ADC + * @rmtoll SYSCFG_CFGR1 ADC_DMA_RMP LL_SYSCFG_SetRemapDMA_ADC + * @param Remap This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_ADC1_RMP_DMA1_CH1 + * @arg @ref LL_SYSCFG_ADC1_RMP_DMA1_CH2 + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_SetRemapDMA_ADC(uint32_t Remap) +{ + MODIFY_REG(SYSCFG->CFGR1, SYSCFG_CFGR1_ADC_DMA_RMP, Remap); +} +#endif /* SYSCFG_CFGR1_ADC_DMA_RMP */ + +#if defined(SYSCFG_CFGR1_TIM16_DMA_RMP) || defined(SYSCFG_CFGR1_TIM17_DMA_RMP) || defined(SYSCFG_CFGR1_TIM1_DMA_RMP) || defined(SYSCFG_CFGR1_TIM2_DMA_RMP) || defined(SYSCFG_CFGR1_TIM3_DMA_RMP) +/** + * @brief Set DMA request remapping bits for TIM + * @rmtoll SYSCFG_CFGR1 TIM16_DMA_RMP LL_SYSCFG_SetRemapDMA_TIM\n + * SYSCFG_CFGR1 TIM17_DMA_RMP LL_SYSCFG_SetRemapDMA_TIM\n + * SYSCFG_CFGR1 TIM16_DMA_RMP2 LL_SYSCFG_SetRemapDMA_TIM\n + * SYSCFG_CFGR1 TIM17_DMA_RMP2 LL_SYSCFG_SetRemapDMA_TIM\n + * SYSCFG_CFGR1 TIM1_DMA_RMP LL_SYSCFG_SetRemapDMA_TIM\n + * SYSCFG_CFGR1 TIM2_DMA_RMP LL_SYSCFG_SetRemapDMA_TIM\n + * SYSCFG_CFGR1 TIM3_DMA_RMP LL_SYSCFG_SetRemapDMA_TIM + * @param Remap This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_TIM16_RMP_DMA1_CH3 (*) + * @arg @ref LL_SYSCFG_TIM16_RMP_DMA1_CH4 (*) + * @arg @ref LL_SYSCFG_TIM16_RMP_DMA1_CH6 (*) + * @arg @ref LL_SYSCFG_TIM17_RMP_DMA1_CH1 (*) + * @arg @ref LL_SYSCFG_TIM17_RMP_DMA1_CH2 (*) + * @arg @ref LL_SYSCFG_TIM17_RMP_DMA1_CH7 (*) + * @arg @ref LL_SYSCFG_TIM1_RMP_DMA1_CH234 (*) + * @arg @ref LL_SYSCFG_TIM1_RMP_DMA1_CH6 (*) + * @arg @ref LL_SYSCFG_TIM2_RMP_DMA1_CH34 (*) + * @arg @ref LL_SYSCFG_TIM2_RMP_DMA1_CH7 (*) + * @arg @ref LL_SYSCFG_TIM3_RMP_DMA1_CH4 (*) + * @arg @ref LL_SYSCFG_TIM3_RMP_DMA1_CH6 (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_SetRemapDMA_TIM(uint32_t Remap) +{ + MODIFY_REG(SYSCFG->CFGR1, (Remap & 0x00FF00FFU) << 8U, (Remap & 0xFF00FF00U)); +} +#endif /* SYSCFG_CFGR1_TIM16_DMA_RMP || SYSCFG_CFGR1_TIM17_DMA_RMP || SYSCFG_CFGR1_TIM1_DMA_RMP || SYSCFG_CFGR1_TIM2_DMA_RMP || SYSCFG_CFGR1_TIM3_DMA_RMP */ + +#if defined(SYSCFG_CFGR1_PA11_PA12_RMP) +/** + * @brief Enable PIN pair PA11/12 mapped instead of PA9/10 (control the mapping of either + * PA9/10 or PA11/12 pin pair on small pin-count packages) + * @rmtoll SYSCFG_CFGR1 PA11_PA12_RMP LL_SYSCFG_EnablePinRemap + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_EnablePinRemap(void) +{ + SET_BIT(SYSCFG->CFGR1, SYSCFG_CFGR1_PA11_PA12_RMP); +} + +/** + * @brief Disable PIN pair PA11/12 mapped instead of PA9/10 (control the mapping of either + * PA9/10 or PA11/12 pin pair on small pin-count packages) + * @rmtoll SYSCFG_CFGR1 PA11_PA12_RMP LL_SYSCFG_DisablePinRemap + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DisablePinRemap(void) +{ + CLEAR_BIT(SYSCFG->CFGR1, SYSCFG_CFGR1_PA11_PA12_RMP); +} +#endif /* SYSCFG_CFGR1_PA11_PA12_RMP */ + +/** + * @brief Enable the I2C fast mode plus driving capability. + * @rmtoll SYSCFG_CFGR1 I2C_FMP_PB6 LL_SYSCFG_EnableFastModePlus\n + * SYSCFG_CFGR1 I2C_FMP_PB7 LL_SYSCFG_EnableFastModePlus\n + * SYSCFG_CFGR1 I2C_FMP_PB8 LL_SYSCFG_EnableFastModePlus\n + * SYSCFG_CFGR1 I2C_FMP_PB9 LL_SYSCFG_EnableFastModePlus\n + * SYSCFG_CFGR1 I2C_FMP_I2C1 LL_SYSCFG_EnableFastModePlus\n + * SYSCFG_CFGR1 I2C_FMP_I2C2 LL_SYSCFG_EnableFastModePlus\n + * SYSCFG_CFGR1 I2C_FMP_PA9 LL_SYSCFG_EnableFastModePlus\n + * SYSCFG_CFGR1 I2C_FMP_PA10 LL_SYSCFG_EnableFastModePlus + * @param ConfigFastModePlus This parameter can be a combination of the following values: + * @arg @ref LL_SYSCFG_I2C_FASTMODEPLUS_PB6 + * @arg @ref LL_SYSCFG_I2C_FASTMODEPLUS_PB7 + * @arg @ref LL_SYSCFG_I2C_FASTMODEPLUS_PB8 + * @arg @ref LL_SYSCFG_I2C_FASTMODEPLUS_PB9 + * @arg @ref LL_SYSCFG_I2C_FASTMODEPLUS_I2C1 (*) + * @arg @ref LL_SYSCFG_I2C_FASTMODEPLUS_I2C2 (*) + * @arg @ref LL_SYSCFG_I2C_FASTMODEPLUS_PA9 (*) + * @arg @ref LL_SYSCFG_I2C_FASTMODEPLUS_PA10 (*) + * + * (*) value not defined in all devices + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_EnableFastModePlus(uint32_t ConfigFastModePlus) +{ + SET_BIT(SYSCFG->CFGR1, ConfigFastModePlus); +} + +/** + * @brief Disable the I2C fast mode plus driving capability. + * @rmtoll SYSCFG_CFGR1 I2C_FMP_PB6 LL_SYSCFG_DisableFastModePlus\n + * SYSCFG_CFGR1 I2C_FMP_PB7 LL_SYSCFG_DisableFastModePlus\n + * SYSCFG_CFGR1 I2C_FMP_PB8 LL_SYSCFG_DisableFastModePlus\n + * SYSCFG_CFGR1 I2C_FMP_PB9 LL_SYSCFG_DisableFastModePlus\n + * SYSCFG_CFGR1 I2C_FMP_I2C1 LL_SYSCFG_DisableFastModePlus\n + * SYSCFG_CFGR1 I2C_FMP_I2C2 LL_SYSCFG_DisableFastModePlus\n + * SYSCFG_CFGR1 I2C_FMP_PA9 LL_SYSCFG_DisableFastModePlus\n + * SYSCFG_CFGR1 I2C_FMP_PA10 LL_SYSCFG_DisableFastModePlus + * @param ConfigFastModePlus This parameter can be a combination of the following values: + * @arg @ref LL_SYSCFG_I2C_FASTMODEPLUS_PB6 + * @arg @ref LL_SYSCFG_I2C_FASTMODEPLUS_PB7 + * @arg @ref LL_SYSCFG_I2C_FASTMODEPLUS_PB8 + * @arg @ref LL_SYSCFG_I2C_FASTMODEPLUS_PB9 + * @arg @ref LL_SYSCFG_I2C_FASTMODEPLUS_I2C1 (*) + * @arg @ref LL_SYSCFG_I2C_FASTMODEPLUS_I2C2 (*) + * @arg @ref LL_SYSCFG_I2C_FASTMODEPLUS_PA9 (*) + * @arg @ref LL_SYSCFG_I2C_FASTMODEPLUS_PA10 (*) + * + * (*) value not defined in all devices + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DisableFastModePlus(uint32_t ConfigFastModePlus) +{ + CLEAR_BIT(SYSCFG->CFGR1, ConfigFastModePlus); +} + +/** + * @brief Configure source input for the EXTI external interrupt. + * @rmtoll SYSCFG_EXTICR1 EXTI0 LL_SYSCFG_SetEXTISource\n + * SYSCFG_EXTICR1 EXTI1 LL_SYSCFG_SetEXTISource\n + * SYSCFG_EXTICR1 EXTI2 LL_SYSCFG_SetEXTISource\n + * SYSCFG_EXTICR1 EXTI3 LL_SYSCFG_SetEXTISource\n + * SYSCFG_EXTICR2 EXTI4 LL_SYSCFG_SetEXTISource\n + * SYSCFG_EXTICR2 EXTI5 LL_SYSCFG_SetEXTISource\n + * SYSCFG_EXTICR2 EXTI6 LL_SYSCFG_SetEXTISource\n + * SYSCFG_EXTICR2 EXTI7 LL_SYSCFG_SetEXTISource\n + * SYSCFG_EXTICR3 EXTI8 LL_SYSCFG_SetEXTISource\n + * SYSCFG_EXTICR3 EXTI9 LL_SYSCFG_SetEXTISource\n + * SYSCFG_EXTICR3 EXTI10 LL_SYSCFG_SetEXTISource\n + * SYSCFG_EXTICR3 EXTI11 LL_SYSCFG_SetEXTISource\n + * SYSCFG_EXTICR4 EXTI12 LL_SYSCFG_SetEXTISource\n + * SYSCFG_EXTICR4 EXTI13 LL_SYSCFG_SetEXTISource\n + * SYSCFG_EXTICR4 EXTI14 LL_SYSCFG_SetEXTISource\n + * SYSCFG_EXTICR4 EXTI15 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 + * + * (*) 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], SYSCFG_EXTICR1_EXTI0 << (Line >> 16), Port << (Line >> 16)); +} + +/** + * @brief Get the configured defined for specific EXTI Line + * @rmtoll SYSCFG_EXTICR1 EXTI0 LL_SYSCFG_SetEXTISource\n + * SYSCFG_EXTICR1 EXTI1 LL_SYSCFG_SetEXTISource\n + * SYSCFG_EXTICR1 EXTI2 LL_SYSCFG_SetEXTISource\n + * SYSCFG_EXTICR1 EXTI3 LL_SYSCFG_SetEXTISource\n + * SYSCFG_EXTICR2 EXTI4 LL_SYSCFG_SetEXTISource\n + * SYSCFG_EXTICR2 EXTI5 LL_SYSCFG_SetEXTISource\n + * SYSCFG_EXTICR2 EXTI6 LL_SYSCFG_SetEXTISource\n + * SYSCFG_EXTICR2 EXTI7 LL_SYSCFG_SetEXTISource\n + * SYSCFG_EXTICR3 EXTI8 LL_SYSCFG_SetEXTISource\n + * SYSCFG_EXTICR3 EXTI9 LL_SYSCFG_SetEXTISource\n + * SYSCFG_EXTICR3 EXTI10 LL_SYSCFG_SetEXTISource\n + * SYSCFG_EXTICR3 EXTI11 LL_SYSCFG_SetEXTISource\n + * SYSCFG_EXTICR4 EXTI12 LL_SYSCFG_SetEXTISource\n + * SYSCFG_EXTICR4 EXTI13 LL_SYSCFG_SetEXTISource\n + * SYSCFG_EXTICR4 EXTI14 LL_SYSCFG_SetEXTISource\n + * SYSCFG_EXTICR4 EXTI15 LL_SYSCFG_SetEXTISource + * @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 + * + * (*) 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], (SYSCFG_EXTICR1_EXTI0 << (Line >> 16))) >> (Line >> 16)); +} + +#if defined(SYSCFG_ITLINE0_SR_EWDG) +/** + * @brief Check if Window watchdog interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE0 SR_EWDG LL_SYSCFG_IsActiveFlag_WWDG + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_WWDG(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[0], SYSCFG_ITLINE0_SR_EWDG) == (SYSCFG_ITLINE0_SR_EWDG)); +} +#endif /* SYSCFG_ITLINE0_SR_EWDG */ + +#if defined(SYSCFG_ITLINE1_SR_PVDOUT) +/** + * @brief Check if PVD supply monitoring interrupt occurred or not (EXTI line 16). + * @rmtoll SYSCFG_ITLINE1 SR_PVDOUT LL_SYSCFG_IsActiveFlag_PVDOUT + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_PVDOUT(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[1], SYSCFG_ITLINE1_SR_PVDOUT) == (SYSCFG_ITLINE1_SR_PVDOUT)); +} +#endif /* SYSCFG_ITLINE1_SR_PVDOUT */ + +#if defined(SYSCFG_ITLINE1_SR_VDDIO2) +/** + * @brief Check if VDDIO2 supply monitoring interrupt occurred or not (EXTI line 31). + * @rmtoll SYSCFG_ITLINE1 SR_VDDIO2 LL_SYSCFG_IsActiveFlag_VDDIO2 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_VDDIO2(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[1], SYSCFG_ITLINE1_SR_VDDIO2) == (SYSCFG_ITLINE1_SR_VDDIO2)); +} +#endif /* SYSCFG_ITLINE1_SR_VDDIO2 */ + +#if defined(SYSCFG_ITLINE2_SR_RTC_WAKEUP) +/** + * @brief Check if RTC Wake Up interrupt occurred or not (EXTI line 20). + * @rmtoll SYSCFG_ITLINE2 SR_RTC_WAKEUP LL_SYSCFG_IsActiveFlag_RTC_WAKEUP + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_RTC_WAKEUP(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[2], SYSCFG_ITLINE2_SR_RTC_WAKEUP) == (SYSCFG_ITLINE2_SR_RTC_WAKEUP)); +} +#endif /* SYSCFG_ITLINE2_SR_RTC_WAKEUP */ + +#if defined(SYSCFG_ITLINE2_SR_RTC_TSTAMP) +/** + * @brief Check if RTC Tamper and TimeStamp interrupt occurred or not (EXTI line 19). + * @rmtoll SYSCFG_ITLINE2 SR_RTC_TSTAMP LL_SYSCFG_IsActiveFlag_RTC_TSTAMP + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_RTC_TSTAMP(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[2], SYSCFG_ITLINE2_SR_RTC_TSTAMP) == (SYSCFG_ITLINE2_SR_RTC_TSTAMP)); +} +#endif /* SYSCFG_ITLINE2_SR_RTC_TSTAMP */ + +#if defined(SYSCFG_ITLINE2_SR_RTC_ALRA) +/** + * @brief Check if RTC Alarm interrupt occurred or not (EXTI line 17). + * @rmtoll SYSCFG_ITLINE2 SR_RTC_ALRA LL_SYSCFG_IsActiveFlag_RTC_ALRA + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_RTC_ALRA(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[2], SYSCFG_ITLINE2_SR_RTC_ALRA) == (SYSCFG_ITLINE2_SR_RTC_ALRA)); +} +#endif /* SYSCFG_ITLINE2_SR_RTC_ALRA */ + +#if defined(SYSCFG_ITLINE3_SR_FLASH_ITF) +/** + * @brief Check if Flash interface interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE3 SR_FLASH_ITF LL_SYSCFG_IsActiveFlag_FLASH_ITF + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_FLASH_ITF(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[3], SYSCFG_ITLINE3_SR_FLASH_ITF) == (SYSCFG_ITLINE3_SR_FLASH_ITF)); +} +#endif /* SYSCFG_ITLINE3_SR_FLASH_ITF */ + +#if defined(SYSCFG_ITLINE4_SR_CRS) +/** + * @brief Check if Clock recovery system interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE4 SR_CRS LL_SYSCFG_IsActiveFlag_CRS + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_CRS(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[4], SYSCFG_ITLINE4_SR_CRS) == (SYSCFG_ITLINE4_SR_CRS)); +} +#endif /* SYSCFG_ITLINE4_SR_CRS */ + +#if defined(SYSCFG_ITLINE4_SR_CLK_CTRL) +/** + * @brief Check if Reset and clock control interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE4 SR_CLK_CTRL LL_SYSCFG_IsActiveFlag_CLK_CTRL + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_CLK_CTRL(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[4], SYSCFG_ITLINE4_SR_CLK_CTRL) == (SYSCFG_ITLINE4_SR_CLK_CTRL)); +} +#endif /* SYSCFG_ITLINE4_SR_CLK_CTRL */ + +#if defined(SYSCFG_ITLINE5_SR_EXTI0) +/** + * @brief Check if EXTI line 0 interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE5 SR_EXTI0 LL_SYSCFG_IsActiveFlag_EXTI0 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_EXTI0(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[5], SYSCFG_ITLINE5_SR_EXTI0) == (SYSCFG_ITLINE5_SR_EXTI0)); +} +#endif /* SYSCFG_ITLINE5_SR_EXTI0 */ + +#if defined(SYSCFG_ITLINE5_SR_EXTI1) +/** + * @brief Check if EXTI line 1 interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE5 SR_EXTI1 LL_SYSCFG_IsActiveFlag_EXTI1 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_EXTI1(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[5], SYSCFG_ITLINE5_SR_EXTI1) == (SYSCFG_ITLINE5_SR_EXTI1)); +} +#endif /* SYSCFG_ITLINE5_SR_EXTI1 */ + +#if defined(SYSCFG_ITLINE6_SR_EXTI2) +/** + * @brief Check if EXTI line 2 interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE6 SR_EXTI2 LL_SYSCFG_IsActiveFlag_EXTI2 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_EXTI2(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[6], SYSCFG_ITLINE6_SR_EXTI2) == (SYSCFG_ITLINE6_SR_EXTI2)); +} +#endif /* SYSCFG_ITLINE6_SR_EXTI2 */ + +#if defined(SYSCFG_ITLINE6_SR_EXTI3) +/** + * @brief Check if EXTI line 3 interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE6 SR_EXTI3 LL_SYSCFG_IsActiveFlag_EXTI3 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_EXTI3(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[6], SYSCFG_ITLINE6_SR_EXTI3) == (SYSCFG_ITLINE6_SR_EXTI3)); +} +#endif /* SYSCFG_ITLINE6_SR_EXTI3 */ + +#if defined(SYSCFG_ITLINE7_SR_EXTI4) +/** + * @brief Check if EXTI line 4 interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE7 SR_EXTI4 LL_SYSCFG_IsActiveFlag_EXTI4 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_EXTI4(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[7], SYSCFG_ITLINE7_SR_EXTI4) == (SYSCFG_ITLINE7_SR_EXTI4)); +} +#endif /* SYSCFG_ITLINE7_SR_EXTI4 */ + +#if defined(SYSCFG_ITLINE7_SR_EXTI5) +/** + * @brief Check if EXTI line 5 interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE7 SR_EXTI5 LL_SYSCFG_IsActiveFlag_EXTI5 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_EXTI5(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[7], SYSCFG_ITLINE7_SR_EXTI5) == (SYSCFG_ITLINE7_SR_EXTI5)); +} +#endif /* SYSCFG_ITLINE7_SR_EXTI5 */ + +#if defined(SYSCFG_ITLINE7_SR_EXTI6) +/** + * @brief Check if EXTI line 6 interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE7 SR_EXTI6 LL_SYSCFG_IsActiveFlag_EXTI6 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_EXTI6(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[7], SYSCFG_ITLINE7_SR_EXTI6) == (SYSCFG_ITLINE7_SR_EXTI6)); +} +#endif /* SYSCFG_ITLINE7_SR_EXTI6 */ + +#if defined(SYSCFG_ITLINE7_SR_EXTI7) +/** + * @brief Check if EXTI line 7 interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE7 SR_EXTI7 LL_SYSCFG_IsActiveFlag_EXTI7 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_EXTI7(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[7], SYSCFG_ITLINE7_SR_EXTI7) == (SYSCFG_ITLINE7_SR_EXTI7)); +} +#endif /* SYSCFG_ITLINE7_SR_EXTI7 */ + +#if defined(SYSCFG_ITLINE7_SR_EXTI8) +/** + * @brief Check if EXTI line 8 interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE7 SR_EXTI8 LL_SYSCFG_IsActiveFlag_EXTI8 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_EXTI8(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[7], SYSCFG_ITLINE7_SR_EXTI8) == (SYSCFG_ITLINE7_SR_EXTI8)); +} +#endif /* SYSCFG_ITLINE7_SR_EXTI8 */ + +#if defined(SYSCFG_ITLINE7_SR_EXTI9) +/** + * @brief Check if EXTI line 9 interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE7 SR_EXTI9 LL_SYSCFG_IsActiveFlag_EXTI9 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_EXTI9(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[7], SYSCFG_ITLINE7_SR_EXTI9) == (SYSCFG_ITLINE7_SR_EXTI9)); +} +#endif /* SYSCFG_ITLINE7_SR_EXTI9 */ + +#if defined(SYSCFG_ITLINE7_SR_EXTI10) +/** + * @brief Check if EXTI line 10 interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE7 SR_EXTI10 LL_SYSCFG_IsActiveFlag_EXTI10 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_EXTI10(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[7], SYSCFG_ITLINE7_SR_EXTI10) == (SYSCFG_ITLINE7_SR_EXTI10)); +} +#endif /* SYSCFG_ITLINE7_SR_EXTI10 */ + +#if defined(SYSCFG_ITLINE7_SR_EXTI11) +/** + * @brief Check if EXTI line 11 interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE7 SR_EXTI11 LL_SYSCFG_IsActiveFlag_EXTI11 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_EXTI11(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[7], SYSCFG_ITLINE7_SR_EXTI11) == (SYSCFG_ITLINE7_SR_EXTI11)); +} +#endif /* SYSCFG_ITLINE7_SR_EXTI11 */ + +#if defined(SYSCFG_ITLINE7_SR_EXTI12) +/** + * @brief Check if EXTI line 12 interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE7 SR_EXTI12 LL_SYSCFG_IsActiveFlag_EXTI12 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_EXTI12(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[7], SYSCFG_ITLINE7_SR_EXTI12) == (SYSCFG_ITLINE7_SR_EXTI12)); +} +#endif /* SYSCFG_ITLINE7_SR_EXTI12 */ + +#if defined(SYSCFG_ITLINE7_SR_EXTI13) +/** + * @brief Check if EXTI line 13 interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE7 SR_EXTI13 LL_SYSCFG_IsActiveFlag_EXTI13 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_EXTI13(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[7], SYSCFG_ITLINE7_SR_EXTI13) == (SYSCFG_ITLINE7_SR_EXTI13)); +} +#endif /* SYSCFG_ITLINE7_SR_EXTI13 */ + +#if defined(SYSCFG_ITLINE7_SR_EXTI14) +/** + * @brief Check if EXTI line 14 interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE7 SR_EXTI14 LL_SYSCFG_IsActiveFlag_EXTI14 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_EXTI14(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[7], SYSCFG_ITLINE7_SR_EXTI14) == (SYSCFG_ITLINE7_SR_EXTI14)); +} +#endif /* SYSCFG_ITLINE7_SR_EXTI14 */ + +#if defined(SYSCFG_ITLINE7_SR_EXTI15) +/** + * @brief Check if EXTI line 15 interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE7 SR_EXTI15 LL_SYSCFG_IsActiveFlag_EXTI15 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_EXTI15(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[7], SYSCFG_ITLINE7_SR_EXTI15) == (SYSCFG_ITLINE7_SR_EXTI15)); +} +#endif /* SYSCFG_ITLINE7_SR_EXTI15 */ + +#if defined(SYSCFG_ITLINE8_SR_TSC_EOA) +/** + * @brief Check if Touch sensing controller end of acquisition interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE8 SR_TSC_EOA LL_SYSCFG_IsActiveFlag_TSC_EOA + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_TSC_EOA(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[8], SYSCFG_ITLINE8_SR_TSC_EOA) == (SYSCFG_ITLINE8_SR_TSC_EOA)); +} +#endif /* SYSCFG_ITLINE8_SR_TSC_EOA */ + +#if defined(SYSCFG_ITLINE8_SR_TSC_MCE) +/** + * @brief Check if Touch sensing controller max counterror interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE8 SR_TSC_MCE LL_SYSCFG_IsActiveFlag_TSC_MCE + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_TSC_MCE(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[8], SYSCFG_ITLINE8_SR_TSC_MCE) == (SYSCFG_ITLINE8_SR_TSC_MCE)); +} +#endif /* SYSCFG_ITLINE8_SR_TSC_MCE */ + +#if defined(SYSCFG_ITLINE9_SR_DMA1_CH1) +/** + * @brief Check if DMA1 channel 1 interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE9 SR_DMA1_CH1 LL_SYSCFG_IsActiveFlag_DMA1_CH1 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_DMA1_CH1(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[9], SYSCFG_ITLINE9_SR_DMA1_CH1) == (SYSCFG_ITLINE9_SR_DMA1_CH1)); +} +#endif /* SYSCFG_ITLINE9_SR_DMA1_CH1 */ + +#if defined(SYSCFG_ITLINE10_SR_DMA1_CH2) +/** + * @brief Check if DMA1 channel 2 interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE10 SR_DMA1_CH2 LL_SYSCFG_IsActiveFlag_DMA1_CH2 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_DMA1_CH2(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[10], SYSCFG_ITLINE10_SR_DMA1_CH2) == (SYSCFG_ITLINE10_SR_DMA1_CH2)); +} +#endif /* SYSCFG_ITLINE10_SR_DMA1_CH2 */ + +#if defined(SYSCFG_ITLINE10_SR_DMA1_CH3) +/** + * @brief Check if DMA1 channel 3 interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE10 SR_DMA1_CH3 LL_SYSCFG_IsActiveFlag_DMA1_CH3 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_DMA1_CH3(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[10], SYSCFG_ITLINE10_SR_DMA1_CH3) == (SYSCFG_ITLINE10_SR_DMA1_CH3)); +} +#endif /* SYSCFG_ITLINE10_SR_DMA1_CH3 */ + +#if defined(SYSCFG_ITLINE10_SR_DMA2_CH1) +/** + * @brief Check if DMA2 channel 1 interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE10 SR_DMA2_CH1 LL_SYSCFG_IsActiveFlag_DMA2_CH1 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_DMA2_CH1(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[10], SYSCFG_ITLINE10_SR_DMA2_CH1) == (SYSCFG_ITLINE10_SR_DMA2_CH1)); +} +#endif /* SYSCFG_ITLINE10_SR_DMA2_CH1 */ + +#if defined(SYSCFG_ITLINE10_SR_DMA2_CH2) +/** + * @brief Check if DMA2 channel 2 interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE10 SR_DMA2_CH2 LL_SYSCFG_IsActiveFlag_DMA2_CH2 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_DMA2_CH2(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[10], SYSCFG_ITLINE10_SR_DMA2_CH2) == (SYSCFG_ITLINE10_SR_DMA2_CH2)); +} +#endif /* SYSCFG_ITLINE10_SR_DMA2_CH2 */ + +#if defined(SYSCFG_ITLINE11_SR_DMA1_CH4) +/** + * @brief Check if DMA1 channel 4 interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE11 SR_DMA1_CH4 LL_SYSCFG_IsActiveFlag_DMA1_CH4 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_DMA1_CH4(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[11], SYSCFG_ITLINE11_SR_DMA1_CH4) == (SYSCFG_ITLINE11_SR_DMA1_CH4)); +} +#endif /* SYSCFG_ITLINE11_SR_DMA1_CH4 */ + +#if defined(SYSCFG_ITLINE11_SR_DMA1_CH5) +/** + * @brief Check if DMA1 channel 5 interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE11 SR_DMA1_CH5 LL_SYSCFG_IsActiveFlag_DMA1_CH5 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_DMA1_CH5(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[11], SYSCFG_ITLINE11_SR_DMA1_CH5) == (SYSCFG_ITLINE11_SR_DMA1_CH5)); +} +#endif /* SYSCFG_ITLINE11_SR_DMA1_CH5 */ + +#if defined(SYSCFG_ITLINE11_SR_DMA1_CH6) +/** + * @brief Check if DMA1 channel 6 interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE11 SR_DMA1_CH6 LL_SYSCFG_IsActiveFlag_DMA1_CH6 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_DMA1_CH6(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[11], SYSCFG_ITLINE11_SR_DMA1_CH6) == (SYSCFG_ITLINE11_SR_DMA1_CH6)); +} +#endif /* SYSCFG_ITLINE11_SR_DMA1_CH6 */ + +#if defined(SYSCFG_ITLINE11_SR_DMA1_CH7) +/** + * @brief Check if DMA1 channel 7 interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE11 SR_DMA1_CH7 LL_SYSCFG_IsActiveFlag_DMA1_CH7 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_DMA1_CH7(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[11], SYSCFG_ITLINE11_SR_DMA1_CH7) == (SYSCFG_ITLINE11_SR_DMA1_CH7)); +} +#endif /* SYSCFG_ITLINE11_SR_DMA1_CH7 */ + +#if defined(SYSCFG_ITLINE11_SR_DMA2_CH3) +/** + * @brief Check if DMA2 channel 3 interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE11 SR_DMA2_CH3 LL_SYSCFG_IsActiveFlag_DMA2_CH3 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_DMA2_CH3(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[11], SYSCFG_ITLINE11_SR_DMA2_CH3) == (SYSCFG_ITLINE11_SR_DMA2_CH3)); +} +#endif /* SYSCFG_ITLINE11_SR_DMA2_CH3 */ + +#if defined(SYSCFG_ITLINE11_SR_DMA2_CH4) +/** + * @brief Check if DMA2 channel 4 interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE11 SR_DMA2_CH4 LL_SYSCFG_IsActiveFlag_DMA2_CH4 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_DMA2_CH4(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[11], SYSCFG_ITLINE11_SR_DMA2_CH4) == (SYSCFG_ITLINE11_SR_DMA2_CH4)); +} +#endif /* SYSCFG_ITLINE11_SR_DMA2_CH4 */ + +#if defined(SYSCFG_ITLINE11_SR_DMA2_CH5) +/** + * @brief Check if DMA2 channel 5 interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE11 SR_DMA2_CH5 LL_SYSCFG_IsActiveFlag_DMA2_CH5 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_DMA2_CH5(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[11], SYSCFG_ITLINE11_SR_DMA2_CH5) == (SYSCFG_ITLINE11_SR_DMA2_CH5)); +} +#endif /* SYSCFG_ITLINE11_SR_DMA2_CH5 */ + +#if defined(SYSCFG_ITLINE12_SR_ADC) +/** + * @brief Check if ADC interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE12 SR_ADC LL_SYSCFG_IsActiveFlag_ADC + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_ADC(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[12], SYSCFG_ITLINE12_SR_ADC) == (SYSCFG_ITLINE12_SR_ADC)); +} +#endif /* SYSCFG_ITLINE12_SR_ADC */ + +#if defined(SYSCFG_ITLINE12_SR_COMP1) +/** + * @brief Check if Comparator 1 interrupt occurred or not (EXTI line 21). + * @rmtoll SYSCFG_ITLINE12 SR_COMP1 LL_SYSCFG_IsActiveFlag_COMP1 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_COMP1(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[12], SYSCFG_ITLINE12_SR_COMP1) == (SYSCFG_ITLINE12_SR_COMP1)); +} +#endif /* SYSCFG_ITLINE12_SR_COMP1 */ + +#if defined(SYSCFG_ITLINE12_SR_COMP2) +/** + * @brief Check if Comparator 2 interrupt occurred or not (EXTI line 22). + * @rmtoll SYSCFG_ITLINE12 SR_COMP2 LL_SYSCFG_IsActiveFlag_COMP2 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_COMP2(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[12], SYSCFG_ITLINE12_SR_COMP2) == (SYSCFG_ITLINE12_SR_COMP2)); +} +#endif /* SYSCFG_ITLINE12_SR_COMP2 */ + +#if defined(SYSCFG_ITLINE13_SR_TIM1_BRK) +/** + * @brief Check if Timer 1 break interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE13 SR_TIM1_BRK LL_SYSCFG_IsActiveFlag_TIM1_BRK + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_TIM1_BRK(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[13], SYSCFG_ITLINE13_SR_TIM1_BRK) == (SYSCFG_ITLINE13_SR_TIM1_BRK)); +} +#endif /* SYSCFG_ITLINE13_SR_TIM1_BRK */ + +#if defined(SYSCFG_ITLINE13_SR_TIM1_UPD) +/** + * @brief Check if Timer 1 update interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE13 SR_TIM1_UPD LL_SYSCFG_IsActiveFlag_TIM1_UPD + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_TIM1_UPD(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[13], SYSCFG_ITLINE13_SR_TIM1_UPD) == (SYSCFG_ITLINE13_SR_TIM1_UPD)); +} +#endif /* SYSCFG_ITLINE13_SR_TIM1_UPD */ + +#if defined(SYSCFG_ITLINE13_SR_TIM1_TRG) +/** + * @brief Check if Timer 1 trigger interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE13 SR_TIM1_TRG LL_SYSCFG_IsActiveFlag_TIM1_TRG + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_TIM1_TRG(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[13], SYSCFG_ITLINE13_SR_TIM1_TRG) == (SYSCFG_ITLINE13_SR_TIM1_TRG)); +} +#endif /* SYSCFG_ITLINE13_SR_TIM1_TRG */ + +#if defined(SYSCFG_ITLINE13_SR_TIM1_CCU) +/** + * @brief Check if Timer 1 commutation interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE13 SR_TIM1_CCU LL_SYSCFG_IsActiveFlag_TIM1_CCU + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_TIM1_CCU(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[13], SYSCFG_ITLINE13_SR_TIM1_CCU) == (SYSCFG_ITLINE13_SR_TIM1_CCU)); +} +#endif /* SYSCFG_ITLINE13_SR_TIM1_CCU */ + +#if defined(SYSCFG_ITLINE14_SR_TIM1_CC) +/** + * @brief Check if Timer 1 capture compare interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE14 SR_TIM1_CC LL_SYSCFG_IsActiveFlag_TIM1_CC + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_TIM1_CC(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[14], SYSCFG_ITLINE14_SR_TIM1_CC) == (SYSCFG_ITLINE14_SR_TIM1_CC)); +} +#endif /* SYSCFG_ITLINE14_SR_TIM1_CC */ + +#if defined(SYSCFG_ITLINE15_SR_TIM2_GLB) +/** + * @brief Check if Timer 2 interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE15 SR_TIM2_GLB LL_SYSCFG_IsActiveFlag_TIM2 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_TIM2(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[15], SYSCFG_ITLINE15_SR_TIM2_GLB) == (SYSCFG_ITLINE15_SR_TIM2_GLB)); +} +#endif /* SYSCFG_ITLINE15_SR_TIM2_GLB */ + +#if defined(SYSCFG_ITLINE16_SR_TIM3_GLB) +/** + * @brief Check if Timer 3 interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE16 SR_TIM3_GLB LL_SYSCFG_IsActiveFlag_TIM3 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_TIM3(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[16], SYSCFG_ITLINE16_SR_TIM3_GLB) == (SYSCFG_ITLINE16_SR_TIM3_GLB)); +} +#endif /* SYSCFG_ITLINE16_SR_TIM3_GLB */ + +#if defined(SYSCFG_ITLINE17_SR_DAC) +/** + * @brief Check if DAC underrun interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE17 SR_DAC LL_SYSCFG_IsActiveFlag_DAC + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_DAC(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[17], SYSCFG_ITLINE17_SR_DAC) == (SYSCFG_ITLINE17_SR_DAC)); +} +#endif /* SYSCFG_ITLINE17_SR_DAC */ + +#if defined(SYSCFG_ITLINE17_SR_TIM6_GLB) +/** + * @brief Check if Timer 6 interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE17 SR_TIM6_GLB LL_SYSCFG_IsActiveFlag_TIM6 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_TIM6(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[17], SYSCFG_ITLINE17_SR_TIM6_GLB) == (SYSCFG_ITLINE17_SR_TIM6_GLB)); +} +#endif /* SYSCFG_ITLINE17_SR_TIM6_GLB */ + +#if defined(SYSCFG_ITLINE18_SR_TIM7_GLB) +/** + * @brief Check if Timer 7 interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE18 SR_TIM7_GLB LL_SYSCFG_IsActiveFlag_TIM7 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_TIM7(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[18], SYSCFG_ITLINE18_SR_TIM7_GLB) == (SYSCFG_ITLINE18_SR_TIM7_GLB)); +} +#endif /* SYSCFG_ITLINE18_SR_TIM7_GLB */ + +#if defined(SYSCFG_ITLINE19_SR_TIM14_GLB) +/** + * @brief Check if Timer 14 interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE19 SR_TIM14_GLB LL_SYSCFG_IsActiveFlag_TIM14 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_TIM14(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[19], SYSCFG_ITLINE19_SR_TIM14_GLB) == (SYSCFG_ITLINE19_SR_TIM14_GLB)); +} +#endif /* SYSCFG_ITLINE19_SR_TIM14_GLB */ + +#if defined(SYSCFG_ITLINE20_SR_TIM15_GLB) +/** + * @brief Check if Timer 15 interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE20 SR_TIM15_GLB LL_SYSCFG_IsActiveFlag_TIM15 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_TIM15(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[20], SYSCFG_ITLINE20_SR_TIM15_GLB) == (SYSCFG_ITLINE20_SR_TIM15_GLB)); +} +#endif /* SYSCFG_ITLINE20_SR_TIM15_GLB */ + +#if defined(SYSCFG_ITLINE21_SR_TIM16_GLB) +/** + * @brief Check if Timer 16 interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE21 SR_TIM16_GLB LL_SYSCFG_IsActiveFlag_TIM16 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_TIM16(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[21], SYSCFG_ITLINE21_SR_TIM16_GLB) == (SYSCFG_ITLINE21_SR_TIM16_GLB)); +} +#endif /* SYSCFG_ITLINE21_SR_TIM16_GLB */ + +#if defined(SYSCFG_ITLINE22_SR_TIM17_GLB) +/** + * @brief Check if Timer 17 interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE22 SR_TIM17_GLB LL_SYSCFG_IsActiveFlag_TIM17 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_TIM17(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[22], SYSCFG_ITLINE22_SR_TIM17_GLB) == (SYSCFG_ITLINE22_SR_TIM17_GLB)); +} +#endif /* SYSCFG_ITLINE22_SR_TIM17_GLB */ + +#if defined(SYSCFG_ITLINE23_SR_I2C1_GLB) +/** + * @brief Check if I2C1 interrupt occurred or not, combined with EXTI line 23. + * @rmtoll SYSCFG_ITLINE23 SR_I2C1_GLB LL_SYSCFG_IsActiveFlag_I2C1 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_I2C1(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[23], SYSCFG_ITLINE23_SR_I2C1_GLB) == (SYSCFG_ITLINE23_SR_I2C1_GLB)); +} +#endif /* SYSCFG_ITLINE23_SR_I2C1_GLB */ + +#if defined(SYSCFG_ITLINE24_SR_I2C2_GLB) +/** + * @brief Check if I2C2 interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE24 SR_I2C2_GLB LL_SYSCFG_IsActiveFlag_I2C2 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_I2C2(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[24], SYSCFG_ITLINE24_SR_I2C2_GLB) == (SYSCFG_ITLINE24_SR_I2C2_GLB)); +} +#endif /* SYSCFG_ITLINE24_SR_I2C2_GLB */ + +#if defined(SYSCFG_ITLINE25_SR_SPI1) +/** + * @brief Check if SPI1 interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE25 SR_SPI1 LL_SYSCFG_IsActiveFlag_SPI1 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_SPI1(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[25], SYSCFG_ITLINE25_SR_SPI1) == (SYSCFG_ITLINE25_SR_SPI1)); +} +#endif /* SYSCFG_ITLINE25_SR_SPI1 */ + +#if defined(SYSCFG_ITLINE26_SR_SPI2) +/** + * @brief Check if SPI2 interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE26 SR_SPI2 LL_SYSCFG_IsActiveFlag_SPI2 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_SPI2(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[26], SYSCFG_ITLINE26_SR_SPI2) == (SYSCFG_ITLINE26_SR_SPI2)); +} +#endif /* SYSCFG_ITLINE26_SR_SPI2 */ + +#if defined(SYSCFG_ITLINE27_SR_USART1_GLB) +/** + * @brief Check if USART1 interrupt occurred or not, combined with EXTI line 25. + * @rmtoll SYSCFG_ITLINE27 SR_USART1_GLB LL_SYSCFG_IsActiveFlag_USART1 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_USART1(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[27], SYSCFG_ITLINE27_SR_USART1_GLB) == (SYSCFG_ITLINE27_SR_USART1_GLB)); +} +#endif /* SYSCFG_ITLINE27_SR_USART1_GLB */ + +#if defined(SYSCFG_ITLINE28_SR_USART2_GLB) +/** + * @brief Check if USART2 interrupt occurred or not, combined with EXTI line 26. + * @rmtoll SYSCFG_ITLINE28 SR_USART2_GLB LL_SYSCFG_IsActiveFlag_USART2 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_USART2(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[28], SYSCFG_ITLINE28_SR_USART2_GLB) == (SYSCFG_ITLINE28_SR_USART2_GLB)); +} +#endif /* SYSCFG_ITLINE28_SR_USART2_GLB */ + +#if defined(SYSCFG_ITLINE29_SR_USART3_GLB) +/** + * @brief Check if USART3 interrupt occurred or not, combined with EXTI line 28. + * @rmtoll SYSCFG_ITLINE29 SR_USART3_GLB LL_SYSCFG_IsActiveFlag_USART3 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_USART3(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[29], SYSCFG_ITLINE29_SR_USART3_GLB) == (SYSCFG_ITLINE29_SR_USART3_GLB)); +} +#endif /* SYSCFG_ITLINE29_SR_USART3_GLB */ + +#if defined(SYSCFG_ITLINE29_SR_USART4_GLB) +/** + * @brief Check if USART4 interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE29 SR_USART4_GLB LL_SYSCFG_IsActiveFlag_USART4 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_USART4(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[29], SYSCFG_ITLINE29_SR_USART4_GLB) == (SYSCFG_ITLINE29_SR_USART4_GLB)); +} +#endif /* SYSCFG_ITLINE29_SR_USART4_GLB */ + +#if defined(SYSCFG_ITLINE29_SR_USART5_GLB) +/** + * @brief Check if USART5 interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE29 SR_USART5_GLB LL_SYSCFG_IsActiveFlag_USART5 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_USART5(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[29], SYSCFG_ITLINE29_SR_USART5_GLB) == (SYSCFG_ITLINE29_SR_USART5_GLB)); +} +#endif /* SYSCFG_ITLINE29_SR_USART5_GLB */ + +#if defined(SYSCFG_ITLINE29_SR_USART6_GLB) +/** + * @brief Check if USART6 interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE29 SR_USART6_GLB LL_SYSCFG_IsActiveFlag_USART6 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_USART6(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[29], SYSCFG_ITLINE29_SR_USART6_GLB) == (SYSCFG_ITLINE29_SR_USART6_GLB)); +} +#endif /* SYSCFG_ITLINE29_SR_USART6_GLB */ + +#if defined(SYSCFG_ITLINE29_SR_USART7_GLB) +/** + * @brief Check if USART7 interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE29 SR_USART7_GLB LL_SYSCFG_IsActiveFlag_USART7 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_USART7(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[29], SYSCFG_ITLINE29_SR_USART7_GLB) == (SYSCFG_ITLINE29_SR_USART7_GLB)); +} +#endif /* SYSCFG_ITLINE29_SR_USART7_GLB */ + +#if defined(SYSCFG_ITLINE29_SR_USART8_GLB) +/** + * @brief Check if USART8 interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE29 SR_USART8_GLB LL_SYSCFG_IsActiveFlag_USART8 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_USART8(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[29], SYSCFG_ITLINE29_SR_USART8_GLB) == (SYSCFG_ITLINE29_SR_USART8_GLB)); +} +#endif /* SYSCFG_ITLINE29_SR_USART8_GLB */ + +#if defined(SYSCFG_ITLINE30_SR_CAN) +/** + * @brief Check if CAN interrupt occurred or not. + * @rmtoll SYSCFG_ITLINE30 SR_CAN LL_SYSCFG_IsActiveFlag_CAN + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_CAN(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[30], SYSCFG_ITLINE30_SR_CAN) == (SYSCFG_ITLINE30_SR_CAN)); +} +#endif /* SYSCFG_ITLINE30_SR_CAN */ + +#if defined(SYSCFG_ITLINE30_SR_CEC) +/** + * @brief Check if CEC interrupt occurred or not, combined with EXTI line 27. + * @rmtoll SYSCFG_ITLINE30 SR_CEC LL_SYSCFG_IsActiveFlag_CEC + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_CEC(void) +{ + return (READ_BIT(SYSCFG->IT_LINE_SR[30], SYSCFG_ITLINE30_SR_CEC) == (SYSCFG_ITLINE30_SR_CEC)); +} +#endif /* SYSCFG_ITLINE30_SR_CEC */ + +/** + * @brief Set connections to TIMx Break inputs + * @rmtoll SYSCFG_CFGR2 LOCKUP_LOCK LL_SYSCFG_SetTIMBreakInputs\n + * SYSCFG_CFGR2 SRAM_PARITY_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_PVD (*) + * @arg @ref LL_SYSCFG_TIMBREAK_SRAM_PARITY + * @arg @ref LL_SYSCFG_TIMBREAK_LOCKUP + * + * (*) value not defined in all devices + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_SetTIMBreakInputs(uint32_t Break) +{ +#if defined(SYSCFG_CFGR2_PVD_LOCK) + MODIFY_REG(SYSCFG->CFGR2, SYSCFG_CFGR2_LOCKUP_LOCK | SYSCFG_CFGR2_SRAM_PARITY_LOCK | SYSCFG_CFGR2_PVD_LOCK, Break); +#else + MODIFY_REG(SYSCFG->CFGR2, SYSCFG_CFGR2_LOCKUP_LOCK | SYSCFG_CFGR2_SRAM_PARITY_LOCK, Break); +#endif /*SYSCFG_CFGR2_PVD_LOCK*/ +} + +/** + * @brief Get connections to TIMx Break inputs + * @rmtoll SYSCFG_CFGR2 LOCKUP_LOCK LL_SYSCFG_GetTIMBreakInputs\n + * SYSCFG_CFGR2 SRAM_PARITY_LOCK LL_SYSCFG_GetTIMBreakInputs\n + * SYSCFG_CFGR2 PVD_LOCK LL_SYSCFG_GetTIMBreakInputs + * @retval Returned value can be can be a combination of the following values: + * @arg @ref LL_SYSCFG_TIMBREAK_PVD (*) + * @arg @ref LL_SYSCFG_TIMBREAK_SRAM_PARITY + * @arg @ref LL_SYSCFG_TIMBREAK_LOCKUP + * + * (*) value not defined in all devices + */ +__STATIC_INLINE uint32_t LL_SYSCFG_GetTIMBreakInputs(void) +{ +#if defined(SYSCFG_CFGR2_PVD_LOCK) + return (uint32_t)(READ_BIT(SYSCFG->CFGR2, + SYSCFG_CFGR2_LOCKUP_LOCK | SYSCFG_CFGR2_SRAM_PARITY_LOCK | SYSCFG_CFGR2_PVD_LOCK)); +#else + return (uint32_t)(READ_BIT(SYSCFG->CFGR2, SYSCFG_CFGR2_LOCKUP_LOCK | SYSCFG_CFGR2_SRAM_PARITY_LOCK)); +#endif /*SYSCFG_CFGR2_PVD_LOCK*/ +} + +/** + * @brief Check if SRAM parity error detected + * @rmtoll SYSCFG_CFGR2 SRAM_PEF LL_SYSCFG_IsActiveFlag_SP + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_SP(void) +{ + return (READ_BIT(SYSCFG->CFGR2, SYSCFG_CFGR2_SRAM_PEF) == (SYSCFG_CFGR2_SRAM_PEF)); +} + +/** + * @brief Clear SRAM parity error flag + * @rmtoll SYSCFG_CFGR2 SRAM_PEF LL_SYSCFG_ClearFlag_SP + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_ClearFlag_SP(void) +{ + SET_BIT(SYSCFG->CFGR2, SYSCFG_CFGR2_SRAM_PEF); +} + +/** + * @} + */ + +/** @defgroup SYSTEM_LL_EF_DBGMCU DBGMCU + * @{ + */ + +/** + * @brief Return the device identifier + * @note For STM32F03x devices, the device ID is 0x444 + * @note For STM32F04x devices, the device ID is 0x445. + * @note For STM32F05x devices, the device ID is 0x440 + * @note For STM32F07x devices, the device ID is 0x448 + * @note For STM32F09x devices, the device ID is 0x442 + * @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 0x1000 for Revision 1.0. + * @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 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 Freeze APB1 peripherals (group1 peripherals) + * @rmtoll DBGMCU_APB1FZ DBG_TIM2_STOP LL_DBGMCU_APB1_GRP1_FreezePeriph\n + * DBGMCU_APB1FZ DBG_TIM3_STOP LL_DBGMCU_APB1_GRP1_FreezePeriph\n + * DBGMCU_APB1FZ DBG_TIM6_STOP LL_DBGMCU_APB1_GRP1_FreezePeriph\n + * DBGMCU_APB1FZ DBG_TIM7_STOP LL_DBGMCU_APB1_GRP1_FreezePeriph\n + * DBGMCU_APB1FZ DBG_TIM14_STOP LL_DBGMCU_APB1_GRP1_FreezePeriph\n + * DBGMCU_APB1FZ DBG_RTC_STOP LL_DBGMCU_APB1_GRP1_FreezePeriph\n + * DBGMCU_APB1FZ DBG_WWDG_STOP LL_DBGMCU_APB1_GRP1_FreezePeriph\n + * DBGMCU_APB1FZ DBG_IWDG_STOP LL_DBGMCU_APB1_GRP1_FreezePeriph\n + * DBGMCU_APB1FZ DBG_I2C1_SMBUS_TIMEOUT LL_DBGMCU_APB1_GRP1_FreezePeriph\n + * DBGMCU_APB1FZ DBG_CAN_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_TIM6_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_TIM7_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_TIM14_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_CAN_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_APB1FZ DBG_TIM2_STOP LL_DBGMCU_APB1_GRP1_UnFreezePeriph\n + * DBGMCU_APB1FZ DBG_TIM3_STOP LL_DBGMCU_APB1_GRP1_UnFreezePeriph\n + * DBGMCU_APB1FZ DBG_TIM6_STOP LL_DBGMCU_APB1_GRP1_UnFreezePeriph\n + * DBGMCU_APB1FZ DBG_TIM7_STOP LL_DBGMCU_APB1_GRP1_UnFreezePeriph\n + * DBGMCU_APB1FZ DBG_TIM14_STOP LL_DBGMCU_APB1_GRP1_UnFreezePeriph\n + * DBGMCU_APB1FZ DBG_RTC_STOP LL_DBGMCU_APB1_GRP1_UnFreezePeriph\n + * DBGMCU_APB1FZ DBG_WWDG_STOP LL_DBGMCU_APB1_GRP1_UnFreezePeriph\n + * DBGMCU_APB1FZ DBG_IWDG_STOP LL_DBGMCU_APB1_GRP1_UnFreezePeriph\n + * DBGMCU_APB1FZ DBG_I2C1_SMBUS_TIMEOUT LL_DBGMCU_APB1_GRP1_UnFreezePeriph\n + * DBGMCU_APB1FZ DBG_CAN_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_TIM6_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_TIM7_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_TIM14_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_CAN_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 APB1 peripherals (group2 peripherals) + * @rmtoll DBGMCU_APB2FZ DBG_TIM1_STOP LL_DBGMCU_APB1_GRP2_FreezePeriph\n + * DBGMCU_APB2FZ DBG_TIM15_STOP LL_DBGMCU_APB1_GRP2_FreezePeriph\n + * DBGMCU_APB2FZ DBG_TIM16_STOP LL_DBGMCU_APB1_GRP2_FreezePeriph\n + * DBGMCU_APB2FZ DBG_TIM17_STOP LL_DBGMCU_APB1_GRP2_FreezePeriph + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_DBGMCU_APB1_GRP2_TIM1_STOP + * @arg @ref LL_DBGMCU_APB1_GRP2_TIM15_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP2_TIM16_STOP + * @arg @ref LL_DBGMCU_APB1_GRP2_TIM17_STOP + * + * (*) value not defined in all devices + * @retval None + */ +__STATIC_INLINE void LL_DBGMCU_APB1_GRP2_FreezePeriph(uint32_t Periphs) +{ + SET_BIT(DBGMCU->APB2FZ, Periphs); +} + +/** + * @brief Unfreeze APB1 peripherals (group2 peripherals) + * @rmtoll DBGMCU_APB2FZ DBG_TIM1_STOP LL_DBGMCU_APB1_GRP2_UnFreezePeriph\n + * DBGMCU_APB2FZ DBG_TIM15_STOP LL_DBGMCU_APB1_GRP2_UnFreezePeriph\n + * DBGMCU_APB2FZ DBG_TIM16_STOP LL_DBGMCU_APB1_GRP2_UnFreezePeriph\n + * DBGMCU_APB2FZ DBG_TIM17_STOP LL_DBGMCU_APB1_GRP2_UnFreezePeriph + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_DBGMCU_APB1_GRP2_TIM1_STOP + * @arg @ref LL_DBGMCU_APB1_GRP2_TIM15_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP2_TIM16_STOP + * @arg @ref LL_DBGMCU_APB1_GRP2_TIM17_STOP + * + * (*) value not defined in all devices + * @retval None + */ +__STATIC_INLINE void LL_DBGMCU_APB1_GRP2_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 + * @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 + */ +__STATIC_INLINE uint32_t LL_FLASH_GetLatency(void) +{ + return (uint32_t)(READ_BIT(FLASH->ACR, FLASH_ACR_LATENCY)); +} + +/** + * @brief Enable Prefetch + * @rmtoll FLASH_ACR PRFTBE LL_FLASH_EnablePrefetch + * @retval None + */ +__STATIC_INLINE void LL_FLASH_EnablePrefetch(void) +{ + SET_BIT(FLASH->ACR, FLASH_ACR_PRFTBE); +} + +/** + * @brief Disable Prefetch + * @rmtoll FLASH_ACR PRFTBE LL_FLASH_DisablePrefetch + * @retval None + */ +__STATIC_INLINE void LL_FLASH_DisablePrefetch(void) +{ + CLEAR_BIT(FLASH->ACR, FLASH_ACR_PRFTBE); +} + +/** + * @brief Check if Prefetch buffer is enabled + * @rmtoll FLASH_ACR PRFTBS 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_PRFTBS) == (FLASH_ACR_PRFTBS)); +} + + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* defined (FLASH) || defined (SYSCFG) || defined (DBGMCU) */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F0xx_LL_SYSTEM_H */ + + diff --git a/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_usart.h b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_usart.h new file mode 100644 index 0000000..37d5c21 --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_usart.h @@ -0,0 +1,3849 @@ +/** + ****************************************************************************** + * @file stm32f0xx_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 STM32F0xx_LL_USART_H +#define STM32F0xx_LL_USART_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f0xx.h" + +/** @addtogroup STM32F0xx_LL_Driver + * @{ + */ + +#if defined(USART1) || defined(USART2) || defined(USART3) || defined(UART4) || defined(UART5) \ + || defined(USART6) || defined(USART7) || defined(USART8) + +/** @defgroup USART_LL USART + * @{ + */ + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ + +/* Private constants ---------------------------------------------------------*/ +/** @defgroup USART_LL_Private_Constants USART Private Constants + * @{ + */ +/** + * @} + */ +/* 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_CLEAR_FLAG Clear Flags Defines + * @brief Flags defines which can be used with LL_USART_WriteReg function + * @{ + */ +#define LL_USART_ICR_PECF USART_ICR_PECF /*!< Parity error clear flag */ +#define LL_USART_ICR_FECF USART_ICR_FECF /*!< Framing error clear flag */ +#define LL_USART_ICR_NCF USART_ICR_NCF /*!< Noise error detected clear flag */ +#define LL_USART_ICR_ORECF USART_ICR_ORECF /*!< Overrun error clear flag */ +#define LL_USART_ICR_IDLECF USART_ICR_IDLECF /*!< Idle line detected clear flag */ +#define LL_USART_ICR_TCCF USART_ICR_TCCF /*!< Transmission complete clear flag */ +#if defined USART_LIN_SUPPORT +#define LL_USART_ICR_LBDCF USART_ICR_LBDCF /*!< LIN break detection clear flag */ +#endif /* USART_LIN_SUPPORT */ +#define LL_USART_ICR_CTSCF USART_ICR_CTSCF /*!< CTS clear flag */ +#define LL_USART_ICR_RTOCF USART_ICR_RTOCF /*!< Receiver timeout clear flag */ +#if defined USART_SMARTCARD_SUPPORT +#define LL_USART_ICR_EOBCF USART_ICR_EOBCF /*!< End of block clear flag */ +#endif /* USART_SMARTCARD_SUPPORT */ +#define LL_USART_ICR_CMCF USART_ICR_CMCF /*!< Character match clear flag */ +#if defined(USART_CR1_UESM) +#if defined(USART_CR3_WUFIE) +#define LL_USART_ICR_WUCF USART_ICR_WUCF /*!< Wakeup from Stop mode clear flag */ +#endif /* USART_CR3_WUFIE */ +#endif /* USART_CR1_UESM */ +/** + * @} + */ + +/** @defgroup USART_LL_EC_GET_FLAG Get Flags Defines + * @brief Flags defines which can be used with LL_USART_ReadReg function + * @{ + */ +#define LL_USART_ISR_PE USART_ISR_PE /*!< Parity error flag */ +#define LL_USART_ISR_FE USART_ISR_FE /*!< Framing error flag */ +#define LL_USART_ISR_NE USART_ISR_NE /*!< Noise detected flag */ +#define LL_USART_ISR_ORE USART_ISR_ORE /*!< Overrun error flag */ +#define LL_USART_ISR_IDLE USART_ISR_IDLE /*!< Idle line detected flag */ +#define LL_USART_ISR_RXNE USART_ISR_RXNE /*!< Read data register not empty flag */ +#define LL_USART_ISR_TC USART_ISR_TC /*!< Transmission complete flag */ +#define LL_USART_ISR_TXE USART_ISR_TXE /*!< Transmit data register empty flag */ +#if defined USART_LIN_SUPPORT +#define LL_USART_ISR_LBDF USART_ISR_LBDF /*!< LIN break detection flag */ +#endif /* USART_LIN_SUPPORT */ +#define LL_USART_ISR_CTSIF USART_ISR_CTSIF /*!< CTS interrupt flag */ +#define LL_USART_ISR_CTS USART_ISR_CTS /*!< CTS flag */ +#define LL_USART_ISR_RTOF USART_ISR_RTOF /*!< Receiver timeout flag */ +#if defined USART_SMARTCARD_SUPPORT +#define LL_USART_ISR_EOBF USART_ISR_EOBF /*!< End of block flag */ +#endif /* USART_SMARTCARD_SUPPORT */ +#define LL_USART_ISR_ABRE USART_ISR_ABRE /*!< Auto baud rate error flag */ +#define LL_USART_ISR_ABRF USART_ISR_ABRF /*!< Auto baud rate flag */ +#define LL_USART_ISR_BUSY USART_ISR_BUSY /*!< Busy flag */ +#define LL_USART_ISR_CMF USART_ISR_CMF /*!< Character match flag */ +#define LL_USART_ISR_SBKF USART_ISR_SBKF /*!< Send break flag */ +#define LL_USART_ISR_RWU USART_ISR_RWU /*!< Receiver wakeup from Mute mode flag */ +#if defined(USART_CR1_UESM) +#if defined(USART_CR3_WUFIE) +#define LL_USART_ISR_WUF USART_ISR_WUF /*!< Wakeup from Stop mode flag */ +#endif /* USART_CR3_WUFIE */ +#endif /* USART_CR1_UESM */ +#define LL_USART_ISR_TEACK USART_ISR_TEACK /*!< Transmit enable acknowledge flag */ +#define LL_USART_ISR_REACK USART_ISR_REACK /*!< Receive enable acknowledge 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_CR1_CMIE USART_CR1_CMIE /*!< Character match interrupt enable */ +#define LL_USART_CR1_RTOIE USART_CR1_RTOIE /*!< Receiver timeout interrupt enable */ +#if defined(USART_SMARTCARD_SUPPORT) +#define LL_USART_CR1_EOBIE USART_CR1_EOBIE /*!< End of Block interrupt enable */ +#endif /* USART_SMARTCARD_SUPPORT */ +#if defined(USART_LIN_SUPPORT) +#define LL_USART_CR2_LBDIE USART_CR2_LBDIE /*!< LIN break detection interrupt enable */ +#endif /* USART_LIN_SUPPORT */ +#define LL_USART_CR3_EIE USART_CR3_EIE /*!< Error interrupt enable */ +#define LL_USART_CR3_CTSIE USART_CR3_CTSIE /*!< CTS interrupt enable */ +#if defined(USART_CR1_UESM) +#if defined(USART_CR3_WUFIE) +#define LL_USART_CR3_WUFIE USART_CR3_WUFIE /*!< Wakeup from Stop mode interrupt enable */ +#endif /* USART_CR3_WUFIE */ +#endif /* USART_CR1_UESM */ +/** + * @} + */ + +/** @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 + * @{ + */ +#if defined(USART_7BITS_SUPPORT) +#define LL_USART_DATAWIDTH_7B USART_CR1_M1 /*!< 7 bits word length : Start bit, 7 data bits, n stop bits */ +#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_M0 /*!< 9 bits word length : Start bit, 9 data bits, n stop bits */ +#else +#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 */ +#endif /* USART_7BITS_SUPPORT */ +/** + * @} + */ + +/** @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 + * @{ + */ +#if defined(USART_SMARTCARD_SUPPORT) +#define LL_USART_STOPBITS_0_5 USART_CR2_STOP_0 /*!< 0.5 stop bit */ +#endif /* USART_SMARTCARD_SUPPORT */ +#define LL_USART_STOPBITS_1 0x00000000U /*!< 1 stop bit */ +#if defined(USART_SMARTCARD_SUPPORT) +#define LL_USART_STOPBITS_1_5 (USART_CR2_STOP_0 | USART_CR2_STOP_1) /*!< 1.5 stop bits */ +#endif /* USART_SMARTCARD_SUPPORT */ +#define LL_USART_STOPBITS_2 USART_CR2_STOP_1 /*!< 2 stop bits */ +/** + * @} + */ + +/** @defgroup USART_LL_EC_TXRX TX RX Pins Swap + * @{ + */ +#define LL_USART_TXRX_STANDARD 0x00000000U /*!< TX/RX pins are used as defined in standard pinout */ +#define LL_USART_TXRX_SWAPPED (USART_CR2_SWAP) /*!< TX and RX pins functions are swapped. */ +/** + * @} + */ + +/** @defgroup USART_LL_EC_RXPIN_LEVEL RX Pin Active Level Inversion + * @{ + */ +#define LL_USART_RXPIN_LEVEL_STANDARD 0x00000000U /*!< RX pin signal works using the standard logic levels */ +#define LL_USART_RXPIN_LEVEL_INVERTED (USART_CR2_RXINV) /*!< RX pin signal values are inverted. */ +/** + * @} + */ + +/** @defgroup USART_LL_EC_TXPIN_LEVEL TX Pin Active Level Inversion + * @{ + */ +#define LL_USART_TXPIN_LEVEL_STANDARD 0x00000000U /*!< TX pin signal works using the standard logic levels */ +#define LL_USART_TXPIN_LEVEL_INVERTED (USART_CR2_TXINV) /*!< TX pin signal values are inverted. */ +/** + * @} + */ + +/** @defgroup USART_LL_EC_BINARY_LOGIC Binary Data Inversion + * @{ + */ +#define LL_USART_BINARY_LOGIC_POSITIVE 0x00000000U /*!< Logical data from the data register are send/received in positive/direct logic. (1=H, 0=L) */ +#define LL_USART_BINARY_LOGIC_NEGATIVE USART_CR2_DATAINV /*!< Logical data from the data register are send/received in negative/inverse logic. (1=L, 0=H). The parity bit is also inverted. */ +/** + * @} + */ + +/** @defgroup USART_LL_EC_BITORDER Bit Order + * @{ + */ +#define LL_USART_BITORDER_LSBFIRST 0x00000000U /*!< data is transmitted/received with data bit 0 first, following the start bit */ +#define LL_USART_BITORDER_MSBFIRST USART_CR2_MSBFIRST /*!< data is transmitted/received with the MSB first, following the start bit */ +/** + * @} + */ + +/** @defgroup USART_LL_EC_AUTOBAUD_DETECT_ON Autobaud Detection + * @{ + */ +#define LL_USART_AUTOBAUD_DETECT_ON_STARTBIT 0x00000000U /*!< Measurement of the start bit is used to detect the baud rate */ +#define LL_USART_AUTOBAUD_DETECT_ON_FALLINGEDGE USART_CR2_ABRMODE_0 /*!< Falling edge to falling edge measurement. Received frame must start with a single bit = 1 -> Frame = Start10xxxxxx */ +#if defined(USART_FABR_SUPPORT) +#define LL_USART_AUTOBAUD_DETECT_ON_7F_FRAME USART_CR2_ABRMODE_1 /*!< 0x7F frame detection */ +#define LL_USART_AUTOBAUD_DETECT_ON_55_FRAME (USART_CR2_ABRMODE_1 | USART_CR2_ABRMODE_0) /*!< 0x55 frame detection */ +#endif /* USART_FABR_SUPPORT */ +/** + * @} + */ + +/** @defgroup USART_LL_EC_ADDRESS_DETECT Address Length Detection + * @{ + */ +#define LL_USART_ADDRESS_DETECT_4B 0x00000000U /*!< 4-bit address detection method selected */ +#define LL_USART_ADDRESS_DETECT_7B USART_CR2_ADDM7 /*!< 7-bit address detection (in 8-bit data mode) method selected */ +/** + * @} + */ + +/** @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 */ +/** + * @} + */ + +#if defined(USART_CR1_UESM) +#if defined(USART_CR3_WUS) +/** @defgroup USART_LL_EC_WAKEUP_ON Wakeup Activation + * @{ + */ +#define LL_USART_WAKEUP_ON_ADDRESS 0x00000000U /*!< Wake up active on address match */ +#define LL_USART_WAKEUP_ON_STARTBIT USART_CR3_WUS_1 /*!< Wake up active on Start bit detection */ +#define LL_USART_WAKEUP_ON_RXNE (USART_CR3_WUS_0 | USART_CR3_WUS_1) /*!< Wake up active on RXNE */ +/** + * @} + */ + +#endif /* USART_CR3_WUS */ +#endif /* USART_CR1_UESM */ +#if defined(USART_IRDA_SUPPORT) +/** @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 */ +/** + * @} + */ +#endif /* USART_IRDA_SUPPORT */ + +#if defined(USART_LIN_SUPPORT) +/** @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 */ +/** + * @} + */ +#endif /* USART_LIN_SUPPORT */ + +/** @defgroup USART_LL_EC_DE_POLARITY Driver Enable Polarity + * @{ + */ +#define LL_USART_DE_POLARITY_HIGH 0x00000000U /*!< DE signal is active high */ +#define LL_USART_DE_POLARITY_LOW USART_CR3_DEP /*!< DE signal is active low */ +/** + * @} + */ + +/** @defgroup USART_LL_EC_DMA_REG_DATA DMA Register Data + * @{ + */ +#define LL_USART_DMA_REG_DATA_TRANSMIT 0x00000000U /*!< Get address of data register used for transmission */ +#define LL_USART_DMA_REG_DATA_RECEIVE 0x00000001U /*!< Get address of data register used for reception */ +/** + * @} + */ + +/** + * @} + */ + +/* 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(__PERIPHCLK__, __BAUDRATE__) ((((__PERIPHCLK__)*2U)\ + + ((__BAUDRATE__)/2U))/(__BAUDRATE__)) + +/** + * @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(__PERIPHCLK__, __BAUDRATE__) (((__PERIPHCLK__) + ((__BAUDRATE__)/2U))/(__BAUDRATE__)) + +/** + * @} + */ + +/** + * @} + */ + +/* 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_ISR 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(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->CR1, USART_CR1_UE) == (USART_CR1_UE)) ? 1UL : 0UL); +} + +#if defined(USART_CR1_UESM) +/** + * @brief USART enabled in STOP Mode. + * @note When this function is enabled, USART is able to wake up the MCU from Stop mode, provided that + * USART clock selection is HSI or LSE in RCC. + * @note Macro IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not + * Wake-up from Stop mode feature is supported by the USARTx instance. + * @rmtoll CR1 UESM LL_USART_EnableInStopMode + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableInStopMode(USART_TypeDef *USARTx) +{ + ATOMIC_SET_BIT(USARTx->CR1, USART_CR1_UESM); +} + +/** + * @brief USART disabled in STOP Mode. + * @note When this function is disabled, USART is not able to wake up the MCU from Stop mode + * @note Macro IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not + * Wake-up from Stop mode feature is supported by the USARTx instance. + * @rmtoll CR1 UESM LL_USART_DisableInStopMode + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableInStopMode(USART_TypeDef *USARTx) +{ + ATOMIC_CLEAR_BIT(USARTx->CR1, USART_CR1_UESM); +} + +/** + * @brief Indicate if USART is enabled in STOP Mode (able to wake up MCU from Stop mode or not) + * @note Macro IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not + * Wake-up from Stop mode feature is supported by the USARTx instance. + * @rmtoll CR1 UESM LL_USART_IsEnabledInStopMode + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledInStopMode(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->CR1, USART_CR1_UESM) == (USART_CR1_UESM)) ? 1UL : 0UL); +} + +#endif /* USART_CR1_UESM*/ +/** + * @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(const 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(const 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(const 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 M0 LL_USART_SetDataWidth\n + * CR1 M1 LL_USART_SetDataWidth + * @param USARTx USART Instance + * @param DataWidth This parameter can be one of the following values: + * @arg @ref LL_USART_DATAWIDTH_7B (*) + * @arg @ref LL_USART_DATAWIDTH_8B + * @arg @ref LL_USART_DATAWIDTH_9B + * + * (*) Values not available on all devices + * @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 M0 LL_USART_GetDataWidth\n + * CR1 M1 LL_USART_GetDataWidth + * @param USARTx USART Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_USART_DATAWIDTH_7B (*) + * @arg @ref LL_USART_DATAWIDTH_8B + * @arg @ref LL_USART_DATAWIDTH_9B + * + * (*) Values not available on all devices + */ +__STATIC_INLINE uint32_t LL_USART_GetDataWidth(const USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->CR1, USART_CR1_M)); +} + +/** + * @brief Allow switch between Mute Mode and Active mode + * @rmtoll CR1 MME LL_USART_EnableMuteMode + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableMuteMode(USART_TypeDef *USARTx) +{ + ATOMIC_SET_BIT(USARTx->CR1, USART_CR1_MME); +} + +/** + * @brief Prevent Mute Mode use. Set Receiver in active mode permanently. + * @rmtoll CR1 MME LL_USART_DisableMuteMode + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableMuteMode(USART_TypeDef *USARTx) +{ + ATOMIC_CLEAR_BIT(USARTx->CR1, USART_CR1_MME); +} + +/** + * @brief Indicate if switch between Mute Mode and Active mode is allowed + * @rmtoll CR1 MME LL_USART_IsEnabledMuteMode + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledMuteMode(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->CR1, USART_CR1_MME) == (USART_CR1_MME)) ? 1UL : 0UL); +} + +/** + * @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(const 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 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 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(const 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 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 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(const 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 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 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(const 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 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 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 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 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(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->CR2, USART_CR2_CLKEN) == (USART_CR2_CLKEN)) ? 1UL : 0UL); +} + +/** + * @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 + * + * (*) Values not available on all devices + * @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 + * + * (*) Values not available on all devices + */ +__STATIC_INLINE uint32_t LL_USART_GetStopBitsLength(const 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 M0 LL_USART_ConfigCharacter\n + * CR1 M1 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_7B (*) + * @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 + * + * (*) Values not available on all devices + * @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 Configure TX/RX pins swapping setting. + * @rmtoll CR2 SWAP LL_USART_SetTXRXSwap + * @param USARTx USART Instance + * @param SwapConfig This parameter can be one of the following values: + * @arg @ref LL_USART_TXRX_STANDARD + * @arg @ref LL_USART_TXRX_SWAPPED + * @retval None + */ +__STATIC_INLINE void LL_USART_SetTXRXSwap(USART_TypeDef *USARTx, uint32_t SwapConfig) +{ + MODIFY_REG(USARTx->CR2, USART_CR2_SWAP, SwapConfig); +} + +/** + * @brief Retrieve TX/RX pins swapping configuration. + * @rmtoll CR2 SWAP LL_USART_GetTXRXSwap + * @param USARTx USART Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_USART_TXRX_STANDARD + * @arg @ref LL_USART_TXRX_SWAPPED + */ +__STATIC_INLINE uint32_t LL_USART_GetTXRXSwap(const USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->CR2, USART_CR2_SWAP)); +} + +/** + * @brief Configure RX pin active level logic + * @rmtoll CR2 RXINV LL_USART_SetRXPinLevel + * @param USARTx USART Instance + * @param PinInvMethod This parameter can be one of the following values: + * @arg @ref LL_USART_RXPIN_LEVEL_STANDARD + * @arg @ref LL_USART_RXPIN_LEVEL_INVERTED + * @retval None + */ +__STATIC_INLINE void LL_USART_SetRXPinLevel(USART_TypeDef *USARTx, uint32_t PinInvMethod) +{ + MODIFY_REG(USARTx->CR2, USART_CR2_RXINV, PinInvMethod); +} + +/** + * @brief Retrieve RX pin active level logic configuration + * @rmtoll CR2 RXINV LL_USART_GetRXPinLevel + * @param USARTx USART Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_USART_RXPIN_LEVEL_STANDARD + * @arg @ref LL_USART_RXPIN_LEVEL_INVERTED + */ +__STATIC_INLINE uint32_t LL_USART_GetRXPinLevel(const USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->CR2, USART_CR2_RXINV)); +} + +/** + * @brief Configure TX pin active level logic + * @rmtoll CR2 TXINV LL_USART_SetTXPinLevel + * @param USARTx USART Instance + * @param PinInvMethod This parameter can be one of the following values: + * @arg @ref LL_USART_TXPIN_LEVEL_STANDARD + * @arg @ref LL_USART_TXPIN_LEVEL_INVERTED + * @retval None + */ +__STATIC_INLINE void LL_USART_SetTXPinLevel(USART_TypeDef *USARTx, uint32_t PinInvMethod) +{ + MODIFY_REG(USARTx->CR2, USART_CR2_TXINV, PinInvMethod); +} + +/** + * @brief Retrieve TX pin active level logic configuration + * @rmtoll CR2 TXINV LL_USART_GetTXPinLevel + * @param USARTx USART Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_USART_TXPIN_LEVEL_STANDARD + * @arg @ref LL_USART_TXPIN_LEVEL_INVERTED + */ +__STATIC_INLINE uint32_t LL_USART_GetTXPinLevel(const USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->CR2, USART_CR2_TXINV)); +} + +/** + * @brief Configure Binary data logic. + * @note Allow to define how Logical data from the data register are send/received : + * either in positive/direct logic (1=H, 0=L) or in negative/inverse logic (1=L, 0=H) + * @rmtoll CR2 DATAINV LL_USART_SetBinaryDataLogic + * @param USARTx USART Instance + * @param DataLogic This parameter can be one of the following values: + * @arg @ref LL_USART_BINARY_LOGIC_POSITIVE + * @arg @ref LL_USART_BINARY_LOGIC_NEGATIVE + * @retval None + */ +__STATIC_INLINE void LL_USART_SetBinaryDataLogic(USART_TypeDef *USARTx, uint32_t DataLogic) +{ + MODIFY_REG(USARTx->CR2, USART_CR2_DATAINV, DataLogic); +} + +/** + * @brief Retrieve Binary data configuration + * @rmtoll CR2 DATAINV LL_USART_GetBinaryDataLogic + * @param USARTx USART Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_USART_BINARY_LOGIC_POSITIVE + * @arg @ref LL_USART_BINARY_LOGIC_NEGATIVE + */ +__STATIC_INLINE uint32_t LL_USART_GetBinaryDataLogic(const USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->CR2, USART_CR2_DATAINV)); +} + +/** + * @brief Configure transfer bit order (either Less or Most Significant Bit First) + * @note MSB First means data is transmitted/received with the MSB first, following the start bit. + * LSB First means data is transmitted/received with data bit 0 first, following the start bit. + * @rmtoll CR2 MSBFIRST LL_USART_SetTransferBitOrder + * @param USARTx USART Instance + * @param BitOrder This parameter can be one of the following values: + * @arg @ref LL_USART_BITORDER_LSBFIRST + * @arg @ref LL_USART_BITORDER_MSBFIRST + * @retval None + */ +__STATIC_INLINE void LL_USART_SetTransferBitOrder(USART_TypeDef *USARTx, uint32_t BitOrder) +{ + MODIFY_REG(USARTx->CR2, USART_CR2_MSBFIRST, BitOrder); +} + +/** + * @brief Return transfer bit order (either Less or Most Significant Bit First) + * @note MSB First means data is transmitted/received with the MSB first, following the start bit. + * LSB First means data is transmitted/received with data bit 0 first, following the start bit. + * @rmtoll CR2 MSBFIRST LL_USART_GetTransferBitOrder + * @param USARTx USART Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_USART_BITORDER_LSBFIRST + * @arg @ref LL_USART_BITORDER_MSBFIRST + */ +__STATIC_INLINE uint32_t LL_USART_GetTransferBitOrder(const USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->CR2, USART_CR2_MSBFIRST)); +} + +/** + * @brief Enable Auto Baud-Rate Detection + * @note Macro IS_USART_AUTOBAUDRATE_DETECTION_INSTANCE(USARTx) can be used to check whether or not + * Auto Baud Rate detection feature is supported by the USARTx instance. + * @rmtoll CR2 ABREN LL_USART_EnableAutoBaudRate + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableAutoBaudRate(USART_TypeDef *USARTx) +{ + SET_BIT(USARTx->CR2, USART_CR2_ABREN); +} + +/** + * @brief Disable Auto Baud-Rate Detection + * @note Macro IS_USART_AUTOBAUDRATE_DETECTION_INSTANCE(USARTx) can be used to check whether or not + * Auto Baud Rate detection feature is supported by the USARTx instance. + * @rmtoll CR2 ABREN LL_USART_DisableAutoBaudRate + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableAutoBaudRate(USART_TypeDef *USARTx) +{ + CLEAR_BIT(USARTx->CR2, USART_CR2_ABREN); +} + +/** + * @brief Indicate if Auto Baud-Rate Detection mechanism is enabled + * @note Macro IS_USART_AUTOBAUDRATE_DETECTION_INSTANCE(USARTx) can be used to check whether or not + * Auto Baud Rate detection feature is supported by the USARTx instance. + * @rmtoll CR2 ABREN LL_USART_IsEnabledAutoBaud + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledAutoBaud(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->CR2, USART_CR2_ABREN) == (USART_CR2_ABREN)) ? 1UL : 0UL); +} + +/** + * @brief Set Auto Baud-Rate mode bits + * @note Macro IS_USART_AUTOBAUDRATE_DETECTION_INSTANCE(USARTx) can be used to check whether or not + * Auto Baud Rate detection feature is supported by the USARTx instance. + * @rmtoll CR2 ABRMODE LL_USART_SetAutoBaudRateMode + * @param USARTx USART Instance + * @param AutoBaudRateMode This parameter can be one of the following values: + * @arg @ref LL_USART_AUTOBAUD_DETECT_ON_STARTBIT + * @arg @ref LL_USART_AUTOBAUD_DETECT_ON_FALLINGEDGE + * @arg @ref LL_USART_AUTOBAUD_DETECT_ON_7F_FRAME (*) + * @arg @ref LL_USART_AUTOBAUD_DETECT_ON_55_FRAME (*) + * + * (*) Values not available on all devices + * @retval None + */ +__STATIC_INLINE void LL_USART_SetAutoBaudRateMode(USART_TypeDef *USARTx, uint32_t AutoBaudRateMode) +{ + MODIFY_REG(USARTx->CR2, USART_CR2_ABRMODE, AutoBaudRateMode); +} + +/** + * @brief Return Auto Baud-Rate mode + * @note Macro IS_USART_AUTOBAUDRATE_DETECTION_INSTANCE(USARTx) can be used to check whether or not + * Auto Baud Rate detection feature is supported by the USARTx instance. + * @rmtoll CR2 ABRMODE LL_USART_GetAutoBaudRateMode + * @param USARTx USART Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_USART_AUTOBAUD_DETECT_ON_STARTBIT + * @arg @ref LL_USART_AUTOBAUD_DETECT_ON_FALLINGEDGE + * @arg @ref LL_USART_AUTOBAUD_DETECT_ON_7F_FRAME (*) + * @arg @ref LL_USART_AUTOBAUD_DETECT_ON_55_FRAME (*) + * + * (*) Values not available on all devices + */ +__STATIC_INLINE uint32_t LL_USART_GetAutoBaudRateMode(const USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->CR2, USART_CR2_ABRMODE)); +} + +/** + * @brief Enable Receiver Timeout + * @rmtoll CR2 RTOEN LL_USART_EnableRxTimeout + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableRxTimeout(USART_TypeDef *USARTx) +{ + SET_BIT(USARTx->CR2, USART_CR2_RTOEN); +} + +/** + * @brief Disable Receiver Timeout + * @rmtoll CR2 RTOEN LL_USART_DisableRxTimeout + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableRxTimeout(USART_TypeDef *USARTx) +{ + CLEAR_BIT(USARTx->CR2, USART_CR2_RTOEN); +} + +/** + * @brief Indicate if Receiver Timeout feature is enabled + * @rmtoll CR2 RTOEN LL_USART_IsEnabledRxTimeout + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledRxTimeout(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->CR2, USART_CR2_RTOEN) == (USART_CR2_RTOEN)) ? 1UL : 0UL); +} + +/** + * @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. + * @note 4bits address node is used when 4-bit Address Detection is selected in ADDM7. + * (b7-b4 should be set to 0) + * 8bits address node is used when 7-bit Address Detection is selected in ADDM7. + * (This is used in multiprocessor communication during Mute mode or Stop mode, + * for wake up with 7-bit address mark detection. + * The MSB of the character sent by the transmitter should be equal to 1. + * It may also be used for character detection during normal reception, + * Mute mode inactive (for example, end of block detection in ModBus protocol). + * In this case, the whole received character (8-bit) is compared to the ADD[7:0] + * value and CMF flag is set on match) + * @rmtoll CR2 ADD LL_USART_ConfigNodeAddress\n + * CR2 ADDM7 LL_USART_ConfigNodeAddress + * @param USARTx USART Instance + * @param AddressLen This parameter can be one of the following values: + * @arg @ref LL_USART_ADDRESS_DETECT_4B + * @arg @ref LL_USART_ADDRESS_DETECT_7B + * @param NodeAddress 4 or 7 bit Address of the USART node. + * @retval None + */ +__STATIC_INLINE void LL_USART_ConfigNodeAddress(USART_TypeDef *USARTx, uint32_t AddressLen, uint32_t NodeAddress) +{ + MODIFY_REG(USARTx->CR2, USART_CR2_ADD | USART_CR2_ADDM7, + (uint32_t)(AddressLen | (NodeAddress << USART_CR2_ADD_Pos))); +} + +/** + * @brief Return 8 bit Address of the USART node as set in ADD field of CR2. + * @note If 4-bit Address Detection is selected in ADDM7, + * only 4bits (b3-b0) of returned value are relevant (b31-b4 are not relevant) + * If 7-bit Address Detection is selected in ADDM7, + * only 8bits (b7-b0) of returned value are relevant (b31-b8 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(const USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->CR2, USART_CR2_ADD) >> USART_CR2_ADD_Pos); +} + +/** + * @brief Return Length of Node Address used in Address Detection mode (7-bit or 4-bit) + * @rmtoll CR2 ADDM7 LL_USART_GetNodeAddressLen + * @param USARTx USART Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_USART_ADDRESS_DETECT_4B + * @arg @ref LL_USART_ADDRESS_DETECT_7B + */ +__STATIC_INLINE uint32_t LL_USART_GetNodeAddressLen(const USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->CR2, USART_CR2_ADDM7)); +} + +/** + * @brief Enable RTS HW Flow Control + * @note Macro 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 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 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 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 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 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(const 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(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->CR3, USART_CR3_ONEBIT) == (USART_CR3_ONEBIT)) ? 1UL : 0UL); +} + +/** + * @brief Enable Overrun detection + * @rmtoll CR3 OVRDIS LL_USART_EnableOverrunDetect + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableOverrunDetect(USART_TypeDef *USARTx) +{ + CLEAR_BIT(USARTx->CR3, USART_CR3_OVRDIS); +} + +/** + * @brief Disable Overrun detection + * @rmtoll CR3 OVRDIS LL_USART_DisableOverrunDetect + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableOverrunDetect(USART_TypeDef *USARTx) +{ + SET_BIT(USARTx->CR3, USART_CR3_OVRDIS); +} + +/** + * @brief Indicate if Overrun detection is enabled + * @rmtoll CR3 OVRDIS LL_USART_IsEnabledOverrunDetect + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledOverrunDetect(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->CR3, USART_CR3_OVRDIS) != USART_CR3_OVRDIS) ? 1UL : 0UL); +} + +#if defined(USART_CR1_UESM) +#if defined(USART_CR3_WUS) +/** + * @brief Select event type for Wake UP Interrupt Flag (WUS[1:0] bits) + * @note Macro IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not + * Wake-up from Stop mode feature is supported by the USARTx instance. + * @rmtoll CR3 WUS LL_USART_SetWKUPType + * @param USARTx USART Instance + * @param Type This parameter can be one of the following values: + * @arg @ref LL_USART_WAKEUP_ON_ADDRESS + * @arg @ref LL_USART_WAKEUP_ON_STARTBIT + * @arg @ref LL_USART_WAKEUP_ON_RXNE + * @retval None + */ +__STATIC_INLINE void LL_USART_SetWKUPType(USART_TypeDef *USARTx, uint32_t Type) +{ + MODIFY_REG(USARTx->CR3, USART_CR3_WUS, Type); +} + +/** + * @brief Return event type for Wake UP Interrupt Flag (WUS[1:0] bits) + * @note Macro IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not + * Wake-up from Stop mode feature is supported by the USARTx instance. + * @rmtoll CR3 WUS LL_USART_GetWKUPType + * @param USARTx USART Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_USART_WAKEUP_ON_ADDRESS + * @arg @ref LL_USART_WAKEUP_ON_STARTBIT + * @arg @ref LL_USART_WAKEUP_ON_RXNE + */ +__STATIC_INLINE uint32_t LL_USART_GetWKUPType(const USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->CR3, USART_CR3_WUS)); +} + +#endif /* USART_CR3_WUS */ +#endif /* USART_CR1_UESM */ +/** + * @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) + * @note In case of oversampling by 16 and 8, BRR content must be greater than or equal to 16d. + * @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) +{ + uint32_t usartdiv; + uint32_t brrtemp; + + if (OverSampling == LL_USART_OVERSAMPLING_8) + { + usartdiv = (uint16_t)(__LL_USART_DIV_SAMPLING8(PeriphClk, BaudRate)); + brrtemp = usartdiv & 0xFFF0U; + brrtemp |= (uint16_t)((usartdiv & (uint16_t)0x000FU) >> 1U); + USARTx->BRR = brrtemp; + } + 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. + * @note In case of oversampling by 16 and 8, BRR content must be greater than or equal to 16d. + * @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(const USART_TypeDef *USARTx, uint32_t PeriphClk, uint32_t OverSampling) +{ + uint32_t usartdiv; + uint32_t brrresult = 0x0U; + + usartdiv = USARTx->BRR; + + if (usartdiv == 0U) + { + /* Do not perform a division by 0 */ + } + else if (OverSampling == LL_USART_OVERSAMPLING_8) + { + usartdiv = (uint16_t)((usartdiv & 0xFFF0U) | ((usartdiv & 0x0007U) << 1U)) ; + if (usartdiv != 0U) + { + brrresult = (PeriphClk * 2U) / usartdiv; + } + } + else + { + if ((usartdiv & 0xFFFFU) != 0U) + { + brrresult = PeriphClk / usartdiv; + } + } + return (brrresult); +} + +/** + * @brief Set Receiver Time Out Value (expressed in nb of bits duration) + * @rmtoll RTOR RTO LL_USART_SetRxTimeout + * @param USARTx USART Instance + * @param Timeout Value between Min_Data=0x00 and Max_Data=0x00FFFFFF + * @retval None + */ +__STATIC_INLINE void LL_USART_SetRxTimeout(USART_TypeDef *USARTx, uint32_t Timeout) +{ + MODIFY_REG(USARTx->RTOR, USART_RTOR_RTO, Timeout); +} + +/** + * @brief Get Receiver Time Out Value (expressed in nb of bits duration) + * @rmtoll RTOR RTO LL_USART_GetRxTimeout + * @param USARTx USART Instance + * @retval Value between Min_Data=0x00 and Max_Data=0x00FFFFFF + */ +__STATIC_INLINE uint32_t LL_USART_GetRxTimeout(const USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->RTOR, USART_RTOR_RTO)); +} + +#if defined(USART_SMARTCARD_SUPPORT) +/** + * @brief Set Block Length value in reception + * @rmtoll RTOR BLEN LL_USART_SetBlockLength + * @param USARTx USART Instance + * @param BlockLength Value between Min_Data=0x00 and Max_Data=0xFF + * @retval None + */ +__STATIC_INLINE void LL_USART_SetBlockLength(USART_TypeDef *USARTx, uint32_t BlockLength) +{ + MODIFY_REG(USARTx->RTOR, USART_RTOR_BLEN, BlockLength << USART_RTOR_BLEN_Pos); +} + +/** + * @brief Get Block Length value in reception + * @rmtoll RTOR BLEN LL_USART_GetBlockLength + * @param USARTx USART Instance + * @retval Value between Min_Data=0x00 and Max_Data=0xFF + */ +__STATIC_INLINE uint32_t LL_USART_GetBlockLength(const USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->RTOR, USART_RTOR_BLEN) >> USART_RTOR_BLEN_Pos); +} +#endif /* USART_SMARTCARD_SUPPORT */ + +/** + * @} + */ + +#if defined(USART_IRDA_SUPPORT) +/** @defgroup USART_LL_EF_Configuration_IRDA Configuration functions related to Irda feature + * @{ + */ + +/** + * @brief Enable IrDA mode + * @note Macro 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 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 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(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->CR3, USART_CR3_IREN) == (USART_CR3_IREN)) ? 1UL : 0UL); +} + +/** + * @brief Configure IrDA Power Mode (Normal or Low Power) + * @note Macro 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 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(const 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 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, (uint16_t)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 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(const USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->GTPR, USART_GTPR_PSC)); +} + +/** + * @} + */ +#endif /* USART_IRDA_SUPPORT */ + +#if defined(USART_SMARTCARD_SUPPORT) +/** @defgroup USART_LL_EF_Configuration_Smartcard Configuration functions related to Smartcard feature + * @{ + */ + +/** + * @brief Enable Smartcard NACK transmission + * @note Macro 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 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 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(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->CR3, USART_CR3_NACK) == (USART_CR3_NACK)) ? 1UL : 0UL); +} + +/** + * @brief Enable Smartcard mode + * @note Macro 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 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 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(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->CR3, USART_CR3_SCEN) == (USART_CR3_SCEN)) ? 1UL : 0UL); +} + +/** + * @brief Set Smartcard Auto-Retry Count value (SCARCNT[2:0] bits) + * @note Macro IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not + * Smartcard feature is supported by the USARTx instance. + * @note This bit-field specifies the number of retries in transmit and receive, in Smartcard mode. + * In transmission mode, it specifies the number of automatic retransmission retries, before + * generating a transmission error (FE bit set). + * In reception mode, it specifies the number or erroneous reception trials, before generating a + * reception error (RXNE and PE bits set) + * @rmtoll CR3 SCARCNT LL_USART_SetSmartcardAutoRetryCount + * @param USARTx USART Instance + * @param AutoRetryCount Value between Min_Data=0 and Max_Data=7 + * @retval None + */ +__STATIC_INLINE void LL_USART_SetSmartcardAutoRetryCount(USART_TypeDef *USARTx, uint32_t AutoRetryCount) +{ + MODIFY_REG(USARTx->CR3, USART_CR3_SCARCNT, AutoRetryCount << USART_CR3_SCARCNT_Pos); +} + +/** + * @brief Return Smartcard Auto-Retry Count value (SCARCNT[2:0] bits) + * @note Macro IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not + * Smartcard feature is supported by the USARTx instance. + * @rmtoll CR3 SCARCNT LL_USART_GetSmartcardAutoRetryCount + * @param USARTx USART Instance + * @retval Smartcard Auto-Retry Count value (Value between Min_Data=0 and Max_Data=7) + */ +__STATIC_INLINE uint32_t LL_USART_GetSmartcardAutoRetryCount(const USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->CR3, USART_CR3_SCARCNT) >> USART_CR3_SCARCNT_Pos); +} + +/** + * @brief Set Smartcard prescaler value, used for dividing the USART clock + * source to provide the SMARTCARD Clock (5 bits value) + * @note Macro 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, (uint16_t)PrescalerValue); +} + +/** + * @brief Return Smartcard prescaler value, used for dividing the USART clock + * source to provide the SMARTCARD Clock (5 bits value) + * @note Macro 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(const 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 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, (uint16_t)(GuardTime << USART_GTPR_GT_Pos)); +} + +/** + * @brief Return Smartcard Guard time value, expressed in nb of baud clocks periods + * (GT[7:0] bits : Guard time value) + * @note Macro 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(const USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->GTPR, USART_GTPR_GT) >> USART_GTPR_GT_Pos); +} + +/** + * @} + */ +#endif /* USART_SMARTCARD_SUPPORT */ + +/** @defgroup USART_LL_EF_Configuration_HalfDuplex Configuration functions related to Half Duplex feature + * @{ + */ + +/** + * @brief Enable Single Wire Half-Duplex mode + * @note Macro 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 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 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(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->CR3, USART_CR3_HDSEL) == (USART_CR3_HDSEL)) ? 1UL : 0UL); +} + +/** + * @} + */ + +#if defined(USART_LIN_SUPPORT) +/** @defgroup USART_LL_EF_Configuration_LIN Configuration functions related to LIN feature + * @{ + */ + +/** + * @brief Set LIN Break Detection Length + * @note Macro 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 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(const USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->CR2, USART_CR2_LBDL)); +} + +/** + * @brief Enable LIN mode + * @note Macro 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 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 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(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->CR2, USART_CR2_LINEN) == (USART_CR2_LINEN)) ? 1UL : 0UL); +} + +/** + * @} + */ +#endif /* USART_LIN_SUPPORT */ + +/** @defgroup USART_LL_EF_Configuration_DE Configuration functions related to Driver Enable feature + * @{ + */ + +/** + * @brief Set DEDT (Driver Enable De-Assertion Time), Time value expressed on 5 bits ([4:0] bits). + * @note Macro IS_UART_DRIVER_ENABLE_INSTANCE(USARTx) can be used to check whether or not + * Driver Enable feature is supported by the USARTx instance. + * @rmtoll CR1 DEDT LL_USART_SetDEDeassertionTime + * @param USARTx USART Instance + * @param Time Value between Min_Data=0 and Max_Data=31 + * @retval None + */ +__STATIC_INLINE void LL_USART_SetDEDeassertionTime(USART_TypeDef *USARTx, uint32_t Time) +{ + MODIFY_REG(USARTx->CR1, USART_CR1_DEDT, Time << USART_CR1_DEDT_Pos); +} + +/** + * @brief Return DEDT (Driver Enable De-Assertion Time) + * @note Macro IS_UART_DRIVER_ENABLE_INSTANCE(USARTx) can be used to check whether or not + * Driver Enable feature is supported by the USARTx instance. + * @rmtoll CR1 DEDT LL_USART_GetDEDeassertionTime + * @param USARTx USART Instance + * @retval Time value expressed on 5 bits ([4:0] bits) : Value between Min_Data=0 and Max_Data=31 + */ +__STATIC_INLINE uint32_t LL_USART_GetDEDeassertionTime(const USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->CR1, USART_CR1_DEDT) >> USART_CR1_DEDT_Pos); +} + +/** + * @brief Set DEAT (Driver Enable Assertion Time), Time value expressed on 5 bits ([4:0] bits). + * @note Macro IS_UART_DRIVER_ENABLE_INSTANCE(USARTx) can be used to check whether or not + * Driver Enable feature is supported by the USARTx instance. + * @rmtoll CR1 DEAT LL_USART_SetDEAssertionTime + * @param USARTx USART Instance + * @param Time Value between Min_Data=0 and Max_Data=31 + * @retval None + */ +__STATIC_INLINE void LL_USART_SetDEAssertionTime(USART_TypeDef *USARTx, uint32_t Time) +{ + MODIFY_REG(USARTx->CR1, USART_CR1_DEAT, Time << USART_CR1_DEAT_Pos); +} + +/** + * @brief Return DEAT (Driver Enable Assertion Time) + * @note Macro IS_UART_DRIVER_ENABLE_INSTANCE(USARTx) can be used to check whether or not + * Driver Enable feature is supported by the USARTx instance. + * @rmtoll CR1 DEAT LL_USART_GetDEAssertionTime + * @param USARTx USART Instance + * @retval Time value expressed on 5 bits ([4:0] bits) : Value between Min_Data=0 and Max_Data=31 + */ +__STATIC_INLINE uint32_t LL_USART_GetDEAssertionTime(const USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->CR1, USART_CR1_DEAT) >> USART_CR1_DEAT_Pos); +} + +/** + * @brief Enable Driver Enable (DE) Mode + * @note Macro IS_UART_DRIVER_ENABLE_INSTANCE(USARTx) can be used to check whether or not + * Driver Enable feature is supported by the USARTx instance. + * @rmtoll CR3 DEM LL_USART_EnableDEMode + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableDEMode(USART_TypeDef *USARTx) +{ + SET_BIT(USARTx->CR3, USART_CR3_DEM); +} + +/** + * @brief Disable Driver Enable (DE) Mode + * @note Macro IS_UART_DRIVER_ENABLE_INSTANCE(USARTx) can be used to check whether or not + * Driver Enable feature is supported by the USARTx instance. + * @rmtoll CR3 DEM LL_USART_DisableDEMode + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableDEMode(USART_TypeDef *USARTx) +{ + CLEAR_BIT(USARTx->CR3, USART_CR3_DEM); +} + +/** + * @brief Indicate if Driver Enable (DE) Mode is enabled + * @note Macro IS_UART_DRIVER_ENABLE_INSTANCE(USARTx) can be used to check whether or not + * Driver Enable feature is supported by the USARTx instance. + * @rmtoll CR3 DEM LL_USART_IsEnabledDEMode + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledDEMode(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->CR3, USART_CR3_DEM) == (USART_CR3_DEM)) ? 1UL : 0UL); +} + +/** + * @brief Select Driver Enable Polarity + * @note Macro IS_UART_DRIVER_ENABLE_INSTANCE(USARTx) can be used to check whether or not + * Driver Enable feature is supported by the USARTx instance. + * @rmtoll CR3 DEP LL_USART_SetDESignalPolarity + * @param USARTx USART Instance + * @param Polarity This parameter can be one of the following values: + * @arg @ref LL_USART_DE_POLARITY_HIGH + * @arg @ref LL_USART_DE_POLARITY_LOW + * @retval None + */ +__STATIC_INLINE void LL_USART_SetDESignalPolarity(USART_TypeDef *USARTx, uint32_t Polarity) +{ + MODIFY_REG(USARTx->CR3, USART_CR3_DEP, Polarity); +} + +/** + * @brief Return Driver Enable Polarity + * @note Macro IS_UART_DRIVER_ENABLE_INSTANCE(USARTx) can be used to check whether or not + * Driver Enable feature is supported by the USARTx instance. + * @rmtoll CR3 DEP LL_USART_GetDESignalPolarity + * @param USARTx USART Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_USART_DE_POLARITY_HIGH + * @arg @ref LL_USART_DE_POLARITY_LOW + */ +__STATIC_INLINE uint32_t LL_USART_GetDESignalPolarity(const USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->CR3, USART_CR3_DEP)); +} + +/** + * @} + */ + +/** @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 (if LIN feature is supported), + * - CLKEN bit in the USART_CR2 register, + * - SCEN bit in the USART_CR3 register (if Smartcard feature is supported), + * - IREN bit in the USART_CR3 register (if Irda feature is supported), + * - 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 (if LIN feature is supported) + * - Clear CLKEN in CR2 using @ref LL_USART_DisableSCLKOutput() function + * - Clear SCEN in CR3 using @ref LL_USART_DisableSmartcard() function (if Smartcard feature is supported) + * - Clear IREN in CR3 using @ref LL_USART_DisableIrda() function (if Irda feature is supported) + * - 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 (if LIN feature is supported), CLKEN bits in the USART_CR2 register, + - SCEN (if Smartcard feature is supported), IREN (if Irda feature is supported) + and HDSEL bits in the USART_CR3 register. + */ +#if defined(USART_LIN_SUPPORT) + CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN)); +#else + CLEAR_BIT(USARTx->CR2, USART_CR2_CLKEN); +#endif /* USART_LIN_SUPPORT */ +#if defined(USART_SMARTCARD_SUPPORT) +#if defined(USART_IRDA_SUPPORT) + CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_IREN | USART_CR3_HDSEL)); +#else + CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL)); +#endif /* USART_IRDA_SUPPORT */ +#else +#if defined(USART_IRDA_SUPPORT) + CLEAR_BIT(USARTx->CR3, (USART_CR3_IREN | USART_CR3_HDSEL)); +#else + CLEAR_BIT(USARTx->CR3, USART_CR3_HDSEL); +#endif /* USART_IRDA_SUPPORT */ +#endif /* USART_SMARTCARD_SUPPORT */ +} + +/** + * @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 (if LIN feature is supported), + * - SCEN bit in the USART_CR3 register (if Smartcard feature is supported), + * - IREN bit in the USART_CR3 register (if Irda feature is supported), + * - HDSEL bit in the USART_CR3 register. + * This function also sets the USART in Synchronous mode. + * @note Macro 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 (if LIN feature is supported) + * - Clear IREN in CR3 using @ref LL_USART_DisableIrda() function (if Irda feature is supported) + * - Clear SCEN in CR3 using @ref LL_USART_DisableSmartcard() function (if Smartcard feature is supported) + * - 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 (if LIN feature is supported) bit in the USART_CR2 register, + - SCEN (if Smartcard feature is supported), IREN (if Irda feature is supported) + and HDSEL bits in the USART_CR3 register. + */ +#if defined(USART_LIN_SUPPORT) + CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN)); +#endif /* USART_LIN_SUPPORT */ +#if defined(USART_SMARTCARD_SUPPORT) +#if defined(USART_IRDA_SUPPORT) + CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_IREN | USART_CR3_HDSEL)); +#else + CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL)); +#endif /* USART_IRDA_SUPPORT */ +#else +#if defined(USART_IRDA_SUPPORT) + CLEAR_BIT(USARTx->CR3, (USART_CR3_IREN | USART_CR3_HDSEL)); +#else + CLEAR_BIT(USARTx->CR3, USART_CR3_HDSEL); +#endif /* USART_IRDA_SUPPORT */ +#endif /* USART_SMARTCARD_SUPPORT */ + /* set the UART/USART in Synchronous mode */ + SET_BIT(USARTx->CR2, USART_CR2_CLKEN); +} + +#if defined(USART_LIN_SUPPORT) +/** + * @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 (if Smartcard feature is supported), + * - IREN bit in the USART_CR3 register (if Irda feature is supported), + * - HDSEL bit in the USART_CR3 register. + * This function also set the UART/USART in LIN mode. + * @note Macro 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 (if Smartcard feature is supported) + * - Clear IREN in CR3 using @ref LL_USART_DisableIrda() function (if Irda feature is supported) + * - 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 (if Irda feature is supported) , SCEN (if Smartcard feature is supported) + and HDSEL bits in the USART_CR3 register. + */ + CLEAR_BIT(USARTx->CR2, (USART_CR2_CLKEN | USART_CR2_STOP)); +#if defined(USART_SMARTCARD_SUPPORT) +#if defined(USART_IRDA_SUPPORT) + CLEAR_BIT(USARTx->CR3, (USART_CR3_IREN | USART_CR3_SCEN | USART_CR3_HDSEL)); +#else + CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL)); +#endif /* USART_IRDA_SUPPORT */ +#else +#if defined(USART_IRDA_SUPPORT) + CLEAR_BIT(USARTx->CR3, (USART_CR3_IREN | USART_CR3_HDSEL)); +#else + CLEAR_BIT(USARTx->CR3, USART_CR3_HDSEL); +#endif /* USART_IRDA_SUPPORT */ +#endif /* USART_SMARTCARD_SUPPORT */ + /* Set the UART/USART in LIN mode */ + SET_BIT(USARTx->CR2, USART_CR2_LINEN); +} +#endif /* USART_LIN_SUPPORT */ + +/** + * @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 (if LIN feature is supported), + * - CLKEN bit in the USART_CR2 register, + * - SCEN bit in the USART_CR3 register (if Smartcard feature is supported), + * - IREN bit in the USART_CR3 register (if Irda feature is supported), + * This function also sets the UART/USART in Half Duplex mode. + * @note Macro 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 (if LIN feature is supported) + * - Clear CLKEN in CR2 using @ref LL_USART_DisableSCLKOutput() function + * - Clear SCEN in CR3 using @ref LL_USART_DisableSmartcard() function (if Smartcard feature is supported) + * - Clear IREN in CR3 using @ref LL_USART_DisableIrda() function (if Irda feature is supported) + * - 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 (if LIN feature is supported) and CLKEN bits in the USART_CR2 register, + - SCEN (if Smartcard feature is supported) and IREN (if Irda feature is supported) bits in the USART_CR3 register. + */ +#if defined(USART_LIN_SUPPORT) + CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN)); +#else + CLEAR_BIT(USARTx->CR2, USART_CR2_CLKEN); +#endif /* USART_LIN_SUPPORT */ +#if defined(USART_SMARTCARD_SUPPORT) +#if defined(USART_IRDA_SUPPORT) + CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_IREN)); +#else + CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN)); +#endif /* USART_IRDA_SUPPORT */ +#else +#if defined(USART_IRDA_SUPPORT) + CLEAR_BIT(USARTx->CR3, (USART_CR3_IREN)); +#endif /* USART_IRDA_SUPPORT */ +#endif /* USART_SMARTCARD_SUPPORT */ + /* set the UART/USART in Half Duplex mode */ + SET_BIT(USARTx->CR3, USART_CR3_HDSEL); +} + +#if defined(USART_SMARTCARD_SUPPORT) +/** + * @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 (if LIN feature is supported), + * - IREN bit in the USART_CR3 register (if Irda feature is supported), + * - 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 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 (if LIN feature is supported) + * - Clear IREN in CR3 using @ref LL_USART_DisableIrda() function (if Irda feature is supported) + * - 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 (if LIN feature is supported) bit in the USART_CR2 register, + - IREN (if Irda feature is supported) and HDSEL bits in the USART_CR3 register. + */ +#if defined(USART_LIN_SUPPORT) + CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN)); +#endif /* USART_LIN_SUPPORT */ +#if defined(USART_IRDA_SUPPORT) + CLEAR_BIT(USARTx->CR3, (USART_CR3_IREN | USART_CR3_HDSEL)); +#else + CLEAR_BIT(USARTx->CR3, (USART_CR3_HDSEL)); +#endif /* USART_IRDA_SUPPORT */ + /* 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); +} +#endif /* USART_SMARTCARD_SUPPORT */ + +#if defined(USART_IRDA_SUPPORT) +/** + * @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 (if LIN feature is supported), + * - STOP and CLKEN bits in the USART_CR2 register, + * - SCEN bit in the USART_CR3 register (if Smartcard feature is supported), + * - HDSEL bit in the USART_CR3 register. + * This function also sets the UART/USART in IRDA mode (IREN bit). + * @note Macro 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 (if LIN feature is supported) + * - Clear CLKEN in CR2 using @ref LL_USART_DisableSCLKOutput() function + * - Clear SCEN in CR3 using @ref LL_USART_DisableSmartcard() function (if Smartcard feature is supported) + * - 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 (if LIN feature is supported), STOP and CLKEN bits in the USART_CR2 register, + - SCEN (if Smartcard feature is supported) and HDSEL bits in the USART_CR3 register. + */ +#if defined(USART_LIN_SUPPORT) + CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN | USART_CR2_STOP)); +#else + CLEAR_BIT(USARTx->CR2, (USART_CR2_CLKEN | USART_CR2_STOP)); +#endif /* USART_LIN_SUPPORT */ +#if defined(USART_SMARTCARD_SUPPORT) + CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL)); +#else + CLEAR_BIT(USARTx->CR3, (USART_CR3_HDSEL)); +#endif /* USART_SMARTCARD_SUPPORT */ + /* set the UART/USART in IRDA mode */ + SET_BIT(USARTx->CR3, USART_CR3_IREN); +} +#endif /* USART_IRDA_SUPPORT */ + +/** + * @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 (if LIN feature is supported), + * - CLKEN bit in the USART_CR2 register, + * - SCEN bit in the USART_CR3 register (if Smartcard feature is supported), + * - IREN bit in the USART_CR3 register (if Irda feature is supported), + * - 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 (if LIN feature is supported) + * - Clear CLKEN in CR2 using @ref LL_USART_DisableSCLKOutput() function + * - Clear SCEN in CR3 using @ref LL_USART_DisableSmartcard() function (if Smartcard feature is supported) + * - Clear IREN in CR3 using @ref LL_USART_DisableIrda() function (if Irda feature is supported) + * - 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 (if LIN feature is supported) and CLKEN bits in the USART_CR2 register, + - IREN (if Irda feature is supported), SCEN (if Smartcard feature is supported) + and HDSEL bits in the USART_CR3 register. + */ +#if defined(USART_LIN_SUPPORT) + CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN)); +#else + CLEAR_BIT(USARTx->CR2, USART_CR2_CLKEN); +#endif /* USART_LIN_SUPPORT */ +#if defined(USART_SMARTCARD_SUPPORT) +#if defined(USART_IRDA_SUPPORT) + CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL | USART_CR3_IREN)); +#else + CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL)); +#endif /* USART_IRDA_SUPPORT */ +#else +#if defined(USART_IRDA_SUPPORT) + CLEAR_BIT(USARTx->CR3, (USART_CR3_HDSEL | USART_CR3_IREN)); +#else + CLEAR_BIT(USARTx->CR3, (USART_CR3_HDSEL)); +#endif /* USART_IRDA_SUPPORT */ +#endif /* USART_SMARTCARD_SUPPORT*/ +} + +/** + * @} + */ + +/** @defgroup USART_LL_EF_FLAG_Management FLAG_Management + * @{ + */ + +/** + * @brief Check if the USART Parity Error Flag is set or not + * @rmtoll ISR PE LL_USART_IsActiveFlag_PE + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_PE(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->ISR, USART_ISR_PE) == (USART_ISR_PE)) ? 1UL : 0UL); +} + +/** + * @brief Check if the USART Framing Error Flag is set or not + * @rmtoll ISR FE LL_USART_IsActiveFlag_FE + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_FE(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->ISR, USART_ISR_FE) == (USART_ISR_FE)) ? 1UL : 0UL); +} + +/** + * @brief Check if the USART Noise error detected Flag is set or not + * @rmtoll ISR NE LL_USART_IsActiveFlag_NE + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_NE(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->ISR, USART_ISR_NE) == (USART_ISR_NE)) ? 1UL : 0UL); +} + +/** + * @brief Check if the USART OverRun Error Flag is set or not + * @rmtoll ISR ORE LL_USART_IsActiveFlag_ORE + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_ORE(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->ISR, USART_ISR_ORE) == (USART_ISR_ORE)) ? 1UL : 0UL); +} + +/** + * @brief Check if the USART IDLE line detected Flag is set or not + * @rmtoll ISR IDLE LL_USART_IsActiveFlag_IDLE + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_IDLE(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->ISR, USART_ISR_IDLE) == (USART_ISR_IDLE)) ? 1UL : 0UL); +} + +/** + * @brief Check if the USART Read Data Register Not Empty Flag is set or not + * @rmtoll ISR RXNE LL_USART_IsActiveFlag_RXNE + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_RXNE(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->ISR, USART_ISR_RXNE) == (USART_ISR_RXNE)) ? 1UL : 0UL); +} + +/** + * @brief Check if the USART Transmission Complete Flag is set or not + * @rmtoll ISR TC LL_USART_IsActiveFlag_TC + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_TC(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->ISR, USART_ISR_TC) == (USART_ISR_TC)) ? 1UL : 0UL); +} + +/** + * @brief Check if the USART Transmit Data Register Empty Flag is set or not + * @rmtoll ISR TXE LL_USART_IsActiveFlag_TXE + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_TXE(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->ISR, USART_ISR_TXE) == (USART_ISR_TXE)) ? 1UL : 0UL); +} + +#if defined(USART_LIN_SUPPORT) +/** + * @brief Check if the USART LIN Break Detection Flag is set or not + * @note Macro IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not + * LIN feature is supported by the USARTx instance. + * @rmtoll ISR LBDF LL_USART_IsActiveFlag_LBD + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_LBD(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->ISR, USART_ISR_LBDF) == (USART_ISR_LBDF)) ? 1UL : 0UL); +} +#endif /* USART_LIN_SUPPORT */ + +/** + * @brief Check if the USART CTS interrupt Flag is set or not + * @note Macro IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not + * Hardware Flow control feature is supported by the USARTx instance. + * @rmtoll ISR CTSIF LL_USART_IsActiveFlag_nCTS + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_nCTS(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->ISR, USART_ISR_CTSIF) == (USART_ISR_CTSIF)) ? 1UL : 0UL); +} + +/** + * @brief Check if the USART CTS Flag is set or not + * @note Macro IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not + * Hardware Flow control feature is supported by the USARTx instance. + * @rmtoll ISR CTS LL_USART_IsActiveFlag_CTS + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_CTS(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->ISR, USART_ISR_CTS) == (USART_ISR_CTS)) ? 1UL : 0UL); +} + +/** + * @brief Check if the USART Receiver Time Out Flag is set or not + * @rmtoll ISR RTOF LL_USART_IsActiveFlag_RTO + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_RTO(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->ISR, USART_ISR_RTOF) == (USART_ISR_RTOF)) ? 1UL : 0UL); +} + +#if defined(USART_SMARTCARD_SUPPORT) +/** + * @brief Check if the USART End Of Block Flag is set or not + * @note Macro IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not + * Smartcard feature is supported by the USARTx instance. + * @rmtoll ISR EOBF LL_USART_IsActiveFlag_EOB + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_EOB(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->ISR, USART_ISR_EOBF) == (USART_ISR_EOBF)) ? 1UL : 0UL); +} +#endif /* USART_SMARTCARD_SUPPORT */ + +/** + * @brief Check if the USART Auto-Baud Rate Error Flag is set or not + * @note Macro IS_USART_AUTOBAUDRATE_DETECTION_INSTANCE(USARTx) can be used to check whether or not + * Auto Baud Rate detection feature is supported by the USARTx instance. + * @rmtoll ISR ABRE LL_USART_IsActiveFlag_ABRE + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_ABRE(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->ISR, USART_ISR_ABRE) == (USART_ISR_ABRE)) ? 1UL : 0UL); +} + +/** + * @brief Check if the USART Auto-Baud Rate Flag is set or not + * @note Macro IS_USART_AUTOBAUDRATE_DETECTION_INSTANCE(USARTx) can be used to check whether or not + * Auto Baud Rate detection feature is supported by the USARTx instance. + * @rmtoll ISR ABRF LL_USART_IsActiveFlag_ABR + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_ABR(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->ISR, USART_ISR_ABRF) == (USART_ISR_ABRF)) ? 1UL : 0UL); +} + +/** + * @brief Check if the USART Busy Flag is set or not + * @rmtoll ISR BUSY LL_USART_IsActiveFlag_BUSY + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_BUSY(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->ISR, USART_ISR_BUSY) == (USART_ISR_BUSY)) ? 1UL : 0UL); +} + +/** + * @brief Check if the USART Character Match Flag is set or not + * @rmtoll ISR CMF LL_USART_IsActiveFlag_CM + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_CM(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->ISR, USART_ISR_CMF) == (USART_ISR_CMF)) ? 1UL : 0UL); +} + +/** + * @brief Check if the USART Send Break Flag is set or not + * @rmtoll ISR SBKF LL_USART_IsActiveFlag_SBK + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_SBK(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->ISR, USART_ISR_SBKF) == (USART_ISR_SBKF)) ? 1UL : 0UL); +} + +/** + * @brief Check if the USART Receive Wake Up from mute mode Flag is set or not + * @rmtoll ISR RWU LL_USART_IsActiveFlag_RWU + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_RWU(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->ISR, USART_ISR_RWU) == (USART_ISR_RWU)) ? 1UL : 0UL); +} + +#if defined(USART_CR1_UESM) +#if defined(USART_CR3_WUFIE) +/** + * @brief Check if the USART Wake Up from stop mode Flag is set or not + * @note Macro IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not + * Wake-up from Stop mode feature is supported by the USARTx instance. + * @rmtoll ISR WUF LL_USART_IsActiveFlag_WKUP + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_WKUP(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->ISR, USART_ISR_WUF) == (USART_ISR_WUF)) ? 1UL : 0UL); +} + +#endif /* USART_CR3_WUFIE */ +#endif /* USART_CR1_UESM */ +/** + * @brief Check if the USART Transmit Enable Acknowledge Flag is set or not + * @rmtoll ISR TEACK LL_USART_IsActiveFlag_TEACK + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_TEACK(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->ISR, USART_ISR_TEACK) == (USART_ISR_TEACK)) ? 1UL : 0UL); +} + +/** + * @brief Check if the USART Receive Enable Acknowledge Flag is set or not + * @rmtoll ISR REACK LL_USART_IsActiveFlag_REACK + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_REACK(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->ISR, USART_ISR_REACK) == (USART_ISR_REACK)) ? 1UL : 0UL); +} + +/** + * @brief Clear Parity Error Flag + * @rmtoll ICR PECF LL_USART_ClearFlag_PE + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_ClearFlag_PE(USART_TypeDef *USARTx) +{ + WRITE_REG(USARTx->ICR, USART_ICR_PECF); +} + +/** + * @brief Clear Framing Error Flag + * @rmtoll ICR FECF LL_USART_ClearFlag_FE + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_ClearFlag_FE(USART_TypeDef *USARTx) +{ + WRITE_REG(USARTx->ICR, USART_ICR_FECF); +} + +/** + * @brief Clear Noise Error detected Flag + * @rmtoll ICR NCF LL_USART_ClearFlag_NE + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_ClearFlag_NE(USART_TypeDef *USARTx) +{ + WRITE_REG(USARTx->ICR, USART_ICR_NCF); +} + +/** + * @brief Clear OverRun Error Flag + * @rmtoll ICR ORECF LL_USART_ClearFlag_ORE + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_ClearFlag_ORE(USART_TypeDef *USARTx) +{ + WRITE_REG(USARTx->ICR, USART_ICR_ORECF); +} + +/** + * @brief Clear IDLE line detected Flag + * @rmtoll ICR IDLECF LL_USART_ClearFlag_IDLE + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_ClearFlag_IDLE(USART_TypeDef *USARTx) +{ + WRITE_REG(USARTx->ICR, USART_ICR_IDLECF); +} + +/** + * @brief Clear Transmission Complete Flag + * @rmtoll ICR TCCF LL_USART_ClearFlag_TC + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_ClearFlag_TC(USART_TypeDef *USARTx) +{ + WRITE_REG(USARTx->ICR, USART_ICR_TCCF); +} + + +#if defined(USART_LIN_SUPPORT) +/** + * @brief Clear LIN Break Detection Flag + * @note Macro IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not + * LIN feature is supported by the USARTx instance. + * @rmtoll ICR LBDCF LL_USART_ClearFlag_LBD + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_ClearFlag_LBD(USART_TypeDef *USARTx) +{ + WRITE_REG(USARTx->ICR, USART_ICR_LBDCF); +} +#endif /* USART_LIN_SUPPORT */ + +/** + * @brief Clear CTS Interrupt Flag + * @note Macro IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not + * Hardware Flow control feature is supported by the USARTx instance. + * @rmtoll ICR CTSCF LL_USART_ClearFlag_nCTS + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_ClearFlag_nCTS(USART_TypeDef *USARTx) +{ + WRITE_REG(USARTx->ICR, USART_ICR_CTSCF); +} + +/** + * @brief Clear Receiver Time Out Flag + * @rmtoll ICR RTOCF LL_USART_ClearFlag_RTO + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_ClearFlag_RTO(USART_TypeDef *USARTx) +{ + WRITE_REG(USARTx->ICR, USART_ICR_RTOCF); +} + +#if defined(USART_SMARTCARD_SUPPORT) +/** + * @brief Clear End Of Block Flag + * @note Macro IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not + * Smartcard feature is supported by the USARTx instance. + * @rmtoll ICR EOBCF LL_USART_ClearFlag_EOB + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_ClearFlag_EOB(USART_TypeDef *USARTx) +{ + WRITE_REG(USARTx->ICR, USART_ICR_EOBCF); +} +#endif /* USART_SMARTCARD_SUPPORT */ + +/** + * @brief Clear Character Match Flag + * @rmtoll ICR CMCF LL_USART_ClearFlag_CM + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_ClearFlag_CM(USART_TypeDef *USARTx) +{ + WRITE_REG(USARTx->ICR, USART_ICR_CMCF); +} + +#if defined(USART_CR1_UESM) +#if defined(USART_CR3_WUFIE) +/** + * @brief Clear Wake Up from stop mode Flag + * @note Macro IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not + * Wake-up from Stop mode feature is supported by the USARTx instance. + * @rmtoll ICR WUCF LL_USART_ClearFlag_WKUP + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_ClearFlag_WKUP(USART_TypeDef *USARTx) +{ + WRITE_REG(USARTx->ICR, USART_ICR_WUCF); +} + +#endif /* USART_CR3_WUFIE */ +#endif /* USART_CR1_UESM */ +/** + * @} + */ + +/** @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 Character Match Interrupt + * @rmtoll CR1 CMIE LL_USART_EnableIT_CM + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableIT_CM(USART_TypeDef *USARTx) +{ + ATOMIC_SET_BIT(USARTx->CR1, USART_CR1_CMIE); +} + +/** + * @brief Enable Receiver Timeout Interrupt + * @rmtoll CR1 RTOIE LL_USART_EnableIT_RTO + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableIT_RTO(USART_TypeDef *USARTx) +{ + ATOMIC_SET_BIT(USARTx->CR1, USART_CR1_RTOIE); +} + +#if defined(USART_SMARTCARD_SUPPORT) +/** + * @brief Enable End Of Block Interrupt + * @note Macro IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not + * Smartcard feature is supported by the USARTx instance. + * @rmtoll CR1 EOBIE LL_USART_EnableIT_EOB + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableIT_EOB(USART_TypeDef *USARTx) +{ + ATOMIC_SET_BIT(USARTx->CR1, USART_CR1_EOBIE); +} +#endif /* USART_SMARTCARD_SUPPORT */ + +#if defined(USART_LIN_SUPPORT) +/** + * @brief Enable LIN Break Detection Interrupt + * @note Macro 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); +} + +#endif /* USART_LIN_SUPPORT */ +/** + * @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_ISR register). + * 0: Interrupt is inhibited + * 1: An interrupt is generated when FE=1 or ORE=1 or NF=1 in the USARTx_ISR 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 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); +} + +#if defined(USART_CR1_UESM) +#if defined(USART_CR3_WUFIE) +/** + * @brief Enable Wake Up from Stop Mode Interrupt + * @note Macro IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not + * Wake-up from Stop mode feature is supported by the USARTx instance. + * @rmtoll CR3 WUFIE LL_USART_EnableIT_WKUP + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableIT_WKUP(USART_TypeDef *USARTx) +{ + ATOMIC_SET_BIT(USARTx->CR3, USART_CR3_WUFIE); +} + +#endif /* USART_CR3_WUFIE */ +#endif /* USART_CR1_UESM */ + +/** + * @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 Character Match Interrupt + * @rmtoll CR1 CMIE LL_USART_DisableIT_CM + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableIT_CM(USART_TypeDef *USARTx) +{ + ATOMIC_CLEAR_BIT(USARTx->CR1, USART_CR1_CMIE); +} + +/** + * @brief Disable Receiver Timeout Interrupt + * @rmtoll CR1 RTOIE LL_USART_DisableIT_RTO + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableIT_RTO(USART_TypeDef *USARTx) +{ + ATOMIC_CLEAR_BIT(USARTx->CR1, USART_CR1_RTOIE); +} + +#if defined(USART_SMARTCARD_SUPPORT) +/** + * @brief Disable End Of Block Interrupt + * @note Macro IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not + * Smartcard feature is supported by the USARTx instance. + * @rmtoll CR1 EOBIE LL_USART_DisableIT_EOB + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableIT_EOB(USART_TypeDef *USARTx) +{ + ATOMIC_CLEAR_BIT(USARTx->CR1, USART_CR1_EOBIE); +} +#endif /* USART_SMARTCARD_SUPPORT */ + +#if defined(USART_LIN_SUPPORT) +/** + * @brief Disable LIN Break Detection Interrupt + * @note Macro 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); +} +#endif /* USART_LIN_SUPPORT */ + +/** + * @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_ISR register). + * 0: Interrupt is inhibited + * 1: An interrupt is generated when FE=1 or ORE=1 or NF=1 in the USARTx_ISR 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 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); +} + +#if defined(USART_CR1_UESM) +#if defined(USART_CR3_WUFIE) +/** + * @brief Disable Wake Up from Stop Mode Interrupt + * @note Macro IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not + * Wake-up from Stop mode feature is supported by the USARTx instance. + * @rmtoll CR3 WUFIE LL_USART_DisableIT_WKUP + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableIT_WKUP(USART_TypeDef *USARTx) +{ + ATOMIC_CLEAR_BIT(USARTx->CR3, USART_CR3_WUFIE); +} + +#endif /* USART_CR3_WUFIE */ +#endif /* USART_CR1_UESM */ + +/** + * @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(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->CR1, USART_CR1_IDLEIE) == (USART_CR1_IDLEIE)) ? 1UL : 0UL); +} + +/** + * @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(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->CR1, USART_CR1_RXNEIE) == (USART_CR1_RXNEIE)) ? 1U : 0U); +} + +/** + * @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(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->CR1, USART_CR1_TCIE) == (USART_CR1_TCIE)) ? 1UL : 0UL); +} + +/** + * @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(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->CR1, USART_CR1_TXEIE) == (USART_CR1_TXEIE)) ? 1U : 0U); +} + +/** + * @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(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->CR1, USART_CR1_PEIE) == (USART_CR1_PEIE)) ? 1UL : 0UL); +} + +/** + * @brief Check if the USART Character Match Interrupt is enabled or disabled. + * @rmtoll CR1 CMIE LL_USART_IsEnabledIT_CM + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledIT_CM(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->CR1, USART_CR1_CMIE) == (USART_CR1_CMIE)) ? 1UL : 0UL); +} + +/** + * @brief Check if the USART Receiver Timeout Interrupt is enabled or disabled. + * @rmtoll CR1 RTOIE LL_USART_IsEnabledIT_RTO + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledIT_RTO(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->CR1, USART_CR1_RTOIE) == (USART_CR1_RTOIE)) ? 1UL : 0UL); +} + +#if defined(USART_SMARTCARD_SUPPORT) +/** + * @brief Check if the USART End Of Block Interrupt is enabled or disabled. + * @note Macro IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not + * Smartcard feature is supported by the USARTx instance. + * @rmtoll CR1 EOBIE LL_USART_IsEnabledIT_EOB + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledIT_EOB(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->CR1, USART_CR1_EOBIE) == (USART_CR1_EOBIE)) ? 1UL : 0UL); +} + +#endif /* USART_SMARTCARD_SUPPORT */ +#if defined(USART_LIN_SUPPORT) +/** + * @brief Check if the USART LIN Break Detection Interrupt is enabled or disabled. + * @note Macro 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(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->CR2, USART_CR2_LBDIE) == (USART_CR2_LBDIE)) ? 1UL : 0UL); +} +#endif /* USART_LIN_SUPPORT */ + +/** + * @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(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->CR3, USART_CR3_EIE) == (USART_CR3_EIE)) ? 1UL : 0UL); +} + +/** + * @brief Check if the USART CTS Interrupt is enabled or disabled. + * @note Macro 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(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->CR3, USART_CR3_CTSIE) == (USART_CR3_CTSIE)) ? 1UL : 0UL); +} + +#if defined(USART_CR1_UESM) +#if defined(USART_CR3_WUFIE) +/** + * @brief Check if the USART Wake Up from Stop Mode Interrupt is enabled or disabled. + * @note Macro IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not + * Wake-up from Stop mode feature is supported by the USARTx instance. + * @rmtoll CR3 WUFIE LL_USART_IsEnabledIT_WKUP + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledIT_WKUP(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->CR3, USART_CR3_WUFIE) == (USART_CR3_WUFIE)) ? 1UL : 0UL); +} + +#endif /* USART_CR3_WUFIE */ +#endif /* USART_CR1_UESM */ + +/** + * @} + */ + +/** @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(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->CR3, USART_CR3_DMAR) == (USART_CR3_DMAR)) ? 1UL : 0UL); +} + +/** + * @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(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->CR3, USART_CR3_DMAT) == (USART_CR3_DMAT)) ? 1UL : 0UL); +} + +/** + * @brief Enable DMA Disabling on Reception Error + * @rmtoll CR3 DDRE LL_USART_EnableDMADeactOnRxErr + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableDMADeactOnRxErr(USART_TypeDef *USARTx) +{ + SET_BIT(USARTx->CR3, USART_CR3_DDRE); +} + +/** + * @brief Disable DMA Disabling on Reception Error + * @rmtoll CR3 DDRE LL_USART_DisableDMADeactOnRxErr + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableDMADeactOnRxErr(USART_TypeDef *USARTx) +{ + CLEAR_BIT(USARTx->CR3, USART_CR3_DDRE); +} + +/** + * @brief Indicate if DMA Disabling on Reception Error is disabled + * @rmtoll CR3 DDRE LL_USART_IsEnabledDMADeactOnRxErr + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledDMADeactOnRxErr(const USART_TypeDef *USARTx) +{ + return ((READ_BIT(USARTx->CR3, USART_CR3_DDRE) == (USART_CR3_DDRE)) ? 1UL : 0UL); +} + +/** + * @brief Get the data register address used for DMA transfer + * @rmtoll RDR RDR LL_USART_DMA_GetRegAddr\n + * @rmtoll TDR TDR LL_USART_DMA_GetRegAddr + * @param USARTx USART Instance + * @param Direction This parameter can be one of the following values: + * @arg @ref LL_USART_DMA_REG_DATA_TRANSMIT + * @arg @ref LL_USART_DMA_REG_DATA_RECEIVE + * @retval Address of data register + */ +__STATIC_INLINE uint32_t LL_USART_DMA_GetRegAddr(const USART_TypeDef *USARTx, uint32_t Direction) +{ + uint32_t data_reg_addr; + + if (Direction == LL_USART_DMA_REG_DATA_TRANSMIT) + { + /* return address of TDR register */ + data_reg_addr = (uint32_t) &(USARTx->TDR); + } + else + { + /* return address of RDR register */ + data_reg_addr = (uint32_t) &(USARTx->RDR); + } + + return data_reg_addr; +} + +/** + * @} + */ + +/** @defgroup USART_LL_EF_Data_Management Data_Management + * @{ + */ + +/** + * @brief Read Receiver Data register (Receive Data value, 8 bits) + * @rmtoll RDR RDR LL_USART_ReceiveData8 + * @param USARTx USART Instance + * @retval Value between Min_Data=0x00 and Max_Data=0xFF + */ +__STATIC_INLINE uint8_t LL_USART_ReceiveData8(const USART_TypeDef *USARTx) +{ + return (uint8_t)(READ_BIT(USARTx->RDR, USART_RDR_RDR) & 0xFFU); +} + +/** + * @brief Read Receiver Data register (Receive Data value, 9 bits) + * @rmtoll RDR RDR LL_USART_ReceiveData9 + * @param USARTx USART Instance + * @retval Value between Min_Data=0x00 and Max_Data=0x1FF + */ +__STATIC_INLINE uint16_t LL_USART_ReceiveData9(const USART_TypeDef *USARTx) +{ + return (uint16_t)(READ_BIT(USARTx->RDR, USART_RDR_RDR)); +} + +/** + * @brief Write in Transmitter Data Register (Transmit Data value, 8 bits) + * @rmtoll TDR TDR 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->TDR = Value; +} + +/** + * @brief Write in Transmitter Data Register (Transmit Data value, 9 bits) + * @rmtoll TDR TDR 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->TDR = (uint16_t)(Value & 0x1FFUL); +} + +/** + * @} + */ + +/** @defgroup USART_LL_EF_Execution Execution + * @{ + */ + +/** + * @brief Request an Automatic Baud Rate measurement on next received data frame + * @note Macro IS_USART_AUTOBAUDRATE_DETECTION_INSTANCE(USARTx) can be used to check whether or not + * Auto Baud Rate detection feature is supported by the USARTx instance. + * @rmtoll RQR ABRRQ LL_USART_RequestAutoBaudRate + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_RequestAutoBaudRate(USART_TypeDef *USARTx) +{ + SET_BIT(USARTx->RQR, (uint16_t)USART_RQR_ABRRQ); +} + +/** + * @brief Request Break sending + * @rmtoll RQR SBKRQ LL_USART_RequestBreakSending + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_RequestBreakSending(USART_TypeDef *USARTx) +{ + SET_BIT(USARTx->RQR, (uint16_t)USART_RQR_SBKRQ); +} + +/** + * @brief Put USART in mute mode and set the RWU flag + * @rmtoll RQR MMRQ LL_USART_RequestEnterMuteMode + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_RequestEnterMuteMode(USART_TypeDef *USARTx) +{ + SET_BIT(USARTx->RQR, (uint16_t)USART_RQR_MMRQ); +} + +/** + * @brief Request a Receive Data flush + * @note Allows to discard the received data without reading them, and avoid an overrun + * condition. + * @rmtoll RQR RXFRQ LL_USART_RequestRxDataFlush + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_RequestRxDataFlush(USART_TypeDef *USARTx) +{ + SET_BIT(USARTx->RQR, (uint16_t)USART_RQR_RXFRQ); +} + +#if defined(USART_SMARTCARD_SUPPORT) +/** + * @brief Request a Transmit data flush + * @note Macro IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not + * Smartcard feature is supported by the USARTx instance. + * @rmtoll RQR TXFRQ LL_USART_RequestTxDataFlush + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_RequestTxDataFlush(USART_TypeDef *USARTx) +{ + SET_BIT(USARTx->RQR, (uint16_t)USART_RQR_TXFRQ); +} +#endif /*USART_SMARTCARD_SUPPORT*/ + +/** + * @} + */ + +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup USART_LL_EF_Init Initialization and de-initialization functions + * @{ + */ +ErrorStatus LL_USART_DeInit(const USART_TypeDef *USARTx); +ErrorStatus LL_USART_Init(USART_TypeDef *USARTx, const LL_USART_InitTypeDef *USART_InitStruct); +void LL_USART_StructInit(LL_USART_InitTypeDef *USART_InitStruct); +ErrorStatus LL_USART_ClockInit(USART_TypeDef *USARTx, const LL_USART_ClockInitTypeDef *USART_ClockInitStruct); +void LL_USART_ClockStructInit(LL_USART_ClockInitTypeDef *USART_ClockInitStruct); +/** + * @} + */ +#endif /* USE_FULL_LL_DRIVER */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* USART1 || USART2 || USART3 || UART4 || UART5 || USART6 || USART7 || USART8 */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* STM32F0xx_LL_USART_H */ + diff --git a/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_utils.h b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_utils.h new file mode 100644 index 0000000..2a6091b --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_utils.h @@ -0,0 +1,272 @@ +/** + ****************************************************************************** + * @file stm32f0xx_ll_utils.h + * @author MCD Application Team + * @brief Header file of UTILS 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. + * + ****************************************************************************** + @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 + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F0xx_LL_UTILS_H +#define __STM32F0xx_LL_UTILS_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f0xx.h" + +/** @addtogroup STM32F0xx_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 + +/** + * @} + */ + +/* 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 PLLMul; /*!< Multiplication factor for PLL VCO input clock. + This parameter can be a value of @ref RCC_LL_EC_PLL_MUL + + This feature can be modified afterwards using unitary function + @ref LL_RCC_PLL_ConfigDomain_SYS(). */ + +#if defined(RCC_PLLSRC_PREDIV1_SUPPORT) + uint32_t PLLDiv; /*!< Division factor for PLL VCO output clock. + This parameter can be a value of @ref RCC_LL_EC_PREDIV_DIV + + This feature can be modified afterwards using unitary function + @ref LL_RCC_PLL_ConfigDomain_SYS(). */ +#else + uint32_t Prediv; /*!< Division factor for HSE used as PLL clock source. + This parameter can be a value of @ref RCC_LL_EC_PREDIV_DIV + + This feature can be modified afterwards using unitary function + @ref LL_RCC_PLL_ConfigDomain_SYS(). */ +#endif /* RCC_PLLSRC_PREDIV1_SUPPORT */ +} 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(). */ +} 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 */ +/** + * @} + */ + +/** + * @} + */ + +/* 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]: X and Y coordinates on the wafer expressed in BCD format + */ +__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]: Wafer number (UID[39:32]) & LOT_NUM[23:0] (UID[63:40]) + */ +__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]: Lot number (ASCII encoded) - LOT_NUM[55:24] + */ +__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 (uint16_t)(READ_REG(*((uint32_t *)FLASHSIZE_BASE_ADDRESS))); +} + + +/** + * @} + */ + +/** @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); +#if defined(FLASH_ACR_LATENCY) +ErrorStatus LL_SetFlashLatency(uint32_t Frequency); +#endif /* FLASH_ACR_LATENCY */ +ErrorStatus LL_PLL_ConfigSystemClock_HSI(LL_UTILS_PLLInitTypeDef *UTILS_PLLInitStruct, + LL_UTILS_ClkInitTypeDef *UTILS_ClkInitStruct); +#if defined(RCC_CFGR_SW_HSI48) +ErrorStatus LL_PLL_ConfigSystemClock_HSI48(LL_UTILS_PLLInitTypeDef *UTILS_PLLInitStruct, + LL_UTILS_ClkInitTypeDef *UTILS_ClkInitStruct); +#endif /*RCC_CFGR_SW_HSI48*/ +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 /* __STM32F0xx_LL_UTILS_H */ diff --git a/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/LICENSE.txt b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/LICENSE.txt new file mode 100644 index 0000000..b40364c --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_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/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c new file mode 100644 index 0000000..fdeb28a --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c @@ -0,0 +1,515 @@ +/** + ****************************************************************************** + * @file stm32f0xx_hal.c + * @author MCD Application Team + * @brief HAL module driver. + * This is the common part of the HAL initialization + * + ****************************************************************************** + * @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 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: + (+) HAL Initialization and de-initialization functions + (+) HAL Control functions + + @endverbatim + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f0xx_hal.h" + +/** @addtogroup STM32F0xx_HAL_Driver + * @{ + */ + +/** @defgroup HAL HAL + * @brief HAL module driver. + * @{ + */ + +#ifdef HAL_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/** @defgroup HAL_Private_Constants HAL Private Constants + * @{ + */ +/** + * @brief STM32F0xx HAL Driver version number + */ +#define __STM32F0xx_HAL_VERSION_MAIN (0x01U) /*!< [31:24] main version */ +#define __STM32F0xx_HAL_VERSION_SUB1 (0x07U) /*!< [23:16] sub1 version */ +#define __STM32F0xx_HAL_VERSION_SUB2 (0x07U) /*!< [15:8] sub2 version */ +#define __STM32F0xx_HAL_VERSION_RC (0x00U) /*!< [7:0] release candidate */ +#define __STM32F0xx_HAL_VERSION ((__STM32F0xx_HAL_VERSION_MAIN << 24U)\ + |(__STM32F0xx_HAL_VERSION_SUB1 << 16U)\ + |(__STM32F0xx_HAL_VERSION_SUB2 << 8U )\ + |(__STM32F0xx_HAL_VERSION_RC)) + +#define IDCODE_DEVID_MASK (0x00000FFFU) +/** + * @} + */ + +/* Private macro -------------------------------------------------------------*/ +/** @defgroup HAL_Private_Macros HAL Private Macros + * @{ + */ +/** + * @} + */ + +/* Exported variables ---------------------------------------------------------*/ +/** @defgroup HAL_Private_Variables HAL Exported 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 -----------------------------------------------*/ +/* Exported 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 de-initialization 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 configures the Flash prefetch, + * Configures time base source, NVIC and Low level hardware + * @note This function is called at the beginning of program after reset and before + * the clock configuration + * @note The time base configuration is based on HSI clock when exiting from Reset. + * Once done, time base tick start incrementing. + * In the default implementation,Systick is used as source of time base. + * The tick variable is incremented each 1ms in its ISR. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_Init(void) +{ + /* Configure Flash prefetch */ +#if (PREFETCH_ENABLE != 0) + __HAL_FLASH_PREFETCH_BUFFER_ENABLE(); +#endif /* PREFETCH_ENABLE */ + + /* 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-Initialize common part of the HAL and stops the SysTick + * of time base. + * @note 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_AHB_FORCE_RESET(); + __HAL_RCC_AHB_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 frequency. + * Value of @ref HAL_TickFreqTypeDef. + */ +HAL_TickFreqTypeDef HAL_GetTickFreq(void) +{ + return uwTickFreq; +} + +/** + * @brief This function provides accurate 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 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 */ + CLEAR_BIT(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 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 */ + SET_BIT(SysTick->CTRL,SysTick_CTRL_TICKINT_Msk); +} + +/** + * @brief This method returns the HAL revision + * @retval version 0xXYZR (8bits for each decimal, R for RC) + */ +uint32_t HAL_GetHalVersion(void) +{ + return __STM32F0xx_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 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)))); +} + +/** + * @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); +} + +/** + * @} + */ + +/** + * @} + */ + +#endif /* HAL_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ + + diff --git a/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.c b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.c new file mode 100644 index 0000000..2569e81 --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.c @@ -0,0 +1,339 @@ +/** + ****************************************************************************** + * @file stm32f0xx_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-M0 exceptions are managed by CMSIS functions. + (#) Enable and Configure the priority of the selected IRQ Channels. + The priority can be 0..3. + + -@- Lower priority values gives higher priority. + -@- Priority Order: + (#@) Lowest priority. + (#@) Lowest hardware priority (IRQn position). + + (#) Configure the priority of the selected IRQ Channels using HAL_NVIC_SetPriority() + + (#) Enable the selected IRQ Channels using HAL_NVIC_EnableIRQ() + + -@- Negative value of IRQn_Type are not allowed. + + + [..] + *** 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 (0x03). + (++) 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_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK_DIV8) just after the + HAL_SYSTICK_Config() function call. The HAL_SYSTICK_CLKSourceConfig() macro is defined + inside the stm32f0xx_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) 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. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f0xx_hal.h" + +/** @addtogroup STM32F0xx_HAL_Driver + * @{ + */ + +/** @defgroup CORTEX CORTEX + * @brief CORTEX CORTEX HAL module driver + * @{ + */ + +#ifdef HAL_CORTEX_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* 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 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 stm32f0xx.h file) + * @param PreemptPriority The preemption priority for the IRQn channel. + * This parameter can be a value between 0 and 3. + * A lower priority value indicates a higher priority + * @param SubPriority the subpriority level for the IRQ channel. + * with stm32f0xx devices, this parameter is a dummy value and it is ignored, because + * no subpriority supported in Cortex M0 based products. + * @retval None + */ +void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority) +{ + /* Check the parameters */ + assert_param(IS_NVIC_PREEMPTION_PRIORITY(PreemptPriority)); + NVIC_SetPriority(IRQn,PreemptPriority); +} + +/** + * @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 (stm32f0xxxx.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 (stm32f0xxxx.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) functionalities. + + +@endverbatim + * @{ + */ + + +/** + * @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 (stm32f0xxxx.h)) + * @retval None + */ +uint32_t HAL_NVIC_GetPriority(IRQn_Type IRQn) +{ + /* Get priority for Cortex-M system or device specific interrupts */ + return NVIC_GetPriority(IRQn); +} + +/** + * @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 (stm32f0xxxx.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 (stm32f0xxxx.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 (stm32f0xxxx.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 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/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.c b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.c new file mode 100644 index 0000000..f2e750f --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.c @@ -0,0 +1,899 @@ +/** + ****************************************************************************** + * @file stm32f0xx_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 Channel + (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 Channel, program the required configuration through the following parameters: + Transfer Direction, Source and Destination data formats, + Circular or Normal mode, Channel Priority level, Source and Destination Increment mode, + using HAL_DMA_Init() function. + + (#) Use HAL_DMA_GetState() function to return the DMA state and HAL_DMA_GetError() in case of error + detection. + + (#) Use HAL_DMA_Abort() function to abort the current transfer + + -@- In Memory-to-Memory transfer mode, Circular mode is not allowed. + *** 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. + + *** 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_Channel_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). + + *** DMA HAL driver macros list *** + ============================================= + [..] + Below the list of most used macros in DMA HAL driver. + + [..] + (@) You can refer to the DMA HAL driver header file for more useful macros + + @endverbatim + ****************************************************************************** + * @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. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f0xx_hal.h" + +/** @addtogroup STM32F0xx_HAL_Driver + * @{ + */ + + +/** @defgroup DMA DMA + * @brief DMA HAL module driver + * @{ + */ + +#ifdef HAL_DMA_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/** @defgroup DMA_Private_Functions DMA Private Functions + * @{ + */ +static void DMA_SetConfig(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength); +static void DMA_CalcBaseAndBitshift(DMA_HandleTypeDef *hdma); +/** + * @} + */ + +/* Exported functions ---------------------------------------------------------*/ + +/** @defgroup DMA_Exported_Functions DMA Exported Functions + * @{ + */ + +/** @defgroup DMA_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and de-initialization functions + * +@verbatim + =============================================================================== + ##### Initialization and de-initialization functions ##### + =============================================================================== + [..] + This section provides functions allowing to initialize the DMA Channel source + and destination addresses, incrementation and data sizes, transfer direction, + circular/normal mode selection, memory-to-memory mode selection and Channel 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 initialize the associated handle. + * @param hdma Pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Channel. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMA_Init(DMA_HandleTypeDef *hdma) +{ + uint32_t tmp = 0U; + + /* Check the DMA handle allocation */ + if (NULL == hdma) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_DMA_ALL_INSTANCE(hdma->Instance)); + 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)); + + /* Change DMA peripheral state */ + hdma->State = HAL_DMA_STATE_BUSY; + + /* Get the CR register value */ + tmp = hdma->Instance->CCR; + + /* Clear PL, MSIZE, PSIZE, MINC, PINC, CIRC, DIR bits */ + tmp &= ((uint32_t)~(DMA_CCR_PL | DMA_CCR_MSIZE | DMA_CCR_PSIZE | \ + DMA_CCR_MINC | DMA_CCR_PINC | DMA_CCR_CIRC | \ + DMA_CCR_DIR)); + + /* Prepare the DMA Channel configuration */ + tmp |= hdma->Init.Direction | + hdma->Init.PeriphInc | hdma->Init.MemInc | + hdma->Init.PeriphDataAlignment | hdma->Init.MemDataAlignment | + hdma->Init.Mode | hdma->Init.Priority; + + /* Write to DMA Channel CR register */ + hdma->Instance->CCR = tmp; + + /* Initialize DmaBaseAddress and ChannelIndex parameters used + by HAL_DMA_IRQHandler() and HAL_DMA_PollForTransfer() */ + DMA_CalcBaseAndBitshift(hdma); + + /* Initialise the error code */ + hdma->ErrorCode = HAL_DMA_ERROR_NONE; + + /* Initialize the DMA state*/ + hdma->State = HAL_DMA_STATE_READY; + + /* Allocate lock resource and initialize it */ + hdma->Lock = HAL_UNLOCKED; + + return HAL_OK; +} + +/** + * @brief DeInitialize the DMA peripheral + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Channel. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMA_DeInit(DMA_HandleTypeDef *hdma) +{ + /* Check the DMA handle allocation */ + if (NULL == hdma) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_DMA_ALL_INSTANCE(hdma->Instance)); + + /* Disable the selected DMA Channelx */ + hdma->Instance->CCR &= ~DMA_CCR_EN; + + /* Reset DMA Channel control register */ + hdma->Instance->CCR = 0U; + + /* Reset DMA Channel Number of Data to Transfer register */ + hdma->Instance->CNDTR = 0U; + + /* Reset DMA Channel peripheral address register */ + hdma->Instance->CPAR = 0U; + + /* Reset DMA Channel memory address register */ + hdma->Instance->CMAR = 0U; + + /* Get DMA Base Address */ + DMA_CalcBaseAndBitshift(hdma); + + /* Clear all flags */ + hdma->DmaBaseAddress->IFCR = DMA_FLAG_GL1 << hdma->ChannelIndex; + + /* Clean callbacks */ + hdma->XferCpltCallback = NULL; + hdma->XferHalfCpltCallback = NULL; + hdma->XferErrorCallback = NULL; + hdma->XferAbortCallback = NULL; + + /* 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; +} + +/** + * @} + */ + +/** @defgroup DMA_Exported_Functions_Group2 Input and Output operation functions + * @brief I/O operation functions + * +@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 Start the DMA Transfer. + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Channel. + * @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; + + hdma->ErrorCode = HAL_DMA_ERROR_NONE; + + /* Disable the peripheral */ + hdma->Instance->CCR &= ~DMA_CCR_EN; + + /* Configure the source, destination address and the data length */ + DMA_SetConfig(hdma, SrcAddress, DstAddress, DataLength); + + /* Enable the Peripheral */ + hdma->Instance->CCR |= DMA_CCR_EN; + } + else + { + /* Process Unlocked */ + __HAL_UNLOCK(hdma); + + /* Remain BUSY */ + 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 Channel. + * @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; + + /* 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; + + hdma->ErrorCode = HAL_DMA_ERROR_NONE; + + /* Disable the peripheral */ + hdma->Instance->CCR &= ~DMA_CCR_EN; + + /* Configure the source, destination address and the data length */ + DMA_SetConfig(hdma, SrcAddress, DstAddress, DataLength); + + /* Enable the transfer complete, & transfer error interrupts */ + /* Half transfer interrupt is optional: enable it only if associated callback is available */ + if (NULL != hdma->XferHalfCpltCallback) + { + hdma->Instance->CCR |= (DMA_IT_TC | DMA_IT_HT | DMA_IT_TE); + } + else + { + hdma->Instance->CCR |= (DMA_IT_TC | DMA_IT_TE); + hdma->Instance->CCR &= ~DMA_IT_HT; + } + + /* Enable the Peripheral */ + hdma->Instance->CCR |= DMA_CCR_EN; + } + else + { + /* Process Unlocked */ + __HAL_UNLOCK(hdma); + + /* Remain BUSY */ + status = HAL_BUSY; + } + + return status; +} + +/** + * @brief Abort the DMA Transfer. + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Channel. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma) +{ + if (hdma->State != HAL_DMA_STATE_BUSY) + { + /* no transfer ongoing */ + hdma->ErrorCode = HAL_DMA_ERROR_NO_XFER; + + /* Process Unlocked */ + __HAL_UNLOCK(hdma); + + return HAL_ERROR; + } + else + { + /* Disable DMA IT */ + hdma->Instance->CCR &= ~(DMA_IT_TC | DMA_IT_HT | DMA_IT_TE); + + /* Disable the channel */ + hdma->Instance->CCR &= ~DMA_CCR_EN; + + /* Clear all flags */ + hdma->DmaBaseAddress->IFCR = (DMA_FLAG_GL1 << hdma->ChannelIndex); + } + /* Change the DMA state*/ + hdma->State = HAL_DMA_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hdma); + + return HAL_OK; +} + +/** + * @brief Abort 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) +{ + HAL_StatusTypeDef status = HAL_OK; + + if (HAL_DMA_STATE_BUSY != hdma->State) + { + /* no transfer ongoing */ + hdma->ErrorCode = HAL_DMA_ERROR_NO_XFER; + + status = HAL_ERROR; + } + else + { + + /* Disable DMA IT */ + hdma->Instance->CCR &= ~(DMA_IT_TC | DMA_IT_HT | DMA_IT_TE); + + /* Disable the channel */ + hdma->Instance->CCR &= ~DMA_CCR_EN; + + /* Clear all flags */ + hdma->DmaBaseAddress->IFCR = DMA_FLAG_GL1 << hdma->ChannelIndex; + + /* Change the DMA state */ + hdma->State = HAL_DMA_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hdma); + + /* Call User Abort callback */ + if (hdma->XferAbortCallback != NULL) + { + hdma->XferAbortCallback(hdma); + } + } + return status; +} + +/** + * @brief Polling for transfer complete. + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Channel. + * @param CompleteLevel Specifies the DMA level complete. + * @param Timeout Timeout duration. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMA_PollForTransfer(DMA_HandleTypeDef *hdma, uint32_t CompleteLevel, uint32_t Timeout) +{ + uint32_t temp; + uint32_t tickstart = 0U; + + 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 */ + if (RESET != (hdma->Instance->CCR & DMA_CCR_CIRC)) + { + hdma->ErrorCode = HAL_DMA_ERROR_NOT_SUPPORTED; + return HAL_ERROR; + } + + /* Get the level transfer complete flag */ + if (HAL_DMA_FULL_TRANSFER == CompleteLevel) + { + /* Transfer Complete flag */ + temp = DMA_FLAG_TC1 << hdma->ChannelIndex; + } + else + { + /* Half Transfer Complete flag */ + temp = DMA_FLAG_HT1 << hdma->ChannelIndex; + } + + /* Get tick */ + tickstart = HAL_GetTick(); + + while (RESET == (hdma->DmaBaseAddress->ISR & temp)) + { + if (RESET != (hdma->DmaBaseAddress->ISR & (DMA_FLAG_TE1 << hdma->ChannelIndex))) + { + /* When a DMA transfer error occurs */ + /* A hardware clear of its EN bits is performed */ + /* Clear all flags */ + hdma->DmaBaseAddress->IFCR = DMA_FLAG_GL1 << hdma->ChannelIndex; + + /* Update error code */ + hdma->ErrorCode = HAL_DMA_ERROR_TE; + + /* Change the DMA state */ + hdma->State = HAL_DMA_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hdma); + + return HAL_ERROR; + } + /* Check for the Timeout */ + 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_ERROR; + } + } + } + + if (HAL_DMA_FULL_TRANSFER == CompleteLevel) + { + /* Clear the transfer complete flag */ + hdma->DmaBaseAddress->IFCR = DMA_FLAG_TC1 << hdma->ChannelIndex; + + /* The selected Channelx EN bit is cleared (DMA is disabled and + all transfers are complete) */ + hdma->State = HAL_DMA_STATE_READY; + } + else + { + /* Clear the half transfer complete flag */ + hdma->DmaBaseAddress->IFCR = DMA_FLAG_HT1 << hdma->ChannelIndex; + } + + /* Process unlocked */ + __HAL_UNLOCK(hdma); + + return HAL_OK; +} + +/** + * @brief Handle DMA interrupt request. + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Channel. + * @retval None + */ +void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma) +{ + uint32_t flag_it = hdma->DmaBaseAddress->ISR; + uint32_t source_it = hdma->Instance->CCR; + + /* Half Transfer Complete Interrupt management ******************************/ + if ((RESET != (flag_it & (DMA_FLAG_HT1 << hdma->ChannelIndex))) && (RESET != (source_it & DMA_IT_HT))) + { + /* Disable the half transfer interrupt if the DMA mode is not CIRCULAR */ + if ((hdma->Instance->CCR & DMA_CCR_CIRC) == 0U) + { + /* Disable the half transfer interrupt */ + hdma->Instance->CCR &= ~DMA_IT_HT; + } + + /* Clear the half transfer complete flag */ + hdma->DmaBaseAddress->IFCR = DMA_FLAG_HT1 << hdma->ChannelIndex; + + /* DMA peripheral state is not updated in Half Transfer */ + /* State is updated only in Transfer Complete case */ + + if (hdma->XferHalfCpltCallback != NULL) + { + /* Half transfer callback */ + hdma->XferHalfCpltCallback(hdma); + } + } + + /* Transfer Complete Interrupt management ***********************************/ + else if ((RESET != (flag_it & (DMA_FLAG_TC1 << hdma->ChannelIndex))) && (RESET != (source_it & DMA_IT_TC))) + { + if ((hdma->Instance->CCR & DMA_CCR_CIRC) == 0U) + { + /* Disable the transfer complete & transfer error interrupts */ + /* if the DMA mode is not CIRCULAR */ + hdma->Instance->CCR &= ~(DMA_IT_TC | DMA_IT_TE); + + /* Change the DMA state */ + hdma->State = HAL_DMA_STATE_READY; + } + + /* Clear the transfer complete flag */ + hdma->DmaBaseAddress->IFCR = DMA_FLAG_TC1 << hdma->ChannelIndex; + + /* Process Unlocked */ + __HAL_UNLOCK(hdma); + + if (hdma->XferCpltCallback != NULL) + { + /* Transfer complete callback */ + hdma->XferCpltCallback(hdma); + } + } + + /* Transfer Error Interrupt management ***************************************/ + else if ((RESET != (flag_it & (DMA_FLAG_TE1 << hdma->ChannelIndex))) && (RESET != (source_it & DMA_IT_TE))) + { + /* When a DMA transfer error occurs */ + /* A hardware clear of its EN bits is performed */ + /* Then, disable all DMA interrupts */ + hdma->Instance->CCR &= ~(DMA_IT_TC | DMA_IT_HT | DMA_IT_TE); + + /* Clear all flags */ + hdma->DmaBaseAddress->IFCR = DMA_FLAG_GL1 << hdma->ChannelIndex; + + /* Update error code */ + hdma->ErrorCode = HAL_DMA_ERROR_TE; + + /* 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 HAL_DMA_CallbackIDTypeDef ENUM 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_ERROR_CB_ID: + hdma->XferErrorCallback = pCallback; + break; + + case HAL_DMA_XFER_ABORT_CB_ID: + hdma->XferAbortCallback = pCallback; + break; + + default: + status = HAL_ERROR; + break; + } + } + else + { + 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_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->XferErrorCallback = NULL; + hdma->XferAbortCallback = NULL; + break; + + default: + status = HAL_ERROR; + break; + } + } + else + { + status = HAL_ERROR; + } + + /* Release Lock */ + __HAL_UNLOCK(hdma); + + return status; +} + +/** + * @} + */ + +/** @defgroup DMA_Exported_Functions_Group3 Peripheral State functions + * @brief Peripheral State functions + * +@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 Channel. + * @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 Channel. + * @retval DMA Error Code + */ +uint32_t HAL_DMA_GetError(DMA_HandleTypeDef *hdma) +{ + return hdma->ErrorCode; +} + +/** + * @} + */ + +/** + * @} + */ + +/** @addtogroup DMA_Private_Functions + * @{ + */ + +/** + * @brief Set the DMA Transfer parameters. + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Channel. + * @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 all flags */ + hdma->DmaBaseAddress->IFCR = (DMA_FLAG_GL1 << hdma->ChannelIndex); + + /* Configure DMA Channel data length */ + hdma->Instance->CNDTR = DataLength; + + /* Memory to Peripheral */ + if ((hdma->Init.Direction) == DMA_MEMORY_TO_PERIPH) + { + /* Configure DMA Channel destination address */ + hdma->Instance->CPAR = DstAddress; + + /* Configure DMA Channel source address */ + hdma->Instance->CMAR = SrcAddress; + } + /* Peripheral to Memory */ + else + { + /* Configure DMA Channel source address */ + hdma->Instance->CPAR = SrcAddress; + + /* Configure DMA Channel destination address */ + hdma->Instance->CMAR = DstAddress; + } +} + +/** + * @brief set the DMA base address and channel index depending on DMA instance + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Stream. + * @retval None + */ +static void DMA_CalcBaseAndBitshift(DMA_HandleTypeDef *hdma) +{ +#if defined (DMA2) + /* calculation of the channel index */ + if ((uint32_t)(hdma->Instance) < (uint32_t)(DMA2_Channel1)) + { + /* DMA1 */ + hdma->ChannelIndex = (((uint32_t)hdma->Instance - (uint32_t)DMA1_Channel1) / ((uint32_t)DMA1_Channel2 - (uint32_t)DMA1_Channel1)) << 2U; + hdma->DmaBaseAddress = DMA1; + } + else + { + /* DMA2 */ + hdma->ChannelIndex = (((uint32_t)hdma->Instance - (uint32_t)DMA2_Channel1) / ((uint32_t)DMA2_Channel2 - (uint32_t)DMA2_Channel1)) << 2U; + hdma->DmaBaseAddress = DMA2; + } +#else + /* calculation of the channel index */ + /* DMA1 */ + hdma->ChannelIndex = (((uint32_t)hdma->Instance - (uint32_t)DMA1_Channel1) / ((uint32_t)DMA1_Channel2 - (uint32_t)DMA1_Channel1)) << 2U; + hdma->DmaBaseAddress = DMA1; +#endif +} + +/** + * @} + */ + +/** + * @} + */ +#endif /* HAL_DMA_MODULE_ENABLED */ + +/** + * @} + */ + +/** + * @} + */ + diff --git a/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.c b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.c new file mode 100644 index 0000000..5247854 --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.c @@ -0,0 +1,547 @@ +/** + ****************************************************************************** + * @file stm32f0xx_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) 2019 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 "stm32f0xx_hal.h" + +/** @addtogroup STM32F0xx_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]; + pExtiConfig->GPIOSel = (regval >> (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u))) & SYSCFG_EXTICR1_EXTI0; + } + } + + 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/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c new file mode 100644 index 0000000..770ed01 --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c @@ -0,0 +1,691 @@ +/** + ****************************************************************************** + * @file stm32f0xx_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 State 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. + + [..] The FLASH main features are: + (+) Flash memory read operations + (+) Flash memory program/erase operations + (+) Read / write protections + (+) Prefetch on I-Code + (+) Option Bytes programming + + + ##### How to use this driver ##### + ============================================================================== + [..] + This driver provides functions and macros to configure and program the FLASH + memory of all STM32F0xx devices. + + (#) FLASH Memory I/O Programming functions: this group includes all needed + functions to erase and program the main memory: + (++) Lock and Unlock the FLASH interface + (++) Erase function: Erase page, erase all pages + (++) Program functions: half word, word and doubleword + (#) FLASH Option Bytes Programming functions: this group includes all needed + functions to manage the Option Bytes: + (++) Lock and Unlock the Option Bytes + (++) Set/Reset the write protection + (++) Set the Read protection Level + (++) Program the user Option Bytes + (++) Launch the Option Bytes loader + (++) Erase Option Bytes + (++) Program the data Option Bytes + (++) Get the Write protection. + (++) Get the user option bytes. + + (#) Interrupts and flags management functions : this group + includes all needed functions to: + (++) Handle FLASH interrupts + (++) Wait for last FLASH operation according to its status + (++) Get error flag status + + [..] In addition to these function, this driver includes a set of macros allowing + to handle the following operations: + + (+) Set/Get the latency + (+) Enable/Disable the prefetch buffer + (+) Enable/Disable the FLASH interrupts + (+) Monitor the FLASH flags status + + @endverbatim + ****************************************************************************** + * @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. + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f0xx_hal.h" + +/** @addtogroup STM32F0xx_HAL_Driver + * @{ + */ + +#ifdef HAL_FLASH_MODULE_ENABLED + +/** @defgroup FLASH FLASH + * @brief FLASH HAL module driver + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/** @defgroup FLASH_Private_Constants FLASH Private Constants + * @{ + */ +/** + * @} + */ + +/* Private macro ---------------------------- ---------------------------------*/ +/** @defgroup FLASH_Private_Macros FLASH Private Macros + * @{ + */ + +/** + * @} + */ + +/* Private variables ---------------------------------------------------------*/ +/** @defgroup FLASH_Private_Variables FLASH Private Variables + * @{ + */ +/* Variables used for Erase pages under interruption*/ +FLASH_ProcessTypeDef pFlash; +/** + * @} + */ + +/* Private function prototypes -----------------------------------------------*/ +/** @defgroup FLASH_Private_Functions FLASH Private Functions + * @{ + */ +static void FLASH_Program_HalfWord(uint32_t Address, uint16_t Data); +static void FLASH_SetErrorCode(void); +extern void FLASH_PageErase(uint32_t PageAddress); +/** + * @} + */ + +/* Exported functions ---------------------------------------------------------*/ +/** @defgroup FLASH_Exported_Functions FLASH Exported Functions + * @{ + */ + +/** @defgroup FLASH_Exported_Functions_Group1 Programming operation functions + * @brief Programming operation functions + * +@verbatim +@endverbatim + * @{ + */ + +/** + * @brief Program halfword, word or double word at a specified address + * @note The function HAL_FLASH_Unlock() should be called before to unlock the FLASH interface + * The function HAL_FLASH_Lock() should be called after to lock the FLASH interface + * + * @note If an erase and a program operations are requested simultaneously, + * the erase operation is performed before the program one. + * + * @note FLASH should be previously erased before new programming (only exception to this + * is when 0x0000 is programmed) + * + * @param TypeProgram Indicate the way to program at a specified address. + * This parameter can be a value of @ref FLASH_Type_Program + * @param Address Specifie the address to be programmed. + * @param Data Specifie 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; + uint8_t index = 0U; + uint8_t nbiterations = 0U; + + /* Process Locked */ + __HAL_LOCK(&pFlash); + + /* Check the parameters */ + assert_param(IS_FLASH_TYPEPROGRAM(TypeProgram)); + assert_param(IS_FLASH_PROGRAM_ADDRESS(Address)); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE); + + if(status == HAL_OK) + { + if(TypeProgram == FLASH_TYPEPROGRAM_HALFWORD) + { + /* Program halfword (16-bit) at a specified address. */ + nbiterations = 1U; + } + else if(TypeProgram == FLASH_TYPEPROGRAM_WORD) + { + /* Program word (32-bit = 2*16-bit) at a specified address. */ + nbiterations = 2U; + } + else + { + /* Program double word (64-bit = 4*16-bit) at a specified address. */ + nbiterations = 4U; + } + + for (index = 0U; index < nbiterations; index++) + { + FLASH_Program_HalfWord((Address + (2U*index)), (uint16_t)(Data >> (16U*index))); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE); + + /* If the program operation is completed, disable the PG Bit */ + CLEAR_BIT(FLASH->CR, FLASH_CR_PG); + /* In case of error, stop programming procedure */ + if (status != HAL_OK) + { + break; + } + } + } + + /* Process Unlocked */ + __HAL_UNLOCK(&pFlash); + + return status; +} + +/** + * @brief Program halfword, word or double word at a specified address with interrupt enabled. + * @note The function HAL_FLASH_Unlock() should be called before to unlock the FLASH interface + * The function HAL_FLASH_Lock() should be called after to lock the FLASH interface + * + * @note If an erase and a program operations are requested simultaneously, + * the erase operation is performed before the program one. + * + * @param TypeProgram Indicate the way to program at a specified address. + * This parameter can be a value of @ref FLASH_Type_Program + * @param Address Specifie the address to be programmed. + * @param Data Specifie the data to be programmed + * + * @retval HAL_StatusTypeDef 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)); + assert_param(IS_FLASH_PROGRAM_ADDRESS(Address)); + + /* Enable End of FLASH Operation and Error source interrupts */ + __HAL_FLASH_ENABLE_IT(FLASH_IT_EOP | FLASH_IT_ERR); + + pFlash.Address = Address; + pFlash.Data = Data; + + if(TypeProgram == FLASH_TYPEPROGRAM_HALFWORD) + { + pFlash.ProcedureOnGoing = FLASH_PROC_PROGRAMHALFWORD; + /* Program halfword (16-bit) at a specified address. */ + pFlash.DataRemaining = 1U; + } + else if(TypeProgram == FLASH_TYPEPROGRAM_WORD) + { + pFlash.ProcedureOnGoing = FLASH_PROC_PROGRAMWORD; + /* Program word (32-bit : 2*16-bit) at a specified address. */ + pFlash.DataRemaining = 2U; + } + else + { + pFlash.ProcedureOnGoing = FLASH_PROC_PROGRAMDOUBLEWORD; + /* Program double word (64-bit : 4*16-bit) at a specified address. */ + pFlash.DataRemaining = 4U; + } + + /* Program halfword (16-bit) at a specified address. */ + FLASH_Program_HalfWord(Address, (uint16_t)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(__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR) ||__HAL_FLASH_GET_FLAG(FLASH_FLAG_PGERR)) + { + /* Return the faulty address */ + addresstmp = pFlash.Address; + /* Reset address */ + pFlash.Address = 0xFFFFFFFFU; + + /* 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)) + { + /* Clear FLASH End of Operation pending bit */ + __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP); + + /* Process can continue only if no error detected */ + if(pFlash.ProcedureOnGoing != FLASH_PROC_NONE) + { + if(pFlash.ProcedureOnGoing == FLASH_PROC_PAGEERASE) + { + /* Nb of pages to erased can be decreased */ + pFlash.DataRemaining--; + + /* Check if there are still pages to erase */ + if(pFlash.DataRemaining != 0U) + { + addresstmp = pFlash.Address; + /*Indicate user which sector has been erased */ + HAL_FLASH_EndOfOperationCallback(addresstmp); + + /*Increment sector number*/ + addresstmp = pFlash.Address + FLASH_PAGE_SIZE; + pFlash.Address = addresstmp; + + /* If the erase operation is completed, disable the PER Bit */ + CLEAR_BIT(FLASH->CR, FLASH_CR_PER); + + FLASH_PageErase(addresstmp); + } + else + { + /* No more pages to Erase, user callback can be called. */ + /* Reset Sector and stop Erase pages procedure */ + pFlash.Address = addresstmp = 0xFFFFFFFFU; + pFlash.ProcedureOnGoing = FLASH_PROC_NONE; + /* FLASH EOP interrupt user callback */ + HAL_FLASH_EndOfOperationCallback(addresstmp); + } + } + else if(pFlash.ProcedureOnGoing == FLASH_PROC_MASSERASE) + { + /* Operation is completed, disable the MER Bit */ + CLEAR_BIT(FLASH->CR, FLASH_CR_MER); + + /* MassErase ended. Return the selected bank */ + /* FLASH EOP interrupt user callback */ + HAL_FLASH_EndOfOperationCallback(0); + + /* Stop Mass Erase procedure*/ + pFlash.ProcedureOnGoing = FLASH_PROC_NONE; + } + else + { + /* Nb of 16-bit data to program can be decreased */ + pFlash.DataRemaining--; + + /* Check if there are still 16-bit data to program */ + if(pFlash.DataRemaining != 0U) + { + /* Increment address to 16-bit */ + pFlash.Address += 2; + addresstmp = pFlash.Address; + + /* Shift to have next 16-bit data */ + pFlash.Data = (pFlash.Data >> 16U); + + /* Operation is completed, disable the PG Bit */ + CLEAR_BIT(FLASH->CR, FLASH_CR_PG); + + /*Program halfword (16-bit) at a specified address.*/ + FLASH_Program_HalfWord(addresstmp, (uint16_t)pFlash.Data); + } + else + { + /* Program ended. Return the selected address */ + /* FLASH EOP interrupt user callback */ + if (pFlash.ProcedureOnGoing == FLASH_PROC_PROGRAMHALFWORD) + { + HAL_FLASH_EndOfOperationCallback(pFlash.Address); + } + else if (pFlash.ProcedureOnGoing == FLASH_PROC_PROGRAMWORD) + { + HAL_FLASH_EndOfOperationCallback(pFlash.Address - 2U); + } + else + { + HAL_FLASH_EndOfOperationCallback(pFlash.Address - 6U); + } + + /* Reset Address and stop Program procedure */ + pFlash.Address = 0xFFFFFFFFU; + pFlash.ProcedureOnGoing = FLASH_PROC_NONE; + } + } + } + } + + + if(pFlash.ProcedureOnGoing == FLASH_PROC_NONE) + { + /* Operation is completed, disable the PG, PER and MER Bits */ + CLEAR_BIT(FLASH->CR, (FLASH_CR_PG | FLASH_CR_PER | FLASH_CR_MER)); + + /* Disable End of FLASH Operation and Error source interrupts */ + __HAL_FLASH_DISABLE_IT(FLASH_IT_EOP | 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: No return value expected + * - Pages Erase: Address of the page which has been erased + * (if 0xFFFFFFFF, it means that all the selected pages 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: No return value expected + * - Pages Erase: Address of the page 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 */ + SET_BIT(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 (HAL_IS_BIT_CLR(FLASH->CR, FLASH_CR_OPTWRE)) + { + /* Authorizes the Option Byte register programming */ + WRITE_REG(FLASH->OPTKEYR, FLASH_OPTKEY1); + WRITE_REG(FLASH->OPTKEYR, FLASH_OPTKEY2); + } + 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) +{ + /* Clear the OPTWRE Bit to lock the FLASH Option Byte Registers access */ + CLEAR_BIT(FLASH->CR, FLASH_CR_OPTWRE); + + return HAL_OK; +} + +/** + * @brief Launch the option byte loading. + * @note This function will reset automatically the MCU. + * @retval HAL Status + */ +HAL_StatusTypeDef HAL_FLASH_OB_Launch(void) +{ + /* Set the OBL_Launch bit to launch the option byte loading */ + SET_BIT(FLASH->CR, FLASH_CR_OBL_LAUNCH); + + /* Wait for last operation to be completed */ + return(FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE)); +} + +/** + * @} + */ + +/** @defgroup FLASH_Exported_Functions_Group3 Peripheral errors functions + * @brief Peripheral errors functions + * +@verbatim + =============================================================================== + ##### Peripheral Errors functions ##### + =============================================================================== + [..] + This subsection permit 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: + * @ref FLASH_Error_Codes + */ +uint32_t HAL_FLASH_GetError(void) +{ + return pFlash.ErrorCode; +} + +/** + * @} + */ + +/** + * @} + */ + +/** @addtogroup FLASH_Private_Functions + * @{ + */ + +/** + * @brief Program a half-word (16-bit) at a specified address. + * @param Address specify the address to be programmed. + * @param Data specify the data to be programmed. + * @retval None + */ +static void FLASH_Program_HalfWord(uint32_t Address, uint16_t Data) +{ + /* Clean the error context */ + pFlash.ErrorCode = HAL_FLASH_ERROR_NONE; + + /* Proceed to program the new data */ + SET_BIT(FLASH->CR, FLASH_CR_PG); + + /* Write data in the address */ + *(__IO uint16_t*)Address = Data; +} + +/** + * @brief Wait for a FLASH operation to complete. + * @param Timeout maximum flash operation timeout + * @retval HAL Status + */ +HAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout) +{ + /* 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 */ + + uint32_t tickstart = HAL_GetTick(); + + while(__HAL_FLASH_GET_FLAG(FLASH_FLAG_BSY)) + { + 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)) + { + /* Clear FLASH End of Operation pending bit */ + __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP); + } + + if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR) || + __HAL_FLASH_GET_FLAG(FLASH_FLAG_PGERR)) + { + /*Save the error code*/ + FLASH_SetErrorCode(); + return HAL_ERROR; + } + + /* There is no error flag set */ + return HAL_OK; +} + + +/** + * @brief Set the specific FLASH error flag. + * @retval None + */ +static void FLASH_SetErrorCode(void) +{ + uint32_t flags = 0U; + + if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR)) + { + pFlash.ErrorCode |= HAL_FLASH_ERROR_WRP; + flags |= FLASH_FLAG_WRPERR; + } + if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_PGERR)) + { + pFlash.ErrorCode |= HAL_FLASH_ERROR_PROG; + flags |= FLASH_FLAG_PGERR; + } + /* Clear FLASH error pending bits */ + __HAL_FLASH_CLEAR_FLAG(flags); +} +/** + * @} + */ + +/** + * @} + */ + +#endif /* HAL_FLASH_MODULE_ENABLED */ + +/** + * @} + */ + diff --git a/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c new file mode 100644 index 0000000..043af1e --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c @@ -0,0 +1,981 @@ +/** + ****************************************************************************** + * @file stm32f0xx_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 peripheral: + * + Extended Initialization/de-initialization functions + * + Extended I/O operation functions + * + Extended Peripheral Control functions + * + @verbatim + ============================================================================== + ##### Flash peripheral extended features ##### + ============================================================================== + + ##### How to use this driver ##### + ============================================================================== + [..] This driver provides functions to configure and program the FLASH memory + of all STM32F0xxx devices. It includes + + (++) Set/Reset the write protection + (++) Program the user Option Bytes + (++) Get the Read protection Level + + @endverbatim + ****************************************************************************** + * @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. + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f0xx_hal.h" + +/** @addtogroup STM32F0xx_HAL_Driver + * @{ + */ +#ifdef HAL_FLASH_MODULE_ENABLED + +/** @addtogroup FLASH + * @{ + */ +/** @addtogroup FLASH_Private_Variables + * @{ + */ +/* Variables used for Erase pages under interruption*/ +extern FLASH_ProcessTypeDef pFlash; +/** + * @} + */ + +/** + * @} + */ + +/** @defgroup FLASHEx FLASHEx + * @brief FLASH HAL Extension module driver + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/** @defgroup FLASHEx_Private_Constants FLASHEx Private Constants + * @{ + */ +#define FLASH_POSITION_IWDGSW_BIT 8U +#define FLASH_POSITION_OB_USERDATA0_BIT 16U +#define FLASH_POSITION_OB_USERDATA1_BIT 24U +/** + * @} + */ + +/* Private macro -------------------------------------------------------------*/ +/** @defgroup FLASHEx_Private_Macros FLASHEx Private Macros + * @{ + */ +/** + * @} + */ + +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/** @defgroup FLASHEx_Private_Functions FLASHEx Private Functions + * @{ + */ +/* Erase operations */ +static void FLASH_MassErase(void); +void FLASH_PageErase(uint32_t PageAddress); + +/* Option bytes control */ +static HAL_StatusTypeDef FLASH_OB_EnableWRP(uint32_t WriteProtectPage); +static HAL_StatusTypeDef FLASH_OB_DisableWRP(uint32_t WriteProtectPage); +static HAL_StatusTypeDef FLASH_OB_RDP_LevelConfig(uint8_t ReadProtectLevel); +static HAL_StatusTypeDef FLASH_OB_UserConfig(uint8_t UserConfig); +static HAL_StatusTypeDef FLASH_OB_ProgramData(uint32_t Address, uint8_t Data); +static uint32_t FLASH_OB_GetWRP(void); +static uint32_t FLASH_OB_GetRDP(void); +static uint8_t FLASH_OB_GetUser(void); + +/** + * @} + */ + +/* Exported functions ---------------------------------------------------------*/ +/** @defgroup FLASHEx_Exported_Functions FLASHEx Exported Functions + * @{ + */ + +/** @defgroup FLASHEx_Exported_Functions_Group1 FLASHEx Memory Erasing functions + * @brief FLASH Memory Erasing functions + * +@verbatim + ============================================================================== + ##### FLASH Erasing Programming functions ##### + ============================================================================== + + [..] The FLASH Memory Erasing functions, includes the following functions: + (+) HAL_FLASHEx_Erase: return only when erase has been done + (+) HAL_FLASHEx_Erase_IT: end of erase is done when HAL_FLASH_EndOfOperationCallback + is called with parameter 0xFFFFFFFF + + [..] Any operation of erase should follow these steps: + (#) Call the HAL_FLASH_Unlock() function to enable the flash control register and + program memory access. + (#) Call the desired function to erase page. + (#) Call the HAL_FLASH_Lock() to disable the flash program memory access + (recommended to protect the FLASH memory against possible unwanted operation). + +@endverbatim + * @{ + */ + + +/** + * @brief Perform a mass erase or erase the specified FLASH memory pages + * @note To correctly run this function, the @ref HAL_FLASH_Unlock() function + * must be called before. + * Call the @ref HAL_FLASH_Lock() to disable the flash memory access + * (recommended to protect the FLASH memory against possible unwanted operation) + * @param[in] pEraseInit pointer to an FLASH_EraseInitTypeDef structure that + * contains the configuration information for the erasing. + * + * @param[out] PageError pointer to variable that + * contains the configuration information on faulty page in case of error + * (0xFFFFFFFF means that all the pages have been correctly erased) + * + * @retval HAL_StatusTypeDef HAL Status + */ +HAL_StatusTypeDef HAL_FLASHEx_Erase(FLASH_EraseInitTypeDef *pEraseInit, uint32_t *PageError) +{ + HAL_StatusTypeDef status = HAL_ERROR; + uint32_t address = 0U; + + /* Process Locked */ + __HAL_LOCK(&pFlash); + + /* Check the parameters */ + assert_param(IS_FLASH_TYPEERASE(pEraseInit->TypeErase)); + + if (pEraseInit->TypeErase == FLASH_TYPEERASE_MASSERASE) + { + /* Mass Erase requested for Bank1 */ + /* Wait for last operation to be completed */ + if (FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE) == HAL_OK) + { + /*Mass erase to be done*/ + FLASH_MassErase(); + + /* 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 */ + CLEAR_BIT(FLASH->CR, FLASH_CR_MER); + } + } + else + { + /* Page Erase is requested */ + /* Check the parameters */ + assert_param(IS_FLASH_PROGRAM_ADDRESS(pEraseInit->PageAddress)); + assert_param(IS_FLASH_NB_PAGES(pEraseInit->PageAddress, pEraseInit->NbPages)); + + /* Page Erase requested on address located on bank1 */ + /* Wait for last operation to be completed */ + if (FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE) == HAL_OK) + { + /*Initialization of PageError variable*/ + *PageError = 0xFFFFFFFFU; + + /* Erase page by page to be done*/ + for(address = pEraseInit->PageAddress; + address < ((pEraseInit->NbPages * FLASH_PAGE_SIZE) + pEraseInit->PageAddress); + address += FLASH_PAGE_SIZE) + { + FLASH_PageErase(address); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + /* If the erase operation is completed, disable the PER Bit */ + CLEAR_BIT(FLASH->CR, FLASH_CR_PER); + + if (status != HAL_OK) + { + /* In case of error, stop erase procedure and return the faulty address */ + *PageError = address; + break; + } + } + } + } + + /* Process Unlocked */ + __HAL_UNLOCK(&pFlash); + + return status; +} + +/** + * @brief Perform a mass erase or erase the specified FLASH memory pages with interrupt enabled + * @note To correctly run this function, the @ref HAL_FLASH_Unlock() function + * must be called before. + * Call the @ref HAL_FLASH_Lock() to disable the flash memory access + * (recommended to protect the FLASH memory against possible unwanted operation) + * @param pEraseInit pointer to an FLASH_EraseInitTypeDef structure that + * contains the configuration information for the erasing. + * + * @retval HAL_StatusTypeDef HAL Status + */ +HAL_StatusTypeDef HAL_FLASHEx_Erase_IT(FLASH_EraseInitTypeDef *pEraseInit) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Process Locked */ + __HAL_LOCK(&pFlash); + + /* If procedure already ongoing, reject the next one */ + if (pFlash.ProcedureOnGoing != FLASH_PROC_NONE) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_FLASH_TYPEERASE(pEraseInit->TypeErase)); + + /* Enable End of FLASH Operation and Error source interrupts */ + __HAL_FLASH_ENABLE_IT(FLASH_IT_EOP | FLASH_IT_ERR); + + if (pEraseInit->TypeErase == FLASH_TYPEERASE_MASSERASE) + { + /*Mass erase to be done*/ + pFlash.ProcedureOnGoing = FLASH_PROC_MASSERASE; + FLASH_MassErase(); + } + else + { + /* Erase by page to be done*/ + + /* Check the parameters */ + assert_param(IS_FLASH_PROGRAM_ADDRESS(pEraseInit->PageAddress)); + assert_param(IS_FLASH_NB_PAGES(pEraseInit->PageAddress, pEraseInit->NbPages)); + + pFlash.ProcedureOnGoing = FLASH_PROC_PAGEERASE; + pFlash.DataRemaining = pEraseInit->NbPages; + pFlash.Address = pEraseInit->PageAddress; + + /*Erase 1st page and wait for IT*/ + FLASH_PageErase(pEraseInit->PageAddress); + } + + return status; +} + +/** + * @} + */ + +/** @defgroup FLASHEx_Exported_Functions_Group2 Option Bytes Programming functions + * @brief Option Bytes Programming functions + * +@verbatim + ============================================================================== + ##### Option Bytes Programming functions ##### + ============================================================================== + [..] + This subsection provides a set of functions allowing to control the FLASH + option bytes operations. + +@endverbatim + * @{ + */ + +/** + * @brief Erases the FLASH option bytes. + * @note This functions erases all option bytes except the Read protection (RDP). + * The function @ref HAL_FLASH_Unlock() should be called before to unlock the FLASH interface + * The function @ref HAL_FLASH_OB_Unlock() should be called before to unlock the options bytes + * The function @ref HAL_FLASH_OB_Launch() should be called after to force the reload of the options bytes + * (system reset will occur) + * @retval HAL status + */ + +HAL_StatusTypeDef HAL_FLASHEx_OBErase(void) +{ + uint8_t rdptmp = OB_RDP_LEVEL_0; + HAL_StatusTypeDef status = HAL_ERROR; + + /* Get the actual read protection Option Byte value */ + rdptmp = FLASH_OB_GetRDP(); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if(status == HAL_OK) + { + /* Clean the error context */ + pFlash.ErrorCode = HAL_FLASH_ERROR_NONE; + + /* If the previous operation is completed, proceed to erase the option bytes */ + SET_BIT(FLASH->CR, FLASH_CR_OPTER); + SET_BIT(FLASH->CR, FLASH_CR_STRT); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + /* If the erase operation is completed, disable the OPTER Bit */ + CLEAR_BIT(FLASH->CR, FLASH_CR_OPTER); + + if(status == HAL_OK) + { + /* Restore the last read protection Option Byte value */ + status = FLASH_OB_RDP_LevelConfig(rdptmp); + } + } + + /* Return the erase status */ + return status; +} + +/** + * @brief Program option bytes + * @note The function @ref HAL_FLASH_Unlock() should be called before to unlock the FLASH interface + * The function @ref HAL_FLASH_OB_Unlock() should be called before to unlock the options bytes + * The function @ref HAL_FLASH_OB_Launch() should be called after to force the reload of the options bytes + * (system reset will occur) + * + * @param pOBInit pointer to an FLASH_OBInitStruct structure that + * contains the configuration information for the programming. + * + * @retval HAL_StatusTypeDef 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 page */ + status = FLASH_OB_EnableWRP(pOBInit->WRPPage); + } + else + { + /* Disable of Write protection on the selected page */ + status = FLASH_OB_DisableWRP(pOBInit->WRPPage); + } + if (status != HAL_OK) + { + /* Process Unlocked */ + __HAL_UNLOCK(&pFlash); + return status; + } + } + + /* Read protection configuration */ + if((pOBInit->OptionType & OPTIONBYTE_RDP) == OPTIONBYTE_RDP) + { + status = FLASH_OB_RDP_LevelConfig(pOBInit->RDPLevel); + if (status != HAL_OK) + { + /* Process Unlocked */ + __HAL_UNLOCK(&pFlash); + return status; + } + } + + /* USER configuration */ + if((pOBInit->OptionType & OPTIONBYTE_USER) == OPTIONBYTE_USER) + { + status = FLASH_OB_UserConfig(pOBInit->USERConfig); + if (status != HAL_OK) + { + /* Process Unlocked */ + __HAL_UNLOCK(&pFlash); + return status; + } + } + + /* DATA configuration*/ + if((pOBInit->OptionType & OPTIONBYTE_DATA) == OPTIONBYTE_DATA) + { + status = FLASH_OB_ProgramData(pOBInit->DATAAddress, pOBInit->DATAData); + if (status != HAL_OK) + { + /* Process Unlocked */ + __HAL_UNLOCK(&pFlash); + return status; + } + } + + /* 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; + + /*Get WRP*/ + pOBInit->WRPPage = FLASH_OB_GetWRP(); + + /*Get RDP Level*/ + pOBInit->RDPLevel = FLASH_OB_GetRDP(); + + /*Get USER*/ + pOBInit->USERConfig = FLASH_OB_GetUser(); +} + +/** + * @brief Get the Option byte user data + * @param DATAAdress Address of the option byte DATA + * This parameter can be one of the following values: + * @arg @ref OB_DATA_ADDRESS_DATA0 + * @arg @ref OB_DATA_ADDRESS_DATA1 + * @retval Value programmed in USER data + */ +uint32_t HAL_FLASHEx_OBGetUserData(uint32_t DATAAdress) +{ + uint32_t value = 0U; + + if (DATAAdress == OB_DATA_ADDRESS_DATA0) + { + /* Get value programmed in OB USER Data0 */ + value = READ_BIT(FLASH->OBR, FLASH_OBR_DATA0) >> FLASH_POSITION_OB_USERDATA0_BIT; + } + else + { + /* Get value programmed in OB USER Data1 */ + value = READ_BIT(FLASH->OBR, FLASH_OBR_DATA1) >> FLASH_POSITION_OB_USERDATA1_BIT; + } + + return value; +} + +/** + * @} + */ + +/** + * @} + */ + +/** @addtogroup FLASHEx_Private_Functions + * @{ + */ + +/** + * @brief Full erase of FLASH memory Bank + * + * @retval None + */ +static void FLASH_MassErase(void) +{ + /* Clean the error context */ + pFlash.ErrorCode = HAL_FLASH_ERROR_NONE; + + /* Only bank1 will be erased*/ + SET_BIT(FLASH->CR, FLASH_CR_MER); + SET_BIT(FLASH->CR, FLASH_CR_STRT); +} + +/** + * @brief Enable the write protection of the desired pages + * @note An option byte erase is done automatically in this function. + * @note When the memory read protection level is selected (RDP level = 1), + * it is not possible to program or erase the flash page i if + * debug features are connected or boot code is executed in RAM, even if nWRPi = 1 + * + * @param WriteProtectPage specifies the page(s) to be write protected. + * The value of this parameter depend on device used within the same series + * @retval HAL status + */ +static HAL_StatusTypeDef FLASH_OB_EnableWRP(uint32_t WriteProtectPage) +{ + HAL_StatusTypeDef status = HAL_OK; + uint16_t WRP0_Data = 0xFFFFU; +#if defined(OB_WRP1_WRP1) + uint16_t WRP1_Data = 0xFFFFU; +#endif /* OB_WRP1_WRP1 */ +#if defined(OB_WRP2_WRP2) + uint16_t WRP2_Data = 0xFFFFU; +#endif /* OB_WRP2_WRP2 */ +#if defined(OB_WRP3_WRP3) + uint16_t WRP3_Data = 0xFFFFU; +#endif /* OB_WRP3_WRP3 */ + + /* Check the parameters */ + assert_param(IS_OB_WRP(WriteProtectPage)); + + /* Get current write protected pages and the new pages to be protected ******/ + WriteProtectPage = (uint32_t)(~((~FLASH_OB_GetWRP()) | WriteProtectPage)); + +#if defined(OB_WRP_PAGES0TO15MASK) + WRP0_Data = (uint16_t)(WriteProtectPage & OB_WRP_PAGES0TO15MASK); +#elif defined(OB_WRP_PAGES0TO31MASK) + WRP0_Data = (uint16_t)(WriteProtectPage & OB_WRP_PAGES0TO31MASK); +#endif /* OB_WRP_PAGES0TO31MASK */ + +#if defined(OB_WRP_PAGES16TO31MASK) + WRP1_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES16TO31MASK) >> 8U); +#elif defined(OB_WRP_PAGES32TO63MASK) + WRP1_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES32TO63MASK) >> 8U); +#endif /* OB_WRP_PAGES32TO63MASK */ + +#if defined(OB_WRP_PAGES32TO47MASK) + WRP2_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES32TO47MASK) >> 16U); +#endif /* OB_WRP_PAGES32TO47MASK */ + +#if defined(OB_WRP_PAGES48TO63MASK) + WRP3_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES48TO63MASK) >> 24U); +#elif defined(OB_WRP_PAGES48TO127MASK) + WRP3_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES48TO127MASK) >> 24U); +#endif /* OB_WRP_PAGES48TO63MASK */ + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if(status == HAL_OK) + { + /* Clean the error context */ + pFlash.ErrorCode = HAL_FLASH_ERROR_NONE; + + /* To be able to write again option byte, need to perform a option byte erase */ + status = HAL_FLASHEx_OBErase(); + if (status == HAL_OK) + { + /* Enable write protection */ + SET_BIT(FLASH->CR, FLASH_CR_OPTPG); + +#if defined(OB_WRP0_WRP0) + if(WRP0_Data != 0xFFU) + { + OB->WRP0 &= WRP0_Data; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + } +#endif /* OB_WRP0_WRP0 */ + +#if defined(OB_WRP1_WRP1) + if((status == HAL_OK) && (WRP1_Data != 0xFFU)) + { + OB->WRP1 &= WRP1_Data; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + } +#endif /* OB_WRP1_WRP1 */ + +#if defined(OB_WRP2_WRP2) + if((status == HAL_OK) && (WRP2_Data != 0xFFU)) + { + OB->WRP2 &= WRP2_Data; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + } +#endif /* OB_WRP2_WRP2 */ + +#if defined(OB_WRP3_WRP3) + if((status == HAL_OK) && (WRP3_Data != 0xFFU)) + { + OB->WRP3 &= WRP3_Data; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + } +#endif /* OB_WRP3_WRP3 */ + + /* if the program operation is completed, disable the OPTPG Bit */ + CLEAR_BIT(FLASH->CR, FLASH_CR_OPTPG); + } + } + + return status; +} + +/** + * @brief Disable the write protection of the desired pages + * @note An option byte erase is done automatically in this function. + * @note When the memory read protection level is selected (RDP level = 1), + * it is not possible to program or erase the flash page i if + * debug features are connected or boot code is executed in RAM, even if nWRPi = 1 + * + * @param WriteProtectPage specifies the page(s) to be write unprotected. + * The value of this parameter depend on device used within the same series + * @retval HAL status + */ +static HAL_StatusTypeDef FLASH_OB_DisableWRP(uint32_t WriteProtectPage) +{ + HAL_StatusTypeDef status = HAL_OK; + uint16_t WRP0_Data = 0xFFFFU; +#if defined(OB_WRP1_WRP1) + uint16_t WRP1_Data = 0xFFFFU; +#endif /* OB_WRP1_WRP1 */ +#if defined(OB_WRP2_WRP2) + uint16_t WRP2_Data = 0xFFFFU; +#endif /* OB_WRP2_WRP2 */ +#if defined(OB_WRP3_WRP3) + uint16_t WRP3_Data = 0xFFFFU; +#endif /* OB_WRP3_WRP3 */ + + /* Check the parameters */ + assert_param(IS_OB_WRP(WriteProtectPage)); + + /* Get current write protected pages and the new pages to be unprotected ******/ + WriteProtectPage = (FLASH_OB_GetWRP() | WriteProtectPage); + +#if defined(OB_WRP_PAGES0TO15MASK) + WRP0_Data = (uint16_t)(WriteProtectPage & OB_WRP_PAGES0TO15MASK); +#elif defined(OB_WRP_PAGES0TO31MASK) + WRP0_Data = (uint16_t)(WriteProtectPage & OB_WRP_PAGES0TO31MASK); +#endif /* OB_WRP_PAGES0TO31MASK */ + +#if defined(OB_WRP_PAGES16TO31MASK) + WRP1_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES16TO31MASK) >> 8U); +#elif defined(OB_WRP_PAGES32TO63MASK) + WRP1_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES32TO63MASK) >> 8U); +#endif /* OB_WRP_PAGES32TO63MASK */ + +#if defined(OB_WRP_PAGES32TO47MASK) + WRP2_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES32TO47MASK) >> 16U); +#endif /* OB_WRP_PAGES32TO47MASK */ + +#if defined(OB_WRP_PAGES48TO63MASK) + WRP3_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES48TO63MASK) >> 24U); +#elif defined(OB_WRP_PAGES48TO127MASK) + WRP3_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES48TO127MASK) >> 24U); +#endif /* OB_WRP_PAGES48TO63MASK */ + + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if(status == HAL_OK) + { + /* Clean the error context */ + pFlash.ErrorCode = HAL_FLASH_ERROR_NONE; + + /* To be able to write again option byte, need to perform a option byte erase */ + status = HAL_FLASHEx_OBErase(); + if (status == HAL_OK) + { + SET_BIT(FLASH->CR, FLASH_CR_OPTPG); + +#if defined(OB_WRP0_WRP0) + if(WRP0_Data != 0xFFU) + { + OB->WRP0 &= WRP0_Data; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + } +#endif /* OB_WRP0_WRP0 */ + +#if defined(OB_WRP1_WRP1) + if((status == HAL_OK) && (WRP1_Data != 0xFFU)) + { + OB->WRP1 &= WRP1_Data; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + } +#endif /* OB_WRP1_WRP1 */ + +#if defined(OB_WRP2_WRP2) + if((status == HAL_OK) && (WRP2_Data != 0xFFU)) + { + OB->WRP2 &= WRP2_Data; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + } +#endif /* OB_WRP2_WRP2 */ + +#if defined(OB_WRP3_WRP3) + if((status == HAL_OK) && (WRP3_Data != 0xFFU)) + { + OB->WRP3 &= WRP3_Data; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + } +#endif /* OB_WRP3_WRP3 */ + + /* if the program operation is completed, disable the OPTPG Bit */ + CLEAR_BIT(FLASH->CR, FLASH_CR_OPTPG); + } + } + return status; +} + +/** + * @brief Set the read protection level. + * @param ReadProtectLevel specifies the read protection level. + * This parameter can be one of the following values: + * @arg @ref OB_RDP_LEVEL_0 No protection + * @arg @ref OB_RDP_LEVEL_1 Read protection of the memory + * @arg @ref 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 ReadProtectLevel) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_OB_RDP_LEVEL(ReadProtectLevel)); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if(status == HAL_OK) + { + /* Clean the error context */ + pFlash.ErrorCode = HAL_FLASH_ERROR_NONE; + + /* If the previous operation is completed, proceed to erase the option bytes */ + SET_BIT(FLASH->CR, FLASH_CR_OPTER); + SET_BIT(FLASH->CR, FLASH_CR_STRT); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + /* If the erase operation is completed, disable the OPTER Bit */ + CLEAR_BIT(FLASH->CR, FLASH_CR_OPTER); + + if(status == HAL_OK) + { + /* Enable the Option Bytes Programming operation */ + SET_BIT(FLASH->CR, FLASH_CR_OPTPG); + + WRITE_REG(OB->RDP, ReadProtectLevel); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + /* if the program operation is completed, disable the OPTPG Bit */ + CLEAR_BIT(FLASH->CR, FLASH_CR_OPTPG); + } + } + + return status; +} + +/** + * @brief Program the FLASH User Option Byte. + * @note Programming of the OB should be performed only after an erase (otherwise PGERR occurs) + * @param UserConfig The FLASH User Option Bytes values: IWDG_SW(Bit0), RST_STOP(Bit1), RST_STDBY(Bit2), nBOOT1(Bit4), + * VDDA_Analog_Monitoring(Bit5) and SRAM_Parity_Enable(Bit6). + * For few devices, following option bytes are available: nBOOT0(Bit3) & BOOT_SEL(Bit7). + * @retval HAL status + */ +static HAL_StatusTypeDef FLASH_OB_UserConfig(uint8_t UserConfig) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_OB_IWDG_SOURCE((UserConfig&OB_IWDG_SW))); + assert_param(IS_OB_STOP_SOURCE((UserConfig&OB_STOP_NO_RST))); + assert_param(IS_OB_STDBY_SOURCE((UserConfig&OB_STDBY_NO_RST))); + assert_param(IS_OB_BOOT1((UserConfig&OB_BOOT1_SET))); + assert_param(IS_OB_VDDA_ANALOG((UserConfig&OB_VDDA_ANALOG_ON))); + assert_param(IS_OB_SRAM_PARITY((UserConfig&OB_SRAM_PARITY_RESET))); +#if defined(FLASH_OBR_BOOT_SEL) + assert_param(IS_OB_BOOT_SEL((UserConfig&OB_BOOT_SEL_SET))); + assert_param(IS_OB_BOOT0((UserConfig&OB_BOOT0_SET))); +#endif /* FLASH_OBR_BOOT_SEL */ + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if(status == HAL_OK) + { + /* Clean the error context */ + pFlash.ErrorCode = HAL_FLASH_ERROR_NONE; + + /* Enable the Option Bytes Programming operation */ + SET_BIT(FLASH->CR, FLASH_CR_OPTPG); + +#if defined(FLASH_OBR_BOOT_SEL) + OB->USER = UserConfig; +#else + OB->USER = (UserConfig | 0x88U); +#endif + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + /* if the program operation is completed, disable the OPTPG Bit */ + CLEAR_BIT(FLASH->CR, FLASH_CR_OPTPG); + } + + return status; +} + +/** + * @brief Programs a half word at a specified Option Byte Data address. + * @note The function @ref HAL_FLASH_Unlock() should be called before to unlock the FLASH interface + * The function @ref HAL_FLASH_OB_Unlock() should be called before to unlock the options bytes + * The function @ref HAL_FLASH_OB_Launch() should be called after to force the reload of the options bytes + * (system reset will occur) + * Programming of the OB should be performed only after an erase (otherwise PGERR occurs) + * @param Address specifies the address to be programmed. + * This parameter can be 0x1FFFF804 or 0x1FFFF806. + * @param Data specifies the data to be programmed. + * @retval HAL status + */ +static HAL_StatusTypeDef FLASH_OB_ProgramData(uint32_t Address, uint8_t Data) +{ + HAL_StatusTypeDef status = HAL_ERROR; + + /* Check the parameters */ + assert_param(IS_OB_DATA_ADDRESS(Address)); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if(status == HAL_OK) + { + /* Clean the error context */ + pFlash.ErrorCode = HAL_FLASH_ERROR_NONE; + + /* Enables the Option Bytes Programming operation */ + SET_BIT(FLASH->CR, FLASH_CR_OPTPG); + *(__IO uint16_t*)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 OPTPG Bit */ + CLEAR_BIT(FLASH->CR, FLASH_CR_OPTPG); + } + /* Return the Option Byte Data Program Status */ + return status; +} + +/** + * @brief Return the FLASH Write Protection Option Bytes value. + * @retval The FLASH Write Protection Option Bytes value + */ +static uint32_t FLASH_OB_GetWRP(void) +{ + /* Return the FLASH write protection Register value */ + return (uint32_t)(READ_REG(FLASH->WRPR)); +} + +/** + * @brief Returns the FLASH Read Protection level. + * @retval FLASH RDP level + * This parameter can be one of the following values: + * @arg @ref OB_RDP_LEVEL_0 No protection + * @arg @ref OB_RDP_LEVEL_1 Read protection of the memory + * @arg @ref OB_RDP_LEVEL_2 Full chip protection + */ +static uint32_t FLASH_OB_GetRDP(void) +{ + uint32_t tmp_reg; + + /* Read RDP level bits */ + tmp_reg = READ_BIT(FLASH->OBR, (FLASH_OBR_RDPRT1 | FLASH_OBR_RDPRT2)); + + if (tmp_reg == 0U) + { + return OB_RDP_LEVEL_0; + } + else if ((tmp_reg & FLASH_OBR_RDPRT2) == FLASH_OBR_RDPRT2) + { + return OB_RDP_LEVEL_2; + } + else + { + return OB_RDP_LEVEL_1; + } +} + +/** + * @brief Return the FLASH User Option Byte value. + * @retval The FLASH User Option Bytes values: IWDG_SW(Bit0), RST_STOP(Bit1), RST_STDBY(Bit2), nBOOT1(Bit4), + * VDDA_Analog_Monitoring(Bit5) and SRAM_Parity_Enable(Bit6). + * For few devices, following option bytes are available: nBOOT0(Bit3) & BOOT_SEL(Bit7). + */ +static uint8_t FLASH_OB_GetUser(void) +{ + /* Return the User Option Byte */ + return (uint8_t)((READ_REG(FLASH->OBR) & FLASH_OBR_USER) >> FLASH_POSITION_IWDGSW_BIT); +} + +/** + * @} + */ + +/** + * @} + */ + +/** @addtogroup FLASH + * @{ + */ + +/** @addtogroup FLASH_Private_Functions + * @{ + */ + +/** + * @brief Erase the specified FLASH memory page + * @param PageAddress FLASH page to erase + * The value of this parameter depend on device used within the same series + * + * @retval None + */ +void FLASH_PageErase(uint32_t PageAddress) +{ + /* Clean the error context */ + pFlash.ErrorCode = HAL_FLASH_ERROR_NONE; + + /* Proceed to erase the page */ + SET_BIT(FLASH->CR, FLASH_CR_PER); + WRITE_REG(FLASH->AR, PageAddress); + SET_BIT(FLASH->CR, FLASH_CR_STRT); +} + +/** + * @} + */ + +/** + * @} + */ + +#endif /* HAL_FLASH_MODULE_ENABLED */ +/** + * @} + */ + diff --git a/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.c b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.c new file mode 100644 index 0000000..aa3a188 --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.c @@ -0,0 +1,539 @@ +/** + ****************************************************************************** + * @file stm32f0xx_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) 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 + ============================================================================== + ##### GPIO Peripheral features ##### + ============================================================================== + [..] + (+) Each port bit of the general-purpose I/O (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. + + (+) The microcontroller IO pins are connected to onboard peripherals/modules through a + multiplexer that allows only one peripheral alternate function (AF) connected + to an IO pin at a time. In this way, there can be no conflict between peripherals + sharing the same IO pin. + + (+) 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 28 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(). + + (#) HAL_GPIO_DeInit allows to set register values to their reset value. It's also + recommended to use it to unconfigure pin which was used as an external interrupt + or in event mode. That's the only way to reset corresponding bit in EXTI & SYSCFG + registers. + + (#) 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 PF0 and PF1, respectively, when the HSE oscillator is off. + The HSE has priority over the GPIO function. + + @endverbatim + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f0xx_hal.h" + +/** @addtogroup STM32F0xx_HAL_Driver + * @{ + */ + +/** @defgroup GPIO GPIO + * @brief GPIO HAL module driver + * @{ + */ + +/** MISRA C:2012 deviation rule has been granted for following rules: + * Rule-18.1_d - Medium: Array pointer `GPIOx' is accessed with index [..,..] + * which may be out of array bounds [..,UNKNOWN] in following APIs: + * HAL_GPIO_Init + * HAL_GPIO_DeInit + */ + +#ifdef HAL_GPIO_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private defines -----------------------------------------------------------*/ +/** @addtogroup GPIO_Private_Constants GPIO Private Constants + * @{ + */ +#define GPIO_NUMBER 16U +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ + +/** @defgroup GPIO_Exported_Functions GPIO Exported Functions + * @{ + */ + +/** @defgroup GPIO_Exported_Functions_Group1 Initialization/de-initialization functions + * @brief Initialization and Configuration functions + * +@verbatim + =============================================================================== + ##### Initialization and de-initialization functions ##### + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Initialize the GPIOx peripheral according to the specified parameters in the GPIO_Init. + * @param GPIOx where x can be (A..F) to select the GPIO peripheral for STM32F0 family + * @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 = 0x00u; + uint32_t iocurrent; + uint32_t temp; + + /* 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 */ + while (((GPIO_Init->Pin) >> position) != 0x00u) + { + /* Get current io position */ + iocurrent = (GPIO_Init->Pin) & (1uL << position); + + if (iocurrent != 0x00u) + { + /*--------------------- 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 Pull parameter */ + 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 parameters */ + assert_param(IS_GPIO_AF_INSTANCE(GPIOx)); + assert_param(IS_GPIO_AF(GPIO_Init->Alternate)); + + /* Configure Alternate function mapped with the current IO */ + temp = GPIOx->AFR[position >> 3u]; + temp &= ~(0xFu << ((position & 0x07u) * 4u)); + temp |= ((GPIO_Init->Alternate) << ((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 &= ~(0x0FuL << (4u * (position & 0x03u))); + temp |= (GPIO_GET_INDEX(GPIOx) << (4u * (position & 0x03u))); + SYSCFG->EXTICR[position >> 2u] = temp; + + /* Clear Rising Falling edge configuration */ + temp = EXTI->RTSR; + temp &= ~(iocurrent); + if((GPIO_Init->Mode & TRIGGER_RISING) != 0x00u) + { + temp |= iocurrent; + } + EXTI->RTSR = temp; + + temp = EXTI->FTSR; + temp &= ~(iocurrent); + if((GPIO_Init->Mode & TRIGGER_FALLING) != 0x00u) + { + temp |= iocurrent; + } + EXTI->FTSR = temp; + + /* Clear EXTI line configuration */ + temp = EXTI->EMR; + temp &= ~(iocurrent); + if((GPIO_Init->Mode & EXTI_EVT) != 0x00u) + { + temp |= iocurrent; + } + EXTI->EMR = temp; + + temp = EXTI->IMR; + temp &= ~(iocurrent); + if((GPIO_Init->Mode & EXTI_IT) != 0x00u) + { + temp |= iocurrent; + } + EXTI->IMR = temp; + } + } + + position++; + } +} + +/** + * @brief De-initialize the GPIOx peripheral registers to their default reset values. + * @param GPIOx where x can be (A..F) to select the GPIO peripheral for STM32F0 family + * @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 = 0x00u; + uint32_t iocurrent; + uint32_t tmp; + + /* Check the parameters */ + assert_param(IS_GPIO_ALL_INSTANCE(GPIOx)); + assert_param(IS_GPIO_PIN(GPIO_Pin)); + + /* Configure the port pins */ + while ((GPIO_Pin >> position) != 0x00u) + { + /* Get current io position */ + iocurrent = (GPIO_Pin) & (1uL << position); + + if (iocurrent != 0x00u) + { + /*------------------------- EXTI Mode Configuration --------------------*/ + /* Clear the External Interrupt or Event for the current IO */ + + tmp = SYSCFG->EXTICR[position >> 2u]; + tmp &= (0x0FuL << (4u * (position & 0x03u))); + if (tmp == (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 = 0x0FuL << (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)); + + } + + position++; + } +} + +/** + * @} + */ + +/** @defgroup GPIO_Exported_Functions_Group2 IO operation functions + * @brief GPIO Read, Write, Toggle, Lock and EXTI management functions. + * +@verbatim + =============================================================================== + ##### IO operation functions ##### + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Read the specified input port pin. + * @param GPIOx where x can be (A..F) to select the GPIO peripheral for STM32F0 family + * @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 Set or clear the selected data port bit. + * @note This function uses GPIOx_BSRR and GPIOx_BRR registers 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..H) to select the GPIO peripheral for STM32F0 family + * @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 = (uint32_t)GPIO_Pin; + } + else + { + GPIOx->BRR = (uint32_t)GPIO_Pin; + } +} + +/** + * @brief Toggle the specified GPIO pin. + * @param GPIOx where x can be (A..F) to select the GPIO peripheral for STM32F0 family + * @param GPIO_Pin specifies the pin 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 STM32F0 family + * @param GPIO_Pin specifies the port bits 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_LOCK_INSTANCE(GPIOx)); + assert_param(IS_GPIO_PIN(GPIO_Pin)); + + /* Apply lock key write sequence */ + SET_BIT(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 LCKK 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) != 0x00u) + { + return HAL_OK; + } + else + { + return HAL_ERROR; + } +} + +/** + * @brief Handle EXTI interrupt request. + * @param GPIO_Pin Specifies the port pin connected to corresponding 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) != 0x00u) + { + __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin); + HAL_GPIO_EXTI_Callback(GPIO_Pin); + } +} + +/** + * @brief EXTI line detection callback. + * @param GPIO_Pin Specifies the port pin connected to corresponding 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/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.c b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.c new file mode 100644 index 0000000..6a90c5f --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.c @@ -0,0 +1,7278 @@ +/** + ****************************************************************************** + * @file stm32f0xx_hal_i2c.c + * @author MCD Application Team + * @brief I2C HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of the Inter Integrated Circuit (I2C) peripheral: + * + Initialization and de-initialization functions + * + IO operation 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 I2C HAL driver can be used as follows: + + (#) Declare a I2C_HandleTypeDef handle structure, for example: + I2C_HandleTypeDef hi2c; + + (#)Initialize the I2C low level resources by implementing the HAL_I2C_MspInit() API: + (##) Enable the I2Cx interface clock + (##) I2C pins configuration + (+++) Enable the clock for the I2C GPIOs + (+++) Configure I2C pins as alternate function open-drain + (##) NVIC configuration if you need to use interrupt process + (+++) Configure the I2Cx interrupt priority + (+++) Enable the NVIC I2C IRQ Channel + (##) DMA Configuration if you need to use DMA process + (+++) Declare a DMA_HandleTypeDef handle structure for + the transmit or receive channel + (+++) Enable the DMAx interface clock using + (+++) Configure the DMA handle parameters + (+++) Configure the DMA Tx or Rx channel + (+++) Associate the initialized DMA handle to the hi2c DMA Tx or Rx handle + (+++) Configure the priority and enable the NVIC for the transfer complete interrupt on + the DMA Tx or Rx channel + + (#) Configure the Communication Clock Timing, Own Address1, Master Addressing mode, Dual Addressing mode, + Own Address2, Own Address2 Mask, General call and Nostretch mode in the hi2c Init structure. + + (#) Initialize the I2C registers by calling the HAL_I2C_Init(), configures also the low level Hardware + (GPIO, CLOCK, NVIC...etc) by calling the customized HAL_I2C_MspInit(&hi2c) API. + + (#) To check if target device is ready for communication, use the function HAL_I2C_IsDeviceReady() + + (#) For I2C IO and IO MEM operations, three operation modes are available within this driver : + + *** Polling mode IO operation *** + ================================= + [..] + (+) Transmit in master mode an amount of data in blocking mode using HAL_I2C_Master_Transmit() + (+) Receive in master mode an amount of data in blocking mode using HAL_I2C_Master_Receive() + (+) Transmit in slave mode an amount of data in blocking mode using HAL_I2C_Slave_Transmit() + (+) Receive in slave mode an amount of data in blocking mode using HAL_I2C_Slave_Receive() + + *** Polling mode IO MEM operation *** + ===================================== + [..] + (+) Write an amount of data in blocking mode to a specific memory address using HAL_I2C_Mem_Write() + (+) Read an amount of data in blocking mode from a specific memory address using HAL_I2C_Mem_Read() + + + *** Interrupt mode IO operation *** + =================================== + [..] + (+) Transmit in master mode an amount of data in non-blocking mode using HAL_I2C_Master_Transmit_IT() + (+) At transmission end of transfer, HAL_I2C_MasterTxCpltCallback() is executed and users can + add their own code by customization of function pointer HAL_I2C_MasterTxCpltCallback() + (+) Receive in master mode an amount of data in non-blocking mode using HAL_I2C_Master_Receive_IT() + (+) At reception end of transfer, HAL_I2C_MasterRxCpltCallback() is executed and users can + add their own code by customization of function pointer HAL_I2C_MasterRxCpltCallback() + (+) Transmit in slave mode an amount of data in non-blocking mode using HAL_I2C_Slave_Transmit_IT() + (+) At transmission end of transfer, HAL_I2C_SlaveTxCpltCallback() is executed and users can + add their own code by customization of function pointer HAL_I2C_SlaveTxCpltCallback() + (+) Receive in slave mode an amount of data in non-blocking mode using HAL_I2C_Slave_Receive_IT() + (+) At reception end of transfer, HAL_I2C_SlaveRxCpltCallback() is executed and users can + add their own code by customization of function pointer HAL_I2C_SlaveRxCpltCallback() + (+) In case of transfer Error, HAL_I2C_ErrorCallback() function is executed and users can + add their own code by customization of function pointer HAL_I2C_ErrorCallback() + (+) Abort a master I2C process communication with Interrupt using HAL_I2C_Master_Abort_IT() + (+) End of abort process, HAL_I2C_AbortCpltCallback() is executed and users can + add their own code by customization of function pointer HAL_I2C_AbortCpltCallback() + (+) Discard a slave I2C process communication using __HAL_I2C_GENERATE_NACK() macro. + This action will inform Master to generate a Stop condition to discard the communication. + + + *** Interrupt mode or DMA mode IO sequential operation *** + ========================================================== + [..] + (@) These interfaces allow to manage a sequential transfer with a repeated start condition + when a direction change during transfer + [..] + (+) A specific option field manage the different steps of a sequential transfer + (+) Option field values are defined through I2C_XFEROPTIONS and are listed below: + (++) I2C_FIRST_AND_LAST_FRAME: No sequential usage, functional is same as associated interfaces in + no sequential mode + (++) I2C_FIRST_FRAME: Sequential usage, this option allow to manage a sequence with start condition, address + and data to transfer without a final stop condition + (++) I2C_FIRST_AND_NEXT_FRAME: Sequential usage (Master only), this option allow to manage a sequence with + start condition, address and data to transfer without a final stop condition, + an then permit a call the same master sequential interface several times + (like HAL_I2C_Master_Seq_Transmit_IT() then HAL_I2C_Master_Seq_Transmit_IT() + or HAL_I2C_Master_Seq_Transmit_DMA() then HAL_I2C_Master_Seq_Transmit_DMA()) + (++) I2C_NEXT_FRAME: Sequential usage, this option allow to manage a sequence with a restart condition, address + and with new data to transfer if the direction change or manage only the new data to + transfer + if no direction change and without a final stop condition in both cases + (++) I2C_LAST_FRAME: Sequential usage, this option allow to manage a sequance with a restart condition, address + and with new data to transfer if the direction change or manage only the new data to + transfer + if no direction change and with a final stop condition in both cases + (++) I2C_LAST_FRAME_NO_STOP: Sequential usage (Master only), this option allow to manage a restart condition + after several call of the same master sequential interface several times + (link with option I2C_FIRST_AND_NEXT_FRAME). + Usage can, transfer several bytes one by one using + HAL_I2C_Master_Seq_Transmit_IT + or HAL_I2C_Master_Seq_Receive_IT + or HAL_I2C_Master_Seq_Transmit_DMA + or HAL_I2C_Master_Seq_Receive_DMA + with option I2C_FIRST_AND_NEXT_FRAME then I2C_NEXT_FRAME. + Then usage of this option I2C_LAST_FRAME_NO_STOP at the last Transmit or + Receive sequence permit to call the opposite interface Receive or Transmit + without stopping the communication and so generate a restart condition. + (++) I2C_OTHER_FRAME: Sequential usage (Master only), this option allow to manage a restart condition after + each call of the same master sequential + interface. + Usage can, transfer several bytes one by one with a restart with slave address between + each bytes using + HAL_I2C_Master_Seq_Transmit_IT + or HAL_I2C_Master_Seq_Receive_IT + or HAL_I2C_Master_Seq_Transmit_DMA + or HAL_I2C_Master_Seq_Receive_DMA + with option I2C_FIRST_FRAME then I2C_OTHER_FRAME. + Then usage of this option I2C_OTHER_AND_LAST_FRAME at the last frame to help automatic + generation of STOP condition. + + (+) Different sequential I2C interfaces are listed below: + (++) Sequential transmit in master I2C mode an amount of data in non-blocking mode using + HAL_I2C_Master_Seq_Transmit_IT() or using HAL_I2C_Master_Seq_Transmit_DMA() + (+++) At transmission end of current frame transfer, HAL_I2C_MasterTxCpltCallback() is executed and + users can add their own code by customization of function pointer HAL_I2C_MasterTxCpltCallback() + (++) Sequential receive in master I2C mode an amount of data in non-blocking mode using + HAL_I2C_Master_Seq_Receive_IT() or using HAL_I2C_Master_Seq_Receive_DMA() + (+++) At reception end of current frame transfer, HAL_I2C_MasterRxCpltCallback() is executed and users can + add their own code by customization of function pointer HAL_I2C_MasterRxCpltCallback() + (++) Abort a master IT or DMA I2C process communication with Interrupt using HAL_I2C_Master_Abort_IT() + (+++) End of abort process, HAL_I2C_AbortCpltCallback() is executed and users can + add their own code by customization of function pointer HAL_I2C_AbortCpltCallback() + (++) Enable/disable the Address listen mode in slave I2C mode using HAL_I2C_EnableListen_IT() + HAL_I2C_DisableListen_IT() + (+++) When address slave I2C match, HAL_I2C_AddrCallback() is executed and users can + add their own code to check the Address Match Code and the transmission direction request by master + (Write/Read). + (+++) At Listen mode end HAL_I2C_ListenCpltCallback() is executed and users can + add their own code by customization of function pointer HAL_I2C_ListenCpltCallback() + (++) Sequential transmit in slave I2C mode an amount of data in non-blocking mode using + HAL_I2C_Slave_Seq_Transmit_IT() or using HAL_I2C_Slave_Seq_Transmit_DMA() + (+++) At transmission end of current frame transfer, HAL_I2C_SlaveTxCpltCallback() is executed and + users can add their own code by customization of function pointer HAL_I2C_SlaveTxCpltCallback() + (++) Sequential receive in slave I2C mode an amount of data in non-blocking mode using + HAL_I2C_Slave_Seq_Receive_IT() or using HAL_I2C_Slave_Seq_Receive_DMA() + (+++) At reception end of current frame transfer, HAL_I2C_SlaveRxCpltCallback() is executed and users can + add their own code by customization of function pointer HAL_I2C_SlaveRxCpltCallback() + (++) In case of transfer Error, HAL_I2C_ErrorCallback() function is executed and users can + add their own code by customization of function pointer HAL_I2C_ErrorCallback() + (++) Discard a slave I2C process communication using __HAL_I2C_GENERATE_NACK() macro. + This action will inform Master to generate a Stop condition to discard the communication. + + *** Interrupt mode IO MEM operation *** + ======================================= + [..] + (+) Write an amount of data in non-blocking mode with Interrupt to a specific memory address using + HAL_I2C_Mem_Write_IT() + (+) At Memory end of write transfer, HAL_I2C_MemTxCpltCallback() is executed and users can + add their own code by customization of function pointer HAL_I2C_MemTxCpltCallback() + (+) Read an amount of data in non-blocking mode with Interrupt from a specific memory address using + HAL_I2C_Mem_Read_IT() + (+) At Memory end of read transfer, HAL_I2C_MemRxCpltCallback() is executed and users can + add their own code by customization of function pointer HAL_I2C_MemRxCpltCallback() + (+) In case of transfer Error, HAL_I2C_ErrorCallback() function is executed and users can + add their own code by customization of function pointer HAL_I2C_ErrorCallback() + + *** DMA mode IO operation *** + ============================== + [..] + (+) Transmit in master mode an amount of data in non-blocking mode (DMA) using + HAL_I2C_Master_Transmit_DMA() + (+) At transmission end of transfer, HAL_I2C_MasterTxCpltCallback() is executed and users can + add their own code by customization of function pointer HAL_I2C_MasterTxCpltCallback() + (+) Receive in master mode an amount of data in non-blocking mode (DMA) using + HAL_I2C_Master_Receive_DMA() + (+) At reception end of transfer, HAL_I2C_MasterRxCpltCallback() is executed and users can + add their own code by customization of function pointer HAL_I2C_MasterRxCpltCallback() + (+) Transmit in slave mode an amount of data in non-blocking mode (DMA) using + HAL_I2C_Slave_Transmit_DMA() + (+) At transmission end of transfer, HAL_I2C_SlaveTxCpltCallback() is executed and users can + add their own code by customization of function pointer HAL_I2C_SlaveTxCpltCallback() + (+) Receive in slave mode an amount of data in non-blocking mode (DMA) using + HAL_I2C_Slave_Receive_DMA() + (+) At reception end of transfer, HAL_I2C_SlaveRxCpltCallback() is executed and users can + add their own code by customization of function pointer HAL_I2C_SlaveRxCpltCallback() + (+) In case of transfer Error, HAL_I2C_ErrorCallback() function is executed and users can + add their own code by customization of function pointer HAL_I2C_ErrorCallback() + (+) Abort a master I2C process communication with Interrupt using HAL_I2C_Master_Abort_IT() + (+) End of abort process, HAL_I2C_AbortCpltCallback() is executed and users can + add their own code by customization of function pointer HAL_I2C_AbortCpltCallback() + (+) Discard a slave I2C process communication using __HAL_I2C_GENERATE_NACK() macro. + This action will inform Master to generate a Stop condition to discard the communication. + + *** DMA mode IO MEM operation *** + ================================= + [..] + (+) Write an amount of data in non-blocking mode with DMA to a specific memory address using + HAL_I2C_Mem_Write_DMA() + (+) At Memory end of write transfer, HAL_I2C_MemTxCpltCallback() is executed and users can + add their own code by customization of function pointer HAL_I2C_MemTxCpltCallback() + (+) Read an amount of data in non-blocking mode with DMA from a specific memory address using + HAL_I2C_Mem_Read_DMA() + (+) At Memory end of read transfer, HAL_I2C_MemRxCpltCallback() is executed and users can + add their own code by customization of function pointer HAL_I2C_MemRxCpltCallback() + (+) In case of transfer Error, HAL_I2C_ErrorCallback() function is executed and users can + add their own code by customization of function pointer HAL_I2C_ErrorCallback() + + + *** I2C HAL driver macros list *** + ================================== + [..] + Below the list of most used macros in I2C HAL driver. + + (+) __HAL_I2C_ENABLE: Enable the I2C peripheral + (+) __HAL_I2C_DISABLE: Disable the I2C peripheral + (+) __HAL_I2C_GENERATE_NACK: Generate a Non-Acknowledge I2C peripheral in Slave mode + (+) __HAL_I2C_GET_FLAG: Check whether the specified I2C flag is set or not + (+) __HAL_I2C_CLEAR_FLAG: Clear the specified I2C pending flag + (+) __HAL_I2C_ENABLE_IT: Enable the specified I2C interrupt + (+) __HAL_I2C_DISABLE_IT: Disable the specified I2C interrupt + + *** Callback registration *** + ============================================= + [..] + The compilation flag USE_HAL_I2C_REGISTER_CALLBACKS when set to 1 + allows the user to configure dynamically the driver callbacks. + Use Functions HAL_I2C_RegisterCallback() or HAL_I2C_RegisterAddrCallback() + to register an interrupt callback. + [..] + Function HAL_I2C_RegisterCallback() allows to register following callbacks: + (+) MasterTxCpltCallback : callback for Master transmission end of transfer. + (+) MasterRxCpltCallback : callback for Master reception end of transfer. + (+) SlaveTxCpltCallback : callback for Slave transmission end of transfer. + (+) SlaveRxCpltCallback : callback for Slave reception end of transfer. + (+) ListenCpltCallback : callback for end of listen mode. + (+) MemTxCpltCallback : callback for Memory transmission end of transfer. + (+) MemRxCpltCallback : callback for Memory reception end of transfer. + (+) ErrorCallback : callback for error detection. + (+) AbortCpltCallback : callback for abort completion process. + (+) MspInitCallback : callback for Msp Init. + (+) MspDeInitCallback : callback for Msp DeInit. + This function takes as parameters the HAL peripheral handle, the Callback ID + and a pointer to the user callback function. + [..] + For specific callback AddrCallback use dedicated register callbacks : HAL_I2C_RegisterAddrCallback(). + [..] + Use function HAL_I2C_UnRegisterCallback to reset a callback to the default + weak function. + HAL_I2C_UnRegisterCallback takes as parameters the HAL peripheral handle, + and the Callback ID. + This function allows to reset following callbacks: + (+) MasterTxCpltCallback : callback for Master transmission end of transfer. + (+) MasterRxCpltCallback : callback for Master reception end of transfer. + (+) SlaveTxCpltCallback : callback for Slave transmission end of transfer. + (+) SlaveRxCpltCallback : callback for Slave reception end of transfer. + (+) ListenCpltCallback : callback for end of listen mode. + (+) MemTxCpltCallback : callback for Memory transmission end of transfer. + (+) MemRxCpltCallback : callback for Memory reception end of transfer. + (+) ErrorCallback : callback for error detection. + (+) AbortCpltCallback : callback for abort completion process. + (+) MspInitCallback : callback for Msp Init. + (+) MspDeInitCallback : callback for Msp DeInit. + [..] + For callback AddrCallback use dedicated register callbacks : HAL_I2C_UnRegisterAddrCallback(). + [..] + By default, after the HAL_I2C_Init() and when the state is HAL_I2C_STATE_RESET + all callbacks are set to the corresponding weak functions: + examples HAL_I2C_MasterTxCpltCallback(), HAL_I2C_MasterRxCpltCallback(). + Exception done for MspInit and MspDeInit functions that are + reset to the legacy weak functions in the HAL_I2C_Init()/ HAL_I2C_DeInit() only when + these callbacks are null (not registered beforehand). + If MspInit or MspDeInit are not null, the HAL_I2C_Init()/ HAL_I2C_DeInit() + keep and use the user MspInit/MspDeInit callbacks (registered beforehand) whatever the state. + [..] + Callbacks can be registered/unregistered in HAL_I2C_STATE_READY state only. + Exception done MspInit/MspDeInit functions that can be registered/unregistered + in HAL_I2C_STATE_READY or HAL_I2C_STATE_RESET state, + thus registered (user) MspInit/DeInit callbacks can be used during the Init/DeInit. + Then, the user first registers the MspInit/MspDeInit user callbacks + using HAL_I2C_RegisterCallback() before calling HAL_I2C_DeInit() + or HAL_I2C_Init() function. + [..] + When the compilation flag USE_HAL_I2C_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. + + [..] + (@) You can refer to the I2C HAL driver header file for more useful macros + + @endverbatim + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f0xx_hal.h" + +/** @addtogroup STM32F0xx_HAL_Driver + * @{ + */ + +/** @defgroup I2C I2C + * @brief I2C HAL module driver + * @{ + */ + +#ifdef HAL_I2C_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ + +/** @defgroup I2C_Private_Define I2C Private Define + * @{ + */ +#define TIMING_CLEAR_MASK (0xF0FFFFFFU) /*!< I2C TIMING clear register Mask */ +#define I2C_TIMEOUT_ADDR (10000U) /*!< 10 s */ +#define I2C_TIMEOUT_BUSY (25U) /*!< 25 ms */ +#define I2C_TIMEOUT_DIR (25U) /*!< 25 ms */ +#define I2C_TIMEOUT_RXNE (25U) /*!< 25 ms */ +#define I2C_TIMEOUT_STOPF (25U) /*!< 25 ms */ +#define I2C_TIMEOUT_TC (25U) /*!< 25 ms */ +#define I2C_TIMEOUT_TCR (25U) /*!< 25 ms */ +#define I2C_TIMEOUT_TXIS (25U) /*!< 25 ms */ +#define I2C_TIMEOUT_FLAG (25U) /*!< 25 ms */ + +#define MAX_NBYTE_SIZE 255U +#define SLAVE_ADDR_SHIFT 7U +#define SLAVE_ADDR_MSK 0x06U + +/* Private define for @ref PreviousState usage */ +#define I2C_STATE_MSK ((uint32_t)((uint32_t)((uint32_t)HAL_I2C_STATE_BUSY_TX | \ + (uint32_t)HAL_I2C_STATE_BUSY_RX) & \ + (uint32_t)(~((uint32_t)HAL_I2C_STATE_READY)))) +/*!< Mask State define, keep only RX and TX bits */ +#define I2C_STATE_NONE ((uint32_t)(HAL_I2C_MODE_NONE)) +/*!< Default Value */ +#define I2C_STATE_MASTER_BUSY_TX ((uint32_t)(((uint32_t)HAL_I2C_STATE_BUSY_TX & I2C_STATE_MSK) | \ + (uint32_t)HAL_I2C_MODE_MASTER)) +/*!< Master Busy TX, combinaison of State LSB and Mode enum */ +#define I2C_STATE_MASTER_BUSY_RX ((uint32_t)(((uint32_t)HAL_I2C_STATE_BUSY_RX & I2C_STATE_MSK) | \ + (uint32_t)HAL_I2C_MODE_MASTER)) +/*!< Master Busy RX, combinaison of State LSB and Mode enum */ +#define I2C_STATE_SLAVE_BUSY_TX ((uint32_t)(((uint32_t)HAL_I2C_STATE_BUSY_TX & I2C_STATE_MSK) | \ + (uint32_t)HAL_I2C_MODE_SLAVE)) +/*!< Slave Busy TX, combinaison of State LSB and Mode enum */ +#define I2C_STATE_SLAVE_BUSY_RX ((uint32_t)(((uint32_t)HAL_I2C_STATE_BUSY_RX & I2C_STATE_MSK) | \ + (uint32_t)HAL_I2C_MODE_SLAVE)) +/*!< Slave Busy RX, combinaison of State LSB and Mode enum */ +#define I2C_STATE_MEM_BUSY_TX ((uint32_t)(((uint32_t)HAL_I2C_STATE_BUSY_TX & I2C_STATE_MSK) | \ + (uint32_t)HAL_I2C_MODE_MEM)) +/*!< Memory Busy TX, combinaison of State LSB and Mode enum */ +#define I2C_STATE_MEM_BUSY_RX ((uint32_t)(((uint32_t)HAL_I2C_STATE_BUSY_RX & I2C_STATE_MSK) | \ + (uint32_t)HAL_I2C_MODE_MEM)) +/*!< Memory Busy RX, combinaison of State LSB and Mode enum */ + + +/* Private define to centralize the enable/disable of Interrupts */ +#define I2C_XFER_TX_IT (uint16_t)(0x0001U) /*!< Bit field can be combinated with + @ref I2C_XFER_LISTEN_IT */ +#define I2C_XFER_RX_IT (uint16_t)(0x0002U) /*!< Bit field can be combinated with + @ref I2C_XFER_LISTEN_IT */ +#define I2C_XFER_LISTEN_IT (uint16_t)(0x8000U) /*!< Bit field can be combinated with @ref I2C_XFER_TX_IT + and @ref I2C_XFER_RX_IT */ + +#define I2C_XFER_ERROR_IT (uint16_t)(0x0010U) /*!< Bit definition to manage addition of global Error + and NACK treatment */ +#define I2C_XFER_CPLT_IT (uint16_t)(0x0020U) /*!< Bit definition to manage only STOP evenement */ +#define I2C_XFER_RELOAD_IT (uint16_t)(0x0040U) /*!< Bit definition to manage only Reload of NBYTE */ + +/* Private define Sequential Transfer Options default/reset value */ +#define I2C_NO_OPTION_FRAME (0xFFFF0000U) +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/** @addtogroup I2C_Private_Macro + * @{ + */ +/* Macro to get remaining data to transfer on DMA side */ +#define I2C_GET_DMA_REMAIN_DATA(__HANDLE__) __HAL_DMA_GET_COUNTER(__HANDLE__) +/** + * @} + */ + +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ + +/** @defgroup I2C_Private_Functions I2C Private Functions + * @{ + */ +/* Private functions to handle DMA transfer */ +static void I2C_DMAMasterTransmitCplt(DMA_HandleTypeDef *hdma); +static void I2C_DMAMasterReceiveCplt(DMA_HandleTypeDef *hdma); +static void I2C_DMASlaveTransmitCplt(DMA_HandleTypeDef *hdma); +static void I2C_DMASlaveReceiveCplt(DMA_HandleTypeDef *hdma); +static void I2C_DMAError(DMA_HandleTypeDef *hdma); +static void I2C_DMAAbort(DMA_HandleTypeDef *hdma); + + +/* Private functions to handle IT transfer */ +static void I2C_ITAddrCplt(I2C_HandleTypeDef *hi2c, uint32_t ITFlags); +static void I2C_ITMasterSeqCplt(I2C_HandleTypeDef *hi2c); +static void I2C_ITSlaveSeqCplt(I2C_HandleTypeDef *hi2c); +static void I2C_ITMasterCplt(I2C_HandleTypeDef *hi2c, uint32_t ITFlags); +static void I2C_ITSlaveCplt(I2C_HandleTypeDef *hi2c, uint32_t ITFlags); +static void I2C_ITListenCplt(I2C_HandleTypeDef *hi2c, uint32_t ITFlags); +static void I2C_ITError(I2C_HandleTypeDef *hi2c, uint32_t ErrorCode); + +/* Private functions to handle IT transfer */ +static HAL_StatusTypeDef I2C_RequestMemoryWrite(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, + uint16_t MemAddress, uint16_t MemAddSize, uint32_t Timeout, + uint32_t Tickstart); +static HAL_StatusTypeDef I2C_RequestMemoryRead(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, + uint16_t MemAddress, uint16_t MemAddSize, uint32_t Timeout, + uint32_t Tickstart); + +/* Private functions for I2C transfer IRQ handler */ +static HAL_StatusTypeDef I2C_Master_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uint32_t ITFlags, + uint32_t ITSources); +static HAL_StatusTypeDef I2C_Mem_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uint32_t ITFlags, + uint32_t ITSources); +static HAL_StatusTypeDef I2C_Slave_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uint32_t ITFlags, + uint32_t ITSources); +static HAL_StatusTypeDef I2C_Master_ISR_DMA(struct __I2C_HandleTypeDef *hi2c, uint32_t ITFlags, + uint32_t ITSources); +static HAL_StatusTypeDef I2C_Mem_ISR_DMA(struct __I2C_HandleTypeDef *hi2c, uint32_t ITFlags, + uint32_t ITSources); +static HAL_StatusTypeDef I2C_Slave_ISR_DMA(struct __I2C_HandleTypeDef *hi2c, uint32_t ITFlags, + uint32_t ITSources); + +/* Private functions to handle flags during polling transfer */ +static HAL_StatusTypeDef I2C_WaitOnFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Flag, FlagStatus Status, + uint32_t Timeout, uint32_t Tickstart); +static HAL_StatusTypeDef I2C_WaitOnTXISFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Timeout, + uint32_t Tickstart); +static HAL_StatusTypeDef I2C_WaitOnRXNEFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Timeout, + uint32_t Tickstart); +static HAL_StatusTypeDef I2C_WaitOnSTOPFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Timeout, + uint32_t Tickstart); +static HAL_StatusTypeDef I2C_IsErrorOccurred(I2C_HandleTypeDef *hi2c, uint32_t Timeout, + uint32_t Tickstart); + +/* Private functions to centralize the enable/disable of Interrupts */ +static void I2C_Enable_IRQ(I2C_HandleTypeDef *hi2c, uint16_t InterruptRequest); +static void I2C_Disable_IRQ(I2C_HandleTypeDef *hi2c, uint16_t InterruptRequest); + +/* Private function to treat different error callback */ +static void I2C_TreatErrorCallback(I2C_HandleTypeDef *hi2c); + +/* Private function to flush TXDR register */ +static void I2C_Flush_TXDR(I2C_HandleTypeDef *hi2c); + +/* Private function to handle start, restart or stop a transfer */ +static void I2C_TransferConfig(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t Size, uint32_t Mode, + uint32_t Request); + +/* Private function to Convert Specific options */ +static void I2C_ConvertOtherXferOptions(I2C_HandleTypeDef *hi2c); +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ + +/** @defgroup I2C_Exported_Functions I2C Exported Functions + * @{ + */ + +/** @defgroup I2C_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and Configuration functions + * +@verbatim + =============================================================================== + ##### Initialization and de-initialization functions ##### + =============================================================================== + [..] This subsection provides a set of functions allowing to initialize and + deinitialize the I2Cx peripheral: + + (+) User must Implement HAL_I2C_MspInit() function in which he configures + all related peripherals resources (CLOCK, GPIO, DMA, IT and NVIC ). + + (+) Call the function HAL_I2C_Init() to configure the selected device with + the selected configuration: + (++) Clock Timing + (++) Own Address 1 + (++) Addressing mode (Master, Slave) + (++) Dual Addressing mode + (++) Own Address 2 + (++) Own Address 2 Mask + (++) General call mode + (++) Nostretch mode + + (+) Call the function HAL_I2C_DeInit() to restore the default configuration + of the selected I2Cx peripheral. + +@endverbatim + * @{ + */ + +/** + * @brief Initializes the I2C according to the specified parameters + * in the I2C_InitTypeDef and initialize the associated handle. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Init(I2C_HandleTypeDef *hi2c) +{ + /* Check the I2C handle allocation */ + if (hi2c == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_I2C_ALL_INSTANCE(hi2c->Instance)); + assert_param(IS_I2C_OWN_ADDRESS1(hi2c->Init.OwnAddress1)); + assert_param(IS_I2C_ADDRESSING_MODE(hi2c->Init.AddressingMode)); + assert_param(IS_I2C_DUAL_ADDRESS(hi2c->Init.DualAddressMode)); + assert_param(IS_I2C_OWN_ADDRESS2(hi2c->Init.OwnAddress2)); + assert_param(IS_I2C_OWN_ADDRESS2_MASK(hi2c->Init.OwnAddress2Masks)); + assert_param(IS_I2C_GENERAL_CALL(hi2c->Init.GeneralCallMode)); + assert_param(IS_I2C_NO_STRETCH(hi2c->Init.NoStretchMode)); + + if (hi2c->State == HAL_I2C_STATE_RESET) + { + /* Allocate lock resource and initialize it */ + hi2c->Lock = HAL_UNLOCKED; + +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + /* Init the I2C Callback settings */ + hi2c->MasterTxCpltCallback = HAL_I2C_MasterTxCpltCallback; /* Legacy weak MasterTxCpltCallback */ + hi2c->MasterRxCpltCallback = HAL_I2C_MasterRxCpltCallback; /* Legacy weak MasterRxCpltCallback */ + hi2c->SlaveTxCpltCallback = HAL_I2C_SlaveTxCpltCallback; /* Legacy weak SlaveTxCpltCallback */ + hi2c->SlaveRxCpltCallback = HAL_I2C_SlaveRxCpltCallback; /* Legacy weak SlaveRxCpltCallback */ + hi2c->ListenCpltCallback = HAL_I2C_ListenCpltCallback; /* Legacy weak ListenCpltCallback */ + hi2c->MemTxCpltCallback = HAL_I2C_MemTxCpltCallback; /* Legacy weak MemTxCpltCallback */ + hi2c->MemRxCpltCallback = HAL_I2C_MemRxCpltCallback; /* Legacy weak MemRxCpltCallback */ + hi2c->ErrorCallback = HAL_I2C_ErrorCallback; /* Legacy weak ErrorCallback */ + hi2c->AbortCpltCallback = HAL_I2C_AbortCpltCallback; /* Legacy weak AbortCpltCallback */ + hi2c->AddrCallback = HAL_I2C_AddrCallback; /* Legacy weak AddrCallback */ + + if (hi2c->MspInitCallback == NULL) + { + hi2c->MspInitCallback = HAL_I2C_MspInit; /* Legacy weak MspInit */ + } + + /* Init the low level hardware : GPIO, CLOCK, CORTEX...etc */ + hi2c->MspInitCallback(hi2c); +#else + /* Init the low level hardware : GPIO, CLOCK, CORTEX...etc */ + HAL_I2C_MspInit(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + + hi2c->State = HAL_I2C_STATE_BUSY; + + /* Disable the selected I2C peripheral */ + __HAL_I2C_DISABLE(hi2c); + + /*---------------------------- I2Cx TIMINGR Configuration ------------------*/ + /* Configure I2Cx: Frequency range */ + hi2c->Instance->TIMINGR = hi2c->Init.Timing & TIMING_CLEAR_MASK; + + /*---------------------------- I2Cx OAR1 Configuration ---------------------*/ + /* Disable Own Address1 before set the Own Address1 configuration */ + hi2c->Instance->OAR1 &= ~I2C_OAR1_OA1EN; + + /* Configure I2Cx: Own Address1 and ack own address1 mode */ + if (hi2c->Init.AddressingMode == I2C_ADDRESSINGMODE_7BIT) + { + hi2c->Instance->OAR1 = (I2C_OAR1_OA1EN | hi2c->Init.OwnAddress1); + } + else /* I2C_ADDRESSINGMODE_10BIT */ + { + hi2c->Instance->OAR1 = (I2C_OAR1_OA1EN | I2C_OAR1_OA1MODE | hi2c->Init.OwnAddress1); + } + + /*---------------------------- I2Cx CR2 Configuration ----------------------*/ + /* Configure I2Cx: Addressing Master mode */ + if (hi2c->Init.AddressingMode == I2C_ADDRESSINGMODE_10BIT) + { + hi2c->Instance->CR2 = (I2C_CR2_ADD10); + } + /* Enable the AUTOEND by default, and enable NACK (should be disable only during Slave process */ + hi2c->Instance->CR2 |= (I2C_CR2_AUTOEND | I2C_CR2_NACK); + + /*---------------------------- I2Cx OAR2 Configuration ---------------------*/ + /* Disable Own Address2 before set the Own Address2 configuration */ + hi2c->Instance->OAR2 &= ~I2C_DUALADDRESS_ENABLE; + + /* Configure I2Cx: Dual mode and Own Address2 */ + hi2c->Instance->OAR2 = (hi2c->Init.DualAddressMode | hi2c->Init.OwnAddress2 | \ + (hi2c->Init.OwnAddress2Masks << 8)); + + /*---------------------------- I2Cx CR1 Configuration ----------------------*/ + /* Configure I2Cx: Generalcall and NoStretch mode */ + hi2c->Instance->CR1 = (hi2c->Init.GeneralCallMode | hi2c->Init.NoStretchMode); + + /* Enable the selected I2C peripheral */ + __HAL_I2C_ENABLE(hi2c); + + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + hi2c->State = HAL_I2C_STATE_READY; + hi2c->PreviousState = I2C_STATE_NONE; + hi2c->Mode = HAL_I2C_MODE_NONE; + + return HAL_OK; +} + +/** + * @brief DeInitialize the I2C peripheral. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_DeInit(I2C_HandleTypeDef *hi2c) +{ + /* Check the I2C handle allocation */ + if (hi2c == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_I2C_ALL_INSTANCE(hi2c->Instance)); + + hi2c->State = HAL_I2C_STATE_BUSY; + + /* Disable the I2C Peripheral Clock */ + __HAL_I2C_DISABLE(hi2c); + +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + if (hi2c->MspDeInitCallback == NULL) + { + hi2c->MspDeInitCallback = HAL_I2C_MspDeInit; /* Legacy weak MspDeInit */ + } + + /* DeInit the low level hardware: GPIO, CLOCK, NVIC */ + hi2c->MspDeInitCallback(hi2c); +#else + /* DeInit the low level hardware: GPIO, CLOCK, NVIC */ + HAL_I2C_MspDeInit(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + hi2c->State = HAL_I2C_STATE_RESET; + hi2c->PreviousState = I2C_STATE_NONE; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Release Lock */ + __HAL_UNLOCK(hi2c); + + return HAL_OK; +} + +/** + * @brief Initialize the I2C MSP. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval None + */ +__weak void HAL_I2C_MspInit(I2C_HandleTypeDef *hi2c) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hi2c); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_I2C_MspInit could be implemented in the user file + */ +} + +/** + * @brief DeInitialize the I2C MSP. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval None + */ +__weak void HAL_I2C_MspDeInit(I2C_HandleTypeDef *hi2c) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hi2c); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_I2C_MspDeInit could be implemented in the user file + */ +} + +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) +/** + * @brief Register a User I2C Callback + * To be used instead of the weak predefined callback + * @note The HAL_I2C_RegisterCallback() may be called before HAL_I2C_Init() in HAL_I2C_STATE_RESET + * to register callbacks for HAL_I2C_MSPINIT_CB_ID and HAL_I2C_MSPDEINIT_CB_ID. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param CallbackID ID of the callback to be registered + * This parameter can be one of the following values: + * @arg @ref HAL_I2C_MASTER_TX_COMPLETE_CB_ID Master Tx Transfer completed callback ID + * @arg @ref HAL_I2C_MASTER_RX_COMPLETE_CB_ID Master Rx Transfer completed callback ID + * @arg @ref HAL_I2C_SLAVE_TX_COMPLETE_CB_ID Slave Tx Transfer completed callback ID + * @arg @ref HAL_I2C_SLAVE_RX_COMPLETE_CB_ID Slave Rx Transfer completed callback ID + * @arg @ref HAL_I2C_LISTEN_COMPLETE_CB_ID Listen Complete callback ID + * @arg @ref HAL_I2C_MEM_TX_COMPLETE_CB_ID Memory Tx Transfer callback ID + * @arg @ref HAL_I2C_MEM_RX_COMPLETE_CB_ID Memory Rx Transfer completed callback ID + * @arg @ref HAL_I2C_ERROR_CB_ID Error callback ID + * @arg @ref HAL_I2C_ABORT_CB_ID Abort callback ID + * @arg @ref HAL_I2C_MSPINIT_CB_ID MspInit callback ID + * @arg @ref HAL_I2C_MSPDEINIT_CB_ID MspDeInit callback ID + * @param pCallback pointer to the Callback function + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_RegisterCallback(I2C_HandleTypeDef *hi2c, HAL_I2C_CallbackIDTypeDef CallbackID, + pI2C_CallbackTypeDef pCallback) +{ + HAL_StatusTypeDef status = HAL_OK; + + if (pCallback == NULL) + { + /* Update the error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK; + + return HAL_ERROR; + } + + if (HAL_I2C_STATE_READY == hi2c->State) + { + switch (CallbackID) + { + case HAL_I2C_MASTER_TX_COMPLETE_CB_ID : + hi2c->MasterTxCpltCallback = pCallback; + break; + + case HAL_I2C_MASTER_RX_COMPLETE_CB_ID : + hi2c->MasterRxCpltCallback = pCallback; + break; + + case HAL_I2C_SLAVE_TX_COMPLETE_CB_ID : + hi2c->SlaveTxCpltCallback = pCallback; + break; + + case HAL_I2C_SLAVE_RX_COMPLETE_CB_ID : + hi2c->SlaveRxCpltCallback = pCallback; + break; + + case HAL_I2C_LISTEN_COMPLETE_CB_ID : + hi2c->ListenCpltCallback = pCallback; + break; + + case HAL_I2C_MEM_TX_COMPLETE_CB_ID : + hi2c->MemTxCpltCallback = pCallback; + break; + + case HAL_I2C_MEM_RX_COMPLETE_CB_ID : + hi2c->MemRxCpltCallback = pCallback; + break; + + case HAL_I2C_ERROR_CB_ID : + hi2c->ErrorCallback = pCallback; + break; + + case HAL_I2C_ABORT_CB_ID : + hi2c->AbortCpltCallback = pCallback; + break; + + case HAL_I2C_MSPINIT_CB_ID : + hi2c->MspInitCallback = pCallback; + break; + + case HAL_I2C_MSPDEINIT_CB_ID : + hi2c->MspDeInitCallback = pCallback; + break; + + default : + /* Update the error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + break; + } + } + else if (HAL_I2C_STATE_RESET == hi2c->State) + { + switch (CallbackID) + { + case HAL_I2C_MSPINIT_CB_ID : + hi2c->MspInitCallback = pCallback; + break; + + case HAL_I2C_MSPDEINIT_CB_ID : + hi2c->MspDeInitCallback = pCallback; + break; + + default : + /* Update the error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + break; + } + } + else + { + /* Update the error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + } + + return status; +} + +/** + * @brief Unregister an I2C Callback + * I2C callback is redirected to the weak predefined callback + * @note The HAL_I2C_UnRegisterCallback() may be called before HAL_I2C_Init() in HAL_I2C_STATE_RESET + * to un-register callbacks for HAL_I2C_MSPINIT_CB_ID and HAL_I2C_MSPDEINIT_CB_ID. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param CallbackID ID of the callback to be unregistered + * This parameter can be one of the following values: + * This parameter can be one of the following values: + * @arg @ref HAL_I2C_MASTER_TX_COMPLETE_CB_ID Master Tx Transfer completed callback ID + * @arg @ref HAL_I2C_MASTER_RX_COMPLETE_CB_ID Master Rx Transfer completed callback ID + * @arg @ref HAL_I2C_SLAVE_TX_COMPLETE_CB_ID Slave Tx Transfer completed callback ID + * @arg @ref HAL_I2C_SLAVE_RX_COMPLETE_CB_ID Slave Rx Transfer completed callback ID + * @arg @ref HAL_I2C_LISTEN_COMPLETE_CB_ID Listen Complete callback ID + * @arg @ref HAL_I2C_MEM_TX_COMPLETE_CB_ID Memory Tx Transfer callback ID + * @arg @ref HAL_I2C_MEM_RX_COMPLETE_CB_ID Memory Rx Transfer completed callback ID + * @arg @ref HAL_I2C_ERROR_CB_ID Error callback ID + * @arg @ref HAL_I2C_ABORT_CB_ID Abort callback ID + * @arg @ref HAL_I2C_MSPINIT_CB_ID MspInit callback ID + * @arg @ref HAL_I2C_MSPDEINIT_CB_ID MspDeInit callback ID + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_UnRegisterCallback(I2C_HandleTypeDef *hi2c, HAL_I2C_CallbackIDTypeDef CallbackID) +{ + HAL_StatusTypeDef status = HAL_OK; + + if (HAL_I2C_STATE_READY == hi2c->State) + { + switch (CallbackID) + { + case HAL_I2C_MASTER_TX_COMPLETE_CB_ID : + hi2c->MasterTxCpltCallback = HAL_I2C_MasterTxCpltCallback; /* Legacy weak MasterTxCpltCallback */ + break; + + case HAL_I2C_MASTER_RX_COMPLETE_CB_ID : + hi2c->MasterRxCpltCallback = HAL_I2C_MasterRxCpltCallback; /* Legacy weak MasterRxCpltCallback */ + break; + + case HAL_I2C_SLAVE_TX_COMPLETE_CB_ID : + hi2c->SlaveTxCpltCallback = HAL_I2C_SlaveTxCpltCallback; /* Legacy weak SlaveTxCpltCallback */ + break; + + case HAL_I2C_SLAVE_RX_COMPLETE_CB_ID : + hi2c->SlaveRxCpltCallback = HAL_I2C_SlaveRxCpltCallback; /* Legacy weak SlaveRxCpltCallback */ + break; + + case HAL_I2C_LISTEN_COMPLETE_CB_ID : + hi2c->ListenCpltCallback = HAL_I2C_ListenCpltCallback; /* Legacy weak ListenCpltCallback */ + break; + + case HAL_I2C_MEM_TX_COMPLETE_CB_ID : + hi2c->MemTxCpltCallback = HAL_I2C_MemTxCpltCallback; /* Legacy weak MemTxCpltCallback */ + break; + + case HAL_I2C_MEM_RX_COMPLETE_CB_ID : + hi2c->MemRxCpltCallback = HAL_I2C_MemRxCpltCallback; /* Legacy weak MemRxCpltCallback */ + break; + + case HAL_I2C_ERROR_CB_ID : + hi2c->ErrorCallback = HAL_I2C_ErrorCallback; /* Legacy weak ErrorCallback */ + break; + + case HAL_I2C_ABORT_CB_ID : + hi2c->AbortCpltCallback = HAL_I2C_AbortCpltCallback; /* Legacy weak AbortCpltCallback */ + break; + + case HAL_I2C_MSPINIT_CB_ID : + hi2c->MspInitCallback = HAL_I2C_MspInit; /* Legacy weak MspInit */ + break; + + case HAL_I2C_MSPDEINIT_CB_ID : + hi2c->MspDeInitCallback = HAL_I2C_MspDeInit; /* Legacy weak MspDeInit */ + break; + + default : + /* Update the error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + break; + } + } + else if (HAL_I2C_STATE_RESET == hi2c->State) + { + switch (CallbackID) + { + case HAL_I2C_MSPINIT_CB_ID : + hi2c->MspInitCallback = HAL_I2C_MspInit; /* Legacy weak MspInit */ + break; + + case HAL_I2C_MSPDEINIT_CB_ID : + hi2c->MspDeInitCallback = HAL_I2C_MspDeInit; /* Legacy weak MspDeInit */ + break; + + default : + /* Update the error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + break; + } + } + else + { + /* Update the error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + } + + return status; +} + +/** + * @brief Register the Slave Address Match I2C Callback + * To be used instead of the weak HAL_I2C_AddrCallback() predefined callback + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param pCallback pointer to the Address Match Callback function + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_RegisterAddrCallback(I2C_HandleTypeDef *hi2c, pI2C_AddrCallbackTypeDef pCallback) +{ + HAL_StatusTypeDef status = HAL_OK; + + if (pCallback == NULL) + { + /* Update the error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK; + + return HAL_ERROR; + } + + if (HAL_I2C_STATE_READY == hi2c->State) + { + hi2c->AddrCallback = pCallback; + } + else + { + /* Update the error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + } + + return status; +} + +/** + * @brief UnRegister the Slave Address Match I2C Callback + * Info Ready I2C Callback is redirected to the weak HAL_I2C_AddrCallback() predefined callback + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_UnRegisterAddrCallback(I2C_HandleTypeDef *hi2c) +{ + HAL_StatusTypeDef status = HAL_OK; + + if (HAL_I2C_STATE_READY == hi2c->State) + { + hi2c->AddrCallback = HAL_I2C_AddrCallback; /* Legacy weak AddrCallback */ + } + else + { + /* Update the error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + } + + return status; +} + +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + +/** + * @} + */ + +/** @defgroup I2C_Exported_Functions_Group2 Input and Output operation functions + * @brief Data transfers functions + * +@verbatim + =============================================================================== + ##### IO operation functions ##### + =============================================================================== + [..] + This subsection provides a set of functions allowing to manage the I2C data + transfers. + + (#) There are two modes of transfer: + (++) Blocking mode : The communication is performed in the polling mode. + The status of all data processing is returned by the same function + after finishing transfer. + (++) No-Blocking mode : The communication is performed using Interrupts + or DMA. These functions return the status of the transfer startup. + The end of the data processing will be indicated through the + dedicated I2C IRQ when using Interrupt mode or the DMA IRQ when + using DMA mode. + + (#) Blocking mode functions are : + (++) HAL_I2C_Master_Transmit() + (++) HAL_I2C_Master_Receive() + (++) HAL_I2C_Slave_Transmit() + (++) HAL_I2C_Slave_Receive() + (++) HAL_I2C_Mem_Write() + (++) HAL_I2C_Mem_Read() + (++) HAL_I2C_IsDeviceReady() + + (#) No-Blocking mode functions with Interrupt are : + (++) HAL_I2C_Master_Transmit_IT() + (++) HAL_I2C_Master_Receive_IT() + (++) HAL_I2C_Slave_Transmit_IT() + (++) HAL_I2C_Slave_Receive_IT() + (++) HAL_I2C_Mem_Write_IT() + (++) HAL_I2C_Mem_Read_IT() + (++) HAL_I2C_Master_Seq_Transmit_IT() + (++) HAL_I2C_Master_Seq_Receive_IT() + (++) HAL_I2C_Slave_Seq_Transmit_IT() + (++) HAL_I2C_Slave_Seq_Receive_IT() + (++) HAL_I2C_EnableListen_IT() + (++) HAL_I2C_DisableListen_IT() + (++) HAL_I2C_Master_Abort_IT() + + (#) No-Blocking mode functions with DMA are : + (++) HAL_I2C_Master_Transmit_DMA() + (++) HAL_I2C_Master_Receive_DMA() + (++) HAL_I2C_Slave_Transmit_DMA() + (++) HAL_I2C_Slave_Receive_DMA() + (++) HAL_I2C_Mem_Write_DMA() + (++) HAL_I2C_Mem_Read_DMA() + (++) HAL_I2C_Master_Seq_Transmit_DMA() + (++) HAL_I2C_Master_Seq_Receive_DMA() + (++) HAL_I2C_Slave_Seq_Transmit_DMA() + (++) HAL_I2C_Slave_Seq_Receive_DMA() + + (#) A set of Transfer Complete Callbacks are provided in non Blocking mode: + (++) HAL_I2C_MasterTxCpltCallback() + (++) HAL_I2C_MasterRxCpltCallback() + (++) HAL_I2C_SlaveTxCpltCallback() + (++) HAL_I2C_SlaveRxCpltCallback() + (++) HAL_I2C_MemTxCpltCallback() + (++) HAL_I2C_MemRxCpltCallback() + (++) HAL_I2C_AddrCallback() + (++) HAL_I2C_ListenCpltCallback() + (++) HAL_I2C_ErrorCallback() + (++) HAL_I2C_AbortCpltCallback() + +@endverbatim + * @{ + */ + +/** + * @brief Transmits in master mode an amount of data in blocking mode. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @param Timeout Timeout duration + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, + uint16_t Size, uint32_t Timeout) +{ + uint32_t tickstart; + + if (hi2c->State == HAL_I2C_STATE_READY) + { + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* Init tickstart for timeout management*/ + tickstart = HAL_GetTick(); + + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, I2C_TIMEOUT_BUSY, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + hi2c->State = HAL_I2C_STATE_BUSY_TX; + hi2c->Mode = HAL_I2C_MODE_MASTER; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferISR = NULL; + + /* Send Slave Address */ + /* Set NBYTES to write and reload if hi2c->XferCount > MAX_NBYTE_SIZE and generate RESTART */ + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_RELOAD_MODE, + I2C_GENERATE_START_WRITE); + } + else + { + hi2c->XferSize = hi2c->XferCount; + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_AUTOEND_MODE, + I2C_GENERATE_START_WRITE); + } + + while (hi2c->XferCount > 0U) + { + /* Wait until TXIS flag is set */ + if (I2C_WaitOnTXISFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + /* Write data to TXDR */ + hi2c->Instance->TXDR = *hi2c->pBuffPtr; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + hi2c->XferCount--; + hi2c->XferSize--; + + if ((hi2c->XferCount != 0U) && (hi2c->XferSize == 0U)) + { + /* Wait until TCR flag is set */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_TCR, RESET, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_RELOAD_MODE, + I2C_NO_STARTSTOP); + } + else + { + hi2c->XferSize = hi2c->XferCount; + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_AUTOEND_MODE, + I2C_NO_STARTSTOP); + } + } + } + + /* No need to Check TC flag, with AUTOEND mode the stop is automatically generated */ + /* Wait until STOPF flag is set */ + if (I2C_WaitOnSTOPFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Clear STOP Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF); + + /* Clear Configuration Register 2 */ + I2C_RESET_CR2(hi2c); + + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Receives in master mode an amount of data in blocking mode. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @param Timeout Timeout duration + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, + uint16_t Size, uint32_t Timeout) +{ + uint32_t tickstart; + + if (hi2c->State == HAL_I2C_STATE_READY) + { + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* Init tickstart for timeout management*/ + tickstart = HAL_GetTick(); + + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, I2C_TIMEOUT_BUSY, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + hi2c->State = HAL_I2C_STATE_BUSY_RX; + hi2c->Mode = HAL_I2C_MODE_MASTER; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferISR = NULL; + + /* Send Slave Address */ + /* Set NBYTES to write and reload if hi2c->XferCount > MAX_NBYTE_SIZE and generate RESTART */ + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_RELOAD_MODE, + I2C_GENERATE_START_READ); + } + else + { + hi2c->XferSize = hi2c->XferCount; + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_AUTOEND_MODE, + I2C_GENERATE_START_READ); + } + + while (hi2c->XferCount > 0U) + { + /* Wait until RXNE flag is set */ + if (I2C_WaitOnRXNEFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Read data from RXDR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->RXDR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + hi2c->XferSize--; + hi2c->XferCount--; + + if ((hi2c->XferCount != 0U) && (hi2c->XferSize == 0U)) + { + /* Wait until TCR flag is set */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_TCR, RESET, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_RELOAD_MODE, + I2C_NO_STARTSTOP); + } + else + { + hi2c->XferSize = hi2c->XferCount; + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_AUTOEND_MODE, + I2C_NO_STARTSTOP); + } + } + } + + /* No need to Check TC flag, with AUTOEND mode the stop is automatically generated */ + /* Wait until STOPF flag is set */ + if (I2C_WaitOnSTOPFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Clear STOP Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF); + + /* Clear Configuration Register 2 */ + I2C_RESET_CR2(hi2c); + + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Transmits in slave mode an amount of data in blocking mode. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @param Timeout Timeout duration + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Slave_Transmit(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, + uint32_t Timeout) +{ + uint32_t tickstart; + + if (hi2c->State == HAL_I2C_STATE_READY) + { + if ((pData == NULL) || (Size == 0U)) + { + hi2c->ErrorCode = HAL_I2C_ERROR_INVALID_PARAM; + return HAL_ERROR; + } + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* Init tickstart for timeout management*/ + tickstart = HAL_GetTick(); + + hi2c->State = HAL_I2C_STATE_BUSY_TX; + hi2c->Mode = HAL_I2C_MODE_SLAVE; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferISR = NULL; + + /* Enable Address Acknowledge */ + hi2c->Instance->CR2 &= ~I2C_CR2_NACK; + + /* Wait until ADDR flag is set */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_ADDR, RESET, Timeout, tickstart) != HAL_OK) + { + /* Disable Address Acknowledge */ + hi2c->Instance->CR2 |= I2C_CR2_NACK; + return HAL_ERROR; + } + + /* Preload TX data if no stretch enable */ + if (hi2c->Init.NoStretchMode == I2C_NOSTRETCH_ENABLE) + { + /* Preload TX register */ + /* Write data to TXDR */ + hi2c->Instance->TXDR = *hi2c->pBuffPtr; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + hi2c->XferCount--; + } + + /* Clear ADDR flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_ADDR); + + /* If 10bit addressing mode is selected */ + if (hi2c->Init.AddressingMode == I2C_ADDRESSINGMODE_10BIT) + { + /* Wait until ADDR flag is set */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_ADDR, RESET, Timeout, tickstart) != HAL_OK) + { + /* Disable Address Acknowledge */ + hi2c->Instance->CR2 |= I2C_CR2_NACK; + return HAL_ERROR; + } + + /* Clear ADDR flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_ADDR); + } + + /* Wait until DIR flag is set Transmitter mode */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_DIR, RESET, Timeout, tickstart) != HAL_OK) + { + /* Disable Address Acknowledge */ + hi2c->Instance->CR2 |= I2C_CR2_NACK; + return HAL_ERROR; + } + + while (hi2c->XferCount > 0U) + { + /* Wait until TXIS flag is set */ + if (I2C_WaitOnTXISFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) + { + /* Disable Address Acknowledge */ + hi2c->Instance->CR2 |= I2C_CR2_NACK; + return HAL_ERROR; + } + + /* Write data to TXDR */ + hi2c->Instance->TXDR = *hi2c->pBuffPtr; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + hi2c->XferCount--; + } + + /* Wait until AF flag is set */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_AF, RESET, Timeout, tickstart) != HAL_OK) + { + /* Disable Address Acknowledge */ + hi2c->Instance->CR2 |= I2C_CR2_NACK; + return HAL_ERROR; + } + + /* Flush TX register */ + I2C_Flush_TXDR(hi2c); + + /* Clear AF flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF); + + /* Wait until STOP flag is set */ + if (I2C_WaitOnSTOPFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) + { + /* Disable Address Acknowledge */ + hi2c->Instance->CR2 |= I2C_CR2_NACK; + + return HAL_ERROR; + } + + /* Clear STOP flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF); + + /* Wait until BUSY flag is reset */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, Timeout, tickstart) != HAL_OK) + { + /* Disable Address Acknowledge */ + hi2c->Instance->CR2 |= I2C_CR2_NACK; + return HAL_ERROR; + } + + /* Disable Address Acknowledge */ + hi2c->Instance->CR2 |= I2C_CR2_NACK; + + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Receive in slave mode an amount of data in blocking mode + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @param Timeout Timeout duration + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Slave_Receive(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, + uint32_t Timeout) +{ + uint32_t tickstart; + + if (hi2c->State == HAL_I2C_STATE_READY) + { + if ((pData == NULL) || (Size == 0U)) + { + hi2c->ErrorCode = HAL_I2C_ERROR_INVALID_PARAM; + return HAL_ERROR; + } + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* Init tickstart for timeout management*/ + tickstart = HAL_GetTick(); + + hi2c->State = HAL_I2C_STATE_BUSY_RX; + hi2c->Mode = HAL_I2C_MODE_SLAVE; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferSize = hi2c->XferCount; + hi2c->XferISR = NULL; + + /* Enable Address Acknowledge */ + hi2c->Instance->CR2 &= ~I2C_CR2_NACK; + + /* Wait until ADDR flag is set */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_ADDR, RESET, Timeout, tickstart) != HAL_OK) + { + /* Disable Address Acknowledge */ + hi2c->Instance->CR2 |= I2C_CR2_NACK; + return HAL_ERROR; + } + + /* Clear ADDR flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_ADDR); + + /* Wait until DIR flag is reset Receiver mode */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_DIR, SET, Timeout, tickstart) != HAL_OK) + { + /* Disable Address Acknowledge */ + hi2c->Instance->CR2 |= I2C_CR2_NACK; + return HAL_ERROR; + } + + while (hi2c->XferCount > 0U) + { + /* Wait until RXNE flag is set */ + if (I2C_WaitOnRXNEFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) + { + /* Disable Address Acknowledge */ + hi2c->Instance->CR2 |= I2C_CR2_NACK; + + /* Store Last receive data if any */ + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_RXNE) == SET) + { + /* Read data from RXDR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->RXDR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + hi2c->XferCount--; + hi2c->XferSize--; + } + + return HAL_ERROR; + } + + /* Read data from RXDR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->RXDR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + hi2c->XferCount--; + hi2c->XferSize--; + } + + /* Wait until STOP flag is set */ + if (I2C_WaitOnSTOPFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) + { + /* Disable Address Acknowledge */ + hi2c->Instance->CR2 |= I2C_CR2_NACK; + return HAL_ERROR; + } + + /* Clear STOP flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF); + + /* Wait until BUSY flag is reset */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, Timeout, tickstart) != HAL_OK) + { + /* Disable Address Acknowledge */ + hi2c->Instance->CR2 |= I2C_CR2_NACK; + return HAL_ERROR; + } + + /* Disable Address Acknowledge */ + hi2c->Instance->CR2 |= I2C_CR2_NACK; + + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Transmit in master mode an amount of data in non-blocking mode with Interrupt + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Master_Transmit_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, + uint16_t Size) +{ + uint32_t xfermode; + + if (hi2c->State == HAL_I2C_STATE_READY) + { + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) == SET) + { + return HAL_BUSY; + } + + /* Process Locked */ + __HAL_LOCK(hi2c); + + hi2c->State = HAL_I2C_STATE_BUSY_TX; + hi2c->Mode = HAL_I2C_MODE_MASTER; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + hi2c->XferISR = I2C_Master_ISR_IT; + + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + xfermode = I2C_RELOAD_MODE; + } + else + { + hi2c->XferSize = hi2c->XferCount; + xfermode = I2C_AUTOEND_MODE; + } + + /* Send Slave Address */ + /* Set NBYTES to write and reload if hi2c->XferCount > MAX_NBYTE_SIZE */ + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, xfermode, I2C_GENERATE_START_WRITE); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + + /* Enable ERR, TC, STOP, NACK, TXI interrupt */ + /* possible to enable all of these */ + /* I2C_IT_ERRI | I2C_IT_TCI | I2C_IT_STOPI | I2C_IT_NACKI | + I2C_IT_ADDRI | I2C_IT_RXI | I2C_IT_TXI */ + I2C_Enable_IRQ(hi2c, I2C_XFER_TX_IT); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Receive in master mode an amount of data in non-blocking mode with Interrupt + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Master_Receive_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, + uint16_t Size) +{ + uint32_t xfermode; + + if (hi2c->State == HAL_I2C_STATE_READY) + { + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) == SET) + { + return HAL_BUSY; + } + + /* Process Locked */ + __HAL_LOCK(hi2c); + + hi2c->State = HAL_I2C_STATE_BUSY_RX; + hi2c->Mode = HAL_I2C_MODE_MASTER; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + hi2c->XferISR = I2C_Master_ISR_IT; + + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + xfermode = I2C_RELOAD_MODE; + } + else + { + hi2c->XferSize = hi2c->XferCount; + xfermode = I2C_AUTOEND_MODE; + } + + /* Send Slave Address */ + /* Set NBYTES to write and reload if hi2c->XferCount > MAX_NBYTE_SIZE */ + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, xfermode, I2C_GENERATE_START_READ); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + + /* Enable ERR, TC, STOP, NACK, RXI interrupt */ + /* possible to enable all of these */ + /* I2C_IT_ERRI | I2C_IT_TCI | I2C_IT_STOPI | I2C_IT_NACKI | + I2C_IT_ADDRI | I2C_IT_RXI | I2C_IT_TXI */ + I2C_Enable_IRQ(hi2c, I2C_XFER_RX_IT); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Transmit in slave mode an amount of data in non-blocking mode with Interrupt + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Slave_Transmit_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size) +{ + if (hi2c->State == HAL_I2C_STATE_READY) + { + /* Process Locked */ + __HAL_LOCK(hi2c); + + hi2c->State = HAL_I2C_STATE_BUSY_TX; + hi2c->Mode = HAL_I2C_MODE_SLAVE; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Enable Address Acknowledge */ + hi2c->Instance->CR2 &= ~I2C_CR2_NACK; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferSize = hi2c->XferCount; + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + hi2c->XferISR = I2C_Slave_ISR_IT; + + /* Preload TX data if no stretch enable */ + if (hi2c->Init.NoStretchMode == I2C_NOSTRETCH_ENABLE) + { + /* Preload TX register */ + /* Write data to TXDR */ + hi2c->Instance->TXDR = *hi2c->pBuffPtr; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + hi2c->XferCount--; + hi2c->XferSize--; + } + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + + /* Enable ERR, TC, STOP, NACK, TXI interrupt */ + /* possible to enable all of these */ + /* I2C_IT_ERRI | I2C_IT_TCI | I2C_IT_STOPI | I2C_IT_NACKI | + I2C_IT_ADDRI | I2C_IT_RXI | I2C_IT_TXI */ + I2C_Enable_IRQ(hi2c, I2C_XFER_TX_IT | I2C_XFER_LISTEN_IT); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Receive in slave mode an amount of data in non-blocking mode with Interrupt + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Slave_Receive_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size) +{ + if (hi2c->State == HAL_I2C_STATE_READY) + { + /* Process Locked */ + __HAL_LOCK(hi2c); + + hi2c->State = HAL_I2C_STATE_BUSY_RX; + hi2c->Mode = HAL_I2C_MODE_SLAVE; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Enable Address Acknowledge */ + hi2c->Instance->CR2 &= ~I2C_CR2_NACK; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferSize = hi2c->XferCount; + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + hi2c->XferISR = I2C_Slave_ISR_IT; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + + /* Enable ERR, TC, STOP, NACK, RXI interrupt */ + /* possible to enable all of these */ + /* I2C_IT_ERRI | I2C_IT_TCI | I2C_IT_STOPI | I2C_IT_NACKI | + I2C_IT_ADDRI | I2C_IT_RXI | I2C_IT_TXI */ + I2C_Enable_IRQ(hi2c, I2C_XFER_RX_IT | I2C_XFER_LISTEN_IT); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Transmit in master mode an amount of data in non-blocking mode with DMA + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Master_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, + uint16_t Size) +{ + uint32_t xfermode; + HAL_StatusTypeDef dmaxferstatus; + + if (hi2c->State == HAL_I2C_STATE_READY) + { + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) == SET) + { + return HAL_BUSY; + } + + /* Process Locked */ + __HAL_LOCK(hi2c); + + hi2c->State = HAL_I2C_STATE_BUSY_TX; + hi2c->Mode = HAL_I2C_MODE_MASTER; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + hi2c->XferISR = I2C_Master_ISR_DMA; + + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + xfermode = I2C_RELOAD_MODE; + } + else + { + hi2c->XferSize = hi2c->XferCount; + xfermode = I2C_AUTOEND_MODE; + } + + if (hi2c->XferSize > 0U) + { + if (hi2c->hdmatx != NULL) + { + /* Set the I2C DMA transfer complete callback */ + hi2c->hdmatx->XferCpltCallback = I2C_DMAMasterTransmitCplt; + + /* Set the DMA error callback */ + hi2c->hdmatx->XferErrorCallback = I2C_DMAError; + + /* Set the unused DMA callbacks to NULL */ + hi2c->hdmatx->XferHalfCpltCallback = NULL; + hi2c->hdmatx->XferAbortCallback = NULL; + + /* Enable the DMA channel */ + dmaxferstatus = HAL_DMA_Start_IT(hi2c->hdmatx, (uint32_t)pData, (uint32_t)&hi2c->Instance->TXDR, + hi2c->XferSize); + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA_PARAM; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + + if (dmaxferstatus == HAL_OK) + { + /* Send Slave Address */ + /* Set NBYTES to write and reload if hi2c->XferCount > MAX_NBYTE_SIZE and generate RESTART */ + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, xfermode, I2C_GENERATE_START_WRITE); + + /* Update XferCount value */ + hi2c->XferCount -= hi2c->XferSize; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + /* Enable ERR and NACK interrupts */ + I2C_Enable_IRQ(hi2c, I2C_XFER_ERROR_IT); + + /* Enable DMA Request */ + hi2c->Instance->CR1 |= I2C_CR1_TXDMAEN; + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + } + else + { + /* Update Transfer ISR function pointer */ + hi2c->XferISR = I2C_Master_ISR_IT; + + /* Send Slave Address */ + /* Set NBYTES to write and generate START condition */ + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_AUTOEND_MODE, + I2C_GENERATE_START_WRITE); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + /* Enable ERR, TC, STOP, NACK, TXI interrupt */ + /* possible to enable all of these */ + /* I2C_IT_ERRI | I2C_IT_TCI | I2C_IT_STOPI | I2C_IT_NACKI | + I2C_IT_ADDRI | I2C_IT_RXI | I2C_IT_TXI */ + I2C_Enable_IRQ(hi2c, I2C_XFER_TX_IT); + } + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Receive in master mode an amount of data in non-blocking mode with DMA + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Master_Receive_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, + uint16_t Size) +{ + uint32_t xfermode; + HAL_StatusTypeDef dmaxferstatus; + + if (hi2c->State == HAL_I2C_STATE_READY) + { + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) == SET) + { + return HAL_BUSY; + } + + /* Process Locked */ + __HAL_LOCK(hi2c); + + hi2c->State = HAL_I2C_STATE_BUSY_RX; + hi2c->Mode = HAL_I2C_MODE_MASTER; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + hi2c->XferISR = I2C_Master_ISR_DMA; + + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + xfermode = I2C_RELOAD_MODE; + } + else + { + hi2c->XferSize = hi2c->XferCount; + xfermode = I2C_AUTOEND_MODE; + } + + if (hi2c->XferSize > 0U) + { + if (hi2c->hdmarx != NULL) + { + /* Set the I2C DMA transfer complete callback */ + hi2c->hdmarx->XferCpltCallback = I2C_DMAMasterReceiveCplt; + + /* Set the DMA error callback */ + hi2c->hdmarx->XferErrorCallback = I2C_DMAError; + + /* Set the unused DMA callbacks to NULL */ + hi2c->hdmarx->XferHalfCpltCallback = NULL; + hi2c->hdmarx->XferAbortCallback = NULL; + + /* Enable the DMA channel */ + dmaxferstatus = HAL_DMA_Start_IT(hi2c->hdmarx, (uint32_t)&hi2c->Instance->RXDR, (uint32_t)pData, + hi2c->XferSize); + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA_PARAM; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + + if (dmaxferstatus == HAL_OK) + { + /* Send Slave Address */ + /* Set NBYTES to read and reload if hi2c->XferCount > MAX_NBYTE_SIZE and generate RESTART */ + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, xfermode, I2C_GENERATE_START_READ); + + /* Update XferCount value */ + hi2c->XferCount -= hi2c->XferSize; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + /* Enable ERR and NACK interrupts */ + I2C_Enable_IRQ(hi2c, I2C_XFER_ERROR_IT); + + /* Enable DMA Request */ + hi2c->Instance->CR1 |= I2C_CR1_RXDMAEN; + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + } + else + { + /* Update Transfer ISR function pointer */ + hi2c->XferISR = I2C_Master_ISR_IT; + + /* Send Slave Address */ + /* Set NBYTES to read and generate START condition */ + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_AUTOEND_MODE, + I2C_GENERATE_START_READ); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + /* Enable ERR, TC, STOP, NACK, TXI interrupt */ + /* possible to enable all of these */ + /* I2C_IT_ERRI | I2C_IT_TCI | I2C_IT_STOPI | I2C_IT_NACKI | + I2C_IT_ADDRI | I2C_IT_RXI | I2C_IT_TXI */ + I2C_Enable_IRQ(hi2c, I2C_XFER_TX_IT); + } + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Transmit in slave mode an amount of data in non-blocking mode with DMA + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Slave_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size) +{ + HAL_StatusTypeDef dmaxferstatus; + + if (hi2c->State == HAL_I2C_STATE_READY) + { + if ((pData == NULL) || (Size == 0U)) + { + hi2c->ErrorCode = HAL_I2C_ERROR_INVALID_PARAM; + return HAL_ERROR; + } + /* Process Locked */ + __HAL_LOCK(hi2c); + + hi2c->State = HAL_I2C_STATE_BUSY_TX; + hi2c->Mode = HAL_I2C_MODE_SLAVE; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferSize = hi2c->XferCount; + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + hi2c->XferISR = I2C_Slave_ISR_DMA; + + /* Preload TX data if no stretch enable */ + if (hi2c->Init.NoStretchMode == I2C_NOSTRETCH_ENABLE) + { + /* Preload TX register */ + /* Write data to TXDR */ + hi2c->Instance->TXDR = *hi2c->pBuffPtr; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + hi2c->XferCount--; + hi2c->XferSize--; + } + + if (hi2c->XferCount != 0U) + { + if (hi2c->hdmatx != NULL) + { + /* Set the I2C DMA transfer complete callback */ + hi2c->hdmatx->XferCpltCallback = I2C_DMASlaveTransmitCplt; + + /* Set the DMA error callback */ + hi2c->hdmatx->XferErrorCallback = I2C_DMAError; + + /* Set the unused DMA callbacks to NULL */ + hi2c->hdmatx->XferHalfCpltCallback = NULL; + hi2c->hdmatx->XferAbortCallback = NULL; + + /* Enable the DMA channel */ + dmaxferstatus = HAL_DMA_Start_IT(hi2c->hdmatx, + (uint32_t)hi2c->pBuffPtr, (uint32_t)&hi2c->Instance->TXDR, + hi2c->XferSize); + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_LISTEN; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA_PARAM; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + + if (dmaxferstatus == HAL_OK) + { + /* Enable Address Acknowledge */ + hi2c->Instance->CR2 &= ~I2C_CR2_NACK; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + /* Enable ERR, STOP, NACK, ADDR interrupts */ + I2C_Enable_IRQ(hi2c, I2C_XFER_LISTEN_IT); + + /* Enable DMA Request */ + hi2c->Instance->CR1 |= I2C_CR1_TXDMAEN; + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_LISTEN; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + } + else + { + /* Enable Address Acknowledge */ + hi2c->Instance->CR2 &= ~I2C_CR2_NACK; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + /* Enable ERR, STOP, NACK, ADDR interrupts */ + I2C_Enable_IRQ(hi2c, I2C_XFER_LISTEN_IT); + } + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Receive in slave mode an amount of data in non-blocking mode with DMA + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Slave_Receive_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size) +{ + HAL_StatusTypeDef dmaxferstatus; + + if (hi2c->State == HAL_I2C_STATE_READY) + { + if ((pData == NULL) || (Size == 0U)) + { + hi2c->ErrorCode = HAL_I2C_ERROR_INVALID_PARAM; + return HAL_ERROR; + } + /* Process Locked */ + __HAL_LOCK(hi2c); + + hi2c->State = HAL_I2C_STATE_BUSY_RX; + hi2c->Mode = HAL_I2C_MODE_SLAVE; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferSize = hi2c->XferCount; + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + hi2c->XferISR = I2C_Slave_ISR_DMA; + + if (hi2c->hdmarx != NULL) + { + /* Set the I2C DMA transfer complete callback */ + hi2c->hdmarx->XferCpltCallback = I2C_DMASlaveReceiveCplt; + + /* Set the DMA error callback */ + hi2c->hdmarx->XferErrorCallback = I2C_DMAError; + + /* Set the unused DMA callbacks to NULL */ + hi2c->hdmarx->XferHalfCpltCallback = NULL; + hi2c->hdmarx->XferAbortCallback = NULL; + + /* Enable the DMA channel */ + dmaxferstatus = HAL_DMA_Start_IT(hi2c->hdmarx, (uint32_t)&hi2c->Instance->RXDR, (uint32_t)pData, + hi2c->XferSize); + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_LISTEN; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA_PARAM; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + + if (dmaxferstatus == HAL_OK) + { + /* Enable Address Acknowledge */ + hi2c->Instance->CR2 &= ~I2C_CR2_NACK; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + /* Enable ERR, STOP, NACK, ADDR interrupts */ + I2C_Enable_IRQ(hi2c, I2C_XFER_LISTEN_IT); + + /* Enable DMA Request */ + hi2c->Instance->CR1 |= I2C_CR1_RXDMAEN; + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_LISTEN; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Write an amount of data in blocking mode to a specific memory address + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param MemAddress Internal memory address + * @param MemAddSize Size of internal memory address + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @param Timeout Timeout duration + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, + uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout) +{ + uint32_t tickstart; + + /* Check the parameters */ + assert_param(IS_I2C_MEMADD_SIZE(MemAddSize)); + + if (hi2c->State == HAL_I2C_STATE_READY) + { + if ((pData == NULL) || (Size == 0U)) + { + hi2c->ErrorCode = HAL_I2C_ERROR_INVALID_PARAM; + return HAL_ERROR; + } + + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* Init tickstart for timeout management*/ + tickstart = HAL_GetTick(); + + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, I2C_TIMEOUT_BUSY, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + hi2c->State = HAL_I2C_STATE_BUSY_TX; + hi2c->Mode = HAL_I2C_MODE_MEM; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferISR = NULL; + + /* Send Slave Address and Memory Address */ + if (I2C_RequestMemoryWrite(hi2c, DevAddress, MemAddress, MemAddSize, Timeout, tickstart) != HAL_OK) + { + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + return HAL_ERROR; + } + + /* Set NBYTES to write and reload if hi2c->XferCount > MAX_NBYTE_SIZE */ + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_RELOAD_MODE, I2C_NO_STARTSTOP); + } + else + { + hi2c->XferSize = hi2c->XferCount; + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_AUTOEND_MODE, I2C_NO_STARTSTOP); + } + + do + { + /* Wait until TXIS flag is set */ + if (I2C_WaitOnTXISFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Write data to TXDR */ + hi2c->Instance->TXDR = *hi2c->pBuffPtr; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + hi2c->XferCount--; + hi2c->XferSize--; + + if ((hi2c->XferCount != 0U) && (hi2c->XferSize == 0U)) + { + /* Wait until TCR flag is set */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_TCR, RESET, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_RELOAD_MODE, + I2C_NO_STARTSTOP); + } + else + { + hi2c->XferSize = hi2c->XferCount; + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_AUTOEND_MODE, + I2C_NO_STARTSTOP); + } + } + + } while (hi2c->XferCount > 0U); + + /* No need to Check TC flag, with AUTOEND mode the stop is automatically generated */ + /* Wait until STOPF flag is reset */ + if (I2C_WaitOnSTOPFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Clear STOP Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF); + + /* Clear Configuration Register 2 */ + I2C_RESET_CR2(hi2c); + + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Read an amount of data in blocking mode from a specific memory address + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param MemAddress Internal memory address + * @param MemAddSize Size of internal memory address + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @param Timeout Timeout duration + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, + uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout) +{ + uint32_t tickstart; + + /* Check the parameters */ + assert_param(IS_I2C_MEMADD_SIZE(MemAddSize)); + + if (hi2c->State == HAL_I2C_STATE_READY) + { + if ((pData == NULL) || (Size == 0U)) + { + hi2c->ErrorCode = HAL_I2C_ERROR_INVALID_PARAM; + return HAL_ERROR; + } + + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* Init tickstart for timeout management*/ + tickstart = HAL_GetTick(); + + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, I2C_TIMEOUT_BUSY, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + hi2c->State = HAL_I2C_STATE_BUSY_RX; + hi2c->Mode = HAL_I2C_MODE_MEM; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferISR = NULL; + + /* Send Slave Address and Memory Address */ + if (I2C_RequestMemoryRead(hi2c, DevAddress, MemAddress, MemAddSize, Timeout, tickstart) != HAL_OK) + { + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + return HAL_ERROR; + } + + /* Send Slave Address */ + /* Set NBYTES to write and reload if hi2c->XferCount > MAX_NBYTE_SIZE and generate RESTART */ + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_RELOAD_MODE, + I2C_GENERATE_START_READ); + } + else + { + hi2c->XferSize = hi2c->XferCount; + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_AUTOEND_MODE, + I2C_GENERATE_START_READ); + } + + do + { + /* Wait until RXNE flag is set */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_RXNE, RESET, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Read data from RXDR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->RXDR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + hi2c->XferSize--; + hi2c->XferCount--; + + if ((hi2c->XferCount != 0U) && (hi2c->XferSize == 0U)) + { + /* Wait until TCR flag is set */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_TCR, RESET, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + I2C_TransferConfig(hi2c, DevAddress, (uint8_t) hi2c->XferSize, I2C_RELOAD_MODE, + I2C_NO_STARTSTOP); + } + else + { + hi2c->XferSize = hi2c->XferCount; + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_AUTOEND_MODE, + I2C_NO_STARTSTOP); + } + } + } while (hi2c->XferCount > 0U); + + /* No need to Check TC flag, with AUTOEND mode the stop is automatically generated */ + /* Wait until STOPF flag is reset */ + if (I2C_WaitOnSTOPFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Clear STOP Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF); + + /* Clear Configuration Register 2 */ + I2C_RESET_CR2(hi2c); + + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} +/** + * @brief Write an amount of data in non-blocking mode with Interrupt to a specific memory address + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param MemAddress Internal memory address + * @param MemAddSize Size of internal memory address + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Mem_Write_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, + uint16_t MemAddSize, uint8_t *pData, uint16_t Size) +{ + /* Check the parameters */ + assert_param(IS_I2C_MEMADD_SIZE(MemAddSize)); + + if (hi2c->State == HAL_I2C_STATE_READY) + { + if ((pData == NULL) || (Size == 0U)) + { + hi2c->ErrorCode = HAL_I2C_ERROR_INVALID_PARAM; + return HAL_ERROR; + } + + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) == SET) + { + return HAL_BUSY; + } + + /* Process Locked */ + __HAL_LOCK(hi2c); + + hi2c->State = HAL_I2C_STATE_BUSY_TX; + hi2c->Mode = HAL_I2C_MODE_MEM; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + hi2c->XferISR = I2C_Mem_ISR_IT; + hi2c->Devaddress = DevAddress; + + /* If Memory address size is 8Bit */ + if (MemAddSize == I2C_MEMADD_SIZE_8BIT) + { + /* Prefetch Memory Address */ + hi2c->Instance->TXDR = I2C_MEM_ADD_LSB(MemAddress); + + /* Reset Memaddress content */ + hi2c->Memaddress = 0xFFFFFFFFU; + } + /* If Memory address size is 16Bit */ + else + { + /* Prefetch Memory Address (MSB part, LSB will be manage through interrupt) */ + hi2c->Instance->TXDR = I2C_MEM_ADD_MSB(MemAddress); + + /* Prepare Memaddress buffer for LSB part */ + hi2c->Memaddress = I2C_MEM_ADD_LSB(MemAddress); + } + /* Send Slave Address and Memory Address */ + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)MemAddSize, I2C_RELOAD_MODE, I2C_GENERATE_START_WRITE); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + + /* Enable ERR, TC, STOP, NACK, TXI interrupt */ + /* possible to enable all of these */ + /* I2C_IT_ERRI | I2C_IT_TCI | I2C_IT_STOPI | I2C_IT_NACKI | + I2C_IT_ADDRI | I2C_IT_RXI | I2C_IT_TXI */ + I2C_Enable_IRQ(hi2c, I2C_XFER_TX_IT); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Read an amount of data in non-blocking mode with Interrupt from a specific memory address + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param MemAddress Internal memory address + * @param MemAddSize Size of internal memory address + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Mem_Read_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, + uint16_t MemAddSize, uint8_t *pData, uint16_t Size) +{ + /* Check the parameters */ + assert_param(IS_I2C_MEMADD_SIZE(MemAddSize)); + + if (hi2c->State == HAL_I2C_STATE_READY) + { + if ((pData == NULL) || (Size == 0U)) + { + hi2c->ErrorCode = HAL_I2C_ERROR_INVALID_PARAM; + return HAL_ERROR; + } + + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) == SET) + { + return HAL_BUSY; + } + + /* Process Locked */ + __HAL_LOCK(hi2c); + + hi2c->State = HAL_I2C_STATE_BUSY_RX; + hi2c->Mode = HAL_I2C_MODE_MEM; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + hi2c->XferISR = I2C_Mem_ISR_IT; + hi2c->Devaddress = DevAddress; + + /* If Memory address size is 8Bit */ + if (MemAddSize == I2C_MEMADD_SIZE_8BIT) + { + /* Prefetch Memory Address */ + hi2c->Instance->TXDR = I2C_MEM_ADD_LSB(MemAddress); + + /* Reset Memaddress content */ + hi2c->Memaddress = 0xFFFFFFFFU; + } + /* If Memory address size is 16Bit */ + else + { + /* Prefetch Memory Address (MSB part, LSB will be manage through interrupt) */ + hi2c->Instance->TXDR = I2C_MEM_ADD_MSB(MemAddress); + + /* Prepare Memaddress buffer for LSB part */ + hi2c->Memaddress = I2C_MEM_ADD_LSB(MemAddress); + } + /* Send Slave Address and Memory Address */ + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)MemAddSize, I2C_SOFTEND_MODE, I2C_GENERATE_START_WRITE); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + + /* Enable ERR, TC, STOP, NACK, RXI interrupt */ + /* possible to enable all of these */ + /* I2C_IT_ERRI | I2C_IT_TCI | I2C_IT_STOPI | I2C_IT_NACKI | + I2C_IT_ADDRI | I2C_IT_RXI | I2C_IT_TXI */ + I2C_Enable_IRQ(hi2c, (I2C_XFER_TX_IT | I2C_XFER_RX_IT)); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Write an amount of data in non-blocking mode with DMA to a specific memory address + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param MemAddress Internal memory address + * @param MemAddSize Size of internal memory address + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Mem_Write_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, + uint16_t MemAddSize, uint8_t *pData, uint16_t Size) +{ + HAL_StatusTypeDef dmaxferstatus; + + /* Check the parameters */ + assert_param(IS_I2C_MEMADD_SIZE(MemAddSize)); + + if (hi2c->State == HAL_I2C_STATE_READY) + { + if ((pData == NULL) || (Size == 0U)) + { + hi2c->ErrorCode = HAL_I2C_ERROR_INVALID_PARAM; + return HAL_ERROR; + } + + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) == SET) + { + return HAL_BUSY; + } + + /* Process Locked */ + __HAL_LOCK(hi2c); + + hi2c->State = HAL_I2C_STATE_BUSY_TX; + hi2c->Mode = HAL_I2C_MODE_MEM; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + hi2c->XferISR = I2C_Mem_ISR_DMA; + hi2c->Devaddress = DevAddress; + + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + } + else + { + hi2c->XferSize = hi2c->XferCount; + } + + /* If Memory address size is 8Bit */ + if (MemAddSize == I2C_MEMADD_SIZE_8BIT) + { + /* Prefetch Memory Address */ + hi2c->Instance->TXDR = I2C_MEM_ADD_LSB(MemAddress); + + /* Reset Memaddress content */ + hi2c->Memaddress = 0xFFFFFFFFU; + } + /* If Memory address size is 16Bit */ + else + { + /* Prefetch Memory Address (MSB part, LSB will be manage through interrupt) */ + hi2c->Instance->TXDR = I2C_MEM_ADD_MSB(MemAddress); + + /* Prepare Memaddress buffer for LSB part */ + hi2c->Memaddress = I2C_MEM_ADD_LSB(MemAddress); + } + + if (hi2c->hdmatx != NULL) + { + /* Set the I2C DMA transfer complete callback */ + hi2c->hdmatx->XferCpltCallback = I2C_DMAMasterTransmitCplt; + + /* Set the DMA error callback */ + hi2c->hdmatx->XferErrorCallback = I2C_DMAError; + + /* Set the unused DMA callbacks to NULL */ + hi2c->hdmatx->XferHalfCpltCallback = NULL; + hi2c->hdmatx->XferAbortCallback = NULL; + + /* Enable the DMA channel */ + dmaxferstatus = HAL_DMA_Start_IT(hi2c->hdmatx, (uint32_t)pData, (uint32_t)&hi2c->Instance->TXDR, + hi2c->XferSize); + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA_PARAM; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + + if (dmaxferstatus == HAL_OK) + { + /* Send Slave Address and Memory Address */ + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)MemAddSize, I2C_RELOAD_MODE, I2C_GENERATE_START_WRITE); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + /* Enable ERR, TC, STOP, NACK, TXI interrupt */ + /* possible to enable all of these */ + /* I2C_IT_ERRI | I2C_IT_TCI | I2C_IT_STOPI | I2C_IT_NACKI | + I2C_IT_ADDRI | I2C_IT_RXI | I2C_IT_TXI */ + I2C_Enable_IRQ(hi2c, I2C_XFER_TX_IT); + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Reads an amount of data in non-blocking mode with DMA from a specific memory address. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param MemAddress Internal memory address + * @param MemAddSize Size of internal memory address + * @param pData Pointer to data buffer + * @param Size Amount of data to be read + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Mem_Read_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, + uint16_t MemAddSize, uint8_t *pData, uint16_t Size) +{ + HAL_StatusTypeDef dmaxferstatus; + + /* Check the parameters */ + assert_param(IS_I2C_MEMADD_SIZE(MemAddSize)); + + if (hi2c->State == HAL_I2C_STATE_READY) + { + if ((pData == NULL) || (Size == 0U)) + { + hi2c->ErrorCode = HAL_I2C_ERROR_INVALID_PARAM; + return HAL_ERROR; + } + + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) == SET) + { + return HAL_BUSY; + } + + /* Process Locked */ + __HAL_LOCK(hi2c); + + hi2c->State = HAL_I2C_STATE_BUSY_RX; + hi2c->Mode = HAL_I2C_MODE_MEM; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + hi2c->XferISR = I2C_Mem_ISR_DMA; + hi2c->Devaddress = DevAddress; + + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + } + else + { + hi2c->XferSize = hi2c->XferCount; + } + + /* If Memory address size is 8Bit */ + if (MemAddSize == I2C_MEMADD_SIZE_8BIT) + { + /* Prefetch Memory Address */ + hi2c->Instance->TXDR = I2C_MEM_ADD_LSB(MemAddress); + + /* Reset Memaddress content */ + hi2c->Memaddress = 0xFFFFFFFFU; + } + /* If Memory address size is 16Bit */ + else + { + /* Prefetch Memory Address (MSB part, LSB will be manage through interrupt) */ + hi2c->Instance->TXDR = I2C_MEM_ADD_MSB(MemAddress); + + /* Prepare Memaddress buffer for LSB part */ + hi2c->Memaddress = I2C_MEM_ADD_LSB(MemAddress); + } + + if (hi2c->hdmarx != NULL) + { + /* Set the I2C DMA transfer complete callback */ + hi2c->hdmarx->XferCpltCallback = I2C_DMAMasterReceiveCplt; + + /* Set the DMA error callback */ + hi2c->hdmarx->XferErrorCallback = I2C_DMAError; + + /* Set the unused DMA callbacks to NULL */ + hi2c->hdmarx->XferHalfCpltCallback = NULL; + hi2c->hdmarx->XferAbortCallback = NULL; + + /* Enable the DMA channel */ + dmaxferstatus = HAL_DMA_Start_IT(hi2c->hdmarx, (uint32_t)&hi2c->Instance->RXDR, (uint32_t)pData, + hi2c->XferSize); + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA_PARAM; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + + if (dmaxferstatus == HAL_OK) + { + /* Send Slave Address and Memory Address */ + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)MemAddSize, I2C_SOFTEND_MODE, I2C_GENERATE_START_WRITE); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + /* Enable ERR, TC, STOP, NACK, TXI interrupt */ + /* possible to enable all of these */ + /* I2C_IT_ERRI | I2C_IT_TCI | I2C_IT_STOPI | I2C_IT_NACKI | + I2C_IT_ADDRI | I2C_IT_RXI | I2C_IT_TXI */ + I2C_Enable_IRQ(hi2c, I2C_XFER_TX_IT); + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Checks if target device is ready for communication. + * @note This function is used with Memory devices + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param Trials Number of trials + * @param Timeout Timeout duration + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_IsDeviceReady(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint32_t Trials, + uint32_t Timeout) +{ + uint32_t tickstart; + + __IO uint32_t I2C_Trials = 0UL; + + FlagStatus tmp1; + FlagStatus tmp2; + + if (hi2c->State == HAL_I2C_STATE_READY) + { + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) == SET) + { + return HAL_BUSY; + } + + /* Process Locked */ + __HAL_LOCK(hi2c); + + hi2c->State = HAL_I2C_STATE_BUSY; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + do + { + /* Generate Start */ + hi2c->Instance->CR2 = I2C_GENERATE_START(hi2c->Init.AddressingMode, DevAddress); + + /* No need to Check TC flag, with AUTOEND mode the stop is automatically generated */ + /* Wait until STOPF flag is set or a NACK flag is set*/ + tickstart = HAL_GetTick(); + + tmp1 = __HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_STOPF); + tmp2 = __HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_AF); + + while ((tmp1 == RESET) && (tmp2 == RESET)) + { + if (Timeout != HAL_MAX_DELAY) + { + if (((HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U)) + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_READY; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_TIMEOUT; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + } + + tmp1 = __HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_STOPF); + tmp2 = __HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_AF); + } + + /* Check if the NACKF flag has not been set */ + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_AF) == RESET) + { + /* Wait until STOPF flag is reset */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_STOPF, RESET, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Clear STOP Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF); + + /* Device is ready */ + hi2c->State = HAL_I2C_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_OK; + } + else + { + /* Wait until STOPF flag is reset */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_STOPF, RESET, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Clear NACK Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF); + + /* Clear STOP Flag, auto generated with autoend*/ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF); + } + + /* Check if the maximum allowed number of trials has been reached */ + if (I2C_Trials == Trials) + { + /* Generate Stop */ + hi2c->Instance->CR2 |= I2C_CR2_STOP; + + /* Wait until STOPF flag is reset */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_STOPF, RESET, Timeout, tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Clear STOP Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF); + } + + /* Increment Trials */ + I2C_Trials++; + } while (I2C_Trials < Trials); + + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_READY; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_TIMEOUT; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Sequential transmit in master I2C mode an amount of data in non-blocking mode with Interrupt. + * @note This interface allow to manage repeated start condition when a direction change during transfer + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @param XferOptions Options of Transfer, value of @ref I2C_XFEROPTIONS + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Master_Seq_Transmit_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, + uint16_t Size, uint32_t XferOptions) +{ + uint32_t xfermode; + uint32_t xferrequest = I2C_GENERATE_START_WRITE; + + /* Check the parameters */ + assert_param(IS_I2C_TRANSFER_OPTIONS_REQUEST(XferOptions)); + + if (hi2c->State == HAL_I2C_STATE_READY) + { + /* Process Locked */ + __HAL_LOCK(hi2c); + + hi2c->State = HAL_I2C_STATE_BUSY_TX; + hi2c->Mode = HAL_I2C_MODE_MASTER; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferOptions = XferOptions; + hi2c->XferISR = I2C_Master_ISR_IT; + + /* If hi2c->XferCount > MAX_NBYTE_SIZE, use reload mode */ + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + xfermode = I2C_RELOAD_MODE; + } + else + { + hi2c->XferSize = hi2c->XferCount; + xfermode = hi2c->XferOptions; + } + + /* If transfer direction not change and there is no request to start another frame, + do not generate Restart Condition */ + /* Mean Previous state is same as current state */ + if ((hi2c->PreviousState == I2C_STATE_MASTER_BUSY_TX) && \ + (IS_I2C_TRANSFER_OTHER_OPTIONS_REQUEST(XferOptions) == 0)) + { + xferrequest = I2C_NO_STARTSTOP; + } + else + { + /* Convert OTHER_xxx XferOptions if any */ + I2C_ConvertOtherXferOptions(hi2c); + + /* Update xfermode accordingly if no reload is necessary */ + if (hi2c->XferCount <= MAX_NBYTE_SIZE) + { + xfermode = hi2c->XferOptions; + } + } + + /* Send Slave Address and set NBYTES to write */ + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, xfermode, xferrequest); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + /* Enable ERR, TC, STOP, NACK, TXI interrupt */ + /* possible to enable all of these */ + /* I2C_IT_ERRI | I2C_IT_TCI | I2C_IT_STOPI | I2C_IT_NACKI | + I2C_IT_ADDRI | I2C_IT_RXI | I2C_IT_TXI */ + I2C_Enable_IRQ(hi2c, I2C_XFER_TX_IT); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Sequential transmit in master I2C mode an amount of data in non-blocking mode with DMA. + * @note This interface allow to manage repeated start condition when a direction change during transfer + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @param XferOptions Options of Transfer, value of @ref I2C_XFEROPTIONS + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Master_Seq_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, + uint16_t Size, uint32_t XferOptions) +{ + uint32_t xfermode; + uint32_t xferrequest = I2C_GENERATE_START_WRITE; + HAL_StatusTypeDef dmaxferstatus; + + /* Check the parameters */ + assert_param(IS_I2C_TRANSFER_OPTIONS_REQUEST(XferOptions)); + + if (hi2c->State == HAL_I2C_STATE_READY) + { + /* Process Locked */ + __HAL_LOCK(hi2c); + + hi2c->State = HAL_I2C_STATE_BUSY_TX; + hi2c->Mode = HAL_I2C_MODE_MASTER; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferOptions = XferOptions; + hi2c->XferISR = I2C_Master_ISR_DMA; + + /* If hi2c->XferCount > MAX_NBYTE_SIZE, use reload mode */ + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + xfermode = I2C_RELOAD_MODE; + } + else + { + hi2c->XferSize = hi2c->XferCount; + xfermode = hi2c->XferOptions; + } + + /* If transfer direction not change and there is no request to start another frame, + do not generate Restart Condition */ + /* Mean Previous state is same as current state */ + if ((hi2c->PreviousState == I2C_STATE_MASTER_BUSY_TX) && \ + (IS_I2C_TRANSFER_OTHER_OPTIONS_REQUEST(XferOptions) == 0)) + { + xferrequest = I2C_NO_STARTSTOP; + } + else + { + /* Convert OTHER_xxx XferOptions if any */ + I2C_ConvertOtherXferOptions(hi2c); + + /* Update xfermode accordingly if no reload is necessary */ + if (hi2c->XferCount <= MAX_NBYTE_SIZE) + { + xfermode = hi2c->XferOptions; + } + } + + if (hi2c->XferSize > 0U) + { + if (hi2c->hdmatx != NULL) + { + /* Set the I2C DMA transfer complete callback */ + hi2c->hdmatx->XferCpltCallback = I2C_DMAMasterTransmitCplt; + + /* Set the DMA error callback */ + hi2c->hdmatx->XferErrorCallback = I2C_DMAError; + + /* Set the unused DMA callbacks to NULL */ + hi2c->hdmatx->XferHalfCpltCallback = NULL; + hi2c->hdmatx->XferAbortCallback = NULL; + + /* Enable the DMA channel */ + dmaxferstatus = HAL_DMA_Start_IT(hi2c->hdmatx, (uint32_t)pData, (uint32_t)&hi2c->Instance->TXDR, + hi2c->XferSize); + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA_PARAM; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + + if (dmaxferstatus == HAL_OK) + { + /* Send Slave Address and set NBYTES to write */ + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, xfermode, xferrequest); + + /* Update XferCount value */ + hi2c->XferCount -= hi2c->XferSize; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + /* Enable ERR and NACK interrupts */ + I2C_Enable_IRQ(hi2c, I2C_XFER_ERROR_IT); + + /* Enable DMA Request */ + hi2c->Instance->CR1 |= I2C_CR1_TXDMAEN; + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + } + else + { + /* Update Transfer ISR function pointer */ + hi2c->XferISR = I2C_Master_ISR_IT; + + /* Send Slave Address */ + /* Set NBYTES to write and generate START condition */ + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_AUTOEND_MODE, + I2C_GENERATE_START_WRITE); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + /* Enable ERR, TC, STOP, NACK, TXI interrupt */ + /* possible to enable all of these */ + /* I2C_IT_ERRI | I2C_IT_TCI | I2C_IT_STOPI | I2C_IT_NACKI | + I2C_IT_ADDRI | I2C_IT_RXI | I2C_IT_TXI */ + I2C_Enable_IRQ(hi2c, I2C_XFER_TX_IT); + } + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Sequential receive in master I2C mode an amount of data in non-blocking mode with Interrupt + * @note This interface allow to manage repeated start condition when a direction change during transfer + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @param XferOptions Options of Transfer, value of @ref I2C_XFEROPTIONS + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Master_Seq_Receive_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, + uint16_t Size, uint32_t XferOptions) +{ + uint32_t xfermode; + uint32_t xferrequest = I2C_GENERATE_START_READ; + + /* Check the parameters */ + assert_param(IS_I2C_TRANSFER_OPTIONS_REQUEST(XferOptions)); + + if (hi2c->State == HAL_I2C_STATE_READY) + { + /* Process Locked */ + __HAL_LOCK(hi2c); + + hi2c->State = HAL_I2C_STATE_BUSY_RX; + hi2c->Mode = HAL_I2C_MODE_MASTER; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferOptions = XferOptions; + hi2c->XferISR = I2C_Master_ISR_IT; + + /* If hi2c->XferCount > MAX_NBYTE_SIZE, use reload mode */ + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + xfermode = I2C_RELOAD_MODE; + } + else + { + hi2c->XferSize = hi2c->XferCount; + xfermode = hi2c->XferOptions; + } + + /* If transfer direction not change and there is no request to start another frame, + do not generate Restart Condition */ + /* Mean Previous state is same as current state */ + if ((hi2c->PreviousState == I2C_STATE_MASTER_BUSY_RX) && \ + (IS_I2C_TRANSFER_OTHER_OPTIONS_REQUEST(XferOptions) == 0)) + { + xferrequest = I2C_NO_STARTSTOP; + } + else + { + /* Convert OTHER_xxx XferOptions if any */ + I2C_ConvertOtherXferOptions(hi2c); + + /* Update xfermode accordingly if no reload is necessary */ + if (hi2c->XferCount <= MAX_NBYTE_SIZE) + { + xfermode = hi2c->XferOptions; + } + } + + /* Send Slave Address and set NBYTES to read */ + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, xfermode, xferrequest); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + I2C_Enable_IRQ(hi2c, I2C_XFER_RX_IT); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Sequential receive in master I2C mode an amount of data in non-blocking mode with DMA + * @note This interface allow to manage repeated start condition when a direction change during transfer + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @param XferOptions Options of Transfer, value of @ref I2C_XFEROPTIONS + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Master_Seq_Receive_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, + uint16_t Size, uint32_t XferOptions) +{ + uint32_t xfermode; + uint32_t xferrequest = I2C_GENERATE_START_READ; + HAL_StatusTypeDef dmaxferstatus; + + /* Check the parameters */ + assert_param(IS_I2C_TRANSFER_OPTIONS_REQUEST(XferOptions)); + + if (hi2c->State == HAL_I2C_STATE_READY) + { + /* Process Locked */ + __HAL_LOCK(hi2c); + + hi2c->State = HAL_I2C_STATE_BUSY_RX; + hi2c->Mode = HAL_I2C_MODE_MASTER; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferOptions = XferOptions; + hi2c->XferISR = I2C_Master_ISR_DMA; + + /* If hi2c->XferCount > MAX_NBYTE_SIZE, use reload mode */ + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + xfermode = I2C_RELOAD_MODE; + } + else + { + hi2c->XferSize = hi2c->XferCount; + xfermode = hi2c->XferOptions; + } + + /* If transfer direction not change and there is no request to start another frame, + do not generate Restart Condition */ + /* Mean Previous state is same as current state */ + if ((hi2c->PreviousState == I2C_STATE_MASTER_BUSY_RX) && \ + (IS_I2C_TRANSFER_OTHER_OPTIONS_REQUEST(XferOptions) == 0)) + { + xferrequest = I2C_NO_STARTSTOP; + } + else + { + /* Convert OTHER_xxx XferOptions if any */ + I2C_ConvertOtherXferOptions(hi2c); + + /* Update xfermode accordingly if no reload is necessary */ + if (hi2c->XferCount <= MAX_NBYTE_SIZE) + { + xfermode = hi2c->XferOptions; + } + } + + if (hi2c->XferSize > 0U) + { + if (hi2c->hdmarx != NULL) + { + /* Set the I2C DMA transfer complete callback */ + hi2c->hdmarx->XferCpltCallback = I2C_DMAMasterReceiveCplt; + + /* Set the DMA error callback */ + hi2c->hdmarx->XferErrorCallback = I2C_DMAError; + + /* Set the unused DMA callbacks to NULL */ + hi2c->hdmarx->XferHalfCpltCallback = NULL; + hi2c->hdmarx->XferAbortCallback = NULL; + + /* Enable the DMA channel */ + dmaxferstatus = HAL_DMA_Start_IT(hi2c->hdmarx, (uint32_t)&hi2c->Instance->RXDR, (uint32_t)pData, + hi2c->XferSize); + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA_PARAM; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + + if (dmaxferstatus == HAL_OK) + { + /* Send Slave Address and set NBYTES to read */ + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, xfermode, xferrequest); + + /* Update XferCount value */ + hi2c->XferCount -= hi2c->XferSize; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + /* Enable ERR and NACK interrupts */ + I2C_Enable_IRQ(hi2c, I2C_XFER_ERROR_IT); + + /* Enable DMA Request */ + hi2c->Instance->CR1 |= I2C_CR1_RXDMAEN; + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + } + else + { + /* Update Transfer ISR function pointer */ + hi2c->XferISR = I2C_Master_ISR_IT; + + /* Send Slave Address */ + /* Set NBYTES to read and generate START condition */ + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)hi2c->XferSize, I2C_AUTOEND_MODE, + I2C_GENERATE_START_READ); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + /* Enable ERR, TC, STOP, NACK, TXI interrupt */ + /* possible to enable all of these */ + /* I2C_IT_ERRI | I2C_IT_TCI | I2C_IT_STOPI | I2C_IT_NACKI | + I2C_IT_ADDRI | I2C_IT_RXI | I2C_IT_TXI */ + I2C_Enable_IRQ(hi2c, I2C_XFER_TX_IT); + } + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Sequential transmit in slave/device I2C mode an amount of data in non-blocking mode with Interrupt + * @note This interface allow to manage repeated start condition when a direction change during transfer + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @param XferOptions Options of Transfer, value of @ref I2C_XFEROPTIONS + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Slave_Seq_Transmit_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, + uint32_t XferOptions) +{ + /* Declaration of tmp to prevent undefined behavior of volatile usage */ + FlagStatus tmp; + + /* Check the parameters */ + assert_param(IS_I2C_TRANSFER_OPTIONS_REQUEST(XferOptions)); + + if (((uint32_t)hi2c->State & (uint32_t)HAL_I2C_STATE_LISTEN) == (uint32_t)HAL_I2C_STATE_LISTEN) + { + if ((pData == NULL) || (Size == 0U)) + { + hi2c->ErrorCode = HAL_I2C_ERROR_INVALID_PARAM; + return HAL_ERROR; + } + + /* Disable Interrupts, to prevent preemption during treatment in case of multicall */ + I2C_Disable_IRQ(hi2c, I2C_XFER_LISTEN_IT | I2C_XFER_TX_IT); + + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* I2C cannot manage full duplex exchange so disable previous IT enabled if any */ + /* and then toggle the HAL slave RX state to TX state */ + if (hi2c->State == HAL_I2C_STATE_BUSY_RX_LISTEN) + { + /* Disable associated Interrupts */ + I2C_Disable_IRQ(hi2c, I2C_XFER_RX_IT); + + /* Abort DMA Xfer if any */ + if ((hi2c->Instance->CR1 & I2C_CR1_RXDMAEN) == I2C_CR1_RXDMAEN) + { + hi2c->Instance->CR1 &= ~I2C_CR1_RXDMAEN; + + if (hi2c->hdmarx != NULL) + { + /* Set the I2C DMA Abort callback : + will lead to call HAL_I2C_ErrorCallback() at end of DMA abort procedure */ + hi2c->hdmarx->XferAbortCallback = I2C_DMAAbort; + + /* Abort DMA RX */ + if (HAL_DMA_Abort_IT(hi2c->hdmarx) != HAL_OK) + { + /* Call Directly XferAbortCallback function in case of error */ + hi2c->hdmarx->XferAbortCallback(hi2c->hdmarx); + } + } + } + } + + hi2c->State = HAL_I2C_STATE_BUSY_TX_LISTEN; + hi2c->Mode = HAL_I2C_MODE_SLAVE; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Enable Address Acknowledge */ + hi2c->Instance->CR2 &= ~I2C_CR2_NACK; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferSize = hi2c->XferCount; + hi2c->XferOptions = XferOptions; + hi2c->XferISR = I2C_Slave_ISR_IT; + + tmp = __HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_ADDR); + if ((I2C_GET_DIR(hi2c) == I2C_DIRECTION_RECEIVE) && (tmp != RESET)) + { + /* Clear ADDR flag after prepare the transfer parameters */ + /* This action will generate an acknowledge to the Master */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_ADDR); + } + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + /* REnable ADDR interrupt */ + I2C_Enable_IRQ(hi2c, I2C_XFER_TX_IT | I2C_XFER_LISTEN_IT); + + return HAL_OK; + } + else + { + return HAL_ERROR; + } +} + +/** + * @brief Sequential transmit in slave/device I2C mode an amount of data in non-blocking mode with DMA + * @note This interface allow to manage repeated start condition when a direction change during transfer + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @param XferOptions Options of Transfer, value of @ref I2C_XFEROPTIONS + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Slave_Seq_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, + uint32_t XferOptions) +{ + /* Declaration of tmp to prevent undefined behavior of volatile usage */ + FlagStatus tmp; + HAL_StatusTypeDef dmaxferstatus; + + /* Check the parameters */ + assert_param(IS_I2C_TRANSFER_OPTIONS_REQUEST(XferOptions)); + + if (((uint32_t)hi2c->State & (uint32_t)HAL_I2C_STATE_LISTEN) == (uint32_t)HAL_I2C_STATE_LISTEN) + { + if ((pData == NULL) || (Size == 0U)) + { + hi2c->ErrorCode = HAL_I2C_ERROR_INVALID_PARAM; + return HAL_ERROR; + } + + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* Disable Interrupts, to prevent preemption during treatment in case of multicall */ + I2C_Disable_IRQ(hi2c, I2C_XFER_LISTEN_IT | I2C_XFER_TX_IT); + + /* I2C cannot manage full duplex exchange so disable previous IT enabled if any */ + /* and then toggle the HAL slave RX state to TX state */ + if (hi2c->State == HAL_I2C_STATE_BUSY_RX_LISTEN) + { + /* Disable associated Interrupts */ + I2C_Disable_IRQ(hi2c, I2C_XFER_RX_IT); + + if ((hi2c->Instance->CR1 & I2C_CR1_RXDMAEN) == I2C_CR1_RXDMAEN) + { + /* Abort DMA Xfer if any */ + if (hi2c->hdmarx != NULL) + { + hi2c->Instance->CR1 &= ~I2C_CR1_RXDMAEN; + + /* Set the I2C DMA Abort callback : + will lead to call HAL_I2C_ErrorCallback() at end of DMA abort procedure */ + hi2c->hdmarx->XferAbortCallback = I2C_DMAAbort; + + /* Abort DMA RX */ + if (HAL_DMA_Abort_IT(hi2c->hdmarx) != HAL_OK) + { + /* Call Directly XferAbortCallback function in case of error */ + hi2c->hdmarx->XferAbortCallback(hi2c->hdmarx); + } + } + } + } + else if (hi2c->State == HAL_I2C_STATE_BUSY_TX_LISTEN) + { + if ((hi2c->Instance->CR1 & I2C_CR1_TXDMAEN) == I2C_CR1_TXDMAEN) + { + hi2c->Instance->CR1 &= ~I2C_CR1_TXDMAEN; + + /* Abort DMA Xfer if any */ + if (hi2c->hdmatx != NULL) + { + /* Set the I2C DMA Abort callback : + will lead to call HAL_I2C_ErrorCallback() at end of DMA abort procedure */ + hi2c->hdmatx->XferAbortCallback = I2C_DMAAbort; + + /* Abort DMA TX */ + if (HAL_DMA_Abort_IT(hi2c->hdmatx) != HAL_OK) + { + /* Call Directly XferAbortCallback function in case of error */ + hi2c->hdmatx->XferAbortCallback(hi2c->hdmatx); + } + } + } + } + else + { + /* Nothing to do */ + } + + hi2c->State = HAL_I2C_STATE_BUSY_TX_LISTEN; + hi2c->Mode = HAL_I2C_MODE_SLAVE; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Enable Address Acknowledge */ + hi2c->Instance->CR2 &= ~I2C_CR2_NACK; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferSize = hi2c->XferCount; + hi2c->XferOptions = XferOptions; + hi2c->XferISR = I2C_Slave_ISR_DMA; + + if (hi2c->hdmatx != NULL) + { + /* Set the I2C DMA transfer complete callback */ + hi2c->hdmatx->XferCpltCallback = I2C_DMASlaveTransmitCplt; + + /* Set the DMA error callback */ + hi2c->hdmatx->XferErrorCallback = I2C_DMAError; + + /* Set the unused DMA callbacks to NULL */ + hi2c->hdmatx->XferHalfCpltCallback = NULL; + hi2c->hdmatx->XferAbortCallback = NULL; + + /* Enable the DMA channel */ + dmaxferstatus = HAL_DMA_Start_IT(hi2c->hdmatx, (uint32_t)pData, (uint32_t)&hi2c->Instance->TXDR, + hi2c->XferSize); + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_LISTEN; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA_PARAM; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + + if (dmaxferstatus == HAL_OK) + { + /* Update XferCount value */ + hi2c->XferCount -= hi2c->XferSize; + + /* Reset XferSize */ + hi2c->XferSize = 0; + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_LISTEN; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + + tmp = __HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_ADDR); + if ((I2C_GET_DIR(hi2c) == I2C_DIRECTION_RECEIVE) && (tmp != RESET)) + { + /* Clear ADDR flag after prepare the transfer parameters */ + /* This action will generate an acknowledge to the Master */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_ADDR); + } + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Enable DMA Request */ + hi2c->Instance->CR1 |= I2C_CR1_TXDMAEN; + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + /* Enable ERR, STOP, NACK, ADDR interrupts */ + I2C_Enable_IRQ(hi2c, I2C_XFER_LISTEN_IT); + + return HAL_OK; + } + else + { + return HAL_ERROR; + } +} + +/** + * @brief Sequential receive in slave/device I2C mode an amount of data in non-blocking mode with Interrupt + * @note This interface allow to manage repeated start condition when a direction change during transfer + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @param XferOptions Options of Transfer, value of @ref I2C_XFEROPTIONS + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Slave_Seq_Receive_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, + uint32_t XferOptions) +{ + /* Declaration of tmp to prevent undefined behavior of volatile usage */ + FlagStatus tmp; + + /* Check the parameters */ + assert_param(IS_I2C_TRANSFER_OPTIONS_REQUEST(XferOptions)); + + if (((uint32_t)hi2c->State & (uint32_t)HAL_I2C_STATE_LISTEN) == (uint32_t)HAL_I2C_STATE_LISTEN) + { + if ((pData == NULL) || (Size == 0U)) + { + hi2c->ErrorCode = HAL_I2C_ERROR_INVALID_PARAM; + return HAL_ERROR; + } + + /* Disable Interrupts, to prevent preemption during treatment in case of multicall */ + I2C_Disable_IRQ(hi2c, I2C_XFER_LISTEN_IT | I2C_XFER_RX_IT); + + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* I2C cannot manage full duplex exchange so disable previous IT enabled if any */ + /* and then toggle the HAL slave TX state to RX state */ + if (hi2c->State == HAL_I2C_STATE_BUSY_TX_LISTEN) + { + /* Disable associated Interrupts */ + I2C_Disable_IRQ(hi2c, I2C_XFER_TX_IT); + + if ((hi2c->Instance->CR1 & I2C_CR1_TXDMAEN) == I2C_CR1_TXDMAEN) + { + hi2c->Instance->CR1 &= ~I2C_CR1_TXDMAEN; + + /* Abort DMA Xfer if any */ + if (hi2c->hdmatx != NULL) + { + /* Set the I2C DMA Abort callback : + will lead to call HAL_I2C_ErrorCallback() at end of DMA abort procedure */ + hi2c->hdmatx->XferAbortCallback = I2C_DMAAbort; + + /* Abort DMA TX */ + if (HAL_DMA_Abort_IT(hi2c->hdmatx) != HAL_OK) + { + /* Call Directly XferAbortCallback function in case of error */ + hi2c->hdmatx->XferAbortCallback(hi2c->hdmatx); + } + } + } + } + + hi2c->State = HAL_I2C_STATE_BUSY_RX_LISTEN; + hi2c->Mode = HAL_I2C_MODE_SLAVE; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Enable Address Acknowledge */ + hi2c->Instance->CR2 &= ~I2C_CR2_NACK; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferSize = hi2c->XferCount; + hi2c->XferOptions = XferOptions; + hi2c->XferISR = I2C_Slave_ISR_IT; + + tmp = __HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_ADDR); + if ((I2C_GET_DIR(hi2c) == I2C_DIRECTION_TRANSMIT) && (tmp != RESET)) + { + /* Clear ADDR flag after prepare the transfer parameters */ + /* This action will generate an acknowledge to the Master */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_ADDR); + } + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + /* REnable ADDR interrupt */ + I2C_Enable_IRQ(hi2c, I2C_XFER_RX_IT | I2C_XFER_LISTEN_IT); + + return HAL_OK; + } + else + { + return HAL_ERROR; + } +} + +/** + * @brief Sequential receive in slave/device I2C mode an amount of data in non-blocking mode with DMA + * @note This interface allow to manage repeated start condition when a direction change during transfer + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @param XferOptions Options of Transfer, value of @ref I2C_XFEROPTIONS + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Slave_Seq_Receive_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, + uint32_t XferOptions) +{ + /* Declaration of tmp to prevent undefined behavior of volatile usage */ + FlagStatus tmp; + HAL_StatusTypeDef dmaxferstatus; + + /* Check the parameters */ + assert_param(IS_I2C_TRANSFER_OPTIONS_REQUEST(XferOptions)); + + if (((uint32_t)hi2c->State & (uint32_t)HAL_I2C_STATE_LISTEN) == (uint32_t)HAL_I2C_STATE_LISTEN) + { + if ((pData == NULL) || (Size == 0U)) + { + hi2c->ErrorCode = HAL_I2C_ERROR_INVALID_PARAM; + return HAL_ERROR; + } + + /* Disable Interrupts, to prevent preemption during treatment in case of multicall */ + I2C_Disable_IRQ(hi2c, I2C_XFER_LISTEN_IT | I2C_XFER_RX_IT); + + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* I2C cannot manage full duplex exchange so disable previous IT enabled if any */ + /* and then toggle the HAL slave TX state to RX state */ + if (hi2c->State == HAL_I2C_STATE_BUSY_TX_LISTEN) + { + /* Disable associated Interrupts */ + I2C_Disable_IRQ(hi2c, I2C_XFER_TX_IT); + + if ((hi2c->Instance->CR1 & I2C_CR1_TXDMAEN) == I2C_CR1_TXDMAEN) + { + /* Abort DMA Xfer if any */ + if (hi2c->hdmatx != NULL) + { + hi2c->Instance->CR1 &= ~I2C_CR1_TXDMAEN; + + /* Set the I2C DMA Abort callback : + will lead to call HAL_I2C_ErrorCallback() at end of DMA abort procedure */ + hi2c->hdmatx->XferAbortCallback = I2C_DMAAbort; + + /* Abort DMA TX */ + if (HAL_DMA_Abort_IT(hi2c->hdmatx) != HAL_OK) + { + /* Call Directly XferAbortCallback function in case of error */ + hi2c->hdmatx->XferAbortCallback(hi2c->hdmatx); + } + } + } + } + else if (hi2c->State == HAL_I2C_STATE_BUSY_RX_LISTEN) + { + if ((hi2c->Instance->CR1 & I2C_CR1_RXDMAEN) == I2C_CR1_RXDMAEN) + { + hi2c->Instance->CR1 &= ~I2C_CR1_RXDMAEN; + + /* Abort DMA Xfer if any */ + if (hi2c->hdmarx != NULL) + { + /* Set the I2C DMA Abort callback : + will lead to call HAL_I2C_ErrorCallback() at end of DMA abort procedure */ + hi2c->hdmarx->XferAbortCallback = I2C_DMAAbort; + + /* Abort DMA RX */ + if (HAL_DMA_Abort_IT(hi2c->hdmarx) != HAL_OK) + { + /* Call Directly XferAbortCallback function in case of error */ + hi2c->hdmarx->XferAbortCallback(hi2c->hdmarx); + } + } + } + } + else + { + /* Nothing to do */ + } + + hi2c->State = HAL_I2C_STATE_BUSY_RX_LISTEN; + hi2c->Mode = HAL_I2C_MODE_SLAVE; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + + /* Enable Address Acknowledge */ + hi2c->Instance->CR2 &= ~I2C_CR2_NACK; + + /* Prepare transfer parameters */ + hi2c->pBuffPtr = pData; + hi2c->XferCount = Size; + hi2c->XferSize = hi2c->XferCount; + hi2c->XferOptions = XferOptions; + hi2c->XferISR = I2C_Slave_ISR_DMA; + + if (hi2c->hdmarx != NULL) + { + /* Set the I2C DMA transfer complete callback */ + hi2c->hdmarx->XferCpltCallback = I2C_DMASlaveReceiveCplt; + + /* Set the DMA error callback */ + hi2c->hdmarx->XferErrorCallback = I2C_DMAError; + + /* Set the unused DMA callbacks to NULL */ + hi2c->hdmarx->XferHalfCpltCallback = NULL; + hi2c->hdmarx->XferAbortCallback = NULL; + + /* Enable the DMA channel */ + dmaxferstatus = HAL_DMA_Start_IT(hi2c->hdmarx, (uint32_t)&hi2c->Instance->RXDR, + (uint32_t)pData, hi2c->XferSize); + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_LISTEN; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA_PARAM; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + + if (dmaxferstatus == HAL_OK) + { + /* Update XferCount value */ + hi2c->XferCount -= hi2c->XferSize; + + /* Reset XferSize */ + hi2c->XferSize = 0; + } + else + { + /* Update I2C state */ + hi2c->State = HAL_I2C_STATE_LISTEN; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Update I2C error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_DMA; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + + tmp = __HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_ADDR); + if ((I2C_GET_DIR(hi2c) == I2C_DIRECTION_TRANSMIT) && (tmp != RESET)) + { + /* Clear ADDR flag after prepare the transfer parameters */ + /* This action will generate an acknowledge to the Master */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_ADDR); + } + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Enable DMA Request */ + hi2c->Instance->CR1 |= I2C_CR1_RXDMAEN; + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + /* REnable ADDR interrupt */ + I2C_Enable_IRQ(hi2c, I2C_XFER_RX_IT | I2C_XFER_LISTEN_IT); + + return HAL_OK; + } + else + { + return HAL_ERROR; + } +} + +/** + * @brief Enable the Address listen mode with Interrupt. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_EnableListen_IT(I2C_HandleTypeDef *hi2c) +{ + if (hi2c->State == HAL_I2C_STATE_READY) + { + hi2c->State = HAL_I2C_STATE_LISTEN; + hi2c->XferISR = I2C_Slave_ISR_IT; + + /* Enable the Address Match interrupt */ + I2C_Enable_IRQ(hi2c, I2C_XFER_LISTEN_IT); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Disable the Address listen mode with Interrupt. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_DisableListen_IT(I2C_HandleTypeDef *hi2c) +{ + /* Declaration of tmp to prevent undefined behavior of volatile usage */ + uint32_t tmp; + + /* Disable Address listen mode only if a transfer is not ongoing */ + if (hi2c->State == HAL_I2C_STATE_LISTEN) + { + tmp = (uint32_t)(hi2c->State) & I2C_STATE_MSK; + hi2c->PreviousState = tmp | (uint32_t)(hi2c->Mode); + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + hi2c->XferISR = NULL; + + /* Disable the Address Match interrupt */ + I2C_Disable_IRQ(hi2c, I2C_XFER_LISTEN_IT); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Abort a master I2C IT or DMA process communication with Interrupt. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2C_Master_Abort_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress) +{ + if (hi2c->Mode == HAL_I2C_MODE_MASTER) + { + /* Process Locked */ + __HAL_LOCK(hi2c); + + /* Disable Interrupts and Store Previous state */ + if (hi2c->State == HAL_I2C_STATE_BUSY_TX) + { + I2C_Disable_IRQ(hi2c, I2C_XFER_TX_IT); + hi2c->PreviousState = I2C_STATE_MASTER_BUSY_TX; + } + else if (hi2c->State == HAL_I2C_STATE_BUSY_RX) + { + I2C_Disable_IRQ(hi2c, I2C_XFER_RX_IT); + hi2c->PreviousState = I2C_STATE_MASTER_BUSY_RX; + } + else + { + /* Do nothing */ + } + + /* Set State at HAL_I2C_STATE_ABORT */ + hi2c->State = HAL_I2C_STATE_ABORT; + + /* Set NBYTES to 1 to generate a dummy read on I2C peripheral */ + /* Set AUTOEND mode, this will generate a NACK then STOP condition to abort the current transfer */ + I2C_TransferConfig(hi2c, DevAddress, 1, I2C_AUTOEND_MODE, I2C_GENERATE_STOP); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Note : The I2C interrupts must be enabled after unlocking current process + to avoid the risk of I2C interrupt handle execution before current + process unlock */ + I2C_Enable_IRQ(hi2c, I2C_XFER_CPLT_IT); + + return HAL_OK; + } + else + { + /* Wrong usage of abort function */ + /* This function should be used only in case of abort monitored by master device */ + return HAL_ERROR; + } +} + +/** + * @} + */ + +/** @defgroup I2C_IRQ_Handler_and_Callbacks IRQ Handler and Callbacks + * @{ + */ + +/** + * @brief This function handles I2C event interrupt request. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval None + */ +void HAL_I2C_EV_IRQHandler(I2C_HandleTypeDef *hi2c) /* Derogation MISRAC2012-Rule-8.13 */ +{ + /* Get current IT Flags and IT sources value */ + uint32_t itflags = READ_REG(hi2c->Instance->ISR); + uint32_t itsources = READ_REG(hi2c->Instance->CR1); + + /* I2C events treatment -------------------------------------*/ + if (hi2c->XferISR != NULL) + { + hi2c->XferISR(hi2c, itflags, itsources); + } +} + +/** + * @brief This function handles I2C error interrupt request. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval None + */ +void HAL_I2C_ER_IRQHandler(I2C_HandleTypeDef *hi2c) +{ + uint32_t itflags = READ_REG(hi2c->Instance->ISR); + uint32_t itsources = READ_REG(hi2c->Instance->CR1); + uint32_t tmperror; + + /* I2C Bus error interrupt occurred ------------------------------------*/ + if ((I2C_CHECK_FLAG(itflags, I2C_FLAG_BERR) != RESET) && \ + (I2C_CHECK_IT_SOURCE(itsources, I2C_IT_ERRI) != RESET)) + { + hi2c->ErrorCode |= HAL_I2C_ERROR_BERR; + + /* Clear BERR flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_BERR); + } + + /* I2C Over-Run/Under-Run interrupt occurred ----------------------------------------*/ + if ((I2C_CHECK_FLAG(itflags, I2C_FLAG_OVR) != RESET) && \ + (I2C_CHECK_IT_SOURCE(itsources, I2C_IT_ERRI) != RESET)) + { + hi2c->ErrorCode |= HAL_I2C_ERROR_OVR; + + /* Clear OVR flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_OVR); + } + + /* I2C Arbitration Loss error interrupt occurred -------------------------------------*/ + if ((I2C_CHECK_FLAG(itflags, I2C_FLAG_ARLO) != RESET) && \ + (I2C_CHECK_IT_SOURCE(itsources, I2C_IT_ERRI) != RESET)) + { + hi2c->ErrorCode |= HAL_I2C_ERROR_ARLO; + + /* Clear ARLO flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_ARLO); + } + + /* Store current volatile hi2c->ErrorCode, misra rule */ + tmperror = hi2c->ErrorCode; + + /* Call the Error Callback in case of Error detected */ + if ((tmperror & (HAL_I2C_ERROR_BERR | HAL_I2C_ERROR_OVR | HAL_I2C_ERROR_ARLO)) != HAL_I2C_ERROR_NONE) + { + I2C_ITError(hi2c, tmperror); + } +} + +/** + * @brief Master Tx Transfer completed callback. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval None + */ +__weak void HAL_I2C_MasterTxCpltCallback(I2C_HandleTypeDef *hi2c) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hi2c); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_I2C_MasterTxCpltCallback could be implemented in the user file + */ +} + +/** + * @brief Master Rx Transfer completed callback. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval None + */ +__weak void HAL_I2C_MasterRxCpltCallback(I2C_HandleTypeDef *hi2c) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hi2c); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_I2C_MasterRxCpltCallback could be implemented in the user file + */ +} + +/** @brief Slave Tx Transfer completed callback. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval None + */ +__weak void HAL_I2C_SlaveTxCpltCallback(I2C_HandleTypeDef *hi2c) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hi2c); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_I2C_SlaveTxCpltCallback could be implemented in the user file + */ +} + +/** + * @brief Slave Rx Transfer completed callback. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval None + */ +__weak void HAL_I2C_SlaveRxCpltCallback(I2C_HandleTypeDef *hi2c) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hi2c); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_I2C_SlaveRxCpltCallback could be implemented in the user file + */ +} + +/** + * @brief Slave Address Match callback. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param TransferDirection Master request Transfer Direction (Write/Read), value of @ref I2C_XFERDIRECTION + * @param AddrMatchCode Address Match Code + * @retval None + */ +__weak void HAL_I2C_AddrCallback(I2C_HandleTypeDef *hi2c, uint8_t TransferDirection, uint16_t AddrMatchCode) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hi2c); + UNUSED(TransferDirection); + UNUSED(AddrMatchCode); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_I2C_AddrCallback() could be implemented in the user file + */ +} + +/** + * @brief Listen Complete callback. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval None + */ +__weak void HAL_I2C_ListenCpltCallback(I2C_HandleTypeDef *hi2c) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hi2c); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_I2C_ListenCpltCallback() could be implemented in the user file + */ +} + +/** + * @brief Memory Tx Transfer completed callback. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval None + */ +__weak void HAL_I2C_MemTxCpltCallback(I2C_HandleTypeDef *hi2c) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hi2c); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_I2C_MemTxCpltCallback could be implemented in the user file + */ +} + +/** + * @brief Memory Rx Transfer completed callback. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval None + */ +__weak void HAL_I2C_MemRxCpltCallback(I2C_HandleTypeDef *hi2c) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hi2c); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_I2C_MemRxCpltCallback could be implemented in the user file + */ +} + +/** + * @brief I2C error callback. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval None + */ +__weak void HAL_I2C_ErrorCallback(I2C_HandleTypeDef *hi2c) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hi2c); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_I2C_ErrorCallback could be implemented in the user file + */ +} + +/** + * @brief I2C abort callback. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval None + */ +__weak void HAL_I2C_AbortCpltCallback(I2C_HandleTypeDef *hi2c) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hi2c); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_I2C_AbortCpltCallback could be implemented in the user file + */ +} + +/** + * @} + */ + +/** @defgroup I2C_Exported_Functions_Group3 Peripheral State, Mode and Error functions + * @brief Peripheral State, Mode and Error functions + * +@verbatim + =============================================================================== + ##### Peripheral State, Mode and Error functions ##### + =============================================================================== + [..] + This subsection permit to get in run-time the status of the peripheral + and the data flow. + +@endverbatim + * @{ + */ + +/** + * @brief Return the I2C handle state. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval HAL state + */ +HAL_I2C_StateTypeDef HAL_I2C_GetState(const I2C_HandleTypeDef *hi2c) +{ + /* Return I2C handle state */ + return hi2c->State; +} + +/** + * @brief Returns the I2C Master, Slave, Memory or no mode. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for I2C module + * @retval HAL mode + */ +HAL_I2C_ModeTypeDef HAL_I2C_GetMode(const I2C_HandleTypeDef *hi2c) +{ + return hi2c->Mode; +} + +/** + * @brief Return the I2C error code. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @retval I2C Error Code + */ +uint32_t HAL_I2C_GetError(const I2C_HandleTypeDef *hi2c) +{ + return hi2c->ErrorCode; +} + +/** + * @} + */ + +/** + * @} + */ + +/** @addtogroup I2C_Private_Functions + * @{ + */ + +/** + * @brief Interrupt Sub-Routine which handle the Interrupt Flags Master Mode with Interrupt. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param ITFlags Interrupt flags to handle. + * @param ITSources Interrupt sources enabled. + * @retval HAL status + */ +static HAL_StatusTypeDef I2C_Master_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uint32_t ITFlags, + uint32_t ITSources) +{ + uint16_t devaddress; + uint32_t tmpITFlags = ITFlags; + + /* Process Locked */ + __HAL_LOCK(hi2c); + + if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_AF) != RESET) && \ + (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_NACKI) != RESET)) + { + /* Clear NACK Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF); + + /* Set corresponding Error Code */ + /* No need to generate STOP, it is automatically done */ + /* Error callback will be send during stop flag treatment */ + hi2c->ErrorCode |= HAL_I2C_ERROR_AF; + + /* Flush TX register */ + I2C_Flush_TXDR(hi2c); + } + else if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_RXNE) != RESET) && \ + (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_RXI) != RESET)) + { + /* Remove RXNE flag on temporary variable as read done */ + tmpITFlags &= ~I2C_FLAG_RXNE; + + /* Read data from RXDR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->RXDR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + hi2c->XferSize--; + hi2c->XferCount--; + } + else if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_TXIS) != RESET) && \ + (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_TXI) != RESET)) + { + /* Write data to TXDR */ + hi2c->Instance->TXDR = *hi2c->pBuffPtr; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + hi2c->XferSize--; + hi2c->XferCount--; + } + else if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_TCR) != RESET) && \ + (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_TCI) != RESET)) + { + if ((hi2c->XferCount != 0U) && (hi2c->XferSize == 0U)) + { + devaddress = (uint16_t)(hi2c->Instance->CR2 & I2C_CR2_SADD); + + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + I2C_TransferConfig(hi2c, devaddress, (uint8_t)hi2c->XferSize, I2C_RELOAD_MODE, I2C_NO_STARTSTOP); + } + else + { + hi2c->XferSize = hi2c->XferCount; + if (hi2c->XferOptions != I2C_NO_OPTION_FRAME) + { + I2C_TransferConfig(hi2c, devaddress, (uint8_t)hi2c->XferSize, + hi2c->XferOptions, I2C_NO_STARTSTOP); + } + else + { + I2C_TransferConfig(hi2c, devaddress, (uint8_t)hi2c->XferSize, + I2C_AUTOEND_MODE, I2C_NO_STARTSTOP); + } + } + } + else + { + /* Call TxCpltCallback() if no stop mode is set */ + if (I2C_GET_STOP_MODE(hi2c) != I2C_AUTOEND_MODE) + { + /* Call I2C Master Sequential complete process */ + I2C_ITMasterSeqCplt(hi2c); + } + else + { + /* Wrong size Status regarding TCR flag event */ + /* Call the corresponding callback to inform upper layer of End of Transfer */ + I2C_ITError(hi2c, HAL_I2C_ERROR_SIZE); + } + } + } + else if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_TC) != RESET) && \ + (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_TCI) != RESET)) + { + if (hi2c->XferCount == 0U) + { + if (I2C_GET_STOP_MODE(hi2c) != I2C_AUTOEND_MODE) + { + /* Generate a stop condition in case of no transfer option */ + if (hi2c->XferOptions == I2C_NO_OPTION_FRAME) + { + /* Generate Stop */ + hi2c->Instance->CR2 |= I2C_CR2_STOP; + } + else + { + /* Call I2C Master Sequential complete process */ + I2C_ITMasterSeqCplt(hi2c); + } + } + } + else + { + /* Wrong size Status regarding TC flag event */ + /* Call the corresponding callback to inform upper layer of End of Transfer */ + I2C_ITError(hi2c, HAL_I2C_ERROR_SIZE); + } + } + else + { + /* Nothing to do */ + } + + if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_STOPF) != RESET) && \ + (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_STOPI) != RESET)) + { + /* Call I2C Master complete process */ + I2C_ITMasterCplt(hi2c, tmpITFlags); + } + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_OK; +} + +/** + * @brief Interrupt Sub-Routine which handle the Interrupt Flags Memory Mode with Interrupt. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param ITFlags Interrupt flags to handle. + * @param ITSources Interrupt sources enabled. + * @retval HAL status + */ +static HAL_StatusTypeDef I2C_Mem_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uint32_t ITFlags, + uint32_t ITSources) +{ + uint32_t direction = I2C_GENERATE_START_WRITE; + uint32_t tmpITFlags = ITFlags; + + /* Process Locked */ + __HAL_LOCK(hi2c); + + if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_AF) != RESET) && \ + (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_NACKI) != RESET)) + { + /* Clear NACK Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF); + + /* Set corresponding Error Code */ + /* No need to generate STOP, it is automatically done */ + /* Error callback will be send during stop flag treatment */ + hi2c->ErrorCode |= HAL_I2C_ERROR_AF; + + /* Flush TX register */ + I2C_Flush_TXDR(hi2c); + } + else if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_RXNE) != RESET) && \ + (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_RXI) != RESET)) + { + /* Remove RXNE flag on temporary variable as read done */ + tmpITFlags &= ~I2C_FLAG_RXNE; + + /* Read data from RXDR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->RXDR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + hi2c->XferSize--; + hi2c->XferCount--; + } + else if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_TXIS) != RESET) && \ + (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_TXI) != RESET)) + { + if (hi2c->Memaddress == 0xFFFFFFFFU) + { + /* Write data to TXDR */ + hi2c->Instance->TXDR = *hi2c->pBuffPtr; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + hi2c->XferSize--; + hi2c->XferCount--; + } + else + { + /* Write LSB part of Memory Address */ + hi2c->Instance->TXDR = hi2c->Memaddress; + + /* Reset Memaddress content */ + hi2c->Memaddress = 0xFFFFFFFFU; + } + } + else if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_TCR) != RESET) && \ + (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_TCI) != RESET)) + { + if ((hi2c->XferCount != 0U) && (hi2c->XferSize == 0U)) + { + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + I2C_TransferConfig(hi2c, (uint16_t)hi2c->Devaddress, (uint8_t)hi2c->XferSize, + I2C_RELOAD_MODE, I2C_NO_STARTSTOP); + } + else + { + hi2c->XferSize = hi2c->XferCount; + I2C_TransferConfig(hi2c, (uint16_t)hi2c->Devaddress, (uint8_t)hi2c->XferSize, + I2C_AUTOEND_MODE, I2C_NO_STARTSTOP); + } + } + else + { + /* Wrong size Status regarding TCR flag event */ + /* Call the corresponding callback to inform upper layer of End of Transfer */ + I2C_ITError(hi2c, HAL_I2C_ERROR_SIZE); + } + } + else if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_TC) != RESET) && \ + (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_TCI) != RESET)) + { + if (hi2c->State == HAL_I2C_STATE_BUSY_RX) + { + direction = I2C_GENERATE_START_READ; + } + + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + + /* Set NBYTES to write and reload if hi2c->XferCount > MAX_NBYTE_SIZE and generate RESTART */ + I2C_TransferConfig(hi2c, (uint16_t)hi2c->Devaddress, (uint8_t)hi2c->XferSize, + I2C_RELOAD_MODE, direction); + } + else + { + hi2c->XferSize = hi2c->XferCount; + + /* Set NBYTES to write and generate RESTART */ + I2C_TransferConfig(hi2c, (uint16_t)hi2c->Devaddress, (uint8_t)hi2c->XferSize, + I2C_AUTOEND_MODE, direction); + } + } + else + { + /* Nothing to do */ + } + + if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_STOPF) != RESET) && \ + (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_STOPI) != RESET)) + { + /* Call I2C Master complete process */ + I2C_ITMasterCplt(hi2c, tmpITFlags); + } + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_OK; +} + +/** + * @brief Interrupt Sub-Routine which handle the Interrupt Flags Slave Mode with Interrupt. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param ITFlags Interrupt flags to handle. + * @param ITSources Interrupt sources enabled. + * @retval HAL status + */ +static HAL_StatusTypeDef I2C_Slave_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uint32_t ITFlags, + uint32_t ITSources) +{ + uint32_t tmpoptions = hi2c->XferOptions; + uint32_t tmpITFlags = ITFlags; + + /* Process locked */ + __HAL_LOCK(hi2c); + + /* Check if STOPF is set */ + if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_STOPF) != RESET) && \ + (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_STOPI) != RESET)) + { + /* Call I2C Slave complete process */ + I2C_ITSlaveCplt(hi2c, tmpITFlags); + } + + if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_AF) != RESET) && \ + (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_NACKI) != RESET)) + { + /* Check that I2C transfer finished */ + /* if yes, normal use case, a NACK is sent by the MASTER when Transfer is finished */ + /* Mean XferCount == 0*/ + /* So clear Flag NACKF only */ + if (hi2c->XferCount == 0U) + { + if ((hi2c->State == HAL_I2C_STATE_LISTEN) && (tmpoptions == I2C_FIRST_AND_LAST_FRAME)) + /* Same action must be done for (tmpoptions == I2C_LAST_FRAME) which removed for + Warning[Pa134]: left and right operands are identical */ + { + /* Call I2C Listen complete process */ + I2C_ITListenCplt(hi2c, tmpITFlags); + } + else if ((hi2c->State == HAL_I2C_STATE_BUSY_TX_LISTEN) && (tmpoptions != I2C_NO_OPTION_FRAME)) + { + /* Clear NACK Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF); + + /* Flush TX register */ + I2C_Flush_TXDR(hi2c); + + /* Last Byte is Transmitted */ + /* Call I2C Slave Sequential complete process */ + I2C_ITSlaveSeqCplt(hi2c); + } + else + { + /* Clear NACK Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF); + } + } + else + { + /* if no, error use case, a Non-Acknowledge of last Data is generated by the MASTER*/ + /* Clear NACK Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF); + + /* Set ErrorCode corresponding to a Non-Acknowledge */ + hi2c->ErrorCode |= HAL_I2C_ERROR_AF; + + if ((tmpoptions == I2C_FIRST_FRAME) || (tmpoptions == I2C_NEXT_FRAME)) + { + /* Call the corresponding callback to inform upper layer of End of Transfer */ + I2C_ITError(hi2c, hi2c->ErrorCode); + } + } + } + else if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_RXNE) != RESET) && \ + (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_RXI) != RESET)) + { + if (hi2c->XferCount > 0U) + { + /* Read data from RXDR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->RXDR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + hi2c->XferSize--; + hi2c->XferCount--; + } + + if ((hi2c->XferCount == 0U) && \ + (tmpoptions != I2C_NO_OPTION_FRAME)) + { + /* Call I2C Slave Sequential complete process */ + I2C_ITSlaveSeqCplt(hi2c); + } + } + else if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_ADDR) != RESET) && \ + (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_ADDRI) != RESET)) + { + I2C_ITAddrCplt(hi2c, tmpITFlags); + } + else if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_TXIS) != RESET) && \ + (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_TXI) != RESET)) + { + /* Write data to TXDR only if XferCount not reach "0" */ + /* A TXIS flag can be set, during STOP treatment */ + /* Check if all Data have already been sent */ + /* If it is the case, this last write in TXDR is not sent, correspond to a dummy TXIS event */ + if (hi2c->XferCount > 0U) + { + /* Write data to TXDR */ + hi2c->Instance->TXDR = *hi2c->pBuffPtr; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + hi2c->XferCount--; + hi2c->XferSize--; + } + else + { + if ((tmpoptions == I2C_NEXT_FRAME) || (tmpoptions == I2C_FIRST_FRAME)) + { + /* Last Byte is Transmitted */ + /* Call I2C Slave Sequential complete process */ + I2C_ITSlaveSeqCplt(hi2c); + } + } + } + else + { + /* Nothing to do */ + } + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_OK; +} + +/** + * @brief Interrupt Sub-Routine which handle the Interrupt Flags Master Mode with DMA. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param ITFlags Interrupt flags to handle. + * @param ITSources Interrupt sources enabled. + * @retval HAL status + */ +static HAL_StatusTypeDef I2C_Master_ISR_DMA(struct __I2C_HandleTypeDef *hi2c, uint32_t ITFlags, + uint32_t ITSources) +{ + uint16_t devaddress; + uint32_t xfermode; + + /* Process Locked */ + __HAL_LOCK(hi2c); + + if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_AF) != RESET) && \ + (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_NACKI) != RESET)) + { + /* Clear NACK Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF); + + /* Set corresponding Error Code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_AF; + + /* No need to generate STOP, it is automatically done */ + /* But enable STOP interrupt, to treat it */ + /* Error callback will be send during stop flag treatment */ + I2C_Enable_IRQ(hi2c, I2C_XFER_CPLT_IT); + + /* Flush TX register */ + I2C_Flush_TXDR(hi2c); + } + else if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_TCR) != RESET) && \ + (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_TCI) != RESET)) + { + /* Disable TC interrupt */ + __HAL_I2C_DISABLE_IT(hi2c, I2C_IT_TCI); + + if (hi2c->XferCount != 0U) + { + /* Recover Slave address */ + devaddress = (uint16_t)(hi2c->Instance->CR2 & I2C_CR2_SADD); + + /* Prepare the new XferSize to transfer */ + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + xfermode = I2C_RELOAD_MODE; + } + else + { + hi2c->XferSize = hi2c->XferCount; + if (hi2c->XferOptions != I2C_NO_OPTION_FRAME) + { + xfermode = hi2c->XferOptions; + } + else + { + xfermode = I2C_AUTOEND_MODE; + } + } + + /* Set the new XferSize in Nbytes register */ + I2C_TransferConfig(hi2c, devaddress, (uint8_t)hi2c->XferSize, xfermode, I2C_NO_STARTSTOP); + + /* Update XferCount value */ + hi2c->XferCount -= hi2c->XferSize; + + /* Enable DMA Request */ + if (hi2c->State == HAL_I2C_STATE_BUSY_RX) + { + hi2c->Instance->CR1 |= I2C_CR1_RXDMAEN; + } + else + { + hi2c->Instance->CR1 |= I2C_CR1_TXDMAEN; + } + } + else + { + /* Call TxCpltCallback() if no stop mode is set */ + if (I2C_GET_STOP_MODE(hi2c) != I2C_AUTOEND_MODE) + { + /* Call I2C Master Sequential complete process */ + I2C_ITMasterSeqCplt(hi2c); + } + else + { + /* Wrong size Status regarding TCR flag event */ + /* Call the corresponding callback to inform upper layer of End of Transfer */ + I2C_ITError(hi2c, HAL_I2C_ERROR_SIZE); + } + } + } + else if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_TC) != RESET) && \ + (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_TCI) != RESET)) + { + if (hi2c->XferCount == 0U) + { + if (I2C_GET_STOP_MODE(hi2c) != I2C_AUTOEND_MODE) + { + /* Generate a stop condition in case of no transfer option */ + if (hi2c->XferOptions == I2C_NO_OPTION_FRAME) + { + /* Generate Stop */ + hi2c->Instance->CR2 |= I2C_CR2_STOP; + } + else + { + /* Call I2C Master Sequential complete process */ + I2C_ITMasterSeqCplt(hi2c); + } + } + } + else + { + /* Wrong size Status regarding TC flag event */ + /* Call the corresponding callback to inform upper layer of End of Transfer */ + I2C_ITError(hi2c, HAL_I2C_ERROR_SIZE); + } + } + else if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_STOPF) != RESET) && \ + (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_STOPI) != RESET)) + { + /* Call I2C Master complete process */ + I2C_ITMasterCplt(hi2c, ITFlags); + } + else + { + /* Nothing to do */ + } + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_OK; +} + +/** + * @brief Interrupt Sub-Routine which handle the Interrupt Flags Memory Mode with DMA. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param ITFlags Interrupt flags to handle. + * @param ITSources Interrupt sources enabled. + * @retval HAL status + */ +static HAL_StatusTypeDef I2C_Mem_ISR_DMA(struct __I2C_HandleTypeDef *hi2c, uint32_t ITFlags, + uint32_t ITSources) +{ + uint32_t direction = I2C_GENERATE_START_WRITE; + + /* Process Locked */ + __HAL_LOCK(hi2c); + + if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_AF) != RESET) && \ + (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_NACKI) != RESET)) + { + /* Clear NACK Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF); + + /* Set corresponding Error Code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_AF; + + /* No need to generate STOP, it is automatically done */ + /* But enable STOP interrupt, to treat it */ + /* Error callback will be send during stop flag treatment */ + I2C_Enable_IRQ(hi2c, I2C_XFER_CPLT_IT); + + /* Flush TX register */ + I2C_Flush_TXDR(hi2c); + } + else if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_TXIS) != RESET) && \ + (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_TXI) != RESET)) + { + /* Write LSB part of Memory Address */ + hi2c->Instance->TXDR = hi2c->Memaddress; + + /* Reset Memaddress content */ + hi2c->Memaddress = 0xFFFFFFFFU; + } + else if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_TCR) != RESET) && \ + (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_TCI) != RESET)) + { + /* Enable only Error interrupt */ + I2C_Enable_IRQ(hi2c, I2C_XFER_ERROR_IT); + + if (hi2c->XferCount != 0U) + { + /* Prepare the new XferSize to transfer */ + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + I2C_TransferConfig(hi2c, (uint16_t)hi2c->Devaddress, (uint8_t)hi2c->XferSize, + I2C_RELOAD_MODE, I2C_NO_STARTSTOP); + } + else + { + hi2c->XferSize = hi2c->XferCount; + I2C_TransferConfig(hi2c, (uint16_t)hi2c->Devaddress, (uint8_t)hi2c->XferSize, + I2C_AUTOEND_MODE, I2C_NO_STARTSTOP); + } + + /* Update XferCount value */ + hi2c->XferCount -= hi2c->XferSize; + + /* Enable DMA Request */ + if (hi2c->State == HAL_I2C_STATE_BUSY_RX) + { + hi2c->Instance->CR1 |= I2C_CR1_RXDMAEN; + } + else + { + hi2c->Instance->CR1 |= I2C_CR1_TXDMAEN; + } + } + else + { + /* Wrong size Status regarding TCR flag event */ + /* Call the corresponding callback to inform upper layer of End of Transfer */ + I2C_ITError(hi2c, HAL_I2C_ERROR_SIZE); + } + } + else if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_TC) != RESET) && \ + (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_TCI) != RESET)) + { + if (hi2c->State == HAL_I2C_STATE_BUSY_RX) + { + direction = I2C_GENERATE_START_READ; + } + + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + + /* Set NBYTES to write and reload if hi2c->XferCount > MAX_NBYTE_SIZE and generate RESTART */ + I2C_TransferConfig(hi2c, (uint16_t)hi2c->Devaddress, (uint8_t)hi2c->XferSize, + I2C_RELOAD_MODE, direction); + } + else + { + hi2c->XferSize = hi2c->XferCount; + + /* Set NBYTES to write and generate RESTART */ + I2C_TransferConfig(hi2c, (uint16_t)hi2c->Devaddress, (uint8_t)hi2c->XferSize, + I2C_AUTOEND_MODE, direction); + } + + /* Update XferCount value */ + hi2c->XferCount -= hi2c->XferSize; + + /* Enable DMA Request */ + if (hi2c->State == HAL_I2C_STATE_BUSY_RX) + { + hi2c->Instance->CR1 |= I2C_CR1_RXDMAEN; + } + else + { + hi2c->Instance->CR1 |= I2C_CR1_TXDMAEN; + } + } + else if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_STOPF) != RESET) && \ + (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_STOPI) != RESET)) + { + /* Call I2C Master complete process */ + I2C_ITMasterCplt(hi2c, ITFlags); + } + else + { + /* Nothing to do */ + } + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_OK; +} + +/** + * @brief Interrupt Sub-Routine which handle the Interrupt Flags Slave Mode with DMA. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param ITFlags Interrupt flags to handle. + * @param ITSources Interrupt sources enabled. + * @retval HAL status + */ +static HAL_StatusTypeDef I2C_Slave_ISR_DMA(struct __I2C_HandleTypeDef *hi2c, uint32_t ITFlags, + uint32_t ITSources) +{ + uint32_t tmpoptions = hi2c->XferOptions; + uint32_t treatdmanack = 0U; + HAL_I2C_StateTypeDef tmpstate; + + /* Process locked */ + __HAL_LOCK(hi2c); + + /* Check if STOPF is set */ + if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_STOPF) != RESET) && \ + (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_STOPI) != RESET)) + { + /* Call I2C Slave complete process */ + I2C_ITSlaveCplt(hi2c, ITFlags); + } + + if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_AF) != RESET) && \ + (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_NACKI) != RESET)) + { + /* Check that I2C transfer finished */ + /* if yes, normal use case, a NACK is sent by the MASTER when Transfer is finished */ + /* Mean XferCount == 0 */ + /* So clear Flag NACKF only */ + if ((I2C_CHECK_IT_SOURCE(ITSources, I2C_CR1_TXDMAEN) != RESET) || + (I2C_CHECK_IT_SOURCE(ITSources, I2C_CR1_RXDMAEN) != RESET)) + { + /* Split check of hdmarx, for MISRA compliance */ + if (hi2c->hdmarx != NULL) + { + if (I2C_CHECK_IT_SOURCE(ITSources, I2C_CR1_RXDMAEN) != RESET) + { + if (I2C_GET_DMA_REMAIN_DATA(hi2c->hdmarx) == 0U) + { + treatdmanack = 1U; + } + } + } + + /* Split check of hdmatx, for MISRA compliance */ + if (hi2c->hdmatx != NULL) + { + if (I2C_CHECK_IT_SOURCE(ITSources, I2C_CR1_TXDMAEN) != RESET) + { + if (I2C_GET_DMA_REMAIN_DATA(hi2c->hdmatx) == 0U) + { + treatdmanack = 1U; + } + } + } + + if (treatdmanack == 1U) + { + if ((hi2c->State == HAL_I2C_STATE_LISTEN) && (tmpoptions == I2C_FIRST_AND_LAST_FRAME)) + /* Same action must be done for (tmpoptions == I2C_LAST_FRAME) which removed for + Warning[Pa134]: left and right operands are identical */ + { + /* Call I2C Listen complete process */ + I2C_ITListenCplt(hi2c, ITFlags); + } + else if ((hi2c->State == HAL_I2C_STATE_BUSY_TX_LISTEN) && (tmpoptions != I2C_NO_OPTION_FRAME)) + { + /* Clear NACK Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF); + + /* Flush TX register */ + I2C_Flush_TXDR(hi2c); + + /* Last Byte is Transmitted */ + /* Call I2C Slave Sequential complete process */ + I2C_ITSlaveSeqCplt(hi2c); + } + else + { + /* Clear NACK Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF); + } + } + else + { + /* if no, error use case, a Non-Acknowledge of last Data is generated by the MASTER*/ + /* Clear NACK Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF); + + /* Set ErrorCode corresponding to a Non-Acknowledge */ + hi2c->ErrorCode |= HAL_I2C_ERROR_AF; + + /* Store current hi2c->State, solve MISRA2012-Rule-13.5 */ + tmpstate = hi2c->State; + + if ((tmpoptions == I2C_FIRST_FRAME) || (tmpoptions == I2C_NEXT_FRAME)) + { + if ((tmpstate == HAL_I2C_STATE_BUSY_TX) || (tmpstate == HAL_I2C_STATE_BUSY_TX_LISTEN)) + { + hi2c->PreviousState = I2C_STATE_SLAVE_BUSY_TX; + } + else if ((tmpstate == HAL_I2C_STATE_BUSY_RX) || (tmpstate == HAL_I2C_STATE_BUSY_RX_LISTEN)) + { + hi2c->PreviousState = I2C_STATE_SLAVE_BUSY_RX; + } + else + { + /* Do nothing */ + } + + /* Call the corresponding callback to inform upper layer of End of Transfer */ + I2C_ITError(hi2c, hi2c->ErrorCode); + } + } + } + else + { + /* Only Clear NACK Flag, no DMA treatment is pending */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF); + } + } + else if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_ADDR) != RESET) && \ + (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_ADDRI) != RESET)) + { + I2C_ITAddrCplt(hi2c, ITFlags); + } + else + { + /* Nothing to do */ + } + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_OK; +} + +/** + * @brief Master sends target device address followed by internal memory address for write request. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param MemAddress Internal memory address + * @param MemAddSize Size of internal memory address + * @param Timeout Timeout duration + * @param Tickstart Tick start value + * @retval HAL status + */ +static HAL_StatusTypeDef I2C_RequestMemoryWrite(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, + uint16_t MemAddress, uint16_t MemAddSize, uint32_t Timeout, + uint32_t Tickstart) +{ + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)MemAddSize, I2C_RELOAD_MODE, I2C_GENERATE_START_WRITE); + + /* Wait until TXIS flag is set */ + if (I2C_WaitOnTXISFlagUntilTimeout(hi2c, Timeout, Tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* If Memory address size is 8Bit */ + if (MemAddSize == I2C_MEMADD_SIZE_8BIT) + { + /* Send Memory Address */ + hi2c->Instance->TXDR = I2C_MEM_ADD_LSB(MemAddress); + } + /* If Memory address size is 16Bit */ + else + { + /* Send MSB of Memory Address */ + hi2c->Instance->TXDR = I2C_MEM_ADD_MSB(MemAddress); + + /* Wait until TXIS flag is set */ + if (I2C_WaitOnTXISFlagUntilTimeout(hi2c, Timeout, Tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Send LSB of Memory Address */ + hi2c->Instance->TXDR = I2C_MEM_ADD_LSB(MemAddress); + } + + /* Wait until TCR flag is set */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_TCR, RESET, Timeout, Tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + return HAL_OK; +} + +/** + * @brief Master sends target device address followed by internal memory address for read request. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param DevAddress Target device address: The device 7 bits address value + * in datasheet must be shifted to the left before calling the interface + * @param MemAddress Internal memory address + * @param MemAddSize Size of internal memory address + * @param Timeout Timeout duration + * @param Tickstart Tick start value + * @retval HAL status + */ +static HAL_StatusTypeDef I2C_RequestMemoryRead(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, + uint16_t MemAddress, uint16_t MemAddSize, uint32_t Timeout, + uint32_t Tickstart) +{ + I2C_TransferConfig(hi2c, DevAddress, (uint8_t)MemAddSize, I2C_SOFTEND_MODE, I2C_GENERATE_START_WRITE); + + /* Wait until TXIS flag is set */ + if (I2C_WaitOnTXISFlagUntilTimeout(hi2c, Timeout, Tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* If Memory address size is 8Bit */ + if (MemAddSize == I2C_MEMADD_SIZE_8BIT) + { + /* Send Memory Address */ + hi2c->Instance->TXDR = I2C_MEM_ADD_LSB(MemAddress); + } + /* If Memory address size is 16Bit */ + else + { + /* Send MSB of Memory Address */ + hi2c->Instance->TXDR = I2C_MEM_ADD_MSB(MemAddress); + + /* Wait until TXIS flag is set */ + if (I2C_WaitOnTXISFlagUntilTimeout(hi2c, Timeout, Tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Send LSB of Memory Address */ + hi2c->Instance->TXDR = I2C_MEM_ADD_LSB(MemAddress); + } + + /* Wait until TC flag is set */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_TC, RESET, Timeout, Tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + return HAL_OK; +} + +/** + * @brief I2C Address complete process callback. + * @param hi2c I2C handle. + * @param ITFlags Interrupt flags to handle. + * @retval None + */ +static void I2C_ITAddrCplt(I2C_HandleTypeDef *hi2c, uint32_t ITFlags) +{ + uint8_t transferdirection; + uint16_t slaveaddrcode; + uint16_t ownadd1code; + uint16_t ownadd2code; + + /* Prevent unused argument(s) compilation warning */ + UNUSED(ITFlags); + + /* In case of Listen state, need to inform upper layer of address match code event */ + if (((uint32_t)hi2c->State & (uint32_t)HAL_I2C_STATE_LISTEN) == (uint32_t)HAL_I2C_STATE_LISTEN) + { + transferdirection = I2C_GET_DIR(hi2c); + slaveaddrcode = I2C_GET_ADDR_MATCH(hi2c); + ownadd1code = I2C_GET_OWN_ADDRESS1(hi2c); + ownadd2code = I2C_GET_OWN_ADDRESS2(hi2c); + + /* If 10bits addressing mode is selected */ + if (hi2c->Init.AddressingMode == I2C_ADDRESSINGMODE_10BIT) + { + if ((slaveaddrcode & SLAVE_ADDR_MSK) == ((ownadd1code >> SLAVE_ADDR_SHIFT) & SLAVE_ADDR_MSK)) + { + slaveaddrcode = ownadd1code; + hi2c->AddrEventCount++; + if (hi2c->AddrEventCount == 2U) + { + /* Reset Address Event counter */ + hi2c->AddrEventCount = 0U; + + /* Clear ADDR flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_ADDR); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Call Slave Addr callback */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->AddrCallback(hi2c, transferdirection, slaveaddrcode); +#else + HAL_I2C_AddrCallback(hi2c, transferdirection, slaveaddrcode); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + } + else + { + slaveaddrcode = ownadd2code; + + /* Disable ADDR Interrupts */ + I2C_Disable_IRQ(hi2c, I2C_XFER_LISTEN_IT); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Call Slave Addr callback */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->AddrCallback(hi2c, transferdirection, slaveaddrcode); +#else + HAL_I2C_AddrCallback(hi2c, transferdirection, slaveaddrcode); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + } + /* else 7 bits addressing mode is selected */ + else + { + /* Disable ADDR Interrupts */ + I2C_Disable_IRQ(hi2c, I2C_XFER_LISTEN_IT); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Call Slave Addr callback */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->AddrCallback(hi2c, transferdirection, slaveaddrcode); +#else + HAL_I2C_AddrCallback(hi2c, transferdirection, slaveaddrcode); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + } + /* Else clear address flag only */ + else + { + /* Clear ADDR flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_ADDR); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + } +} + +/** + * @brief I2C Master sequential complete process. + * @param hi2c I2C handle. + * @retval None + */ +static void I2C_ITMasterSeqCplt(I2C_HandleTypeDef *hi2c) +{ + /* Reset I2C handle mode */ + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* No Generate Stop, to permit restart mode */ + /* The stop will be done at the end of transfer, when I2C_AUTOEND_MODE enable */ + if (hi2c->State == HAL_I2C_STATE_BUSY_TX) + { + hi2c->State = HAL_I2C_STATE_READY; + hi2c->PreviousState = I2C_STATE_MASTER_BUSY_TX; + hi2c->XferISR = NULL; + + /* Disable Interrupts */ + I2C_Disable_IRQ(hi2c, I2C_XFER_TX_IT); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Call the corresponding callback to inform upper layer of End of Transfer */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->MasterTxCpltCallback(hi2c); +#else + HAL_I2C_MasterTxCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + /* hi2c->State == HAL_I2C_STATE_BUSY_RX */ + else + { + hi2c->State = HAL_I2C_STATE_READY; + hi2c->PreviousState = I2C_STATE_MASTER_BUSY_RX; + hi2c->XferISR = NULL; + + /* Disable Interrupts */ + I2C_Disable_IRQ(hi2c, I2C_XFER_RX_IT); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Call the corresponding callback to inform upper layer of End of Transfer */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->MasterRxCpltCallback(hi2c); +#else + HAL_I2C_MasterRxCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } +} + +/** + * @brief I2C Slave sequential complete process. + * @param hi2c I2C handle. + * @retval None + */ +static void I2C_ITSlaveSeqCplt(I2C_HandleTypeDef *hi2c) +{ + uint32_t tmpcr1value = READ_REG(hi2c->Instance->CR1); + + /* Reset I2C handle mode */ + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* If a DMA is ongoing, Update handle size context */ + if (I2C_CHECK_IT_SOURCE(tmpcr1value, I2C_CR1_TXDMAEN) != RESET) + { + /* Disable DMA Request */ + hi2c->Instance->CR1 &= ~I2C_CR1_TXDMAEN; + } + else if (I2C_CHECK_IT_SOURCE(tmpcr1value, I2C_CR1_RXDMAEN) != RESET) + { + /* Disable DMA Request */ + hi2c->Instance->CR1 &= ~I2C_CR1_RXDMAEN; + } + else + { + /* Do nothing */ + } + + if (hi2c->State == HAL_I2C_STATE_BUSY_TX_LISTEN) + { + /* Remove HAL_I2C_STATE_SLAVE_BUSY_TX, keep only HAL_I2C_STATE_LISTEN */ + hi2c->State = HAL_I2C_STATE_LISTEN; + hi2c->PreviousState = I2C_STATE_SLAVE_BUSY_TX; + + /* Disable Interrupts */ + I2C_Disable_IRQ(hi2c, I2C_XFER_TX_IT); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Call the corresponding callback to inform upper layer of End of Transfer */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->SlaveTxCpltCallback(hi2c); +#else + HAL_I2C_SlaveTxCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + + else if (hi2c->State == HAL_I2C_STATE_BUSY_RX_LISTEN) + { + /* Remove HAL_I2C_STATE_SLAVE_BUSY_RX, keep only HAL_I2C_STATE_LISTEN */ + hi2c->State = HAL_I2C_STATE_LISTEN; + hi2c->PreviousState = I2C_STATE_SLAVE_BUSY_RX; + + /* Disable Interrupts */ + I2C_Disable_IRQ(hi2c, I2C_XFER_RX_IT); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Call the corresponding callback to inform upper layer of End of Transfer */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->SlaveRxCpltCallback(hi2c); +#else + HAL_I2C_SlaveRxCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + else + { + /* Nothing to do */ + } +} + +/** + * @brief I2C Master complete process. + * @param hi2c I2C handle. + * @param ITFlags Interrupt flags to handle. + * @retval None + */ +static void I2C_ITMasterCplt(I2C_HandleTypeDef *hi2c, uint32_t ITFlags) +{ + uint32_t tmperror; + uint32_t tmpITFlags = ITFlags; + __IO uint32_t tmpreg; + + /* Clear STOP Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF); + + /* Disable Interrupts and Store Previous state */ + if (hi2c->State == HAL_I2C_STATE_BUSY_TX) + { + I2C_Disable_IRQ(hi2c, I2C_XFER_TX_IT); + hi2c->PreviousState = I2C_STATE_MASTER_BUSY_TX; + } + else if (hi2c->State == HAL_I2C_STATE_BUSY_RX) + { + I2C_Disable_IRQ(hi2c, I2C_XFER_RX_IT); + hi2c->PreviousState = I2C_STATE_MASTER_BUSY_RX; + } + else + { + /* Do nothing */ + } + + /* Clear Configuration Register 2 */ + I2C_RESET_CR2(hi2c); + + /* Reset handle parameters */ + hi2c->XferISR = NULL; + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + + if (I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_AF) != RESET) + { + /* Clear NACK Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF); + + /* Set acknowledge error code */ + hi2c->ErrorCode |= HAL_I2C_ERROR_AF; + } + + /* Fetch Last receive data if any */ + if ((hi2c->State == HAL_I2C_STATE_ABORT) && (I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_RXNE) != RESET)) + { + /* Read data from RXDR */ + tmpreg = (uint8_t)hi2c->Instance->RXDR; + UNUSED(tmpreg); + } + + /* Flush TX register */ + I2C_Flush_TXDR(hi2c); + + /* Store current volatile hi2c->ErrorCode, misra rule */ + tmperror = hi2c->ErrorCode; + + /* Call the corresponding callback to inform upper layer of End of Transfer */ + if ((hi2c->State == HAL_I2C_STATE_ABORT) || (tmperror != HAL_I2C_ERROR_NONE)) + { + /* Call the corresponding callback to inform upper layer of End of Transfer */ + I2C_ITError(hi2c, hi2c->ErrorCode); + } + /* hi2c->State == HAL_I2C_STATE_BUSY_TX */ + else if (hi2c->State == HAL_I2C_STATE_BUSY_TX) + { + hi2c->State = HAL_I2C_STATE_READY; + hi2c->PreviousState = I2C_STATE_NONE; + + if (hi2c->Mode == HAL_I2C_MODE_MEM) + { + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Call the corresponding callback to inform upper layer of End of Transfer */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->MemTxCpltCallback(hi2c); +#else + HAL_I2C_MemTxCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + else + { + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Call the corresponding callback to inform upper layer of End of Transfer */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->MasterTxCpltCallback(hi2c); +#else + HAL_I2C_MasterTxCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + } + /* hi2c->State == HAL_I2C_STATE_BUSY_RX */ + else if (hi2c->State == HAL_I2C_STATE_BUSY_RX) + { + hi2c->State = HAL_I2C_STATE_READY; + hi2c->PreviousState = I2C_STATE_NONE; + + if (hi2c->Mode == HAL_I2C_MODE_MEM) + { + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Call the corresponding callback to inform upper layer of End of Transfer */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->MemRxCpltCallback(hi2c); +#else + HAL_I2C_MemRxCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + else + { + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Call the corresponding callback to inform upper layer of End of Transfer */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->MasterRxCpltCallback(hi2c); +#else + HAL_I2C_MasterRxCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + } + else + { + /* Nothing to do */ + } +} + +/** + * @brief I2C Slave complete process. + * @param hi2c I2C handle. + * @param ITFlags Interrupt flags to handle. + * @retval None + */ +static void I2C_ITSlaveCplt(I2C_HandleTypeDef *hi2c, uint32_t ITFlags) +{ + uint32_t tmpcr1value = READ_REG(hi2c->Instance->CR1); + uint32_t tmpITFlags = ITFlags; + HAL_I2C_StateTypeDef tmpstate = hi2c->State; + + /* Clear STOP Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF); + + /* Disable Interrupts and Store Previous state */ + if ((tmpstate == HAL_I2C_STATE_BUSY_TX) || (tmpstate == HAL_I2C_STATE_BUSY_TX_LISTEN)) + { + I2C_Disable_IRQ(hi2c, I2C_XFER_LISTEN_IT | I2C_XFER_TX_IT); + hi2c->PreviousState = I2C_STATE_SLAVE_BUSY_TX; + } + else if ((tmpstate == HAL_I2C_STATE_BUSY_RX) || (tmpstate == HAL_I2C_STATE_BUSY_RX_LISTEN)) + { + I2C_Disable_IRQ(hi2c, I2C_XFER_LISTEN_IT | I2C_XFER_RX_IT); + hi2c->PreviousState = I2C_STATE_SLAVE_BUSY_RX; + } + else + { + /* Do nothing */ + } + + /* Disable Address Acknowledge */ + hi2c->Instance->CR2 |= I2C_CR2_NACK; + + /* Clear Configuration Register 2 */ + I2C_RESET_CR2(hi2c); + + /* Flush TX register */ + I2C_Flush_TXDR(hi2c); + + /* If a DMA is ongoing, Update handle size context */ + if (I2C_CHECK_IT_SOURCE(tmpcr1value, I2C_CR1_TXDMAEN) != RESET) + { + /* Disable DMA Request */ + hi2c->Instance->CR1 &= ~I2C_CR1_TXDMAEN; + + if (hi2c->hdmatx != NULL) + { + hi2c->XferCount = (uint16_t)I2C_GET_DMA_REMAIN_DATA(hi2c->hdmatx); + } + } + else if (I2C_CHECK_IT_SOURCE(tmpcr1value, I2C_CR1_RXDMAEN) != RESET) + { + /* Disable DMA Request */ + hi2c->Instance->CR1 &= ~I2C_CR1_RXDMAEN; + + if (hi2c->hdmarx != NULL) + { + hi2c->XferCount = (uint16_t)I2C_GET_DMA_REMAIN_DATA(hi2c->hdmarx); + } + } + else + { + /* Do nothing */ + } + + /* Store Last receive data if any */ + if (I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_RXNE) != RESET) + { + /* Remove RXNE flag on temporary variable as read done */ + tmpITFlags &= ~I2C_FLAG_RXNE; + + /* Read data from RXDR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->RXDR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + if ((hi2c->XferSize > 0U)) + { + hi2c->XferSize--; + hi2c->XferCount--; + } + } + + /* All data are not transferred, so set error code accordingly */ + if (hi2c->XferCount != 0U) + { + /* Set ErrorCode corresponding to a Non-Acknowledge */ + hi2c->ErrorCode |= HAL_I2C_ERROR_AF; + } + + hi2c->Mode = HAL_I2C_MODE_NONE; + hi2c->XferISR = NULL; + + if (hi2c->ErrorCode != HAL_I2C_ERROR_NONE) + { + /* Call the corresponding callback to inform upper layer of End of Transfer */ + I2C_ITError(hi2c, hi2c->ErrorCode); + + /* Call the Listen Complete callback, to inform upper layer of the end of Listen usecase */ + if (hi2c->State == HAL_I2C_STATE_LISTEN) + { + /* Call I2C Listen complete process */ + I2C_ITListenCplt(hi2c, tmpITFlags); + } + } + else if (hi2c->XferOptions != I2C_NO_OPTION_FRAME) + { + /* Call the Sequential Complete callback, to inform upper layer of the end of Transfer */ + I2C_ITSlaveSeqCplt(hi2c); + + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + hi2c->State = HAL_I2C_STATE_READY; + hi2c->PreviousState = I2C_STATE_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Call the Listen Complete callback, to inform upper layer of the end of Listen usecase */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->ListenCpltCallback(hi2c); +#else + HAL_I2C_ListenCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + /* Call the corresponding callback to inform upper layer of End of Transfer */ + else if (hi2c->State == HAL_I2C_STATE_BUSY_RX) + { + hi2c->State = HAL_I2C_STATE_READY; + hi2c->PreviousState = I2C_STATE_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Call the corresponding callback to inform upper layer of End of Transfer */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->SlaveRxCpltCallback(hi2c); +#else + HAL_I2C_SlaveRxCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + else + { + hi2c->State = HAL_I2C_STATE_READY; + hi2c->PreviousState = I2C_STATE_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Call the corresponding callback to inform upper layer of End of Transfer */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->SlaveTxCpltCallback(hi2c); +#else + HAL_I2C_SlaveTxCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } +} + +/** + * @brief I2C Listen complete process. + * @param hi2c I2C handle. + * @param ITFlags Interrupt flags to handle. + * @retval None + */ +static void I2C_ITListenCplt(I2C_HandleTypeDef *hi2c, uint32_t ITFlags) +{ + /* Reset handle parameters */ + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + hi2c->PreviousState = I2C_STATE_NONE; + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + hi2c->XferISR = NULL; + + /* Store Last receive data if any */ + if (I2C_CHECK_FLAG(ITFlags, I2C_FLAG_RXNE) != RESET) + { + /* Read data from RXDR */ + *hi2c->pBuffPtr = (uint8_t)hi2c->Instance->RXDR; + + /* Increment Buffer pointer */ + hi2c->pBuffPtr++; + + if ((hi2c->XferSize > 0U)) + { + hi2c->XferSize--; + hi2c->XferCount--; + + /* Set ErrorCode corresponding to a Non-Acknowledge */ + hi2c->ErrorCode |= HAL_I2C_ERROR_AF; + } + } + + /* Disable all Interrupts*/ + I2C_Disable_IRQ(hi2c, I2C_XFER_LISTEN_IT | I2C_XFER_RX_IT | I2C_XFER_TX_IT); + + /* Clear NACK Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF); + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Call the Listen Complete callback, to inform upper layer of the end of Listen usecase */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->ListenCpltCallback(hi2c); +#else + HAL_I2C_ListenCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ +} + +/** + * @brief I2C interrupts error process. + * @param hi2c I2C handle. + * @param ErrorCode Error code to handle. + * @retval None + */ +static void I2C_ITError(I2C_HandleTypeDef *hi2c, uint32_t ErrorCode) +{ + HAL_I2C_StateTypeDef tmpstate = hi2c->State; + + uint32_t tmppreviousstate; + + /* Reset handle parameters */ + hi2c->Mode = HAL_I2C_MODE_NONE; + hi2c->XferOptions = I2C_NO_OPTION_FRAME; + hi2c->XferCount = 0U; + + /* Set new error code */ + hi2c->ErrorCode |= ErrorCode; + + /* Disable Interrupts */ + if ((tmpstate == HAL_I2C_STATE_LISTEN) || + (tmpstate == HAL_I2C_STATE_BUSY_TX_LISTEN) || + (tmpstate == HAL_I2C_STATE_BUSY_RX_LISTEN)) + { + /* Disable all interrupts, except interrupts related to LISTEN state */ + I2C_Disable_IRQ(hi2c, I2C_XFER_RX_IT | I2C_XFER_TX_IT); + + /* keep HAL_I2C_STATE_LISTEN if set */ + hi2c->State = HAL_I2C_STATE_LISTEN; + hi2c->XferISR = I2C_Slave_ISR_IT; + } + else + { + /* Disable all interrupts */ + I2C_Disable_IRQ(hi2c, I2C_XFER_LISTEN_IT | I2C_XFER_RX_IT | I2C_XFER_TX_IT); + + /* Flush TX register */ + I2C_Flush_TXDR(hi2c); + + /* If state is an abort treatment on going, don't change state */ + /* This change will be do later */ + if (hi2c->State != HAL_I2C_STATE_ABORT) + { + /* Set HAL_I2C_STATE_READY */ + hi2c->State = HAL_I2C_STATE_READY; + + /* Check if a STOPF is detected */ + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_STOPF) == SET) + { + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_AF) == SET) + { + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF); + hi2c->ErrorCode |= HAL_I2C_ERROR_AF; + } + + /* Clear STOP Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF); + } + + } + hi2c->XferISR = NULL; + } + + /* Abort DMA TX transfer if any */ + tmppreviousstate = hi2c->PreviousState; + + if ((hi2c->hdmatx != NULL) && ((tmppreviousstate == I2C_STATE_MASTER_BUSY_TX) || \ + (tmppreviousstate == I2C_STATE_SLAVE_BUSY_TX))) + { + if ((hi2c->Instance->CR1 & I2C_CR1_TXDMAEN) == I2C_CR1_TXDMAEN) + { + hi2c->Instance->CR1 &= ~I2C_CR1_TXDMAEN; + } + + if (HAL_DMA_GetState(hi2c->hdmatx) != HAL_DMA_STATE_READY) + { + /* Set the I2C DMA Abort callback : + will lead to call HAL_I2C_ErrorCallback() at end of DMA abort procedure */ + hi2c->hdmatx->XferAbortCallback = I2C_DMAAbort; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Abort DMA TX */ + if (HAL_DMA_Abort_IT(hi2c->hdmatx) != HAL_OK) + { + /* Call Directly XferAbortCallback function in case of error */ + hi2c->hdmatx->XferAbortCallback(hi2c->hdmatx); + } + } + else + { + I2C_TreatErrorCallback(hi2c); + } + } + /* Abort DMA RX transfer if any */ + else if ((hi2c->hdmarx != NULL) && ((tmppreviousstate == I2C_STATE_MASTER_BUSY_RX) || \ + (tmppreviousstate == I2C_STATE_SLAVE_BUSY_RX))) + { + if ((hi2c->Instance->CR1 & I2C_CR1_RXDMAEN) == I2C_CR1_RXDMAEN) + { + hi2c->Instance->CR1 &= ~I2C_CR1_RXDMAEN; + } + + if (HAL_DMA_GetState(hi2c->hdmarx) != HAL_DMA_STATE_READY) + { + /* Set the I2C DMA Abort callback : + will lead to call HAL_I2C_ErrorCallback() at end of DMA abort procedure */ + hi2c->hdmarx->XferAbortCallback = I2C_DMAAbort; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Abort DMA RX */ + if (HAL_DMA_Abort_IT(hi2c->hdmarx) != HAL_OK) + { + /* Call Directly hi2c->hdmarx->XferAbortCallback function in case of error */ + hi2c->hdmarx->XferAbortCallback(hi2c->hdmarx); + } + } + else + { + I2C_TreatErrorCallback(hi2c); + } + } + else + { + I2C_TreatErrorCallback(hi2c); + } +} + +/** + * @brief I2C Error callback treatment. + * @param hi2c I2C handle. + * @retval None + */ +static void I2C_TreatErrorCallback(I2C_HandleTypeDef *hi2c) +{ + if (hi2c->State == HAL_I2C_STATE_ABORT) + { + hi2c->State = HAL_I2C_STATE_READY; + hi2c->PreviousState = I2C_STATE_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Call the corresponding callback to inform upper layer of End of Transfer */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->AbortCpltCallback(hi2c); +#else + HAL_I2C_AbortCpltCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } + else + { + hi2c->PreviousState = I2C_STATE_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + /* Call the corresponding callback to inform upper layer of End of Transfer */ +#if (USE_HAL_I2C_REGISTER_CALLBACKS == 1) + hi2c->ErrorCallback(hi2c); +#else + HAL_I2C_ErrorCallback(hi2c); +#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */ + } +} + +/** + * @brief I2C Tx data register flush process. + * @param hi2c I2C handle. + * @retval None + */ +static void I2C_Flush_TXDR(I2C_HandleTypeDef *hi2c) +{ + /* If a pending TXIS flag is set */ + /* Write a dummy data in TXDR to clear it */ + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_TXIS) != RESET) + { + hi2c->Instance->TXDR = 0x00U; + } + + /* Flush TX register if not empty */ + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_TXE) == RESET) + { + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_TXE); + } +} + +/** + * @brief DMA I2C master transmit process complete callback. + * @param hdma DMA handle + * @retval None + */ +static void I2C_DMAMasterTransmitCplt(DMA_HandleTypeDef *hdma) +{ + /* Derogation MISRAC2012-Rule-11.5 */ + I2C_HandleTypeDef *hi2c = (I2C_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); + + /* Disable DMA Request */ + hi2c->Instance->CR1 &= ~I2C_CR1_TXDMAEN; + + /* If last transfer, enable STOP interrupt */ + if (hi2c->XferCount == 0U) + { + /* Enable STOP interrupt */ + I2C_Enable_IRQ(hi2c, I2C_XFER_CPLT_IT); + } + /* else prepare a new DMA transfer and enable TCReload interrupt */ + else + { + /* Update Buffer pointer */ + hi2c->pBuffPtr += hi2c->XferSize; + + /* Set the XferSize to transfer */ + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + } + else + { + hi2c->XferSize = hi2c->XferCount; + } + + /* Enable the DMA channel */ + if (HAL_DMA_Start_IT(hi2c->hdmatx, (uint32_t)hi2c->pBuffPtr, (uint32_t)&hi2c->Instance->TXDR, + hi2c->XferSize) != HAL_OK) + { + /* Call the corresponding callback to inform upper layer of End of Transfer */ + I2C_ITError(hi2c, HAL_I2C_ERROR_DMA); + } + else + { + /* Enable TC interrupts */ + I2C_Enable_IRQ(hi2c, I2C_XFER_RELOAD_IT); + } + } +} + + +/** + * @brief DMA I2C slave transmit process complete callback. + * @param hdma DMA handle + * @retval None + */ +static void I2C_DMASlaveTransmitCplt(DMA_HandleTypeDef *hdma) +{ + /* Derogation MISRAC2012-Rule-11.5 */ + I2C_HandleTypeDef *hi2c = (I2C_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); + uint32_t tmpoptions = hi2c->XferOptions; + + if ((tmpoptions == I2C_NEXT_FRAME) || (tmpoptions == I2C_FIRST_FRAME)) + { + /* Disable DMA Request */ + hi2c->Instance->CR1 &= ~I2C_CR1_TXDMAEN; + + /* Last Byte is Transmitted */ + /* Call I2C Slave Sequential complete process */ + I2C_ITSlaveSeqCplt(hi2c); + } + else + { + /* No specific action, Master fully manage the generation of STOP condition */ + /* Mean that this generation can arrive at any time, at the end or during DMA process */ + /* So STOP condition should be manage through Interrupt treatment */ + } +} + + +/** + * @brief DMA I2C master receive process complete callback. + * @param hdma DMA handle + * @retval None + */ +static void I2C_DMAMasterReceiveCplt(DMA_HandleTypeDef *hdma) +{ + /* Derogation MISRAC2012-Rule-11.5 */ + I2C_HandleTypeDef *hi2c = (I2C_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); + + /* Disable DMA Request */ + hi2c->Instance->CR1 &= ~I2C_CR1_RXDMAEN; + + /* If last transfer, enable STOP interrupt */ + if (hi2c->XferCount == 0U) + { + /* Enable STOP interrupt */ + I2C_Enable_IRQ(hi2c, I2C_XFER_CPLT_IT); + } + /* else prepare a new DMA transfer and enable TCReload interrupt */ + else + { + /* Update Buffer pointer */ + hi2c->pBuffPtr += hi2c->XferSize; + + /* Set the XferSize to transfer */ + if (hi2c->XferCount > MAX_NBYTE_SIZE) + { + hi2c->XferSize = MAX_NBYTE_SIZE; + } + else + { + hi2c->XferSize = hi2c->XferCount; + } + + /* Enable the DMA channel */ + if (HAL_DMA_Start_IT(hi2c->hdmarx, (uint32_t)&hi2c->Instance->RXDR, (uint32_t)hi2c->pBuffPtr, + hi2c->XferSize) != HAL_OK) + { + /* Call the corresponding callback to inform upper layer of End of Transfer */ + I2C_ITError(hi2c, HAL_I2C_ERROR_DMA); + } + else + { + /* Enable TC interrupts */ + I2C_Enable_IRQ(hi2c, I2C_XFER_RELOAD_IT); + } + } +} + + +/** + * @brief DMA I2C slave receive process complete callback. + * @param hdma DMA handle + * @retval None + */ +static void I2C_DMASlaveReceiveCplt(DMA_HandleTypeDef *hdma) +{ + /* Derogation MISRAC2012-Rule-11.5 */ + I2C_HandleTypeDef *hi2c = (I2C_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); + uint32_t tmpoptions = hi2c->XferOptions; + + if ((I2C_GET_DMA_REMAIN_DATA(hi2c->hdmarx) == 0U) && \ + (tmpoptions != I2C_NO_OPTION_FRAME)) + { + /* Disable DMA Request */ + hi2c->Instance->CR1 &= ~I2C_CR1_RXDMAEN; + + /* Call I2C Slave Sequential complete process */ + I2C_ITSlaveSeqCplt(hi2c); + } + else + { + /* No specific action, Master fully manage the generation of STOP condition */ + /* Mean that this generation can arrive at any time, at the end or during DMA process */ + /* So STOP condition should be manage through Interrupt treatment */ + } +} + + +/** + * @brief DMA I2C communication error callback. + * @param hdma DMA handle + * @retval None + */ +static void I2C_DMAError(DMA_HandleTypeDef *hdma) +{ + /* Derogation MISRAC2012-Rule-11.5 */ + I2C_HandleTypeDef *hi2c = (I2C_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); + + /* Disable Acknowledge */ + hi2c->Instance->CR2 |= I2C_CR2_NACK; + + /* Call the corresponding callback to inform upper layer of End of Transfer */ + I2C_ITError(hi2c, HAL_I2C_ERROR_DMA); +} + + +/** + * @brief DMA I2C communication abort callback + * (To be called at end of DMA Abort procedure). + * @param hdma DMA handle. + * @retval None + */ +static void I2C_DMAAbort(DMA_HandleTypeDef *hdma) +{ + /* Derogation MISRAC2012-Rule-11.5 */ + I2C_HandleTypeDef *hi2c = (I2C_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); + + /* Reset AbortCpltCallback */ + if (hi2c->hdmatx != NULL) + { + hi2c->hdmatx->XferAbortCallback = NULL; + } + if (hi2c->hdmarx != NULL) + { + hi2c->hdmarx->XferAbortCallback = NULL; + } + + I2C_TreatErrorCallback(hi2c); +} + + +/** + * @brief This function handles I2C Communication Timeout. It waits + * until a flag is no longer in the specified status. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param Flag Specifies the I2C flag to check. + * @param Status The actual Flag status (SET or RESET). + * @param Timeout Timeout duration + * @param Tickstart Tick start value + * @retval HAL status + */ +static HAL_StatusTypeDef I2C_WaitOnFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Flag, FlagStatus Status, + uint32_t Timeout, uint32_t Tickstart) +{ + while (__HAL_I2C_GET_FLAG(hi2c, Flag) == Status) + { + /* Check for the Timeout */ + if (Timeout != HAL_MAX_DELAY) + { + if (((HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U)) + { + if ((__HAL_I2C_GET_FLAG(hi2c, Flag) == Status)) + { + hi2c->ErrorCode |= HAL_I2C_ERROR_TIMEOUT; + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + return HAL_ERROR; + } + } + } + } + return HAL_OK; +} + +/** + * @brief This function handles I2C Communication Timeout for specific usage of TXIS flag. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param Timeout Timeout duration + * @param Tickstart Tick start value + * @retval HAL status + */ +static HAL_StatusTypeDef I2C_WaitOnTXISFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Timeout, + uint32_t Tickstart) +{ + while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_TXIS) == RESET) + { + /* Check if an error is detected */ + if (I2C_IsErrorOccurred(hi2c, Timeout, Tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Check for the Timeout */ + if (Timeout != HAL_MAX_DELAY) + { + if (((HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U)) + { + if ((__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_TXIS) == RESET)) + { + hi2c->ErrorCode |= HAL_I2C_ERROR_TIMEOUT; + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + } + } + } + return HAL_OK; +} + +/** + * @brief This function handles I2C Communication Timeout for specific usage of STOP flag. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param Timeout Timeout duration + * @param Tickstart Tick start value + * @retval HAL status + */ +static HAL_StatusTypeDef I2C_WaitOnSTOPFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Timeout, + uint32_t Tickstart) +{ + while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_STOPF) == RESET) + { + /* Check if an error is detected */ + if (I2C_IsErrorOccurred(hi2c, Timeout, Tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Check for the Timeout */ + if (((HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U)) + { + if ((__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_STOPF) == RESET)) + { + hi2c->ErrorCode |= HAL_I2C_ERROR_TIMEOUT; + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + } + } + return HAL_OK; +} + +/** + * @brief This function handles I2C Communication Timeout for specific usage of RXNE flag. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param Timeout Timeout duration + * @param Tickstart Tick start value + * @retval HAL status + */ +static HAL_StatusTypeDef I2C_WaitOnRXNEFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Timeout, + uint32_t Tickstart) +{ + while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_RXNE) == RESET) + { + /* Check if an error is detected */ + if (I2C_IsErrorOccurred(hi2c, Timeout, Tickstart) != HAL_OK) + { + return HAL_ERROR; + } + + /* Check if a STOPF is detected */ + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_STOPF) == SET) + { + /* Check if an RXNE is pending */ + /* Store Last receive data if any */ + if ((__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_RXNE) == SET) && (hi2c->XferSize > 0U)) + { + /* Return HAL_OK */ + /* The Reading of data from RXDR will be done in caller function */ + return HAL_OK; + } + else + { + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_AF) == SET) + { + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF); + hi2c->ErrorCode = HAL_I2C_ERROR_AF; + } + else + { + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + } + + /* Clear STOP Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF); + + /* Clear Configuration Register 2 */ + I2C_RESET_CR2(hi2c); + + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + } + + /* Check for the Timeout */ + if (((HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U)) + { + if ((__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_RXNE) == RESET)) + { + hi2c->ErrorCode |= HAL_I2C_ERROR_TIMEOUT; + hi2c->State = HAL_I2C_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_ERROR; + } + } + } + return HAL_OK; +} + +/** + * @brief This function handles errors detection during an I2C Communication. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param Timeout Timeout duration + * @param Tickstart Tick start value + * @retval HAL status + */ +static HAL_StatusTypeDef I2C_IsErrorOccurred(I2C_HandleTypeDef *hi2c, uint32_t Timeout, uint32_t Tickstart) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t itflag = hi2c->Instance->ISR; + uint32_t error_code = 0; + uint32_t tickstart = Tickstart; + uint32_t tmp1; + HAL_I2C_ModeTypeDef tmp2; + + if (HAL_IS_BIT_SET(itflag, I2C_FLAG_AF)) + { + /* Clear NACKF Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF); + + /* Wait until STOP Flag is set or timeout occurred */ + /* AutoEnd should be initiate after AF */ + while ((__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_STOPF) == RESET) && (status == HAL_OK)) + { + /* Check for the Timeout */ + if (Timeout != HAL_MAX_DELAY) + { + if (((HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U)) + { + tmp1 = (uint32_t)(hi2c->Instance->CR2 & I2C_CR2_STOP); + tmp2 = hi2c->Mode; + + /* In case of I2C still busy, try to regenerate a STOP manually */ + if ((__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) != RESET) && \ + (tmp1 != I2C_CR2_STOP) && \ + (tmp2 != HAL_I2C_MODE_SLAVE)) + { + /* Generate Stop */ + hi2c->Instance->CR2 |= I2C_CR2_STOP; + + /* Update Tick with new reference */ + tickstart = HAL_GetTick(); + } + + while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_STOPF) == RESET) + { + /* Check for the Timeout */ + if ((HAL_GetTick() - tickstart) > I2C_TIMEOUT_STOPF) + { + error_code |= HAL_I2C_ERROR_TIMEOUT; + + status = HAL_ERROR; + + break; + } + } + } + } + } + + /* In case STOP Flag is detected, clear it */ + if (status == HAL_OK) + { + /* Clear STOP Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF); + } + + error_code |= HAL_I2C_ERROR_AF; + + status = HAL_ERROR; + } + + /* Refresh Content of Status register */ + itflag = hi2c->Instance->ISR; + + /* Then verify if an additional errors occurs */ + /* Check if a Bus error occurred */ + if (HAL_IS_BIT_SET(itflag, I2C_FLAG_BERR)) + { + error_code |= HAL_I2C_ERROR_BERR; + + /* Clear BERR flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_BERR); + + status = HAL_ERROR; + } + + /* Check if an Over-Run/Under-Run error occurred */ + if (HAL_IS_BIT_SET(itflag, I2C_FLAG_OVR)) + { + error_code |= HAL_I2C_ERROR_OVR; + + /* Clear OVR flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_OVR); + + status = HAL_ERROR; + } + + /* Check if an Arbitration Loss error occurred */ + if (HAL_IS_BIT_SET(itflag, I2C_FLAG_ARLO)) + { + error_code |= HAL_I2C_ERROR_ARLO; + + /* Clear ARLO flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_ARLO); + + status = HAL_ERROR; + } + + if (status != HAL_OK) + { + /* Flush TX register */ + I2C_Flush_TXDR(hi2c); + + /* Clear Configuration Register 2 */ + I2C_RESET_CR2(hi2c); + + hi2c->ErrorCode |= error_code; + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + } + + return status; +} + +/** + * @brief Handles I2Cx communication when starting transfer or during transfer (TC or TCR flag are set). + * @param hi2c I2C handle. + * @param DevAddress Specifies the slave address to be programmed. + * @param Size Specifies the number of bytes to be programmed. + * This parameter must be a value between 0 and 255. + * @param Mode New state of the I2C START condition generation. + * This parameter can be one of the following values: + * @arg @ref I2C_RELOAD_MODE Enable Reload mode . + * @arg @ref I2C_AUTOEND_MODE Enable Automatic end mode. + * @arg @ref I2C_SOFTEND_MODE Enable Software end mode. + * @param Request New state of the I2C START condition generation. + * This parameter can be one of the following values: + * @arg @ref I2C_NO_STARTSTOP Don't Generate stop and start condition. + * @arg @ref I2C_GENERATE_STOP Generate stop condition (Size should be set to 0). + * @arg @ref I2C_GENERATE_START_READ Generate Restart for read request. + * @arg @ref I2C_GENERATE_START_WRITE Generate Restart for write request. + * @retval None + */ +static void I2C_TransferConfig(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t Size, uint32_t Mode, + uint32_t Request) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_INSTANCE(hi2c->Instance)); + assert_param(IS_TRANSFER_MODE(Mode)); + assert_param(IS_TRANSFER_REQUEST(Request)); + + /* Declaration of tmp to prevent undefined behavior of volatile usage */ + uint32_t tmp = ((uint32_t)(((uint32_t)DevAddress & I2C_CR2_SADD) | \ + (((uint32_t)Size << I2C_CR2_NBYTES_Pos) & I2C_CR2_NBYTES) | \ + (uint32_t)Mode | (uint32_t)Request) & (~0x80000000U)); + + /* update CR2 register */ + MODIFY_REG(hi2c->Instance->CR2, \ + ((I2C_CR2_SADD | I2C_CR2_NBYTES | I2C_CR2_RELOAD | I2C_CR2_AUTOEND | \ + (I2C_CR2_RD_WRN & (uint32_t)(Request >> (31U - I2C_CR2_RD_WRN_Pos))) | \ + I2C_CR2_START | I2C_CR2_STOP)), tmp); +} + +/** + * @brief Manage the enabling of Interrupts. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param InterruptRequest Value of @ref I2C_Interrupt_configuration_definition. + * @retval None + */ +static void I2C_Enable_IRQ(I2C_HandleTypeDef *hi2c, uint16_t InterruptRequest) +{ + uint32_t tmpisr = 0U; + + if ((hi2c->XferISR != I2C_Master_ISR_DMA) && \ + (hi2c->XferISR != I2C_Slave_ISR_DMA) && \ + (hi2c->XferISR != I2C_Mem_ISR_DMA)) + { + if ((InterruptRequest & I2C_XFER_LISTEN_IT) == I2C_XFER_LISTEN_IT) + { + /* Enable ERR, STOP, NACK and ADDR interrupts */ + tmpisr |= I2C_IT_ADDRI | I2C_IT_STOPI | I2C_IT_NACKI | I2C_IT_ERRI; + } + + if ((InterruptRequest & I2C_XFER_TX_IT) == I2C_XFER_TX_IT) + { + /* Enable ERR, TC, STOP, NACK and RXI interrupts */ + tmpisr |= I2C_IT_ERRI | I2C_IT_TCI | I2C_IT_STOPI | I2C_IT_NACKI | I2C_IT_TXI; + } + + if ((InterruptRequest & I2C_XFER_RX_IT) == I2C_XFER_RX_IT) + { + /* Enable ERR, TC, STOP, NACK and TXI interrupts */ + tmpisr |= I2C_IT_ERRI | I2C_IT_TCI | I2C_IT_STOPI | I2C_IT_NACKI | I2C_IT_RXI; + } + + if (InterruptRequest == I2C_XFER_ERROR_IT) + { + /* Enable ERR and NACK interrupts */ + tmpisr |= I2C_IT_ERRI | I2C_IT_NACKI; + } + + if (InterruptRequest == I2C_XFER_CPLT_IT) + { + /* Enable STOP interrupts */ + tmpisr |= I2C_IT_STOPI; + } + } + + else + { + if ((InterruptRequest & I2C_XFER_LISTEN_IT) == I2C_XFER_LISTEN_IT) + { + /* Enable ERR, STOP, NACK and ADDR interrupts */ + tmpisr |= I2C_IT_ADDRI | I2C_IT_STOPI | I2C_IT_NACKI | I2C_IT_ERRI; + } + + if ((InterruptRequest & I2C_XFER_TX_IT) == I2C_XFER_TX_IT) + { + /* Enable ERR, TC, STOP, NACK and RXI interrupts */ + tmpisr |= I2C_IT_ERRI | I2C_IT_TCI | I2C_IT_STOPI | I2C_IT_NACKI | I2C_IT_TXI; + } + + if ((InterruptRequest & I2C_XFER_RX_IT) == I2C_XFER_RX_IT) + { + /* Enable ERR, TC, STOP, NACK and TXI interrupts */ + tmpisr |= I2C_IT_ERRI | I2C_IT_TCI | I2C_IT_STOPI | I2C_IT_NACKI | I2C_IT_RXI; + } + + if (InterruptRequest == I2C_XFER_ERROR_IT) + { + /* Enable ERR and NACK interrupts */ + tmpisr |= I2C_IT_ERRI | I2C_IT_NACKI; + } + + if (InterruptRequest == I2C_XFER_CPLT_IT) + { + /* Enable STOP interrupts */ + tmpisr |= (I2C_IT_STOPI | I2C_IT_TCI); + } + + if ((hi2c->XferISR != I2C_Mem_ISR_DMA) && (InterruptRequest == I2C_XFER_RELOAD_IT)) + { + /* Enable TC interrupts */ + tmpisr |= I2C_IT_TCI; + } + } + + /* Enable interrupts only at the end */ + /* to avoid the risk of I2C interrupt handle execution before */ + /* all interrupts requested done */ + __HAL_I2C_ENABLE_IT(hi2c, tmpisr); +} + +/** + * @brief Manage the disabling of Interrupts. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2C. + * @param InterruptRequest Value of @ref I2C_Interrupt_configuration_definition. + * @retval None + */ +static void I2C_Disable_IRQ(I2C_HandleTypeDef *hi2c, uint16_t InterruptRequest) +{ + uint32_t tmpisr = 0U; + + if ((InterruptRequest & I2C_XFER_TX_IT) == I2C_XFER_TX_IT) + { + /* Disable TC and TXI interrupts */ + tmpisr |= I2C_IT_TCI | I2C_IT_TXI; + + if (((uint32_t)hi2c->State & (uint32_t)HAL_I2C_STATE_LISTEN) != (uint32_t)HAL_I2C_STATE_LISTEN) + { + /* Disable NACK and STOP interrupts */ + tmpisr |= I2C_IT_STOPI | I2C_IT_NACKI | I2C_IT_ERRI; + } + } + + if ((InterruptRequest & I2C_XFER_RX_IT) == I2C_XFER_RX_IT) + { + /* Disable TC and RXI interrupts */ + tmpisr |= I2C_IT_TCI | I2C_IT_RXI; + + if (((uint32_t)hi2c->State & (uint32_t)HAL_I2C_STATE_LISTEN) != (uint32_t)HAL_I2C_STATE_LISTEN) + { + /* Disable NACK and STOP interrupts */ + tmpisr |= I2C_IT_STOPI | I2C_IT_NACKI | I2C_IT_ERRI; + } + } + + if ((InterruptRequest & I2C_XFER_LISTEN_IT) == I2C_XFER_LISTEN_IT) + { + /* Disable ADDR, NACK and STOP interrupts */ + tmpisr |= I2C_IT_ADDRI | I2C_IT_STOPI | I2C_IT_NACKI | I2C_IT_ERRI; + } + + if (InterruptRequest == I2C_XFER_ERROR_IT) + { + /* Enable ERR and NACK interrupts */ + tmpisr |= I2C_IT_ERRI | I2C_IT_NACKI; + } + + if (InterruptRequest == I2C_XFER_CPLT_IT) + { + /* Enable STOP interrupts */ + tmpisr |= I2C_IT_STOPI; + } + + if (InterruptRequest == I2C_XFER_RELOAD_IT) + { + /* Enable TC interrupts */ + tmpisr |= I2C_IT_TCI; + } + + /* Disable interrupts only at the end */ + /* to avoid a breaking situation like at "t" time */ + /* all disable interrupts request are not done */ + __HAL_I2C_DISABLE_IT(hi2c, tmpisr); +} + +/** + * @brief Convert I2Cx OTHER_xxx XferOptions to functional XferOptions. + * @param hi2c I2C handle. + * @retval None + */ +static void I2C_ConvertOtherXferOptions(I2C_HandleTypeDef *hi2c) +{ + /* if user set XferOptions to I2C_OTHER_FRAME */ + /* it request implicitly to generate a restart condition */ + /* set XferOptions to I2C_FIRST_FRAME */ + if (hi2c->XferOptions == I2C_OTHER_FRAME) + { + hi2c->XferOptions = I2C_FIRST_FRAME; + } + /* else if user set XferOptions to I2C_OTHER_AND_LAST_FRAME */ + /* it request implicitly to generate a restart condition */ + /* then generate a stop condition at the end of transfer */ + /* set XferOptions to I2C_FIRST_AND_LAST_FRAME */ + else if (hi2c->XferOptions == I2C_OTHER_AND_LAST_FRAME) + { + hi2c->XferOptions = I2C_FIRST_AND_LAST_FRAME; + } + else + { + /* Nothing to do */ + } +} + +/** + * @} + */ + +#endif /* HAL_I2C_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ diff --git a/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.c b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.c new file mode 100644 index 0000000..a7bdf1c --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.c @@ -0,0 +1,362 @@ +/** + ****************************************************************************** + * @file stm32f0xx_hal_i2c_ex.c + * @author MCD Application Team + * @brief I2C Extended HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of I2C Extended peripheral: + * + Filter Mode Functions + * + WakeUp Mode Functions + * + FastModePlus 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 + ============================================================================== + ##### I2C peripheral Extended features ##### + ============================================================================== + + [..] Comparing to other previous devices, the I2C interface for STM32F0xx + devices contains the following additional features + + (+) Possibility to disable or enable Analog Noise Filter + (+) Use of a configured Digital Noise Filter + (+) Disable or enable wakeup from Stop mode(s) + (+) Disable or enable Fast Mode Plus + + ##### How to use this driver ##### + ============================================================================== + [..] This driver provides functions to configure Noise Filter and Wake Up Feature + (#) Configure I2C Analog noise filter using the function HAL_I2CEx_ConfigAnalogFilter() + (#) Configure I2C Digital noise filter using the function HAL_I2CEx_ConfigDigitalFilter() + (#) Configure the enable or disable of I2C Wake Up Mode using the functions : + (++) HAL_I2CEx_EnableWakeUp() + (++) HAL_I2CEx_DisableWakeUp() + (#) Configure the enable or disable of fast mode plus driving capability using the functions : + (++) HAL_I2CEx_EnableFastModePlus() + (++) HAL_I2CEx_DisableFastModePlus() + @endverbatim + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f0xx_hal.h" + +/** @addtogroup STM32F0xx_HAL_Driver + * @{ + */ + +/** @defgroup I2CEx I2CEx + * @brief I2C Extended HAL module driver + * @{ + */ + +#ifdef HAL_I2C_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** @defgroup I2CEx_Exported_Functions I2C Extended Exported Functions + * @{ + */ + +/** @defgroup I2CEx_Exported_Functions_Group1 Filter Mode Functions + * @brief Filter Mode Functions + * +@verbatim + =============================================================================== + ##### Filter Mode Functions ##### + =============================================================================== + [..] This section provides functions allowing to: + (+) Configure Noise Filters + +@endverbatim + * @{ + */ + +/** + * @brief Configure I2C Analog noise filter. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2Cx peripheral. + * @param AnalogFilter New state of the Analog filter. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2CEx_ConfigAnalogFilter(I2C_HandleTypeDef *hi2c, uint32_t AnalogFilter) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_INSTANCE(hi2c->Instance)); + assert_param(IS_I2C_ANALOG_FILTER(AnalogFilter)); + + if (hi2c->State == HAL_I2C_STATE_READY) + { + /* Process Locked */ + __HAL_LOCK(hi2c); + + hi2c->State = HAL_I2C_STATE_BUSY; + + /* Disable the selected I2C peripheral */ + __HAL_I2C_DISABLE(hi2c); + + /* Reset I2Cx ANOFF bit */ + hi2c->Instance->CR1 &= ~(I2C_CR1_ANFOFF); + + /* Set analog filter bit*/ + hi2c->Instance->CR1 |= AnalogFilter; + + __HAL_I2C_ENABLE(hi2c); + + hi2c->State = HAL_I2C_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Configure I2C Digital noise filter. + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2Cx peripheral. + * @param DigitalFilter Coefficient of digital noise filter between Min_Data=0x00 and Max_Data=0x0F. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2CEx_ConfigDigitalFilter(I2C_HandleTypeDef *hi2c, uint32_t DigitalFilter) +{ + uint32_t tmpreg; + + /* Check the parameters */ + assert_param(IS_I2C_ALL_INSTANCE(hi2c->Instance)); + assert_param(IS_I2C_DIGITAL_FILTER(DigitalFilter)); + + if (hi2c->State == HAL_I2C_STATE_READY) + { + /* Process Locked */ + __HAL_LOCK(hi2c); + + hi2c->State = HAL_I2C_STATE_BUSY; + + /* Disable the selected I2C peripheral */ + __HAL_I2C_DISABLE(hi2c); + + /* Get the old register value */ + tmpreg = hi2c->Instance->CR1; + + /* Reset I2Cx DNF bits [11:8] */ + tmpreg &= ~(I2C_CR1_DNF); + + /* Set I2Cx DNF coefficient */ + tmpreg |= DigitalFilter << 8U; + + /* Store the new register value */ + hi2c->Instance->CR1 = tmpreg; + + __HAL_I2C_ENABLE(hi2c); + + hi2c->State = HAL_I2C_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} +/** + * @} + */ +#if defined(I2C_CR1_WUPEN) + +/** @defgroup I2CEx_Exported_Functions_Group2 WakeUp Mode Functions + * @brief WakeUp Mode Functions + * +@verbatim + =============================================================================== + ##### WakeUp Mode Functions ##### + =============================================================================== + [..] This section provides functions allowing to: + (+) Configure Wake Up Feature + +@endverbatim + * @{ + */ + +/** + * @brief Enable I2C wakeup from Stop mode(s). + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2Cx peripheral. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2CEx_EnableWakeUp(I2C_HandleTypeDef *hi2c) +{ + /* Check the parameters */ + assert_param(IS_I2C_WAKEUP_FROMSTOP_INSTANCE(hi2c->Instance)); + + if (hi2c->State == HAL_I2C_STATE_READY) + { + /* Process Locked */ + __HAL_LOCK(hi2c); + + hi2c->State = HAL_I2C_STATE_BUSY; + + /* Disable the selected I2C peripheral */ + __HAL_I2C_DISABLE(hi2c); + + /* Enable wakeup from stop mode */ + hi2c->Instance->CR1 |= I2C_CR1_WUPEN; + + __HAL_I2C_ENABLE(hi2c); + + hi2c->State = HAL_I2C_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Disable I2C wakeup from Stop mode(s). + * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains + * the configuration information for the specified I2Cx peripheral. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_I2CEx_DisableWakeUp(I2C_HandleTypeDef *hi2c) +{ + /* Check the parameters */ + assert_param(IS_I2C_WAKEUP_FROMSTOP_INSTANCE(hi2c->Instance)); + + if (hi2c->State == HAL_I2C_STATE_READY) + { + /* Process Locked */ + __HAL_LOCK(hi2c); + + hi2c->State = HAL_I2C_STATE_BUSY; + + /* Disable the selected I2C peripheral */ + __HAL_I2C_DISABLE(hi2c); + + /* Enable wakeup from stop mode */ + hi2c->Instance->CR1 &= ~(I2C_CR1_WUPEN); + + __HAL_I2C_ENABLE(hi2c); + + hi2c->State = HAL_I2C_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} +/** + * @} + */ +#endif /* I2C_CR1_WUPEN */ + +/** @defgroup I2CEx_Exported_Functions_Group3 Fast Mode Plus Functions + * @brief Fast Mode Plus Functions + * +@verbatim + =============================================================================== + ##### Fast Mode Plus Functions ##### + =============================================================================== + [..] This section provides functions allowing to: + (+) Configure Fast Mode Plus + +@endverbatim + * @{ + */ + +/** + * @brief Enable the I2C fast mode plus driving capability. + * @param ConfigFastModePlus Selects the pin. + * This parameter can be one of the @ref I2CEx_FastModePlus values + * @note For I2C1, fast mode plus driving capability can be enabled on all selected + * I2C1 pins using I2C_FASTMODEPLUS_I2C1 parameter or independently + * on each one of the following pins PB6, PB7, PB8 and PB9. + * @note For remaining I2C1 pins (PA14, PA15...) fast mode plus driving capability + * can be enabled only by using I2C_FASTMODEPLUS_I2C1 parameter. + * @note For all I2C2 pins fast mode plus driving capability can be enabled + * only by using I2C_FASTMODEPLUS_I2C2 parameter. + * @retval None + */ +void HAL_I2CEx_EnableFastModePlus(uint32_t ConfigFastModePlus) +{ + /* Check the parameter */ + assert_param(IS_I2C_FASTMODEPLUS(ConfigFastModePlus)); + + /* Enable SYSCFG clock */ + __HAL_RCC_SYSCFG_CLK_ENABLE(); + + /* Enable fast mode plus driving capability for selected pin */ + SET_BIT(SYSCFG->CFGR1, (uint32_t)ConfigFastModePlus); +} + +/** + * @brief Disable the I2C fast mode plus driving capability. + * @param ConfigFastModePlus Selects the pin. + * This parameter can be one of the @ref I2CEx_FastModePlus values + * @note For I2C1, fast mode plus driving capability can be disabled on all selected + * I2C1 pins using I2C_FASTMODEPLUS_I2C1 parameter or independently + * on each one of the following pins PB6, PB7, PB8 and PB9. + * @note For remaining I2C1 pins (PA14, PA15...) fast mode plus driving capability + * can be disabled only by using I2C_FASTMODEPLUS_I2C1 parameter. + * @note For all I2C2 pins fast mode plus driving capability can be disabled + * only by using I2C_FASTMODEPLUS_I2C2 parameter. + * @retval None + */ +void HAL_I2CEx_DisableFastModePlus(uint32_t ConfigFastModePlus) +{ + /* Check the parameter */ + assert_param(IS_I2C_FASTMODEPLUS(ConfigFastModePlus)); + + /* Enable SYSCFG clock */ + __HAL_RCC_SYSCFG_CLK_ENABLE(); + + /* Disable fast mode plus driving capability for selected pin */ + CLEAR_BIT(SYSCFG->CFGR1, (uint32_t)ConfigFastModePlus); +} +/** + * @} + */ +/** + * @} + */ + +#endif /* HAL_I2C_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ diff --git a/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.c b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.c new file mode 100644 index 0000000..681a93b --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.c @@ -0,0 +1,450 @@ +/** + ****************************************************************************** + * @file stm32f0xx_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/de-initialization function + * + Peripheral Control function + * + ****************************************************************************** + * @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. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f0xx_hal.h" + +/** @addtogroup STM32F0xx_HAL_Driver + * @{ + */ + +/** @defgroup PWR PWR + * @brief PWR HAL module driver + * @{ + */ + +#ifdef HAL_PWR_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* 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) 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 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 when present). + * @note If the HSE divided by 32 is used as the RTC clock, the + * Backup Domain Access should be kept enabled. + * @retval None + */ +void HAL_PWR_EnableBkUpAccess(void) +{ + PWR->CR |= (uint32_t)PWR_CR_DBP; +} + +/** + * @brief Disables access to the backup domain (RTC registers, RTC + * backup data registers when present). + * @note If the HSE divided by 32 is used as the RTC clock, the + * Backup Domain Access should be kept enabled. + * @retval None + */ +void HAL_PWR_DisableBkUpAccess(void) +{ + PWR->CR &= ~((uint32_t)PWR_CR_DBP); +} + +/** + * @} + */ + +/** @defgroup PWR_Exported_Functions_Group2 Peripheral Control functions + * @brief Low Power modes configuration functions + * +@verbatim + + =============================================================================== + ##### Peripheral Control functions ##### + =============================================================================== + + *** WakeUp pin configuration *** + ================================ + [..] + (+) WakeUp pin is used to wakeup the system from Standby mode. This pin is + forced in input pull down configuration and is active on rising edges. + (+) There are two WakeUp pins, and up to eight Wakeup pins on STM32F07x & STM32F09x devices. + (++)WakeUp Pin 1 on PA.00. + (++)WakeUp Pin 2 on PC.13. + (++)WakeUp Pin 3 on PE.06.(STM32F07x/STM32F09x) + (++)WakeUp Pin 4 on PA.02.(STM32F07x/STM32F09x) + (++)WakeUp Pin 5 on PC.05.(STM32F07x/STM32F09x) + (++)WakeUp Pin 6 on PB.05.(STM32F07x/STM32F09x) + (++)WakeUp Pin 7 on PB.15.(STM32F07x/STM32F09x) + (++)WakeUp Pin 8 on PF.02.(STM32F07x/STM32F09x) + + *** Low Power modes configuration *** + ===================================== + [..] + The devices feature 3 low-power modes: + (+) Sleep mode: Cortex-M0 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 (mode not available on STM32F0x8 devices). + + *** Sleep mode *** + ================== + [..] + (+) Entry: + The Sleep mode is entered by using the HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFx) + functions with + (++) PWR_SLEEPENTRY_WFI: enter SLEEP mode with WFI instruction + (++) PWR_SLEEPENTRY_WFE: enter SLEEP mode with WFE instruction + + (+) 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.8V 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. + + (+) Entry: + The Stop mode is entered using the HAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON, PWR_STOPENTRY_WFI ) + function with: + (++) Main regulator ON. + (++) Low Power regulator ON. + (++) PWR_STOPENTRY_WFI: enter STOP mode with WFI instruction + (++) PWR_STOPENTRY_WFE: enter STOP mode with WFE instruction + (+) Exit: + (++) Any EXTI Line (Internal or External) configured in Interrupt/Event mode. + (++) Some specific communication peripherals (CEC, USART, I2C) interrupts, + when programmed in wakeup mode (the peripheral must be + programmed in wakeup mode and the corresponding interrupt vector + must be enabled in the NVIC) + + *** Standby mode *** + ==================== + [..] + The Standby mode allows to achieve the lowest power consumption. It is based + on the Cortex-M0 deep sleep mode, with the voltage regulator disabled. + The 1.8V 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 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), RTC wakeup, + tamper event, time-stamp event, external reset in NRST pin, IWDG reset. + + *** Auto-wakeup (AWU) from low-power mode *** + ============================================= + [..] + The MCU can be woken up from low-power mode by an RTC Alarm event, an RTC + Wakeup event, a tamper event, a time-stamp event, or a comparator event, + without depending on an external interrupt (Auto-wakeup mode). + + (+) RTC auto-wakeup (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_RTC_SetTimeStamp_IT() or HAL_RTC_SetTamper_IT() functions. + + (++) To wake up from the Stop mode with an RTC WakeUp event, it is necessary to + configure the RTC to generate the RTC WakeUp event using the HAL_RTC_SetWakeUpTimer_IT() function. + + (+) Comparator auto-wakeup (AWU) from the Stop mode + + (++) To wake up from the Stop mode with a comparator wakeup event, it is necessary to: + (+++) Configure the EXTI Line associated with the comparator (example EXTI Line 22 for comparator 2) + to be sensitive to to the selected edges (falling, rising or falling + and rising) (Interrupt or Event modes) using the EXTI_Init() function. + (+++) Configure the comparator to generate the event. +@endverbatim + * @{ + */ + +/** + * @brief Enables the WakeUp PINx functionality. + * @param WakeUpPinx Specifies the Power Wake-Up pin to enable. + * This parameter can be value of : + * @ref PWREx_WakeUp_Pins + * @retval None + */ +void HAL_PWR_EnableWakeUpPin(uint32_t WakeUpPinx) +{ + /* Check the parameters */ + assert_param(IS_PWR_WAKEUP_PIN(WakeUpPinx)); + /* Enable the EWUPx pin */ + SET_BIT(PWR->CSR, WakeUpPinx); +} + +/** + * @brief Disables the WakeUp PINx functionality. + * @param WakeUpPinx Specifies the Power Wake-Up pin to disable. + * This parameter can be values of : + * @ref PWREx_WakeUp_Pins + * @retval None + */ +void HAL_PWR_DisableWakeUpPin(uint32_t WakeUpPinx) +{ + /* Check the parameters */ + assert_param(IS_PWR_WAKEUP_PIN(WakeUpPinx)); + /* Disable the EWUPx 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. + * @param Regulator Specifies the regulator state in SLEEP mode. + * On STM32F0 devices, this parameter is a dummy value and it is ignored + * as regulator can't be modified in this mode. Parameter is kept for platform + * compatibility. + * @param SLEEPEntry Specifies if SLEEP mode is entered with WFI or WFE instruction. + * When WFI entry is used, tick interrupt have to be disabled if not desired as + * the interrupt wake up source. + * 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 */ + SCB->SCR &= (uint32_t)~((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 wakeup 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) +{ + uint32_t tmpreg = 0; + + /* Check the parameters */ + assert_param(IS_PWR_REGULATOR(Regulator)); + assert_param(IS_PWR_STOP_ENTRY(STOPEntry)); + + /* Select the regulator state in STOP mode ---------------------------------*/ + tmpreg = PWR->CR; + + /* Clear PDDS and LPDS bits */ + tmpreg &= (uint32_t)~(PWR_CR_PDDS | PWR_CR_LPDS); + + /* Set LPDS bit according to Regulator value */ + tmpreg |= Regulator; + + /* Store the new value */ + PWR->CR = tmpreg; + + /* Set SLEEPDEEP bit of Cortex System Control Register */ + SCB->SCR |= 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 */ + SCB->SCR &= (uint32_t)~((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 alternate function pins if configured for tamper, time-stamp, RTC + * Alarm out, or RTC clock calibration out. + * - WKUP pins if enabled. + * STM32F0x8 devices, the Stop mode is available, but it is + * aningless to distinguish between voltage regulator in Low power + * mode and voltage regulator in Run mode because the regulator + * not used and the core is supplied directly from an external source. + * Consequently, the Standby mode is not available on those devices. + * @retval None + */ +void HAL_PWR_EnterSTANDBYMode(void) +{ + /* Select STANDBY mode */ + PWR->CR |= (uint32_t)PWR_CR_PDDS; + + /* Set SLEEPDEEP bit of Cortex System Control Register */ + SCB->SCR |= 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 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/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.c b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.c new file mode 100644 index 0000000..f0548e3 --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.c @@ -0,0 +1,271 @@ +/** + ****************************************************************************** + * @file stm32f0xx_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 the Power Controller (PWR) peripheral: + * + Extended Initialization and de-initialization functions + * + Extended Peripheral Control 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. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f0xx_hal.h" + +/** @addtogroup STM32F0xx_HAL_Driver + * @{ + */ + +/** @defgroup PWREx PWREx + * @brief PWREx HAL module driver + * @{ + */ + +#ifdef HAL_PWR_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/** @defgroup PWREx_Private_Constants PWREx Private Constants + * @{ + */ +#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 -----------------------------------------------*/ +/* Exported functions ---------------------------------------------------------*/ + +/** @defgroup PWREx_Exported_Functions PWREx Exported Functions + * @{ + */ + +/** @defgroup PWREx_Exported_Functions_Group1 Peripheral Extended Control Functions + * @brief Extended Peripheral Control functions + * +@verbatim + + =============================================================================== + ##### Peripheral extended 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_ConfigPVD(), HAL_PWR_EnablePVD() functions. + (+) The PVD is stopped in Standby mode. + -@- PVD is not available on STM32F030x4/x6/x8 + + *** VDDIO2 Monitor Configuration *** + ==================================== + [..] + (+) VDDIO2 monitor is used to monitor the VDDIO2 power supply by comparing it + to VREFInt Voltage + (+) This monitor is internally connected to the EXTI line31 + and can generate an interrupt if enabled. This is done through + HAL_PWREx_EnableVddio2Monitor() function. + -@- VDDIO2 is available on STM32F07x/09x/04x + +@endverbatim + * @{ + */ + +#if defined (STM32F031x6) || defined (STM32F051x8) || \ + defined (STM32F071xB) || defined (STM32F091xC) || \ + defined (STM32F042x6) || defined (STM32F072xB) +/** + * @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) +{ + PWR->CR |= (uint32_t)PWR_CR_PVDE; +} + +/** + * @brief Disables the Power Voltage Detector(PVD). + * @retval None + */ +void HAL_PWR_DisablePVD(void) +{ + PWR->CR &= ~((uint32_t)PWR_CR_PVDE); +} + +/** + * @brief This function handles the PWR PVD interrupt request. + * @note This API should be called under the PVD_IRQHandler() or PVD_VDDIO2_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 + */ +} + +#endif /* defined (STM32F031x6) || defined (STM32F051x8) || */ + /* defined (STM32F071xB) || defined (STM32F091xC) || */ + /* defined (STM32F042x6) || defined (STM32F072xB) */ + +#if defined (STM32F042x6) || defined (STM32F048xx) || \ + defined (STM32F071xB) || defined (STM32F072xB) || defined (STM32F078xx) || \ + defined (STM32F091xC) || defined (STM32F098xx) +/** + * @brief Enable VDDIO2 monitor: enable Exti 31 and falling edge detection. + * @note If Exti 31 is enable correlty and VDDIO2 voltage goes below Vrefint, + an interrupt is generated Irq line 1. + NVIS has to be enable by user. + * @retval None + */ +void HAL_PWREx_EnableVddio2Monitor(void) +{ + __HAL_PWR_VDDIO2_EXTI_ENABLE_IT(); + __HAL_PWR_VDDIO2_EXTI_ENABLE_FALLING_EDGE(); +} + +/** + * @brief Disable the Vddio2 Monitor. + * @retval None + */ +void HAL_PWREx_DisableVddio2Monitor(void) +{ + __HAL_PWR_VDDIO2_EXTI_DISABLE_IT(); + __HAL_PWR_VDDIO2_EXTI_DISABLE_FALLING_EDGE(); + +} + +/** + * @brief This function handles the PWR Vddio2 monitor interrupt request. + * @note This API should be called under the VDDIO2_IRQHandler() PVD_VDDIO2_IRQHandler(). + * @retval None + */ +void HAL_PWREx_Vddio2Monitor_IRQHandler(void) +{ + /* Check PWR exti flag */ + if(__HAL_PWR_VDDIO2_EXTI_GET_FLAG() != RESET) + { + /* PWR Vddio2 monitor interrupt user callback */ + HAL_PWREx_Vddio2MonitorCallback(); + + /* Clear PWR Exti pending bit */ + __HAL_PWR_VDDIO2_EXTI_CLEAR_FLAG(); + } +} + +/** + * @brief PWR Vddio2 Monitor interrupt callback + * @retval None + */ +__weak void HAL_PWREx_Vddio2MonitorCallback(void) +{ + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_PWREx_Vddio2MonitorCallback could be implemented in the user file + */ +} + +#endif /* defined (STM32F042x6) || defined (STM32F048xx) || \ + defined (STM32F071xB) || defined (STM32F072xB) || defined (STM32F078xx) || \ + defined (STM32F091xC) || defined (STM32F098xx) */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* HAL_PWR_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ diff --git a/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.c b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.c new file mode 100644 index 0000000..08ef73e --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.c @@ -0,0 +1,1362 @@ +/** + ****************************************************************************** + * @file stm32f0xx_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 8MHz) with Flash 0 wait state, Flash prefetch buffer is disabled, + and all peripherals are off except internal SRAM, Flash and JTAG. + (+) There is no prescaler on High speed (AHB) and Low speed (APB) buses; + all peripherals mapped on these buses 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 buses prescalers + (+) Enable the clock for the peripheral(s) to be used + (+) Configure the clock source(s) for peripherals whose clocks are not + derived from the System clock (RTC, ADC, I2C, USART, TIM, USB FS, etc..) + + ##### 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 __HAL_RCC_PPP_CLK_ENABLE() macro. + + @endverbatim + ****************************************************************************** + * @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. + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f0xx_hal.h" + +/** @addtogroup STM32F0xx_HAL_Driver + * @{ + */ + +/** @defgroup RCC RCC +* @brief RCC HAL module driver + * @{ + */ + +#ifdef HAL_RCC_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/** @defgroup RCC_Private_Constants RCC Private Constants + * @{ + */ +/** + * @} + */ +/* Private macro -------------------------------------------------------------*/ +/** @defgroup RCC_Private_Macros RCC Private Macros + * @{ + */ + +#define MCO1_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define MCO1_GPIO_PORT GPIOA +#define MCO1_PIN GPIO_PIN_8 + +/** + * @} + */ + +/* Private variables ---------------------------------------------------------*/ +/** @defgroup RCC_Private_Variables RCC Private Variables + * @{ + */ +/** + * @} + */ + +/* Private function prototypes -----------------------------------------------*/ +/* Exported 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, HSI14, HSI48, LSE, LSI, PLL, CSS and MCO) and the System buses clocks (SYSCLK, + AHB and APB1). + + [..] Internal/external clock and PLL configuration + (#) HSI (high-speed internal), 8 MHz factory-trimmed RC used directly or through + the PLL as System clock source. + The HSI clock can be used also to clock the USART and I2C peripherals. + + (#) HSI14 (high-speed internal), 14 MHz factory-trimmed RC used directly to clock + the ADC peripheral. + + (#) LSI (low-speed internal), ~40 KHz low consumption RC used as IWDG and/or RTC + clock source. + + (#) HSE (high-speed external), 4 to 32 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, HSI48 or HSE), featuring different output clocks: + (++) The first output is used to generate the high speed system clock (up to 48 MHz) + (++) The second output is used to generate the clock for the USB FS (48 MHz) + (++) The third output may be used to generate the clock for the TIM, I2C and USART + peripherals (up to 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-M0 NMI + (Non-Maskable Interrupt) exception vector. + + (#) MCO (microcontroller clock output), used to output SYSCLK, HSI, HSE, LSI, LSE or PLL + clock (divided by 2) output on pin (such as PA8 pin). + + [..] System, AHB and APB buses 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) clock is derived + from AHB clock through configurable prescalers and used to clock + the peripherals mapped on these buses. You can use + "HAL_RCC_GetSysClockFreq()" function to retrieve the frequencies of these clocks. + + (#) All the peripheral clocks are derived from the System clock (SYSCLK) except: + (++) The FLASH program/erase clock which is always HSI 8MHz clock. + (++) The USB 48 MHz clock which is derived from the PLL VCO clock. + (++) The USART clock which can be derived as well from HSI 8MHz, LSI or LSE. + (++) The I2C clock which can be derived as well from HSI 8MHz clock. + (++) The ADC clock which is derived from PLL output. + (++) The RTC clock which is derived from the LSE, LSI or 1 MHz HSE_RTC + (HSE divided by a programmable prescaler). The System clock (SYSCLK) + frequency must be higher or equal to the RTC clock frequency. + (++) IWDG clock which is always the LSI clock. + + (#) For the STM32F0xx devices, the maximum frequency of the SYSCLK, HCLK and PCLK1 is 48 MHz, + Depending on the SYSCLK frequency, the flash latency should be adapted accordingly. + + (#) After reset, the System clock source is the HSI (8 MHz) with 0 WS and + prefetch is disabled. + @endverbatim + * @{ + */ + +/* + Additional consideration on the SYSCLK based on Latency settings: + +-----------------------------------------------+ + | Latency | SYSCLK clock frequency (MHz) | + |---------------|-------------------------------| + |0WS(1CPU cycle)| 0 < SYSCLK <= 24 | + |---------------|-------------------------------| + |1WS(2CPU cycle)| 24 < SYSCLK <= 48 | + +-----------------------------------------------+ + */ + +/** + * @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 prescaler set to 1. + * - CSS and MCO1 OFF + * - All interrupts disabled + * - All interrupt and reset flags cleared + * @note This function does not 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, HSITRIM[4:0] bits to the reset value*/ + SET_BIT(RCC->CR, RCC_CR_HSION | RCC_CR_HSITRIM_4); + + /* Wait till HSI is ready */ + while (READ_BIT(RCC->CR, RCC_CR_HSIRDY) == RESET) + { + if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + + /* Reset SW[1:0], HPRE[3:0], PPRE[2:0] and MCOSEL[2:0] bits */ + CLEAR_BIT(RCC->CFGR, RCC_CFGR_SW | RCC_CFGR_HPRE | RCC_CFGR_PPRE | RCC_CFGR_MCO); + + /* Wait till HSI as SYSCLK status is enabled */ + while (READ_BIT(RCC->CFGR, RCC_CFGR_SWS) != RESET) + { + if ((HAL_GetTick() - tickstart) > CLOCKSWITCH_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + + /* Update the SystemCoreClock global variable for HSI as system clock source */ + SystemCoreClock = HSI_VALUE; + + /* Adapt Systick interrupt period */ + if (HAL_InitTick(uwTickPrio) != HAL_OK) + { + return HAL_ERROR; + } + + /* Reset HSEON, CSSON, PLLON bits */ + CLEAR_BIT(RCC->CR, RCC_CR_PLLON | RCC_CR_CSSON | RCC_CR_HSEON); + + /* Reset HSEBYP bit */ + CLEAR_BIT(RCC->CR, RCC_CR_HSEBYP); + + /* Get start tick */ + tickstart = HAL_GetTick(); + + /* Wait till PLLRDY is cleared */ + while(READ_BIT(RCC->CR, RCC_CR_PLLRDY) != RESET) + { + if((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + + /* Reset CFGR register */ + CLEAR_REG(RCC->CFGR); + + /* Reset CFGR2 register */ + CLEAR_REG(RCC->CFGR2); + + /* Reset CFGR3 register */ + CLEAR_REG(RCC->CFGR3); + + /* Disable all interrupts */ + CLEAR_REG(RCC->CIR); + + /* Clear all reset flags */ + __HAL_RCC_CLEAR_RESET_FLAGS(); + + 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 macro. 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 macro. User should request a transition to HSE Off + * first and then HSE On or HSE Bypass. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct) +{ + uint32_t tickstart; + uint32_t pll_config; + uint32_t pll_config2; + + /* 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 it is not allowed to be disabled */ + if((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSE) + || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && (__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_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 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_SYSCLKSOURCE_STATUS_HSI) + || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && (__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_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 disabled */ + 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 disabled */ + 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 disabled */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != RESET) + { + if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + + /* Require to disable power clock if necessary */ + if(pwrclkchanged == SET) + { + __HAL_RCC_PWR_CLK_DISABLE(); + } + } + + /*----------------------------- HSI14 Configuration --------------------------*/ + if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI14) == RCC_OSCILLATORTYPE_HSI14) + { + /* Check the parameters */ + assert_param(IS_RCC_HSI14(RCC_OscInitStruct->HSI14State)); + assert_param(IS_RCC_CALIBRATION_VALUE(RCC_OscInitStruct->HSI14CalibrationValue)); + + /* Check the HSI14 State */ + if(RCC_OscInitStruct->HSI14State == RCC_HSI14_ON) + { + /* Disable ADC control of the Internal High Speed oscillator HSI14 */ + __HAL_RCC_HSI14ADC_DISABLE(); + + /* Enable the Internal High Speed oscillator (HSI). */ + __HAL_RCC_HSI14_ENABLE(); + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Wait till HSI is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSI14RDY) == RESET) + { + if((HAL_GetTick() - tickstart) > HSI14_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + + /* Adjusts the Internal High Speed oscillator 14Mhz (HSI14) calibration value. */ + __HAL_RCC_HSI14_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSI14CalibrationValue); + } + else if(RCC_OscInitStruct->HSI14State == RCC_HSI14_ADC_CONTROL) + { + /* Enable ADC control of the Internal High Speed oscillator HSI14 */ + __HAL_RCC_HSI14ADC_ENABLE(); + + /* Adjusts the Internal High Speed oscillator 14Mhz (HSI14) calibration value. */ + __HAL_RCC_HSI14_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSI14CalibrationValue); + } + else + { + /* Disable ADC control of the Internal High Speed oscillator HSI14 */ + __HAL_RCC_HSI14ADC_DISABLE(); + + /* Disable the Internal High Speed oscillator (HSI). */ + __HAL_RCC_HSI14_DISABLE(); + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Wait till HSI is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSI14RDY) != RESET) + { + if((HAL_GetTick() - tickstart) > HSI14_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + } + +#if defined(RCC_HSI48_SUPPORT) + /*----------------------------- HSI48 Configuration --------------------------*/ + if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI48) == RCC_OSCILLATORTYPE_HSI48) + { + /* Check the parameters */ + assert_param(IS_RCC_HSI48(RCC_OscInitStruct->HSI48State)); + + /* When the HSI48 is used as system clock it is not allowed to be disabled */ + if((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSI48) || + ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && (__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_HSI48))) + { + if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSI48RDY) != RESET) && (RCC_OscInitStruct->HSI48State != RCC_HSI48_ON)) + { + return HAL_ERROR; + } + } + else + { + /* Check the HSI48 State */ + if(RCC_OscInitStruct->HSI48State != RCC_HSI48_OFF) + { + /* Enable the Internal High Speed oscillator (HSI48). */ + __HAL_RCC_HSI48_ENABLE(); + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Wait till HSI48 is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSI48RDY) == RESET) + { + if((HAL_GetTick() - tickstart) > HSI48_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + else + { + /* Disable the Internal High Speed oscillator (HSI48). */ + __HAL_RCC_HSI48_DISABLE(); + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Wait till HSI48 is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSI48RDY) != RESET) + { + if((HAL_GetTick() - tickstart) > HSI48_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + } + } +#endif /* RCC_HSI48_SUPPORT */ + + /*-------------------------------- 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_SYSCLKSOURCE_STATUS_PLLCLK) + { + if((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_ON) + { + /* Check the parameters */ + assert_param(IS_RCC_PLLSOURCE(RCC_OscInitStruct->PLL.PLLSource)); + assert_param(IS_RCC_PLL_MUL(RCC_OscInitStruct->PLL.PLLMUL)); + assert_param(IS_RCC_PREDIV(RCC_OscInitStruct->PLL.PREDIV)); + + /* 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; + } + } + + /* Configure the main PLL clock source, predivider and multiplication factor. */ + __HAL_RCC_PLL_CONFIG(RCC_OscInitStruct->PLL.PLLSource, + RCC_OscInitStruct->PLL.PREDIV, + RCC_OscInitStruct->PLL.PLLMUL); + /* 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 disabled */ + 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->CFGR; + pll_config2 = RCC->CFGR2; + if((READ_BIT(pll_config, RCC_CFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) || + (READ_BIT(pll_config2, RCC_CFGR2_PREDIV) != RCC_OscInitStruct->PLL.PREDIV) || + (READ_BIT(pll_config, RCC_CFGR_PLLMUL) != RCC_OscInitStruct->PLL.PLLMUL)) + { + return HAL_ERROR; + } + } + } + } + + return HAL_OK; +} + +/** + * @brief Initializes the CPU, AHB and APB buses 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 + * The value of this parameter depend on device used within the same series + * @note The SystemCoreClock CMSIS variable is used to store System Clock Frequency + * and updated by @ref HAL_RCC_GetHCLKFreq() function called within this function + * + * @note The HSI is used (enabled by hardware) as system clock source after + * start-up 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 start-up 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. + * You can use @ref HAL_RCC_GetClockConfig() function to know which clock is + * currently used as system clock source. + * @retval HAL status + */ +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) 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 APB divider 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_PPRE, RCC_HCLK_DIV16); + } + + /* Set the new HCLK clock divider */ + 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) + { + /* Check the PLL ready flag */ + if(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET) + { + return HAL_ERROR; + } + } +#if defined(RCC_CFGR_SWS_HSI48) + /* HSI48 is selected as System Clock Source */ + else if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSI48) + { + /* Check the HSI48 ready flag */ + if(__HAL_RCC_GET_FLAG(RCC_FLAG_HSI48RDY) == RESET) + { + return HAL_ERROR; + } + } +#endif /* RCC_CFGR_SWS_HSI48 */ + /* 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_PPRE, RCC_ClkInitStruct->APB1CLKDivider); + } + + /* Update the SystemCoreClock global variable */ + SystemCoreClock = HAL_RCC_GetSysClockFreq() >> AHBPrescTable[(RCC->CFGR & RCC_CFGR_HPRE)>> RCC_CFGR_HPRE_BITNUMBER]; + + /* Configure the source of time base considering new system clocks settings*/ + HAL_InitTick (TICK_INT_PRIORITY); + + 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 + * @{ + */ + +#if defined(RCC_CFGR_MCOPRE) +/** + * @brief Selects the clock source to output on MCO pin. + * @note MCO pin 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 @ref RCC_MCO1 Clock source to output on MCO1 pin(PA8). + * @param RCC_MCOSource specifies the clock source to output. + * This parameter can be one of the following values: + * @arg @ref RCC_MCO1SOURCE_NOCLOCK No clock selected + * @arg @ref RCC_MCO1SOURCE_SYSCLK System Clock selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_HSI HSI selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_HSE HSE selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_LSI LSI selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_LSE LSE selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_HSI14 HSI14 selected as MCO clock + @if STM32F042x6 + * @arg @ref RCC_MCO1SOURCE_HSI48 HSI48 selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_PLLCLK PLLCLK selected as MCO clock + @elseif STM32F048xx + * @arg @ref RCC_MCO1SOURCE_HSI48 HSI48 selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_PLLCLK PLLCLK selected as MCO clock + @elseif STM32F071xB + * @arg @ref RCC_MCO1SOURCE_HSI48 HSI48 selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_PLLCLK PLLCLK selected as MCO clock + @elseif STM32F072xB + * @arg @ref RCC_MCO1SOURCE_HSI48 HSI48 selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_PLLCLK PLLCLK selected as MCO clock + @elseif STM32F078xx + * @arg @ref RCC_MCO1SOURCE_HSI48 HSI48 selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_PLLCLK PLLCLK selected as MCO clock + @elseif STM32F091xC + * @arg @ref RCC_MCO1SOURCE_HSI48 HSI48 selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_PLLCLK PLLCLK selected as MCO clock + @elseif STM32F098xx + * @arg @ref RCC_MCO1SOURCE_HSI48 HSI48 selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_PLLCLK PLLCLK selected as MCO clock + @elif STM32F030x6 + * @arg @ref RCC_MCO1SOURCE_PLLCLK PLLCLK selected as MCO clock + @elif STM32F030xC + * @arg @ref RCC_MCO1SOURCE_PLLCLK PLLCLK selected as MCO clock + @elif STM32F031x6 + * @arg @ref RCC_MCO1SOURCE_PLLCLK PLLCLK selected as MCO clock + @elif STM32F038xx + * @arg @ref RCC_MCO1SOURCE_PLLCLK PLLCLK selected as MCO clock + @elif STM32F070x6 + * @arg @ref RCC_MCO1SOURCE_PLLCLK PLLCLK selected as MCO clock + @elif STM32F070xB + * @arg @ref RCC_MCO1SOURCE_PLLCLK PLLCLK selected as MCO clock + @endif + * @arg @ref RCC_MCO1SOURCE_PLLCLK_DIV2 PLLCLK Divided by 2 selected as MCO clock + * @param RCC_MCODiv specifies the MCO DIV. + * This parameter can be one of the following values: + * @arg @ref RCC_MCODIV_1 no division applied to MCO clock + * @arg @ref RCC_MCODIV_2 division by 2 applied to MCO clock + * @arg @ref RCC_MCODIV_4 division by 4 applied to MCO clock + * @arg @ref RCC_MCODIV_8 division by 8 applied to MCO clock + * @arg @ref RCC_MCODIV_16 division by 16 applied to MCO clock + * @arg @ref RCC_MCODIV_32 division by 32 applied to MCO clock + * @arg @ref RCC_MCODIV_64 division by 64 applied to MCO clock + * @arg @ref RCC_MCODIV_128 division by 128 applied to MCO clock + * @retval None + */ +#else +/** + * @brief Selects the clock source to output on MCO pin. + * @note MCO pin 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 @ref RCC_MCO1 Clock source to output on MCO1 pin(PA8). + * @param RCC_MCOSource specifies the clock source to output. + * This parameter can be one of the following values: + * @arg @ref RCC_MCO1SOURCE_NOCLOCK No clock selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_SYSCLK System clock selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_HSI HSI selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_HSE HSE selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_LSI LSI selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_LSE LSE selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_HSI14 HSI14 selected as MCO clock + * @arg @ref RCC_MCO1SOURCE_PLLCLK_DIV2 PLLCLK Divided by 2 selected as MCO clock + * @param RCC_MCODiv specifies the MCO DIV. + * This parameter can be one of the following values: + * @arg @ref RCC_MCODIV_1 no division applied to MCO clock + * @retval None + */ +#endif +void HAL_RCC_MCOConfig(uint32_t RCC_MCOx, uint32_t RCC_MCOSource, uint32_t RCC_MCODiv) +{ + GPIO_InitTypeDef gpio; + + /* Check the parameters */ + assert_param(IS_RCC_MCO(RCC_MCOx)); + assert_param(IS_RCC_MCODIV(RCC_MCODiv)); + assert_param(IS_RCC_MCO1SOURCE(RCC_MCOSource)); + + /* Configure the MCO1 pin in alternate function mode */ + gpio.Mode = GPIO_MODE_AF_PP; + gpio.Speed = GPIO_SPEED_FREQ_HIGH; + gpio.Pull = GPIO_NOPULL; + gpio.Pin = MCO1_PIN; + gpio.Alternate = GPIO_AF0_MCO; + + /* MCO1 Clock Enable */ + MCO1_CLK_ENABLE(); + + HAL_GPIO_Init(MCO1_GPIO_PORT, &gpio); + + /* Configure the MCO clock source */ + __HAL_RCC_MCO1_CONFIG(RCC_MCOSource, RCC_MCODiv); +} + +/** + * @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-M0 NMI (Non-Maskable Interrupt) exception vector. + * @retval None + */ +void HAL_RCC_EnableCSS(void) +{ + SET_BIT(RCC->CR, RCC_CR_CSSON) ; +} + +/** + * @brief Disables the Clock Security System. + * @retval None + */ +void HAL_RCC_DisableCSS(void) +{ + CLEAR_BIT(RCC->CR, RCC_CR_CSSON) ; +} + +/** + * @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 a value based on HSE_VALUE + * divided by PREDIV factor(**) + * @note If SYSCLK source is PLL, function returns a value based on HSE_VALUE + * divided by PREDIV factor(**) or depending on STM32F0xxxx devices either a value based + * on HSI_VALUE divided by 2 or HSI_VALUE divided by PREDIV factor(*) multiplied by the + * PLL factor. + * @note (*) HSI_VALUE is a constant defined in stm32f0xx_hal_conf.h file (default value + * 8 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * @note (**) HSE_VALUE is a constant defined in stm32f0xx_hal_conf.h file (default value + * 8 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 + * baud-rate 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) +{ + static const uint8_t aPLLMULFactorTable[16U] = { 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, + 10U, 11U, 12U, 13U, 14U, 15U, 16U, 16U}; + static const uint8_t aPredivFactorTable[16U] = { 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, + 9U,10U, 11U, 12U, 13U, 14U, 15U, 16U}; + + uint32_t tmpreg = 0U, prediv = 0U, pllclk = 0U, pllmul = 0U; + uint32_t sysclockfreq = 0U; + + tmpreg = RCC->CFGR; + + /* Get SYSCLK source -------------------------------------------------------*/ + switch (tmpreg & RCC_CFGR_SWS) + { + case RCC_SYSCLKSOURCE_STATUS_HSE: /* HSE used as system clock */ + { + sysclockfreq = HSE_VALUE; + break; + } + case RCC_SYSCLKSOURCE_STATUS_PLLCLK: /* PLL used as system clock */ + { + pllmul = aPLLMULFactorTable[(uint32_t)(tmpreg & RCC_CFGR_PLLMUL) >> RCC_CFGR_PLLMUL_BITNUMBER]; + prediv = aPredivFactorTable[(uint32_t)(RCC->CFGR2 & RCC_CFGR2_PREDIV) >> RCC_CFGR2_PREDIV_BITNUMBER]; + if ((tmpreg & RCC_CFGR_PLLSRC) == RCC_PLLSOURCE_HSE) + { + /* HSE used as PLL clock source : PLLCLK = HSE/PREDIV * PLLMUL */ + pllclk = (uint32_t)((uint64_t) HSE_VALUE / (uint64_t) (prediv)) * ((uint64_t) pllmul); + } +#if defined(RCC_CFGR_PLLSRC_HSI48_PREDIV) + else if ((tmpreg & RCC_CFGR_PLLSRC) == RCC_PLLSOURCE_HSI48) + { + /* HSI48 used as PLL clock source : PLLCLK = HSI48/PREDIV * PLLMUL */ + pllclk = (uint32_t)((uint64_t) HSI48_VALUE / (uint64_t) (prediv)) * ((uint64_t) pllmul); + } +#endif /* RCC_CFGR_PLLSRC_HSI48_PREDIV */ + else + { +#if (defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F070x6) || defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx) || defined(STM32F070xB) || defined(STM32F091xC) || defined(STM32F098xx) || defined(STM32F030xC)) + /* HSI used as PLL clock source : PLLCLK = HSI/PREDIV * PLLMUL */ + pllclk = (uint32_t)((uint64_t) HSI_VALUE / (uint64_t) (prediv)) * ((uint64_t) pllmul); +#else + /* HSI used as PLL clock source : PLLCLK = HSI/2 * PLLMUL */ + pllclk = (uint32_t)((uint64_t) (HSI_VALUE >> 1U) * ((uint64_t) pllmul)); +#endif + } + sysclockfreq = pllclk; + break; + } +#if defined(RCC_CFGR_SWS_HSI48) + case RCC_SYSCLKSOURCE_STATUS_HSI48: /* HSI48 used as system clock source */ + { + sysclockfreq = HSI48_VALUE; + break; + } +#endif /* RCC_CFGR_SWS_HSI48 */ + case RCC_SYSCLKSOURCE_STATUS_HSI: /* HSI used as system clock source */ + default: /* HSI used as system clock */ + { + 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_PPRE) >> RCC_CFGR_PPRE_BITNUMBER]); +} + +/** + * @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 + */ +void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct) +{ + /* Check the parameters */ + assert_param(RCC_OscInitStruct != NULL); + + /* Set all possible values for the Oscillator type parameter ---------------*/ + RCC_OscInitStruct->OscillatorType = RCC_OSCILLATORTYPE_HSE | RCC_OSCILLATORTYPE_HSI \ + | RCC_OSCILLATORTYPE_LSE | RCC_OSCILLATORTYPE_LSI | RCC_OSCILLATORTYPE_HSI14; +#if defined(RCC_HSI48_SUPPORT) + RCC_OscInitStruct->OscillatorType |= RCC_OSCILLATORTYPE_HSI48; +#endif /* RCC_HSI48_SUPPORT */ + + + /* 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_BitNumber); + + /* 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 HSI14 configuration -----------------------------------------------*/ + if((RCC->CR2 & RCC_CR2_HSI14ON) == RCC_CR2_HSI14ON) + { + RCC_OscInitStruct->HSI14State = RCC_HSI_ON; + } + else + { + RCC_OscInitStruct->HSI14State = RCC_HSI_OFF; + } + + RCC_OscInitStruct->HSI14CalibrationValue = (uint32_t)((RCC->CR2 & RCC_CR2_HSI14TRIM) >> RCC_HSI14TRIM_BIT_NUMBER); + +#if defined(RCC_HSI48_SUPPORT) + /* Get the HSI48 configuration if any-----------------------------------------*/ + RCC_OscInitStruct->HSI48State = __HAL_RCC_GET_HSI48_STATE(); +#endif /* RCC_HSI48_SUPPORT */ + + /* 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->CFGR & RCC_CFGR_PLLSRC); + RCC_OscInitStruct->PLL.PLLMUL = (uint32_t)(RCC->CFGR & RCC_CFGR_PLLMUL); + RCC_OscInitStruct->PLL.PREDIV = (uint32_t)(RCC->CFGR2 & RCC_CFGR2_PREDIV); +} + +/** + * @brief Get the RCC_ClkInitStruct according to the internal + * RCC configuration registers. + * @param RCC_ClkInitStruct pointer to an RCC_ClkInitTypeDef structure that + * contains the current clock configuration. + * @param pFLatency Pointer on the Flash Latency. + * @retval None + */ +void HAL_RCC_GetClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t *pFLatency) +{ + /* Check the parameters */ + assert_param(RCC_ClkInitStruct != NULL); + assert_param(pFLatency != NULL); + + /* Set all possible values for the Clock type parameter --------------------*/ + RCC_ClkInitStruct->ClockType = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1; + + /* 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_PPRE); + /* Get the Flash Wait State (Latency) configuration ------------------------*/ + *pFLatency = __HAL_FLASH_GET_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/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.c b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.c new file mode 100644 index 0000000..17ea5fa --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.c @@ -0,0 +1,961 @@ +/** + ****************************************************************************** + * @file stm32f0xx_hal_rcc_ex.c + * @author MCD Application Team + * @brief Extended RCC HAL module driver. + * This file provides firmware functions to manage the following + * functionalities RCC extension peripheral: + * + Extended Peripheral Control functions + * + Extended Clock Recovery System Control 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. + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f0xx_hal.h" + +/** @addtogroup STM32F0xx_HAL_Driver + * @{ + */ + +#ifdef HAL_RCC_MODULE_ENABLED + +/** @defgroup RCCEx RCCEx + * @brief RCC Extension HAL module driver. + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +#if defined(CRS) +/** @defgroup RCCEx_Private_Constants RCCEx Private Constants + * @{ + */ +/* Bit position in register */ +#define CRS_CFGR_FELIM_BITNUMBER 16 +#define CRS_CR_TRIM_BITNUMBER 8 +#define CRS_ISR_FECAP_BITNUMBER 16 +/** + * @} + */ +#endif /* CRS */ + +/* Private macro -------------------------------------------------------------*/ +/** @defgroup RCCEx_Private_Macros RCCEx Private Macros + * @{ + */ +/** + * @} + */ + +/* 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) are set to their reset values. + +@endverbatim + * @{ + */ + +/** + * @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 + * (USART, RTC, I2C, CEC and USB). + * + * @note Care must be taken when @ref 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 temp_reg = 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)); + + FlagStatus pwrclkchanged = RESET; + + /* As soon as function is called to change RTC clock source, activation of the + power domain is done. */ + /* 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; + } + } + } + + /* Reset the Backup domain only if the RTC Clock source selection is modified from reset value */ + temp_reg = (RCC->BDCR & RCC_BDCR_RTCSEL); + if((temp_reg != 0x00000000U) && (temp_reg != (PeriphClkInit->RTCClockSelection & RCC_BDCR_RTCSEL))) + { + /* Store the content of BDCR register before the reset of Backup Domain */ + temp_reg = (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 = temp_reg; + + /* Wait for LSERDY if LSE was enabled */ + if (HAL_IS_BIT_SET(temp_reg, RCC_BDCR_LSEON)) + { + /* 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; + } + } + } + } + __HAL_RCC_RTC_CONFIG(PeriphClkInit->RTCClockSelection); + + /* Require to disable power clock if necessary */ + if(pwrclkchanged == SET) + { + __HAL_RCC_PWR_CLK_DISABLE(); + } + } + + /*------------------------------- USART1 Configuration ------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USART1) == RCC_PERIPHCLK_USART1) + { + /* Check the parameters */ + assert_param(IS_RCC_USART1CLKSOURCE(PeriphClkInit->Usart1ClockSelection)); + + /* Configure the USART1 clock source */ + __HAL_RCC_USART1_CONFIG(PeriphClkInit->Usart1ClockSelection); + } + +#if defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx)\ + || defined(STM32F091xC) || defined(STM32F098xx) + /*----------------------------- USART2 Configuration --------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USART2) == RCC_PERIPHCLK_USART2) + { + /* Check the parameters */ + assert_param(IS_RCC_USART2CLKSOURCE(PeriphClkInit->Usart2ClockSelection)); + + /* Configure the USART2 clock source */ + __HAL_RCC_USART2_CONFIG(PeriphClkInit->Usart2ClockSelection); + } +#endif /* STM32F071xB || STM32F072xB || STM32F078xx || */ + /* STM32F091xC || STM32F098xx */ + +#if defined(STM32F091xC) || defined(STM32F098xx) + /*----------------------------- USART3 Configuration --------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USART3) == RCC_PERIPHCLK_USART3) + { + /* Check the parameters */ + assert_param(IS_RCC_USART3CLKSOURCE(PeriphClkInit->Usart3ClockSelection)); + + /* Configure the USART3 clock source */ + __HAL_RCC_USART3_CONFIG(PeriphClkInit->Usart3ClockSelection); + } +#endif /* STM32F091xC || STM32F098xx */ + + /*------------------------------ I2C1 Configuration ------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2C1) == RCC_PERIPHCLK_I2C1) + { + /* Check the parameters */ + assert_param(IS_RCC_I2C1CLKSOURCE(PeriphClkInit->I2c1ClockSelection)); + + /* Configure the I2C1 clock source */ + __HAL_RCC_I2C1_CONFIG(PeriphClkInit->I2c1ClockSelection); + } + +#if defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F072xB) || defined(STM32F078xx) || defined(STM32F070xB) || defined(STM32F070x6) + /*------------------------------ USB Configuration ------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USB) == RCC_PERIPHCLK_USB) + { + /* Check the parameters */ + assert_param(IS_RCC_USBCLKSOURCE(PeriphClkInit->UsbClockSelection)); + + /* Configure the USB clock source */ + __HAL_RCC_USB_CONFIG(PeriphClkInit->UsbClockSelection); + } +#endif /* STM32F042x6 || STM32F048xx || STM32F072xB || STM32F078xx || STM32F070xB || STM32F070x6 */ + +#if defined(STM32F042x6) || defined(STM32F048xx)\ + || defined(STM32F051x8) || defined(STM32F058xx)\ + || defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx)\ + || defined(STM32F091xC) || defined(STM32F098xx) + /*------------------------------ CEC clock 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); + } +#endif /* STM32F042x6 || STM32F048xx || */ + /* STM32F051x8 || STM32F058xx || */ + /* STM32F071xB || STM32F072xB || STM32F078xx || */ + /* STM32F091xC || STM32F098xx */ + + return HAL_OK; +} + +/** + * @brief Get the RCC_ClkInitStruct according to the internal + * RCC configuration registers. + * @param PeriphClkInit pointer to an RCC_PeriphCLKInitTypeDef structure that + * returns the configuration information for the Extended Peripherals clocks + * (USART, RTC, I2C, CEC and USB). + * @retval None + */ +void HAL_RCCEx_GetPeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit) +{ + /* Set all possible values for the extended clock type parameter------------*/ + /* Common part first */ + PeriphClkInit->PeriphClockSelection = RCC_PERIPHCLK_USART1 | RCC_PERIPHCLK_I2C1 | RCC_PERIPHCLK_RTC; + /* Get the RTC configuration --------------------------------------------*/ + PeriphClkInit->RTCClockSelection = __HAL_RCC_GET_RTC_SOURCE(); + /* Get the USART1 clock configuration --------------------------------------------*/ + PeriphClkInit->Usart1ClockSelection = __HAL_RCC_GET_USART1_SOURCE(); + /* Get the I2C1 clock source -----------------------------------------------*/ + PeriphClkInit->I2c1ClockSelection = __HAL_RCC_GET_I2C1_SOURCE(); + +#if defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx)\ + || defined(STM32F091xC) || defined(STM32F098xx) + PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_USART2; + /* Get the USART2 clock source ---------------------------------------------*/ + PeriphClkInit->Usart2ClockSelection = __HAL_RCC_GET_USART2_SOURCE(); +#endif /* STM32F071xB || STM32F072xB || STM32F078xx || */ + /* STM32F091xC || STM32F098xx */ + +#if defined(STM32F091xC) || defined(STM32F098xx) + PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_USART3; + /* Get the USART3 clock source ---------------------------------------------*/ + PeriphClkInit->Usart3ClockSelection = __HAL_RCC_GET_USART3_SOURCE(); +#endif /* STM32F091xC || STM32F098xx */ + +#if defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F072xB) || defined(STM32F078xx) || defined(STM32F070xB) || defined(STM32F070x6) + PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_USB; + /* Get the USB clock source ---------------------------------------------*/ + PeriphClkInit->UsbClockSelection = __HAL_RCC_GET_USB_SOURCE(); +#endif /* STM32F042x6 || STM32F048xx || STM32F072xB || STM32F078xx || STM32F070xB || STM32F070x6 */ + +#if defined(STM32F042x6) || defined(STM32F048xx)\ + || defined(STM32F051x8) || defined(STM32F058xx)\ + || defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx)\ + || defined(STM32F091xC) || defined(STM32F098xx) + PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_CEC; + /* Get the CEC clock source ------------------------------------------------*/ + PeriphClkInit->CecClockSelection = __HAL_RCC_GET_CEC_SOURCE(); +#endif /* STM32F042x6 || STM32F048xx || */ + /* STM32F051x8 || STM32F058xx || */ + /* STM32F071xB || STM32F072xB || STM32F078xx || */ + /* STM32F091xC || STM32F098xx */ + +} + +/** + * @brief Returns the peripheral clock frequency + * @note Returns 0 if peripheral clock is unknown + * @param PeriphClk Peripheral clock identifier + * This parameter can be one of the following values: + * @arg @ref RCC_PERIPHCLK_RTC RTC peripheral clock + * @arg @ref RCC_PERIPHCLK_USART1 USART1 peripheral clock + * @arg @ref RCC_PERIPHCLK_I2C1 I2C1 peripheral clock + @if STM32F042x6 + * @arg @ref RCC_PERIPHCLK_USB USB peripheral clock + * @arg @ref RCC_PERIPHCLK_CEC CEC peripheral clock + @endif + @if STM32F048xx + * @arg @ref RCC_PERIPHCLK_USB USB peripheral clock + * @arg @ref RCC_PERIPHCLK_CEC CEC peripheral clock + @endif + @if STM32F051x8 + * @arg @ref RCC_PERIPHCLK_CEC CEC peripheral clock + @endif + @if STM32F058xx + * @arg @ref RCC_PERIPHCLK_CEC CEC peripheral clock + @endif + @if STM32F070x6 + * @arg @ref RCC_PERIPHCLK_USB USB peripheral clock + @endif + @if STM32F070xB + * @arg @ref RCC_PERIPHCLK_USB USB peripheral clock + @endif + @if STM32F071xB + * @arg @ref RCC_PERIPHCLK_USART2 USART2 peripheral clock + * @arg @ref RCC_PERIPHCLK_CEC CEC peripheral clock + @endif + @if STM32F072xB + * @arg @ref RCC_PERIPHCLK_USART2 USART2 peripheral clock + * @arg @ref RCC_PERIPHCLK_USB USB peripheral clock + * @arg @ref RCC_PERIPHCLK_CEC CEC peripheral clock + @endif + @if STM32F078xx + * @arg @ref RCC_PERIPHCLK_USART2 USART2 peripheral clock + * @arg @ref RCC_PERIPHCLK_USB USB peripheral clock + * @arg @ref RCC_PERIPHCLK_CEC CEC peripheral clock + @endif + @if STM32F091xC + * @arg @ref RCC_PERIPHCLK_USART2 USART2 peripheral clock + * @arg @ref RCC_PERIPHCLK_USART3 USART2 peripheral clock + * @arg @ref RCC_PERIPHCLK_CEC CEC peripheral clock + @endif + @if STM32F098xx + * @arg @ref RCC_PERIPHCLK_USART2 USART2 peripheral clock + * @arg @ref RCC_PERIPHCLK_USART3 USART2 peripheral clock + * @arg @ref RCC_PERIPHCLK_CEC CEC peripheral clock + @endif + * @retval Frequency in Hz (0: means that no available frequency for the peripheral) + */ +uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) +{ + /* frequency == 0 : means that no available frequency for the peripheral */ + uint32_t frequency = 0U; + + uint32_t srcclk = 0U; +#if defined(USB) + uint32_t pllmull = 0U, pllsource = 0U, predivfactor = 0U; +#endif /* USB */ + + /* Check the parameters */ + assert_param(IS_RCC_PERIPHCLOCK(PeriphClk)); + + switch (PeriphClk) + { + case RCC_PERIPHCLK_RTC: + { + /* Get the current RTC source */ + srcclk = __HAL_RCC_GET_RTC_SOURCE(); + + /* Check if LSE is ready and if RTC clock selection is LSE */ + if ((srcclk == RCC_RTCCLKSOURCE_LSE) && (HAL_IS_BIT_SET(RCC->BDCR, RCC_BDCR_LSERDY))) + { + frequency = LSE_VALUE; + } + /* Check if LSI is ready and if RTC clock selection is LSI */ + else if ((srcclk == RCC_RTCCLKSOURCE_LSI) && (HAL_IS_BIT_SET(RCC->CSR, RCC_CSR_LSIRDY))) + { + frequency = LSI_VALUE; + } + /* Check if HSE is ready and if RTC clock selection is HSI_DIV32*/ + else if ((srcclk == RCC_RTCCLKSOURCE_HSE_DIV32) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY))) + { + frequency = HSE_VALUE / 32U; + } + break; + } + case RCC_PERIPHCLK_USART1: + { + /* Get the current USART1 source */ + srcclk = __HAL_RCC_GET_USART1_SOURCE(); + + /* Check if USART1 clock selection is PCLK1 */ + if (srcclk == RCC_USART1CLKSOURCE_PCLK1) + { + frequency = HAL_RCC_GetPCLK1Freq(); + } + /* Check if HSI is ready and if USART1 clock selection is HSI */ + else if ((srcclk == RCC_USART1CLKSOURCE_HSI) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY))) + { + frequency = HSI_VALUE; + } + /* Check if USART1 clock selection is SYSCLK */ + else if (srcclk == RCC_USART1CLKSOURCE_SYSCLK) + { + frequency = HAL_RCC_GetSysClockFreq(); + } + /* Check if LSE is ready and if USART1 clock selection is LSE */ + else if ((srcclk == RCC_USART1CLKSOURCE_LSE) && (HAL_IS_BIT_SET(RCC->BDCR, RCC_BDCR_LSERDY))) + { + frequency = LSE_VALUE; + } + break; + } +#if defined(RCC_CFGR3_USART2SW) + case RCC_PERIPHCLK_USART2: + { + /* Get the current USART2 source */ + srcclk = __HAL_RCC_GET_USART2_SOURCE(); + + /* Check if USART2 clock selection is PCLK1 */ + if (srcclk == RCC_USART2CLKSOURCE_PCLK1) + { + frequency = HAL_RCC_GetPCLK1Freq(); + } + /* Check if HSI is ready and if USART2 clock selection is HSI */ + else if ((srcclk == RCC_USART2CLKSOURCE_HSI) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY))) + { + frequency = HSI_VALUE; + } + /* Check if USART2 clock selection is SYSCLK */ + else if (srcclk == RCC_USART2CLKSOURCE_SYSCLK) + { + frequency = HAL_RCC_GetSysClockFreq(); + } + /* Check if LSE is ready and if USART2 clock selection is LSE */ + else if ((srcclk == RCC_USART2CLKSOURCE_LSE) && (HAL_IS_BIT_SET(RCC->BDCR, RCC_BDCR_LSERDY))) + { + frequency = LSE_VALUE; + } + break; + } +#endif /* RCC_CFGR3_USART2SW */ +#if defined(RCC_CFGR3_USART3SW) + case RCC_PERIPHCLK_USART3: + { + /* Get the current USART3 source */ + srcclk = __HAL_RCC_GET_USART3_SOURCE(); + + /* Check if USART3 clock selection is PCLK1 */ + if (srcclk == RCC_USART3CLKSOURCE_PCLK1) + { + frequency = HAL_RCC_GetPCLK1Freq(); + } + /* Check if HSI is ready and if USART3 clock selection is HSI */ + else if ((srcclk == RCC_USART3CLKSOURCE_HSI) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY))) + { + frequency = HSI_VALUE; + } + /* Check if USART3 clock selection is SYSCLK */ + else if (srcclk == RCC_USART3CLKSOURCE_SYSCLK) + { + frequency = HAL_RCC_GetSysClockFreq(); + } + /* Check if LSE is ready and if USART3 clock selection is LSE */ + else if ((srcclk == RCC_USART3CLKSOURCE_LSE) && (HAL_IS_BIT_SET(RCC->BDCR, RCC_BDCR_LSERDY))) + { + frequency = LSE_VALUE; + } + break; + } +#endif /* RCC_CFGR3_USART3SW */ + case RCC_PERIPHCLK_I2C1: + { + /* Get the current I2C1 source */ + srcclk = __HAL_RCC_GET_I2C1_SOURCE(); + + /* Check if HSI is ready and if I2C1 clock selection is HSI */ + if ((srcclk == RCC_I2C1CLKSOURCE_HSI) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY))) + { + frequency = HSI_VALUE; + } + /* Check if I2C1 clock selection is SYSCLK */ + else if (srcclk == RCC_I2C1CLKSOURCE_SYSCLK) + { + frequency = HAL_RCC_GetSysClockFreq(); + } + break; + } +#if defined(USB) + case RCC_PERIPHCLK_USB: + { + /* Get the current USB source */ + srcclk = __HAL_RCC_GET_USB_SOURCE(); + + /* Check if PLL is ready and if USB clock selection is PLL */ + if ((srcclk == RCC_USBCLKSOURCE_PLL) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLLRDY))) + { + /* Get PLL clock source and multiplication factor ----------------------*/ + pllmull = RCC->CFGR & RCC_CFGR_PLLMUL; + pllsource = RCC->CFGR & RCC_CFGR_PLLSRC; + pllmull = (pllmull >> RCC_CFGR_PLLMUL_BITNUMBER) + 2U; + predivfactor = (RCC->CFGR2 & RCC_CFGR2_PREDIV) + 1U; + + if (pllsource == RCC_CFGR_PLLSRC_HSE_PREDIV) + { + /* HSE used as PLL clock source : frequency = HSE/PREDIV * PLLMUL */ + frequency = (HSE_VALUE/predivfactor) * pllmull; + } +#if defined(RCC_CR2_HSI48ON) + else if (pllsource == RCC_CFGR_PLLSRC_HSI48_PREDIV) + { + /* HSI48 used as PLL clock source : frequency = HSI48/PREDIV * PLLMUL */ + frequency = (HSI48_VALUE / predivfactor) * pllmull; + } +#endif /* RCC_CR2_HSI48ON */ + else + { +#if defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F078xx) || defined(STM32F072xB) || defined(STM32F070xB) + /* HSI used as PLL clock source : frequency = HSI/PREDIV * PLLMUL */ + frequency = (HSI_VALUE / predivfactor) * pllmull; +#else + /* HSI used as PLL clock source : frequency = HSI/2U * PLLMUL */ + frequency = (HSI_VALUE >> 1U) * pllmull; +#endif /* STM32F042x6 || STM32F048xx || STM32F072xB || STM32F078xx || STM32F070xB */ + } + } +#if defined(RCC_CR2_HSI48ON) + /* Check if HSI48 is ready and if USB clock selection is HSI48 */ + else if ((srcclk == RCC_USBCLKSOURCE_HSI48) && (HAL_IS_BIT_SET(RCC->CR2, RCC_CR2_HSI48RDY))) + { + frequency = HSI48_VALUE; + } +#endif /* RCC_CR2_HSI48ON */ + break; + } +#endif /* USB */ +#if defined(CEC) + case RCC_PERIPHCLK_CEC: + { + /* Get the current CEC source */ + srcclk = __HAL_RCC_GET_CEC_SOURCE(); + + /* Check if HSI is ready and if CEC clock selection is HSI */ + if ((srcclk == RCC_CECCLKSOURCE_HSI) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY))) + { + frequency = HSI_VALUE; + } + /* Check if LSE is ready and if CEC clock selection is LSE */ + else if ((srcclk == RCC_CECCLKSOURCE_LSE) && (HAL_IS_BIT_SET(RCC->BDCR, RCC_BDCR_LSERDY))) + { + frequency = LSE_VALUE; + } + break; + } +#endif /* CEC */ + default: + { + break; + } + } + return(frequency); +} + +/** + * @} + */ + +#if defined(CRS) + +/** @defgroup RCCEx_Exported_Functions_Group3 Extended Clock Recovery System Control functions + * @brief Extended Clock Recovery System Control functions + * +@verbatim + =============================================================================== + ##### Extended Clock Recovery System Control functions ##### + =============================================================================== + [..] + For devices with Clock Recovery System feature (CRS), RCC Extension HAL driver can be used as follows: + + (#) In System clock config, HSI48 needs to be enabled + + (#) Enable CRS clock in IP MSP init which will use CRS functions + + (#) Call CRS functions as follows: + (##) Prepare synchronization configuration necessary for HSI48 calibration + (+++) Default values can be set for frequency Error Measurement (reload and error limit) + and also HSI48 oscillator smooth trimming. + (+++) Macro __HAL_RCC_CRS_RELOADVALUE_CALCULATE can be also used to calculate + directly reload value with target and synchronization frequencies values + (##) Call function HAL_RCCEx_CRSConfig which + (+++) Reset CRS registers to their default values. + (+++) Configure CRS registers with synchronization configuration + (+++) Enable automatic calibration and frequency error counter feature + Note: When using USB LPM (Link Power Management) and the device is in Sleep mode, the + periodic USB SOF will not be generated by the host. No SYNC signal will therefore be + provided to the CRS to calibrate the HSI48 on the run. To guarantee the required clock + precision after waking up from Sleep mode, the LSE or reference clock on the GPIOs + should be used as SYNC signal. + + (##) A polling function is provided to wait for complete synchronization + (+++) Call function HAL_RCCEx_CRSWaitSynchronization() + (+++) According to CRS status, user can decide to adjust again the calibration or continue + application if synchronization is OK + + (#) User can retrieve information related to synchronization in calling function + HAL_RCCEx_CRSGetSynchronizationInfo() + + (#) Regarding synchronization status and synchronization information, user can try a new calibration + in changing synchronization configuration and call again HAL_RCCEx_CRSConfig. + Note: When the SYNC event is detected during the downcounting phase (before reaching the zero value), + it means that the actual frequency is lower than the target (and so, that the TRIM value should be + incremented), while when it is detected during the upcounting phase it means that the actual frequency + is higher (and that the TRIM value should be decremented). + + (#) In interrupt mode, user can resort to the available macros (__HAL_RCC_CRS_XXX_IT). Interrupts will go + through CRS Handler (RCC_IRQn/RCC_IRQHandler) + (++) Call function HAL_RCCEx_CRSConfig() + (++) Enable RCC_IRQn (thanks to NVIC functions) + (++) Enable CRS interrupt (__HAL_RCC_CRS_ENABLE_IT) + (++) Implement CRS status management in the following user callbacks called from + HAL_RCCEx_CRS_IRQHandler(): + (+++) HAL_RCCEx_CRS_SyncOkCallback() + (+++) HAL_RCCEx_CRS_SyncWarnCallback() + (+++) HAL_RCCEx_CRS_ExpectedSyncCallback() + (+++) HAL_RCCEx_CRS_ErrorCallback() + + (#) To force a SYNC EVENT, user can use the function HAL_RCCEx_CRSSoftwareSynchronizationGenerate(). + This function can be called before calling HAL_RCCEx_CRSConfig (for instance in Systick handler) + +@endverbatim + * @{ + */ + +/** + * @brief Start automatic synchronization for polling mode + * @param pInit Pointer on RCC_CRSInitTypeDef structure + * @retval None + */ +void HAL_RCCEx_CRSConfig(RCC_CRSInitTypeDef *pInit) +{ + uint32_t value = 0U; + + /* Check the parameters */ + assert_param(IS_RCC_CRS_SYNC_DIV(pInit->Prescaler)); + assert_param(IS_RCC_CRS_SYNC_SOURCE(pInit->Source)); + assert_param(IS_RCC_CRS_SYNC_POLARITY(pInit->Polarity)); + assert_param(IS_RCC_CRS_RELOADVALUE(pInit->ReloadValue)); + assert_param(IS_RCC_CRS_ERRORLIMIT(pInit->ErrorLimitValue)); + assert_param(IS_RCC_CRS_HSI48CALIBRATION(pInit->HSI48CalibrationValue)); + + /* CONFIGURATION */ + + /* Before configuration, reset CRS registers to their default values*/ + __HAL_RCC_CRS_FORCE_RESET(); + __HAL_RCC_CRS_RELEASE_RESET(); + + /* Set the SYNCDIV[2:0] bits according to Prescaler value */ + /* Set the SYNCSRC[1:0] bits according to Source value */ + /* Set the SYNCSPOL bit according to Polarity value */ + value = (pInit->Prescaler | pInit->Source | pInit->Polarity); + /* Set the RELOAD[15:0] bits according to ReloadValue value */ + value |= pInit->ReloadValue; + /* Set the FELIM[7:0] bits according to ErrorLimitValue value */ + value |= (pInit->ErrorLimitValue << CRS_CFGR_FELIM_BITNUMBER); + WRITE_REG(CRS->CFGR, value); + + /* Adjust HSI48 oscillator smooth trimming */ + /* Set the TRIM[5:0] bits according to RCC_CRS_HSI48CalibrationValue value */ + MODIFY_REG(CRS->CR, CRS_CR_TRIM, (pInit->HSI48CalibrationValue << CRS_CR_TRIM_BITNUMBER)); + + /* START AUTOMATIC SYNCHRONIZATION*/ + + /* Enable Automatic trimming & Frequency error counter */ + SET_BIT(CRS->CR, CRS_CR_AUTOTRIMEN | CRS_CR_CEN); +} + +/** + * @brief Generate the software synchronization event + * @retval None + */ +void HAL_RCCEx_CRSSoftwareSynchronizationGenerate(void) +{ + SET_BIT(CRS->CR, CRS_CR_SWSYNC); +} + +/** + * @brief Return synchronization info + * @param pSynchroInfo Pointer on RCC_CRSSynchroInfoTypeDef structure + * @retval None + */ +void HAL_RCCEx_CRSGetSynchronizationInfo(RCC_CRSSynchroInfoTypeDef *pSynchroInfo) +{ + /* Check the parameter */ + assert_param(pSynchroInfo != NULL); + + /* Get the reload value */ + pSynchroInfo->ReloadValue = (uint32_t)(READ_BIT(CRS->CFGR, CRS_CFGR_RELOAD)); + + /* Get HSI48 oscillator smooth trimming */ + pSynchroInfo->HSI48CalibrationValue = (uint32_t)(READ_BIT(CRS->CR, CRS_CR_TRIM) >> CRS_CR_TRIM_BITNUMBER); + + /* Get Frequency error capture */ + pSynchroInfo->FreqErrorCapture = (uint32_t)(READ_BIT(CRS->ISR, CRS_ISR_FECAP) >> CRS_ISR_FECAP_BITNUMBER); + + /* Get Frequency error direction */ + pSynchroInfo->FreqErrorDirection = (uint32_t)(READ_BIT(CRS->ISR, CRS_ISR_FEDIR)); +} + +/** +* @brief Wait for CRS Synchronization status. +* @param Timeout Duration of the timeout +* @note Timeout is based on the maximum time to receive a SYNC event based on synchronization +* frequency. +* @note If Timeout set to HAL_MAX_DELAY, HAL_TIMEOUT will be never returned. +* @retval Combination of Synchronization status +* This parameter can be a combination of the following values: +* @arg @ref RCC_CRS_TIMEOUT +* @arg @ref RCC_CRS_SYNCOK +* @arg @ref RCC_CRS_SYNCWARN +* @arg @ref RCC_CRS_SYNCERR +* @arg @ref RCC_CRS_SYNCMISS +* @arg @ref RCC_CRS_TRIMOVF +*/ +uint32_t HAL_RCCEx_CRSWaitSynchronization(uint32_t Timeout) +{ + uint32_t crsstatus = RCC_CRS_NONE; + uint32_t tickstart = 0U; + + /* Get timeout */ + tickstart = HAL_GetTick(); + + /* Wait for CRS flag or timeout detection */ + do + { + if(Timeout != HAL_MAX_DELAY) + { + if((Timeout == 0U) || ((HAL_GetTick() - tickstart) > Timeout)) + { + crsstatus = RCC_CRS_TIMEOUT; + } + } + /* Check CRS SYNCOK flag */ + if(__HAL_RCC_CRS_GET_FLAG(RCC_CRS_FLAG_SYNCOK)) + { + /* CRS SYNC event OK */ + crsstatus |= RCC_CRS_SYNCOK; + + /* Clear CRS SYNC event OK bit */ + __HAL_RCC_CRS_CLEAR_FLAG(RCC_CRS_FLAG_SYNCOK); + } + + /* Check CRS SYNCWARN flag */ + if(__HAL_RCC_CRS_GET_FLAG(RCC_CRS_FLAG_SYNCWARN)) + { + /* CRS SYNC warning */ + crsstatus |= RCC_CRS_SYNCWARN; + + /* Clear CRS SYNCWARN bit */ + __HAL_RCC_CRS_CLEAR_FLAG(RCC_CRS_FLAG_SYNCWARN); + } + + /* Check CRS TRIM overflow flag */ + if(__HAL_RCC_CRS_GET_FLAG(RCC_CRS_FLAG_TRIMOVF)) + { + /* CRS SYNC Error */ + crsstatus |= RCC_CRS_TRIMOVF; + + /* Clear CRS Error bit */ + __HAL_RCC_CRS_CLEAR_FLAG(RCC_CRS_FLAG_TRIMOVF); + } + + /* Check CRS Error flag */ + if(__HAL_RCC_CRS_GET_FLAG(RCC_CRS_FLAG_SYNCERR)) + { + /* CRS SYNC Error */ + crsstatus |= RCC_CRS_SYNCERR; + + /* Clear CRS Error bit */ + __HAL_RCC_CRS_CLEAR_FLAG(RCC_CRS_FLAG_SYNCERR); + } + + /* Check CRS SYNC Missed flag */ + if(__HAL_RCC_CRS_GET_FLAG(RCC_CRS_FLAG_SYNCMISS)) + { + /* CRS SYNC Missed */ + crsstatus |= RCC_CRS_SYNCMISS; + + /* Clear CRS SYNC Missed bit */ + __HAL_RCC_CRS_CLEAR_FLAG(RCC_CRS_FLAG_SYNCMISS); + } + + /* Check CRS Expected SYNC flag */ + if(__HAL_RCC_CRS_GET_FLAG(RCC_CRS_FLAG_ESYNC)) + { + /* frequency error counter reached a zero value */ + __HAL_RCC_CRS_CLEAR_FLAG(RCC_CRS_FLAG_ESYNC); + } + } while(RCC_CRS_NONE == crsstatus); + + return crsstatus; +} + +/** + * @brief Handle the Clock Recovery System interrupt request. + * @retval None + */ +void HAL_RCCEx_CRS_IRQHandler(void) +{ + uint32_t crserror = RCC_CRS_NONE; + /* Get current IT flags and IT sources values */ + uint32_t itflags = READ_REG(CRS->ISR); + uint32_t itsources = READ_REG(CRS->CR); + + /* Check CRS SYNCOK flag */ + if(((itflags & RCC_CRS_FLAG_SYNCOK) != RESET) && ((itsources & RCC_CRS_IT_SYNCOK) != RESET)) + { + /* Clear CRS SYNC event OK flag */ + WRITE_REG(CRS->ICR, CRS_ICR_SYNCOKC); + + /* user callback */ + HAL_RCCEx_CRS_SyncOkCallback(); + } + /* Check CRS SYNCWARN flag */ + else if(((itflags & RCC_CRS_FLAG_SYNCWARN) != RESET) && ((itsources & RCC_CRS_IT_SYNCWARN) != RESET)) + { + /* Clear CRS SYNCWARN flag */ + WRITE_REG(CRS->ICR, CRS_ICR_SYNCWARNC); + + /* user callback */ + HAL_RCCEx_CRS_SyncWarnCallback(); + } + /* Check CRS Expected SYNC flag */ + else if(((itflags & RCC_CRS_FLAG_ESYNC) != RESET) && ((itsources & RCC_CRS_IT_ESYNC) != RESET)) + { + /* frequency error counter reached a zero value */ + WRITE_REG(CRS->ICR, CRS_ICR_ESYNCC); + + /* user callback */ + HAL_RCCEx_CRS_ExpectedSyncCallback(); + } + /* Check CRS Error flags */ + else + { + if(((itflags & RCC_CRS_FLAG_ERR) != RESET) && ((itsources & RCC_CRS_IT_ERR) != RESET)) + { + if((itflags & RCC_CRS_FLAG_SYNCERR) != RESET) + { + crserror |= RCC_CRS_SYNCERR; + } + if((itflags & RCC_CRS_FLAG_SYNCMISS) != RESET) + { + crserror |= RCC_CRS_SYNCMISS; + } + if((itflags & RCC_CRS_FLAG_TRIMOVF) != RESET) + { + crserror |= RCC_CRS_TRIMOVF; + } + + /* Clear CRS Error flags */ + WRITE_REG(CRS->ICR, CRS_ICR_ERRC); + + /* user error callback */ + HAL_RCCEx_CRS_ErrorCallback(crserror); + } + } +} + +/** + * @brief RCCEx Clock Recovery System SYNCOK interrupt callback. + * @retval none + */ +__weak void HAL_RCCEx_CRS_SyncOkCallback(void) +{ + /* NOTE : This function should not be modified, when the callback is needed, + the @ref HAL_RCCEx_CRS_SyncOkCallback should be implemented in the user file + */ +} + +/** + * @brief RCCEx Clock Recovery System SYNCWARN interrupt callback. + * @retval none + */ +__weak void HAL_RCCEx_CRS_SyncWarnCallback(void) +{ + /* NOTE : This function should not be modified, when the callback is needed, + the @ref HAL_RCCEx_CRS_SyncWarnCallback should be implemented in the user file + */ +} + +/** + * @brief RCCEx Clock Recovery System Expected SYNC interrupt callback. + * @retval none + */ +__weak void HAL_RCCEx_CRS_ExpectedSyncCallback(void) +{ + /* NOTE : This function should not be modified, when the callback is needed, + the @ref HAL_RCCEx_CRS_ExpectedSyncCallback should be implemented in the user file + */ +} + +/** + * @brief RCCEx Clock Recovery System Error interrupt callback. + * @param Error Combination of Error status. + * This parameter can be a combination of the following values: + * @arg @ref RCC_CRS_SYNCERR + * @arg @ref RCC_CRS_SYNCMISS + * @arg @ref RCC_CRS_TRIMOVF + * @retval none + */ +__weak void HAL_RCCEx_CRS_ErrorCallback(uint32_t Error) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(Error); + + /* NOTE : This function should not be modified, when the callback is needed, + the @ref HAL_RCCEx_CRS_ErrorCallback should be implemented in the user file + */ +} + +/** + * @} + */ + +#endif /* CRS */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* HAL_RCC_MODULE_ENABLED */ + +/** + * @} + */ + diff --git a/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.c b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.c new file mode 100644 index 0000000..e9828d1 --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.c @@ -0,0 +1,7627 @@ +/** + ****************************************************************************** + * @file stm32f0xx_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 "stm32f0xx_hal.h" + +/** @addtogroup STM32F0xx_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, const TIM_OC_InitTypeDef *OC_Config); +static void TIM_OC3_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config); +static void TIM_OC4_SetConfig(TIM_TypeDef *TIMx, const 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, + const 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_PERIOD(htim, htim->Init.Period)); + 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, const 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 channel */ + 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_PERIOD(htim, htim->Init.Period)); + 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, const 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 channel */ + 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 channel */ + 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 channel */ + 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 channel */ + 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_PERIOD(htim, htim->Init.Period)); + 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, const 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 channel */ + 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 channel */ + 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 channel */ + 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 channel */ + 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_PERIOD(htim, htim->Init.Period)); + 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 channel */ + 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 channel */ + 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 channel */ + 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 channel */ + 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_PERIOD(htim, htim->Init.Period)); + 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, const 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)); + assert_param(IS_TIM_PERIOD(htim, htim->Init.Period)); + + 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 channel */ + 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 channel */ + 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 channel */ + 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 channel */ + 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, + const 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, const 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, + const 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, const 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, const 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 channel */ + 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 channel */ + 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 channel */ + 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 channel */ + 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 channel */ + 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 channel */ + 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 channel */ + 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 channel) */ + 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 channel */ + 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 channel */ + 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 channel */ + 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 channel */ + 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 channel */ + 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 channel */ + 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 channel */ + 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 channel) */ + 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, + const 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_OCCS | TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP)); + break; + } + case TIM_CLEARINPUTSOURCE_OCREFCLR: + { + /* Clear the OCREF clear selection bit */ + CLEAR_BIT(htim->Instance->SMCR, TIM_SMCR_OCCS); + 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); + + /* Set the OCREF clear selection bit */ + SET_BIT(htim->Instance->SMCR, TIM_SMCR_OCCS); + 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, const 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, const 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, + const 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(const 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; + } + + 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; + } + + 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; + + 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; + } + + 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(const 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(const 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(const 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(const 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(const 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(const 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(const 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(const 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(const 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, const 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, const 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, const 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, const 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, const 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, + const 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/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.c b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.c new file mode 100644 index 0000000..1a3d770 --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.c @@ -0,0 +1,2392 @@ +/** + ****************************************************************************** + * @file stm32f0xx_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 + * + Time OCRef clear 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 "stm32f0xx_hal.h" + +/** @addtogroup STM32F0xx_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, const 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_PERIOD(htim, htim->Init.Period)); + 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 channel 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, const 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 channel */ + 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 channel */ + 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 channel */ + 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, const 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 channel */ + 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 channel */ + 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 channel */ + 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, + const 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, + const 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 TIM14, the parameter can have the following values: + * @arg TIM_TIM14_GPIO: TIM14 TI1 is connected to GPIO + * @arg TIM_TIM14_RTC: TIM14 TI1 is connected to RTC_clock + * @arg TIM_TIM14_HSE: TIM14 TI1 is connected to HSE/32 + * @arg TIM_TIM14_MCO: TIM14 TI1 is connected to MCO + * + * @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); + + /* Set the Timer remapping configuration */ + WRITE_REG(htim->Instance->OR, Remap); + + __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(const 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(const 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/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c new file mode 100644 index 0000000..1e59c23 --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c @@ -0,0 +1,4183 @@ +/** + ****************************************************************************** + * @file stm32f0xx_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 + * + * + ****************************************************************************** + * @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 these UART 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. + (++) UART interrupts handling: + -@@- The specific UART interrupts (Transmission complete interrupt, + RXNE interrupt, RX/TX FIFOs related interrupts and Error Interrupts) + are managed using the macros __HAL_UART_ENABLE_IT() and __HAL_UART_DISABLE_IT() + inside the transmit and receive processes. + (++) 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 channel. + (+++) Enable the DMAx interface clock. + (+++) Configure the declared DMA handle structure with the required Tx/Rx parameters. + (+++) Configure the DMA Tx/Rx channel. + (+++) 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 channel. + + (#) Program the Baud Rate, Word Length, Stop Bit, Parity, Hardware + flow control and Mode (Receiver/Transmitter) in the huart handle Init structure. + + (#) If required, program UART advanced features (TX/RX pins swap, auto Baud rate detection,...) + in the huart handle AdvancedInit 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 UART LIN (Local Interconnection Network) mode, initialize the UART registers + by calling the HAL_LIN_Init() API. + + (#) For the UART Multiprocessor mode, initialize the UART registers + by calling the HAL_MultiProcessor_Init() API. + + (#) For the UART RS485 Driver Enabled mode, initialize the UART registers + by calling the HAL_RS485Ex_Init() API. + + [..] + (@) These API's (HAL_UART_Init(), HAL_HalfDuplex_Init(), HAL_LIN_Init(), HAL_MultiProcessor_Init(), + also configure 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. + (+) WakeupCallback : Wakeup 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. + (+) WakeupCallback : Wakeup 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. + + + @endverbatim + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f0xx_hal.h" + +/** @addtogroup STM32F0xx_HAL_Driver + * @{ + */ + +/** @defgroup UART UART + * @brief HAL UART module driver + * @{ + */ + +#ifdef HAL_UART_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/** @defgroup UART_Private_Constants UART Private Constants + * @{ + */ +#define USART_CR1_FIELDS ((uint32_t)(USART_CR1_M | USART_CR1_PCE | USART_CR1_PS | USART_CR1_TE | USART_CR1_RE | \ + USART_CR1_OVER8)) /*!< UART or USART CR1 fields of parameters set by UART_SetConfig API */ + +#define USART_CR3_FIELDS ((uint32_t)(USART_CR3_RTSE | USART_CR3_CTSE |\ + USART_CR3_ONEBIT)) /*!< UART or USART CR3 fields of parameters set by UART_SetConfig API */ + + +#define UART_BRR_MIN 0x10U /* UART BRR minimum authorized value */ +#define UART_BRR_MAX 0x0000FFFFU /* UART BRR maximum authorized value */ +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/** @addtogroup UART_Private_Functions + * @{ + */ +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_DMARxHalfCplt(DMA_HandleTypeDef *hdma); +static void UART_DMATxHalfCplt(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 void UART_TxISR_8BIT(UART_HandleTypeDef *huart); +static void UART_TxISR_16BIT(UART_HandleTypeDef *huart); +static void UART_EndTransmit_IT(UART_HandleTypeDef *huart); +static void UART_RxISR_8BIT(UART_HandleTypeDef *huart); +static void UART_RxISR_16BIT(UART_HandleTypeDef *huart); +/** + * @} + */ + +/* Private variables ---------------------------------------------------------*/ +/* Exported Constants --------------------------------------------------------*/ +/* 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 the parameters below 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. + (++) Hardware flow control + (++) Receiver/transmitter modes + (++) Over Sampling Method + (++) One-Bit Sampling Method + (+) For the asynchronous mode, the following advanced features can be configured as well: + (++) TX and/or RX pin level inversion + (++) data logical level inversion + (++) RX and TX pins swap + (++) RX overrun detection disabling + (++) DMA disabling on RX error + (++) MSB first on communication line + (++) auto Baud rate detection + [..] + The HAL_UART_Init(), HAL_HalfDuplex_Init(), HAL_LIN_Init()and HAL_MultiProcessor_Init()API + follow respectively the UART asynchronous, UART Half duplex, UART LIN mode + and UART multiprocessor mode configuration procedures (details for the procedures + are available in reference manual). + +@endverbatim + + Depending on the frame length defined by the M1 and M0 bits (7-bit, + 8-bit or 9-bit), the possible UART formats are listed in the + following table. + + Table 1. UART frame format. + +-----------------------------------------------------------------------+ + | M1 bit | M0 bit | PCE bit | UART frame | + |---------|---------|-----------|---------------------------------------| + | 0 | 0 | 0 | | SB | 8 bit data | STB | | + |---------|---------|-----------|---------------------------------------| + | 0 | 0 | 1 | | SB | 7 bit data | PB | STB | | + |---------|---------|-----------|---------------------------------------| + | 0 | 1 | 0 | | SB | 9 bit data | STB | | + |---------|---------|-----------|---------------------------------------| + | 0 | 1 | 1 | | SB | 8 bit data | PB | STB | | + |---------|---------|-----------|---------------------------------------| + | 1 | 0 | 0 | | SB | 7 bit data | STB | | + |---------|---------|-----------|---------------------------------------| + | 1 | 0 | 1 | | SB | 6 bit data | PB | STB | | + +-----------------------------------------------------------------------+ + + * @{ + */ + +/** + * @brief Initialize the UART mode according to the specified + * parameters in the UART_InitTypeDef and initialize the associated handle. + * @param huart UART handle. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart) +{ + /* Check the UART handle allocation */ + if (huart == NULL) + { + return HAL_ERROR; + } + + if (huart->Init.HwFlowCtl != UART_HWCONTROL_NONE) + { + /* Check the parameters */ + assert_param(IS_UART_HWFLOW_INSTANCE(huart->Instance)); + } + else + { + /* Check the parameters */ + assert_param(IS_UART_INSTANCE(huart->Instance)); + } + + 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; + + __HAL_UART_DISABLE(huart); + + /* Set the UART Communication parameters */ + if (UART_SetConfig(huart) == HAL_ERROR) + { + return HAL_ERROR; + } + + if (huart->AdvancedInit.AdvFeatureInit != UART_ADVFEATURE_NO_INIT) + { + UART_AdvFeatureConfig(huart); + } + + /* In asynchronous mode, the following bits must be kept cleared: + - LINEN (if LIN is supported) and CLKEN bits in the USART_CR2 register, + - SCEN (if Smartcard is supported), HDSEL and IREN (if IrDA is supported) bits in the USART_CR3 register.*/ +#if defined (USART_CR2_LINEN) + CLEAR_BIT(huart->Instance->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN)); +#else + CLEAR_BIT(huart->Instance->CR2, USART_CR2_CLKEN); +#endif /* USART_CR2_LINEN */ +#if defined (USART_CR3_SCEN) +#if defined (USART_CR3_IREN) + CLEAR_BIT(huart->Instance->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL | USART_CR3_IREN)); +#else + CLEAR_BIT(huart->Instance->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL)); +#endif /* USART_CR3_IREN */ +#else +#if defined (USART_CR3_IREN) + CLEAR_BIT(huart->Instance->CR3, (USART_CR3_HDSEL | USART_CR3_IREN)); +#else + CLEAR_BIT(huart->Instance->CR3, USART_CR3_HDSEL); +#endif /* USART_CR3_IREN*/ +#endif /* USART_CR3_SCEN */ + + __HAL_UART_ENABLE(huart); + + /* TEACK and/or REACK to check before moving huart->gState and huart->RxState to Ready */ + return (UART_CheckIdleState(huart)); +} + +/** + * @brief Initialize the half-duplex mode according to the specified + * parameters in the UART_InitTypeDef and creates the associated handle. + * @param huart UART handle. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_HalfDuplex_Init(UART_HandleTypeDef *huart) +{ + /* Check the UART handle allocation */ + if (huart == NULL) + { + return HAL_ERROR; + } + + /* Check UART instance */ + assert_param(IS_UART_HALFDUPLEX_INSTANCE(huart->Instance)); + + 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; + + __HAL_UART_DISABLE(huart); + + /* Set the UART Communication parameters */ + if (UART_SetConfig(huart) == HAL_ERROR) + { + return HAL_ERROR; + } + + if (huart->AdvancedInit.AdvFeatureInit != UART_ADVFEATURE_NO_INIT) + { + UART_AdvFeatureConfig(huart); + } + + /* In half-duplex mode, the following bits must be kept cleared: + - LINEN (if LIN is supported) and CLKEN bits in the USART_CR2 register, + - SCEN (if Smartcard is supported) and IREN (if IrDA is supported) bits in the USART_CR3 register.*/ +#if defined (USART_CR2_LINEN) + CLEAR_BIT(huart->Instance->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN)); +#else + CLEAR_BIT(huart->Instance->CR2, USART_CR2_CLKEN); +#endif /* USART_CR2_LINEN */ +#if defined (USART_CR3_SCEN) +#if defined (USART_CR3_IREN) + CLEAR_BIT(huart->Instance->CR3, (USART_CR3_IREN | USART_CR3_SCEN)); +#else + CLEAR_BIT(huart->Instance->CR3, USART_CR3_SCEN); +#endif /* USART_CR3_IREN */ +#else +#if defined (USART_CR3_IREN) + CLEAR_BIT(huart->Instance->CR3, USART_CR3_IREN); +#endif /* USART_CR3_IREN */ +#endif /* 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); + + __HAL_UART_ENABLE(huart); + + /* TEACK and/or REACK to check before moving huart->gState and huart->RxState to Ready */ + return (UART_CheckIdleState(huart)); +} + + +#if defined(USART_CR2_LINEN) +/** + * @brief Initialize the LIN mode according to the specified + * parameters in the UART_InitTypeDef and creates the associated handle. + * @param huart UART handle. + * @param BreakDetectLength Specifies the LIN break detection length. + * This parameter can be one of the following values: + * @arg @ref UART_LINBREAKDETECTLENGTH_10B 10-bit break detection + * @arg @ref 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)); + + /* LIN mode limited to 16-bit oversampling only */ + if (huart->Init.OverSampling == UART_OVERSAMPLING_8) + { + return HAL_ERROR; + } + /* LIN mode limited to 8-bit data length */ + if (huart->Init.WordLength != UART_WORDLENGTH_8B) + { + return HAL_ERROR; + } + + 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; + + __HAL_UART_DISABLE(huart); + + /* Set the UART Communication parameters */ + if (UART_SetConfig(huart) == HAL_ERROR) + { + return HAL_ERROR; + } + + if (huart->AdvancedInit.AdvFeatureInit != UART_ADVFEATURE_NO_INIT) + { + UART_AdvFeatureConfig(huart); + } + + /* In LIN mode, the following bits must be kept cleared: + - LINEN and CLKEN bits in the USART_CR2 register, + - SCEN(if Smartcard is supported) and IREN(if IrDA is supported) bits in the USART_CR3 register.*/ + CLEAR_BIT(huart->Instance->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN)); +#if defined (USART_CR3_SCEN) +#if defined (USART_CR3_IREN) + CLEAR_BIT(huart->Instance->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL | USART_CR3_IREN)); +#else + CLEAR_BIT(huart->Instance->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL)); +#endif /* USART_CR3_IREN */ +#else +#if defined (USART_CR3_IREN) + CLEAR_BIT(huart->Instance->CR3, (USART_CR3_HDSEL | USART_CR3_IREN)); +#else + CLEAR_BIT(huart->Instance->CR3, USART_CR3_HDSEL); +#endif /* USART_CR3_IREN*/ +#endif /* 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. */ + MODIFY_REG(huart->Instance->CR2, USART_CR2_LBDL, BreakDetectLength); + + __HAL_UART_ENABLE(huart); + + /* TEACK and/or REACK to check before moving huart->gState and huart->RxState to Ready */ + return (UART_CheckIdleState(huart)); +} +#endif /* USART_CR2_LINEN */ + + +/** + * @brief Initialize the multiprocessor mode according to the specified + * parameters in the UART_InitTypeDef and initialize the associated handle. + * @param huart UART handle. + * @param Address UART node address (4-, 6-, 7- or 8-bit long). + * @param WakeUpMethod Specifies the UART wakeup method. + * This parameter can be one of the following values: + * @arg @ref UART_WAKEUPMETHOD_IDLELINE WakeUp by an idle line detection + * @arg @ref UART_WAKEUPMETHOD_ADDRESSMARK WakeUp by an address mark + * @note If the user resorts to idle line detection wake up, the Address parameter + * is useless and ignored by the initialization function. + * @note If the user resorts to address mark wake up, the address length detection + * is configured by default to 4 bits only. For the UART to be able to + * manage 6-, 7- or 8-bit long addresses detection, the API + * HAL_MultiProcessorEx_AddressLength_Set() must be called after + * HAL_MultiProcessor_Init(). + * @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 wake up method parameter */ + assert_param(IS_UART_WAKEUPMETHOD(WakeUpMethod)); + + 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; + + __HAL_UART_DISABLE(huart); + + /* Set the UART Communication parameters */ + if (UART_SetConfig(huart) == HAL_ERROR) + { + return HAL_ERROR; + } + + if (huart->AdvancedInit.AdvFeatureInit != UART_ADVFEATURE_NO_INIT) + { + UART_AdvFeatureConfig(huart); + } + + /* In multiprocessor mode, the following bits must be kept cleared: + - LINEN (if LIN is supported) and CLKEN bits in the USART_CR2 register, + - SCEN (if Smartcard is supported), HDSEL and IREN (if IrDA is supported) bits in the USART_CR3 register. */ +#if defined (USART_CR2_LINEN) + CLEAR_BIT(huart->Instance->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN)); +#else + CLEAR_BIT(huart->Instance->CR2, USART_CR2_CLKEN); +#endif /* USART_CR2_LINEN */ +#if defined (USART_CR3_SCEN) +#if defined (USART_CR3_IREN) + CLEAR_BIT(huart->Instance->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL | USART_CR3_IREN)); +#else + CLEAR_BIT(huart->Instance->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL)); +#endif /* USART_CR3_IREN */ +#else +#if defined (USART_CR3_IREN) + CLEAR_BIT(huart->Instance->CR3, (USART_CR3_HDSEL | USART_CR3_IREN)); +#else + CLEAR_BIT(huart->Instance->CR3, USART_CR3_HDSEL); +#endif /* USART_CR3_IREN */ +#endif /* USART_CR3_SCEN */ + + if (WakeUpMethod == UART_WAKEUPMETHOD_ADDRESSMARK) + { + /* If address mark wake up method is chosen, set the USART address node */ + MODIFY_REG(huart->Instance->CR2, USART_CR2_ADD, ((uint32_t)Address << UART_CR2_ADDRESS_LSB_POS)); + } + + /* Set the wake up method by setting the WAKE bit in the CR1 register */ + MODIFY_REG(huart->Instance->CR1, USART_CR1_WAKE, WakeUpMethod); + + __HAL_UART_ENABLE(huart); + + /* TEACK and/or REACK to check before moving huart->gState and huart->RxState to Ready */ + return (UART_CheckIdleState(huart)); +} + + +/** + * @brief DeInitialize the UART peripheral. + * @param huart UART handle. + * @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; + + __HAL_UART_DISABLE(huart); + + huart->Instance->CR1 = 0x0U; + huart->Instance->CR2 = 0x0U; + huart->Instance->CR3 = 0x0U; + +#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; + huart->RxEventType = HAL_UART_RXEVENT_TC; + + __HAL_UNLOCK(huart); + + return HAL_OK; +} + +/** + * @brief Initialize the UART MSP. + * @param huart UART handle. + * @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 can be implemented in the user file + */ +} + +/** + * @brief DeInitialize the UART MSP. + * @param huart UART handle. + * @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 can 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 + * @note The HAL_UART_RegisterCallback() may be called before HAL_UART_Init(), HAL_HalfDuplex_Init(), + * HAL_LIN_Init(), HAL_MultiProcessor_Init() or HAL_RS485Ex_Init() in HAL_UART_STATE_RESET to register + * callbacks for HAL_UART_MSPINIT_CB_ID and HAL_UART_MSPDEINIT_CB_ID + * @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_WAKEUP_CB_ID Wakeup 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) + { + huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK; + + return HAL_ERROR; + } + + 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; + +#if defined(USART_CR1_UESM) +#if defined(USART_CR3_WUFIE) + case HAL_UART_WAKEUP_CB_ID : + huart->WakeupCallback = pCallback; + break; + +#endif /* USART_CR3_WUFIE */ +#endif /* USART_CR1_UESM */ + + case HAL_UART_MSPINIT_CB_ID : + huart->MspInitCallback = pCallback; + break; + + case HAL_UART_MSPDEINIT_CB_ID : + huart->MspDeInitCallback = pCallback; + break; + + default : + huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK; + + 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 : + huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK; + + status = HAL_ERROR; + break; + } + } + else + { + huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK; + + status = HAL_ERROR; + } + + return status; +} + +/** + * @brief Unregister an UART Callback + * UART callaback is redirected to the weak predefined callback + * @note The HAL_UART_UnRegisterCallback() may be called before HAL_UART_Init(), HAL_HalfDuplex_Init(), + * HAL_LIN_Init(), HAL_MultiProcessor_Init() or HAL_RS485Ex_Init() in HAL_UART_STATE_RESET to un-register + * callbacks for HAL_UART_MSPINIT_CB_ID and HAL_UART_MSPDEINIT_CB_ID + * @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_WAKEUP_CB_ID Wakeup 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; + + 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; + +#if defined(USART_CR1_UESM) +#if defined(USART_CR3_WUFIE) + case HAL_UART_WAKEUP_CB_ID : + huart->WakeupCallback = HAL_UARTEx_WakeupCallback; /* Legacy weak WakeupCallback */ + break; + +#endif /* USART_CR3_WUFIE */ +#endif /* USART_CR1_UESM */ + 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 : + huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK; + + 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 : + huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK; + + status = HAL_ERROR; + break; + } + } + else + { + huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK; + + status = HAL_ERROR; + } + + 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/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 mode 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 Send 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. + * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01), + * address of user data buffer containing data to be sent, should be aligned on a half word frontier (16 bits) + * (as sent data will be handled using u16 pointer cast). Depending on compilation chain, + * use of specific alignment compilation directives or pragmas might be required + * to ensure proper alignment for pData. + * @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 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; + + /* Check that a Tx process is not already ongoing */ + if (huart->gState == HAL_UART_STATE_READY) + { + if ((pData == NULL) || (Size == 0U)) + { + return HAL_ERROR; + } + + /* In case of 9bits/No Parity transfer, pData buffer provided as input parameter + should be aligned on a u16 frontier, as data to be filled into TDR will be + handled through a u16 cast. */ + if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE)) + { + if ((((uint32_t)pData) & 1U) != 0U) + { + return HAL_ERROR; + } + } + + 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; + } + + while (huart->TxXferCount > 0U) + { + if (UART_WaitOnFlagUntilTimeout(huart, UART_FLAG_TXE, RESET, tickstart, Timeout) != HAL_OK) + { + + huart->gState = HAL_UART_STATE_READY; + + return HAL_TIMEOUT; + } + if (pdata8bits == NULL) + { + huart->Instance->TDR = (uint16_t)(*pdata16bits & 0x01FFU); + pdata16bits++; + } + else + { + huart->Instance->TDR = (uint8_t)(*pdata8bits & 0xFFU); + pdata8bits++; + } + huart->TxXferCount--; + } + + if (UART_WaitOnFlagUntilTimeout(huart, UART_FLAG_TC, RESET, tickstart, Timeout) != HAL_OK) + { + huart->gState = HAL_UART_STATE_READY; + + 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 Receive 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. + * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01), + * address of user data buffer for storing data to be received, should be aligned on a half word frontier + * (16 bits) (as received data will be handled using u16 pointer cast). Depending on compilation chain, + * use of specific alignment compilation directives or pragmas might be required + * to ensure proper alignment for pData. + * @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. + * @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; + uint16_t uhMask; + 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; + } + + /* In case of 9bits/No Parity transfer, pData buffer provided as input parameter + should be aligned on a u16 frontier, as data to be received from RDR will be + handled through a u16 cast. */ + if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE)) + { + if ((((uint32_t)pData) & 1U) != 0U) + { + return HAL_ERROR; + } + } + + 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; + + /* Computation of UART mask to apply to RDR register */ + UART_MASK_COMPUTATION(huart); + uhMask = huart->Mask; + + /* 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; + } + + /* as long as data have to be received */ + while (huart->RxXferCount > 0U) + { + if (UART_WaitOnFlagUntilTimeout(huart, UART_FLAG_RXNE, RESET, tickstart, Timeout) != HAL_OK) + { + huart->RxState = HAL_UART_STATE_READY; + + return HAL_TIMEOUT; + } + if (pdata8bits == NULL) + { + *pdata16bits = (uint16_t)(huart->Instance->RDR & uhMask); + pdata16bits++; + } + else + { + *pdata8bits = (uint8_t)(huart->Instance->RDR & (uint8_t)uhMask); + 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 Send an amount of data in interrupt 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. + * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01), + * address of user data buffer containing data to be sent, should be aligned on a half word frontier (16 bits) + * (as sent data will be handled using u16 pointer cast). Depending on compilation chain, + * use of specific alignment compilation directives or pragmas might be required + * to ensure proper alignment for pData. + * @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 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; + } + + /* In case of 9bits/No Parity transfer, pData buffer provided as input parameter + should be aligned on a u16 frontier, as data to be filled into TDR will be + handled through a u16 cast. */ + if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE)) + { + if ((((uint32_t)pData) & 1U) != 0U) + { + return HAL_ERROR; + } + } + + huart->pTxBuffPtr = pData; + huart->TxXferSize = Size; + huart->TxXferCount = Size; + huart->TxISR = NULL; + + huart->ErrorCode = HAL_UART_ERROR_NONE; + huart->gState = HAL_UART_STATE_BUSY_TX; + + /* Set the Tx ISR function pointer according to the data word length */ + if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE)) + { + huart->TxISR = UART_TxISR_16BIT; + } + else + { + huart->TxISR = UART_TxISR_8BIT; + } + + /* Enable the Transmit Data Register Empty interrupt */ + ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_TXEIE); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Receive an amount of data in interrupt 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. + * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01), + * address of user data buffer for storing data to be received, should be aligned on a half word frontier + * (16 bits) (as received data will be handled using u16 pointer cast). Depending on compilation chain, + * use of specific alignment compilation directives or pragmas might be required + * to ensure proper alignment for pData. + * @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 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; + } + + /* In case of 9bits/No Parity transfer, pData buffer provided as input parameter + should be aligned on a u16 frontier, as data to be received from RDR will be + handled through a u16 cast. */ + if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE)) + { + if ((((uint32_t)pData) & 1U) != 0U) + { + return HAL_ERROR; + } + } + + /* Set Reception type to Standard reception */ + huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; + + /* Check that USART RTOEN bit is set */ + if (READ_BIT(huart->Instance->CR2, USART_CR2_RTOEN) != 0U) + { + /* Enable the UART Receiver Timeout Interrupt */ + ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_RTOIE); + } + + return (UART_Start_Receive_IT(huart, pData, Size)); + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Send 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. + * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01), + * address of user data buffer containing data to be sent, should be aligned on a half word frontier (16 bits) + * (as sent data will be handled by DMA from halfword frontier). Depending on compilation chain, + * use of specific alignment compilation directives or pragmas might be required + * to ensure proper alignment for pData. + * @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 sent. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_Transmit_DMA(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; + } + + /* In case of 9bits/No Parity transfer, pData buffer provided as input parameter + should be aligned on a u16 frontier, as data copy into TDR will be + handled by DMA from a u16 frontier. */ + if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE)) + { + if ((((uint32_t)pData) & 1U) != 0U) + { + return HAL_ERROR; + } + } + + huart->pTxBuffPtr = pData; + huart->TxXferSize = Size; + huart->TxXferCount = Size; + + huart->ErrorCode = HAL_UART_ERROR_NONE; + huart->gState = HAL_UART_STATE_BUSY_TX; + + if (huart->hdmatx != NULL) + { + /* 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 channel */ + if (HAL_DMA_Start_IT(huart->hdmatx, (uint32_t)huart->pTxBuffPtr, (uint32_t)&huart->Instance->TDR, Size) != HAL_OK) + { + /* Set error code to DMA */ + huart->ErrorCode = HAL_UART_ERROR_DMA; + + /* Restore huart->gState to ready */ + huart->gState = HAL_UART_STATE_READY; + + return HAL_ERROR; + } + } + /* Clear the TC flag in the ICR register */ + __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_TCF); + + /* 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 Receive an amount of data in DMA mode. + * @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 (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. + * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01), + * address of user data buffer for storing data to be received, should be aligned on a half word frontier + * (16 bits) (as received data will be handled by DMA from halfword frontier). Depending on compilation chain, + * use of specific alignment compilation directives or pragmas might be required + * to ensure proper alignment for pData. + * @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 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; + } + + /* In case of 9bits/No Parity transfer, pData buffer provided as input parameter + should be aligned on a u16 frontier, as data copy from RDR will be + handled by DMA from a u16 frontier. */ + if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE)) + { + if ((((uint32_t)pData) & 1U) != 0U) + { + return HAL_ERROR; + } + } + + /* Set Reception type to Standard reception */ + huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; + + /* Check that USART RTOEN bit is set */ + if (READ_BIT(huart->Instance->CR2, USART_CR2_RTOEN) != 0U) + { + /* Enable the UART Receiver Timeout Interrupt */ + ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_RTOIE); + } + + return (UART_Start_Receive_DMA(huart, pData, Size)); + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Pause the DMA Transfer. + * @param huart UART handle. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_DMAPause(UART_HandleTypeDef *huart) +{ + const HAL_UART_StateTypeDef gstate = huart->gState; + const HAL_UART_StateTypeDef rxstate = huart->RxState; + + if ((HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT)) && + (gstate == HAL_UART_STATE_BUSY_TX)) + { + /* Disable the UART DMA Tx request */ + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAT); + } + if ((HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) && + (rxstate == HAL_UART_STATE_BUSY_RX)) + { + /* 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 UART DMA Rx request */ + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); + } + + return HAL_OK; +} + +/** + * @brief Resume the DMA Transfer. + * @param huart UART handle. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_DMAResume(UART_HandleTypeDef *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_FLAG(huart, UART_CLEAR_OREF); + + /* 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); + } + + return HAL_OK; +} + +/** + * @brief Stop the DMA Transfer. + * @param huart UART handle. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_DMAStop(UART_HandleTypeDef *huart) +{ + /* 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() / + HAL_UART_TxHalfCpltCallback / HAL_UART_RxHalfCpltCallback: + indeed, when HAL_DMA_Abort() API is called, the DMA TX/RX Transfer or Half Transfer complete + interrupt is generated if the DMA transfer interruption occurs at the middle or at the end of + the stream and the corresponding call back is executed. */ + + const HAL_UART_StateTypeDef gstate = huart->gState; + const HAL_UART_StateTypeDef rxstate = huart->RxState; + + /* Stop UART DMA Tx request if ongoing */ + if ((HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT)) && + (gstate == HAL_UART_STATE_BUSY_TX)) + { + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAT); + + /* Abort the UART DMA Tx channel */ + if (huart->hdmatx != 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; + } + } + } + + UART_EndTxTransfer(huart); + } + + /* Stop UART DMA Rx request if ongoing */ + if ((HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) && + (rxstate == HAL_UART_STATE_BUSY_RX)) + { + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); + + /* Abort the UART DMA Rx channel */ + if (huart->hdmarx != 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; + } + } + } + + UART_EndRxTransfer(huart); + } + + return HAL_OK; +} + +/** + * @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)); + } + + /* Abort the UART DMA Tx channel if enabled */ + if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT)) + { + /* Disable the UART DMA Tx request if enabled */ + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAT); + + /* Abort the UART DMA Tx channel : 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; + } + } + } + } + + /* Abort the UART DMA Rx channel if enabled */ + if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) + { + /* Disable the UART DMA Rx request if enabled */ + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); + + /* Abort the UART DMA Rx channel : 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 = 0U; + huart->RxXferCount = 0U; + + /* Clear the Error flags in the ICR register */ + __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_OREF | UART_CLEAR_NEF | UART_CLEAR_PEF | UART_CLEAR_FEF); + + + /* Discard the received data */ + __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST); + + /* 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; + + huart->ErrorCode = HAL_UART_ERROR_NONE; + + 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)); + + /* Abort the UART DMA Tx channel if enabled */ + if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT)) + { + /* Disable the UART DMA Tx request if enabled */ + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAT); + + /* Abort the UART DMA Tx channel : 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 = 0U; + + + /* 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)); + } + + /* Abort the UART DMA Rx channel if enabled */ + if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) + { + /* Disable the UART DMA Rx request if enabled */ + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); + + /* Abort the UART DMA Rx channel : 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 = 0U; + + /* Clear the Error flags in the ICR register */ + __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_OREF | UART_CLEAR_NEF | UART_CLEAR_PEF | UART_CLEAR_FEF); + + /* Discard the received data */ + __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST); + + /* 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 = 1U; + + /* Disable 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; + } + } + + /* Abort the UART DMA Tx channel 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 channel : 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 = 0U; + } + } + } + + /* Abort the UART DMA Rx channel if enabled */ + if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) + { + /* Disable the UART DMA Rx request if enabled */ + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); + + /* Abort the UART DMA Rx channel : 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 = 1U; + } + else + { + abortcplt = 0U; + } + } + } + + /* if no DMA abort complete callback execution is required => call user Abort Complete callback */ + if (abortcplt == 1U) + { + /* Reset Tx and Rx transfer counters */ + huart->TxXferCount = 0U; + huart->RxXferCount = 0U; + + /* Clear ISR function pointers */ + huart->RxISR = NULL; + huart->TxISR = NULL; + + /* Reset errorCode */ + huart->ErrorCode = HAL_UART_ERROR_NONE; + + /* Clear the Error flags in the ICR register */ + __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_OREF | UART_CLEAR_NEF | UART_CLEAR_PEF | UART_CLEAR_FEF); + + + /* Discard the received data */ + __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST); + + /* 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 interrupts */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_TXEIE | USART_CR1_TCIE)); + + /* Abort the UART DMA Tx channel if enabled */ + if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT)) + { + /* Disable the UART DMA Tx request if enabled */ + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAT); + + /* Abort the UART DMA Tx channel : use non blocking DMA Abort API (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 = 0U; + + /* Clear TxISR function pointers */ + huart->TxISR = NULL; + + /* 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 = 0U; + + /* Clear TxISR function pointers */ + huart->TxISR = NULL; + + + /* 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)); + } + + /* Abort the UART DMA Rx channel if enabled */ + if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) + { + /* Disable the UART DMA Rx request if enabled */ + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); + + /* Abort the UART DMA Rx channel : use non blocking DMA Abort API (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 = 0U; + + /* Clear RxISR function pointer */ + huart->pRxBuffPtr = NULL; + + /* Clear the Error flags in the ICR register */ + __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_OREF | UART_CLEAR_NEF | UART_CLEAR_PEF | UART_CLEAR_FEF); + + /* Discard the received data */ + __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST); + + /* 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 = 0U; + + /* Clear RxISR function pointer */ + huart->pRxBuffPtr = NULL; + + /* Clear the Error flags in the ICR register */ + __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_OREF | UART_CLEAR_NEF | UART_CLEAR_PEF | UART_CLEAR_FEF); + + /* 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 Handle UART interrupt request. + * @param huart UART handle. + * @retval None + */ +void HAL_UART_IRQHandler(UART_HandleTypeDef *huart) +{ + uint32_t isrflags = READ_REG(huart->Instance->ISR); + uint32_t cr1its = READ_REG(huart->Instance->CR1); + uint32_t cr3its = READ_REG(huart->Instance->CR3); + + uint32_t errorflags; + uint32_t errorcode; + + /* If no error occurs */ + errorflags = (isrflags & (uint32_t)(USART_ISR_PE | USART_ISR_FE | USART_ISR_ORE | USART_ISR_NE | USART_ISR_RTOF)); + if (errorflags == 0U) + { + /* UART in mode Receiver ---------------------------------------------------*/ + if (((isrflags & USART_ISR_RXNE) != 0U) + && ((cr1its & USART_CR1_RXNEIE) != 0U)) + { + if (huart->RxISR != NULL) + { + huart->RxISR(huart); + } + return; + } + } + + /* If some errors occur */ + if ((errorflags != 0U) + && (((cr3its & USART_CR3_EIE) != 0U) + || ((cr1its & (USART_CR1_RXNEIE | USART_CR1_PEIE | USART_CR1_RTOIE)) != 0U))) + { + /* UART parity error interrupt occurred -------------------------------------*/ + if (((isrflags & USART_ISR_PE) != 0U) && ((cr1its & USART_CR1_PEIE) != 0U)) + { + __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_PEF); + + huart->ErrorCode |= HAL_UART_ERROR_PE; + } + + /* UART frame error interrupt occurred --------------------------------------*/ + if (((isrflags & USART_ISR_FE) != 0U) && ((cr3its & USART_CR3_EIE) != 0U)) + { + __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_FEF); + + huart->ErrorCode |= HAL_UART_ERROR_FE; + } + + /* UART noise error interrupt occurred --------------------------------------*/ + if (((isrflags & USART_ISR_NE) != 0U) && ((cr3its & USART_CR3_EIE) != 0U)) + { + __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_NEF); + + huart->ErrorCode |= HAL_UART_ERROR_NE; + } + + /* UART Over-Run interrupt occurred -----------------------------------------*/ + if (((isrflags & USART_ISR_ORE) != 0U) + && (((cr1its & USART_CR1_RXNEIE) != 0U) || + ((cr3its & USART_CR3_EIE) != 0U))) + { + __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_OREF); + + huart->ErrorCode |= HAL_UART_ERROR_ORE; + } + + /* UART Receiver Timeout interrupt occurred ---------------------------------*/ + if (((isrflags & USART_ISR_RTOF) != 0U) && ((cr1its & USART_CR1_RTOIE) != 0U)) + { + __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_RTOF); + + huart->ErrorCode |= HAL_UART_ERROR_RTO; + } + + /* Call UART Error Call back function if need be ----------------------------*/ + if (huart->ErrorCode != HAL_UART_ERROR_NONE) + { + /* UART in mode Receiver --------------------------------------------------*/ + if (((isrflags & USART_ISR_RXNE) != 0U) + && ((cr1its & USART_CR1_RXNEIE) != 0U)) + { + if (huart->RxISR != NULL) + { + huart->RxISR(huart); + } + } + + /* If Error is to be considered as blocking : + - Receiver Timeout error in Reception + - Overrun error in Reception + - any error occurs in DMA mode reception + */ + errorcode = huart->ErrorCode; + if ((HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) || + ((errorcode & (HAL_UART_ERROR_RTO | HAL_UART_ERROR_ORE)) != 0U)) + { + /* 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); + + /* Abort the UART DMA Rx channel if enabled */ + if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) + { + /* Disable the UART DMA Rx request if enabled */ + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); + + /* Abort the UART DMA Rx channel */ + 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; + + /* 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 + { + /* 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_ISR_IDLE) != 0U) + && ((cr1its & USART_ISR_IDLE) != 0U)) + { + __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_IDLEF); + + /* 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); + } + + /* Initialize type of RxEvent that correspond to RxEvent callback execution; + In this case, Rx Event type is Idle Event */ + huart->RxEventType = HAL_UART_RXEVENT_IDLE; + +#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; + + /* Clear RxISR function pointer */ + huart->RxISR = NULL; + + ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE); + + /* Initialize type of RxEvent that correspond to RxEvent callback execution; + In this case, Rx Event type is Idle Event */ + huart->RxEventType = HAL_UART_RXEVENT_IDLE; + +#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; + } + } +#if defined(USART_CR1_UESM) +#if defined(USART_CR3_WUFIE) + + /* UART wakeup from Stop mode interrupt occurred ---------------------------*/ + if (((isrflags & USART_ISR_WUF) != 0U) && ((cr3its & USART_CR3_WUFIE) != 0U)) + { + __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_WUF); + + /* UART Rx state is not reset as a reception process might be ongoing. + If UART handle state fields need to be reset to READY, this could be done in Wakeup callback */ + +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /* Call registered Wakeup Callback */ + huart->WakeupCallback(huart); +#else + /* Call legacy weak Wakeup Callback */ + HAL_UARTEx_WakeupCallback(huart); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + return; + } +#endif /* USART_CR3_WUFIE */ +#endif /* USART_CR1_UESM */ + + /* UART in mode Transmitter ------------------------------------------------*/ + if (((isrflags & USART_ISR_TXE) != 0U) + && ((cr1its & USART_CR1_TXEIE) != 0U)) + { + if (huart->TxISR != NULL) + { + huart->TxISR(huart); + } + return; + } + + /* UART in mode Transmitter (transmission end) -----------------------------*/ + if (((isrflags & USART_ISR_TC) != 0U) && ((cr1its & USART_CR1_TCIE) != 0U)) + { + UART_EndTransmit_IT(huart); + return; + } + +} + +/** + * @brief Tx Transfer completed callback. + * @param huart UART handle. + * @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 can be implemented in the user file. + */ +} + +/** + * @brief Tx Half Transfer completed callback. + * @param huart UART handle. + * @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 can be implemented in the user file. + */ +} + +/** + * @brief Rx Transfer completed callback. + * @param huart UART handle. + * @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 can be implemented in the user file. + */ +} + +/** + * @brief Rx Half Transfer completed callback. + * @param huart UART handle. + * @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 can be implemented in the user file. + */ +} + +/** + * @brief UART error callback. + * @param huart UART handle. + * @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 can 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_UART_ReceiverTimeout_Config() API allows to configure the receiver timeout value on the fly + (+) HAL_UART_EnableReceiverTimeout() API enables the receiver timeout feature + (+) HAL_UART_DisableReceiverTimeout() API disables the receiver timeout feature + (+) HAL_MultiProcessor_EnableMuteMode() API enables mute mode + (+) HAL_MultiProcessor_DisableMuteMode() API disables mute mode + (+) HAL_MultiProcessor_EnterMuteMode() API enters mute mode + (+) UART_SetConfig() API configures the UART peripheral + (+) UART_AdvFeatureConfig() API optionally configures the UART advanced features + (+) UART_CheckIdleState() API ensures that TEACK and/or REACK are set after initialization + (+) HAL_HalfDuplex_EnableTransmitter() API disables receiver and enables transmitter + (+) HAL_HalfDuplex_EnableReceiver() API disables transmitter and enables receiver + (+) HAL_LIN_SendBreak() API transmits the break characters +@endverbatim + * @{ + */ + +/** + * @brief Update on the fly the receiver timeout value in RTOR register. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @param TimeoutValue receiver timeout value in number of baud blocks. The timeout + * value must be less or equal to 0x0FFFFFFFF. + * @retval None + */ +void HAL_UART_ReceiverTimeout_Config(UART_HandleTypeDef *huart, uint32_t TimeoutValue) +{ + assert_param(IS_UART_RECEIVER_TIMEOUT_VALUE(TimeoutValue)); + MODIFY_REG(huart->Instance->RTOR, USART_RTOR_RTO, TimeoutValue); +} + +/** + * @brief Enable the UART receiver timeout feature. + * @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_EnableReceiverTimeout(UART_HandleTypeDef *huart) +{ + if (huart->gState == HAL_UART_STATE_READY) + { + /* Process Locked */ + __HAL_LOCK(huart); + + huart->gState = HAL_UART_STATE_BUSY; + + /* Set the USART RTOEN bit */ + SET_BIT(huart->Instance->CR2, USART_CR2_RTOEN); + + huart->gState = HAL_UART_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(huart); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Disable the UART receiver timeout feature. + * @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_DisableReceiverTimeout(UART_HandleTypeDef *huart) +{ + if (huart->gState == HAL_UART_STATE_READY) + { + /* Process Locked */ + __HAL_LOCK(huart); + + huart->gState = HAL_UART_STATE_BUSY; + + /* Clear the USART RTOEN bit */ + CLEAR_BIT(huart->Instance->CR2, USART_CR2_RTOEN); + + huart->gState = HAL_UART_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(huart); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Enable UART in mute mode (does not mean UART enters mute mode; + * to enter mute mode, HAL_MultiProcessor_EnterMuteMode() API must be called). + * @param huart UART handle. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_MultiProcessor_EnableMuteMode(UART_HandleTypeDef *huart) +{ + __HAL_LOCK(huart); + + huart->gState = HAL_UART_STATE_BUSY; + + /* Enable USART mute mode by setting the MME bit in the CR1 register */ + ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_MME); + + huart->gState = HAL_UART_STATE_READY; + + return (UART_CheckIdleState(huart)); +} + +/** + * @brief Disable UART mute mode (does not mean the UART actually exits mute mode + * as it may not have been in mute mode at this very moment). + * @param huart UART handle. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_MultiProcessor_DisableMuteMode(UART_HandleTypeDef *huart) +{ + __HAL_LOCK(huart); + + huart->gState = HAL_UART_STATE_BUSY; + + /* Disable USART mute mode by clearing the MME bit in the CR1 register */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_MME); + + huart->gState = HAL_UART_STATE_READY; + + return (UART_CheckIdleState(huart)); +} + +/** + * @brief Enter UART mute mode (means UART actually enters mute mode). + * @note To exit from mute mode, HAL_MultiProcessor_DisableMuteMode() API must be called. + * @param huart UART handle. + * @retval None + */ +void HAL_MultiProcessor_EnterMuteMode(UART_HandleTypeDef *huart) +{ + __HAL_UART_SEND_REQ(huart, UART_MUTE_MODE_REQUEST); +} + +/** + * @brief Enable the UART transmitter and disable the UART receiver. + * @param huart UART handle. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_HalfDuplex_EnableTransmitter(UART_HandleTypeDef *huart) +{ + __HAL_LOCK(huart); + huart->gState = HAL_UART_STATE_BUSY; + + /* Clear TE and RE bits */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_TE | USART_CR1_RE)); + + /* Enable the USART's transmit interface by setting the TE bit in the USART CR1 register */ + ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_TE); + + huart->gState = HAL_UART_STATE_READY; + + __HAL_UNLOCK(huart); + + return HAL_OK; +} + +/** + * @brief Enable the UART receiver and disable the UART transmitter. + * @param huart UART handle. + * @retval HAL status. + */ +HAL_StatusTypeDef HAL_HalfDuplex_EnableReceiver(UART_HandleTypeDef *huart) +{ + __HAL_LOCK(huart); + huart->gState = HAL_UART_STATE_BUSY; + + /* Clear TE and RE bits */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_TE | USART_CR1_RE)); + + /* Enable the USART's receive interface by setting the RE bit in the USART CR1 register */ + ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_RE); + + huart->gState = HAL_UART_STATE_READY; + + __HAL_UNLOCK(huart); + + return HAL_OK; +} + + +#if defined(USART_CR2_LINEN) +/** + * @brief Transmit break characters. + * @param huart UART handle. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_LIN_SendBreak(UART_HandleTypeDef *huart) +{ + /* Check the parameters */ + assert_param(IS_UART_LIN_INSTANCE(huart->Instance)); + + __HAL_LOCK(huart); + + huart->gState = HAL_UART_STATE_BUSY; + + /* Send break characters */ + __HAL_UART_SEND_REQ(huart, UART_SENDBREAK_REQUEST); + + huart->gState = HAL_UART_STATE_READY; + + __HAL_UNLOCK(huart); + + return HAL_OK; +} +#endif /* USART_CR2_LINEN */ + +/** + * @} + */ + +/** @defgroup UART_Exported_Functions_Group4 Peripheral State and Error functions + * @brief UART Peripheral State functions + * +@verbatim + ============================================================================== + ##### Peripheral State and Error functions ##### + ============================================================================== + [..] + This subsection provides functions allowing to : + (+) Return the UART handle state. + (+) Return the UART handle error code + +@endverbatim + * @{ + */ + +/** + * @brief Return the UART handle state. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART. + * @retval HAL state + */ +HAL_UART_StateTypeDef HAL_UART_GetState(const UART_HandleTypeDef *huart) +{ + uint32_t temp1; + uint32_t temp2; + temp1 = huart->gState; + temp2 = huart->RxState; + + return (HAL_UART_StateTypeDef)(temp1 | temp2); +} + +/** + * @brief Return the UART handle 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(const 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 */ +#if defined(USART_CR1_UESM) +#if defined(USART_CR3_WUFIE) + huart->WakeupCallback = HAL_UARTEx_WakeupCallback; /* Legacy weak WakeupCallback */ +#endif /* USART_CR3_WUFIE */ +#endif /* USART_CR1_UESM */ + huart->RxEventCallback = HAL_UARTEx_RxEventCallback; /* Legacy weak RxEventCallback */ + +} +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + +/** + * @brief Configure the UART peripheral. + * @param huart UART handle. + * @retval HAL status + */ +HAL_StatusTypeDef UART_SetConfig(UART_HandleTypeDef *huart) +{ + uint32_t tmpreg; + uint16_t brrtemp; + UART_ClockSourceTypeDef clocksource; + uint32_t usartdiv; + HAL_StatusTypeDef ret = HAL_OK; + uint32_t pclk; + + /* Check the parameters */ + assert_param(IS_UART_BAUDRATE(huart->Init.BaudRate)); + assert_param(IS_UART_WORD_LENGTH(huart->Init.WordLength)); + assert_param(IS_UART_STOPBITS(huart->Init.StopBits)); + assert_param(IS_UART_ONE_BIT_SAMPLE(huart->Init.OneBitSampling)); + + assert_param(IS_UART_PARITY(huart->Init.Parity)); + assert_param(IS_UART_MODE(huart->Init.Mode)); + assert_param(IS_UART_HARDWARE_FLOW_CONTROL(huart->Init.HwFlowCtl)); + assert_param(IS_UART_OVERSAMPLING(huart->Init.OverSampling)); + + /*-------------------------- USART CR1 Configuration -----------------------*/ + /* Clear M, PCE, PS, TE, RE and OVER8 bits and configure + * the UART Word Length, Parity, Mode and oversampling: + * 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, USART_CR1_FIELDS, tmpreg); + + /*-------------------------- 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 CR3 Configuration -----------------------*/ + /* Configure + * - UART HardWare Flow Control: set CTSE and RTSE bits according + * to huart->Init.HwFlowCtl value + * - one-bit sampling method versus three samples' majority rule according + * to huart->Init.OneBitSampling (not applicable to LPUART) */ + tmpreg = (uint32_t)huart->Init.HwFlowCtl; + + tmpreg |= huart->Init.OneBitSampling; + MODIFY_REG(huart->Instance->CR3, USART_CR3_FIELDS, tmpreg); + + + /*-------------------------- USART BRR Configuration -----------------------*/ + UART_GETCLOCKSOURCE(huart, clocksource); + + if (huart->Init.OverSampling == UART_OVERSAMPLING_8) + { + switch (clocksource) + { + case UART_CLOCKSOURCE_PCLK1: + pclk = HAL_RCC_GetPCLK1Freq(); + break; + case UART_CLOCKSOURCE_HSI: + pclk = (uint32_t) HSI_VALUE; + break; + case UART_CLOCKSOURCE_SYSCLK: + pclk = HAL_RCC_GetSysClockFreq(); + break; + case UART_CLOCKSOURCE_LSE: + pclk = (uint32_t) LSE_VALUE; + break; + default: + pclk = 0U; + ret = HAL_ERROR; + break; + } + + /* USARTDIV must be greater than or equal to 0d16 */ + if (pclk != 0U) + { + usartdiv = (uint32_t)(UART_DIV_SAMPLING8(pclk, huart->Init.BaudRate)); + if ((usartdiv >= UART_BRR_MIN) && (usartdiv <= UART_BRR_MAX)) + { + brrtemp = (uint16_t)(usartdiv & 0xFFF0U); + brrtemp |= (uint16_t)((usartdiv & (uint16_t)0x000FU) >> 1U); + huart->Instance->BRR = brrtemp; + } + else + { + ret = HAL_ERROR; + } + } + } + else + { + switch (clocksource) + { + case UART_CLOCKSOURCE_PCLK1: + pclk = HAL_RCC_GetPCLK1Freq(); + break; + case UART_CLOCKSOURCE_HSI: + pclk = (uint32_t) HSI_VALUE; + break; + case UART_CLOCKSOURCE_SYSCLK: + pclk = HAL_RCC_GetSysClockFreq(); + break; + case UART_CLOCKSOURCE_LSE: + pclk = (uint32_t) LSE_VALUE; + break; + default: + pclk = 0U; + ret = HAL_ERROR; + break; + } + + if (pclk != 0U) + { + /* USARTDIV must be greater than or equal to 0d16 */ + usartdiv = (uint32_t)(UART_DIV_SAMPLING16(pclk, huart->Init.BaudRate)); + if ((usartdiv >= UART_BRR_MIN) && (usartdiv <= UART_BRR_MAX)) + { + huart->Instance->BRR = (uint16_t)usartdiv; + } + else + { + ret = HAL_ERROR; + } + } + } + + + /* Clear ISR function pointers */ + huart->RxISR = NULL; + huart->TxISR = NULL; + + return ret; +} + +/** + * @brief Configure the UART peripheral advanced features. + * @param huart UART handle. + * @retval None + */ +void UART_AdvFeatureConfig(UART_HandleTypeDef *huart) +{ + /* Check whether the set of advanced features to configure is properly set */ + assert_param(IS_UART_ADVFEATURE_INIT(huart->AdvancedInit.AdvFeatureInit)); + + /* if required, configure TX pin active level inversion */ + if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_TXINVERT_INIT)) + { + assert_param(IS_UART_ADVFEATURE_TXINV(huart->AdvancedInit.TxPinLevelInvert)); + MODIFY_REG(huart->Instance->CR2, USART_CR2_TXINV, huart->AdvancedInit.TxPinLevelInvert); + } + + /* if required, configure RX pin active level inversion */ + if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_RXINVERT_INIT)) + { + assert_param(IS_UART_ADVFEATURE_RXINV(huart->AdvancedInit.RxPinLevelInvert)); + MODIFY_REG(huart->Instance->CR2, USART_CR2_RXINV, huart->AdvancedInit.RxPinLevelInvert); + } + + /* if required, configure data inversion */ + if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_DATAINVERT_INIT)) + { + assert_param(IS_UART_ADVFEATURE_DATAINV(huart->AdvancedInit.DataInvert)); + MODIFY_REG(huart->Instance->CR2, USART_CR2_DATAINV, huart->AdvancedInit.DataInvert); + } + + /* if required, configure RX/TX pins swap */ + if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_SWAP_INIT)) + { + assert_param(IS_UART_ADVFEATURE_SWAP(huart->AdvancedInit.Swap)); + MODIFY_REG(huart->Instance->CR2, USART_CR2_SWAP, huart->AdvancedInit.Swap); + } + + /* if required, configure RX overrun detection disabling */ + if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_RXOVERRUNDISABLE_INIT)) + { + assert_param(IS_UART_OVERRUN(huart->AdvancedInit.OverrunDisable)); + MODIFY_REG(huart->Instance->CR3, USART_CR3_OVRDIS, huart->AdvancedInit.OverrunDisable); + } + + /* if required, configure DMA disabling on reception error */ + if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_DMADISABLEONERROR_INIT)) + { + assert_param(IS_UART_ADVFEATURE_DMAONRXERROR(huart->AdvancedInit.DMADisableonRxError)); + MODIFY_REG(huart->Instance->CR3, USART_CR3_DDRE, huart->AdvancedInit.DMADisableonRxError); + } + + /* if required, configure auto Baud rate detection scheme */ + if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_AUTOBAUDRATE_INIT)) + { + assert_param(IS_USART_AUTOBAUDRATE_DETECTION_INSTANCE(huart->Instance)); + assert_param(IS_UART_ADVFEATURE_AUTOBAUDRATE(huart->AdvancedInit.AutoBaudRateEnable)); + MODIFY_REG(huart->Instance->CR2, USART_CR2_ABREN, huart->AdvancedInit.AutoBaudRateEnable); + /* set auto Baudrate detection parameters if detection is enabled */ + if (huart->AdvancedInit.AutoBaudRateEnable == UART_ADVFEATURE_AUTOBAUDRATE_ENABLE) + { + assert_param(IS_UART_ADVFEATURE_AUTOBAUDRATEMODE(huart->AdvancedInit.AutoBaudRateMode)); + MODIFY_REG(huart->Instance->CR2, USART_CR2_ABRMODE, huart->AdvancedInit.AutoBaudRateMode); + } + } + + /* if required, configure MSB first on communication line */ + if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_MSBFIRST_INIT)) + { + assert_param(IS_UART_ADVFEATURE_MSBFIRST(huart->AdvancedInit.MSBFirst)); + MODIFY_REG(huart->Instance->CR2, USART_CR2_MSBFIRST, huart->AdvancedInit.MSBFirst); + } +} + +/** + * @brief Check the UART Idle State. + * @param huart UART handle. + * @retval HAL status + */ +HAL_StatusTypeDef UART_CheckIdleState(UART_HandleTypeDef *huart) +{ + uint32_t tickstart; + + /* Initialize the UART ErrorCode */ + huart->ErrorCode = HAL_UART_ERROR_NONE; + + /* Init tickstart for timeout management */ + tickstart = HAL_GetTick(); + + /* Check if the Transmitter is enabled */ + if ((huart->Instance->CR1 & USART_CR1_TE) == USART_CR1_TE) + { + /* Wait until TEACK flag is set */ + if (UART_WaitOnFlagUntilTimeout(huart, USART_ISR_TEACK, RESET, tickstart, HAL_UART_TIMEOUT_VALUE) != HAL_OK) + { + /* Disable TXE interrupt for the interrupt process */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_TXEIE)); + + huart->gState = HAL_UART_STATE_READY; + + __HAL_UNLOCK(huart); + + /* Timeout occurred */ + return HAL_TIMEOUT; + } + } + + /* Check if the Receiver is enabled */ + if ((huart->Instance->CR1 & USART_CR1_RE) == USART_CR1_RE) + { + /* Wait until REACK flag is set */ + if (UART_WaitOnFlagUntilTimeout(huart, USART_ISR_REACK, RESET, tickstart, HAL_UART_TIMEOUT_VALUE) != HAL_OK) + { + /* Disable 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)); + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); + + huart->RxState = HAL_UART_STATE_READY; + + __HAL_UNLOCK(huart); + + /* Timeout occurred */ + return HAL_TIMEOUT; + } + } + + /* Initialize the UART State */ + huart->gState = HAL_UART_STATE_READY; + huart->RxState = HAL_UART_STATE_READY; + huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; + huart->RxEventType = HAL_UART_RXEVENT_TC; + + __HAL_UNLOCK(huart); + + return HAL_OK; +} + +/** + * @brief This function handles UART Communication Timeout. It waits + * until a flag is no longer in the specified status. + * @param huart UART handle. + * @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 + */ +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 (((HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U)) + { + + return HAL_TIMEOUT; + } + + if (READ_BIT(huart->Instance->CR1, USART_CR1_RE) != 0U) + { + if (__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE) == SET) + { + /* Clear Overrun Error flag*/ + __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_OREF); + + /* Blocking error : transfer is aborted + Set the UART state ready to be able to start again the process, + Disable Rx Interrupts if ongoing */ + UART_EndRxTransfer(huart); + + huart->ErrorCode = HAL_UART_ERROR_ORE; + + /* Process Unlocked */ + __HAL_UNLOCK(huart); + + return HAL_ERROR; + } + if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RTOF) == SET) + { + /* Clear Receiver Timeout flag*/ + __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_RTOF); + + /* Blocking error : transfer is aborted + Set the UART state ready to be able to start again the process, + Disable Rx Interrupts if ongoing */ + UART_EndRxTransfer(huart); + + huart->ErrorCode = HAL_UART_ERROR_RTO; + + /* 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->RxISR = NULL; + + /* Computation of UART mask to apply to RDR register */ + UART_MASK_COMPUTATION(huart); + + huart->ErrorCode = HAL_UART_ERROR_NONE; + huart->RxState = HAL_UART_STATE_BUSY_RX; + + /* Enable the UART Error Interrupt: (Frame error, noise error, overrun error) */ + ATOMIC_SET_BIT(huart->Instance->CR3, USART_CR3_EIE); + + /* Set the Rx ISR function pointer according to the data word length */ + if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE)) + { + huart->RxISR = UART_RxISR_16BIT; + } + else + { + huart->RxISR = UART_RxISR_8BIT; + } + + /* Enable the UART Parity Error interrupt and Data Register Not Empty interrupt */ + if (huart->Init.Parity != UART_PARITY_NONE) + { + ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_PEIE | USART_CR1_RXNEIE); + } + else + { + ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_RXNEIE); + } + 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) +{ + huart->pRxBuffPtr = pData; + huart->RxXferSize = Size; + + huart->ErrorCode = HAL_UART_ERROR_NONE; + huart->RxState = HAL_UART_STATE_BUSY_RX; + + if (huart->hdmarx != NULL) + { + /* 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 channel */ + if (HAL_DMA_Start_IT(huart->hdmarx, (uint32_t)&huart->Instance->RDR, (uint32_t)huart->pRxBuffPtr, Size) != HAL_OK) + { + /* Set error code to DMA */ + huart->ErrorCode = HAL_UART_ERROR_DMA; + + /* Restore huart->RxState to ready */ + huart->RxState = HAL_UART_STATE_READY; + + return HAL_ERROR; + } + } + + /* Enable the UART Parity Error Interrupt */ + if (huart->Init.Parity != UART_PARITY_NONE) + { + 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; + + /* Reset RxIsr function pointer */ + huart->RxISR = NULL; +} + + +/** + * @brief DMA UART transmit process complete callback. + * @param hdma DMA handle. + * @retval None + */ +static void UART_DMATransmitCplt(DMA_HandleTypeDef *hdma) +{ + UART_HandleTypeDef *huart = (UART_HandleTypeDef *)(hdma->Parent); + + /* DMA Normal mode */ + if (hdma->Init.Mode != DMA_CIRCULAR) + { + huart->TxXferCount = 0U; + + /* Disable the DMA transfer for transmit request by resetting 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 DMA handle. + * @retval None + */ +static void UART_DMATxHalfCplt(DMA_HandleTypeDef *hdma) +{ + UART_HandleTypeDef *huart = (UART_HandleTypeDef *)(hdma->Parent); + +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /*Call registered Tx Half complete callback*/ + huart->TxHalfCpltCallback(huart); +#else + /*Call legacy weak Tx Half complete callback*/ + HAL_UART_TxHalfCpltCallback(huart); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ +} + +/** + * @brief DMA UART receive process complete callback. + * @param hdma DMA handle. + * @retval None + */ +static void UART_DMAReceiveCplt(DMA_HandleTypeDef *hdma) +{ + UART_HandleTypeDef *huart = (UART_HandleTypeDef *)(hdma->Parent); + + /* DMA Normal mode */ + if (hdma->Init.Mode != DMA_CIRCULAR) + { + huart->RxXferCount = 0U; + + /* 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; + + /* 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); + } + } + + /* Initialize type of RxEvent that correspond to RxEvent callback execution; + In this case, Rx Event type is Transfer Complete */ + huart->RxEventType = HAL_UART_RXEVENT_TC; + + /* 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 DMA handle. + * @retval None + */ +static void UART_DMARxHalfCplt(DMA_HandleTypeDef *hdma) +{ + UART_HandleTypeDef *huart = (UART_HandleTypeDef *)(hdma->Parent); + + /* Initialize type of RxEvent that correspond to RxEvent callback execution; + In this case, Rx Event type is Half Transfer */ + huart->RxEventType = HAL_UART_RXEVENT_HT; + + /* 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 DMA handle. + * @retval None + */ +static void UART_DMAError(DMA_HandleTypeDef *hdma) +{ + UART_HandleTypeDef *huart = (UART_HandleTypeDef *)(hdma->Parent); + + const HAL_UART_StateTypeDef gstate = huart->gState; + const HAL_UART_StateTypeDef rxstate = huart->RxState; + + /* Stop UART DMA Tx request if ongoing */ + if ((HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT)) && + (gstate == HAL_UART_STATE_BUSY_TX)) + { + huart->TxXferCount = 0U; + UART_EndTxTransfer(huart); + } + + /* Stop UART DMA Rx request if ongoing */ + if ((HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) && + (rxstate == HAL_UART_STATE_BUSY_RX)) + { + huart->RxXferCount = 0U; + 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 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 DMA handle. + * @retval None + */ +static void UART_DMAAbortOnError(DMA_HandleTypeDef *hdma) +{ + UART_HandleTypeDef *huart = (UART_HandleTypeDef *)(hdma->Parent); + huart->RxXferCount = 0U; + huart->TxXferCount = 0U; + +#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 DMA handle. + * @retval None + */ +static void UART_DMATxAbortCallback(DMA_HandleTypeDef *hdma) +{ + UART_HandleTypeDef *huart = (UART_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 = 0U; + huart->RxXferCount = 0U; + + /* Reset errorCode */ + huart->ErrorCode = HAL_UART_ERROR_NONE; + + /* Clear the Error flags in the ICR register */ + __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_OREF | UART_CLEAR_NEF | UART_CLEAR_PEF | UART_CLEAR_FEF); + + + /* 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 DMA handle. + * @retval None + */ +static void UART_DMARxAbortCallback(DMA_HandleTypeDef *hdma) +{ + UART_HandleTypeDef *huart = (UART_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 = 0U; + huart->RxXferCount = 0U; + + /* Reset errorCode */ + huart->ErrorCode = HAL_UART_ERROR_NONE; + + /* Clear the Error flags in the ICR register */ + __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_OREF | UART_CLEAR_NEF | UART_CLEAR_PEF | UART_CLEAR_FEF); + + /* Discard the received data */ + __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST); + + /* 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 DMA handle. + * @retval None + */ +static void UART_DMATxOnlyAbortCallback(DMA_HandleTypeDef *hdma) +{ + UART_HandleTypeDef *huart = (UART_HandleTypeDef *)(hdma->Parent); + + huart->TxXferCount = 0U; + + + /* 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 DMA handle. + * @retval None + */ +static void UART_DMARxOnlyAbortCallback(DMA_HandleTypeDef *hdma) +{ + UART_HandleTypeDef *huart = (UART_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + + huart->RxXferCount = 0U; + + /* Clear the Error flags in the ICR register */ + __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_OREF | UART_CLEAR_NEF | UART_CLEAR_PEF | UART_CLEAR_FEF); + + /* Discard the received data */ + __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST); + + /* 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 TX interrupt handler for 7 or 8 bits data word length . + * @note Function is called under interruption only, once + * interruptions have been enabled by HAL_UART_Transmit_IT(). + * @param huart UART handle. + * @retval None + */ +static void UART_TxISR_8BIT(UART_HandleTypeDef *huart) +{ + /* Check that a Tx process is ongoing */ + if (huart->gState == HAL_UART_STATE_BUSY_TX) + { + if (huart->TxXferCount == 0U) + { + /* Disable the UART Transmit Data Register Empty Interrupt */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_TXEIE); + + /* Enable the UART Transmit Complete Interrupt */ + ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_TCIE); + } + else + { + huart->Instance->TDR = (uint8_t)(*huart->pTxBuffPtr & (uint8_t)0xFF); + huart->pTxBuffPtr++; + huart->TxXferCount--; + } + } +} + +/** + * @brief TX interrupt handler for 9 bits data word length. + * @note Function is called under interruption only, once + * interruptions have been enabled by HAL_UART_Transmit_IT(). + * @param huart UART handle. + * @retval None + */ +static void UART_TxISR_16BIT(UART_HandleTypeDef *huart) +{ + const uint16_t *tmp; + + /* Check that a Tx process is ongoing */ + if (huart->gState == HAL_UART_STATE_BUSY_TX) + { + if (huart->TxXferCount == 0U) + { + /* Disable the UART Transmit Data Register Empty Interrupt */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_TXEIE); + + /* Enable the UART Transmit Complete Interrupt */ + ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_TCIE); + } + else + { + tmp = (const uint16_t *) huart->pTxBuffPtr; + huart->Instance->TDR = (((uint32_t)(*tmp)) & 0x01FFUL); + huart->pTxBuffPtr += 2U; + huart->TxXferCount--; + } + } +} + + +/** + * @brief Wrap 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 None + */ +static void UART_EndTransmit_IT(UART_HandleTypeDef *huart) +{ + /* Disable the UART Transmit Complete Interrupt */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_TCIE); + + /* Tx process is ended, restore huart->gState to Ready */ + huart->gState = HAL_UART_STATE_READY; + + /* Cleat TxISR function pointer */ + huart->TxISR = NULL; + +#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 RX interrupt handler for 7 or 8 bits data word length . + * @param huart UART handle. + * @retval None + */ +static void UART_RxISR_8BIT(UART_HandleTypeDef *huart) +{ + uint16_t uhMask = huart->Mask; + uint16_t uhdata; + + /* Check that a Rx process is ongoing */ + if (huart->RxState == HAL_UART_STATE_BUSY_RX) + { + uhdata = (uint16_t) READ_REG(huart->Instance->RDR); + *huart->pRxBuffPtr = (uint8_t)(uhdata & (uint8_t)uhMask); + huart->pRxBuffPtr++; + huart->RxXferCount--; + + if (huart->RxXferCount == 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; + + /* Clear RxISR function pointer */ + huart->RxISR = NULL; + + /* Initialize type of RxEvent to Transfer Complete */ + huart->RxEventType = HAL_UART_RXEVENT_TC; + + /* Check that USART RTOEN bit is set */ + if (READ_BIT(huart->Instance->CR2, USART_CR2_RTOEN) != 0U) + { + /* Enable the UART Receiver Timeout Interrupt */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_RTOIE); + } + + /* 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); + + if (__HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE) == SET) + { + /* Clear IDLE Flag */ + __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_IDLEF); + } + +#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 */ + } + } + } + else + { + /* Clear RXNE interrupt flag */ + __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST); + } +} + +/** + * @brief RX interrupt handler for 9 bits data word length . + * @note Function is called under interruption only, once + * interruptions have been enabled by HAL_UART_Receive_IT() + * @param huart UART handle. + * @retval None + */ +static void UART_RxISR_16BIT(UART_HandleTypeDef *huart) +{ + uint16_t *tmp; + uint16_t uhMask = huart->Mask; + uint16_t uhdata; + + /* Check that a Rx process is ongoing */ + if (huart->RxState == HAL_UART_STATE_BUSY_RX) + { + uhdata = (uint16_t) READ_REG(huart->Instance->RDR); + tmp = (uint16_t *) huart->pRxBuffPtr ; + *tmp = (uint16_t)(uhdata & uhMask); + huart->pRxBuffPtr += 2U; + huart->RxXferCount--; + + if (huart->RxXferCount == 0U) + { + /* Disable the UART Parity Error Interrupt and RXNE interrupt*/ + 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; + + /* Clear RxISR function pointer */ + huart->RxISR = NULL; + + /* Initialize type of RxEvent to Transfer Complete */ + huart->RxEventType = HAL_UART_RXEVENT_TC; + + /* Check that USART RTOEN bit is set */ + if (READ_BIT(huart->Instance->CR2, USART_CR2_RTOEN) != 0U) + { + /* Enable the UART Receiver Timeout Interrupt */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_RTOIE); + } + + /* 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); + + if (__HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE) == SET) + { + /* Clear IDLE Flag */ + __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_IDLEF); + } + +#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 */ + } + } + } + else + { + /* Clear RXNE interrupt flag */ + __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST); + } +} + + +/** + * @} + */ + +#endif /* HAL_UART_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ + diff --git a/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.c b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.c new file mode 100644 index 0000000..6e91067 --- /dev/null +++ b/Software/reflow_oven/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.c @@ -0,0 +1,841 @@ +/** + ****************************************************************************** + * @file stm32f0xx_hal_uart_ex.c + * @author MCD Application Team + * @brief Extended UART HAL module driver. + * This file provides firmware functions to manage the following extended + * functionalities of the Universal Asynchronous Receiver Transmitter Peripheral (UART). + * + Initialization and de-initialization functions + * + Peripheral Control 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 + ============================================================================== + ##### UART peripheral extended features ##### + ============================================================================== + + (#) Declare a UART_HandleTypeDef handle structure. + + (#) For the UART RS485 Driver Enable mode, initialize the UART registers + by calling the HAL_RS485Ex_Init() API. + + @endverbatim + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f0xx_hal.h" + +/** @addtogroup STM32F0xx_HAL_Driver + * @{ + */ + +/** @defgroup UARTEx UARTEx + * @brief UART Extended HAL module driver + * @{ + */ + +#ifdef HAL_UART_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ + +/* Private macros ------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/** @defgroup UARTEx_Private_Functions UARTEx Private Functions + * @{ + */ +#if defined(USART_CR1_UESM) +static void UARTEx_Wakeup_AddressConfig(UART_HandleTypeDef *huart, UART_WakeUpTypeDef WakeUpSelection); +#endif /* USART_CR1_UESM */ +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ + +/** @defgroup UARTEx_Exported_Functions UARTEx Exported Functions + * @{ + */ + +/** @defgroup UARTEx_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Extended 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 the parameters below 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. + (++) Hardware flow control + (++) Receiver/transmitter modes + (++) Over Sampling Method + (++) One-Bit Sampling Method + (+) For the asynchronous mode, the following advanced features can be configured as well: + (++) TX and/or RX pin level inversion + (++) data logical level inversion + (++) RX and TX pins swap + (++) RX overrun detection disabling + (++) DMA disabling on RX error + (++) MSB first on communication line + (++) auto Baud rate detection + [..] + The HAL_RS485Ex_Init() API follows the UART RS485 mode configuration + procedures (details for the procedures are available in reference manual). + +@endverbatim + + Depending on the frame length defined by the M1 and M0 bits (7-bit, + 8-bit or 9-bit), the possible UART formats are listed in the + following table. + + Table 1. UART frame format. + +-----------------------------------------------------------------------+ + | M1 bit | M0 bit | PCE bit | UART frame | + |---------|---------|-----------|---------------------------------------| + | 0 | 0 | 0 | | SB | 8 bit data | STB | | + |---------|---------|-----------|---------------------------------------| + | 0 | 0 | 1 | | SB | 7 bit data | PB | STB | | + |---------|---------|-----------|---------------------------------------| + | 0 | 1 | 0 | | SB | 9 bit data | STB | | + |---------|---------|-----------|---------------------------------------| + | 0 | 1 | 1 | | SB | 8 bit data | PB | STB | | + |---------|---------|-----------|---------------------------------------| + | 1 | 0 | 0 | | SB | 7 bit data | STB | | + |---------|---------|-----------|---------------------------------------| + | 1 | 0 | 1 | | SB | 6 bit data | PB | STB | | + +-----------------------------------------------------------------------+ + + * @{ + */ + +/** + * @brief Initialize the RS485 Driver enable feature according to the specified + * parameters in the UART_InitTypeDef and creates the associated handle. + * @param huart UART handle. + * @param Polarity Select the driver enable polarity. + * This parameter can be one of the following values: + * @arg @ref UART_DE_POLARITY_HIGH DE signal is active high + * @arg @ref UART_DE_POLARITY_LOW DE signal is active low + * @param AssertionTime Driver Enable assertion time: + * 5-bit value defining the time between the activation of the DE (Driver Enable) + * signal and the beginning of the start bit. It is expressed in sample time + * units (1/8 or 1/16 bit time, depending on the oversampling rate) + * @param DeassertionTime Driver Enable deassertion time: + * 5-bit value defining the time between the end of the last stop bit, in a + * transmitted message, and the de-activation of the DE (Driver Enable) signal. + * It is expressed in sample time units (1/8 or 1/16 bit time, depending on the + * oversampling rate). + * @retval HAL status + */ +HAL_StatusTypeDef HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity, uint32_t AssertionTime, + uint32_t DeassertionTime) +{ + uint32_t temp; + + /* Check the UART handle allocation */ + if (huart == NULL) + { + return HAL_ERROR; + } + /* Check the Driver Enable UART instance */ + assert_param(IS_UART_DRIVER_ENABLE_INSTANCE(huart->Instance)); + + /* Check the Driver Enable polarity */ + assert_param(IS_UART_DE_POLARITY(Polarity)); + + /* Check the Driver Enable assertion time */ + assert_param(IS_UART_ASSERTIONTIME(AssertionTime)); + + /* Check the Driver Enable deassertion time */ + assert_param(IS_UART_DEASSERTIONTIME(DeassertionTime)); + + 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, CORTEX */ + 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 */ + if (UART_SetConfig(huart) == HAL_ERROR) + { + return HAL_ERROR; + } + + if (huart->AdvancedInit.AdvFeatureInit != UART_ADVFEATURE_NO_INIT) + { + UART_AdvFeatureConfig(huart); + } + + /* Enable the Driver Enable mode by setting the DEM bit in the CR3 register */ + SET_BIT(huart->Instance->CR3, USART_CR3_DEM); + + /* Set the Driver Enable polarity */ + MODIFY_REG(huart->Instance->CR3, USART_CR3_DEP, Polarity); + + /* Set the Driver Enable assertion and deassertion times */ + temp = (AssertionTime << UART_CR1_DEAT_ADDRESS_LSB_POS); + temp |= (DeassertionTime << UART_CR1_DEDT_ADDRESS_LSB_POS); + MODIFY_REG(huart->Instance->CR1, (USART_CR1_DEDT | USART_CR1_DEAT), temp); + + /* Enable the Peripheral */ + __HAL_UART_ENABLE(huart); + + /* TEACK and/or REACK to check before moving huart->gState and huart->RxState to Ready */ + return (UART_CheckIdleState(huart)); +} + +/** + * @} + */ + +/** @defgroup UARTEx_Exported_Functions_Group2 IO operation functions + * @brief Extended functions + * +@verbatim + =============================================================================== + ##### IO operation functions ##### + =============================================================================== + This subsection provides a set of Wakeup and FIFO mode related callback functions. + +#if defined(USART_CR1_UESM) +#if defined(USART_CR3_WUFIE) + (#) Wakeup from Stop mode Callback: + (+) HAL_UARTEx_WakeupCallback() + +#endif +#endif +@endverbatim + * @{ + */ + +#if defined(USART_CR1_UESM) +#if defined(USART_CR3_WUFIE) +/** + * @brief UART wakeup from Stop mode callback. + * @param huart UART handle. + * @retval None + */ +__weak void HAL_UARTEx_WakeupCallback(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_UARTEx_WakeupCallback can be implemented in the user file. + */ +} + +#endif /* USART_CR3_WUFIE */ +#endif /* USART_CR1_UESM */ + +/** + * @} + */ + +/** @defgroup UARTEx_Exported_Functions_Group3 Peripheral Control functions + * @brief Extended Peripheral Control functions + * +@verbatim + =============================================================================== + ##### Peripheral Control functions ##### + =============================================================================== + [..] This section provides the following functions: + (+) HAL_MultiProcessorEx_AddressLength_Set() API optionally sets the UART node address + detection length to more than 4 bits for multiprocessor address mark wake up. +#if defined(USART_CR1_UESM) + (+) HAL_UARTEx_StopModeWakeUpSourceConfig() API defines the wake-up from stop mode + trigger: address match, Start Bit detection or RXNE bit status. + (+) HAL_UARTEx_EnableStopMode() API enables the UART to wake up the MCU from stop mode + (+) HAL_UARTEx_DisableStopMode() API disables the above functionality +#endif + + [..] 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. + (++) RX inactivity detected by RTO, i.e. line has been in idle state + for a programmable time, after last received byte. + (+) Detection that a specific character has been received. + + (#) 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() + +@endverbatim + * @{ + */ + +/** + * @brief By default in multiprocessor mode, when the wake up method is set + * to address mark, the UART handles only 4-bit long addresses detection; + * this API allows to enable longer addresses detection (6-, 7- or 8-bit + * long). + * @note Addresses detection lengths are: 6-bit address detection in 7-bit data mode, + * 7-bit address detection in 8-bit data mode, 8-bit address detection in 9-bit data mode. + * @param huart UART handle. + * @param AddressLength This parameter can be one of the following values: + * @arg @ref UART_ADDRESS_DETECT_4B 4-bit long address + * @arg @ref UART_ADDRESS_DETECT_7B 6-, 7- or 8-bit long address + * @retval HAL status + */ +HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *huart, uint32_t AddressLength) +{ + /* Check the UART handle allocation */ + if (huart == NULL) + { + return HAL_ERROR; + } + + /* Check the address length parameter */ + assert_param(IS_UART_ADDRESSLENGTH_DETECT(AddressLength)); + + huart->gState = HAL_UART_STATE_BUSY; + + /* Disable the Peripheral */ + __HAL_UART_DISABLE(huart); + + /* Set the address length */ + MODIFY_REG(huart->Instance->CR2, USART_CR2_ADDM7, AddressLength); + + /* Enable the Peripheral */ + __HAL_UART_ENABLE(huart); + + /* TEACK and/or REACK to check before moving huart->gState to Ready */ + return (UART_CheckIdleState(huart)); +} + +#if defined(USART_CR1_UESM) +/** + * @brief Set Wakeup from Stop mode interrupt flag selection. + * @note It is the application responsibility to enable the interrupt used as + * usart_wkup interrupt source before entering low-power mode. + * @param huart UART handle. + * @param WakeUpSelection Address match, Start Bit detection or RXNE/RXFNE bit status. + * This parameter can be one of the following values: + * @arg @ref UART_WAKEUP_ON_ADDRESS + * @arg @ref UART_WAKEUP_ON_STARTBIT + * @arg @ref UART_WAKEUP_ON_READDATA_NONEMPTY + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UARTEx_StopModeWakeUpSourceConfig(UART_HandleTypeDef *huart, UART_WakeUpTypeDef WakeUpSelection) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tickstart; + + /* check the wake-up from stop mode UART instance */ + assert_param(IS_UART_WAKEUP_FROMSTOP_INSTANCE(huart->Instance)); + /* check the wake-up selection parameter */ + assert_param(IS_UART_WAKEUP_SELECTION(WakeUpSelection.WakeUpEvent)); + + /* Process Locked */ + __HAL_LOCK(huart); + + huart->gState = HAL_UART_STATE_BUSY; + + /* Disable the Peripheral */ + __HAL_UART_DISABLE(huart); + +#if defined(USART_CR3_WUS) + /* Set the wake-up selection scheme */ + MODIFY_REG(huart->Instance->CR3, USART_CR3_WUS, WakeUpSelection.WakeUpEvent); +#endif /* USART_CR3_WUS */ + + if (WakeUpSelection.WakeUpEvent == UART_WAKEUP_ON_ADDRESS) + { + UARTEx_Wakeup_AddressConfig(huart, WakeUpSelection); + } + + /* Enable the Peripheral */ + __HAL_UART_ENABLE(huart); + + /* Init tickstart for timeout management */ + tickstart = HAL_GetTick(); + + /* Wait until REACK flag is set */ + if (UART_WaitOnFlagUntilTimeout(huart, USART_ISR_REACK, RESET, tickstart, HAL_UART_TIMEOUT_VALUE) != HAL_OK) + { + status = HAL_TIMEOUT; + } + else + { + /* Initialize the UART State */ + huart->gState = HAL_UART_STATE_READY; + } + + /* Process Unlocked */ + __HAL_UNLOCK(huart); + + return status; +} + +/** + * @brief Enable UART Stop Mode. + * @note The UART is able to wake up the MCU from Stop 1 mode as long as UART clock is HSI or LSE. + * @param huart UART handle. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UARTEx_EnableStopMode(UART_HandleTypeDef *huart) +{ + /* Process Locked */ + __HAL_LOCK(huart); + + /* Set UESM bit */ + ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_UESM); + + /* Process Unlocked */ + __HAL_UNLOCK(huart); + + return HAL_OK; +} + +/** + * @brief Disable UART Stop Mode. + * @param huart UART handle. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UARTEx_DisableStopMode(UART_HandleTypeDef *huart) +{ + /* Process Locked */ + __HAL_LOCK(huart); + + /* Clear UESM bit */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_UESM); + + /* Process Unlocked */ + __HAL_UNLOCK(huart); + + return HAL_OK; +} + +#endif /* USART_CR1_UESM */ +/** + * @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 (M1-M0 = 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. + * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01), + * address of user data buffer for storing data to be received, should be aligned on a half word frontier + * (16 bits) (as received data will be handled using uint16_t pointer cast). Depending on compilation chain, + * use of specific alignment compilation directives or pragmas might be required to ensure proper + * alignment for 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; + uint16_t uhMask; + 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; + } + + /* In case of 9bits/No Parity transfer, pData buffer provided as input parameter + should be aligned on a uint16_t frontier, as data to be received from RDR will be + handled through a uint16_t cast. */ + if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE)) + { + if ((((uint32_t)pData) & 1U) != 0U) + { + return HAL_ERROR; + } + } + + huart->ErrorCode = HAL_UART_ERROR_NONE; + huart->RxState = HAL_UART_STATE_BUSY_RX; + huart->ReceptionType = HAL_UART_RECEPTION_TOIDLE; + huart->RxEventType = HAL_UART_RXEVENT_TC; + + /* Init tickstart for timeout management */ + tickstart = HAL_GetTick(); + + huart->RxXferSize = Size; + huart->RxXferCount = Size; + + /* Computation of UART mask to apply to RDR register */ + UART_MASK_COMPUTATION(huart); + uhMask = huart->Mask; + + /* 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; + } + + /* 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_FLAG(huart, UART_CLEAR_IDLEF); + + /* 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->RxEventType = HAL_UART_RXEVENT_IDLE; + 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->RDR & uhMask); + pdata16bits++; + } + else + { + *pdata8bits = (uint8_t)(huart->Instance->RDR & (uint8_t)uhMask); + 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 (M1-M0 = 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. + * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01), + * address of user data buffer for storing data to be received, should be aligned on a half word frontier + * (16 bits) (as received data will be handled using uint16_t pointer cast). Depending on compilation chain, + * use of specific alignment compilation directives or pragmas might be required + * to ensure proper alignment for 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; + } + + /* In case of 9bits/No Parity transfer, pData buffer provided as input parameter + should be aligned on a uint16_t frontier, as data to be received from RDR will be + handled through a uint16_t cast. */ + if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE)) + { + if ((((uint32_t)pData) & 1U) != 0U) + { + return HAL_ERROR; + } + } + + /* Set Reception type to reception till IDLE Event*/ + huart->ReceptionType = HAL_UART_RECEPTION_TOIDLE; + huart->RxEventType = HAL_UART_RXEVENT_TC; + + 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_FLAG(huart, UART_CLEAR_IDLEF); + 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 (M1-M0 = 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. + * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01), + * address of user data buffer for storing data to be received, should be aligned on a half word frontier + * (16 bits) (as received data will be handled by DMA from halfword frontier). Depending on compilation chain, + * use of specific alignment compilation directives or pragmas might be required + * to ensure proper alignment for 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; + } + + /* In case of 9bits/No Parity transfer, pData buffer provided as input parameter + should be aligned on a uint16_t frontier, as data copy from RDR will be + handled by DMA from a uint16_t frontier. */ + if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE)) + { + if ((((uint32_t)pData) & 1U) != 0U) + { + return HAL_ERROR; + } + } + + /* Set Reception type to reception till IDLE Event*/ + huart->ReceptionType = HAL_UART_RECEPTION_TOIDLE; + huart->RxEventType = HAL_UART_RXEVENT_TC; + + 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_FLAG(huart, UART_CLEAR_IDLEF); + 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 Provide Rx Event type that has lead to RxEvent callback execution. + * @note When HAL_UARTEx_ReceiveToIdle_IT() or HAL_UARTEx_ReceiveToIdle_DMA() API are called, progress + * of reception process is provided to application through calls of Rx Event callback (either default one + * HAL_UARTEx_RxEventCallback() or user registered one). As several types of events could occur (IDLE event, + * Half Transfer, or Transfer Complete), this function allows to retrieve the Rx Event type that has lead + * to Rx Event callback execution. + * @note This function is expected to be called within the user implementation of Rx Event Callback, + * in order to provide the accurate value : + * In Interrupt Mode : + * - HAL_UART_RXEVENT_TC : when Reception has been completed (expected nb of data has been received) + * - HAL_UART_RXEVENT_IDLE : when Idle event occurred prior reception has been completed (nb of + * received data is lower than expected one) + * In DMA Mode : + * - HAL_UART_RXEVENT_TC : when Reception has been completed (expected nb of data has been received) + * - HAL_UART_RXEVENT_HT : when half of expected nb of data has been received + * - HAL_UART_RXEVENT_IDLE : when Idle event occurred prior reception has been completed (nb of + * received data is lower than expected one). + * In DMA mode, RxEvent callback could be called several times; + * When DMA is configured in Normal Mode, HT event does not stop Reception process; + * When DMA is configured in Circular Mode, HT, TC or IDLE events don't stop Reception process; + * @param huart UART handle. + * @retval Rx Event Type (return vale will be a value of @ref UART_RxEvent_Type_Values) + */ +HAL_UART_RxEventTypeTypeDef HAL_UARTEx_GetRxEventType(UART_HandleTypeDef *huart) +{ + /* Return Rx Event type value, as stored in UART handle */ + return (huart->RxEventType); +} + +/** + * @} + */ + +/** + * @} + */ + +/** @addtogroup UARTEx_Private_Functions + * @{ + */ +#if defined(USART_CR1_UESM) + +/** + * @brief Initialize the UART wake-up from stop mode parameters when triggered by address detection. + * @param huart UART handle. + * @param WakeUpSelection UART wake up from stop mode parameters. + * @retval None + */ +static void UARTEx_Wakeup_AddressConfig(UART_HandleTypeDef *huart, UART_WakeUpTypeDef WakeUpSelection) +{ + assert_param(IS_UART_ADDRESSLENGTH_DETECT(WakeUpSelection.AddressLength)); + + /* Set the USART address length */ + MODIFY_REG(huart->Instance->CR2, USART_CR2_ADDM7, WakeUpSelection.AddressLength); + + /* Set the USART address node */ + MODIFY_REG(huart->Instance->CR2, USART_CR2_ADD, ((uint32_t)WakeUpSelection.Address << UART_CR2_ADDRESS_LSB_POS)); +} +#endif /* USART_CR1_UESM */ + +/** + * @} + */ + +#endif /* HAL_UART_MODULE_ENABLED */ + +/** + * @} + */ + +/** + * @} + */ + diff --git a/Software/reflow_oven/STM32F031K6TX_FLASH.ld b/Software/reflow_oven/STM32F031K6TX_FLASH.ld new file mode 100644 index 0000000..d90453e --- /dev/null +++ b/Software/reflow_oven/STM32F031K6TX_FLASH.ld @@ -0,0 +1,185 @@ +/* +****************************************************************************** +** +** @file : LinkerScript.ld +** +** @author : Auto-generated by STM32CubeIDE +** +** Abstract : Linker script for NUCLEO-F031K6 Board embedding STM32F031K6Tx Device from stm32f0 series +** 32KBytes FLASH +** 4KBytes 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 = 4K + FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 32K +} + +/* 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/Software/reflow_oven/reflow_oven.ioc b/Software/reflow_oven/reflow_oven.ioc new file mode 100644 index 0000000..5aabcb5 --- /dev/null +++ b/Software/reflow_oven/reflow_oven.ioc @@ -0,0 +1,100 @@ +#MicroXplorer Configuration settings - do not modify +CAD.formats= +CAD.pinconfig= +CAD.provider= +File.Version=6 +KeepUserPlacement=false +Mcu.CPN=STM32F031K6T6 +Mcu.Family=STM32F0 +Mcu.IP0=NVIC +Mcu.IP1=RCC +Mcu.IP2=SYS +Mcu.IP3=USART1 +Mcu.IPNb=4 +Mcu.Name=STM32F031K6Tx +Mcu.Package=LQFP32 +Mcu.Pin0=PF0-OSC_IN +Mcu.Pin1=PA2 +Mcu.Pin2=PA13 +Mcu.Pin3=PA14 +Mcu.Pin4=PA15 +Mcu.PinsNb=5 +Mcu.ThirdPartyNb=0 +Mcu.UserConstants= +Mcu.UserName=STM32F031K6Tx +MxCube.Version=6.9.2 +MxDb.Version=DB.6.0.92 +NVIC.ForceEnableDMAVector=true +NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.SVC_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true +NVIC.SysTick_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:false +PA13.GPIOParameters=GPIO_Label +PA13.GPIO_Label=SWDIO +PA13.Locked=true +PA13.Mode=Serial_Wire +PA13.Signal=SYS_SWDIO +PA14.GPIOParameters=GPIO_Label +PA14.GPIO_Label=SWCLK +PA14.Locked=true +PA14.Mode=Serial_Wire +PA14.Signal=SYS_SWCLK +PA15.GPIOParameters=GPIO_Label +PA15.GPIO_Label=VCP_RX +PA15.Locked=true +PA15.Mode=Asynchronous +PA15.Signal=USART1_RX +PA2.GPIOParameters=GPIO_Label +PA2.GPIO_Label=VCP_TX +PA2.Locked=true +PA2.Mode=Asynchronous +PA2.Signal=USART1_TX +PF0-OSC_IN.Locked=true +PF0-OSC_IN.Mode=HSE-External-Clock-Source +PF0-OSC_IN.Signal=RCC_OSC_IN +PinOutPanel.RotationAngle=0 +ProjectManager.AskForMigrate=true +ProjectManager.BackupPrevious=false +ProjectManager.CompilerOptimize=6 +ProjectManager.ComputerToolchain=false +ProjectManager.CoupleFile=true +ProjectManager.CustomerFirmwarePackage= +ProjectManager.DefaultFWLocation=true +ProjectManager.DeletePrevious=true +ProjectManager.DeviceId=STM32F031K6Tx +ProjectManager.FirmwarePackage=STM32Cube FW_F0 V1.11.4 +ProjectManager.FreePins=true +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=reflow_oven.ioc +ProjectManager.ProjectName=reflow_oven +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_USART1_UART_Init-USART1-false-HAL-true +RCC.CECFreq_Value=32786.88524590164 +RCC.FamilyName=M +RCC.HSICECFreq_Value=32786.88524590164 +RCC.IPParameters=CECFreq_Value,FamilyName,HSICECFreq_Value,PLLCLKFreq_Value,PLLMCOFreq_Value,TimSysFreq_Value,VCOOutput2Freq_Value +RCC.PLLCLKFreq_Value=8000000 +RCC.PLLMCOFreq_Value=8000000 +RCC.TimSysFreq_Value=8000000 +RCC.VCOOutput2Freq_Value=4000000 +USART1.IPParameters=VirtualMode-Asynchronous +USART1.VirtualMode-Asynchronous=VM_ASYNC +board=NUCLEO-F031K6 +boardIOC=true +isbadioc=false

      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 V;(Ud|aBAH8P`~!^#4s)H{V(+KER+BM literal 0 HcmV?d00001 diff --git a/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.su b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.su new file mode 100644 index 0000000..9f53ec1 --- /dev/null +++ b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.su @@ -0,0 +1,5 @@ +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.c:107:6:HAL_PWR_ConfigPVD 16 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.c:149:6:HAL_PWR_EnablePVD 8 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.c:158:6:HAL_PWR_DisablePVD 8 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.c:168:6:HAL_PWR_PVD_IRQHandler 8 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.c:185:13:HAL_PWR_PVDCallback 8 static diff --git a/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.cyclo b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.cyclo new file mode 100644 index 0000000..02fbe3f --- /dev/null +++ b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.cyclo @@ -0,0 +1,13 @@ +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.c:208:19:HAL_RCC_DeInit 8 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.c:298:19:HAL_RCC_OscConfig 67 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.c:777:19:HAL_RCC_ClockConfig 17 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.c:1016:6:HAL_RCC_MCOConfig 1 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.c:1050:6:HAL_RCC_EnableCSS 1 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.c:1059:6:HAL_RCC_DisableCSS 1 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.c:1095:10:HAL_RCC_GetSysClockFreq 4 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.c:1170:10:HAL_RCC_GetHCLKFreq 1 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.c:1181:10:HAL_RCC_GetPCLK1Freq 1 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.c:1194:6:HAL_RCC_GetOscConfig 9 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.c:1296:6:HAL_RCC_GetClockConfig 1 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.c:1322:6:HAL_RCC_NMI_IRQHandler 2 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.c:1339:13:HAL_RCC_CSSCallback 1 diff --git a/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.d b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.d new file mode 100644 index 0000000..e33e2e3 --- /dev/null +++ b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.d @@ -0,0 +1,56 @@ +Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o: \ + ../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.c \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h \ + ../Core/Inc/stm32f0xx_hal_conf.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f031x6.h \ + ../Drivers/CMSIS/Include/core_cm0.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/system_stm32f0xx.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_exti.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_cortex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h: +../Core/Inc/stm32f0xx_hal_conf.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h: +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f031x6.h: +../Drivers/CMSIS/Include/core_cm0.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/system_stm32f0xx.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_exti.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_cortex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h: diff --git a/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.o new file mode 100644 index 0000000000000000000000000000000000000000..c955fa17a442e558fe19c5eeacb7efb9a3c42e5c GIT binary patch literal 515924 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%0A$x5%ap6YMg&ZO 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%0DDW-H#quI$6X9L2GGkdJUKALEmJmd|ku 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 literal 0 HcmV?d00001 diff --git a/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.su b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.su new file mode 100644 index 0000000..36fbedb --- /dev/null +++ b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.su @@ -0,0 +1,3 @@ +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.c:102:19:HAL_RCCEx_PeriphCLKConfig 32 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.c:268:6:HAL_RCCEx_GetPeriphCLKConfig 16 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.c:368:10:HAL_RCCEx_GetPeriphCLKFreq 24 static diff --git a/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.cyclo b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.cyclo new file mode 100644 index 0000000..e69de29 diff --git a/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.d b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.d new file mode 100644 index 0000000..6111560 --- /dev/null +++ b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.d @@ -0,0 +1,56 @@ +Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o: \ + ../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.c \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h \ + ../Core/Inc/stm32f0xx_hal_conf.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f031x6.h \ + ../Drivers/CMSIS/Include/core_cm0.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/system_stm32f0xx.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_exti.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_cortex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h: +../Core/Inc/stm32f0xx_hal_conf.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h: +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f031x6.h: +../Drivers/CMSIS/Include/core_cm0.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/system_stm32f0xx.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_exti.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_cortex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h: diff --git a/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.o new file mode 100644 index 0000000000000000000000000000000000000000..bc9ef47a4c38bd808982e7d47d40f110426b55fb GIT binary patch literal 501516 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⪼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'oU6E*pEXvidS$Vr*S6daxs_lK0d^C+{EYj3g6^T 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 cjo4J6?xPq(s2sdyG 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 literal 0 HcmV?d00001 diff --git a/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.su b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.su new file mode 100644 index 0000000..279648d --- /dev/null +++ b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.su @@ -0,0 +1,14 @@ +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c:165:19:HAL_FLASH_Program 48 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c:237:19:HAL_FLASH_Program_IT 32 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c:283:6:HAL_FLASH_IRQHandler 24 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c:426:13:HAL_FLASH_EndOfOperationCallback 16 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c:444:13:HAL_FLASH_OperationErrorCallback 16 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c:477:19:HAL_FLASH_Unlock 16 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c:501:19:HAL_FLASH_Lock 8 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c:513:19:HAL_FLASH_OB_Unlock 8 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c:533:19:HAL_FLASH_OB_Lock 8 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c:546:19:HAL_FLASH_OB_Launch 8 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c:578:10:HAL_FLASH_GetError 8 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c:601:13:FLASH_Program_HalfWord 16 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c:618:19:FLASH_WaitForLastOperation 24 static +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c:661:13:FLASH_SetErrorCode 16 static diff --git a/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.cyclo b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.cyclo new file mode 100644 index 0000000..9e0d78e --- /dev/null +++ b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.cyclo @@ -0,0 +1,16 @@ +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c:157:19:HAL_FLASHEx_Erase 7 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c:238:19:HAL_FLASHEx_Erase_IT 4 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c:311:19:HAL_FLASHEx_OBErase 3 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c:360:19:HAL_FLASHEx_OBProgram 11 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c:441:6:HAL_FLASHEx_OBGetConfig 1 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c:463:10:HAL_FLASHEx_OBGetUserData 2 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c:498:13:FLASH_MassErase 1 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c:519:26:FLASH_OB_EnableWRP 4 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c:635:26:FLASH_OB_DisableWRP 4 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c:749:26:FLASH_OB_RDP_LevelConfig 3 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c:800:26:FLASH_OB_UserConfig 2 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c:855:26:FLASH_OB_ProgramData 2 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c:888:17:FLASH_OB_GetWRP 1 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c:902:17:FLASH_OB_GetRDP 3 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c:929:16:FLASH_OB_GetUser 1 +../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c:958:6:FLASH_PageErase 1 diff --git a/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.d b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.d new file mode 100644 index 0000000..798fedc --- /dev/null +++ b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.d @@ -0,0 +1,56 @@ +Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o: \ + ../Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h \ + ../Core/Inc/stm32f0xx_hal_conf.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f031x6.h \ + ../Drivers/CMSIS/Include/core_cm0.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Device/ST/STM32F0xx/Include/system_stm32f0xx.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_exti.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_cortex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr_ex.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart.h \ + ../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h: +../Core/Inc/stm32f0xx_hal_conf.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h: +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f031x6.h: +../Drivers/CMSIS/Include/core_cm0.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Device/ST/STM32F0xx/Include/system_stm32f0xx.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_exti.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_cortex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr_ex.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart.h: +../Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h: diff --git a/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o b/Software/reflow_oven/Debug/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.o new file mode 100644 index 0000000000000000000000000000000000000000..9c73ca80b52ea60cdc49ab326ec7627f040a2d99 GIT binary patch literal 513852 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 KcEOBCO( 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

      YeA{_fyb(-ilV4OArucgVzOfDO*4?d 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

    ;g)>wof^f`?SVgU?yl| z_$cnz?%*7GKpXTOl!@B@bD=z_&FKzilJ>kFQnEIgOUNOu#t1m2z0@2%q-y`=41HQV zu|MFfHY60vH0{*^kj`m^){xF?7npDk>DpU+p}e5I^(SIxY8$mf%uCv3K2ToPw%LQ2 zSG9hu_FmJfm<(Ol7KQ_EX`g-!_uJYL{4x6-Z3K5)!J^X#?)vt$^c%vvOs{hE++xtqifGfqOYzi%OZ<( zhBNT<)BVb1&tEs4<*CKGo=IQ^=(?&AI#6dk2+9&&+81zGs@uoxVwvuq2-0%hVK<}| zx|3W3f^_vc7p&9`I|f*#+r+ghSoesPn$^1cL13=YHDtE7RyUVZ26T#yaAl3>^(boQ}OM(U0_0h@K#IcG)bj`8wD>xLIViqTzR3cf}6kq4x$ zx{$vhZPV4v1ZBJKA5JqnbbrL4+g-ZRVzM`Vi0((e7DsiyW1u{ydomsl$94Pda6h4Y@DgxR_XDreDV^09wp3li zQ(&IfJ!aiBO;>4!l&*7k1?8g7moHbQu9}(SCEX8k2z^c0(hIihx~L71Zs@+|HsYpk z^dz|7(p`Osn74He{s1Lg*Nfj9@97q-2IS~ouRxSs-N2TR@^p=}LCM$6t*sL4u5m~E zNaytn+#l;cWXvbJ5PorZs%t$5Qi1LOAMaN>`(;Qax*UE9eXU!X0_7WB+aUB_sw-Ix zc&k$!f~`z9O9A(C-R<*;S)pseQ>oO=jRL&WedY(K()HHDp<4IJV>s04s<@bX={qyG z@z#qjq9Y&uB2G`f`Wbu_7wH8io__j29zpWgKRpOotUvw^9R=t|7Q-P>UsMcfiT=V{ zz*2n<3z*CFn^-MeuJ308tk9=RVGGjxssStYpAJLJRr)|agTea5!+_O#jRDLx`XUQp zt=^kI7g(pC$5KRy{y;inhUzuU0K@d_nNF_PU*7}>*Gs=e%nkY*+M4ndhsB*@6&hr z6U+pCch2+s^>&s;4(OZN&~2jrkOx8^)CY8cLz2Fbwq$+EPQW3(=Uq@z^w)SQhxNVr z#o>tl^;|?bs#me2V|q_9q~rQQCn25C=j4Hzs$aTga3r0IV? z4mhV@qX6Z+zNjyxbp6u<@VlV*i-0mi-~AroqJBTOq?!6FOn)xv8*}owtdDC4>5Be$ z-qbAp3Qn=t_2E2+8~QLYq?`Je{Fjxt^cQDBx~^#=l=%+}wX2g*Ht z6w~t@eQVY@bM+?P@H~BJTTt@#Cx%0LUtges-vfPo0lIytpIHrfr2lgU;IY2(IZ&SH zi#x*Mss7(YK!JV_KPNoXH*St#&-Jn*C=2yjoWx(~dvY6Cq!0KRelPXAz5x{LQ#cF1 z(hpLBS)zB2hxA(CJr?jrpT*)ssb2d5;H_SF5y~=sfgOJ3`mOweTA^>lLP({4-6}}$ z^bt%MtMol$F~Dm51(u*{^qEZSy$q!y^x$nMEP~R<@K0|@zJ_(JAT2U@aFOyeJedKd zzrl1Eu-GujiI@R~0#*_O4O4#xbBST`7)VPEt+;3`GsJZTEH@NP0IV>a?TC(o46V3T zSZV0S3$n^!F#&=N)4u_%HjLYhC~FMA7Q+^0m@WlG8@95x z7GoIA<$8-DZUdCt4K8NeI}GK2z1@3be@s1g8yMyg@l*_;n3}oi&tlLzQNj$BoK4gYgKY^M*EUK}k1cux5P05X+mB zVQ9~K$VEdYx6YXc1>c8DhG=eEE*lnQ!|#fr1!tlx!@qo%t{RRpeZ6M*^aO%kH&k#v zx?$*b48d+2dY=a6j$!?mP~J7zdjPTxcIGela7KU}LkLeg*YI>Dq&!336-3E5bYNa^ z-;mK8@W4=33gtsXU<|r_WO&Li?vD)*CIX%qQu%y7H8^jhzXC&7-i~L6x13R)8;bt{ z6dG1>nt5UHT?>aI!)vYRrH1fu zz+1zxC_tIvGGCH%Lx=*wDh&HpLaH>FdSLMH3`Ji9stm@jz^pcSGyoC|4UNhQeWu z@uT0tTx)D$fO4HNov(I?v53DU4KhxDXLo~f01M?2#=X^0 zMjBg{fw|GxUF=As>`@qhlE;`;1b4>q#)K z=0AViZ*2J!YzK@!R`?|vn?Hl?pz(PdNJ+*{4*ZB%ml zy=NSM84fu{J%4wfYn;F*InTI+b7a18;C$Hb8(*+2`M}s~4&b5jT_z}xj5AIG9vd(4 z-F#xKza0)wjce~A`6zeN4x>IrlYPIR^JdrjBmd{7f@gCH6Nx;vHLT z8u>ev0VZ$0sez`SCPG?bI(izg)D&Xa$GEg;o2qA@6^O zJ!4wT?Eb9jr~YtAGsX0Wbk4MZZ}@rBH%!6PO*aN&5Eo1XM4)7tD)_sZi>BN6;GSs; z{tmWFri)zBFPjcug7S*#!`WbFnMURUuA0hzfx|V^4Q`09n}%nCa>KNoyO5ivh4(BCcCJ~#c@8e=ImJ-h|!g~|Uj z_!XH{yn-)HeK{)@n||91$}3ZEX4`K}letGPH65^l^44^i->%C{27Y`lH=SqMyuwtx z4^U|ucNg%^^gWaOD$~oM2v%*XV#-lt@~_=jndb&W@;2Xn2d0nt_ZA54YyRm9f-N%N zw?XnVhlK+C&CQp=eX;pT5TpQe2Ir+fbKlEwUt*qH1Lacl*POwYnFm=AEXe%E15s9* zlem#yWiI;;lwk9ZA7Z$x&1;uKT4P>064F}pmnRWrop}{!jS%zID%e8JF?|2R%&u%m z>&+SU5i{KE_#4U%=I5sX5$0!1KqAe38$jA-KE~N*yZIw-;C7fBGn?6Ip2hD0yUhQr z1nf4u?gI9hXS{|j)*Q$$sBz{=$>?^k`PKqJy!pX-*!G#Has^5-uXcd4-@JwS!~ye* z=NL<(`R#bXL38>7Fq6#AT*OQ^7yJgwA@kmju%(!9`v4A`qqv8!boLrOFM+#1Sr zW>4mr=gm)=V1Vi7qy3<~U|z%ZHpAQ}2GT`y5${8$`47S+a|boxvUw-h+biY`P2iqo z-qQy|x@tE34!CA+%8^|+7xF^hFuUz=xM}uha(T;aHiL58oGpd&j=8fQ(p_^5AH{5Q z{l%c%Gxt+sEIH=Y6VXGid8P);JadzcVCI{(Vo3MRv-}`EFwedT%0qLsKcpvS74z1o z=JDLs6_^DU2A`RS@R@&ZZpW`lh32PR|6Z80xyddvm-GemrTGWGPQ~VK?C+I%P#_#i z%v-$??6vuCrbchf&p6wZn*U-N`qtd>2e_A+ch3Qoo2}_^s4y?*CZ^I{{Tfl;nFHrQ zsxpt|$FFMhIwPbS^982oUX~yw9K0=Y-vE3p-x)0EAe~+|hxLhrPA@>9bu%O!3xc3WJjfIXHEt$@MQm=7)83t@X?dBHUFv1O_jp`Tc)cSCw= z$&G-mz!ItfJhL?8t$J?h%Bp*zWhGa`7nabOfFjGc{6XbQ%M5;%Ew=P*4(2OM*N~lvLlUW8>~~l zgnNW_=V|m1X`P$~=0xX~BcG^0LliV4rf;+ym*6~aT(yUK5 zp@(zUgP#K~ST}QxniBb+%(HNk=388){^tEU9$%8VYqJf zZ3O9t^#W6>o7Q?<+-_MzW-lUbeQbdN zkbG?k9Q-0%CetlHTMj=l`P;m?urIcC{0z1LTL^zp8ED(X?eS7uC(e<}Y)$t;T5g+| z3BQ%LlcOQ6vX#FB1lv*{16JGSTm-DK{XH5Tt+jo@UHLlOl%aqS+h!3U)Rr&>9fjEx z67;a%_C0GX;kGyY&0d6UUOYOAv<2|n;6|I1uhS;miW(?4+a7KOCCX;wW+c`&zAd7} z*$(kr!CssHeMs@PnoVHtvmN3cOR&A;{CU9kH|K&xTQcwMLE8yl$RwMVpCOWM3l@WU z$aa@suTpHI4#VNF?L!ATI%?BQ*HlT zhIHCCj2knOBwTqZQvk`?51r-4hC_{ zHtjatZ`-mq0Pfg4{s1M%cFzLHwRsN%CC^q*3Wt2#iw)@SzO4!O77uMB_!ERjwx4*z zAKS*t0R=YCY;^R@wl^Bmb6bZsU>4f^nC!i<)#JA1r7flylw#YvB2Zr0hJ--*#+Ez+ zlv10C+uXOdg;7wJ+4NTc<+ky^L0Mtj!e1~{+VIb|@wD0^n8{V!hN}^!#+G#n;AMZv zZ#LfcT}*;~?B$%OeeGl9P%g6Xn+foX!xzN7hQlY*siz$+iLqC)8Mei-iEKtT6^18kk;7~d%_lC z59klSQ2X(1u!Y$>ak^h`ZLK-poxDZp=+{qZ5#cH0|Hg>sMmWe-TP_G2T#jI+OK z4COw1-`)t8VDC5&%Ki3S5u^k52V6xH?QQwk9JJs11dwE3_&q3x>{oaWDR%$Qp*(Ew z$pX<4d+ANsj@p&nNFTFb;ja9+9sj--Pq}@x4V07ipn5p5Q}*GzAf?)S)8VxJIhUR@ z_E9N-vv!{>bem>>I2=*Z?dSENT(CFdC(sOgkqx$s_UK;_CDZ;{Iw+UyNj~W4iv8V> zaL=-r_6Fsuy-OsdYxW6#fa~_NH$b^z->?D>H|_bEfLr$PNW{Ejf6o8;#a+948~n2E zLu7z^cKI;-bz9@-~!9(-(H_!`m^ zd&Y7wpW0n(5$w6$#eH$1UAqIy7xv!VcNE!IUx)3bz2A?BQfx2eH`7=46y|j$_GkOS zd~JWmoy{A&nR};F`<#zJd226WC8NR~$aJgHexel8JA1F4@T;<)@C38k-i6hz8vE6a zPmBJwA%#0ma7Y^*ne8A& zIKF-dh;-an!eOK1`8r6O9MAZGZFWrf01)N4BES~y5c6WiIEHe5+2T0LZTwb8&rhJ- z=9uLV%67+}A?Rp_V=vdnoemT0S-Tvv6_9p2zAyszIKI}wFV@k9FG-wZB|nqxb(q{> z#yhshg0jz1*bP#GwoE8sapMIYy0#^0;I7LMTr-a^^xh=~&tUgE-~L4@2lw#|UPQryb4wKsn<` zxCP2thj9$t(;WY7fbyK9^j9#?J4P}!N_Xtw+jzl|JO<1RM@<2wi;jg~LdtXm^QXaA z9C=KFuQ@t1-@Wcg^T9Z8IPzx!ZaOB6hw_%=%Si}!+wqF?%N@svIN0twW8#cseu$H>WWf8;1>FnGsl)6(Cu?a*SC-g9b1^jyl@QV6)bWLz6N;dnBE5t#f~P-cV9XB@RLD_ zV}2l{*N$U6%{LA^GtN@S@l3#5M>=DcIr=iKD0eJn$*aOqc^u42$1DSay>q-8i6~W$ z%8OuDJ7OloR^#aU7&b5GvQ#L2oe#NAFLKsry=So#DFfaWrysM!KxgZEkd`=GmI9VK z+w(`7%be9L?=N?58V+fNa~*fILC%(gp`dqn%4+AsTX0|FJbE0; zwa#{780R|Y5S~$pbH{4fLY+_hLK)^1_~xv4hCKu`+}V%++k_3yB_Dtp;S4zjh;%yo zfU?xKd-T83H&vj=K*di4mor90;M=NjevC68O`PMh%@0kbbHiU`4g1KoVsV|=(uw!*Y^|7!@Sm~ zoZIv{%n1VXjB~sa%(KpRmti~SbX7w-?`-q}{iQpV%q}iC=kVTUICt}| zTyo~Nf%39*ALqy`PD?nXENA*K_+4`vndw}2mNGNG;cU%O-*k2@1M`-1US~+RoiVBC zHrsjNOTay+m8(pS(|rw6uG9A={PLXXOndX4&AtWPcXs0}{J?pYcjciou@xwfoHL@} z_t=@S5w<7Je_4op>TJoyt-xvLGWg8t;Sc6>=MX;Zh0fo?;qb!Q`xn@Xoc9)h`O>+I zSx~XFDgyAz8O0Q?#MyHYq}R@SjQPenfVVO#3@jQjUxuAB1#%UzAez4!B0Og_P(rwuhAL zn#J_)kZXKTC{tV+q#SV#=Royl$`X3-=xK1#+yy*Ivk7B0laaY(b zxt19a`m(E%g~&Uu_N?37bv?TdO17)D6ArnqZ&}sMbM56_$#-q#Q+MChyco6zF6D9z z;-Twk9^jGdjRv;IuHQHvK5`hqtb!zrdl) zb-Dqd+|}hBY!$8v!GKCveWs}IT#?KKs$3l_;ZW^TC!zNm*Qcyed%4fCmf-Eab`2CC z_YW*m`npAH0gK!V^q}~;w{t4-cPCYVve>=tSHui(cbo?0Qn!o=&oXx-7HF5dr+NWa zxbM1Q3v#c~Kw9aZvkDHY+#_hYNwy#_$J#=VE1B-gsbhQhYaJ^pv}5aNEw z&19(iMsrAE?oT*zu6Jjh1cbYbZ@{*}eNllZ5$?{5pp10S~RlS21=~EC4WN@=YH88w!QB8ZbtKN8NonM;>!4nf4xcw|NWY z33qW3VxDww=fZc&9ls6ARQLXYh;rH;%wHRvabMpA+gW$mI@r?O%adR`=bkkUaNg~` z29WM9<$mRYJCzx3hPzD$q>FCMGI%ZAS{5lUx$iUayzG9AwOqL3{)9gz$a0@y>G-N! z&L`xWds}lz*WDk@gLK2)BNy&B-Mu$Ly5+X}!Tq*-DAR*G?j4)Jyz5>w2DWT>Y9xZ) zbNdDYa@>Xku;sct?}wDs9gRN_uJ4ENXW3^SB(+;c_( zO5LORV7_%P$_J&)J)hO=a(8SmNEPnpyy2DZF{~uMbN9Oehbnia7`AG6IyWOV?&3^H zUY>0{0N$QiCMbP8^Z6;-*Hg*)Ws#>>2SoAnw2pw}@41X+w8fr{xi1dz{Fnm_^c=>O zd5Px{exzIKIn{t*%RIMz0%^IYZXw)Pc(!AGBFOV>EMTSQWPZR~?fD~jQfoZlFo$02 z=@$gsI?sAcLqk0OO~eHW^^BemWw@vL7?c}4cl-=ygy&~6xJP=X@wfFGJ@wy%xyiFJ z&u_Em$IGFN@|@xVM0PMT(P%7RVo#CYyNVPkDos?1C`FnyK@yhJj@gV?i0q878R=1D$1lqV(q+(?Ab< zGV^jdbSaFl2OLtF**_v!8e?UE$$2LGP3Y2@cY^>I7+3m|FEYQ;ht6OE--cx-v;6@s zB8yR7f^01xx4~)|l>?&OWV#Iae7Bg?a0u&|WmHqv zGf^iHtbzI22GGcCWfA2zbC(jcCdOCid1J=WgtpoHjZ_%pX$F%lA*UucJlyQKWs)PF= zgM|Teh3Q-ec*;zo%ww4Oo0^*=j5mGrqf7`{jxn`=fIVX(cz|){Fl|}SnQODbUNGPF zz~m+4L?>wz%<4d}SIl0@LmZ_A^kg|nWwg3EOT(#C<05_iPk^hmH324W(k=9|kh`?L z2tp6($Z}YEO0RE+&P!_j90Pevt!WSUk;>M?#8;aC9!Bt!))WH#rOdC;1xRa#zyhTo zZUhUGUN?hfu+)RTki*gzEp$hu-xPx#l}4RJ=n!eS2JD!07M+EJO8qFs36r|bhF`ce z>RVhygw%2nEK0hQ4wa&%&nT^kk-AaddP4dmHI`0FKc=Vdl(gOwpCMN2M~QBn^w?em ziZ&2CLN_<=cU)Ep`R|@b{fJ9(yZ$cUX*U61K12{u{$7Bx{k`uEa_|uSY}I` zP9j*Ybe}gY^Q1Jk@9Lmq(@NyBJmD3*56Nm_~2_a6vLr4w?nE7IR6(V8^!m?7zQZ8I2?JUCwyCFTh8Yb0J!C|l( z=_y;d*GhS`q~Da5_ycZ9qlJJv=^G6E8l|tFhUIN(&jLV`wE1%g??_*N0BDxRKY;sP z>DP78wMf0J!CIwv!ZB={G_?b)UApxQphId)Y0N$8Q%_jlm;Tw05gtf?rMEX8O1*xB zNvAZL?roR!N)g;2Nez@1c1ycIgGrCHWe_I4(htkP`lPRD!|a#ddI*OBsUwX(DCMfb zhNPLjfXC9TAgvyK~p$n5ep_DOP=2it=gzR0~gpbR* zO~E2%+ZKYw$Y#^hbwZY^1Uo64PA7$NvchLDiI-IxLzp1@f*!CW8PkW*XJouan4Fba zSmHyc$Qt)RmntiwL%KBC>{vKlkX641;YC^6Q3x|+_7pQ)cH=yRC9>IGU}dsZ^T5hw zg|rr2m9>&(g=|hP+^@-w(uck-YoI;6Qnr-dh^&$|9tGTxeMXsFwd^-a)@x)3xPV$& zFnw7!Wjm>Ay(L?21(Q12rdSB;We2u{HOTnXP;8V{)7`u+i+BplCfR5(gm+}wv|BXG z_Vqw_SGIXFzK|AK)PA_P%I539+GNR#;LtA9cL6$Nv)+NjJ(*i6*nL@n0+tVCj+^2B zP-Y#En4PliLg>0=-~J5tNTzuLhi=&kn!Y_UG0odvnT$?X`(!`OzzF@aO6occ$dc%- zfkD}{$#5T%={|+uW7(RQ5I&JTqU38tW^@adqq5P-(2dE~{kQ7NhNu=Dmxa*1eJ*?c z1ST(J)!&1?lqISF6S9Ws81I#A2_1zw%5TuHPV#xph~g}t(kJms^$go&5@AA2}>%R4C(_mPKlmy4h=l|DO zl7~~t9WQr{fqQ~{*+cjx%H^M6gwygJ0tl1jztS3cMsB(a?5y124~KK|q5!aDd9NCu zAw?cdExlCvAmt%x^8Qh<^YVl90qOD;C*giUzKzn!i}E2eIAqBG_#Go;%B^YoX36`v zgJsKqFM{rpJe-Ejk=sZh%$0xI1(qk@PhHe}dAAEp3gj!dA=qX4ZYlr@<-d8uvPi!9 zD?qXQA=LpTa{6!Prj*HLYv5Nd&!fWjs{FAO!t3$_$uOyu+b034uvM;?gV^(9y-LL1$!>nO$NM>2T}q4Qa-Z)!6xJdVz5{8n^c54 zvNp7`JF!pbl~iYz=LHiNwkZxVeb@qeu6EAF(VRu~tq_X89h?2&B zOOx_EJHruC(pl|#=q|9|EQatR`{^tQGuRfIl$k8=Q$)#PXY2;cVOLW-I+xwt0f#*H zEjm)pXHU`LNddcJ0J_WU5T#p%teUz;MeN+Aa4%;2w}F+g4KzY2JI5QsEA0FUxL;%U zy#?WQwvDRfN>)y1FI6m)1d|(V95pv@v0D#gggVyyBpmA5y^Rnyu;0^ZStEPuf3UpE zen^{53v0Us(8>zw$!cTcBnaKk?)wz%A-jQ6xK5U}MzAjS(j)|X#E$L-bhEj%9QLs@ zsp9Krf1yodfSpF^)*x$*6=%__=qOZNrfA|5PM4Tu`%3Z73pTs#VMxeg2gLdqtZD+ z;Yf>PqC!Cn;AzDHnrcak{M|4~Q6$q0NL578)J{_zq1E)f;-ohm(iPu)0f%fwF-_)6 zih1;MS&kxV6&!LE!fH6=DZ;54P^5UBwya{s9v&=96z|cDD^(~10ap}h^tQ+~Mfz;O zbwv>Ef0c@LZ)2b;g@`ia8;Tv3aIaP5WCLz0ENTF^6jARZbe+P&60BZfra-U;MF%~Y zjfw^T9XKiKe*|k%gwo;c9YqW6=*@~1mWX**G42InhoZO=e)klCd9b{%I74;Z1I2!t zn-3Mc>i|89uV_W-Rou4(>r>3%0f&A?I2GpuiaFCEe5$ad{A^fpXeo3filn`OQN`7C zz?fnMZR{@he60(Rq|7Kr%rnYf%Gu8<6ORFsl~uH9 zq$t0ow+T~~;nX5Mul%tS!gS?Hnidz7XXw$tsNC@dSca0f6f9dAK(A(8QWh)+%Td;~ zAy}^R{Wsv3r@T+4WxjG*8CZex*_*JutaMn4izrmiT?flz zP4fU{Ny^(eQ~L0qr0#u>ss<(8eW98eyZhl?0g)_epuq?|be?6LBJ z4@{mYji|-;R2j-g=n-XnF`|qrf1^x%OquKfHm*Ed4tTD7YzDs<$~Cl3yj12;1~{Rd zHvxF1%-e$~j;gc8h~lhTLnXJ1>P;(Li>vDTFA%z^Qs@zOSD8{K?y1s<;NYcFQ)cX~ z+MWZUk7~m&aPU=$sXp>ky+&_?2CCw&z%odc@Djpcm9Ychu&Ui37kEVFW(9UswZarp zLR5D2?H*G(E{0#Is+_9GFx78zTyD5(mJSf1`jd8<cC0}PpPs}!D3bKZ2*f?y-Pioc$L{LumqJkWxt84d&|I1t9Ywm znWXw_58#YyZ93qrs)t&7=Tw2T|0S#DM!-EqweMHxQdRQl5T>b8vmiXLdYvBAbXChR zf?ZI}r+xaO>K7_MGE`k@fK1gbF)XuG^{s$x)sg|gCDmdFK#pn(wN`UgbE#2Rpt}1H zgqKwr^T7&L8fs`1sTQ38D^{gZHdCT{pZXJ}s<&u8yP{&=fk~OFHW9*dmCHW3UsXM| zfn|kiB{dYUsibsMud5DF5?rauU|~|F(xt-WhH8flP_26QBZM`oGjzC6t6J3n;Z4;s zTKsRRrZ0nEoytlBlX}&OOz0X^MfB!Tqbjlw?6%6P5hhKlf*6?GQTb34p;^_O2H{T2(vg5pGk7A3@lzYCQ;Hhbo9>@dMR2L0}J6Mt)$Os()qxx>S7XSv^wu zP%+Z2a;CkwN41G=K(A^)wFdfB3+U*rU$w#+Y(N!2DcqoHHuXk_RNp^>?y;(`66}e} z?>a_!s@nGnMjuw?e+|nK)z#EL4vy;QhhXWXj-hsgvwE2Wn2S241mn4>*?F*ZS2HHid8k9Q7~NC7W)MOz^^Ig$ zdaIl0tpQ)P;5e9{dKzWF{^}gcTLaW}UGNK3hf(c!O5IA+DOznq&5js#GfnLi>L+&a zJE?w2N42r)nN)1Wsoy2{c=a|~cN5gJDJM!)KiCG{X|=;9IGj=AeLzeS^_t}fc20eI z3@lCEmI9OW>cfHXOIPpP0=S?)J{7`?>eyPCWU5U9@oBTvb3X)RtK}OI?2WOuTQmURr>G>6P!!@un zwc}yv%GG?z0I#Yu_QS72-Bk_0YwERBl~<`NX$`rd4l}@^T0Q+2uo|@~?H0A_uy_Q! zrOwQNWu1Bor7`ttA4f!KP-hjuvQd5g3&3qPOU;fu>eTi43Yyg)2q3(x4&MjM7ImQ` zbgk;&XoYT5zy2?D9qQ@*fP3myw9emGzwtWYq54ZY9q3d)ruDi@?ffoG9;rKNqwQAT zY6k07-@OIsQ}41x%zpLHRH_fCms6i_P;Gx1x*_!fe*}A?R?=GcR9zkp;jo&21#Cn; ziE_75^#Fa$F?DJ-qKvDXXdXRR^9Ww3CA9!Y&5zXAaMHYRLuhBsOj=P~H03|Q&sCH9 zKbW{{p3qeD&;;&5Xiv>_ItcL6RPMwG-kR;S9QtVHkMC+2jW>FM`0h%Qm1Pj#s z*oI(1nr#)(1#28nAlMPj6k7R?YNpZp8KSv-4-UsPJ{b^(YU1b=KTNYW8GhlKRyRPT z#+5oXQ5xrMV9}aDny@h%g(uukXf*%zE;O6|ORP2DjY1f!iEKv9IL%)xz~VJqx4|Jn zW4jem5;c2|BFbsa{0lHi(%f>uC7sdy^a|{(=6iHSr<~K6ZG}m)=0zhQMe{8!;;EX( z9I!Oa$P~mpukrjE!gP&+^2iGs9yJCpYMyriGBnX$Fv--sVS&(Dnrpit%+@5+1AR%e z=}q|MXsqc$$<m&~bW+ zruP7#RKppB$ra7q*Wg#CxnBxlxn}a4U{^Ki^j%-qd`GXLRcb<#z^XLsD0GdcDgnW2 zHM?kkzo}VB)n~otr6r(2^N6E+*V z4$XlN01q@lv{XLSTuH^~oticaxOZ!Qr6cSf&1Fh^do@edfB}ss6@G)7AbY@&W{^J7 zQ;iqZ+QS+N-Hs7W8GWCl8o_4}j%hyM0rpIDif-|^X7~|=&ow)#`}0CGZ5-^S=1oe8 zCp16ohoz(TQ|jb9X_ILyaMm`>1ar~uoR0BawSodTxNAeyaQDz2p!TV!Hj#QyUfS0v zCHB?^SHr|dJG~ozzS=nrV1C+9Ei8ve;2g(Xz{qHZJ;+1GPIvkHCU|GEJKtl z+8Qc_u4H?qwck-Hc2}E9RdS2=kELL(+VmPg zn|3bU;&$x^a(t8y?O7GrJ#8yB!0u~Zi!t5q!gJ6YZrX z&^^`arb0KYbz1`6i1yGvz^FEz>gh49kte5rj* zFrjszZQ_+S-W1@dYo#T~NtZ@zowIJXKbVW|NGD>t>I$Yo=%(`yMKE{WGFtULbe5E! zd+O5ZHxGE}exbd}TNgpavXAZ?S{ZzG&uK~b({<2F>#y6i0lEO4_iV%r)cw*2VUVr? zEr}_?y1(}W4(smG;(tV^SOLFdx))TFgz6IMOe#z_YzAGpE>aE42p#t(;JEHPy6=&? z$eFN=(*3dsCeb1|$2+ClNtYC>Q*a@S)9qae7O!(YgKJ69 z38`XF)CKe@25P>sGx1mZF=s11wed3*}j9 zy0#q{{k$%iPOH;(Nj1=2(B)Y`cTu;88uJ;tdfHPnbw5&*D@*szedw}vZB(6I(nZnY zn4_DN23@Z1eL8*2(-~1>ov(AI<+nhmh=T62E-fEWs9QuiLy_)@2~3K0QAZHEMAwpw zfl7786<}9%ajT&#)5(v(vRudPhTm0P31#9Hy1nZG*L3}~nqJqej5w@&nw}O`QtM7Tt``;n%8rWe(P+n@2}Q?YaV5SUPm^d|2MoEgyvLzV3Q2 zbPsg3Yax87Yo?mHQ^)xmx-Q)oPu#{wx}kCiyLDCvaY;S8w%5UWbyui$+^5^)3Fy~J zDAgR$soW7|Q1=cc&qKPGX8@0NM$;gCqVu6w-k<8;^ut9A>nbUcAJG-kk@=|3WeZHk zbRHs@Jk#Y+mvLNIcoMqjxVHMbf&Wp0zgeZyRUm;P`&{Jiyc^lG<{{-0d{ zU;Qf`gnoMSoAC3;FBAp~&`anZ1?mrv;c^e_zo!lJh(1mMhoky!v49Z$fl$CPeZpmg z4%Khm48I8d^b81(>wj$oMCyxZV~^6a)V_(DAL~-BWAJw`#P`^{h@yWrTXr3@VlZ{(z;Zpcl`%` z<@(V~SYFi|Uc(3#`j0MyUDJPe7$(>CdK$e_pD_fe(g)Got~c~yG=Zx1qgimM(a)mh zL#^J0RgtAB97MeqsiMjrz_BT+3}eegg%jjNU#GCU^Aq z6&SBs{|+7P-_@^jgRVv2LG@UxKI;qU+VmGG4Q%VBLE5zimlxL={-C{?aBm^yy{ypzGIbra(BL zzhQ@%gZetEnTPa!6y>p=r4;9h{wlqO_Ef)j0Di;zdG`P#`llS2jOs@|g>FoLTUZcJ2;osf)TeL{F?@Lo!efSb2M9wA zwba50GaRR7JKW$-=V}p#@xK7a4J;K~k%nQ)6{8HLlsZHkVz0w5#_-Y}!V`wDBv_s_ zET_%wl%f3rSghgSH^34MduS0zGSqwxzjQ-k4}=#CqqON?G+1qfWrpGVc<3?>8PpHS zGGwj*WE*m5W4L4}rk-k!LB0np*C3t^_X0y9RZEu*54f-_H2iuI?nQ>!IT)zeAfm#y z#K1)tVM?jte{>93W*DLEy4(<@0lRA0aUJZsp=vEcR~mBa;a6o?Oii^LhAsa9stuMO z!KB78x(`rm*pLCZX>g}x_LjlF0VC8Irc$!rXjoqg;cdeKC$J{N@3gPnG0dV)O|v2R z9Q^JY^1p?!#ZW?Bsy4%yTnO6@{-5CjI}FD6;CIik-w4-o-(bXmbsDz33FtE1rXsD| z@VFb6J%$GAxbzwGoS*!X(GOkxr?bzOWF2w2R@y@PdKP)+jW|8`+Wp+ znX%??Sh~-M`3=l#M&^33uo-XA${s$WN(+aG8M|!2j?d83HW4|)?pIhw&G>Q!SoDkw z^%yT^M#nD1JUL?%?QwB44iCU2eulsqkTAoTO4-C2AIyWp=^1k$!X#ABYAO7uxpYywEnk;a1#NR*KO7mgi zyf*w?6hM#O$1nfHD2q=`$KRK{M(M&Q5och(^tuP+pHAUHzO29$qkp#SCbY{dS;Sc} zL@y_|e4eXE@T$#)@s___KM zE#iD1K?~iQouknHuyiKmKMHt|{4|G_(VxFbMEtcMK8JSQwT+0mULFJa2D^2z+1T+1 zB5z9m2$ElYY+$oFkk*qeS60L8PzH_eY1Bte9xtQOV0d^N%{UALAEVs0(D@prxd8l( zdRk!OZ}hwlEWl{;GeDrxQ5M3ZMtlCo7>|r(vmhKZTD=?Y<3^T4U~a~X4qzO2nYk1FXdOt{rrx#!KiqDl>NThI_ej%?}V>HBNm-LX+wAI!C!l)&;PuCM$N} zsw+%p(UI{rllGU0a^0kr(%MRsOLP!bWwO2*QEr&bq83xNiHaseZSAeF@=B zlg58>5w}dXnn74+(%}uLHyQSVdxJ^$T(CxyHP*J?6I^+=n^Nt)~JCLhvf(qU2>gVFDqWK)55-=ujlbPr6D=?MOz z$=?*Z(($Ui+6XSFUyG^>*g7uh`>!Is4`IGkOK9j>i5cZq2eFhjXxkTT~ zpvmGQupyJudcb27oe8cC{~0iS_NONLZU~1>-lp#Hh=~j33!^4}+h8(gvWXfN&rGfb zVZ3pZ$&>&;H|a=*?uALxeuRE$5=HC7gh?R>x>qKTXiajQ{9YRzoF;F#0CS!^cR3tf zCVxoHFW1TQ{({hL@@_hmcAtEp1K=@v`zq)>C*P*6#cOgyEri~a!{#80&*WqDLX7X^ zlhhCJo2=zQ7(97`rsmOz{$#F9Q<&!s(`_;*nbHFMlJ5q^s zZSo7+%C1k|LVIoH=psx%8v&~{{nr<|DpMOz2&+wZ{{>cKx}27(TGMTzfSabtZvt+aTG<2YOuyG) zpn6k1wWb7+{GxY@(4ZTwnn=x$P)KUw4S^bo4;3=5;)d}bZr|uWPa%gHl{mbUZ zQ!mi8AD;T%8!#D}`g|jFqf>3>z;bNryd!{TQ(I};k5ARp*#rJNyJZONYL-opu%B6X z8QlHNj?w-WV8-XdA<%3M3tgDmuST#8H?vs`U4&WaAcV)w$|_+JWoARWa3WpIh zX%K{CW>cTxTE@-3qYwSu3~x+g#+li4B1)k72QDy)HxJE#F2Ov1D|CtGUrmMZw0UzL zOp?qWP*kZFA6IGa{0)Rv=B<8!8|L@lfw0D$ORH(Ed3ZM9rg_Z`z%BC+ z>Au&SH_wB6gZUD=z(#X(O52;vJ;%WAn1`eQn$0sQN%FBUTMF>CXrvB+zlHk?M8SV{ z#X=ZpVN914WYKg34u>t?odI^l!iLVmLoB#dZymGvfXbj4i<}cMIbreRR+yZ$7^hEr z%EE=7>sX7VXRwU32=s?A-eT7dZ({WG78ZxV(k;rm z02eLHsOHbG`2H+(Sr*eP;GS)fJONf?v5{tRt;H#_yk)VS4*lvZk|%@JTNKcE4Hm~m z5H?!Op``k@#fP+%G+7*@O6iWph1(D|Tim1N>8?eE6d$a`VkYGUtrq*~VQ8~BM=Nc+ z#oIJ`hebB^UhY}cQ3811qBtHV4=kodLHN+Zg`VV2i+xMLx-150uX<$htqhmjZ82yC zhaL-?%`oY;Pyc7jCVk!I(FlssaF2)0Veidq{9RzsAOp0*mN!sm=t z!LJB**6QpxVCSrosZ39?`r;adX;wR_D7s*!qaER*l@V>i8CDn9L6~jjMUPF6RSDgP zT&udL5awBhQZbxwW&0(DEwI{2>+WT%sV>l6wNgI>tFZF@3=Y?<&d$TNT(>g&0uEJH zvD+cMVO91EShbZOy|?UVed-d}DeKPvF3|dKD$~zd=LR8Ivh~;Qa7eM9LG6oF>ln%o z)2#PUNpsQqkQRO!)`_`*OzU+&K$vAMqb%W)^#JA2Io22E0rIS8-oqv3TU)!ry~X-H zGdQ$b2hn%dW}Qo&!glL)da^pK|D}cVo^`zn!u!@6RB-RK{+f!~F6*DyK-Xifjt1+q zHpIZ8-&)-Z=4kWtb67groc|pc;cW8`C7v!eM=7aswNX9>xY_J-gQdGo`A=X0Hof#r z1ll<5MwB3%^mpM9Y%}&8?1;^0(=kwljiww9$88$35jxT)!4oD?HtxYNDYO}(^`*$B zm^!w_HWPaRB{p-`z_Qe)idK{>HdS#Lq0Ht1mCfZgR&9uR)n*Bu%vIQ26@y)~8G9S- zx{c$0I8@qLFtDt$dGQx?H*985f4bVHsTxpgBc*wC)5azYCbw+HKL)F_5xxahZ}S$d zQVlk9sGrklGoAXkO*WgTt8m9=F%?wJHa(eexNGy9DLzB1&6{b^wb{f_W2_zjkpy%d zHfn01-?Ldt$bh9Gteq7{P|7{YuN|<7ph~fIpe$ zK&AB4Y0MU|;b}2c6--Q9MESKlX8~o~9-Q>6h~mlF_83AhPQ)Ngj&q(-<2I7RQmq=r z@tFc$JmoKNX? zbZ|N&;Bb%gTPfV{bJqAn_>i;XHiVs=6`8Q?;?&S_)+0_6txMgUcxux1aBNed>*d6L z1zjKK)4hOxjyxAI!1JShoEOxk7~zcXK+I8& z`hS2i&U+sN#yPG}p?l8ZQeNr2jil>SU`M3jHN;!LBigCqA5ZM06@WwCH@ z=8jUX;le#ng^DZpARiau#;rL4=E3!*G}M#(FQwpK+$w6ed2^rmV+0>={5JUca`UJ| z;KyBY7nc6qkEu*L#&x~`_fYP(6|fBBCOCnGbLYMZ_fy=^X@FSn$e*x`&&T>PN0Oz=S9zmGQt#^lC3ik$`x~6i& zX#-2+@@P#y&#hB|UEm%*4Ys->skWHC2dYfi~*9(U0x2=lr17P!s=?rieA%*}lTze4USdNrYh>$w)XQf|y!@VmlIjt48_ zzDBusIk$QY>?-&2O88Z9^|XFoWvV#axGtnLmM}nDz|oSt1Du5 zaKHHjFg`tY4=i6yAE$oE#B|ANI5^sxWx~PPRo+ayOx%x zI@>vv2-e#sCIA|2dzQej&9;gfbM3aob6t;!_vhrQU&m{n@3BYzuhG}umHR417Klx7byV=w-Zx35@C0e zx?S^6?JY|2cHg+e^1R)yCD5hY8JXfDF4%4CgULlZmlc2vyGVLTBhzjJ ztzcPp>1*MaZ8ymX!b^5n&SShBJNI4C<=RQ}(D~S7ulCEp+8}){EhH)lQ(rKoxdDl|U3E)!Vt$0~+jlsJY%|_v8~myIniol@7b( zw7K20>!3aSzTE=)t_SSW#iej-y&E#@xG;X$(c7j z0N}#AMHlbN>!+N^jdzW9Ja^u;7q}!3o&z}oUR4*|gLuhmSO)V(-C%N)-;vM=7x?)}eZM!AB32Hr-^1dzvyTY47Z+w*T zg3sYADCeo)fbJ?UP6lBGFZ_M5YrI-Lf?el*z6&OmJoncSvx>L<3EXe+T)u*^n)gTp zsNro@!=aW}w-fF+d0AHQyTz-byHdx~&46D$uZCWnYv6Uz3f9Qm{Sxdp&ngGOns^49 zV|RFO-G+NJ&sqZayS)BaFlpi4nhj{>Intxp#tW>0NjvXtYPWark|;^M$1D8{y8FEP zeSinNk@pbnA+P!hpp*9{B|}|2Un<8R@hlq=x|?TH2EQI&-ZTh%c^;Hs_wmA_q3h?> zXFxZ=Tm2n$gS-?S*bpz@3?`3xTPgE@!aI-!;Zxo)WyZt2G@AA!yiYnH9ObF95M_+l z(Fb_O8=wt(oL5O1%X8k@cVO~@mqkm$OJ2xounC@zFG9cKMZFJjdgA{f24ze0Dko~e3U@`HcHlm_@mws2J;g>or3i)#`LRiEP?1!+JUqt5?CH(1Y0i}GebNIAZ_{?7D z%J^f{!7AquQhj@sf0b@{1^+Out=ITrluBRcU)X_|mHa$9HLv3LJO<`tj1fBd&y|2Ke(p~YKH@Jq2Rc;cub6c$EK-C4zYf zUKc{=DfsOkz)O%$%Z0a~Yy&RPM__vaQG5kYN1*c)n9x_?FYuu`79coy0}v=^qg^IQ zu;2@@V8MLqh8`9~o`Ud*pve!yqk<>YgbfjtF2H!l1mn~p4;3u82MZIt`4L#SAnpb( zDMIk23x+)|u>T6WNWqXXbWsAUQ*e(Kteppl5!^Pw@`Qjh0NqJ}a~m8^30!FLh!yBV z!QuqZ!U6Gu?{WYM0+%o0mnf*E=lZljy9_Kz;9d!KMo|0`CT9hqv`L*4xYFEA7CdS| zuoS_DJ%Ciff;GhEtg70VoRSSw}SE~^enn74ANV$V3Hw9l(1$IlYi{6r{6UeSX zS1*{o7nTizBHExE1*X}6+kzBo{xu06EJ3h4f=i(gHVYO~hv2T@3?*1Cf<4skYZVOB zNm`rW@>#@e7lh3Q>kz!b;sWmp-17nV1spn1dmuPXS>;2)!xy(9<(0kP{mc%>Nc9j|Cfd!{mt| zg=*NRf>%2cdRVZVKKqD(;R8km%-8T66Z}r?w`T$wJ>KJjm-OsD7kE)8_=O;pitLwy zT$&FPf)8sE<(0tW3xK20=}lNV3Dc<#a2D?03vdyhjD)4D(1U6VH=)lyL~$3k-v)RH zL)#$q6t>hMrk5}_8bWX3VtSR#M`%Oai?8tZ2DtkP&oc<-FC3)9i~!*iO8o+b(LoRf z316cgM6l4AHlo8q;Y{d`2tUk%@Tf4p7s3!>%2~iMVH=egp+eJHfH2|x!w`lGr`mx< z2!p8(KQ1hwoWIhj#IAjTZsv~?IUJw@|x z!o*AT*B7`5Z&Ab<=zK)p-+=jw{#Xq^Khb%5(i4lTDOY|@~ zEQ)yw-4T&u1>mTtkXjfaqUqGOJ0?=ni!Y&~qeWn0qOCMV@q2)&jEE4q(e`p&bR!NcJ{Zj7Y`8% z0!R?8qzXDwq-_Pm?+AVy10{(R-C$=#rgH%J9l=5HJ0}{VEhJgAq6{oW)P4w%D!S>4 z5z<6Xv>cun%{&f=bdid_mkT2I17H_L|D(q(Lv-{ZOfp5f1rTP5!ZIPu7DZ7CcS+p`qR1uYk z^gqI~RP+s%UROl3>D9F|k+KECa#8#rU{^(I%B(6xWt0nF6E%E>DAz?J*8!EHqthX* z5*==Z$qiAH5B#b{Pq+})h^A1MS1WQVLFk(zB`turL`{ovEp;OIA7N52l1Sm#AhNB1 zuu&v3hvjXN8;#c_(tiPmJE9-x8Eh7*X-?l2ZDiZnR9?|}3 zfL_rbboACIT0=#Bzetk-;ed!oiRYlG;Wr3}M3Z-bJrHiavh}xh}MW$4Q4vTz? z5OYKnc?mEo8omUFF_Bd=;F)O2MVO3>?vnFJ%Bi#o4qjg^AbrfrX2^sXUGludzX}DN^i>c_17Qaocff#W!b^T6=H?=_+EB^F0gmL1dl;R|a-PS;uC~lfGUEImQuTm_r!LU_gH_8NVh*vL#LydU&1RQF`YlL7o#pR#C z;goiOn(~yf5ym0ec{}qderH_^n-t*(t82 z$FxhVD*-$b@9ly~x44L!Ts`8SC&8~*{9ZO#pV*PAo_;ZpGUEYpZ47jS;(|s9hr}Pz z^YU1X_X9Dx#5(%4PsN#3j0}sHKY(sTypq!TQL$<>gk$2#)USIcKKmM?jEe^-3wkc@ zq3z{`*zHZQmtxF%q;TRnR204v2he*#j*>z83Y;Y0Zh_EQa&7|5Me@#UL~)fIpd`vo zvOXHjU6M`TyoV%(jto2{u7{xWlDsd1&Rdc~o2idvJ0%3ZlGpzM_(>ct!^B^*mH`Wp zyhDA{K*`A*2!kYN0>FYL-%;=4utY(7)e*@vcfe6e=mrD}kt}osJ0|&=7J*Pn{YePJ zBu4%S7B1QP8z4dwN}0!T$*hC;CL$%Xsd$Z&toRxbEjdnmV~ixU0+uHvGRp2xN*o3e z?3Cn_t6;H`#x$@vNd`U8@sj!8fCS0nJrE{JQmf&9S|X=vB1tk(3^*g<3_y5Rl1s_L zIY~$`q9jYE--j?oam9gagH&2ZF(dStMl+YQ05MD| zmANOFGTOCIGI!}r;}kPM4a`_(BnK>>skjA5U`*-2K9Q*{hF=o1wie@^Vb)V(eU|w< z3viCn(H4@-@OHy8h547BiBzWQH?TCOHx=wW z_+Xh#ItP%&yxoGB*~|f|J})tjqwvdNO0&UonQ-d<B=oay!7ddB%X1Z!ZN9zfX0oTUu+Hj_myj3y>#Bcj}4m?(_U%m}C- za+g{6HcVQWKw9})8N)WXw=w-(2-}&$ayWD_tL(wZFmY~hA7mDh`(wtB z9i@DH^GIn0jjWI{s!JaYc9k`Zp=CcN{=gijzuoukQ zcVY69(SM8)CKwJaYp<9f+B6)c)98C~l9tCq=qz2lAK)r|ngpSn)S?CM?$X3=jOQUe zyb<6jEp>6`8&`BNLQW*1WHGr1A?S3zXO7$7F47imQJUbN2EKv z03p)ISPXPb>Yof}gtXEWa8mjO9qXKu#&&?kN)=lHaniHqfOzR^bW;mD&a=(os4NN|id><2uu%(Ug0q%F4YV%#;0+5BCDu zNy_pr%YvvxtdzA;IZ!QA{0z&RvV-Pe^)ks5Sl*Tez6ofN=|Z4ul|>AIwaEg*0qwGX zQUD#Y_0-I{Cp+T`ll!ub^@#aEHkoRmhqC5qm~_hSK83DJc4sBvk<9)iuB=;jrxws7 z+ew*6pX}QzMCq4tydZoj)7F7a$lNBu!AV}AMKEW1`3QtA^3$Kg!A+h(bH!c$?jwxQ zAn%`mWurWcww~Ma(OZbpB%en;>N|25I{j#thwaFrCe{0lUCD zd<-sjLWU|>upvz)w=+Vz+^QhFzVQ126n#(du44cQ!nh(Exwt;SH0sHM!z-3lP zOGzPn-T;SU_WgZeCG2u~giG1ATfnZch9W>2t2+WHXQwX0bzWtk(#c2#JM+I)k+q?P zvyu&^0;h^yZ42EEcHvA!sb;?)2Gp>P^hDOO%g%${WLMN7SRMN*EspiP!@4N!3t-}^c+Ubc-4s`{VB(?hjfK!t@e#du;ibrOhC`4d za5o%+6~QL33|B0ojXgrqHVKx;6@N&ei&Sh{3t^OE?>Y#h6~8=$WsKtL8o&v~U?)PK zR4k<;?UbU&0}io@UDR%mQ;hY1#Vh`p4oFa}m_tGFM|U&;7oguoyQ+P1DSo;b9W;WC zt5J=duGgqY2LpGbZAJhOqto+Y;%PLs8agkd|9JzvjiM$nu8+}4)Ly0$Mi=TKyl51% z6v7On^R%>Q8copCkYyBeACPVIKR>`Fqn3Gq9HZk@N#`0F=zioG&6ET3jf%@~bp=M% zv>04ATCE2Z8r5t<=pv(_CxBw3XSC~=7|nf%5w00UV{)2y8ttP(z}5J#wa~d4H_}<3 zyRm}$-yX(q(KF>~oE?Y}yo~>`26!7UqK>zZal|BCi?8u7L2&mo{vY+A{Eb)9b{}AT zcQGsjjaSoD4KiLrulfcXU%>&cX|(aAe`^H)wD`)bxFa`-^-IA*)E-jzwh`~0h^uLPx1F%DU_N1FM_=O$e?QI&wGA| zzq^Za_dRQ<^xAh<1<8K-R@fi-)EZalY~)MNimOq*5X{}k^$(~#j8=aRJ5QsZY327a z`akO4J20-J+8@{5)vjD9kN3!X@OY4g#{(H+N4t`3nKV{gq>Z)GW_M-Tp)86mI|5lY zmQ4}@ffPtjNFY5S9Y`;v_dPNi7=CdiMxFYqNbCjFyE^iYS5fbp$g?ze-V%9nOTcc8oKGTndnB?P z74D1t3(taP%G$fbT@Vm__QS=!5&BOGigP z`FW&Hj_&d&)H@}*>E}qD8eQ`>z)p)^GL6jBqu-x}#~IPY2LL-WdRY%r-;3rB!u!4- zec;1r^TOyA6ss9^7ST7N+dqqX-)Nsh z#{bRsFVmNISo?0Y#~$9k^lx~>vF$I=ZgpJy#aAPBe0vWCq7&Lz{t+clZ2wo9eokut z;ye`jZu=pm8z;A)PQUjL+IONbe^&cDA40ve+mH5;I;Z{8b5Qc!_CHeMKCgY>DpD7< z|KTjaZfrmF{Yc%^zW!WPxVgQbH2#+MgMN;Zx3^apAoI@l{b=;QyZt~C+aI^@SVg^i z+PAq1kDs(ZeJ-ls+x}si;O=X`cMU4s-~Mh|9v*5xlkq>lYyVLOCI8%h=|OnB)_xN; zpS@$nb*Ohh?7PRI$l}C2`u895U7^JR@9eFDrSH)7a5ndg;m&@Xs*mhf@ zv1?-qGPdhtZ6yrr^|7-#SU1Gl9!9TkjNL(__f4@mSE0hqu>;OQ>PN8?cSGuy*kv!E ziZtvnvve;X8eI<}r{?$@#JejSfL#P+)ZZN3tFgc|m%u~)W3 zk-x^SASS;S`#R;Y*JD?6_3t15@(3OW#Bcfm9tXyg6nzhhAJUF`2gmy;Y9A7R&*P|Y zX#88G42Q)JI|(HZk8hwU`&;q%UxCL-@fWDvo)Mp<=yXo}@YP6N96$Sucw8CZcRALAe18?Zmc&n0pEb9~@6JpK}Yn#=d4_>277m*c-B7Q7OleIy!tHGc9c6xqAu zR2tIv>9}`yJofFFPX@eS$IEl@hHrFSP80F|9Xpm$?|_bE5k(H{c!E6fppIEZlsvfO z#J>RcosKJSK;}^$Kj3mYy5qTDAazW~ldJKfV>_-U?jF~1=R8z6q2ni?Me4+komU}s zQpZpVFZymr?CnUM-0>gFQ16tEf8PtQJ*%VlKhfCP9k0<}cTUIm`0eL*Y)^iDUPo#> zR5-um8}pI6pkw%ORJgF?ca&r<>Ns`<-tfbY=buHrOFAx|gOZna+(`5BWgU+`hR5X{ zj}cq1=%|p{T-ov3C3sxb@xp(g!qpv*{s5^Tccf{}xTj;Ahfw{Ij^r%#^H&|`zlrKE zbZnJF=3%q`xF`EEYuh_f@{U<;6;yv=)}HhNyfQ0RMCR+WCilnV%~>BBL-hk@-%3_+ z{OtWdj*@50KJ*}@E}4Ba1@CKSZ|Fk3yJlZAiqyTcC&>7IKKtHL6#3ok=#S9K-)A5D zO}zGiIlrUE^wgYpapLxydlyaFht7S2()f{c5B(YH9W(cnm!p-F=00^gQm4+{k(T#c z=5DzcTKW0h6{iFC#@s2=^5fq2vrnMj$#3f*%ev!j7i2t?!T;ZVc@?EHTkVDH!Yt|p z#n(TN{L(2Df=9ip@cT0FR$6Cn@$TSCdD*Lc4#ggbTt0@!Q<3erK<2O8Cmuix&$pK- zCH|&;9d*8a;v?TjYTx)bMS70^zJ$zg#1A5a{AT=Plo|Jr|C#o!1L6mL60bWj{x(`? zj*DMTz2NxxD>O!&5TE=gS~)TPUzB@KoOR6Oc$_gSA4ADI<~;UxJnowF!GrKP^KI{4 z1laf9cH>T{aKk$$wrfWc|KH-h6#FWN(YjDww-wqR`SO0KuZjIl_CLMkUX=OFA85b%>>u8VGPU;~4e00I^C$cr`{bX{<}SbeBucJa zNs2YTgkL#*&x7Sa?d!TpMFd8|?`vYy+2YVl-H1r+s+27!Cl=ndn)X`p`t%Lj*<_07oG;#L*C^?-iN(8Tsn_OFTI zV2^o+Q;K}tJBc>;C%mJGr%!sBpCI!oZ<^-(pL*F(AoVlvtXGiwx!1h_C7{*H%b#!s9>Dt)x~YpR3Cc>m2X(qp|Heu&g@UVIr~$9sDS#qo}&d*?*&2(I0e zz1kaioZ_AMKj_D)Uin&7IL&+Ieq^5Ry^R9*_q@)F0QN4&*JwNxA+X8UpjLG z+Sy|h6}7!K+yUr5-rKGL-~jLZm+?5vTgNZ`wm0W`q>lEMz8l5A>qXgz)4bhC4$t=X zza5YByr*ZO$obyS*ry+QZ@U{Mul07g4XNwAJ#Rsg>%Bwik+{w4AP2hLTSMjG4sV!r z{!Z_%^YD1UyM&VCgWkiRLCJ@_WwakY>HV|~u$R34C1~Yk?^UWsuXt-Yp|5(UKZqiK z^`4l*<27%z6V>1JK5+qx>=(J{+ejT4c_@XFheggi6|Ec_Npv9dyOHl+j0&eliZ7$& z>5>0zL*|*0|JnsbE{%Nd1f;Hx?2OJUnjNwjg^%{WOOgHv$q>Va{l7I{SdVBlDGR3JYM#WVJBYk zUZM>7s(0zDNd48j&qL}p?|@&TFRyz`+A$Sxc!!dW|IHh|21WkveJzQ`-t>M=6#IJQ zitSNy@5mS4Kx&`JkDfuveIrwx!u=v~;`BEnCw~YPz8P6jMD_h6f28_-K;+xBm>n3| z{XKXb6#3}Cp~%6J*J*+}B(nYxqz;YjO=szOSK`QzF|iLhAI$ zJErj3??rz8ARa%D?0Og8{;SA4I2|uUzDuh0x5(C%PY#UUz6&ZG6@8hS#7WUF&c+)~ zkG`AcgzrVa@Om4b`2QA1GE(Ha*skL!d}nMi75ax`r_KlH7qEx}_EPM9@5E!D`0U#Z z*LWtng38Tv$i@4fkAC%iX!>{2tBZKN7`=pA{9mF|pF!&7=-ykRrPrdn9)`zJ?SF>3 zLSOrfuc7MJ-+m{`cC8^6eg2pgXmj$G)9`z0!CmH6?|$!kq&wgIG2WH@bOFB?K25EE z>e&m?{JI^9IqOgO0P^=(Ln-OY_dbQcd$u2j^80zWlF@&|d+~YHINbZ#qj>c<)n-ka>dF^$lcR?%lWs6|VO#qCEOz?*nfG>;Z507~b`q_aA=- z>_zW-F0VJdGP}EfWC)Wb-}UZ~9EkkRCttylh z-+SX0$oa%O{{?@y%^Zm8+wbu>et+^6T2=;rMkcf4?NyW8i?<)`#J76ydl9MI zyd(H+w|nnG$FTy-)cWuAUZQ{QF0WH|?s~iMOCR^rB&omfuG|5svm-aXh6?9Ie!z~M z8~GN+t4kyA_$C^=Eb>LN-s>V=6vwZR+)s4BE%K4Cqr109rfEUCH}Vd4_rA!_NKzk* zB)*N*NxD!+)FO9A|u$Op(mzaIT6`?+`Y+Pf{He*Tkq$(i2l8}Rs^_Y7l5zwf=I=ya!3_&h@_bOEi0)_Y|!;7kOLLm~cVl51UZ(!pIIo zcw7|u?0?~LapcS+Q1XY7agOCBk!xs0xH59~%Ya=KIrbfB^QOqZk*wStnad(~MYdzd z?~W{|CjDS!`zgR4iu~qMlzceyDH?zuiL9k#@zKa0eC=bA50Mx?9{JlXcsvn#_!eY7 z6X{usH~cbkHi`1@BA0GL=I|c9jE?>(YuKRyD9poHP0`0GQe6@K__b@xMc2ZKkY+Stlj6A$mqItUld9nN6xwACW_|UZ21t%Z@c3xG?mVN9-Zv_ zJEi%|EhB(t_a}?aA9E!B7C$_SzlVEY+!o*?y`PcDf5$rwd`_16GqF?Xzj!Y8NqE^~ z&&RG!BmYma-ffY3DfZPLBK2zQrUL4|9y^Tj5N|?SM}zyt@7x=yL*nO8;Dv|B_xLs* z--&N=Eb1K{U;IZDIX2$*9%LRDe{Oq}JU+g72#*uvckc|?N%0!x>67DcJb^cy8edAs z)9LZ^2aq}^e#&d;F^jEihKT7X)3q}6Dy|Ee|M|kT=Ue5NO zx(C(H@jmfAJkIrArJLqFFUC2IC~}K;>=}4G;@xyG>OJbco7&Z5 z-UDk^=^v1=R!NW+vHK_`pDBDP&lmXhF_sOH%Bgi z3WaZpeCQ55Zj0=|{@)R~kJ{SZktf%q$UTueI@s|DL|PJtcTy#JEV7uW`gr6K+D4y< z?7RhvJQ-O{E%~X)-lS^JM;?3tsoz9i{R~pSjT}Nj>UR;3Yw|CVtDZoGmm(j1JBqv< z+4sG8{5^8%~2n)(V-2S)c_jMPEV=#waUaP;OK@c4H0-jmSg zccQ-}*E})$@RyJ}Df)GIe?Sqgq)iTT!-J@Pe)Qk3L+Zk4FImyW(WAG(F5HohF?Ut zc@mG`L_anM6@D9C{Rk@jIofs_Ui+8mmd7LYMl`w$J*~b2PL0qf9x=1KHGlJ z^Jw$A_7CoZl7DEQO=|yQ`xPsZ`D**Wy@GGpC-%870=91q-2oZFt{|ko9XsT=sQ#VU z2S{&Ej15d8^UT<3$Ki2)Z0>!4T^3vaSu}P-Y#yn}jj<@jqaVd0tZ-ZGv~MGId+Z}$ zMaes2f4UX*?u;d#z#Hz0y_ZIeyJJ6QsKJk8-`^J%?umVUH&pmZ?7=+&yEpbMrH%Vy zcT%gmKepv;q#lS3e-NU@yk5 z$>Z_I*sZUj!k=QlIRL3Y$9_P4@Gr5$UPQ^4V&y*~^>XY9u9d&W?)oy`_eN~ak!bVp zu|p|Jd_A6dFCKfx_kJ1`_K7dx1RNAUh*HYI@e2!h91`F73AA!(ygC;p4~w5eGIx0V zC^Fb@#V6i})DiJpK7x8j#(OEE9~EEC&L10pY7f*qCH^9(@znUE594uKeBUo3^Yr+& zHzRdUd>Jd88~@4nNSzn|9vw2b#iKi-yZ6UG^9`i_9RK*UX!@`5p>5JTC5diFEFcj=f*SwDRbzEho_QPiH-MC?3C@we9&R^5J>V((dzEkB9Ovm-Z9 zg*`tqeIcq}5c$fHC~|FN{S~NwUF7F3m9nDhZx+=Qm zM^XKbXnF-wFXLh4fo=QPo$YQd;qUfWk*MtO$3B$&+Ep>`vvo zcHg}=kRGgQ?$(7VDI?|0Z(BZ7tQ0C+XUD%Zu@Y@ngZivAxoOq7+qf3CfUVc9-?;TO z|G&07wQ|!g;}fgKYsm%4?ggo>*H3O*Gch&2^~!Z?7ff%&|4oqvD6?Sg%1sN#ci%X^ zVQOr0byMT>$H#V=*jgG$ZarbX!wyW%ipkarB)0VUp3CsXwT0^5|Xh=b|-gVq!}x*v}-HZb|D4Y zJH2t$#MDOo1|jf&ceJ(D(B9al$&Iy*d#oRy27Fdq+v@SLjhi+|3i@DeYJ4}Wjv8sh z#5#TgtD&*!P3w_h3BN%kR<50%n05-|-I|4UynbSGd;{wEd026p#E5SkUyFvY$T^V6 zwck|32-YTLq>&5Z6mQc(kWVocq!fm%HqN^4@Canh`iXU|@>^5^d6{TdW!2iT7TGNt z!bEIr-mBG zlBfiJb4#0t6Z9hOUU$R;$Dy%O0S{V0st)i>o3}6$4V8VdG3#%r9!At~SHc=DCR?cLaLEF+2I94V^+!l;|%NhHL43S1q?JH&n&T6P=x#u-1EP8|SfaD8gax&kg0u z>A_5TaM15n^Zd3<8N)nOsOlg8MeIsnHdC$*R&sqSN{PC(%pUVFOyyc>aIlEMuS-jr zS}l`9DSvjI$qfVA%2i@Zty(GM^m~&FImYfxbjwUEvD25=32$0NrcpXnt^rxf*%h{y zL6a~{ijPz{JDl)Bb}(1SCF(Qei%jO=aAs*OTc{|?Hp!F^s;2Y&rgX7XDrW}FcXi{t zs)b@LlPTg|!awt>DRh^k^fC;V>;S|-= z<-uVG)l>L>E~#3sSgsYzJvuBs$gRl&S=gE&aQ)PSwXG7+u$-zJM|q2Z$Y9iJgM;Zz zW~5lll`4h7;h|bB0m@OD-<=#BT#EM-E%?R>Ki$vGd}1ggt&FtZfPC9^cy zlaOT^q-B&zmkJoy;bmn^LntM1&R=Dqkgt*wWs{XeeTI}$+K9=|?VPItO?qnCzW!on z#B@*-H3zO}h($0`>*gHvI@lt)GA^Mt)FaC*nQ|x|i5})h7EOUfp@0>YVUO6RyQCbb z9r0}6V69jfLaQYVcjx?MS1M`ex~Dm9;5@q^%#4uFN?#3FDAQ`zUaep;aRfkMA`6VB zm*z%F_2qP$`pV^6U%9q8K*(N_&1^9Zw8L7>6!OVLD5cW_#3<#;h0*|tSvFtE7KPx| z2o=yZw?*Q-=WN2A3)f;?JmLDX1 z&~P-CLOvCY5K{&<`!Po8>Tt0@4xKJ{r)t%j z&`IKBA}M2>Aw48Axmr3?g}?yH)78~O-VX}vd_`)Z`%S5ZW^{=MLQ_Rd0^WCW zQ4E1q)oNQw?|~m9rE0A<4^lw@n>T;^!qoJ}v8k2g^S1|gOMGR!1i<)OzdTnXo9FuO z&s7z@?Qk~%B@N6c2m_TuvIiu==iTISLIsP%Sr9$>n@lNT3}wm3iCBaVGSXKSP)OiP^}&QE0i`Vbe~@W4(Vj0I{Ith=!=HI z@@WE3+wZdq&zg%(U`OeM^aXkmvP&T)mx(y`a#8>q70GTTJTHnORp-pRd8Q(B( zUYpKl8GHu+jCO#j5cMFL&tq8M!~I)> zl0XHLQzKQCbH#M2m@5vKS12Rz1c6o<2r}>}nfSpgs8q=s$_v%Rlv1B0^Qdfu z-DkQsFgCe5ziDzZ;pbP=)sYI{i1~&81gM`WqDoU)y&fbOSdYw00$HM~mrRU=k#aO9 zV2M&*k*bqR$U3rL zf_feZrRnToVJKHiLCBM?XNHIJg?>yhWYxY+D#sQx!)7|6A4(I*Nd{RM#(Wu!+R_xt z7VIZ zGXOGLvNy7KAWO2jtX&5&p9!j?q_YVj<3~2YmEBiLxm=d|$4yT6b(T49m`U_E*)Y>*>VMv`*F)fJG*p$XKWh=Dg!e4vnpc0yW?8WSMF zmHKS4q!yEA()mSZorjZ2VP#je^A~Ye5@HTR4aGX*$TQTE+VF=`;Ofhd*1qCXk0w(0h zwu@>>B34QjZo#4uR2C+gh_wTyU-fP14Rc4{R5kCR!Yq?()cj+?7rdQYSLJpn4Xdhotacif{0IuUX@1qJ@CYS726m_rn61FaxLVV>5ao8Ty$<4xDFlYrgDOB7RT(#{ zbOlR8254AlKPaz0o1lL~iD0ILdxN1BYeKY>5WFey${+_YDQ`_@x#5geH+?2yg+2^j z$TTG#41oGx8l2N~Bcun5#vTMykiItrlj2Yg26hUBfzU`S3Q^0Eot$#~0&CMJ^}DT_GK-1V{dgp-f20GI@fT97N~{l)P(b zjC>MIQa|2>`6F)Gf*29IAQk$~77OwFm=QUJ7DAYLWCooKc{{|BYL=)ElVIoW^MIj= z|NigY@vm01v^O(4l1~^q%-^OSw1GOp;GlOS5UYWLIKPN?4cK&t2S-HfZp_jZ?RV9c zxqNGy-*iuFuX8R4U(cYXO@a&>Y5xm9jb*GpfoJp5fmRr6H!u0{qbAA zg{H6}tU^lZ5Jl7v26<-VyiS53P7SA(@%?)W5v?@VNt{-bcT?qS>kr%tV z@*G=ANDe8c)vPWHwl>UsC5!HNw~&Dvfv)|@H4rc)uB*X>CFl1LxuUea# zT(|NImGQ~(l^YQPkdVA&I8zy033d$(yZ8*PRiLYjg1IgfE;ud}nk4YGVwn(m0|4k+ zm2%=E90ij)non82XN3)rML}w@?nHdOtpWvmmQ)g%kv9#04 zljel>8e3d)CPN*7f=5FB1?NOIP6R*k-LM2TU$tR?TCaz)=pO#4`P!zWS75y5VlAJ8 zG7g)3zJ&3G@dT1J@(b00BJ6(|B8&Q;l(ly)U!2e9OY;{G(D_9EAPdW=m(8TrCIuX# zl zJ%zjw9h;Cz#*m6BsW<{NKG6v1FTbr+ZW9qm7f^$~%Ga6w5oIRXTOpnTBqJ0bzqfO8k)vp;ZQK zrkiXAB#0hT$olFbg@3dsq=!J~SfUapo#aBypqxOg!5>xB-8__*Oo;?R{7P*I{_Kp# z-vmjSK+9hHHYDW_5_0+qBFGW}jMJP$WB@Weq{M0j zb3D;v6qB?xro4Ip#-3uWe|)1b`Vs;HSB@cmFA;*~su_A<8O;D*lq+KZgiDb-VVsI- z*f(>zT$_?nA*+U@Dv1?M7gJv)Tds^)EHMrzVuFQ8?}am~X?U?~CtmFIn{=mAEWzsS z|3a@sOloEHY6ObnEPf`4e2xQGeNW5_RA*Tn1u&H)to~{c>{acXrovKrxE~Uv$a&&^ zP$K1mm`(PN?(GVf5~XdE8k?Fz__7M!oDF1)Uu76yXVdhmAPvD8i22E>!wUeCbM9EjkzaxsCcnqe?+Ijln%MfVsFVQ8m-SV$wMu~jFboZVK{8uQ z$SO73agRujR40sb+(S`_(j?63U`qJwGbr;LbjHBJ6Z1Y}Y62aa0f z^wigWbWVYU*0gw?z(VmDs!JJNpgt7T)e}U~Vh={C)EWOS!Y&w|QOv;bRJOqe z$*v3o-bU2>lUI*2T-ef@nh8^&FCqI<7#5I1V=C)WT4+-~&V!~FhnfavF&x8+OwG4hC9y4j43@7PJN`5vReqoGq2B_4CyL4qDPd z?baDH3F(|MMwJFDU^2@bTR{&|TUen^r*uL|uneC%gVcA?ATe?UH5LH=rK|Y@LVK3M zxreA|ERo^98dwM{=<-*;l&AnH10oaScxe&Nj<2Rsm`NIh;q=P%K@SDd#0i`{iCcK@$i?5S(92Q6}_%^)mvjlY$?rLISbNkKWCAhKyN za#`{j$UJ3fBM|@@^@sv))MHSNqzojlL|P*?9E;D$m zuYgeap==?|n3$gKR8m-fA1xu2Ek)4rQ>Nb|#>(Nx(JU2x(uM%R?mXxl!p-WbfYC#B zH-r^t5l6^0Fj=L;XDB;v}HsuRwsEXuAQ#4@wFOKP6FXo7KAcwklP%> z>Jb5^KhjQrR5RiW8cRvfeD;+}k7NtOkf}^K0X~}{O~Q1Ahczi+B1hFnLI<|GQQ)BN zN(kYr^PUiZxy95%l&7?c$(i02dsz}#ssTBI8=Mr>cp-f%Wj>ib7O9{B?Ld7Xz6&G- z^1qLCzZ-;zI$32j+_)kA4p^&EOYj5X5q^W*L?;98lnld^1C*A(0wFo2Y9P^}mE4f% z2{s}4wP|X4Vhsfcekw#e*yo`&{R5gLCeZlkTe*~5lu*WNBQJ{S%2E?zVzW#z##fYo z*xWpV>EW4IGpA61L9i3rID`Egn~nD}Rl@OJ=qCn>4v9>6NtU9YGD{H%o3b8vW9X>c zW77aOoPpSZ+9839u}jFGzdaF}hFJ+GWl5VMRRA$!Fa=-4y!%2heoM!wG1HzzCAmJv zFANhTVz3iETA+fMX={0LbFpmuNRQG6*e2GTVHg)B{1U@o>oukvzL$XBwo#f7u>z{y z3IAuUTTLhEI3n?bo--j`cci_fQFB!;L^LVoY^BVC!qh?drt*kEV zrU}#){OX;Yj!Y;HNhhdXg0%f*r|<1@RKw=Ru_h%bg&-)sOaJ)G6$ZNW5DY*JjaSoa zLI*(zOdZI1Wu4s6ym^TaLT97-MujhUaQgi2@k!hxpAXUo%_I_c4@N`Tr@%lF?6b>OmNB+a zhQJI!6R;o$2UGX{!Ip#YP6VYSyJd(&x!mNZDzObdSgOq2Ps%jN%B_sj^doX3KNH{`oLBg%7X~KYX(gJ<87hg$J zM%ai!RHJq^IEdH>hqDU`!fma9yraG6Kuq-QMwee4_8I8j)2>7)a?xZ;KdlLs7F9*u zuH6?0u^F_p3P_Qb0-8kAP}rK3)5h^Ff0Rd^;GnA&xGBX zBnZyPj zH?w{D4HRC7wiU0lRZF0EFoQL z|1d{0fK|Yp3}XglF~n$NDRaveOz|nzx+o*kJ5lweL`g~W>K#LjDn1d$3h1KPP_kIU zghY17K4^H4NAm?|!J%cwG^md^J(M0C?uRjjyIOq#xHT*w8`X>-L2R~sGbCU%y)365 zWd;)IK5m;YDP=j3$Ppo2FWKr~8IUY9>XTv|#wHW$MU1#*DPNqXyaRDsp`=}5o&@Zi ziDe1cf6;In6E&Pp5nH-?WVFLsGUO`bVMYc^>Hb_rW=gEMvVTOyYC#ADGhkyAC2K3Z zS|9`T6>9gzhYe9#hR^eRQ!qk=_Xc6rhxGI&VEG;)(Uy;fBp)kzBiuxGl{ArQgytwz z8Z(kxA)8^$d^xuad%&SC5JwRet^~Dd8L3^X?ZjR-7k}$Ps&fG2bEAkb5Us-`Wbhp+ z9tUF@TF?hXoqMbuC$A=@L1V(jJN)=!AQ7oM&MbhDA%jg%g2|OM3M@+xj?mgj zts0m)JUS#w5P~Ymfk9*Vha$T90mq4yLs;I>u)-wtSbsWDW^^Tu^Q1X6H6yfpMrhBB z(1kNX7tIJ=ECC3VX?!IBU)*htKr`=)b4#jFQ5q>hjg-H3?;({G4kDIJd3iy`QzI=3 zIZI36l)^d}7lllnzqv>@Cy5;n8=k5DHsQ>vhW$k;w+4BH9J8RzIYo`$;mx74E(eyi z?!>pi*CksJpr3q(t|Kt7~(!1Y zy44$zv2j;ym&0>x!^&N^!&yyVS~NX>ZDRhK?!^3IRKN)~+u^(_v^{_I>P=G;R5yQG zgX^Y|w`y$Tn48At+Ld3JziFBgH}hAo++*eBy0v2)CsxkqnL3l>yH9M~!%P}|2n-09 zg-pV23`4bCKgf=;7J-Ko+d^fPz6Qm!{W+Ck9jzgyEQ0P2P;kcCgDjIdN`xFO zzmysbbazBEIOYV)-AZy0OU>IjsCXNPL-oDQTN|m|_JCXSxHg&4!CZejvqC-9G!f94 zp*#gPPQ&s;nL@sOWs2Gi+UypGO=e(`coVcUZnjKW4tfwmqWZP>JV=E+k#Thr@NGD{ zF$%jN!_H)BlSoV8)d(!@7+Vc!tIw79p>KVgHcW3E9G_aVao1XMQFX)E)bwf`NtNJ` z5j+AJ1~&hGI9vhd{^vZT!3M<-3s~55K!pGsu?}ppiu#cFVe*rRJ#Mh4`H!)MHqy_BiSLW_+mwJjB$XD6 z2)~1?DuZoWX?~tIZ<~aXi%rO0GPDEp7B=wsIqXg-Cp}UfhQR{GP;oC?uAGHkj;1j< z*n;=`lP^Utk_^%N=erS7(q!df9ms(N7~iTyV)#BrYG`2d94N?X;-) zM)6QVg7t&+pTPk@bmtz5K?b>TCf#sVYfYsfYW|Zi$U0k0)WL_-6EmGF=OtER8%095 z0n-WGTqdo9sAN*-U|MK}PZJU-G_;|NQfQFuz{695^UJUbF+^JBD5NwMuvy6hAUPtb z{ET*xTrm~$zo$69J{B0)W{z$Y7h}wL3+W2npCK(DYCZADZ^3$?7$>kS3m;Mu+bF9z zoGUDLtDCB!kbJsuauHczPmu)239E(^w#lvlB8=$ARsn^Sro8}-up60Eb|PaH zzuD@+MP=i!M7p*K;VT?s$4;&TLhq!(IeQES$O8O3%CJrMjYjC}1yaPy3FOyJrG#*J zE9)5j!hrB8RG*);icAAQbr=NPwV(%e5PUi}y9KdNvi8Lxt$Vw8OaW<(AB#Xtw3I)lfu4BQ>EK%3j>36@2{um>8A@sF&hz}~mfPJ~g@J}tq4|bZ5Vh1rn5!X2LO#@>Z5&dRK%I3qnx)VmCbA7+>8vawKm1t)K_Z@+`Ff~S5lalH zV74N0*p#TSjhhnWa378qDrMkGLF^O{sd>eU|_M&kwnoMa(nVu^9ivo zXRRXP8`!TaN{da%qyWoDOGR@yh2mp_{M4d^P+C|ZVb@jjZUVDNJmP_iex|Mr4UtF< zsnt=UPlTvBj^CyNPY7<-kBB0$ObDI_qJ~+Wv{|$c#WDsBglmlqwlo=9vqzIspbC7w zr7qwwJK{X48ubD2ZrWdHVOJfB5^8feS^*JQJY(oVJyeB6-{7izl4f?1hGAZ$DHH74 ziBCy%cWEsiSy~wdNe>(8Nnus2ge+2jBA;}zRZIa%n9FQbcr@p{kTaz=$p&SaqOkK+ zh3sZt0pIebC)PHVip}Xlb#kx}CZeOrmpI`ohx6V1ATlr?^p|mEzVhg#L06jAvZA69 z4nl3TtfNZ@Ygj&9;-d3abHss(l3wJmZ*GHuiA_Xea0u*LB$XucN$q+=oQu?Afdef7 zU)fbQL8LTluv79RfbiqK2`~v0^E}y}CLfAu7>L*<_n@a>2dbb$-NM571s$UL&D8wu zOX7zP!^lWon-ey;V7ok4LA6(>)9jY;cY+u`PpSdm6|5#a48R2UIwz|JFrfkR9rSt^ z@sY`7DmT&~3nveS@~b0ZFtP;@4Qs(-4uyBo4P{MM_z5gymoek!EU}#K(q;y& zE(}D&%cyHQZ%72MuY_HhRm4@N8^cNJ4vMvuA4nvD!u(oh!Ng|YziQ*ij2l`}KIZJu`BEaFO zO^Y~uh>T#z%1-6lj=F=>{MI-THw+$IoM0QH)jczigXuT?nn11=L^6m{ySaGKc?hajtZ;m7Jt3t?NMZ;o zUo9lT@u-Bn$^qS?Yd$=GF4@$m*zMfUR-b*QGyt$xyPcAP)U^LWSmNp@6OGt3FoEzq9l`|4~oVg}Vqd2~{*oWvvU*6NCRJZ5# zGK|hd6(KMMvz^9)HT`0O9>J05#u|&QKRRq&J32tvf5c8Iwm?i;iuDNr#_pzpBcW8n z$$<<_E93^Va&|9Mwg7{E>P_Jdbzl|$2pSF56O(u-XF&-rlBtc1)(bk|hWK#Ol?90} zs+hKpsDVB|Lq^3ZMXahTXR@TEk6nE{6M$I`Gphp%Iy!6@6dRVhJR;djX|v&75fgnB zb34y$gyCQaTPwKnguSx)Hq*gBOR-(6On{vhDxL5V(kFKfI;g?ex&k8A(#Vv>@qH_R z7u>hP|3=zc9lp1$WVdcM9@@vAI(4>($uK01xklDKPaw}4`l-9hOpuZdtpq=lc&5HS z^bkvMk;5Ar2CFGtL}b23e2^kz%ZZErNm3RjQ=+}XvI;~Z6WHiNq$u8oFv`wO5(eiZ zCEI+XV4e^ybH0#4Oyk>V04r+REefRpe;<&wIl3T&LVVw%FkeXMWD-%EKpQ;x=HPFK z1Bp#S%h_Ysn(lH9fObU0=m)23-4f&&(HuyK={J`zHbK;3w$t_I1$^P(as2jHXY%{@ z25w(}4x8?OB{lVTz)Den`%tP{?pLWMlqIwWHqLL0?PNn8atF_Lx zV_U7A;5lkeHZv2*ZED7_8wJR=**AOFOSZgBIju%s^CML?V6aN_V_pOfg;B%8gVaYl z_tL6>*sAK*c8`gXSQURq38Pc|gv=>2u!EQX2s1wgBElNgUM{`GVAdIAABrPn^jsVo&ZU1LGrA0?30U4K z9$3m1h&1%sq@hM(m=u>~D?3MqGdpuzkoDp&y9p> zqkt{KOLL=2DlCOF$4WY2sTOe1%4oXeh<8lN#Kd0^p^=`14M^l!{} z!P+v4zUHHN1<}7IRNCx#9RcgcHwK+1Ec4*)kWgCAJD5DofDxJC|l&Yxzlj>&k(!^k6|FiXG zES!7mg%QnwzJUe_et^w3xt2t767+Zw^B&Loe=L7nt_IaO1`BrPrju=Prjv5 zM;M_!&v}MfPQImaM~nc)4zWm!YaDhJUdtqhj)hka&?~i2c&A1l<xH)8VUI@fa08Q${GR|YNFd}SDX=?$xQ;8{cuWFN6* ziSkd?Q3DfkAT?_Ci*6p|@&Xq?+T_40BVF3x8u-D3Y4frMl^2Wi8a68HU7%3}yfl0+ zh1jkdaz*|kLl;(>&n$&2IGmIcMjAuZOVev4RrW_vo`&bwYGWHWZkX6*)5dWSiq1sm z)Vhf&+}J!m566v*0A)5W8kMswEl*BLH9E9i$75%3~0Wbo9 zJp?2S6b7x6!BDQ;aG!g83X}4g)Lt-nFp^{^)=X?1o6Jv4;!f(Cnnz@w6s#GcLSgH( z#s^_TK$EB;9K?anf~I25vF*F*MF{mEBl?ECRYv*LIiVKGp`E`y##Xm)H1k%}1*qq)3LHth|55sCrCM)2mY~TG_zOiBh7sk^f=kq~N=rLGy1>LJ36Z zR0(v++Jouh2%(67d8~ivXE&HB)`zcnP;>@9tJgw?CFS(1fx}{K8sWwvhDDFKCWxET z9%HWX5j~Uy6(JkBSgvhtT)<&R3R<%zM6B9-S<&24)o@Y_y;BDCnF?$m5X)+2pQjSZKHe~L1 zv75z|uHaSb7igHHI*6r`)ZiVrPhb6xSF^+$i6SZ4yxqI)dBU z=zuRRA{`&jz}JbmU=3Jzp~46(7#L%%y6A4bQ8pAlzlc_MoZj4Qx(pJh5juTV#IWFmpTaRU zDRVv&P6;1fWDZE;@7f~ESw<{hAy0$z(T@k~o*^C#r(Po-EEsG>7QN9FQVCB>GS`@X z45SphDY%yjY=Z|Iii(P}G#I+87>GStO|LW!n5k0C~N&#mb!(SjTd8g<)jsP8@`+ zEj-l^!0fL3sCuYfArug?y2+4iBupY0d-SCNEP73FY3DW7 zava6cf#Cc8CNzQ>_KRD$ac(a*I$2W#B(mTRO(!a^D+h#9IcWy6{-1GcPJbQS^10b~I{UL>*1{*5e31w#Rd%eWm8r(@Mcj5t%! z2-KObw;nD563Haj1)n0H1YI=OKAb#Q*1dK1r-~s6yfGlAw@oY(n+_caW-)Mba$so~ z4+wWM_`YAH*FRuTkKJ3j>(~b25=xg5E2V=Z#2hI>f6}U^%0f42RoNbS;_QO@e|hLh z(Cj~c?1@E9MyoYH+m-;q8!5^l72bbLU7JSfAT8ryBT9+|xG6L;7&t#%9nRpu8ty?h zH$j^Tk;SJ5c8Qb4{&>bS>wk1O85D(8H^O8oNjaj1m-|q z%M2n0gV`J}6IRuvfHW)1$cg_lH%huW@&eB1a3xb1gzFQLo;+m}*X%hHLf1uT(m`Uw zSbz*^Dv0nxbY*o&5Gc`u@FAD;D9djV1!~z-P)NR|R@-fS><@ORAy+j(W9RWVN*H!3B7+Z;PJu9k-kX!|c)z@v7vte< z00*;DN8Fkn*4J1>s>?hC_jf5JlXC)Oy7f?U+yY>xk4O5D&Oso{7V?ngGr4N#>A;UMmxOky~>0tA`hn7?1 z@cWc56*riWT5-x}XXcnGd(05E6d{escTN~`SlE!|V5F3`G+BOiIYdePsKVMM{st!n zjapjOa#l+66;!`gT{#_KS!5i1j+vZHuxScLMl;)zDJK)ahm3G|1~}rB4d)DgCqw8c zj<0h}zm*zvK)EurQ~pZV%`bGv0>M~#a)o*;nt=6K3t6XPIP2EML2*Tp$_kaeDq#3Y znR^u$4QDZT!h;Y~AJR-c3>JrAGSVgBK+tRS3`|mOawiOxgTjGZw5Nq&gM7i5Kux7T zN|rfL#=p1?nTl9?H{#-;1bp1s{js_-v|URQ+v5n%{A5`}i~tr5koR`8 zLncG^Kv4&j4)G#H1kD9E2{Iu=$`{CNKzkU$DesC(xPjMFn^X`jOL7&`TPR>?EUm67 zjBc>`K8g4!zQU=+;jb$o6^WaAMF-Dzku@JArJFQ4BZj9Rw-oAKj6hagScnmle!3xm zMzt_#&mn15L~(%ku{h$sY_@gI1K_DZR_Kwi@gV%N@l6ddeT5%_V%+W~jqsC{P7ja> zx(|Z>agepavAU7NXHdkgFD1jrIi!4{&Y#L4kJFm@ByyQ?Ke*2vJL#u!Fs(oR_QXBI z!~8fOMrrD09-Lq2EP$$k_*9nNrT`0SOZ!f@gj+5&Vx(R6b&PazNOp6Us?U$)#474# zh_Y5Qw2=mbHB$%i7Xl7+!Ks+OAYd?B7PIhdg-ZW*5zw>4^Blud5{5}}ka<$>zL7jm zl#z>JI;mv}snj3aGa4U*s2)Jg+m=}>0+{2*F=Du0l0ncq>=X_};Pk~+b%y(qWR2pg z4ufcu(i*pAj;3)MR$~?hkt5vS(hT1O8Zg^J(cGS{?6ud?#(-t`0#^zTUal}1HMzyC zXzo62wZ#LvOVc7gqC)(DP?XSFp%}!Z&<@9Pmx382*i|G4PoWFy@xbIcS1n1vAi2Co z4muDqIGI5IZZko0@v1B;*{X=x97%BC^Z<^YO=h=%2~bL!t$k)=UqAqdGXTl3Fb}s+ zLIQRUvJ8+;e2dz7(ZyVg7wjFxL$e{$jYLLvoncHdiviD#ml9~M^hSpP3n2&H&P~V= z*G3V#fL*5UEl9vg)L&5zE3SU7w2JYiKb1D-;Sn6a&H?vL&5|QZ=m3rjEA2WqJ#J&F zN%5Fjb8|tg)kh^Ro7FGy-XeTFIn*&rEj*0QSA>b7PHTLX>55voGmoZXsk_^?l= zC&#`tUaO3MaTB&gOpHz9mc*6g6Uf5qY$)RZWo6krj`gbK&`rq}=fJ_4GhCJCd3tDI}>gs_k+;_)hG;>hWWAfkP>`wDBLX!lH!<6*%>E)3;}gq=>bd| zR{=(h*zDb+1}B^maY7}es#xfHTljI&RtVJQtY_H-fN{@@rLbYShrogJV;Lec)nwwc z1^Fy{kPjBFdO*WWL!0-3(sN6)Wbd9O`67n!W9?Z_j<~79BwWs1AMai7FNU9H}Dpmz7-hnz#Z?#IYPs|kDpxw$#+yGO_9Ruv2>k&pPSz|8P44quosWC~7s#+sZUL!^;oHCx! zh3gyCb@`ZMEPw}si#B|`+sD5u4x33TAx4KJB^bz+NolGDK?}grb%)2&`4_NN-GOGU zGoo36KVj@ce3t%+1o*p2?*A8~>~(!m~H^Y#VU2 ze#=a<(pSxw(>YxrqY30V4rn{{B=$0NT?t0W+U@EKvf4sW^C7-NXc1^k>$ovpQjC(Q zW@ZSI5TK4cI4*Qm=&3jxl#A0`)F8rBKY&Ki)$InkFF}Hvqv*jOrryu#9vFYZn<5TXE2GZm0rjO&rttG)}Q^h+`H_)8^VRW!_uu;`;V5R9 zOS$lECgdcX6^u(?Rp~QsgdVyPFgnm1RjAHj3uAK%T?Y|Ak$dK!!-HwT@j){7!Wq>T zP^dKCP1OLFN>=MZ?1GJmVf>xYD-#=6&z8e5Gwnhu+!F_THh3BO76WxZG&%`nq@wJ}?^7M6)I!u;%1t+MKjdT{VJm{Zz&`rZ;U|w_zLy zaIZ2PRPtdFr)fkZ9YopWudBu0whq;-EC!|=kU&v%gM}-a}zz8`8?*z>m^Z};Azr6;=c*cP6 z<>5*<;w>8uRia0gE)00vTme=tD!j*=v!f;;y@0ijGLWJcKh)cE+S+VsSi z$7>sb8p3j6F>Y}dax<{GIU|c>+Rd59w!7JcUYyYcgjZq6X50W>2b75y36Z0Z$~<4w zh>3jqhg%2vO*ofJP+M>=BWQBP(MH85ELFJr($X)XDE`dKjKb<{MME69jiaBEAgdYaN15YMu&vks zD%o3aRxFLdC1VOsImpaz*qv`!&jx}ol)2Q6&z9B)CSJ@`2!zrS#@HIknt?+CysR%J z>w`4CQMw2&d+O>{N~*?AY_iwo$R%gBP@LfFT7jHwSrlO z2tcx`4a^Zgt7T(wHPWX~XjG_hYp;kOKwjV8w{V6)xP`q8gd?FLT4q64!$ir2 z$Y+EQ*~~e7dFcR?g-T03v3V9UDX>iuk<_=N8A6Lh{H*h^2J75H9Y3oDT1gnL#3Hts zsLc<|+oq*;m%S}f!QC)IiSZ<|S1})8C&NP(+zfy_N4VzIutE{u_$XzQv)amcl!esd zj7YBD#saNYiGR+kz1WAZrtXk|CJ`(H4kUVI&NnOf$Urhf&o?Xg$UQ`K>gGmAN~yZ( zqx&p?$pq>m;)g16GkedhvtEyMQ4rKZUa>VcJw3i*V+}EQV{1Dhm-=%lsm)8B z6hGWcw!&pX*LMuT44Ca)4i5XJbrY-REw|XLhpdD#krWSzt{@i`RiYG1nJnWN6nRPLj^yC+S-^5|E3)ilfht_bb&j%Y4O9=uoQ>w=u(Z*fT8Ba%s|`dvjVRo!VVW- z3PhM2#56O>bgc=h8rss-M&rYrIV9;cHlYw}b$!GVPO7_iSlm}gv>vn#uxo23a4u4z zXk?@HNU1Qa(-^jLRjwhBeT+dno3CnaCLv+-%?)q;#a+u6=Vcqv zKUH_(Lapn{o4DgQByUPuFiAGev|_S!@4EaKbf;c6UbtD&cp<4(HiHwiFk24Cb`R=k z3P(Mvul9Pk0mP8W%{x3rn-mX>lP8w2$p%Yb9YjTMFmmv3jhJ=$9np(R(FY2qS^*{n zBQ1grkrz^)nuh>Vd2%4CNjhdhZHBy>Vr+FetSk7#;}N8N0%SoMMrk6-ZOY6T=fJEU z6Hy`)1$xVEj$A_u-CSsi)KZbu)D;OB?7zXwln4ZvW?;+(TIg*)7j+Ps3)$Sla3$AA zU}P+K2{<_9C=7ft`U5pW>N(8D-ipBWW1Qh(n9N|vk)!iRsYjyXzqD==8vmrL>to=l zx4Fg~HmXG00Hs}<3(Qz5t6JJdV7{@vN}ky$Q7R=moitplKEM$#T_BY5by_h(&KRSBAYXyY5W2E+(|i7`U=3g}=FURu(FMa0QfO(R12!l*;BXBc z1!9spdmkG)65%AunD7@Mm6)qW3ss!(S#eI(bF)=WWB1 ztDG7F3aaXxyc%NIeB%sOS|;fmXC&|rJ+}7>TGyIf1)?8B1VCIC78S*CkW{68S;34Z z0Hr7DL@}~I7Xj+mGVn3sp9;A8+h7xKD5e%+jyJ&Ots2gVgR-nnHzB@_gN_5@{XfuE&Wt&L43D?Sy0;>>d`kgT~;X|3W1hjz{CQpFk9lCFZ`$W;Gt3 zajLW3cy!#dQkR+XMp$9E%ivNS%|#5rKR|0GVnE~gEOoJj0i#*`sJt-aWQj5zTr@ z{ma*Qo0?1+_J8_L2nO{J51DZ*Ei3Aa^=;;5VW!PRJ7c+EVue^5w6alLhJ$NZqfcS* zA(Rf_e3k{MNn_|nrlOd2?qL+k;!W%;=Li^&!_?q*80a)lF{t^!AqQ$PlVho^5!+gq zGsZXvi*ff%-AZwAT6#w0DB}=KN4juOqYh%oi+VzgZcS22;$dShbVYSJ_n29TjGrt& z$BzMn!c4{@fTfxfr9fG+MTCM6!bepk4#)13C#5025~Hv_>dypxD++>CQ~dz8U2s8_ zOIoPD%?l`faU8ceyhzuMbJ4gMrDYA$Oi5#(4WPDmF1W_K!3Smt2mn~dO&V8K$y{n} z5@rpubgm`Z-NO#Y#7bl5Kt!N z{g_qKz+mY76Ym-izY7Z4lYA`;l7K|n{K4qr93SHlK9-je`18nan{7I$$BtWZvOM?A$y z0v6T8_~i8X4CT6PIaBhV>VNP5`~Lg=+Fbt^oA2EGmx7ORK*G0eaw_ybw^kg!MG3{S zVB3b-rRik2WJWnFDYKzFHUme6i!ccV8KEJ*GnbTISOe&%ISpAwXKdF-uw@G=wI0+a zI&3;m%4y_K5j!PYSPiL`WfRssgb_ftF*QIBctOBhtTUpH z7kydXar}Zi^+7aAGt_laG|7c3xbtG%;ZksKyrgnIe>UFhuo1&D@4&UK7c`YKJ-z=} z90tbLkHY|qM0G#l0`bR250WF;rg>0(T@m6wk4s3GGXu3nMW_TxWgn_Kq|7rLs3SCP@sOKcYzUh<<5O&4 zwM6%Vo~~4Hs=H^=qVC>>sovg2;~($t&AYcwajP$0k&wIbL}IUkJOpTk-#I0i#hs7+)b}?jL7)@`5-u@!CgP3ALce(S{zZaQqI7`DQX?2Jzvz* zk2+}w6uDUMh=kj?CsCJ{p=K9w(-L(DE-_quBC>ioOG?_6LCdjjes-{_4k$Ci*JW@g z6h>NJZGQW&MR(DEAcA|86g^7jC_U^u2ijw6{(^-AW&P_~&8hC8w^ZvmDhQO83~65X zr}9LeF86evE?q*xg8bm1fV?L+sUZp&iR-IiWpHooOD%5Zkt9iBa}dVtPk$S=n_&en z$0O;3O&p1lp~DT$R8I*u<~}$<0jES4WD~VDOTZlrxSsWz5(bZ5l=TrCN(J*d91#u@mM^9S z(}P{Ra;LVi;<`M22i)ZaMjAjpU~QgCEby;F^w zH+4Q+am*Gad=bR#u}WC-Y4=`%jv;1glCJSHXvmnDAXxtzm7YbbpR}i_Jz& zCT0Dol!n!b14IG|T`lybkl$rC;SllmV13nfl<-nWD9P%RR?%yvsNF@voH7 zq%npc^>$J4@a=1Q1b_&E0h>htDQ2-2-mRb)mW6jKFbo7YJ?U9lezX$uz`LQA*o_wU zd|qtdV7r!DCESE^1D6lVBs2@kasX~E4wAhO9ih$jd`iYpW%GLTWC#>cH;N6$NMwjI zhmNENG2}Qu5~n5%6#5559J3yC+(P5i4rnMjBbdrX5pW?v1RjNjCdX5>5FWxr?pmy$=g5}WMIhf7&XQpl zMcW)OFv?I8^xdA1g|w964EJThoP(|Nq|BmLPz5UK;T-Z)DnPhOBLIfHF|_Ct0aJIBviriz{G7R4(l$Z$Y zt~4~#!hNn!#V3^yg&}k1{J2}A6A90ER)sNu(kjEjcGf`1i%}1g6(;S2w;`V07dMRJ z8v;pT2?cF+*eJA^5U7xjtL`F{8J1}hVj%WJMcZAjqcB$fU6<~!)z}UPMYj?2oPOb zzU?WW{YgD6$Is~jdSLfP|VQh&6YDJ)3;PSx9qLGp5^|* z2H#qFJyMZcZ5B5tLHxkguo?cwz42gf*eRT74yjtp9+v`+K?BmL*_sU9hCj$PMP1m{ z;@_=kA%bH*@)*XvIE0jqP^l#R-ROGCnCfM#04Nm#X2TZgyL6R8mq?3Y#;4JNnFdGk z;5HCoyNFg{eB5!`m`&n+mVzH=};Y_cb# z1_T*kP+D_L76(LzN=FMFw6{=% zr6r4?Kb$PWzg5q$oG?t97bhVG)38WT zgG=Wt*&?(eTA6Zq!W&`Gh3u^f6kU}=>;hYeTb?K11rV#tb?NzRP-#RTHkUFG_XD%@ z6ir2N;q}&lMPNCfRU4d>v3Km?bMnMn?|0hgjwP z9ALW2lhlt3MPm$BWts7}!^MOjvM+ri52}n-LM$9w+iZ27s&ItOnh2=hKeoh4)O@$EP&jRHGmCu2YBMc!TzsXLBx`Gi5vo4VXq$q# zDJ%Zbq5?F;$!r?QRnkkyLRsbEe({o$J@%Co^o#0GCF4-P0?z^u5v_AJ*mFhY{Td}V zT!d;8_9SrOI6zrAoCtCVaW5!plCJ;;v_;2-0`dGLRS=1oT~HH&-!z4QybPApM$9$# zXtfR+OIfeziTo5&3?~dullpb&f-F-I2-(8na6Q~F2nCwAv{8s#p4fKV1f0$A49F4% z$kqwmcc3_2g%rRUGw1x4w^>1>GK%jMt(Co#l;0bC7utoPN6iIY_V79qG9RSFhfy&4 zo9+umI6{w1PB@p_Ht33EuXGn{cxu8hX__77N<~Acqd)qj!wtF8amc#4GG&rF18#k$ zl`+f>z`D;xra1`Rkxa_F>;yNc*z;4IyB6#2T|`M-9Dz-%A~lHVu#9j4L+#XXshj(| z*j*AuyH8Y&6yYL1a*9L+8lh$cE8+_Mpd^;82k}T9=R8Ynwt+o>A_nr^gD#OJIBd@C zYjVK)1r>-cx#pMJ3MvWAoo{A zzc3-4_2WY@)6&x%#s;jjU;1ei(o15#to~|FwoEF8>E(B8hq_t{+ZY0vc0;0gpd02! z<+d<>w2?G?<&Yrx;*fX++aWTs1yi?tA)uBY3e~SLNbNDv<{yyvaXpJg1?m9*Kr)mp z0TH^5xQ(-mk?kVdKsBV!lZ+Zf14Me|>~Ih#2QLVk;T%Q_4m4*)!o@P*T}e5u38QJ3 zW?=mVSuIp}BONH+U?1#el>{^^nLs+pbNXn_N+W||K$-uKwr_22Be}BF zPr>#^IH(zSn*c~kTJPEc;z7a!2?zim?Jo$q#qL&Erg|l+-CldUU-pssNRiNbc zj$@|9%9~ZF%Dj2skC05*z%3%~^Yo=|6%QZU1&%0$qN-vsjyJ5a%5$a&3=oyg_9dFe zpSgzZ$ln6`k%!Y`SRbMAB5j~~_^6b-Eg=z-!488{CS)$90fUp0dzv-koeddYt0shqICEWFe^ z%NbG93ul5&BMu-(qf&0q8Z&ES^SyX z0(BC(Y=*IVbBRV^%X3Ms_F7ZpD5z1$|KUXFIaVYDj+4y2V`(G$M9I&R+*VZK9N?Xk zb%k=S^?PD3$O%rPrPn33s}e^lka0k>G)R%~U?GO5dKrrS+=cRMBFUBW5KQg#(}#}_ zmc6hWZa=)f|A-oBAN9V3B0inh3pdMf)2{NUhe5-I)JTgSiXX(v8!=^C?^*_8xj|*)oOz*5v#q^*qjPf z*Cx|ivICF`+>FmH$kg<)7ObdYEK6!4AG0Y<*gQ!n(9M;bVA0H?QX597K4?DIO zhV>M!x>@prP2d@4a}N1uJ{A%vbZK+3X@yE;fS#wXVsZ!U9lQqWWgp+=-N zW2o_u8)>jgFw&%=oThnkT}VTbdGV$lZ z@Mx~P9G#;5k7_{TOu>5RoljvqP&Ubd=CNtlQ$#N6;N?lE1tI$&qO=frIC#EY4rMVg z?&%;-+E|TQ6dkDuJv&9_Ivs}v7A~r!!QpZyu$o!OM zTv*hrqw}|q+qd8SnX*rYhvnm@NMhqcrCcf2;A@wGcsy51yGNVZ2s(H(Fq*qpVEXyQ z7@_0BXr<(-%cb`uNa`kK7srZ0juvSlg@gQ~Bqug=AA6mnzBgQgSPmntLOWwDVDJ|# z#+ntK@E)mNy;Uck}>W~V0xe^)TLGvVhFz%rkH?3SLBA4uZC_FjQ8^1GJX zbC3$v9V-Qz}|Ls$?#lrjiOkMtC3ILW)Uz$UJi zn;!CJB~XDWvr<>hlBEb3z_CRHY*}Bcl;#x53tAvb z&TjME&TqR7u)!J&c8lB4gF>a`lDSsq42-8F<>vSh47W*35H)X(6n|TH(-dOTH+)bi z-038H3lIS8UIEvN7$B*&RVN_GjNsiYBBRh8dZLT8FWwZFJwTb3c!e}Ctnly3Xq&6hZ+5Yr@!qO9$;7*bB*c4?&(LIo>OgI zSt=IxcGolEx@iC-NEg88Q&?>`S1Y6eZBw-=;S5i4Dot6l3_?uqZNRn6qyy-2J6fRR zSsRBVRETUG{%Qq+qw|vTZo=W|n{!cnh*_=&Be8{O)y2Q-*LB5#Gf6BP4BY2t4t}{z zWpE6uROWzYB&hV;G0FSMKshO!jq-y*@xDcH!}S!F#-NQMcB?2~tat*`nLdCCHf~EJ zc7{46O5Gz!>%!wHng2A&EqoIbyOn#y_^VKV-|=tn-av3DFi6q=VqH-bo@U+Y_{dmT zRDuJH+5;wrPTv0T_Tlxr+1qz$iV1i2{r7Kw5RM}`%VyYEHP2Sd)~a%XP`$HZtrH|p zI2QLC7h6Cql(J1(_T$^jEtc@=az2~WE}KAW1UEpkKt2IXJ3Bf07(2Jv_T9gc8i(*8 zC5XR`pJ@<*iAg7pU=;9B(u4vFiq%~p9GNRfav>Q8$_gBu*AtOSo{96lpVR?O^gL1C zK(Y~2kwz1p{^#j;H@!!_i9LW6dDi;nXZXIfXy;f?_xHN46d_v94!_>8*EOi~1v>)> z5^y6Qi|94VxwZadT6S|Gc_IkzHz(nK`%U)*Klh|<=vD|d2`}F}pxh$r*06S|_A$@C zCxvy-(f9Lsu~-*%f z%+B7pw+_)%-#3#v%|Q!g1E7@T$Im#E-qL0sEm#hsU`f>+Mxpwur1M&mQ+zT)<(dHv zJBoUcw3xgKwXX+D+VjH~PP|QcaJu1op+_F?yqy=n`Rm_t8)cns(~sy`8+cJH^Q;X9 zkNixNIqB+g$A3DHSYiR>Hp?=xPp z`P=<>KYnx4r@chRy`@z4OhS)<`2~HF?Db+(47GAD#dMwUs~Xad zS>~DreTGIsDSs{f3;(Qr9zO002d}YA`n&}4k0UPVfa&y~O)n97f;Yq~Y$1y_j>>Kw5JQj{!wIvy#jS!P?^0b zHEklde^T;QSvV;5WKXJhy{p0JXl#@Fdwqfx(z-MlAjaMMh#(>?NW%k}OrRY=7BQtb zuLv1<;$TzAwgh_S7|Kry9F8@ziF{|nG4&&FnMNtajDBMEhQrRmT|h-MynXpBxY_%i z-$g+1)0)~sM&IH}0699-sE(9BKbFp>qRx(??es$I(zQvOlnVSyj124zVh&<%iKoyE z>#3mWofCJ5QFQmxN5qvjmM~H!a!E)&7K%mDt=stusfzW@&!JaQ#%@MySvdqm#pHGj zFr87g<3YD>K(GyL-re1``Y^VkZJv@gKgwF+5WD0@oZ`~BV<}YgP9?2T&6`N&6+o_0-ZATc;Xx3wPUVej6`U{^Z*`S z3w0Fb$C#IE(@)ZgR}r-`>OXHL-0s?~Etump7vK+@S1<~^-2Gu8Ut_tn4O@W^T&-lR zF~c?8w#JWWYZcL^kvGdiZTlwYbr?4D9luE7P=u-M}vSFav9KUG}S|5 zmkOnD%Ijl_5y%IDdIl@g%z9koe5LaY%f{*1#rP`Hx}ISq4^|s!%iLgegX%N|W|CRt zz}{Il;gzMLvoJug9j(UGC#t&>G&R32DjGka6kFH#luLb(emo_Bgvuys_2BZo1a1~( z#;$d*oxiGLuqcOO7)c{w?1QKTi=XIXzA87n+6kkt-Ds|G)pKjqFA0m>1@`Cw>>RqG z+rt=l5tcUa={@2HtPVPEX6;9&5n_`Nj9!`jME-Bjaq&*ot{G2~EBaa@XR7mV_OgefAs$l~a>>rIUHz`90-e8Ai>d zGk67eu>B`FxYU8o69_fcOegp}HQMkVTr!_PA{yZTvjxSk{iH+P8xC$^H9|ncWR3*O z-tiFJhhn?Rilbs>2=K;JAcOVM6bN)aUg#@RLo}S>HA;j-sfASiYyA5Zb#km% z8bKM-BgnSLGXqd1k53AEhc+)jg@c9+vZN~_92yU$ZeL68OBPcg6Ex!zsi*S1(cvra zO!&DP=CldN;Q3zC)CN8|fBoUj?DeO24?7S04zvpK|3<9ba`6uc7yTEXlE`QdR;?04 z3hL0vr+!4jB+Y>BAVp6i$|6Adh@2Z8(xU0#&kKtHe4Pjr4iUxCbk0x+HvJj#R+act zL$q4t$)Q3j?z5-Uktt4>q9I>oxfEtZ07+|@_5eqhUMH)tOs#58u6EiYP*LnBw~mA$ zPANQ5Y;aqz*=YZm-J(H{G3ily4Y-l(_=PO_)r|9P!?iG?7G}&u{XCK&`o!>xL4LwU zx*(N8#mXhfK$wYlWpQWkineza<+0DtT2AP?$p`^kL@!?GY-<2#W-~{G%7w{>sTfKF zrqAVeTDA?k5J0E5L;cLGjSZk~;IiRRUeTAz)ghZ8+2q3^<6nV~85x}PBu!&39PX0& z>`%RBk!l$K;iYM04hieuceTlrHlFFuA|T`Kki%1nBJ_UYMbyn}UsF8YW+*~LN9Cyl zAw2C`$UvoOOXHsX%CmzOS`g!5m54e)1;|U&I8*V4h;TNIE9gm4iCxt`ls?0qxVq^C z)BZtiYz(r5NLe-#wa8kM-Zl((J4N?p>LKER7G|W#AbmEw>JB_= zS?q)xIhTv39}C3emx1TLvcy|?cZ0>DjYcfQZgzNB;xh+pS}U7L?@s>O)3oo&31IRd zw%WDp9hB;~?*|ufJfNp_%u4bJ5G(dg;ZiAesnfF71j$W`gIvd8C0_$^E&=tzfnzOB zC$aA|F2}RP*Q+#;)u?}1TLdYN$hZqg3B+cQkY{qhYNY~X+#@0@-r?JArRA1Uy;n)G zn4E1-t3%oVX*%yt`s2k;edO45T-k&*%(uxU%>A~Q?g`0Zeu~0_FaO1`r(9>H)7xD~ z#Ey|JO*8d!3~V4Nv#`^a;M@e6><->>RV^Wx1R@+peK{5jON@3GI6H7w|66@M>@OBC z{d~pnK|kvVQ|K94+Y>QZ=GhTevDNi9$?{%%weN=TbUEOu4l<%RNdfxX^9*?e7%)*W z(5n@N82Xxk*r)#2++LmfyX zxHZfVNa<3px^oYP7$7#zbsf)HMar_sI(&NT9O$SBHgS`Xivc!TFI~q3eGkuWGWsxx z^bn!?)tYxq(2d#)d#@&utU$I&P!_gplv$naAVb8QYPV_1fauCZJh3;;XE%WDZ`h#a z8Ksya_L@r_eqxVMXOa*Fz~+}XLp?es=;un3YIhAocDhIC*LZ|{v(8$uL>0I<#|OVq zuP7IRyLrVqaXRgY9c4KH7=G9?80bt#u)S)n6TmoPizC~y2Xmrm$Q9Ih)xw0(iuffq z|GgYfLj=%25f1b?U6a7t2;t2ow6HH`qF|(zvH-xr(ew+xcEo~Q;vKK2fd&c93SkKZ zD4O)k1k-|&H4{usLSng=2*DSWXwypG&ysn_pC&4UE^_hV;y=umzC=9>3o@`aMVhWv zoky=GH*V4$T9G#|0+XnnVpVL03C}K8`i0&d>`dfjdBubPD*%Y1yG#-J*Y@WXXBMvinU%}&s{5Y* znY9B$BQKFoe9z9Ohjw*TxItS8&-e-4J{V zW|H0MsXZ@_*e~+T!3f31%@8JSmXC43BUWjLM#zlFbFlt4w8VYgGe$3rjd>7lQ{D`3 zkH{F&kV;_m$d9CfaynxZ_^$~{iMpM(!$&KS9<33mr<|OsxGVDmXH(UE2B3+a>Oz}> zmZS+-Va`B8Kv6=I5S>(SiUMI3eHReT?erPn?+mnklL#e3>@z zN7uq1awZu7@a-su2C*bb$S~rXO*%0zlZZT^55%e|A%SqgQrPOEFf5&TiqO>PqtJd7 zj4{^IeAxfx1g0p6$jpE5WKIpplOlO1!te556v`VQlMCg4Y`7mSq=<`46kE0^5c2a#Ud|>4MYd0^wD-yge2G~K zrErc#B8318gm!j`0ZovtnkNmd7p6Sv+e#vl28;7O1$Dbs2ydN6gpbba$i6I;%9-Oy zw$+CKk5Umqv-Dm4zN-^nusmJq*VEpmRvq3=2D_O@G%v~YsH$@c z|Ft03i{duM^d77lnND($?$T); zkKvfcLrvy$)rhJWDEohvHuV3J*P>;orwz6+H&A%kL#QtjW2J)JfN!-TBM~lp7Cux} ztl`&_-otCw-@~A6)020OGCvnw=gD+2`gS@Aoik36 zp${_w5)Y==C(nC%CRESS4q@pCi+%JK~{LOeuxV|4n+(&FPn zS_ToaBc_)RJ4Jl_%`W%ZP9bbGNQ1(rmWBEr=PK&Z6tw1q!eBTO;EIQ^a8ddLGrlCd ziBkg7Z)bY}S=zwDT%gKrPh%%IncZ1>mgxD1y@G286!$E~`{RjPFw9p~u2AS|3t#v1 zlM|%PL99KL6NR)z@$6V>m4!RK+I))u6zF7D2HJo=Y8pDz@KOo${s}$2T$mlILz8i2 zE@7ijd;bpRpFzI?YCY}!hNfJfOfxR3HA3VDmduyz^Xt+AL~!&CwN2t8YxQ%fC+V>{ z9vB6mM8zRgs~;bNIT{s`;Wjp$#$iN-+@=X!=$=4AKX&!osV|WHhUL=OP+~DngK)); zSU*#$w1wLWZ@MouIRDAc)rmsr1;&!>#bB{BCOP&6yHGA zKB0nm7$9{Y_`JT*#Ma9FV0<-cGhb(!{*jJlm?U`Y; zQ@un{FK-q!(Sk$Bs4ThEFaY9GpChz))$^oRT?uXhb@00@f(k^5AuG5<7Hsc;m(6;~ z8<8N3elSI9b+!RfBQgaCbg$Uw8W0ntmy`gSE(&7=P<>jVE)k+lOt>qmV&>6msLwGE z1S$f0#yZb((XozTL%dW`WsADJz-dQt;gu^jxhP9LMYq%PsRz65Q-8}G%CgD%6fh{P z>4Hh8z+ifs9Y$vPAP}dS1++?a2)p4dN9c|~N|d|VA8A8WTQG)nn=mBRSL+K511Ug1 zMx6?asZj?;e0h-Z-FL-^;;PICXp5mmV>DY)C_#@GIg-LI{m`*42gyg2>;evTfy*ml zA>Dl-B?Ml13N1N(saIY34<`SdTa!wY1)g*)2aGX%AJcI>rwA|f|JDRs&-+X<^mgm) za@S+E(4l&GSnBv>9aOXR@Ss{^Qw6kVFj%SQG*C@IG%+dJ_R45s6 z9P5oCZCE<0iilC8GgcPhX4B5arW|$;cBw8Gg=$ejRY4Xn@ZN3n@{99id)ZF?MrzNT z3Q{4b5V4Z>9ihahjHKyx3%)s1h;K{8usR6-wj3}N)ys9ER;T6-^Tbc6gl}vV$?Jw zLvjXnVq8*J(xr_XBZ0tRipjkzT9$71zJp7bxDt970 zPOs8qJc_bof}UnbjktVQL#bDbg=PJ;-)mfp#t@Z~zw34jIadN>HDdE@oe+p$f0nPG z1?YzW5@dfnAMky&^&#po`Bx~^2$EzZAzOsl25}X0?^#C8>Xzn$bAe-~WChp4;5?g% z3DwSDJp`mm-ULKb6K1H=)rAM_@+k5dsZzz|%2~1kX9kxmEl;vvR)-rrDp3_IJ*=A* zv@k~072a(&g*Do>Kes{QjR}S)cf$3?DpNe!T51Sit+(OY${LdhGlggSy!X|QKYr!Q<(14F=;<(7}REwGIMBBuTGcfyaOV_)CwpenLY8qp!b04U$OH*e9>R&4C=KR7sX~lRy6T&cMr3*2RO@Dgj1=5vT^lB zhBHKHf%?PaAB&RI{+)V?wt%EtR1-IP7OGNOSQn@<{)7vzzyyhG^k@fz5KUt`th%c- zEzD0nu*b0lBydTJ5N6>|uY>5d5yODLj~hB3-v4y-`p{Ofm*lv!?;#CVD&} zmRECz7i9`M)w~Z+dtbf#s)v7dWI!WiIK{uU<&*>bkXO6hXt}5oFm9VFLBZvjEkaGA zAD^qe*M1gnD-~)Qgvn6N(jkQ|1o=4*lFN|9S#{d=-Rn20RbXTE^-m9zC}eG97Z! zQ^+-;LB`oX&$bKcdXm#gHDJv@L+wWzHmlp7=_#^>CY2>DY#GZn=cEUBO#AM{pk#7aLm!N~5*3t>wmPCE&nI%_w#OWenhF7t z1V`f}a-o<2q8q`gWdl>%PTHeXPJ}mB6YM@po;-**MHY@SX9DHPCLK#(NR6OOModLY zl4%fnW@+8U3w@x-eyCxP#KmezGl_6joUn(MkO3ya1dDEGJ3lDW|X#o;7pSpq%1`q)(Q>F$g3$ zio6!moA01K_CHHfNn*cC9y6#S-dV?Jxhj=_p}6CU)-9_GZ;mWoYt^lAqg8v^-OMNO zH0^rBK~PwyOH_KyCM3`_UhCe=i+Rq11Q{0{tHY7;RUW~d0?*22@|D+jBo#8d$Ul37 z9Xbe4MoxI6BA0{d=~g^}l=6bMQw%EMuQS_c8KF+9_Kh&Ad_Eh;cQu&KZ3 zyn5N5Ld?gj^HE+?m;iC<+W{2hp)8>oE^^F_vL|VnLN{RW zW#ZfCFdQErBT)?{i56(uhni9-8Zf~-f^EZi1}R&%GiTlggg>(dGW$ph&sL-w@Q8|P zbSg;U4%=13v|U_l_)F-ml)z_QGW0oj z;>Ria&4lXKel4TAcVpucx9I&diFFkVu=GtGsYVGCUk)+{915uIw4@^)wdJ{LLiKiq zGVX0hn8WA26qB(zD2PFNV@ygR`{);iJ*9^1f>|*so}V(_1P-1Mx$WB+8DUyomsnf8 z(^!9pj0sjbOUQU^qI|#u4+Sy{%|Q5F-Ws;W5_M-jZqVvC@BiL=`@PiFJm#mCH!N`? z|IXIMmhVqJmpZQn<0bPWCb0(e-Mf!>k3Ng%|L;9(7^K1ik389%)S&5HYXJ4kf_Y+QU>L>eGYN`1yl1k)D><7UgJgpr zHZ*mvf!SfU;}lk$!kpM#Pf9sxa_~$9j>?i)0fOU<*J@j!!X2G(kYom5Z?DiAjDa~6 zQa7p`<_4J;%&X`kWFGKIYf4!flmwrFlSX0^-XLW_HmCRlNbx3fh?&Z`GKZAkO%PU` z|BRW#gT6_!-$#xz$S&JRhMahKv{2dD_11mdjsquR8C0XDOW9j3+aHG0DpsZ^VX+>2 z5~^VZh89MR{*`57_@;?}K%DA`CR#*caIpX-!rI`7B+H7|sDm_tSc~~7LOhwA=C$_q z+r%4jHpx}^-r^v4&8!I(c59HC$WZ6lUmyrzuUOE< z0}`llfN07KxLepwIy=GNrqe^0j62&-mrxjxi^m2HG$l+_b%I)wAbLyJY_N31`4^2~ zUPmb&zbf}pv8O_Zh&Gm0|65H=0j^*=uB z#@~WRW4C#UOb}fWuoNCnmq=zBE(N}=PHXiqg{DiNVZtxB`r49 z3xMp$-2&wjbFxQOI*Ah5coY7Yo=N==31UcN*xX3DiUV4?asUy)hgcn`0@V=XcaBIW z$)&7S(jFg8_XK?!WMI0=S;;&Z8smswgiAn^q(ZO_z451Bx;?Br3cK0n+RjPlFnLxp zJP@&&4pGCjr?PrLbuAV7t@5*!F^FE zcqHQ7a>!6(4^-r&Lc)(L6^=-Yzf&O89HawrkSHGx!eLHAA+CyNI8m?X=!MMLKwnYl zayRJcgx5WV9DVZyel*0zAXt2K`4Z+4{CP?q*D-A9Tf|HRs3eq3k|&0Qj$HXtS5GXa zTxx~{y&QlBLkI_c$%c@81(ixZ^3hZHC*gv%PNpsJDZy|c?g5Vp9uQ1-LVc(=XU&dH zZMc@3AC&^ohIKp|Y6_D6u!-_$zJ^GJZi4gCB?|%yyBxQ=;CeI>WI5t#L-hx+m{`P* zfto~0#&beQ8e0CFTPt9Pp4x^sU41N%8w;gA3_IFQZ-kBCxeNA`Iw{>LXcg& zh)2NfJAZp-;9hDm-5#L^L~AX7LJAl^F&`j#$>Er6C|PoYM`}&i6R=qSW-QKE$&%Z= z0~@M9ux#G@{2ketOPpA4#&Z;oL7bWV&mAliuLKRIkR-dkS2Tn!FxE?~_GrI?1^K7} zm1xNAqaFCh-SAv49d)MmA+)yAx(^2g6O}wH@*F%aUg=QrJ8`1Mn@viUQ9oFS2q^c3 zp`v?pW*IITxK0Sd#~0{fiC&=tNnCiF&hgEzst(3ug~$@kWzH=xc2K1Jt3vmyVRdNi zqbslujxD?xompxqDUvtP7L1CvELi$aS31-)o>~n~YybikmR5w*FSL#-i@J-Ekb1{d zd&A9zG@f!@&T)jX9TI@pCkZWo6h{Tc|Hs$&_jm7(cE`Ju-7^-_x@SOD1>m5qkYcLk z8{_fuz%>4Vnd2!k+uBNt@T-a24!>#7%^-YR| z-S-A^%MA*vsk^+|GX}pU(_(_M7|uuo(#^Ila$JRNKEt=m=QB}+{0FFk9JylQxVkLL z-ce_bg=z*V5_q->j(KlFY}^D2HtctZ%gBF&4mIZKrj*_Pxq1EULy|ND8G)16IvWX9sa@{mgXaX`CaN3#CATfkR zZvDEjGycG+E14YOjDmC;WV~ZcrMmf|w=q2h+M&JBlNE zJKGSbv}j?|beYw#A{Z!NPnxo~^wb&Ds3xKKH4;PFl+!WJZB$GU?}j9f>S&t zKiMF<*2^+NY3YHU!n@5>F|-0g870t_(Jk;-L@$MLdDqnx<<$|71-s0bgk#A#jD5|i zLhwT=brW=K1-gRTHrrojZ)fjCz%YWq-#mtoWBMIJ)aU3+3z>kGtY5fDrj_q^sWu*n z378hu79+JnaqT!=YAf~W#T;|5`TJLH?^-Yop!TcG~hMa=>js{RSSomo=OZKAiC}E#q>!>X1i5uW&$VXGw zG#Q~$Hiq=y)8^-fXwQ!Y@;3{m)@QZ}eS!p43Nos1Ea#{jkE+2ZNkwLg8NR7^U_Lba zxkm)K?g@I__7?g!HBS7~{WMbpQY z4WI$k^F{g?7`DD<#dP?8o`2G-2!MDjur<8)=6pUwg>K5ir)oh8Z^9$%|H!P&2B-^> z57@>IXyD`LEBJaj9-C5`ue3A2tUy*MRudPHzMPaKl##KgSaVSdOwtIpXXl&lMyYY* z{EPNCRV}E$M!xxW;BSl*RXuglxX1()*TarQHVbG3qz zLkF`@`;(dHAZ583I>hq(hz0ZW8!ko=1EyzJ(%9f4ZkRWT3T`GDBA}?g)JuH2|M>O? zcA5C@$JZZHU<YA6d7lZ2&ZA;RfO zuL5BQn6bOZe<)L?zXfyk@pz9oO|ntJh&l@YXpm-qM{ZOn+>l0HF!~5Xsn4})%MU(z z^e8^+j3&2WHKqZMf(h*K6H`3(m%e~&A6+He4{v|?;qHU>M0wusEb%~XQ#;Hak`0Pg z(4Z_LF5~JwQ%-oZG_`)-&Qu7F`GG(A18|Z|zPs@{? zMH4$&o^Fwt%pB_^AXE{P6sZZ+Pi9L&w{e9(brcORdI1I9-~aUKVK;gG@Ornt`}ytz zLLm5V06{dGw}3d{!R3y4A2h7d?{LAcgJ?7+-I0RL6S$qTn%4}j<_ro zSD-zq7!Xi0UOtg^3;r z9Ptr&sgbGn#brvGcR3ZOgN$CXyx0}jNnD{UQ(#FB)PvY-;nWg>>`xuL*3Nj&-H>#Y z##?LiiMk2r^DUwW=bYYTaXmw{Xii@`yec?}=`84HJEjED9x=J&SX*7!`k*i`K*(Ha_&!Y^XK$=?hwRC zD$iI$`OkDh22?@;lmv2t=ubR) zc4Do0v2!RT08g%;VfWGy2{XvQ-lHKd=9j3_XQ~kw#CIYaFBO4yW5S`7jj!F6&q*u??Dtds8jbG+VS18Y{ zCD=3}GFXdRa4c*wSfHC67VJH|W0588L_L(XB)rhoCZx$>Rp2ej3()iH5#lV;=ZGNC zKmjC&x3Q8pNh>nQkHj_ynVbxrIeUchg@ufGGK_X31s}WnF!6~Y%nqx}By^<{n~)Mh zDiopWN^pKPbz(%&$$Q{`3&!8W`znKwq5`*61B^Q6fFTcM!1;wYFfoD9i=ukm1X>=} zixBC(^+Plw%7uY_ci)-`q&2H$Yn^D67LYhqgEZULh`D+f7muXs3FuqGb1UZp1SBLX zKj;4 zQ0YD34mk%K^{x)RwwHIZ>mOBSf8{)ILhB?~uS|0WEwV_(TQCY*JqIv;J1jyDQ5#YJ^@C}VLCG>`N^zK_ z<>blgGU)IOlJ8JzVrh5d4H;{vCLNo=5_g#|}La~sI>Ho5SULVlup zMTTv`45=!&Xn1EG^8(bT3Yk0-w&IG2n!t)Vi-wV-Su598j&^QIspyGUQ@%D_zo$%F zlR@?cWZ*SBCL|`kp041MS7fn*t#RBEHws+&|6Ah=Y`|)MvNxuo4di1EeD`1uk{{i^sAi#w zP{Q&!dYQ~uGDPB1+nQ#Sl77+J(1vR7NcAk3X+A!h8AS{PF@Q831m01@2{UW#FmVDT zL1-rvNGEl3h+~XIOB7Nt!Uy>S0rvld4&geGDG^C7(2`{-!4{DCF7?7w>Lc%o<9e-p z%qbx^no75l&(Wy`gbd+&=?n*Y_5>+v?Cc$gBfVzjGIK@HNjRHY(sqk{ULiY^&W|gQ@X~Ix{H{pQOaqQEc8BYvZ z2fK3wiuVs8)Kvm@6RMx&Hk09hyF!bLW=?klm~SXOSm;ysUrDL*cwi0JZNAJFk%Rq) zEd+bgH)L5T35|V4g-9$QbR6JK_ljs!UEtHfkn-Yz3PB9&Wh%hxHx* zi{>p)c1AL=f~w5gL;A$?!xsxD5TOnRe^wPPM7wJK65CCtZj+*z5I=L!wK@HRWVL68 zP9*S@95*@r6|>=I8H_#ApHfMLMjh;3XodO@1StD%HsbYV7U1$Q&)FEBlMB?p0Ge^H z<-3wl(HMYeQEt;LUcxl-d;c;)HP(7G6JzWn@+7E!__efY{C&I~Uz^o)$=M$d<#B+MyI3&=#+(s`oP(Am_xuj}X|=pffL0k^?|STV&kK1#TJ-052$!p!gZF-M0BJEf+6p&QHxf^~-A}wSmg$^3t*g?n^T1`6ii`CKqi7CuXjxhP2Bj zfo~_L$VgmIr+;jgY_UN*RymH(xk$dAu7`~o(^A*P6=KnfaEDjaiBy`R7b>4lpxGd5 z!f07VMJv?B2>jH7 z{f>vkIAlz)yB!L{q9jJd=E1C2UkV+Hhj4v!j_K7aAaYQ@; zN`w-Uj3!!uQM&;9d5DNjMcL1vkl__c31Mz*gGh5VE0ESeAKfFJ>@l~YjxyO6Odo^f z_koM36d^f0CYu+&-|30H(E?F}~EJAS>X~chlpIZXC zAyyf!=^0IO!V@R>u4Bc<<9=OW6PJ2wN;pMbHW=@j*b0#r+JP5w%E~CZ;qt4kq@1mQ z|E(iC!}U?d!LXRM&d;C0! zY1^6^Z6R%_j&F+f?hauw#1F8n!^7julJ+_!3@FoqOcBkKDI)}SN2gijfxXlA7vv?| zc=*!gY%j-yi*VF=sol~HApFGz+H#QPh1f|(LvUQ5Qp|#o)9uYlJ6Fan;LI#%b5NLP z&p;%Ipgc}o7)xmNQ&8kwF9(?uQ<3<^BK2-YY@4Lb;wJurA?n7|?;($E~tTbkO% zRgORIbpq(8xJfWLT_H6neSFwDMt~F(H1_Syd(?`7K)CEB2TJeZFF$>_`{B2B0SHS( zwt_UClx(pfzxDZ0dqr7t#hFL$c&r$_)%)TWq`hv z33xEGuV0PPX~HkI7Z%D%@rSuy5SVyq%cb7BC21Rhq>aG{Y=3u!6)^$~BFzik$X}Vg zeaDIs;J5axAfl9PG{9!!L-;vzGjYGbF`X`E9<%7qR(QOx=O|3-g*8BaW$1u^Qv#%X zZnLesZ`=cS6wbTcgAKWk)H<6bXov0nDjOwamgP;2s4vQBTpyXd)3I>5yM}4iMU`Bi zrU6Qe1g6e-9a*ICip$>5@87+CKq)3%aIx{4iDFfkc4BEnhiK3Ls&YPTSq!L#vxL%d zoek5k(#T*0ZyF3DjV4qt%|U1n$$*Nn-T@Q9rLJJfTx}^4NH%~wRDT`c3{UX^KRrY# zanvVpov19ZicKhg6IL-o^-8>DeG4BP{xd=dh2Dum0N)kERzDs~L3_Q20FAxgst?i*$Vmd}6=h67E0WaI7K{#?LJEle_6?0zQY;a{ zp1b<>@8CK1$uSY4Yd2(He=5!*tZ!#|*U zr)&)TLpxGxp2ko|)Y_+`=j2$x&cdfmm{6fDWaYZ2>OcRIdmUh5h zX)SnpW{TW_i9|jko`sIMQ|=S_fA0~PUd6}=B**nQCxxVsbAy>cdIJysMbIi*nD-?c zlHe~C$J+ORM{pNMM}LlmJ#knM!BG>zK`^34Onh^^{`wIA(V^C-FE3ChwmV>?G8|ws zPdNBC2xjpU`RVJG^SEb*aZhXnBS2t#Py3MadvKB^{yS8!Z|4pN8sWmzb-OHmomJpSoMdrehcDZyEkiYsTW zxsdSF&8EgiGsuBp4w>g5`*bY?V%LX57^<#e*%Z|Yl~6V}Be=&d*$~UEm^5i{)Xr|I zy_P%kfwuGYD-vYKC*i&SCO?pbmK)pjWPMg<)=d(cOV5kopuo{WWCux2bX$~By+X$V zBACu4etw3?uz01%sp!1&>!RieNpWG0Y!X0scXUh;>hWwak&V(N#8>e{kL-yc%}u&w z6+p>*{7|;xx~=*wOFV?iZK| zichIw&b!4|Wv$GS@&B4l1kx2$C{)ZfBg&T;Me;3=Sw)h#i&Hw_NyRt2GoNQUr9YQl z_Z?{fwNgm{q`c-7-*U!BtMO(BU6e_4%~N-g92{wFv*j4FViE&n;mpoaq9xoEx3{~| zDZ+F?!%#u2*FQw9P@TmTI9=B}rFkO-AC}?+S)S-FKHwq+a6lO3Rp@S2R2xyBkUWoH zwmoO5lDyGH9$-r|Z3*a2kVt%v5(NYE2vBHTd=?iSx4`!aeR;fq5tW-|ztW7MzMSRu zWk|$9yvW6hwU1C}U1AX)69$(Xk4DeVwt<(T&I41_^Rp_G7bsV|PS)f;!k3>sRsfDs zmA%hR*x1H}AL~CeN?Hv$IfeZX2}dOuBCyUT$S8Ls)k75}T(!kI$XN>?72^-1d8h$$ zVvuP0WQIstG0lXyg@FrZJl=s)tI3*RZ(>oZBtm)AJ>;JN)GuXGk37TH!lXbn(v4U? zfYrSU;c5W=wJQqPKduoCUy4X}3pO@KdGxMT=o| z(7a0!77HonstbbXKYCfQp%JUP6KNSe)(V=ept^~hMNYrGn0r+N8dxOEVR(9zMoBw( zjL6!pS(;Nk0wja8ts;6WLhZ(>^`&hPhXVK2h29Pm(h6w@R&WoLZg|umXxB@iTYtND ze>;U5TjJaVLl(Zk@>*d3DZG4?9$O@(6Hamo*NWAZYTeQV1r|mSj3(e=j>r^Oz}pab zwBI2!qO_9ae6JS?Ya=2}lYn0h>Qr<8JOdUVYN3~|4FD1F7xlwSh8ze?MMAsP%#S#P zq#pn|z7pd>ctu?1uniuVazTbg}EW4wY&BiZR%PyTLS^W(zB+~jM zX*Tq4Ma?jLQdWRYJne(JkaJe4g&xUae{1vFCsv!JC^o%*SX|I6+d*!jkxWznadIG- zzrqRxI|uu1daQdIeHtx$NJ~i$2)1A7aKzQBM#U;V49Jtqen`!L+)&fAjYK2N;C# zHtj*t60fkXI8;O*qXZ{7M?J{8axlLP5OuMyDt#MRHhmB_y-B}FilbAhbK8x)rl=(U zPJAX0xEB=})I~*bDJ{#t4T1iKpd&_;W|@pyyq!2Ztk)DDM%L`KJKK>Vzf_IqKj10Jmm2j zjS0%7aZ`S`&>jTY!lHl}_TBsNy#uOyU^oL!z1^Y625PgBXCFQXfLrIRC&a`Yk@MNG zqHdW-&6r!CNufP9emugsW}5lay>Q>X=Y ztrqYqkngdHcTKA}bQA4CwADM`8<2Z-ygPQhnZRHF`j_3K*K#Z;K^(7-#MnSu`GH=o zU)dKbr!v1Zt_cNE^png5UIb&8;xxy;Gh9!8l)QR@gvX8~E}FRSu|$frDo$W+bBn!} zkXbd@%T#>|WzJs9Y5cM5SL5}!s~vl7enO-^0?o%iy?YqHe)sNAufO}V!p%4V!RdRZ z6x$xqLv5e^#M5$|fBRzXEu8JAz0UrPwU+Nm4^0*q3+14BT4Hv~;^NT-`;H8ZI&8-s zS|sTWagxw~>U05}AkgQ714eJ>2EHt&2H_j^3b|JV*&QLS8|Q+wBDZkPwoHHB22j|< zhancVE>~rIA$EO0Ny8jGIi^S?eB-=q>5$9MvD%GTHB7(9cTkGMa)V^x`ViDGO+RPx z(b2mf-sfy*6mA<021nR^LKbIBs1&Kyiy**g30n{%iO9y%VsK;!R9~^8QB8sfiIrz5 zlsx71G49*6&|XHE(|+HI;~;7TpgyJ?@~WHdiHKSf;u%g9NuEJP`HkW>)W>=WJE!Q! z#dN^KnCrT?*rEebOL~f&5-*$XZfUc;F2w)0N)VNdD>?8VF^1&+U6G z8}QMY*jASM{DtL{5d!}U{vW9?J0(n)eFiX@5|~L{0GLStw?*cBuK1-Q@@s=1_7##LO*gO}Gqj@OA%ifB+!lbb$F)+6HDGNgLGK^G&(`E2em-rbt!FOxpJ+qTsK#XglT*6SP6U^TJ+ zckg1IOCyG1?%x>5JPP9^$!p--$zUbM4SN-L21M!f(}#}_ zi@Wupz5ES{^@~aPF@q^U5>wVn=o*G7-ZL!v8 zp0-MZaG~H?EcLVvd~i*PADyaK2m**lNKtX6J9)0Wt<4(5V|sy@0Zi{9UEB`|3{@8; zj17Mm8njsOoE+(3Q6k3GkqN7*rq_@wN*|7Ur-UVBRBUn^FZ59J3=a^qh3ws1XZlo^ z5~jB*C)jO&`?!6}UQVF6W-udvt*%qf&!JSs2@-Y{^Rv0Nkm}Q{r)FblDTJO3WP0w}_J3uFhQh zPM7{6+jFMOEpS9qUN?VoaXN9+Fb{}pQMmIGX=K%vo`U_8T`D+;fm+MU^{w30*i?#H zX;b}gY--0%F4^UKbC-?B?{e}}ZmUe5(Xz>t;*t1WI=8}*Q*0@0TVn*g@Bq;U&I^67 zZcKadl0$r|%i|58hyr|K2<@lbvQIkbgg;r0$0JzY@dC7}N;mQ$CN-DBaiIGwBZqj= z>3X!F`GoQgz4NI&dk4t4P&PNhxGCC|2T%mF&&m>c@ONT{zQM|yfv14J~9mL17r6ZB+y19~@W@(m{66b`vo}|4< zM2%XDQMR!%0q@og_6!kl%qJNS zfy=zKz-An#W+&!e!J`(;4z~{35HgcawwD2zz}f(6HT#6c1hZhZ07`aX=j(3|^k2Ss z`U_+_O%ZH&Gn+e6_PHH1rf#&LmkQ+?OVL(dXx&Bny+kg%=>)D~75$y*&=KmQY>mFg zg#y?%8^tC(iTi*_+ximw1FxAt>Qm?+(FL4urceLz4=h3(m@>ohftAT_XeK)d`MH+2 zx2(>3(`3pl3#m`L-qANNjt)A=B8xDT)5CN-(2ua#oAU*GB z61QiLb&2a@Zzq+1xO;}9IKyjU^o`k4HXmlQR!dD16CN`3RhBI3!AoISPX!rhDmN$F z$8?*MqS_D(5x!+1iieF5MTP;lbcoH>DO3pRTggCxP*z0Y!!3fhK~RHul!8JtoqI+i z7yg%;iMj;1UYMIoD^a9E4Q8VmQpk9^Eqp#x8T1-}@J>z%`5pCuKzJ~OYp;0elKoJO z1Q$LG%A>hrEgW9cw8yd#*XDDgxW+OKg+%U7HDjJzf>%lv{6P& zdTcUZhy;Jsd0G(lsP&GSKZ5GeR5!FBk6T zCwf@{F!po0Sq@-5_%;50+ADxO-XkF3oP`3LW*{$Ci4D$F4i=u<%g1UjsHF{Tk$2$k1u73|cc}Pre}Xt$f%NNXR~Xr`KKE*b{L>>r25v%tnfv;x z`7|Uo(d|Wu9)^RmL{(4Y1hg3RxWcVbaw_j4A)432H4!0><@0wT+`{8=#IsEkKblPI z^#=-h15~d?2^y|~%ggD)0^Z|*@mBg3;NUQ!+5H=K5@>G3NrmGIMnfs)L#w(`tjj2Z zdcnHB_LA5EE$W=4)rDwj^8koZl0gHhHoHT#z)PIZr5MYAfZ4p;5+;j!06kHajGHy$ zci~Oqu|{cL#gew={JvhBbv!BWq>4^5w~D}>4@Bt9#V)rA$=*4e(BQ#LM@r&jBCED^ z{8(^TO30rit-C#}YT^PZMZ+-Y&gN&y3F0QpSz0>NGm6=((yW`q9!G?P$s7m<7s%}S zi_xi(1T(Y?E;Jx+Sn!UWxKt*M#uD)q)?M(v3b5Fcq3{-#!z6(Y-5gd7Lg!Fz3StNp z3Y7>WU4N`hMGn`?C>G-w+YmfWK?DSEZ2%3aqC>OaX8$!ff3+9^kQh=gc8Vb*tR4vO z)qdxdkRJ1k{stjQr;7&yk@oQEAZRd-?1(D&cXw|}2{GRzi*J|Znz&~hQwE=?#g3~q zzHmOIPq6u(6if4ml4KM8hpmeLi+i4?q<{4kiYsJa2#Bj`MgVA{a3K_bd11spj_?VF z{T_1bk(Kl0pRr@a zbHtM+8eX3+4f)DgH^#xNq5!sN8Kj*sdugLlZ2W3iQyWlnXLt!vNOOexLZijZsrHb5KU!AC=kU_V$d#-y8qqupuG{b1!|ovasiOA{&mOpN5f>!u zNL)~C(DpV<3VrlA3@3bx-0l4*QeF!f@4S6Na>!6jM@u+}{xC7ZC3oAHn;X=i-L2l05zypXM7n8 zx-cXp5qrhgl3hYt!`F`%7e)wk)K3k|-vExm?A<|%dvsw4Y#7oIzri__s4+0uY`@}I z*dp4%wKyjMgDMe~_wAWs-xB%^u?KU6GLH+lb z4p#$>Or-1yW3PRRyNOjO`6D*@O#@ESK>W;R-TKT1#C|Dd|8-KN0!;gX<>w~{3n?$n zLYgrL#$*#n>@%K`+A~I$WIf!;(QI5z$Hf$99(Q~He=QMBPx~h`(aJrKrJ|JsPA<{1 ztbE?RvyYsUFL~VC||q3E$SblW;YO6(h=9{7H%}zKu0Z+gRCpPa3w~ z6B5;^5G5l+GTUA)o=5_kU#{RZCATz9PhTmBkrQB}B^)8q?^qp7jNW-ucTPV~Ha4RM zG2pNZj5phKh8I6Oe+d|g4ENXhadZx0`v}jjqPidpn^4K(0(Qh$^K$wXSXhaOm6MQ+ z0qL(99f(FIuZ4iaR+LNE3@zDagpfa!Q=%j5)5qQPFF!r}t(OPQCC%8DZ^bUK-%!8y z_v#`@kJZMcSe7EtO2{ESDQRJ=b*ZV)Ss+~#%0rtePkYN}@A`I3EY$~QI2{CevhDDR z|DhJf_$62-l}<|~JW9T_gOn*);+n$ z`38!F20I5Z$(R%(@Y5dauVA0CDo=a=)`J7a!_2ZjKdJS301ke1fwKB9%F5D*Ax~dH z!PvdodU2ieq(TaN25F%!Uk>q2`$BWMy-hGs_!eG_Qad%9y{-}Wi*~)mE=FIa+iE%| z=_O1&k-|T8+n_?b+z*p7wrk3hj#Pq%&zbJg`S~ps%+F#8ctRom)3b~5RnO16E+|=} z_%A*BCpsI7mOe#u5WaZ25G@wRh*73VNiibU0{ctjIS4Tak`LpP8z&bNK>4VAZ(1GWgqvOO)D2gJ7kc6^TbON-QrgP6ae{uiuB z;k%n4%%1)52$xncMf$ zPM>f460NxF_*=i*LE_~F@i46puznvR069PYpLM6o6#~t)_v4pG&#_3wy$TD=D-*~T zU7+j*yM&>@WkYH{`c9sEl;rva%z*zJeBv(164t$GEm+}*{rwz~pt826z6^%OZ`4^R zdH%ThE=2@PDawn(^rNX*<`5MObp}cdHUnvvu<$$&rXpQyU$|#cD0YV-O%Ga=ggyR( zeYt!slv7SR8ZNLid{>M8D;K}=eLyJ|&ho0Dri@TPXN{H$pm2=+_tWFjakmYB=H3x9CIL2`ny+cFTmzLDY?Vq= z3Ex#(CTsgq)NzQ=gi}eOmJ8Yc?ay+iXcgF8RS_BXa2wYnj7w2cXGIebDim(7YZ2i( z;}OsWb^0BTxZez5Q*as6hnNl0izCnuwkUj$VR*SLkXz*lAaDphmq_@;hjC5En}NMN~4y{JiG;ez_ui@ zIr#57`XW_O-*3loD@@{Pe?S|UgA#7`1|<-pH4=3TVsh?@8x0Q? z+?UpLzd1#BSj(xXGKy;V@$LV)^X5o6XC%6ivy%6p)L2-ns0Eo5CGpN?&k%6D5LenP zXQ)+*qlsb&8JEC@aBC9@Ui4ZcA_yD>G9L&UtY8|?W-wk^4U3jg(FEzm_$}+(^eJYP zrhY@#fkKtW>-h(kBAM9i7x(C_X6_7ut-<~|GqkrSCEKP+A=ijSY%s)Xf@6p^ct~fR zh>MEBs=7>&Bk_rQ{cM7(Q*ck-4;p|}pN*fqnDhCM1KFcuF^K9`H z$l^X<6WWGP&exRq@c)zPV)X5F68opw2m;a(?>C)ZKYP*3v!Q^Ec92a0`0Q;$Ad5>! zcVxuEA}LIr*sMIJDYxu1Z~wbOKnPdbVtFxH#&vibSz}@%ixA3I=>Z3?-@N(o>z`l0 zgVy}>`?qfpw{URq@!`X#?;d*FY9^|5Y6k!1O;1rV<7dbMxDR)S@CDH~oNLdvKcbAk zSeXCC&-1H&+vtkyjpW@qks%xDl#i4|J5|8`Ws>>}>7#S$I)=qB1( zp`Be1MRHYg2O(of8H4?30+U^8Fcuw}!^$_T7pTF7I7;+eZ{2|Df?!HJmk-Y9ht)|< zb}bZR1&asmOC?jYNkhRUHS}rkcfV6^Gz2pQ*8Khv3mNDP%M0|cm`+VYTJ1gO0+%+6H+oeC01dH(n>eh%TaStDZXlTg?w$e^Mp&|#>N>-e5e*^~)_5%&oS z`>rn0n?_Ym7#9+upg#OchhJB=jTG3q*ZU{@p3M``S4~0sPoMne$M=7^`^}&4{`Q+6 z-ah>1&8NTo^6mjCOFB1A^&MHSx;~E*$As+Rg;iWp2J0X^j7nI*wzF!J2X~mIdB$l0gD%< zGOo64VNiV-EF=gGq*~IJm3#nB5Fpqk#m}H&`HtbHbbGaA84Li`z+TvfiXrJB^hk}I z;xF*_%klJ)UPZVO8o2cIG+PQe#ydL`VSET2!cRK>R$XN+Vw54m#MlUWf{=t5S#}UF zJj{$Kw8}~rhC;JZZ$T{>N~e2i3=~7XT8!3yv@1!B)leP1p_wmOdENGbwj@0hBw#b! zf-<;~N%bmCs&z9lnpZ%!+HXcC9Q)ABco02o4ub0;9~z92Zx0!&eH&~9r@e+&3YRkN zHtD$IDB;zug{Hj8xwnvIqH*i{&n)u{mGdsp&=~ElR*W$oA%hYZ^%!y&@&3HYx^=ZR zxE9Qin^@_c47pFopDLV}&4o-UDr!kOF}X@RK#dh0(<>`u(qu7?{qmEMLr&U>z%6R! zQ-V}xT#vs9;RBLi9Zah?0R=R`3`8awl(%S)iVE~kvrTZobl`=ZdoKe8?e?2zFP@#e81{!p z&rb%!{_(TBe@9KInKG`04f|OpkSnm$Y6p{(s@N7OIJnDn7@l}A$)u3%4!=UT~?G+j4_Xup2{ z{r4a59^QX{Kx5diVVOgvZ`Mfp(}y_po#$jo31 zUx7#u;9R&i`qVOlSxVdUI?mDuC2_zH!VE?v9^-H$5ylc4?J_Jc5E1P?E9YPpp2AqI z5T2sYE#9N(lv2k#;WHd4=P9a7HO290@hYZhB<}GDui@NL7qcPYbRS^655VwLr`p~I{4ZEw zRf5I^aQUe*(O!fIAW__QKY4g-8rx|eu^V<%#LdYz;YA2h2&so7jc<{I)$1bR*J$Pm zY@$~XzX2huPN{s5e_vgppfYl(^smIU{5NDU?sTvVpfsF`29M04?SNK}FPkYN!Jes? zOEX1yNjl;<9MXuGbj@FA9!HFPc^Fd8D~Sv!!$gK%M_|Nf`13IfM(4w1fxhs1Ko zmGkxVMwwQi=Pd(d2h^3`vFy$;UR7+NmT7tClT2bj{NJ#Y6!C~8u@za|LFcwYf zDl&!7Nj#zxj{69w4UVm6Jf=44K$6I^rc`M}m*~jV$RetFx{gptFv`c<5@GF#e?b8* zCkB4}lQ+f=xw(U&SR!pC*7J_zT02-3FXnS}1IAkCG`;3vLOCqz2qHz=5I+lL#Rb%3 z!vb5q(miHjNSS23!7l70t^fc?of7UazMM5N(oP!|b(bYFm~fqf5|VMVkc7W=LhSvx z6HwSt?`*R`Qn?)1;o3i&&%h$Nb4)?A#+Oh(8Ha@tsL2kXI34aMC(J;(x>LG3ptZv8 zekwR%gDFON0FWwTGnT_|4zJdV+uL9RH`D9oC1Y%K;AP9C*RDuWt+Uq!&I^|$N>L9F zo&#yA99!WiH9=SgkS`_Rq-s_D6SLX1$1#~}wZ)9De*6kovBU_J^J@&HGpk_GYHf>P z=iammq0GO=y9}MgLlgJ(gO;fJ)f9EfwULS!pwv1OG+duaXk@b)`oa=&|fe`l;EBx%@-x1>We0%nCP1!&nR=E@~I zp`!SS>uM3m;&Hi#?7`Q=!)IC38kiDU9}{yarGS`ah$SNoDhgD% zIR%2vsp1x_a^? zH^zuaE3DSwF>-m}i_^8Z zLdUq1$-(ZDi6kl@MGQ*;3#1|ZO@|szQk*@%aStA`wU=H_xEtHN&9PkfW^sj(72lx)$o#g#NL)F;d*?6rmOdFKmMq# zQ|>t{yXN61D1Bf~SS?q+lEh0ns;S|VlG01S3KxoTNf%ZmYmy$sXoYZAK0&ZWsjo z>DP=JrrQmXcL*pp3zt`RSf4*LlW?f?aO}7(*{SjMhSvtsr%0R)8PTb{wUEd@NXIs5 z%-C{w75e8kpxf%l@e^0AX0ZGFz9`i@1QFoJM?xWllG&5`aWOp1BB) zP@$)07;RdvV;BZ;%BYlOj}Lm)l`z!=YM71?bkwe%ZR1*|?83igpuPFCQzg#iY@@W$ zT+U{UN*k`n`(>6hxmqMY8R_X!?fK|X6dWnZ@ zn65xt!AiF#rFoVDQfjrk0tvOuLwT5VSJ(4mstWEIwBT6GHNUo4`Td;Hw$OlJE|wx& z@j8B@3;g7C0ztZzgXrrw zpq7@q7~@#2yIHuYV}foJ({tBXa)G_5yawGfbh8maFm}AAzdfOd8t(V^<32!oS@V*W=o;cl9!q$_*M%U!I!MZ=_rLWuUP^&6lA+2v2n=ifJqFa> zm24Bra&W8YRp~q-O%Nr25-VrKbJSau@$NwXmBjCVL8{k8PB9t7rScBApR{aaF4+UB z*+#al^?0WnL>{)XV9!bY4Z;LBI&C61M>5Kr=vw!)w5mx4aZ4QCY} z!_-WcAu#%rBpunuBuc_$Z1o!zE*PxF2#5**#_qg%-}`&-<6qxCeD|Z~S&LlSoF$Aw z%C=`fN&kEAJ8YC#t-*jODFp_9_7VKndc0R+jz6m8hu`-8^x^LHpMSgmkq~;m@PU~5 z`N#2`Ena@%6K(S6ABxnjFMJ|q=EuFc`~LN(cMo59=hY?Zh|Lj)n(zOQ-hcG|`s3So zcLyk+X1GPsUc`(WheL7ZB$4A@$gTq8HrXG7uRIXZCJ3`-jmjLoMIE}pqJCbe15^T7 zTAy7ZvULSAuuiY=mtU}(rT)*<%V*HLOM$;$_*;a8R7f|SBXHCr2UA@GHMAy9hqH1wh7xM4)ddl;tK4*v|B~cYK>e7AU(nROR#6<$mY6O_lj#21 zlLpgclS~W68ScC4N{=gAt`#KPGFamLs`@F5CNcg_f!JQbn=-haE463`YU?^5gz zRioQTIK5e~Bs*mWC*;DjO94Rm=C@4C@C9aBbSR3duHFDitT4L`+T61Fx}OLSLL|$n zz*-p{Tn}3DcEIUMUoW`IF{9~@opQK-REhcU*{8G$JVbC~S9ObY-FU_j7+}9RMX={J zs=TYD^E5vQy&ma;Tfg!J&DVMm4kA4bM?2}5uy_7A+#NGP?Vgfpa6;IiZ9y_GW|Mz( zaTlQDx?)=BL59hxRiD9x4!Smz#9@Ey1i{u)>nkXZHcz0PcC?>C$djyTE6Y-2R2BR~WVJTs>)$cyV_+^Kze^*!3x01U zxA8V~8n16bywIaJ{I>TWfj1zW5@A)PA>H7c!2n*Klf$DIgX2R)SoQC|?w?p>)zzz4 zsWEUj-gK6dC-5cl=B*vu{teiA3pwYGs zBMZ`tQTT3$%6Akq_eEAcHcfF(RJ1KSm*`+ujBe5qf>8*G#)HdVbtM$Qc^+YVAjn<5 z9Kgdj9gUb*-Z31N1MmDS<=`l4%qtY#t_0Gc%>Y);uWt3)LH4&^N5nMQzP;XUzAQ6R zS1l+H(b4PTs?&_|c$i%PErKGTZyiyUOo~i92moylW{you34*x8{FkZRxyRD5wF11E zBYG`LDfBdA@^;AgQ1BwzbPT?(;Cj;_W+OPrCF_0h!werbuF;oWq~)S(02^yzeZ*Zf zudp&&yS$@#=d_3xRw=7@K${XoVwmwztL6e23CfdVv{rDf;b$X1PazBK&@Ex7u|bbttAsRE#CAIDLRu=ON;;MU6K(aUXYj%J zK9zIA-Ki!gnK%R|9^gFKK6cLZSPg|Zaca=SWb~vzVp9q0Vb~UWwwMf%p?>iF+q-vf zm`eERPBy%BgpoFAW54QY3K|#oh(l9Z!n+c{1W&+M@See1BeXK+y)~k(9Lu-8siXQWxGjf0@#g- zfb%KK5hZ;T3TntdWUpi;@Zyo1;y*5ol@i=FSZ9WGGHH+c8TodFWMr;*jYyK+Y->z{ zA+8EZ+v^-k(ELlufNdcL`AWO0qgE7W?>o+~PAns&k<-Wu!TO8R$irNF5lVZ;Z>&8C z(a$r(kdTedB9)rG`}Fb0^)Iux-@li-gE3h7!zhj$#@a5>fbX5~x|9cqEeOW^?7X9% zhY?~^;`Hq}m&L70A3QfymiY;^2yGwNi@S$|1Z3%B58WsU%Zyk`3m^+*y~g>#ojNI$ zzQUqlBP3nHhK;!F@nVgBd~--GLNjM-`{roj$wP2ATj!y>OfpRY`A2-~LW`6<=wjs; zk|N&HphS)}B)2>a{1;8$;YYZ^d(1U>+LFK{SR8O?I7tPpW@ z7(kqhrf|l@KfA$2T;4#_n zs~ZWC(b2%9f};+5BCCOp-Yx9g_ygXh&~VVMAohfL$rj|^w{TZuo=Ni1nX9d{Oc)gC zUZuWwsr#mWLko)jcFDpc(`_zBpWUG7*tkg$|@9F>RqKC<09Q&^eGobY;%Mus5s)hK|2^dlE9EC)+jJOIejbhH}7USt9Us zMPw(>a_@T%XQ11H@|%q-qqIN!qZ!#cJoWN&crH$%#B`uQZEh5LaODRHxKw;li0HPbaXXYGu_4#A-O%BvR4|^BXv7k3kSmF`i}{;N?{kPOp4rd=~`HA^>>KM zpKwhN3blo*Fu8K1Tnu68nFtq*xY<(IIxRT4ZFtlnvf&1y+0oWvgxGSwlWhl6^rB7- z>nx$uoG#dqoln`tWag=wtrx5T?oGzY0`u5DQ-3PhR0i=|) zXLX~wV9ykNR62|U2I^(^GGq9{UBxEng`XR~Z?tr9e+D#-alb2xip~xP>UZtwl!1c?$O2VUMgCL|bEsA?Z6joyyFn_hbebG-@>GaGj3JAU}h@nUWN<&&uT zv$7Y`d~Oh24-DwRBoe#xaRY!ESNlpp5ui26r++?6G2ddZ{b#PA5y4i`A&W|VI2?G3 zd-hoR>vuoC{;+%CD{mPRw|{9n;iQ&4T+5rw6dOB0O?`#XBK3gv_0!*|FCr5-OrZ}? zX?#PpJNovd)L1|NJbsoGf-;`d+Z9jbA-eDAJ2MGP#)v$Cvc<=S;ww6TA+N{Zf}BXH zU3_EA%I}V*UQ9HMJD#b$D%T>(Ab}>ZC~E-Oo5_nu$yD!2EHpRX=_fyVe66Ge=M}K5 zEcb)J4>=v9egwQTSuV3a$9O4IsqJ)=0jH#>9U@+eA(I8DSchYc(q3$E@AgQmU+qFV z2VClVSXU|5#V0HA@ z3y!Q9hv8q6Z)8@q9%n>s(CG=yFrin)FHF1vFX?p;`&p&b#0mNsp`X17IFjOkzQmOv zvzU7lEP6vvd(@He*gcQA5g=XAt^*~bvUG=GKWRegK?X>15qxL z9?8%y3QF9bZM_PX3*W=YnTyQzd6CQLKd9x3LOay7PIA=&tyNaDHb5CG*`gHtqpFsz zbI}`MT*h7^ZR-Rng7qp#h?aPM`3D$eP@C^;y}Vi}w6Go$M`6Iw-qH<~tj*XNQZg`1 z1gBPsodJnDpty&dO-2h6vq6r{bnSPD`GPv+aXaBDo&nmu5=%%z6}qFPs5UGN>#Nh* zX6T>E$Rv*4fmJY&w5I7HB57`PT%X&f#4)J)>X_qS)^Mx@w^p+6h;9|9mq~p%E#omf zA@x3TNqCS1(%V32vh?_UYu*LUN)O9?TX1JgLQ4g}(+{xf6?Nl++0my9>AVH@!^Ci3 zoTaV*hL{6>2#G*Q6I?2-4ul08PR|T<{@ zdfsaboKb#3J)Di)Ii?Gg6Rf6B3q;NY=}hC zzAK34=EZwv+KpbhvqbRM;Po&WmSL%}*s-JxK{{G{G^ikj$ ztb90nV-!f|frtZIa(p29r`4lFUqu+sRA~m9;{nx2IiKwhNaUKz395c817yk}(cJbF z@V^-oAwDxrQ$QjE0{98=D4+-t3h3mkbre({Q%@Mwixa?p(gXO>Kkq|Fak|=N4*Ojh zzzdj%)a;sAIusAW->7hDBiUZp!z%Ixef*J`4IOj3_J$Zi$u#~d?tU|8H$ha0KgV*4wtS8e$>5^n~{ z7u=H|?PekdsXk!``2(p)P~9?LuCNUtI8ar$z;bon+Ff59_BsLc<)OtM;yGvRl7NSJ z=58dUs3KHfYPD%CHN&DIzV5ZGI&`7hTQ;)+a;gGGyWavrv~Ew3Ov433|Mphwnr!zO zrnS-GNGiF-_DDWKfR7?D>2Q%h1&S?eeWc5n(}LkL&2wAK#tFmU1VNEjahwvHT{>P) za-ir52@_uhj_F7VdxZvfK=rM@*szYzW)k4zfd5butv7cM^YQA#-N)}^9Hbxb^mGMM5}5C2?1zhHR^Oj3v^6CoVLOB0gjWc#JtxB&0R$adp@>E*@Vlu?2-S%(cTf`S`b zH<~_Kd;F52Lmz>EaZ2Q>2h)itkS-Wy*WqM+0U7~)21Yy+#eHb&u> zZxwiLPO%EF`eyp2s6hAf70mmj5HrZ%(E}3jqX{w{AiJWQMgx((0M!Tc3~`s(pewC4 zr34dht>i|Ba0@a~!O9w&2*xx(iXB55eo0nc<3%I~+~LDip~r(eh7!jrpA{$!sBeku za}z5ApJ3M|rDgEfB^1of)oR5k;R)Y*giEV4_FvFdOu#)0=sGsxj@%_Le;Eeshq`hf#Ti2B?%%6gCS9MW0wwnMbin_V+ zEfNEX2q0h#8uA6DShTGhS@KI!iPN`le*618&su8_=NwQ-gH~;%%{zp=`{Q>@BjE>do0YVk4>pwYj zIXL6;;0=cJJSP_~9>FPVkt`HM7)#hz574OoO$vsUHp|I3JR;34g=c z{U+EZ+ga3s7}aSRE?+ z!cT1tnhs3}_qPH;%r>~1kn4lXq?(m}l#4lszOn*$Rb%&I5dZw36DMX?9 zmqZ^fsZJa)Up1`}xHMB(OrURp_bBBbqfr_jd;d?CjPIV`KRs}xKB}U1KB51_4lQ{a zKjoPJ5wWm8T>rjVt``?5-EB9iK&%qah#yL3GNP0&K@yt!$gJ)@{B-yFmqTa9!Jvxt z!S085Z}y{C*bmTlUP3R>CE&a@w?c=+1kdaQ+_$`dX@uf+{7kbh@bZw?SZFEx0y)J2 z@F|vVKDYw0gQyI_@pw$@rsjPE9itl6zI6p|KOlcy(*V%?Tol6dwMcPEcqp`VbJ01@ zdpJ@(<%sQ$5ebRfR76*{I!KEer%P)DuR9AqG?KZ$7+7s(vh51Gc=GB-fYP zwm9KF7&;PCmDNln8TsP@d9DQ$b%_Wii-1LK?d}LA(Wj8^yeL?@6lF_E*boSM<%OV- z_^Pf=Q2LnCWc`!~9bdw9i0}tQjvT-F@Cmh8 z9v!HxkD8xYIf%n$Xm|T{56mE;)!75?O=nj+g3aUDKA`_@N`n37Q4ht~$!S0FO(<+Y z%gFAUo*zGOq!vt4H%83}3SUyRAdzncucok!FY^L&YOFG4eVAxzL3Xn;=^I8NQlt!E zK=Hm%>i0js{;2%BLbIp(k;Ls##PgT5f$2z6zCo)kSv{kIUp83@CL9yzB%?sQzrSQm z)2T)sJBzFF(1R(2Bo*=rc31Gd1`h<1A@tBfT3CSKN;MsO$IK9l(QPmN<)@EJlxP|{ ziQq#Xsz1dUSU)ii+uMfkwK76L^{=ZmTQnH<-kVlZV)1$tJXxqYV@F4^!L}PrJ%%%2 zH>WQQ2(Msbz+3kwKD_o>WI})AGbtpn@z+KT8%mW?-eXyQFD_)1f#V zU0_Els>kRK{i@pxA!L(d> zw3(4dqrqVtvjO!3;(+2Q@OavaqzRV;`eKnQ`P&h4>eiI{@Gs=H#^b3;H74jK%ytiJ?HVB{7=c}z)+Ffj>+y=Y zC6hU<;>FeegdK?nWf!7$OClLIV2uC+2o09prCWp5N0l*1XaGe6IlLFpIxHDK{x&}y z0AxTfW@D70+4t1Hg(uV6fL57&1r{Hek*H%ti2E{_NJ1Qa5FNWGxTcmI{qmT~j*het zd>h|oUxep-Bc5_Z`)>q9^cb=g4TOjbU93>U*AGUi)PNsz{()wF^ciL3LjIv0&aswj3#zkT+sliOB^8R$vetED7Ui#NH4{R8P?rF_4~nbb|=oJ=_MX zySE?i-roNmcWMrShOzd1civ_LVsuMn!3)LM-}&(S!D!km%R?g}+R9_B*0ZJ8_;?Y% zO*b-<tQMVA~yim8WL319Qs++k5 zx07SafSV!e1YkLHuo22|N0XM`*GX*7m@8-KLA3)Qy9Oxzl9|$`j{J~=4l;x3RVC2^j0J+CH1SDot+G?HL<_3b`oEKU$+gC1tB}?C!&_ zP6LoUx47Ba7ls%Ex*+2KO!#2Suu~U`TEMipL7)bPPoI1s-i2J=3fjah_q52UP;09S|F9NAZUOzJ520Z>4@biD9e(?b(MZ=llZ4@;5}`)m zqr?=_F83Ccd;@CjMT7EjN0?y^zOg=-VC_JmRT7F;%Vu0|1=3{NLd{{Og^5Aj?s6;ZV@K}aTfF$FMsUaeol ze$O`6l$IOS%bxsb|C1MwTPRVA$=P;g z9|-TZb0l&F;s9tH%QD;3ILMXf5-}6BS6(>E%O=>R+1CJU1W}iV3U0u`aC;3=<$5_s zchT$FlpWtT%lVGpmfjc4$tID#ESzEB%=QuA3*Zb&Dn7*LT3{I;Bb2I#8<;}uAy*bU zzMf;55dO!2cl$e`@y!xAuC9ThqI)Qvi<>4UrA~nx&xyCU?Y&tfu{sZw zv}^&3bw~N69IJw!0O`U^;9B?3%<)4^b*5DUfaG3^ju=suMqBAmfxQqv)*w9fW%~GZ z*hh0%7=?KCkY*B9EQSlhqdp*A32sQIb0EdQ{8~yk)^&Ihb3cdIpOa)H*BFgK7s zY^lYobxc6m`ac^^X9%oZH?SaBXwe{w4S$RApfV&X2N7E&r-lL(U~^z3IcgQ*KZ+z5 z20vTxA=u_4A6o(~ba@#<`GA&4t~YHd$S8Ow!qXf``^QS0tS*Cw+bG zM>fmpmVL|QOFR1b_9wJG9!5k}&mfI^C^ z*q?e05+KM|tKC*IwxSy4lJtW)mOta68CbHEJ{hOkP>OHT1c_8$z#p=_n$G5MD&eg+ z7ngHn2J(BmAo|$Ni`8P5BjXfxrcdnx(0+^k8I5)b43V?p&nKeI!G*QjfDed9UKX%91Fs@{ zYzlq7yl0*8!vC|K(AHcl`()Q%UQy%_o_)4Tg7vJnx{OIL)^8&{Dyk0SoS4>2@Fj5Vx%&az4yPywY5Cb|sK1)jl z8HSgoLRKowGL)O1rkfP|J4*3vSn zYnXN^Y!N-l!5|{BGp_)oyD&6gE|*BYl6|LMd;TstrcfLwFu?<9aK?8MY48~+N;;eB zJjaEw31>ExQQ0qe?K&{tlsYO-7FVriD8;dA1Iv^x6nhmfGXpv*bMjl<;8X06UI2D=KjN}P9N%6ncH^V+6pmjiiF(Qt=>dNoK_>qe>I%R|5?YGx3 zMW?SA?3bhAqB_jj3%9=rq;C)*^fKF3K@_eWe^7^{KWD{8!{j<59f>MC2nEb?pN1n z?KNAWDt~hngN7+(4j;~WQK}4uc2<4g@VQ&1|^0T!+M$Wz#&?y z7I_-L_78j&^g!&52WdeBV3DcSmcoS25A+|fvo!9MFoi4#yB`c$;0##?n47}j{zrq+9ha1 z+2dF6oHo!f$sN`1*orH^<7oYARrorJ+ch8wLm&pyK2(2IppOIfQ6!~m@3|O1ZuR!e zW0i=aR3Arqt56kEx?!@r2%$7rm<>xI^t##f6+H!3e2LiY^%w9L(ki~Ds@?dNJ6`ib z2XPUmef#Zyj6U4m{>SF-hyVC^|I2Xj;|XlxZ|}eTfv8}-ESH}~oP#qk(b=e}PE{J3 zjFH;Lp!Ohh2su}Eh|mO3dUyktafO9q*u{vBmQ*N4x$6z)Z)FoGrH#7efKKqy1Hs*w zh($y_Z?t0l;=u0eCq{uwa_(jEt0656MGKYg$TniiW$tBcLNn1Y%2^oO_xsCdt8J8B zhSr7@!M}cZht}2aZhOaH{rNAy-uJ%xH>=7l3eEUuR#yO3MU@3ZM+#u2ON4l7ybTg2 zoFlgGxy#xL<&tHyXb>xlp7rJjb}7JPQAac0>|E*U`&REkyW7kSp)D zc6b`Rrjt=h5-8G9Wh9jPN(WfCB#Qy@QZuh5np?y*TY2F+nfRycm*B|tJBGR6V7eVx zE$B4KDCHIC@b5mn|H=OI>Ajn0m~-xB3HB_KRkr_5#kP1xNIx$NGKRpif3e^Vt3V&F zoZnsW#(wiq!5cBUs4s8zRFfa-r0;FvVag)ntmY6}R+on=M_)drYR!*l+8{_9|4A;B zxCpO^ag65?_nv1rCPWsXHJQ z{Q8|47mrUZSX^bo4!uJgDC)p)7`I0vSA` zSkbt&A+=qQofEVkl2!T9(6OZ4Gu1cng`}A3$saf0gG4@)mg|3;siLS$y4YM!XW+*X z8XB((>zPBCWXvScWNhOZ^Ra9{vft5c#=`q8cXkWxYoI!QyPM7I3LW2MxForiPl}C< z#-?Lq3u(OIAyMRM3RU4Km=M_GYwC8s#!6>npKOE(ZmAhCrKNy4D%$H5OcR7GgzXm0Trp4-;fYj3 zWW+PoPmq0}o}dR2zxm|t2K8(Vt4h7`)fSnykm{n0jcJn@)sOkw&6L}Igej6Hz$aB0 zpllyK#JFi!*B&RBZm*#tyKmqfC8{Cq1f&aO3tYHY1;v*u+kuR!OyP0w&YDH!oqM5Q zTsOe@+Zr)9w*Qg_v!1|HAH>~^S7LD{$t-WqcXmTOaU1=j! zrkoIKPFN8#lqLn>hCxxo3cWEA>)>Hes=F_{GrkVBFgmb^*g}YZ0CH{*X}nDk=mJ-% z%*tsoneGX}_Yt4qXzj}?X&CCG;ueDI@eOm>0)wPW0^(Jioqn8#&FL|v5$2qi(Q*8( z@e20Y+rFHxzt5CcH>E%`o1Pca4eKG71^dbnwBigOnnHaWO6D;SPSF6Dqh2G#iP9y~ z3G$!XQXq+P(Zb-O3tPL3P$>Fk#-_(&5gqhA54tfmzh3D!+!5d)QTk`3d<)#HJ7gJ^ zdr;8-%+DT@_0wtLd4Q}YvBjhoS~lW@(?-;!r8Uf!f!Y%5axvb=>%SVuhQSMt7R1o_ za=L!p0O}?!8r=+M?wH`4V9w!gZqb4PLGiZmpnvu5EA4w~wT0+V?sIW1yb2|+U3$*= z0R&9EhXrfWgfm5lLAl{3Hye15@Y)jkiZLN2V_MsB@HVRN(g}-14toSeEc%zIf-&yV zwKNW~j8{D@8V3V91WME-q7q8cQm?8K|K>QgxVyGCLwZobux@3$L#T!{D`J#-Pj?`D z1A@78lo+AH(4u@bAgK;8r*8_`er3cP3=e)Z1aV$XHvPeNN$+uT@ezNC-eD)f;)Iz* zP0WnBn03TrV7N0-FSJ1l>l5&s?>1|sWYaL`5S$BTltHS74{QRF5Pf>bQJ^uZKz7d2 zhPDuR*f;5u0HC7_UD7D*L0SV;bwjrsNGa1PI!tZNHP{$T zUbQ~FYJK&)jDTq{hO%^78@anDwB^WVf>vvTPI#VDDiqV9f^RsB2C8zD|KE)RspO`U z#?~X`0gPJw3xpfVzk-_~4a@S6+8#&Lb|Q&Y!Q9LGqf_s$5LQv)!UsjL7O{ z!=hA6_<^m!0^Ks2DX-$36Vs2yjz0w!76pDUbB2%|VZSI2jcdSCtF-B&&Q z0XV;8iuBVRVhl!0IL<~Ur~zS6qK5d=3k33OeT@kzjLc+o6ZD`&GSW!?Y7$AKplc8~ z->$M5Xg#5O*OGvHXxEgaS){9)B7wZFB7_Yxm93iAzJ6@!uId2mt;8UxG~hg&2<93@ zXl~n=;S3{91QEeW#AaSJ*>MHZt@DbOIXk{e4WND?s&c55C(y3~*``uhUqRTaIu<6u zL=fGY0>^?IYgR4Ra&$R$$oM&eX^22YDP*%CaahY$SnQuxSlfo`ArKyUNQMJgYL`3u z?jR-5Z#tSBPE^J(5Dc#qD|HVgm~Ywzq}y;k(H9-o|3E^=r2=3Raa{0yP;#oMY~GgA z0v0A3N+G4v@T-LB9{e^OBE(5p*9FiHpoCG}=jdMmiAYDXCY3JDbWA98itTz3PH)~* zNU2!To6FvC@M-Q(5l;=h(`s|zq2?l`W!P9TGG&gBo&Ap1kKh)|6|5w;r62e{m!~GN z(?h3uXvYn{ZtN~;3Wz8og7nIsLucp6FGMsFMluY>$PY1BK{22nreILSD#OQ1Z)}l* z%6-Yv-RFN6W6J~k^Gn0t@~ckun#Yn|T9hC$s6(IZ49c1KO<|5gmi|Ne@xU0APs_NA zRzl&mP8gYl4o1t)q+4^&~{Vlhzl1?wislZP@N( z2N?o%fTf@f#USSH-&4{h`4T3q7 z(j>pd(jTYqUVr?#&W{8z)w!s_EmY|zK70uOoe#IEev83Y979Bt${>XbumL1!kysq} z8B#=I8dqBr2-JIMtGy1;19Bw$_-c!)R`vD1-~QgDj34^mfsr_xMk19T zXAYstvX<0CdRb|=h)aj$Wnm-3Z%?@!n5u{G1r@AT!CW|hYP=qHupP*4nOsKO8hsu(Gpq^SLf{ai$=hr0Z*|UqNpC)!Z zC}U7@p;vRe76?SMwtflm73OiGN@j@~(bNUDf#gIZdrQe3QLHKk;9||c)*vt8iv3I< zoOloy1*Wdgbi}D=yU0}9<6VMKT?sM{y#HvkDa?`L!m!t3bgIIF8bAO77?1fPW%i?} z#IS@ks-=dASO)Yz-98l0|FjI}XZWv*jmZnvt1pWqFAcidwitG@r5`%LV)r4M z=_A)sO4kZBLIT1|xsY0%1eA8~nBZv8ay6gXujkql(6mWim=vo%ZTW zZHK5!G6qx6HG)$OX{JSE(Uix+pA_0)hA0FZxASEn10G}!K{K@R3-rK()oA$w`*gEi zFXu2K`ClmtqPWH(w4c6+LFAr6IFOuB{jxn1mi#Z9h`_inn}|CyiVmz=ya9IIRu*Sw zRHp^g+M@#;64~I1s?2-Eh>6;Dj7gAGPXMWbNClB}9-|?e;6bz^%;5HX{P<~)Wp0R* zf9y6cHbKT$S71J4bbTvqhh|Ut_4N;bLH<=0IzhT=-UB|412YnTlHJO} zo(kuh2^VZl2&)#L!h4aC$kdKnn)zB7tFt*-T&#%qdNxudtZ(<|`ms*Kn&39f1!tI4 zS)U+e=D4(jgT)S?JhjjqfWRcIX!{qM&TxRi(w1{MMbr!1Sd*Nh_Q>^Of+{YU6a+iX`VQCy=(7 zD`9Gf5qMGn-3{$)*(ODj==LRyTilQWVVY3gZG5>Z_DEMb8X}H0qt?)2@7uxP@yQd& zdgu6OaMC}${bqP_K1IbOis`J1GI_CEIfth7q7zBi-@5AJ8ZW|R)_K#Y(EvI%$1>m+ zpq$+L4)<>-9B2a)Gi6bYeQ!wo<1{pGw%gc_l+9GS!1$H*Xnbf5XuIH#tsr1U)X15e zAUoMOxiE7Y+oT6IB$x0s*Spt*=Hu>hzi5-y)A7%7z)$6$Lpki_`qh4mSgXl;wz}@J ziNP3^qKJ`J@B*qpAyd(1;=-tK5!NAiHSh+#V+LgL^PX6}iDNiZ%4%M!KY;}LQ(2rO zk5O4Fqalpru_mKcN~o^?U5>VP0dkgN)Qup|)}_gN|Bl|rs^kb3>379Q^QrI&Jv9lV z6Ji{-@hV+6>7N|D3qW6bn@dC!_Q0~+?*hmd-vmW@58UL*m*3?4;7uYX^7E^5d2nd~ z`NGe^QuGhJia=j}o5A7R08~+_WEgY{YeB%=B$x%7Emu*ceMqJyh^1ZBHOzL3QHz0X%&Xk3k8=@3glu8r}v5+-qR1qtdR(W zpw5FHTF8*Xg?)S)I#P)d2H~??foQm?Y+O?YxgBD$op5~H_o>g$lY-%U_@S7;Y;Q*v zRc87aAA4#UwsuICqtiv@-pPkVAbmdG%^dp2bm*(xxc%XEc@>tj!-;O9N4OoxWV4|K zNwWHU)!-$2#Y&;Oirj|<^ZR_m7jrmfF$!;xtW(I3)I$_pr}qMT_UJax87T&II5f*5 zBjH@~5J^v_Y6MI^#rjjdK`w~By)E(vMLZ$0rF1|o_qbw$rDXis{G0B89L0_=)w$XL;yfX$^|22zQ!6r z^F}=sM0oh(s%%G*Y>g5gXQ=ivUkhs^sH)68p|H@Ft2lZ@0!Tk1!VA8}zp_eAuCN@4 z<>9r7DAG z<5^`B;epe!q-}{8tI0&^&!{1KrB3PtrRhLp5CD#_nA!cIwa(5EC^1rO7(dQrG;<{) z&Z@25w5I5NwA4^7pZCw9WhxS={Zs0m#e~Bjav<*9PaB^_&j(1RDGz?seB1|(z2pRS z`2;N_Qcdou4AZ5E&Ja+$UQB20ljByQMj`RyX+n$!7@T_mwtayjI%1ie!<%hUP7dYZd6kc3!mwP56@Hhg86^x87drl>k6(>!M(#4^-jDqa-C&YW=4&0&P=vYTgeg(FgwA(M5}&UCUt zp@!1SN#xkG9E&kY%GO@x2S%BblzC1I3W8#Y;N9YP8;D(E$hTsan+?APtHXu+^zrIB_sTa013-TeLI_U#XUfeQcvEf69y z{UF;9ELH|I%8c@V|Mhl!`y=|5n30}EN`Vj;$RJB9RL@RZD3e7w6RtGt@=|3zL7ruq zd0>de<4dZ`&}Kc*t^eT+s0?z|M1zE9L9X582z>qV7Ae6!EiU|mmLcr=CF4ZcRGq8I zop|D>(v+!DfjEa{rPvjroOr3S=@7SgVKK#HgH9%ssl*QoLx6azE z%28HNx%9_LoaJf?hhUwfKn0kVj`WOLx7n19ts$isu0=K+l6258H6&BP|LXP6K1mj` z91O$&bz1`mh@hdW3X;HljjW>hQR^8+Hn!U};mE7+8J)HwFRaGrbUO>$Yv!U9g14@H zZ8a+yl?@Y0Yj7uA`^D%5lwNM-OL8wW%*nF!vn?vSAa`h~NH)~ouqJvFZ%d!|D<{X6 zyErHm>&~hpQnSyD`xtd=IbDl2BE5U&>|0hTLSCzgcOPf7{J7(D;gHoh=EXX zw*Dy)Lc@%dn=B$XEeg>~Y*$Ud_3gXYAKpmSjBD^_m$ejtoOI!|1f^@dp&9#PP})Ep zYjj6|RXsZnI){Odqz#7{Pz$C5CtBI>Y(8gud1%5wbY?BtMj_uu4uU%A7_6mBip<0e(H8QQk!&a*u2c>xfTo5_wNeDFlRn>s8kUhm zc`4Iv-y4ian#xn{ywldv>tF9b-QA9UeRm(^wiwbvMNaP^MY?$0Ja16|>rYZ_Fvws& zRu)LiA*TX!FM*QXL`_}o+^hqIcBfGMR8E(Dhupc%3PNZ?gq1nEfmRA$<$b!)&{?Oz z;;s_{muBVw=?nM{5wq+1Mf6xIL7MBz#MuEpAu?703u;nD85n6CHWcUM&%IcHHYZ~iB zMoD%uH`rzcOS+CZvR%xej2C`w;hsDn%MFm(Pllg*Qmzcs#+GM0BsZ7wOOPW0>M!gs zOtNU(9vKM$vyj9*x@-DVmi|&^#AJN@+ar9~>-+n=w}1YGiun6f?*kC1f{9k)6}6GX z4{d`*LT~mK3C)FPG_)^0m>G;!tR5(y6G<%Ev;@-28xqo>LE#}6wDxOlk?qF#09oVP zR4}3q5<4i_z!Wu)rI#mD{Vnm%Pz@E93WH`)Z?kAO5SNcvJ z2@_(Ycf1L)NPeg^yi;jP40u8I5l^1}M_J9M5hZiQht;J-RZt-7;G*RDzadlcYIHiz%bWC3T%OT7 zfBUrf_FNvo3hkh4q`jUWpFl(w;Q>sD*qIz_RE15?lpNPNN54+z8yV}U*pG4rB7t%E zxc936f%8nUZqSnOOggj|lSa3Gs5%bph0vFZ17wj|C?xt^3XPqrJQ#dx01FU|Gz_0% z9!kv~_zg6P*K_m`;i6Y&C<-Hq;$&}PN{?|#tOeG+@O0xsm(L;xkWzwrTx~}%>RnzY zbb%PA0Y901L*CSCmbvaOdm~ZBOwT=bies>E!#Yjpim_nyc&oIIG^*F5rUsKd6x?MF z{B^vkVVaIUbEN)V#>-A@$>-#AC>2Nw3#DS~@HjuS)#>*pbXA1Ee7|l&TXkx*=%-P# zC+$>2p~Vz^p(}`LrilI|yae0z{z<1t3_KU23GsO4^-?uR9=V#G9@KH$KxZMOj9ZoM z({~SYQXtO~8re{Q?`%qP04DXX=)bf1_4VED#og^|d+*$=CjqQG574!28c|vHh-IB{ zTk|4sN5MS3V^UlkT(#Ol`naM_M~iWfnUc*xp(}X&0)jfqF^Ckkm1;m756QYJI-^wQ zn$Tz{h(RH=c2k0Kf*!)7OK!KEZBl-6AzLPpzY$EhP?VVeX2jm=W5T09`tS=^zgG>T z8w>I~5T0(rVCe12sRQCCfiOoK_I*`_?jlkCqfT`dHbSn zH_QbHfNrCwCOyQ9>80z*`iuqlp}kul(D)n5k)=IQ20$dVBUPMu>pgBbXiH(YhO zOx`%4YKpDJOH*%@TMncm>;yW19AEC3!C_Vd@jMJh{X!cR5rFa!f@>yrZ#XU4Es%lH zJ?nY9lYy@&zkx0~C}-}W<4Rkf)vx6w1F1$i=!oOX&_~U3hKOsef1ucn*4Y24HawOk^cAxwVAr)^ON~ zr&?=f@AJ%X&=@V+KNm9I`o*s2S`W?_uJm+s-P_?;56%64jS})SleGk}8j#d#G*p^; zrX58|Uiq!ftU>wFsUQW`35Zw_MaE?nS17l1|N8zG1(zs;;ETkynXq)cUaUCT{zZ6O zf=CkM)#y5E18Z(IN8in`1vjfik>G)#c71}*2`Dh$v_#W#BPz|=BVj#vc=?+XSSJ3KQ2Os%7z?^4o(zy zsY8)dJMbjyQYS%cD8n1d>;e{8vYv|AM7iK zvzVYzC4-6rZ9#uTX9^`DlXiykF{;#%iIOTf;6C>kfi8@2RFGJIS&YreIP6)~kGJ;hhK8rgicL9aF9=aV>c zNLpyYBovgTXz*Vm|K3N`-Wrx2z zdZPu)qU&Vw#N-y^#7|mCcHY`6b4WhW@E~HCdT9=1*o!?ZH;{wo7q2F$Ub5U`?N~HA zCYuOQ_&sG6BW}4yA|arHYq^pkKH?o{jK_u{QPgO=&b%nK{{=d1k^Q#u{sK-_yXP3= z0X5`q$&E5b84aoBVIQm@@n#f#54rdy{8m82XISC9kwX6r1~A+T$KP9wNlv?d0V3UK z7tT{H5(>n5r87<$l^2q9Kue^G_}wDl*8?^YR2jZ23+mK>PNdH1&5}vUg%(F5B`aH4 z49(od)2G)RkXms;BHv<&o(hd?-QL)-X9p9Loi9Bpy$sd3Tiwx`0hVJujOwG#F|!1h zkgTcJU(c?t(_yA$$d;iiL;IwnN0>kwn5_Fua=-%z-SS2QLOkO-7&C{2l5{Lr?<_kC zC~DdsE`fXLI+Lj?Zv$*{?XSI+GwW`8*5u2%NPfxHiB8n+9qA!QA0Z6dE7@^;l*7i{5*#om$B*K{{b#9y{MN?Dlh6xv3vezDR zCeui6Ye|)zaF4}9;8)aL;-9*s8++*s-cSETzY$T0eacD3f%k0C*ZZPbx?fV0kkRK_ zrBUaBJr5hcT?_|Pw$|YZLMs&oi+BE`rO7(v7g&SsFR+iv_p%x=u~M0@+D49Rp#5Nuxl80mOR3W_2-Rv=VgY*~JZn zPT>)ZE4B8()halI%Ve%g0P`fVi#8Pb@yb?*jBi=%aYEA-4ru2uf>EV&^!Z;Tt|9K+ zayj;>XIMW~;7ALcc}=?*A8D!B5JCD-y)%?yxL!&3&QH&FN0L7yhIF+JeC3KEziN8^ z6dhyb+cK9CJV=_N`(>$^^{7`nY-wY)yJqO8^y!I>I-44@9-@1rEd-SoDI|fHidMnW zlusS1L1l&lPeb_@oGm#|nMU6G?mNVRG7S%DmeDIw$@9nGoV@I>&>eC9EdLb&DP)cv z=>i1;d53j--^vOonbwWc!dsb0P%z%h+J?pCL|zA#mYYo2Z4Vi3b7WS@=b#nG0Ko_oEMVI! zFIhakoWnw&il-ePzxnX#&+l#@^}l`c^vT)NVSjjfel{5PA3s4AwUcv1N3U+*zu7$B zU%!6;=H2Zb1sm@eC_@$19n~eGz#}`7x&~G->=84MTlL7@+&_A;OVN}r(U%Zmz$NUZ zxrU3bXx~G#(#iVBm7=nHx9t-+z3EGBkV&Z~)LJo>1{M;}Tncu$UIhNr@o0!X$_JTb zC%n57x0eBjO8JF>1Q54UOua`F$jc$$f>d%^F58}L1^QVsUKq^LOn&{nZ>kPezSP># zx?>54&CSsXETFzFw76ADOToojFhdEHYQj3QDAL&p$|Aw~I_TIJ+#f`P#Du|Q1;1Xu zTtf3+?;r}OkSBEFqCOaWgLsNdr4(omk%vQ53W)-|v$+bHBM7KPV5Tn6ax}91T>YsJ zV$?U=oTNA$l0cnqt7**>WSU8y(hAi9U3Bvt415i2jc<@cte&Vh3pzZ6#cB#Et#R#i zNu#FV99pbHQ{*(mgFz2KdEnw1i5piVdP;K>O;`%KFf9-^Pb`!v1&D<5deKTS=$DmK z*}cgfwkXo-UY=vM10rR{7Hm7oHByq0`(xzcW{LP0IGW*%F+>Ww(E?~QaZd;`h&<#$ zhzsQ30^7(^SXAa5@gHL}?nAvF3$Ra?0Uh}`@K~K}GtfS@DSl~nYeV%T_QaXarb`;6 zKYiR!KfQaWJ~5qB{^0QWzC3*i?6q?!*xO z9#q#3%)oE)E_Ltfh%=6V(fSj1Ms%;H6l@}>;zod2%PR`8eaDWFs7y_WE5~N6F4UrY z@>|+m_XIKfqJB3`+{MYIR3pq%;XZm0tX7#Pjq_U17nLL%R&1x_qKMO=1d|}zLDK-S z&aMg;PBI^{T(uBzRpPOhnktZP$~VaD;<3<`&n=nAV>@L@o3HPw6PREbK~wmFNxVYK zA^-yqaNnv~dC*a1Qw0_g?+cJ_tTDVBqe$GgMPn3?6x4*WQ%j-?G^lsHun`H*ydeg0 zX$*f5!=DK(TZT1H6hbFj5m1GQWsw!c|2XM*x8kTnw4)!d#JZqtS*1HPrI3kHBf32I zTpKt0dwgGkfjPI*Fp}2^10}~FLyjpV`JPw9I_XnJhlH1PmF?PXzJ8Rf6Pi#NTLY?h zdfup}_XKOPK`_#Ggff!h@&p&Q&+UMSghDjkBOubcwCXHagygyFq?Z>r&k(|fevs5y zPfjQx@8(({FI_zF5D`i~S`4TMS7pd7FSHDjB>`noIANw$3$qs_{i7(?vf+y|c0wwh z25ynSKo4&W&dMlK>$DRFPvyFwmeGx_T_cH8Rl1weQ!TI#ip8VbYbVcVX{8}fH^JDY zuqaIDGoV*Pe*H`>RQ;w=3spir(4S)c_q!Pscf`>Zab2tDs4C55O)LBzNwD>K;O0C$ zk@yvHA}tEufE=aDj*O-N`SaRG%3&b3^M62?KnW!3F4O**3|@h>-nl)P10D6{t(=ay`Td{59LSHCF~ zn}0`auC+X%8)jQGNari2@UGHP*LdL*KCjcl3p?v&CaDU?gP9g_I&crZr2HYtgQqxp z(zc|K&oz|sell^cT!OU~kUOC%QPOh4vXj0X@xy^kDgbEvvGpe1JZ{9UKE{eFcsFuc zQt59>%s9o^hJa2e;Lq+ytuG3 z3`C6xH-s6UmXLtzOg5ivz`X!tZIBXRt9!uHS?zQ;z8!Mc>R;J#fxx`I7@LLS|Q0 z*-_9-#A&|!>BHvs-R%$esHB8$F^^&UBFb@_qTUFTO1!| zjI3I~_-yTtUXA8delYB*x{fO9N}l`XyA_S54cMcjKYq{VqDuM|7c8!Icq1VcId~Ms zDMK)+kE}F6+T1vJ!@adr4n}Fyn^66PcC`5%UYg2ZQ4EQyOJFdnn`uv~Uyof|+$dm( zK&G8|Sk8UP7Op&WKLR??v z({{sP7Yv&Sg$}il4^$v&16?A?6}^PZ7WaBHc`=_|f-QUN%pwFM3C|^wsNh;EE*zHhM36` zKJ+L5ba^+ug?{x=eYg1XAq1i@NKn_{cfg`XLlFO@L0f51rC2)*Z@7fTp;1De=LU)I zC;`-(p?#5jWG`9zw66BJz%QoTOIohr2_3C= zXyGGw`@y~>g(8CBJVo`$y&$_m_p zP^a_P;aFq|Vzho-ix3#VH`9i$^V?p-CJ3|D;v-vb+P~?ZU>0I=c!d5MlF?&zGr>K> z=rluIpc&?T0$25+v^oKWf(?6|cy%R&|`{w{j7?bGakfdZIvDM>ZE6F_o zMQE%e2G?;sTRvpd>VzAGL68}ny$LBvkEH70dY-#p&gII*V?y)-Q*Ush@=KKzSV>=& zCdgmKr>bJp3YHp_y50DlsjwHKNqBV2U{6fxBhNr?T}UX}Q#LXXEi7zJISf0JUm^}0 zE+>$^1tRP5*{D3wdptZ^pfx-iduC5k3;-qEnPlI-yJ2x0JUHHs{O12sR!Rfkd?%mn zALO;Q`IGVQd;jlmKfir<3u;D+57tTiqhF%wKd51bULX?c6#~;iv?YGHMDg%5q5MOW zm&|t4KV?dMgVc%>m2kZYD5$V7q?$q;La%EVm?Q$}48cR14;#IC!Z9Ua1#S3r_wjyy z`~IiQ&&EMbu@ble=_iz96 zwd88pp$^Z2=^p3^JganzUdH_<2(u&h9AUavfg8s<+F;?&y?4Nh>S4{K*anA2d5Y4? z*Tv?of<;oj-F%DsVyfL_%M3)L2VnE+W^}z?-YjA6hp;aXKx0gT$YQSQmjwo8FDRpdj;!e z(xcDN`)9v@4$t(5yS*2HGZat(Z6V|NK?$0u-GEj$(5h@moKrPlKXiy4sIxMqSfm(csHCvtZ(}g1GtVwCg9m%W5UP8XJ|?6j zl^&;o4!0=Ki`Rd-{q*bT^}Ba}Mwc6-wb(uc$kdRKXQ<{zc{^I`vvrD!YDlrELZ2~S zkOE&*vqyUQz65mYMsITpY&duMg4;{Lxi;6zY-L*^^$kh;O~49s3fCaY(;LxLNR4!L z_q+6+i1Z^gw=kDKLv2R-deUY!z*8+(ljDA5CwhlY_e-~VPkVN zlc5|6HJs7!A`>jew^(gorSGOCjvSpF{)U-V)0ON4prK)naW8*4?3!&8b4aPn0`M9yQO@y%k`XeVR+S2#f2J7Yerr@_6;RNMgRWuq7- zqU`pg-Fl7Uzgp{*w9wYl&M48@F!T*9@AOZq*yJ-g60xfwZ4l)6S&+mWjt#|M7)0(U z;?JBV_zQN=(VL2OE0qNSV77-8N+IF0GQdF0QgC|ia~(1qcua&6p$262$c-_y)TM*+6(O zSy_f2Ov*nfF$J|0>p5e;^f>*8AT__Rav6iNR?blD!jOfQH7nVvw_{|EZ!1<5P5dmLB+@xaGfc zM|1^qor|!246P!c`&cmv1BYmd^cl? zDj65^6X7hafQuF|v>gG|CXmU`Oz9?x)bO35a!^k#xA8Y{9bdh|hcCh5&4v59dNT0W z@f28Ko{={la4!Z^cXJ1uJZnua&U7cdWM_kDR+AzX%Y`4bqhxBZsEV5sO(gf4TnbI$ zD!Hk*dyW$&>M~-9l%}A(WWnj5s8HcHr2dXhDjslHSr|2{(iTV(0Ivb@Nh}GCgh7RX z&d#Ce)}qKQ76IQ})gGt?)QdNfvNH|8STCeWkxTGqEDp#2*nuzs*>ZHUJNl?0+H*Bs zcnwI_*o=TiJ;W;dum<(lUvd_wlPF!?_Hp*DRoVQN9Aj&iRMGsTsQ||HrG_ySKmo z{PhpNyir;w{_Q>b!yoLhfCT!l7NebhY#rS@Z@~`HjoIV3A73Lr8b_CmQ0hg^kipq@sR zHS0;WWME{vgeSz{Q5740{upi&ZATMOns*MrZ_OFzuJb(mumX>glV|28FkD z{=^TFoa7!aXOGy#+r?s}VD$a-<$Q}4XM0qHMtGouOuh^JK<13ZJ;|flRRt3zT=?JG?gB}MZe|n4Sm>j;J0u50b|i)q zDk&L%fP~u+sqrQ+m{ebgnZ1k-U0^o}@lFtI!_8~)NZ$Td_K}KFhU#e$JzTuP?84Am z+(3-L>|(qa&H@Eu8DLmghX|yL81nN#zLE9LcOTyW)C;21d;9)Aw1X|kR80e1J0L*s zXi6HrkBDNJ+>Bmj?xfd5{pLM1IJ~v*pV#7r24j_QQ*j+O+}<^kpX#9RwcDSTYs6>W zTp^b1>1DDw!L@Uw6kKRO@)}a7M!sUN9<(+e$;NXH8;>kyECf{9cnEP6Aga09Rb-~9js4*WM^_V@)TQboEt#>z;0vl2FWTaE1sAC_QxR!OHK-#Ns1dgjeJ=A|96Mfm+}yICza zGX~qZZ|o3Q_|NmZxn8vl@$R@2sJTjm=6NYr2{29PSECgjOs7^^>Krc?rvvnjLNys9 zK5()|avISKC4V4vk49DnwuCS`Ie^Zw2&arRmru%_92g8e~?{*`~Cad z+c)slM!+qb$VM|B*e35E(IBpH5R$*Jy}1XmF=PxBTh+8>`MD&jcR<4>wZ7VwKB*C6 zJN316&80)E`VBPc^-U6z-;Qp%3`pl33~V$UMFbF=_Uc+I%y*H6!E*B4#Bh!e{%m7V z`$cwoLq_4^0R^wJPnjI_1U8NE;9`aS?M(g(r39- z(eAD{|nWsGMJ@bsCuXQjJvM~ z*iES(q4NVvW^xQ17}>O_+|oQ^=ftEMtz`d`xQ&hv9Ih~6qW*}g(^7DQaDG7EXh2-l z;3=o+J#j<3)G}sSMVhioOsKGktg_h{B^w+yG9Un|XcGh65h!FJvTt6n@_wb3TeB$8 zl8Xj{ke$F%%=_@)CS7cSMF8wwQ2`OLwK8$eM$agBd8!#}JmgWGdCo;2lbbXTwhqyD;^0k$KZgG~${579a*8`9QoT zpW1->j*|JX5G3vnZ4a+5=f?xY2n*VT9!bYTPXEmfY!j#$PppcoggJ=e*)F3Co?2;i zdS;>$31#lur$c;|(KA_~+A&$(6HK1Feu3@Xu9qlkvE3vLMrTO~nYg!Fv4CbG4fgn# z*Z=41U*5i_0`Gu5EjN91p#NRZN3fv?9o+Z6!|~=1)K$c09P_u%vxG)U1otcHrS zV=@>btZ70(1E^AN!AdV5zfo7No< zPco$o3i%YyTsS^Rk5_Xxl_(T32Ak>+_UNGijlnuAkctX|hRemc zNHEb9B~HUAWpTy9T)}hQu|<`FPbZyn=Ox#dXUjQ96RK0yL22N(57E#h!|plyIh?W! z6zji4{RXNn`O;2%5h<3;3~qT8HK^daA@9O3X3Q2U8kSc=mnIe|HwGW6f8Zb_*jT+XILl}(lcVxOz9QADdvzzB?^;;`akHmPa0d9?6y zO_~iF!~H)L^wb8HWV29F2Ou_D!UnMfV$}wQp&dMz+lMXO{|wd}7{8+Mma(m?f}*BW z1`@c_e*95_zFWyr%eBn!L-nch_k7W40%og)EjaKX^QENM`*#Ybc(@5PYXr}PZ^8(9EKMVP*y~{UQEDi zK~Fp@W%1$7?VjbhV7>8-6bXAAN-S`JVuj^825aQFzaxeQhGeY`Zh|~f0!-@V@@DSV z1rl-p6lk>70YuSYQi&{S9A@1D)wG&-160cZXj_6#=)j(ok^|gBc z_HR9?Eu^zW)dFeCg*bom+bL;@@Gqong>+|`-NZE7^b664KjM_Si)%rB8$kbh)`Nl8 zriw6D9Vsfp9LNz+zfAs$9|lTogbt-*jyCg)XOTJ8gUL1iwvtcDv!^`V`Py_F98Iyjes*aq3U+GZI6(CZP#!^wERyP?J6(|e?YH6QXT0^e@meBFEf z?(I+SZ{HllCM!z_bf=YcTmzfn}z3bQ2Crjs-+i6TAiF@d5=y zNGa2mmYUK%_~djue?G5>K?TqfYkg=QK$H*yTrg$@U3k+}WqN3p!8*qB&NdCD=Xh`z zX~nq9B7Ky;Y8fR=5OI*+FvJ<--d@kXupUr-P$X(fY`s~62`e7XlHe4AXBtXu3#@oO zo!Vlc`7McGSmh0#*9SBaOw#Kz`(ty>45H0*JY~)j@<1XkEKA{uYe3@ccXh_-9gbUITNlGgM5G#$SuZQ9lzggUFdJb@IBXTTrC+fYK4*}i zA$kSH*l8-onqT7JqC);IL@qQ(dt+V z-TOCh-~WX2R#=(#pwOGxWHo;$ES+%kM+iU2ZBC;Yfsj3_cvRm7+mPkW^Tgj&9#Gd0 zgwxQnxY_Wcn@25Q!_>iM%o^75wN9afD_arRS6~>vN?XJILmr#VH5@Ds93N1DwcPTK zmbCy1ERlCKYqUqOt0USTuX@0s(E-&fTSb@IXz2ML7S73qbau_NfpRHpL>*fhJv)0X z=*fPFQ?Dr|HQ?(R1B5RznIMSDfJH4^PL3v23*hz+;&c(sI+R7Nv4Rgy_0$Js5U%CB)&+ zA>3Rcsa^4kPQYob71FF3u|QEm>#V}kCJTYhtgceVpB0^8sj~w_r-pcE3yVBO&8Rul z4Yal}n||He;=mjlcQ+-Kl`yrR(jals42gDR;t8my`NolvSs+z~gIs_n=;*f z0gU^V&}sU$%c-itpBahi3_MX^7_ykks~pwkd&PAX^m+aL-aAA0AE%xytLHmwD8daw ze-=v7UHEhkRUHi5V}!bAXn7JE%;Zc9!V)?3q%1@dgZhH*LFb4F@(@r zepS-?FK6Rf(sZp)7R3M+yxPE^P$F*y(AP>)M$p`9U8QZ6O^Lm>D+=UN%!k5?6h_o- zx_J2rC2pC!NTtMFqf-PE*rL)kIz?JA_S00fUPJfmRLe+X8Kz>b>G6Vw?0RhkNyN^2 zw!vyP5M~_;4+0JEm>_vagdBmSL~)ucS!!S^I&QIH=upSg?7n%r=6^<-I3tP2`aw3=wQvY)*rV3>v`Tlk2{w+kqbQgUR=`q_hHGUhEk4{rzr& z!o&@9t(bd_*a`#AY(F?u%2u-{(dMC-ZrdRBCZO68d_QFci>vKr@OoFWEQ>P%g;9Gj zSp-`=pKWHW^~*kmK=g7WTCAfJ9z6hf9;0~FvB|ZHPK-aj@P9dtMAi$7JUlCk_dhfX zIDqHFWMNp9fPS;09rr=ayOJy=R6B@G-sAFZHD z$g7DrL0?OL)J3f-h{piaTyfy`(4bRhm#cg#mJz;$E|BiWy^N|n+0;-BIS#|cI5^qw z^&8oYV27DquD!IhA_GvEAzsGQybr6@z32_V!;54330e6XOvmoqonFGhBKsM&VbvyvBGhP z45nAgi>~mV`m)%12F5R-oYq?wH#C@TNNQd9W$|`+si2=yJt+v5WxDHh7b6}q$Cr&N z^&y)}3zpm|s$q#cm_;2fr{$ve*AMSd0OQ?lDcP zWZy!r|DED(ZQb$mJh(!G_FsCJQnFkYbV~KC z{9A}E;>QN`?dFLWjnb#43@2Sl-ev zyZ`0ayW5}8x3Uh&vv~)8^H9;bSYE3{B6l5EJ6A2C7^lj=SpsZxh66M3TjNWI$WsRt zzY*ayCRCvc*R=&Zf~Czu_n72N%yW90edSi*-`|={(Pmg61}1Zf z95GY94~;3vK;~v7t(d~g@afs2%BYX<_A)@ENEFylt`NP^&JzF=gm~1IE>KqHkSU8t z$g|9zzj^ca!(f3@M)x1?kP0@A$ z-|WvIDE29O5j9E>oI(4=i)EC7&}janyv&Vq4}a+Wqbm5oUr;Q?O%xXg#ZM6?gKr0e z$0tvQ=a0|v&)}rb;*%%m)8XJZe;zSy^F5@y^)o56{x_i56ewCmTz`#Te!~{b(5VQ^ z>38B(JwfXtj$NBO5tx@p-P{S=VGavVNZuNf-C~6RQZ=AlOvba_!b3q2Z*c!884VFf z;RZFyklxbV&RTKQO#CPto@b!}ajs^i^Kfd~>G~(1f(BMx+TXZJSOQtir^loZIygJ? zcC#FvX*8Ul=)&T%9<`t*Nau?daF!5Tqb9TerEyqs&?gy-;xVP|q&2RUI&sDR=ST$7 zsQvzLKm7dq4$K@S+6*;3Q=i!Jm|@Mx{&l2rU8bCHq{5PUIeCeoBYLEJT_Ar3sS6+Q zr1XiALy7)Sy{)rGeZYQWX`}c#ND_$hXuOflBQA^}ndjJQpvX^l46WVLCn+cu7fgBJ z`^4O5#%ud9+1A6LVeLUsMx0m)zwoay$Yrxztr)D&UJMubp9Q*z02RiR4g*I8)v=OQ z7+8av_m}HrXb0!vr5@U_eb9azr=zM}sk#iZ`Uhe5xR3&%N0QQq*jcM}B}7x9UvPn} zXTUK$9FjowubXJSoj|A)9iS)&-2sZe>m8tTxAk^_7}Wk>|AigyfDIpb+Svn-LsYU` zgUbkv(dbloCuBE!GLZ2!NhX%Ud-<2$uWJadt{Oljsm5iRA${U90)2$4NqGnAU_*uJ zp10Va8m^~HVLP{ho_eKLWBL$(#6CM6?3`jdZhHs@@!WhMzH5}itzp2+aK;RdRR%764i`YD|WFHjyryQ`=7V_`<^H+iQ~n3zO*-Gk->;_ zT+C+BXD)6w$jnFW=`Ar;VSnnRvJ+uoj5ugO?j5LoR^)gdYZUtt&xgDnwSQ=OC1%j$ zs_rM@7wOZKt`#@`u7}ks7Dk_jtaDZecn)9g&33lgT)2m^IjpUNNffe(X+4KLAe|F* z?!>id6vd%)+3kyxFa0Oe&h$&FBUUS53s+Z|s zi3I6yhz0zq{Q?ww5$@RT8K{tm3JPFlHq|(xGTvGKvqk|@zXZ~IKDc_A;d+1C9oRBL zviG`Evl~>Lf*7bH1rx}B_1s($^Gxv5IfS7X$FP2 zn%_Rerhz(!Jn^_QV9Vv0EG(z|@@8o)3Ubpw2pWY3G>9`VV?io_UWSW?sgPO_Xi>j= z1=3_A$eHXjL2-7oL;2)_^yfi4DY!d2M@~o^!FQHrnka7)mlluXua5A6kbEPlw|bbX39U7HNeKXj!xH8|rgW~2VJGRibSLQFSe z5+QgS{tLs!D*M3DODndR`-4t6FgX=MHibwn!v;F`qN^LQjq7Q&2mpW31%T~7QA!~q z`zL%zQ_X|b5Wj-2iJF;!jnJE?ou(;8X)54r`w|*I4iW$1;_!J<0mhR(ao($0dQDJi z9S2sTUe1}g_6q62@h8$Vz?2&Upw7*osH~AIRQ0dBCeN41h41{zjxLdnb&yWdgIONs8Owe`$N+p4_9U;E|SQcL`X`&#S>kI zdZ-qAKMJYxx4AT!TkSbm)eJN80u=!=-g^-W{-G0V$%@NGD=M3qUI4YJE$r%78de8b zKhv(}3e~>8CYy@6?68c?*XXtrrg(QZAtfaQs^MtJP?M6�gD6dj+rYgfQUcW$Rl_ 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 z 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%0A8>o@Q^rupG#9_;UjY5#Uv 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 literal 0 HcmV?d00001 diff --git a/Software/.metadata/.plugins/org.eclipse.cdt.core/reflow_oven.language.settings.xml b/Software/.metadata/.plugins/org.eclipse.cdt.core/reflow_oven.language.settings.xml new file mode 100644 index 0000000..8643d0b --- /dev/null +++ b/Software/.metadata/.plugins/org.eclipse.cdt.core/reflow_oven.language.settings.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Software/.metadata/.plugins/org.eclipse.cdt.make.core/specs.c b/Software/.metadata/.plugins/org.eclipse.cdt.make.core/specs.c new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/Software/.metadata/.plugins/org.eclipse.cdt.make.core/specs.c @@ -0,0 +1 @@ + diff --git a/Software/.metadata/.plugins/org.eclipse.cdt.make.core/specs.cpp b/Software/.metadata/.plugins/org.eclipse.cdt.make.core/specs.cpp new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/Software/.metadata/.plugins/org.eclipse.cdt.make.core/specs.cpp @@ -0,0 +1 @@ + diff --git a/Software/.metadata/.plugins/org.eclipse.cdt.managedbuilder.core/spec.c b/Software/.metadata/.plugins/org.eclipse.cdt.managedbuilder.core/spec.c new file mode 100644 index 0000000..e69de29 diff --git a/Software/.metadata/.plugins/org.eclipse.cdt.managedbuilder.core/spec.cpp b/Software/.metadata/.plugins/org.eclipse.cdt.managedbuilder.core/spec.cpp new file mode 100644 index 0000000..e69de29 diff --git a/Software/.metadata/.plugins/org.eclipse.cdt.ui/global-build.log b/Software/.metadata/.plugins/org.eclipse.cdt.ui/global-build.log new file mode 100644 index 0000000..4c26054 --- /dev/null +++ b/Software/.metadata/.plugins/org.eclipse.cdt.ui/global-build.log @@ -0,0 +1,14 @@ +16:46:44 **** Incremental Build of configuration Debug for project reflow_oven **** +make -j12 all +arm-none-eabi-gcc "../Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.c" -mcpu=cortex-m0 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F031x6 -c -I../Core/Inc -I../Drivers/STM32F0xx_HAL_Driver/Inc -I../Drivers/STM32F0xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32F0xx/Include -I../Drivers/CMSIS/Include -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.d" -MT"Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.o" --specs=nano.specs -mfloat-abi=soft -mthumb -o "Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.o" +arm-none-eabi-gcc -o "reflow_oven.elf" @"objects.list" -mcpu=cortex-m0 -T"/home/key/git/dummy_reflow/Software/reflow_oven/STM32F031K6TX_FLASH.ld" --specs=nosys.specs -Wl,-Map="reflow_oven.map" -Wl,--gc-sections -static --specs=nano.specs -mfloat-abi=soft -mthumb -Wl,--start-group -lc -lm -Wl,--end-group +Finished building target: reflow_oven.elf + +arm-none-eabi-size reflow_oven.elf +arm-none-eabi-objdump -h -S reflow_oven.elf > "reflow_oven.list" + text data bss dec hex filename + 7452 20 1708 9180 23dc reflow_oven.elf +Finished building: default.size.stdout + +Finished building: reflow_oven.list + diff --git a/Software/.metadata/.plugins/org.eclipse.cdt.ui/reflow_oven.build.log b/Software/.metadata/.plugins/org.eclipse.cdt.ui/reflow_oven.build.log new file mode 100644 index 0000000..5127769 --- /dev/null +++ b/Software/.metadata/.plugins/org.eclipse.cdt.ui/reflow_oven.build.log @@ -0,0 +1,17 @@ +16:46:44 **** Incremental Build of configuration Debug for project reflow_oven **** +make -j12 all +arm-none-eabi-gcc "../Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.c" -mcpu=cortex-m0 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F031x6 -c -I../Core/Inc -I../Drivers/STM32F0xx_HAL_Driver/Inc -I../Drivers/STM32F0xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32F0xx/Include -I../Drivers/CMSIS/Include -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.d" -MT"Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.o" --specs=nano.specs -mfloat-abi=soft -mthumb -o "Core/reflow_oven_src/ked/ked_third_parties/stm/peripherals/uart.o" +arm-none-eabi-gcc -o "reflow_oven.elf" @"objects.list" -mcpu=cortex-m0 -T"/home/key/git/dummy_reflow/Software/reflow_oven/STM32F031K6TX_FLASH.ld" --specs=nosys.specs -Wl,-Map="reflow_oven.map" -Wl,--gc-sections -static --specs=nano.specs -mfloat-abi=soft -mthumb -Wl,--start-group -lc -lm -Wl,--end-group +Finished building target: reflow_oven.elf + +arm-none-eabi-size reflow_oven.elf +arm-none-eabi-objdump -h -S reflow_oven.elf > "reflow_oven.list" + text data bss dec hex filename + 7452 20 1708 9180 23dc reflow_oven.elf +Finished building: default.size.stdout + +Finished building: reflow_oven.list + + +16:46:44 Build Finished. 0 errors, 0 warnings. (took 688ms) + diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.history/13/80ac86ef1e7b001e1ce1cc78c47163e2 b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/13/80ac86ef1e7b001e1ce1cc78c47163e2 new file mode 100644 index 0000000..a85ec45 --- /dev/null +++ b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/13/80ac86ef1e7b001e1ce1cc78c47163e2 @@ -0,0 +1,181 @@ +/* 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 "usart.h" +#include "gpio.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 ---------------------------------------------------------*/ + +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +void SystemClock_Config(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_USART1_UART_Init(); + /* USER CODE BEGIN 2 */ + + /* USER CODE END 2 */ + + /* Infinite loop */ + /* USER CODE BEGIN WHILE */ + while (1) + { + /* USER CODE END WHILE */ + + /* 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}; + RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; + + /** 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_NONE; + 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_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK) + { + Error_Handler(); + } + PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1; + PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK1; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) + { + Error_Handler(); + } +} + +/* 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/Software/.metadata/.plugins/org.eclipse.core.resources/.history/14/1008be4d257b001e1ce1cc78c47163e2 b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/14/1008be4d257b001e1ce1cc78c47163e2 new file mode 100644 index 0000000..6a4eaba --- /dev/null +++ b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/14/1008be4d257b001e1ce1cc78c47163e2 @@ -0,0 +1,24 @@ +/* + * reflow_main.c + * + * Created on: Nov 4, 2023 + * Author: key + */ + +#include "reflow_main.h" +#include "../ked/ked.h" + +void reflow_main() +{ + uart_send_char() +} + + + +void uart_send_char(unint8_t channel, unit8_t to_send) +{ + if(channel == 1) + { + HAL_UART_Transmit(, pData, Size, Timeout), pData, Size, Timeout), pData, Size, Timeout) + } +} diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.history/1b/106d8d6b1e7b001e1ce1cc78c47163e2 b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/1b/106d8d6b1e7b001e1ce1cc78c47163e2 new file mode 100644 index 0000000..dee9d49 --- /dev/null +++ b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/1b/106d8d6b1e7b001e1ce1cc78c47163e2 @@ -0,0 +1,2 @@ +DC22A860405A8BF2F2C095E5B6529F12=682F6ABED0D7165E43A92F4DF340F4DC +eclipse.preferences.version=1 diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.history/1d/c009551e257b001e1ce1cc78c47163e2 b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/1d/c009551e257b001e1ce1cc78c47163e2 new file mode 100644 index 0000000..3564d90 --- /dev/null +++ b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/1d/c009551e257b001e1ce1cc78c47163e2 @@ -0,0 +1,12 @@ +#include "ked.h" +#include "peripherals/uart.h" + +#define STM 1 + +void ked_main(uint8_t platform) +{ + if(platform == STM) + { + init_stm(); + } +} diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.history/30/d064e4831f7b001e1ce1cc78c47163e2 b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/30/d064e4831f7b001e1ce1cc78c47163e2 new file mode 100644 index 0000000..1e8bda8 --- /dev/null +++ b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/30/d064e4831f7b001e1ce1cc78c47163e2 @@ -0,0 +1,181 @@ +/* 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 "usart.h" +#include "gpio.h" + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ +#include "ked.h" +/* 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 ---------------------------------------------------------*/ + +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +void SystemClock_Config(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_USART1_UART_Init(); + /* USER CODE BEGIN 2 */ + + /* USER CODE END 2 */ + + /* Infinite loop */ + /* USER CODE BEGIN WHILE */ + while (1) + { + /* USER CODE END WHILE */ + + /* 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}; + RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; + + /** 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_NONE; + 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_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK) + { + Error_Handler(); + } + PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1; + PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK1; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) + { + Error_Handler(); + } +} + +/* 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/Software/.metadata/.plugins/org.eclipse.core.resources/.history/38/109c44ea277b001e1ce1cc78c47163e2 b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/38/109c44ea277b001e1ce1cc78c47163e2 new file mode 100644 index 0000000..25062ef --- /dev/null +++ b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/38/109c44ea277b001e1ce1cc78c47163e2 @@ -0,0 +1,13 @@ +/* + * ked_config.h + * + * Created on: Nov 4, 2023 + * Author: key + */ + +#ifndef REFLOW_OVEN_SRC_KED_CONFIG_H_ +#define REFLOW_OVEN_SRC_KED_CONFIG_H_ + + + +#endif /* REFLOW_OVEN_SRC_KED_CONFIG_H_ */ diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.history/38/60e8c1d5277b001e1ce1cc78c47163e2 b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/38/60e8c1d5277b001e1ce1cc78c47163e2 new file mode 100644 index 0000000..e69de29 diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.history/3a/00acb3a0257b001e1ce1cc78c47163e2 b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/3a/00acb3a0257b001e1ce1cc78c47163e2 new file mode 100644 index 0000000..e69de29 diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.history/45/30628988277b001e1ce1cc78c47163e2 b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/45/30628988277b001e1ce1cc78c47163e2 new file mode 100644 index 0000000..c9dd8c0 --- /dev/null +++ b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/45/30628988277b001e1ce1cc78c47163e2 @@ -0,0 +1,77 @@ +/* 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 "stm32f0xx_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 VCP_TX_Pin GPIO_PIN_2 +#define VCP_TX_GPIO_Port GPIOA +#define SWDIO_Pin GPIO_PIN_13 +#define SWDIO_GPIO_Port GPIOA +#define SWCLK_Pin GPIO_PIN_14 +#define SWCLK_GPIO_Port GPIOA +#define VCP_RX_Pin GPIO_PIN_15 +#define VCP_RX_GPIO_Port GPIOA + +/* USER CODE BEGIN Private defines */ +#define KED_STM 1 +/* USER CODE END Private defines */ + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.history/5/6047c06e277b001e1ce1cc78c47163e2 b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/5/6047c06e277b001e1ce1cc78c47163e2 new file mode 100644 index 0000000..f31e198 --- /dev/null +++ b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/5/6047c06e277b001e1ce1cc78c47163e2 @@ -0,0 +1,77 @@ +/* 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 "stm32f0xx_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 VCP_TX_Pin GPIO_PIN_2 +#define VCP_TX_GPIO_Port GPIOA +#define SWDIO_Pin GPIO_PIN_13 +#define SWDIO_GPIO_Port GPIOA +#define SWCLK_Pin GPIO_PIN_14 +#define SWCLK_GPIO_Port GPIOA +#define VCP_RX_Pin GPIO_PIN_15 +#define VCP_RX_GPIO_Port GPIOA + +/* USER CODE BEGIN Private defines */ + +/* USER CODE END Private defines */ + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.history/55/7019ff461f7b001e1ce1cc78c47163e2 b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/55/7019ff461f7b001e1ce1cc78c47163e2 new file mode 100644 index 0000000..e69de29 diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.history/5c/501a5a4d1e7b001e1ce1cc78c47163e2 b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/5c/501a5a4d1e7b001e1ce1cc78c47163e2 new file mode 100644 index 0000000..e69de29 diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.history/5f/9023afc4267b001e1ce1cc78c47163e2 b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/5f/9023afc4267b001e1ce1cc78c47163e2 new file mode 100644 index 0000000..c41ad55 --- /dev/null +++ b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/5f/9023afc4267b001e1ce1cc78c47163e2 @@ -0,0 +1,9 @@ +#ifdef STM + #include "../../../peripherals/uart.h" +#endif + +void usartSendChar(void* obj, uint8_t ch) +{ + +} + diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.history/6/b0ceb956287b001e1ce1cc78c47163e2 b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/6/b0ceb956287b001e1ce1cc78c47163e2 new file mode 100644 index 0000000..a92fae8 --- /dev/null +++ b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/6/b0ceb956287b001e1ce1cc78c47163e2 @@ -0,0 +1,16 @@ +/* + * reflow_main.c + * + * Created on: Nov 4, 2023 + * Author: key + */ + +#include "reflow_main.h" +#include "/ked/ked.h" +#include "../Inc/usart.h" +#include "../ked/peripherals/uart.h" + +void reflow_main() +{ + usartSendChar(&huart1, 'e'); +} diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.history/76/8012e6831f7b001e1ce1cc78c47163e2 b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/76/8012e6831f7b001e1ce1cc78c47163e2 new file mode 100644 index 0000000..076b70d --- /dev/null +++ b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/76/8012e6831f7b001e1ce1cc78c47163e2 @@ -0,0 +1,8 @@ +/* + * reflow_main.c + * + * Created on: Nov 4, 2023 + * Author: key + */ + + diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.history/8e/70685a4d1e7b001e1ce1cc78c47163e2 b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/8e/70685a4d1e7b001e1ce1cc78c47163e2 new file mode 100644 index 0000000..e69de29 diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.history/94/d073495c287b001e1ce1cc78c47163e2 b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/94/d073495c287b001e1ce1cc78c47163e2 new file mode 100644 index 0000000..4c72f1a --- /dev/null +++ b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/94/d073495c287b001e1ce1cc78c47163e2 @@ -0,0 +1,16 @@ +/* + * reflow_main.c + * + * Created on: Nov 4, 2023 + * Author: key + */ + +#include "reflow_main.h" +#include "ked/ked.h" +#include "../Inc/usart.h" +#include "../ked/peripherals/uart.h" + +void reflow_main() +{ + usartSendChar(&huart1, 'e'); +} diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.history/9a/20f787a3247b001e1ce1cc78c47163e2 b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/9a/20f787a3247b001e1ce1cc78c47163e2 new file mode 100644 index 0000000..e69de29 diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.history/9b/d0a489a3247b001e1ce1cc78c47163e2 b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/9b/d0a489a3247b001e1ce1cc78c47163e2 new file mode 100644 index 0000000..08a99c7 --- /dev/null +++ b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/9b/d0a489a3247b001e1ce1cc78c47163e2 @@ -0,0 +1,14 @@ +/* + * reflow_main.c + * + * Created on: Nov 4, 2023 + * Author: key + */ + +#include "reflow_main.h" +#include "../ked/ked.h" + +void reflow_main() +{ + +} diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.history/9e/602861c71f7b001e1ce1cc78c47163e2 b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/9e/602861c71f7b001e1ce1cc78c47163e2 new file mode 100644 index 0000000..325d295 --- /dev/null +++ b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/9e/602861c71f7b001e1ce1cc78c47163e2 @@ -0,0 +1,13 @@ +/* + * reflow_main.c + * + * Created on: Nov 4, 2023 + * Author: key + */ + +#include "reflow_main.h" + +void reflow_main() +{ + +} diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.history/a4/901080bb267b001e1ce1cc78c47163e2 b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/a4/901080bb267b001e1ce1cc78c47163e2 new file mode 100644 index 0000000..6216253 --- /dev/null +++ b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/a4/901080bb267b001e1ce1cc78c47163e2 @@ -0,0 +1,4 @@ +#include "../ked.h" + + +void usartSendChar(void* obj, uint8_t ch); diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.history/ab/20ca8688277b001e1ce1cc78c47163e2 b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/ab/20ca8688277b001e1ce1cc78c47163e2 new file mode 100644 index 0000000..4c8c5af --- /dev/null +++ b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/ab/20ca8688277b001e1ce1cc78c47163e2 @@ -0,0 +1,13 @@ +/* + * reflow_main.h + * + * Created on: Nov 4, 2023 + * Author: key + */ + +#ifndef REFLOW_OVEN_SRC_REFLOW_MAIN_H_ +#define REFLOW_OVEN_SRC_REFLOW_MAIN_H_ + + + +#endif /* REFLOW_OVEN_SRC_REFLOW_MAIN_H_ */ diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.history/ad/b06f002d1f7b001e1ce1cc78c47163e2 b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/ad/b06f002d1f7b001e1ce1cc78c47163e2 new file mode 100644 index 0000000..e69de29 diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.history/b7/202c3932287b001e1ce1cc78c47163e2 b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/b7/202c3932287b001e1ce1cc78c47163e2 new file mode 100644 index 0000000..06f8f06 --- /dev/null +++ b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/b7/202c3932287b001e1ce1cc78c47163e2 @@ -0,0 +1,9 @@ +#ifdef KED_STM + #include "../../../peripherals/uart.h" + + +void usartSendChar(void* obj, uint8_t ch) +{ + +} +#endif diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.history/be/90cd559e1f7b001e1ce1cc78c47163e2 b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/be/90cd559e1f7b001e1ce1cc78c47163e2 new file mode 100644 index 0000000..74edd52 --- /dev/null +++ b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/be/90cd559e1f7b001e1ce1cc78c47163e2 @@ -0,0 +1,181 @@ +/* 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 "usart.h" +#include "gpio.h" + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ +#include "reflow_oven_src/reflow_main.h" +/* 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 ---------------------------------------------------------*/ + +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +void SystemClock_Config(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_USART1_UART_Init(); + /* USER CODE BEGIN 2 */ + + /* USER CODE END 2 */ + + /* Infinite loop */ + /* USER CODE BEGIN WHILE */ + while (1) + { + /* USER CODE END WHILE */ + + /* 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}; + RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; + + /** 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_NONE; + 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_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK) + { + Error_Handler(); + } + PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1; + PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK1; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) + { + Error_Handler(); + } +} + +/* 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/Software/.metadata/.plugins/org.eclipse.core.resources/.history/c9/10d87ebb267b001e1ce1cc78c47163e2 b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/c9/10d87ebb267b001e1ce1cc78c47163e2 new file mode 100644 index 0000000..7a52507 --- /dev/null +++ b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/c9/10d87ebb267b001e1ce1cc78c47163e2 @@ -0,0 +1,7 @@ +#include "../../../peripherals/uart.h" + + +void usartSendChar(void* obj, uint8_t ch) +{ + +} diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.history/ca/d0f9438e257b001e1ce1cc78c47163e2 b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/ca/d0f9438e257b001e1ce1cc78c47163e2 new file mode 100644 index 0000000..e69de29 diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.history/ce/50bf2c57297b001e1ce1cc78c47163e2 b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/ce/50bf2c57297b001e1ce1cc78c47163e2 new file mode 100644 index 0000000..767c614 --- /dev/null +++ b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/ce/50bf2c57297b001e1ce1cc78c47163e2 @@ -0,0 +1,11 @@ +#include "../../../ked.h" + +#ifdef KED_STM + #include "../../../peripherals/uart.h" + + +void usartSendChar(void* obj, uint8_t ch) +{ + +} +#endif diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.history/d3/20b19c56257b001e1ce1cc78c47163e2 b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/d3/20b19c56257b001e1ce1cc78c47163e2 new file mode 100644 index 0000000..b3d9cb9 --- /dev/null +++ b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/d3/20b19c56257b001e1ce1cc78c47163e2 @@ -0,0 +1,16 @@ +/* + * reflow_main.c + * + * Created on: Nov 4, 2023 + * Author: key + */ + +#include "reflow_main.h" +#include "../ked/ked.h" +#include "../Inc/usart.h" +#include "../ked/peripherals/uart.h" + +void reflow_main() +{ + usartSendChar(&huart1, uint8_t ch); +} diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.history/d6/4091b9e1277b001e1ce1cc78c47163e2 b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/d6/4091b9e1277b001e1ce1cc78c47163e2 new file mode 100644 index 0000000..ff17a85 --- /dev/null +++ b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/d6/4091b9e1277b001e1ce1cc78c47163e2 @@ -0,0 +1,9 @@ +#ifdef STM + #include "../../../peripherals/uart.h" + + +void usartSendChar(void* obj, uint8_t ch) +{ + +} +#endif diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.history/d7/1072e7831f7b001e1ce1cc78c47163e2 b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/d7/1072e7831f7b001e1ce1cc78c47163e2 new file mode 100644 index 0000000..0145aa6 --- /dev/null +++ b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/d7/1072e7831f7b001e1ce1cc78c47163e2 @@ -0,0 +1,6 @@ +#include "ked.h" + +void ked_main() +{ + +} diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.history/df/c0b23a32287b001e1ce1cc78c47163e2 b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/df/c0b23a32287b001e1ce1cc78c47163e2 new file mode 100644 index 0000000..5584f28 --- /dev/null +++ b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/df/c0b23a32287b001e1ce1cc78c47163e2 @@ -0,0 +1,16 @@ +/* + * reflow_main.c + * + * Created on: Nov 4, 2023 + * Author: key + */ + +#include "reflow_main.h" +#include "../ked/ked.h" +#include "../Inc/usart.h" +#include "../ked/peripherals/uart.h" + +void reflow_main() +{ + usartSendChar(&huart1, 'e'); +} diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.history/e0/90cc3732287b001e1ce1cc78c47163e2 b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/e0/90cc3732287b001e1ce1cc78c47163e2 new file mode 100644 index 0000000..9a6118b --- /dev/null +++ b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/e0/90cc3732287b001e1ce1cc78c47163e2 @@ -0,0 +1 @@ +#include diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.history/ec/d0ab1148287b001e1ce1cc78c47163e2 b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/ec/d0ab1148287b001e1ce1cc78c47163e2 new file mode 100644 index 0000000..5584f28 --- /dev/null +++ b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/ec/d0ab1148287b001e1ce1cc78c47163e2 @@ -0,0 +1,16 @@ +/* + * reflow_main.c + * + * Created on: Nov 4, 2023 + * Author: key + */ + +#include "reflow_main.h" +#include "../ked/ked.h" +#include "../Inc/usart.h" +#include "../ked/peripherals/uart.h" + +void reflow_main() +{ + usartSendChar(&huart1, 'e'); +} diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.history/f1/60fe54681e7b001e1ce1cc78c47163e2 b/Software/.metadata/.plugins/org.eclipse.core.resources/.history/f1/60fe54681e7b001e1ce1cc78c47163e2 new file mode 100644 index 0000000..e69de29 diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/af/history.index b/Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/af/history.index new file mode 100644 index 0000000000000000000000000000000000000000..f3347b10d12894a434d96ea27f8813c225ef9659 GIT binary patch literal 70 zcmZQ#U|?WmP}SEfPAw_P%u6rUFD}V7HcBo{O3h43)hj5<&q_@$0n({y#SDxBxxLwP Y)eLen56@H_DNKIk)Uk6`HzNZB0Ps2&v;Y7A literal 0 HcmV?d00001 diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/bf/4a/77/history.index b/Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/bf/4a/77/history.index new file mode 100644 index 0000000000000000000000000000000000000000..3f796fec3c7b9ec43e5dbcc92a3927835f534f77 GIT binary patch literal 85 zcmZQ#U|?WmkkNO}FG|(VPEFA-NG-}N$Ve?p%qi9{O)M(W%V1!dAkeT|t(rkj=HZ!& dBZbM2`o2Gz)y>GjpzytYu?mv7*Q!lmaR9wMAN2qL literal 0 HcmV?d00001 diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/bf/4a/9/2c/77/history.index b/Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/bf/4a/9/2c/77/history.index new file mode 100644 index 0000000000000000000000000000000000000000..d64b4246addec01c686852503ced2e70caa1c12b GIT binary patch literal 155 zcmZQ#U|?WmFw%FzpwqLlc8#G;bS)MEYOl3e|Q)S}FSjMSpUoMQb_ zptxQ#1B=7Noe$Nk8RTRho~bxenEc57&8J!2j0_ADl-D0oLlWoT01+3sQMVge{LRl- TVD%S%I`^p}sjqsn2`ml(!#h9M literal 0 HcmV?d00001 diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/bf/4a/history.index b/Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/bf/4a/history.index new file mode 100644 index 0000000000000000000000000000000000000000..f5121d6da6f103331c5f77c10c54519642ee228d GIT binary patch literal 187 zcmZQ#U|?Wk;MaG~FG|(VPE7$}y$qnxn#~JTs~O~E9-gTGjpzytYu?mv7*Q!lmaRBd}CV>C| literal 0 HcmV?d00001 diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/bf/6d/4a/77/properties.index b/Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/bf/6d/4a/77/properties.index new file mode 100644 index 0000000000000000000000000000000000000000..9021d1ef896556760010c52eb78625724843ccf8 GIT binary patch literal 162 zcmYk!O%8%E6a?Uh2k;K=&Fj(w5ch@)5K=~HZ2FpM!Ek$jaN%+$GhZVjjhtO;gd^_J zp1rL|eW7;`j4p#A&)^V?TLxC0r8&sOI4OJ#xj>hoAyqI9QHd#(%1t{ITj+5eLp654 YT8?|Z(cW;~zpwqLlc8#G;bS)MEYO zl3e|Q)S}FSjMSpUoMQb_ptxQ#1FM3LrIAK8gPhF6GZjY)lOF|H{F>Fx$iUz*apyyI vBysmQpTOc1l-D0oLlWoT01+3sQMVge{LRl-VD%S%I`^p}sjqsn2`ml(>84LX literal 0 HcmV?d00001 diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/bf/6d/4a/9/2c/77/properties.index b/Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/bf/6d/4a/9/2c/77/properties.index new file mode 100644 index 0000000000000000000000000000000000000000..7947670434a5f7db4adeefd379adc6efd0745073 GIT binary patch literal 184 zcmYj}F%H5&3z#sU4ucRlUNBO`hx-*Hz5ua=al;4vO3W_auv^xy|G;j&6C>g605c(E%wHu0}XB^5mpbUr=da lb6v0_lUWm8GrMT_!*JaDO=T7P0;hjb%D&0yd%<>}egHG&LOuWh literal 0 HcmV?d00001 diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/bf/6d/4a/history.index b/Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/bf/6d/4a/history.index new file mode 100644 index 0000000000000000000000000000000000000000..6ae13e48298f15050932465f8fb3b6f64e291e16 GIT binary patch literal 243 zcmZQ#U|?Wkkk@z4FG|%fN=?hjFOSbJOU;WfE=tzVPE7$}y<`TK1Dv69s?`i~G7ryG z94SnGv?2NMtZqgI27#jI&GJa%PKtZL;tBskGUSlNkFH$<77vh$^2H`j$O#z?%oEO- b8)+aJxxeT&*hq#on-?HE4Q5qA26n3e@*iHs literal 0 HcmV?d00001 diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/bf/6d/4a/properties.index b/Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/bf/6d/4a/properties.index new file mode 100644 index 0000000000000000000000000000000000000000..77106b0cda2a9eb7a8e6ddab9d7f65356ebd0418 GIT binary patch literal 240 zcmbV`K@P$&5Cb=T0AE0SU~}XF6?fDRR46eeBFa{qZBc&@r5v~+aqz*GJ+dRBhW5S{ zg;!j&JbIZ?`l`X-5m#{_*U(XPV1%5;3Z4?DV$gEQtQb-?UARM)NdrzXnP~TkX}9^a d$_TZE4&R^+a}zW3^fDNj6i&5us8=({$viw$ zailQ$QOlKsv$`1>7z!l+yU8Po*FeP?l&~9{othG#oS&DLnGP~lV2;ZxWK$o#{0TNS z;l;tL$l|x4;>0*MnStvGbD zN~w!-w{oLov${{dww&+`W(5b)faD_gnQ&m_R7g`BQ7LdPI$}dv26c4wTtu7q88&l1 qsq~~}gzY!T`7*)i^@8wd3dJcNMZ7$%WmIibu%(B QB)A{QLl##n-U${5060S#od5s; literal 0 HcmV?d00001 diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/bf/be/properties.index b/Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/bf/be/properties.index new file mode 100644 index 0000000000000000000000000000000000000000..ec4aaa1443c4c8ec255560e8d3e737bc5cff2380 GIT binary patch literal 301 zcmbu(!3x4K41nQO@1idt_yVcu!3P*Sc$2-rC|$M{wsxc`Y;Uh~!aVCSA^G?f0Bqr? zv%sY9-s&j*^-`b5v20CO+Td$!L2cj`xIwa=8zNzH=)4en(;-viqVR+T#gN!iUO5R| ueAcjA<_Cv?SSC1qL$;C`qxTDD%PAbzoD>bqT%cZ|@C&wIvEDfUkM#sh-(yz* literal 0 HcmV?d00001 diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/bf/c4/history.index b/Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/bf/c4/history.index new file mode 100644 index 0000000000000000000000000000000000000000..b5e984aa84acb4195c515f7c508e7ac55af247ff GIT binary patch literal 97 zcmZQ#U|?Wm5YTtdFG|%9E=tzVP0Y;GOJ-o6a5i+Fd^Lld%)>JkM+%c4%}G8ytDBL5 d;X=xjW@K@X>HERr4Qtxo%OR=nE8Ynf2LOMlCHnvX literal 0 HcmV?d00001 diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/bf/c4/properties.index b/Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/bf/c4/properties.index new file mode 100644 index 0000000000000000000000000000000000000000..4549b38f2a7aa9b2a995a903fe9465dddda4ff06 GIT binary patch literal 211 zcmbV`K@P$&3=u{TJ( zBga+~oHK=vE{2IE&$?9MrmV#UCCv<(v^rKEq*_Ck>!@xRJ~bWoe1k0lU+Me{%A;>E Wd0)8Sr*!-pJd&18AiUJ*57rZQi$+oa literal 0 HcmV?d00001 diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/bf/history.index b/Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/bf/history.index new file mode 100644 index 0000000000000000000000000000000000000000..9da5ab78faf79426b5643a47431d79156f784c47 GIT binary patch literal 83 zcmZQ#U|?Wk;MRA}FG|(VPEFBEW?&4Eit?4KW{{J4c&6e=Ve+G+YuC)`W&|okQkKEM JSdf8T836Al8+HHy literal 0 HcmV?d00001 diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/d5/13/76/61/15/78/properties.index b/Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/d5/13/76/61/15/78/properties.index new file mode 100644 index 0000000000000000000000000000000000000000..055e5c15496b5504623419f3efec885a4839dc8e GIT binary patch literal 174 zcmYj}O%8%E5QPU1;2pfc6ltRFK@%1vhI#>0Mw|pFnHExR?+-3a-sZi0?@It6fs-nP zXA-aS%9KVGG_xgTZtqk&yQDFya?k!;7KC!8302qeS3 pL!p*^kOgbD0jOrQ*V^F6aFx0)QBna!2}! zNeZhU7v{bo4l|?iLHMKb1#3TE`2YX_ literal 0 HcmV?d00001 diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/d5/2/c4/properties.index b/Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/d5/2/c4/properties.index new file mode 100644 index 0000000000000000000000000000000000000000..35d482ae049bc661d705260102f22df2caa04bb1 GIT binary patch literal 167 zcmYj}OAdlS5JY=CfOqf$JqQce#!pyiV!%ByLyMgtLwXtmw^tk&F6&j*GXP*g0IZKbpI9B=gR7Gk_aW?2POYd{>xV7lOEMViML2@nkfpB2tPD#2?E7WjMnXsVX g2XS<$S-liL49l1=;(HREVD&F@wazm7UT_zuZ>v!`dH?_b literal 0 HcmV?d00001 diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/properties.index b/Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.indexes/properties.index new file mode 100644 index 0000000000000000000000000000000000000000..49ce5e1cbb6f4158a2f79dddfdd2fd9dd118cf0f GIT binary patch literal 344 zcmcJLyKX`;42BJ2=)_VMmi7&-a{=1SMIBjqfGWo^k;O@Za-n^Ea>|0bSF*SNw?BO| z0GQQX%wZLxMW#_MiIGf33X$PiQ?t@*xsK~QDg&b!Mn?s$FX*(_ zmd#LPH1)_-ME+qkJQRz4ubNghyY2KA;OSz5J7~x768SWS@2_xWkL^yWws}+Cd%x*$ v%G~3t#5s$%|G+bc^f@*l`OJ3lJ=hCo#0bO{-s|&(kHqBaLsSw literal 0 HcmV?d00001 diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.location b/Software/.metadata/.plugins/org.eclipse.core.resources/.projects/reflow_oven/.location new file mode 100644 index 0000000000000000000000000000000000000000..bae36221a76263bc58e4fcdce00617ce8765f820 GIT binary patch literal 105 zcmZ?R*xjhShe1S2b=vdAllRFnScV39>g%Uv=A>HbXXNLm>Sw1`>ZfOx=%QWVmzrA z6S$dp@TvzrdNDB?!^wX|J(*Mz4j%N)w7SEJtbp}LoP=cC?e4tqd*An&NAI(l+Xr8v z?RySCc>C!7>jMZO1GS_%DY@)MflUz)zDdBJS_bN1e9R=aOD6>}ZN`boiC_V@i7-8u zo1S#3P5qo_GlzO(D2bW{nIfF}Hw}100yVqLwtULGWMr473K7B@BT3YCiL-HH`#7aV zk-}w5V2@!^-vX2R9#{|`-aPa0`P^~X!a#j`^yyQa!u}$iA2{FLbviRWT{zQsu2B0n zeb%$n!mo69mE?`Gc4$W!9aI!To5KQ(|h+GUI9 zeT(~`_ZmVifgn8RP~R%L1oGG<@8>*6-ra#h(c6ZGhVT_KMukr}rk+ElQS&6HEKJ=d zmwMzvP$?1)Pa8c-^o!Z2O7zLKhz=m!MXD2PQQdZNIn`}cQ@vZN&X-x>I=Dz=C9%(N zCX-oSJ9=E#{$y_G(?@0B%O7WNy}a?JH)7|Nepb1R+CN#dg7ns3Z+{u;dIRlS(zBDC zfeS0jwpv#jXiNQ$Ic0Gwohl`3R{jhtw66N3HF5%LB|TcPCP)^yx3}X#i~0ZoTw)vt zUWs~Cl!=4KSy7m<&|*W&$f1khkL;IMu+~ZJBpMp*)iBuMet?H1R(WbJs_HifkUsL zC_gJTxdfz`5h#J8m>H-Dgh7Cvfq@^%aJ|g@WS|}an4Yb{5M>N(KpNy25a0ll0BR@} AT>t<8 literal 0 HcmV?d00001 diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index b/Software/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index new file mode 100644 index 0000000000000000000000000000000000000000..79c168abc074267d242f416d381a1df47c46316f GIT binary patch literal 61 zcmV~$(FuSs3NOe literal 0 HcmV?d00001 diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.root/.markers.snap b/Software/.metadata/.plugins/org.eclipse.core.resources/.root/.markers.snap new file mode 100644 index 0000000000000000000000000000000000000000..7e9499e44818563ab80f6a70ad1cdabf02b8e651 GIT binary patch literal 160 bcmZ?R*xjhShe1S2b=vdAllRFv3^G0d8tFrA literal 0 HcmV?d00001 diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources b/Software/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources new file mode 100644 index 0000000000000000000000000000000000000000..2feba60049f45435a95c2481450e91b57574cd4e GIT binary patch literal 479 zcmZ?R*xjhShe1S2b=vdAllRFf=Oz}Hq!uZZBqrsgaw!KVmMHk;mnj&SC>WYr85vm_ znkhKDhA0>r7#VXV=cFbUxuoWlB*y0#rR$|8=VTTXr|K1@=H{2A>LuqFrP`Jhm8RlS zmy()Pnyy!xiC0l_N(r$hAuK!)@%uB_Q-Pm*s&|(kb0E=^MwUaslln!eX*v1j@%d$` RdHQ-KMX9N_hFs`A2LLGpu)P2P literal 0 HcmV?d00001 diff --git a/Software/.metadata/.plugins/org.eclipse.core.resources/0.snap b/Software/.metadata/.plugins/org.eclipse.core.resources/0.snap new file mode 100644 index 0000000000000000000000000000000000000000..3df259b8b5c62df8e73ab193339b2069558c7ebe GIT binary patch literal 27121 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 literal 0 HcmV?d00001 diff --git a/Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/com.st.stm32cube.ide.mcu.ide.oss.prefs b/Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/com.st.stm32cube.ide.mcu.ide.oss.prefs new file mode 100644 index 0000000..3a4957f --- /dev/null +++ b/Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/com.st.stm32cube.ide.mcu.ide.oss.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +project_presentation/setHierarchicalMode=false diff --git a/Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.core.prj-reflow_oven.prefs b/Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.core.prj-reflow_oven.prefs new file mode 100644 index 0000000..04a9943 --- /dev/null +++ b/Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.core.prj-reflow_oven.prefs @@ -0,0 +1,16 @@ +eclipse.preferences.version=1 +indexer/indexAllFiles=true +indexer/indexAllHeaderVersions=false +indexer/indexImportLocation=.settings/cdt-index.zip +indexer/indexOnOpen=false +indexer/indexUnusedHeadersWithAlternateLang=false +indexer/indexUnusedHeadersWithDefaultLang=true +indexer/indexerId=org.eclipse.cdt.core.fastIndexer +indexer/preferenceScope=1 +indexer/skipFilesLargerThanMB=8 +indexer/skipImplicitReferences=false +indexer/skipIncludedFilesLargerThanMB=16 +indexer/skipMacroReferences=false +indexer/skipReferences=false +indexer/skipTypeReferences=false +indexer/useHeuristicIncludeResolution=true diff --git a/Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.debug.core.prefs b/Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.debug.core.prefs new file mode 100644 index 0000000..2762d40 --- /dev/null +++ b/Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.debug.core.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +org.eclipse.cdt.debug.core.cDebug.default_source_containers=\n\n \n \n \n \n \n\n diff --git a/Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.managedbuilder.core.prefs b/Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.managedbuilder.core.prefs new file mode 100644 index 0000000..5e20136 --- /dev/null +++ b/Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.managedbuilder.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +properties/reflow_oven.null.206629017/com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.339019065=com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.linker.1138147292\=rebuildState\\\=false\\n\ncom.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.srec.1943993616\=rebuildState\\\=false\\n\ncom.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.727426636\=rebuildState\\\=false\\n\ncom.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.329159223\=rebuildState\\\=false\\n\ncom.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.339019065\=rebuildState\\\=false\\nrcState\\\=0\\n\ncom.st.stm32cube.ide.mcu.gnu.managedbuild.tool.archiver.678949815\=rebuildState\\\=false\\n\ncom.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.symbolsrec.1169951813\=rebuildState\\\=false\\n\ncom.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.verilog.1050947991\=rebuildState\\\=false\\n\ncom.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.exe.debug.1732153102\=rebuildState\\\=false\\n\ncom.st.stm32cube.ide.mcu.gnu.managedbuild.tool.size.191725162\=rebuildState\\\=false\\n\ncom.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.823780940\=rebuildState\\\=false\\n\ncom.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objdump.listfile.1852677802\=rebuildState\\\=false\\n\ncom.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.1869012406\=rebuildState\\\=false\\n\ncom.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.binary.726206372\=rebuildState\\\=false\\n\ncom.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.hex.2087010310\=rebuildState\\\=false\\n\n +properties/reflow_oven.null.206629017/com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.1758260841=com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.exe.release.1121054918\=rebuildState\\\=true\\n\ncom.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.srec.1368687324\=rebuildState\\\=true\\n\ncom.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objdump.listfile.435079136\=rebuildState\\\=true\\n\ncom.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.142155675\=rebuildState\\\=true\\n\ncom.st.stm32cube.ide.mcu.gnu.managedbuild.tool.archiver.1244426878\=rebuildState\\\=true\\n\ncom.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.linker.1757712682\=rebuildState\\\=true\\n\ncom.st.stm32cube.ide.mcu.gnu.managedbuild.tool.size.951760897\=rebuildState\\\=true\\n\ncom.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.661824423\=rebuildState\\\=true\\n\ncom.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.symbolsrec.1138611384\=rebuildState\\\=true\\n\ncom.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.334020789\=rebuildState\\\=true\\n\ncom.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.hex.535792084\=rebuildState\\\=true\\n\ncom.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.binary.1438426593\=rebuildState\\\=true\\n\ncom.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.492158830\=rebuildState\\\=true\\n\ncom.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.verilog.769627402\=rebuildState\\\=true\\n\n diff --git a/Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.ui.prefs b/Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.ui.prefs new file mode 100644 index 0000000..168f895 --- /dev/null +++ b/Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.ui.prefs @@ -0,0 +1,5 @@ +eclipse.preferences.version=1 +scalability.detect=false +spelling_locale_initialized=true +useAnnotationsPrefPage=true +useQuickDiffPrefPage=true diff --git a/Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs b/Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..dffc6b5 --- /dev/null +++ b/Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +version=1 diff --git a/Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.core.prefs b/Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.core.prefs new file mode 100644 index 0000000..dd78b8d --- /dev/null +++ b/Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.core.prefs @@ -0,0 +1,5 @@ +//org.eclipse.debug.core.PREFERRED_DELEGATES/org.eclipse.cdt.launch.applicationLaunchType=org.eclipse.cdt.dsf.gdb.launch.localCLaunch,debug,;org.eclipse.cdt.cdi.launch.localCLaunch,run,; +//org.eclipse.debug.core.PREFERRED_DELEGATES/org.eclipse.cdt.launch.attachLaunchType=org.eclipse.cdt.dsf.gdb.launch.attachCLaunch,debug,; +//org.eclipse.debug.core.PREFERRED_DELEGATES/org.eclipse.cdt.launch.postmortemLaunchType=org.eclipse.cdt.dsf.gdb.launch.coreCLaunch,debug,; +//org.eclipse.debug.core.PREFERRED_DELEGATES/org.eclipse.cdt.launch.remoteApplicationLaunchType=org.eclipse.rse.remotecdt.dsf.debug,debug,; +eclipse.preferences.version=1 diff --git a/Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.ui.prefs b/Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.ui.prefs new file mode 100644 index 0000000..f205b55 --- /dev/null +++ b/Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.ui.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +org.eclipse.debug.ui.PREF_LAUNCH_PERSPECTIVES=\n\n +preferredTargets=org.eclipse.cdt.debug.ui.toggleCBreakpointTarget,org.eclipse.cdt.debug.ui.toggleCDynamicPrintfTarget\:org.eclipse.cdt.debug.ui.toggleCBreakpointTarget| diff --git a/Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.browser.prefs b/Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.browser.prefs new file mode 100644 index 0000000..27a08ad --- /dev/null +++ b/Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.browser.prefs @@ -0,0 +1,2 @@ +browsers=\n\n\n\n +eclipse.preferences.version=1 diff --git a/Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.navigator.prefs b/Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.navigator.prefs new file mode 100644 index 0000000..69a2299 --- /dev/null +++ b/Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.navigator.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +org.eclipse.ui.navigator.ProjectExplorer.filterActivation=\:org.eclipse.ui.navigator.resources.filters.startsWithDot\:org.eclipse.cdt.ui.navigator.filters.AnonymousStructFilter\:org.eclipse.ui.navigator.resources.nested.HideTopLevelProjectIfNested\:org.eclipse.ui.navigator.resources.nested.HideFolderWhenProjectIsShownAsNested\:org.eclipse.cdt.ui.navigator.filters.ForwardDeclarationFilter\: diff --git a/Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.prefs b/Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.prefs new file mode 100644 index 0000000..08076f2 --- /dev/null +++ b/Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +showIntro=false diff --git a/Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.workbench.prefs b/Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.workbench.prefs new file mode 100644 index 0000000..ad205ff --- /dev/null +++ b/Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.workbench.prefs @@ -0,0 +1,8 @@ +eclipse.preferences.version=1 +org.eclipse.ui.workbench.ACTIVE_NOFOCUS_TAB_BG_END=255,255,255 +org.eclipse.ui.workbench.ACTIVE_NOFOCUS_TAB_BG_START=255,255,255 +org.eclipse.ui.workbench.ACTIVE_NOFOCUS_TAB_TEXT_COLOR=16,16,16 +org.eclipse.ui.workbench.ACTIVE_TAB_BG_END=255,255,255 +org.eclipse.ui.workbench.ACTIVE_TAB_BG_START=255,255,255 +org.eclipse.ui.workbench.ACTIVE_TAB_TEXT_COLOR=46,52,54 +org.eclipse.ui.workbench.INACTIVE_TAB_BG_START=246,245,244 diff --git a/Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.urischeme.prefs b/Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.urischeme.prefs new file mode 100644 index 0000000..855d634 --- /dev/null +++ b/Software/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.urischeme.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +processedSchemes=,eclipse+command,eclipse+mpc diff --git a/Software/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi b/Software/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi new file mode 100644 index 0000000..a0ebcaa --- /dev/null +++ b/Software/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi @@ -0,0 +1,2090 @@ + + + + activeSchemeId:org.eclipse.ui.defaultAcceleratorConfiguration + + + + + topLevel + + + + + persp.actionSet:com.st.stm32cube.ide.mcu.informationcenter.actionSet3 + persp.actionSet:org.eclipse.ui.cheatsheets.actionSet + persp.actionSet:org.eclipse.search.searchActionSet + persp.actionSet:org.eclipse.text.quicksearch.actionSet + persp.actionSet:org.eclipse.ui.edit.text.actionSet.annotationNavigation + persp.actionSet:org.eclipse.ui.edit.text.actionSet.navigation + persp.actionSet:org.eclipse.ui.edit.text.actionSet.convertLineDelimitersTo + persp.actionSet:org.eclipse.ui.externaltools.ExternalToolsSet + persp.actionSet:org.eclipse.ui.actionSet.keyBindings + persp.actionSet:org.eclipse.ui.actionSet.openFiles + persp.actionSet:org.eclipse.cdt.ui.SearchActionSet + persp.actionSet:org.eclipse.cdt.ui.CElementCreationActionSet + persp.actionSet:org.eclipse.ui.NavigateActionSet + persp.viewSC:org.eclipse.ui.console.ConsoleView + persp.viewSC:org.eclipse.search.ui.views.SearchView + persp.viewSC:org.eclipse.ui.views.ContentOutline + persp.viewSC:org.eclipse.ui.views.ProblemView + persp.viewSC:org.eclipse.cdt.ui.CView + persp.viewSC:org.eclipse.ui.views.PropertySheet + persp.viewSC:org.eclipse.ui.views.TaskList + persp.newWizSC:org.eclipse.cdt.ui.wizards.ConvertToMakeWizard + persp.newWizSC:org.eclipse.cdt.ui.wizards.NewMakeFromExisting + persp.newWizSC:org.eclipse.cdt.ui.wizard.project + persp.newWizSC:org.eclipse.cdt.ui.wizards.NewSourceFolderCreationWizard + persp.newWizSC:org.eclipse.cdt.ui.wizards.NewFolderCreationWizard + persp.newWizSC:org.eclipse.cdt.ui.wizards.NewSourceFileCreationWizard + persp.newWizSC:org.eclipse.cdt.ui.wizards.NewHeaderFileCreationWizard + persp.newWizSC:org.eclipse.cdt.ui.wizards.NewFileCreationWizard + persp.newWizSC:org.eclipse.cdt.ui.wizards.NewClassCreationWizard + persp.perspSC:org.eclipse.debug.ui.DebugPerspective + persp.perspSC:org.eclipse.team.ui.TeamSynchronizingPerspective + persp.actionSet:org.eclipse.debug.ui.launchActionSet + persp.actionSet:org.eclipse.cdt.ui.buildConfigActionSet + persp.actionSet:org.eclipse.cdt.ui.NavigationActionSet + persp.actionSet:org.eclipse.cdt.ui.OpenActionSet + persp.actionSet:org.eclipse.cdt.ui.CodingActionSet + persp.actionSet:org.eclipse.ui.edit.text.actionSet.presentation + persp.showIn:org.eclipse.cdt.ui.includeBrowser + persp.showIn:org.eclipse.cdt.ui.CView + persp.showIn:org.eclipse.ui.navigator.ProjectExplorer + persp.viewSC:org.eclipse.ui.navigator.ProjectExplorer + persp.viewSC:org.eclipse.cdt.ui.includeBrowser + persp.actionSet:org.eclipse.debug.ui.breakpointActionSet + persp.newWizSC:com.st.stm32cube.common.projectcreation.ui.stm32projectwizard + persp.newWizSC:com.st.stm32cube.common.projectcreation.ui.stm32projectfromiocwizard + persp.viewSC:org.eclipse.cdt.make.ui.views.MakeView + persp.actionSet:org.eclipse.cdt.make.ui.makeTargetActionSet + persp.showIn:org.eclipse.cdt.codan.internal.ui.views.ProblemDetails + persp.viewSC:org.eclipse.cdt.codan.internal.ui.views.ProblemDetails + persp.viewSC:com.st.stm32cube.ide.mcu.buildanalyzer.view + persp.viewSC:com.st.stm32cube.ide.mcu.stackanalyzer.stackanalyzer.view + persp.newWizSC:com.st.stm32cube.ide.mpu.linux.projectcreation.ui.wizard.linuxprojectfromsourcewizard + persp.newWizSC:com.st.stm32cube.ide.cmake.newwizard + persp.viewSC:com.st.stm32cube.ide.mcu.cyclomaticcomplexity.view + persp.viewSC:com.st.stm32cube.ide.mcu.sfrview + + + + View + categoryTag:General + + + View + categoryTag:C/C++ + + + View + categoryTag:General + + + + + + + + View + categoryTag:General + + + View + categoryTag:General + + + View + categoryTag:Make + + + + + + noFocus + + View + categoryTag:General + + + View + categoryTag:General + + + View + categoryTag:General + + + View + categoryTag:General + + + + + View + categoryTag:C/C++ + + + View + categoryTag:C/C++ + + + View + categoryTag:C/C++ + + + + + + + + + persp.actionSet:com.st.stm32cube.ide.mcu.informationcenter.actionSet3 + persp.actionSet:org.eclipse.ui.cheatsheets.actionSet + persp.actionSet:org.eclipse.search.searchActionSet + persp.actionSet:org.eclipse.text.quicksearch.actionSet + persp.actionSet:org.eclipse.ui.edit.text.actionSet.annotationNavigation + persp.actionSet:org.eclipse.ui.edit.text.actionSet.navigation + persp.actionSet:org.eclipse.ui.edit.text.actionSet.convertLineDelimitersTo + persp.actionSet:org.eclipse.ui.externaltools.ExternalToolsSet + persp.actionSet:org.eclipse.ui.actionSet.keyBindings + persp.actionSet:org.eclipse.ui.actionSet.openFiles + persp.actionSet:org.eclipse.cdt.ui.buildConfigActionSet + persp.actionSet:org.eclipse.debug.ui.launchActionSet + persp.newWizSC:com.st.stm32cube.common.projectcreation.ui.stm32projectwizard + persp.newWizSC:com.st.stm32cube.common.projectcreation.ui.stm32projectfromiocwizard + persp.newWizSC:com.st.stm32cube.ide.mpu.linux.projectcreation.ui.wizard.linuxprojectfromsourcewizard + persp.newWizSC:com.st.stm32cube.ide.cmake.newwizard + + + + View + categoryTag:General + + + + + + + + General + + View + categoryTag:Device Configuration Tool + + + View + categoryTag:General + + + + + + + + + + View + categoryTag:Help + + + View + categoryTag:General + + + View + categoryTag:Help + + + + + + + View + categoryTag:Help + + + + + + View + categoryTag:General + + ViewMenu + menuContribution:menu + + + + + + + View + categoryTag:Help + + + + org.eclipse.e4.primaryDataStack + EditorStack + active + + + Editor + removeOnHide + com.st.stm32cube.common.mx.startCubeMx + + + + Editor + removeOnHide + org.eclipse.cdt.ui.editor.CEditor + + + + Editor + removeOnHide + org.eclipse.cdt.ui.editor.CEditor + + + + Editor + removeOnHide + org.eclipse.cdt.ui.editor.CEditor + + + + Editor + removeOnHide + org.eclipse.cdt.ui.editor.CEditor + + + + Editor + removeOnHide + org.eclipse.cdt.ui.editor.CEditor + + + + Editor + removeOnHide + org.eclipse.cdt.ui.editor.CEditor + + + + Editor + removeOnHide + org.eclipse.cdt.ui.editor.CEditor + + + + Editor + removeOnHide + org.eclipse.cdt.ui.editor.CEditor + active + + + + Editor + removeOnHide + org.eclipse.cdt.ui.editor.CEditor + + + + Editor + removeOnHide + org.eclipse.cdt.ui.editor.CEditor + + + + Editor + removeOnHide + org.eclipse.cdt.ui.editor.CEditor + + + + + + + + View + categoryTag:General + + ViewMenu + menuContribution:menu + + + + + + + View + categoryTag:C/C++ + + + + + View + categoryTag:General + + + + + + View + categoryTag:General + + ViewMenu + menuContribution:menu + + + + + + + + View + categoryTag:General + + ViewMenu + menuContribution:menu + + + + + + + + View + categoryTag:General + + ViewMenu + menuContribution:menu + + + + + + + + View + categoryTag:General + + ViewMenu + menuContribution:menu + + + + + + + + View + categoryTag:General + + ViewMenu + menuContribution:menu + + + + + + + View + categoryTag:General + + + + + + View + categoryTag:Make + + ViewMenu + menuContribution:menu + + + + + + + + View + categoryTag:C/C++ + + ViewMenu + menuContribution:menu + + + + + + + + View + categoryTag:C/C++ + + ViewMenu + menuContribution:menu + + + + + + + + View + categoryTag:C/C++ + + ViewMenu + menuContribution:menu + + + + + + + View + categoryTag:Device Configuration Tool + + + + + View + categoryTag:General + + ViewMenu + menuContribution:menu + + + + + + toolbarSeparator + + + + Draggable + + + + toolbarSeparator + + + + Draggable + + + toolbarSeparator + + + + Draggable + + + Draggable + + + Draggable + + + Draggable + + + toolbarSeparator + + + + Draggable + + + + Draggable + + + toolbarSeparator + + + + toolbarSeparator + + + + Draggable + + + stretch + SHOW_RESTORE_MENU + + + Draggable + HIDEABLE + SHOW_RESTORE_MENU + + + + + stretch + + + Draggable + + + Draggable + + + + + TrimStack + Draggable + + + TrimStack + Draggable + + + + + TrimStack + Draggable + + + TrimStack + Draggable + + + TrimStack + Draggable + + + + + + + + + + + + + + + platform:gtk + + + + + + platform:gtk + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Editor + removeOnHide + + + + + View + categoryTag:Device Configuration Tool + + + + + View + categoryTag:C/C++ + + + + + View + categoryTag:C/C++ + + + + + View + categoryTag:SWV + + + + + View + categoryTag:SWV + + + + + View + categoryTag:SWV + + + + + View + categoryTag:SWV + + + + + View + categoryTag:SWV + + + + + View + categoryTag:SWV + + + + + View + categoryTag:Debug + + + + + View + categoryTag:FreeRTOS + + + + + View + categoryTag:FreeRTOS + + + + + View + categoryTag:FreeRTOS + + + + + View + categoryTag:FreeRTOS + + + + + View + categoryTag:Debug + + + + + View + categoryTag:Debug + + + + + View + categoryTag:C/C++ + + + + + View + categoryTag:Other + + + + + View + categoryTag:ThreadX + + + + + View + categoryTag:ThreadX + + + + + View + categoryTag:ThreadX + + + + + View + categoryTag:ThreadX + + + + + View + categoryTag:ThreadX + + + + + View + categoryTag:ThreadX + + + + + View + categoryTag:ThreadX + + + + + View + categoryTag:ThreadX + + + + + View + categoryTag:C/C++ + + + + + View + categoryTag:Debug + + + + + View + categoryTag:Debug + + + + + View + categoryTag:Debug + + + + + View + categoryTag:Debug + + + + + View + categoryTag:Debug + + + + + View + categoryTag:Debug + + + + + View + categoryTag:Debug + + + + + View + categoryTag:Debug + + + + + View + categoryTag:Make + + + + + View + categoryTag:C/C++ + + + + + View + categoryTag:C/C++ + + + + + View + categoryTag:C/C++ + + + + + View + categoryTag:C/C++ + + + + + View + categoryTag:C/C++ + + + + + View + categoryTag:General + + + + + View + categoryTag:Debug + + + + + View + categoryTag:Debug + + + + + View + categoryTag:Debug + + + + + View + categoryTag:Debug + + + + + View + categoryTag:Debug + + + + + View + categoryTag:Debug + + + + + View + categoryTag:Debug + + + View + categoryTag:Debug + + + + + View + categoryTag:Help + + + + + View + categoryTag:Connections + + + + + View + categoryTag:General + + + + + View + categoryTag:Version Control (Team) + + + + + View + categoryTag:Version Control (Team) + + + + + View + categoryTag:General + + + + + View + categoryTag:General + + + + + View + categoryTag:Help + + + + + View + categoryTag:General + + + + + View + categoryTag:General + + + + + View + categoryTag:General + + + + + View + categoryTag:General + + + + + View + categoryTag:General + + + + + View + categoryTag:General + + + + + View + categoryTag:General + + + + + View + categoryTag:General + + + + + View + categoryTag:General + + + + + View + categoryTag:General + + + + + View + categoryTag:General + + + + + View + categoryTag:General + + + + glue + move_after:PerspectiveSpacer + SHOW_RESTORE_MENU + + + move_after:Spacer Glue + HIDEABLE + SHOW_RESTORE_MENU + + + glue + move_after:SearchField + SHOW_RESTORE_MENU + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Software/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml b/Software/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml new file mode 100644 index 0000000..35be43f --- /dev/null +++ b/Software/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml @@ -0,0 +1,6 @@ + +