From 406fed6b8e4ab2a13af4236c556507331b6d3504 Mon Sep 17 00:00:00 2001 From: liudagui Date: Tue, 5 Nov 2024 10:08:08 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=AC=E4=B8=80=E6=AC=A1=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 11 + .../DebugConfig/Target_1_STM32F105RC.dbgconf | 97 + .../hongri_boot_STM32F105RC.dbgconf | 97 + boot_project/EventRecorderStub.scvd | Bin 0 -> 8192 bytes boot_project/JLinkSettings.ini | 39 + boot_project/LED.map | Bin 0 -> 45056 bytes boot_project/Listings/boot.map | Bin 0 -> 184320 bytes boot_project/Listings/hongri_boot.map | Bin 0 -> 184320 bytes .../Listings/startup_stm32f10x_cl.lst | Bin 0 -> 69632 bytes boot_project/Objects/ExtDll.iex | 2 + boot_project/Objects/boot.axf | Bin 0 -> 571364 bytes boot_project/Objects/boot.build_log.htm | 116 + boot_project/Objects/boot.hex | 1463 +++++++++ boot_project/Objects/boot.htm | 1916 +++++++++++ boot_project/Objects/boot.lnp | 36 + boot_project/Objects/diag_appl_hr.__i | 6 + boot_project/Objects/hongri_boot.axf | Bin 0 -> 572108 bytes .../Objects/hongri_boot.build_log.htm | 116 + boot_project/Objects/hongri_boot.hex | 1463 +++++++++ boot_project/Objects/hongri_boot.htm | 1916 +++++++++++ boot_project/Objects/hongri_boot.lnp | 36 + boot_project/Objects/hongri_boot.sct | Bin 0 -> 8192 bytes .../Objects/hongri_boot_hongri_boot.dep | 482 +++ boot_project/Objects/if_can.__i | 6 + boot_project/Objects/if_gpio.__i | 6 + .../RTE/_hongri_boot/RTE_Components.h | Bin 0 -> 8192 bytes boot_project/hongri_boot.uvguix.Administrator | Bin 0 -> 204800 bytes boot_project/hongri_boot.uvprojx | Bin 0 -> 32768 bytes boot_project/link_sct/STM32F105Boot.sct | Bin 0 -> 8192 bytes boot_project/startup_stm32f10x_cl.lst | Bin 0 -> 69632 bytes boot_source/code_app/app_boot/inc/app_can.h | Bin 0 -> 12288 bytes boot_source/code_app/app_boot/inc/app_cfg.h | Bin 0 -> 8192 bytes boot_source/code_app/app_boot/src/app_can.c | Bin 0 -> 28672 bytes .../code_app/driver/inc/dev_config_all.h | Bin 0 -> 8192 bytes boot_source/code_app/driver/inc/dev_crc32.h | Bin 0 -> 8192 bytes boot_source/code_app/driver/inc/dev_eerom.h | Bin 0 -> 8192 bytes .../code_app/driver/inc/dev_flashApi.h | Bin 0 -> 8192 bytes boot_source/code_app/driver/inc/dev_sys.h | Bin 0 -> 16384 bytes boot_source/code_app/driver/src/dev_crc32.c | Bin 0 -> 8192 bytes boot_source/code_app/driver/src/dev_eerom.c | 0 .../code_app/driver/src/dev_flashApi.c | Bin 0 -> 8192 bytes boot_source/code_app/driver/src/dev_sys.c | Bin 0 -> 12288 bytes boot_source/code_app/interface/inc/if_gpio.h | 150 + boot_source/code_app/interface/inc/if_main.h | Bin 0 -> 8192 bytes boot_source/code_app/interface/src/if_gpio.c | Bin 0 -> 16384 bytes boot_source/code_app/main/inc/config.h | Bin 0 -> 12288 bytes boot_source/code_app/main/inc/main.h | Bin 0 -> 8192 bytes boot_source/code_app/main/src/main.c | Bin 0 -> 12288 bytes .../CanStack/canBus_Com/Can_Transceiver.c | Bin 0 -> 16384 bytes .../CanStack/canBus_Com/Can_Transceiver.h | Bin 0 -> 8192 bytes .../service/CanStack/canBus_Com/UDS.c | Bin 0 -> 69632 bytes .../service/CanStack/canBus_Com/UDS.h | Bin 0 -> 16384 bytes .../service/CanStack/canBus_Com/can_def.h | Bin 0 -> 16384 bytes .../service/CanStack/canBus_Com/can_include.h | Bin 0 -> 8192 bytes .../service/CanStack/canBus_Com/can_type.h | Bin 0 -> 8192 bytes .../service/CanStack/canBus_Com/iso15765-2.c | Bin 0 -> 90112 bytes .../CanStack/canBus_Com/iso15765-2_def.h | Bin 0 -> 12288 bytes .../CanStack/canBus_Com/iso15765-2_entry.c | Bin 0 -> 8192 bytes .../CanStack/canBus_hongri/CanConfig_C301.c | Bin 0 -> 12288 bytes .../CanStack/canBus_hongri/CanConfig_C301.h | Bin 0 -> 12288 bytes .../CanStack/canBus_hongri/CanCtrl_C301.c | Bin 0 -> 12288 bytes .../CanStack/canBus_hongri/CanCtrl_C301.h | Bin 0 -> 8192 bytes .../CanStack/canBus_hongri/Diag_Appl_C301.c | Bin 0 -> 81920 bytes .../CanStack/canBus_hongri/Diag_Appl_C301.h | Bin 0 -> 20480 bytes .../CanStack/canBus_hongri/Diag_Eeprom_C301.c | Bin 0 -> 16384 bytes .../CanStack/canBus_hongri/Diag_Eeprom_C301.h | Bin 0 -> 12288 bytes .../Service_Canstack_CanBus_hongri_All.h | Bin 0 -> 8192 bytes .../CanStack/canBus_hongri/UDS_SA_C301.c | Bin 0 -> 20480 bytes .../CanStack/canBus_hongri/UDS_SA_C301.h | Bin 0 -> 8192 bytes boot_source/code_app/startup/inc/stm32f10x.h | Bin 0 -> 638976 bytes .../code_app/startup/inc/stm32f10x_it.h | 52 + .../code_app/startup/inc/stm32f10x_libopt.h | Bin 0 -> 8192 bytes .../code_app/startup/inc/system_stm32f10x.h | 96 + .../code_app/startup/src/stm32f10x_it.c | Bin 0 -> 8192 bytes .../code_app/startup/src/system_stm32f10x.c | Bin 0 -> 40960 bytes .../CMSIS/ST/STM32F10x/CoreSupport/core_cm3.c | 784 +++++ .../CMSIS/ST/STM32F10x/CoreSupport/core_cm3.h | 1818 +++++++++++ .../Source/TrueSTUDIO/startup_stm32f10x_cl.s | 471 +++ .../Source/TrueSTUDIO/startup_stm32f10x_hd.s | 467 +++ .../TrueSTUDIO/startup_stm32f10x_hd_vl.s | 449 +++ .../Source/TrueSTUDIO/startup_stm32f10x_ld.s | 345 ++ .../TrueSTUDIO/startup_stm32f10x_ld_vl.s | 390 +++ .../Source/TrueSTUDIO/startup_stm32f10x_md.s | 361 ++ .../TrueSTUDIO/startup_stm32f10x_md_vl.s | 406 +++ .../Source/TrueSTUDIO/startup_stm32f10x_xl.s | 465 +++ .../Source/arm/startup_stm32f10x_cl.s | 370 +++ .../Source/arm/startup_stm32f10x_hd.s | 359 ++ .../Source/arm/startup_stm32f10x_hd_vl.s | 347 ++ .../Source/arm/startup_stm32f10x_ld.s | 298 ++ .../Source/arm/startup_stm32f10x_ld_vl.s | 305 ++ .../Source/arm/startup_stm32f10x_md.s | 308 ++ .../Source/arm/startup_stm32f10x_md_vl.s | 316 ++ .../Source/arm/startup_stm32f10x_xl.s | 359 ++ .../Source/gcc_ride7/startup_stm32f10x_cl.s | 466 +++ .../Source/gcc_ride7/startup_stm32f10x_hd.s | 463 +++ .../gcc_ride7/startup_stm32f10x_hd_vl.s | 440 +++ .../Source/gcc_ride7/startup_stm32f10x_ld.s | 341 ++ .../gcc_ride7/startup_stm32f10x_ld_vl.s | 381 +++ .../Source/gcc_ride7/startup_stm32f10x_md.s | 356 ++ .../gcc_ride7/startup_stm32f10x_md_vl.s | 397 +++ .../Source/gcc_ride7/startup_stm32f10x_xl.s | 463 +++ .../Source/iar/startup_stm32f10x_cl.s | 508 +++ .../Source/iar/startup_stm32f10x_hd.s | 497 +++ .../Source/iar/startup_stm32f10x_hd_vl.s | 462 +++ .../Source/iar/startup_stm32f10x_ld.s | 367 +++ .../Source/iar/startup_stm32f10x_ld_vl.s | 370 +++ .../Source/iar/startup_stm32f10x_md.s | 392 +++ .../Source/iar/startup_stm32f10x_md_vl.s | 395 +++ .../Source/iar/startup_stm32f10x_xl.s | 497 +++ .../STM32F10x_FWLib/inc/misc.h | 220 ++ .../STM32F10x_FWLib/inc/stm32f10x_adc.h | 483 +++ .../STM32F10x_FWLib/inc/stm32f10x_bkp.h | 195 ++ .../STM32F10x_FWLib/inc/stm32f10x_can.h | Bin 0 -> 32768 bytes .../STM32F10x_FWLib/inc/stm32f10x_cec.h | 210 ++ .../STM32F10x_FWLib/inc/stm32f10x_crc.h | 94 + .../STM32F10x_FWLib/inc/stm32f10x_dac.h | 317 ++ .../STM32F10x_FWLib/inc/stm32f10x_dbgmcu.h | 119 + .../STM32F10x_FWLib/inc/stm32f10x_dma.h | 439 +++ .../STM32F10x_FWLib/inc/stm32f10x_exti.h | 184 ++ .../STM32F10x_FWLib/inc/stm32f10x_flash.h | 426 +++ .../STM32F10x_FWLib/inc/stm32f10x_fsmc.h | 733 +++++ .../STM32F10x_FWLib/inc/stm32f10x_gpio.h | 386 +++ .../STM32F10x_FWLib/inc/stm32f10x_i2c.h | 684 ++++ .../STM32F10x_FWLib/inc/stm32f10x_iwdg.h | 140 + .../STM32F10x_FWLib/inc/stm32f10x_pwr.h | Bin 0 -> 12288 bytes .../STM32F10x_FWLib/inc/stm32f10x_rcc.h | 727 +++++ .../STM32F10x_FWLib/inc/stm32f10x_rtc.h | 135 + .../STM32F10x_FWLib/inc/stm32f10x_sdio.h | 531 +++ .../STM32F10x_FWLib/inc/stm32f10x_spi.h | 487 +++ .../STM32F10x_FWLib/inc/stm32f10x_tim.h | 1164 +++++++ .../STM32F10x_FWLib/inc/stm32f10x_usart.h | 412 +++ .../STM32F10x_FWLib/inc/stm32f10x_wwdg.h | 115 + .../STM32F10x_FWLib/src/misc.c | 225 ++ .../STM32F10x_FWLib/src/stm32f10x_adc.c | 1307 ++++++++ .../STM32F10x_FWLib/src/stm32f10x_bkp.c | 308 ++ .../STM32F10x_FWLib/src/stm32f10x_can.c | 1415 ++++++++ .../STM32F10x_FWLib/src/stm32f10x_cec.c | 433 +++ .../STM32F10x_FWLib/src/stm32f10x_crc.c | 160 + .../STM32F10x_FWLib/src/stm32f10x_dac.c | 571 ++++ .../STM32F10x_FWLib/src/stm32f10x_dbgmcu.c | 162 + .../STM32F10x_FWLib/src/stm32f10x_dma.c | 714 ++++ .../STM32F10x_FWLib/src/stm32f10x_exti.c | 269 ++ .../STM32F10x_FWLib/src/stm32f10x_flash.c | 1688 ++++++++++ .../STM32F10x_FWLib/src/stm32f10x_fsmc.c | 866 +++++ .../STM32F10x_FWLib/src/stm32f10x_gpio.c | 650 ++++ .../STM32F10x_FWLib/src/stm32f10x_i2c.c | 1331 ++++++++ .../STM32F10x_FWLib/src/stm32f10x_iwdg.c | 190 ++ .../STM32F10x_FWLib/src/stm32f10x_pwr.c | Bin 0 -> 16384 bytes .../STM32F10x_FWLib/src/stm32f10x_rcc.c | 1470 +++++++++ .../STM32F10x_FWLib/src/stm32f10x_rtc.c | 339 ++ .../STM32F10x_FWLib/src/stm32f10x_sdio.c | 799 +++++ .../STM32F10x_FWLib/src/stm32f10x_spi.c | 908 ++++++ .../STM32F10x_FWLib/src/stm32f10x_tim.c | 2890 +++++++++++++++++ .../STM32F10x_FWLib/src/stm32f10x_usart.c | 1058 ++++++ .../STM32F10x_FWLib/src/stm32f10x_wwdg.c | 224 ++ boot_source/platform/drivers/inc/24cxx.h | Bin 0 -> 8192 bytes .../platform/drivers/inc/bsp_i2c_gpio.h | 30 + boot_source/platform/drivers/inc/can.h | Bin 0 -> 16384 bytes boot_source/platform/drivers/inc/can2.h | Bin 0 -> 8192 bytes .../platform/drivers/inc/ecual_flash.h | Bin 0 -> 12288 bytes boot_source/platform/drivers/inc/led.h | Bin 0 -> 8192 bytes boot_source/platform/drivers/inc/pin_mux.h | 1590 +++++++++ .../drivers/inc/platform_driver_inc_all.h | Bin 0 -> 8192 bytes .../drivers/inc/platform_eerom_address_def.h | Bin 0 -> 8192 bytes .../platform/drivers/inc/platform_type_def.h | Bin 0 -> 8192 bytes boot_source/platform/drivers/inc/status.h | 173 + boot_source/platform/drivers/src/CAN2/can2.c | Bin 0 -> 28672 bytes .../platform/drivers/src/EEROM/24cxx.c | Bin 0 -> 12288 bytes .../platform/drivers/src/EEROM/bsp_i2c_gpio.c | Bin 0 -> 16384 bytes .../platform/drivers/src/GPIO/pin_mux.c | 862 +++++ boot_source/platform/drivers/src/LED/led.c | Bin 0 -> 12288 bytes .../platform/drivers/src/flash/ecual_flash.c | Bin 0 -> 16384 bytes doc/flash 和sram分配说明.txt | Bin 0 -> 8192 bytes 文件架构说明.md | 92 + 174 files changed, 52444 insertions(+) create mode 100644 .gitignore create mode 100644 boot_project/DebugConfig/Target_1_STM32F105RC.dbgconf create mode 100644 boot_project/DebugConfig/hongri_boot_STM32F105RC.dbgconf create mode 100644 boot_project/EventRecorderStub.scvd create mode 100644 boot_project/JLinkSettings.ini create mode 100644 boot_project/LED.map create mode 100644 boot_project/Listings/boot.map create mode 100644 boot_project/Listings/hongri_boot.map create mode 100644 boot_project/Listings/startup_stm32f10x_cl.lst create mode 100644 boot_project/Objects/ExtDll.iex create mode 100644 boot_project/Objects/boot.axf create mode 100644 boot_project/Objects/boot.build_log.htm create mode 100644 boot_project/Objects/boot.hex create mode 100644 boot_project/Objects/boot.htm create mode 100644 boot_project/Objects/boot.lnp create mode 100644 boot_project/Objects/diag_appl_hr.__i create mode 100644 boot_project/Objects/hongri_boot.axf create mode 100644 boot_project/Objects/hongri_boot.build_log.htm create mode 100644 boot_project/Objects/hongri_boot.hex create mode 100644 boot_project/Objects/hongri_boot.htm create mode 100644 boot_project/Objects/hongri_boot.lnp create mode 100644 boot_project/Objects/hongri_boot.sct create mode 100644 boot_project/Objects/hongri_boot_hongri_boot.dep create mode 100644 boot_project/Objects/if_can.__i create mode 100644 boot_project/Objects/if_gpio.__i create mode 100644 boot_project/RTE/_hongri_boot/RTE_Components.h create mode 100644 boot_project/hongri_boot.uvguix.Administrator create mode 100644 boot_project/hongri_boot.uvprojx create mode 100644 boot_project/link_sct/STM32F105Boot.sct create mode 100644 boot_project/startup_stm32f10x_cl.lst create mode 100644 boot_source/code_app/app_boot/inc/app_can.h create mode 100644 boot_source/code_app/app_boot/inc/app_cfg.h create mode 100644 boot_source/code_app/app_boot/src/app_can.c create mode 100644 boot_source/code_app/driver/inc/dev_config_all.h create mode 100644 boot_source/code_app/driver/inc/dev_crc32.h create mode 100644 boot_source/code_app/driver/inc/dev_eerom.h create mode 100644 boot_source/code_app/driver/inc/dev_flashApi.h create mode 100644 boot_source/code_app/driver/inc/dev_sys.h create mode 100644 boot_source/code_app/driver/src/dev_crc32.c create mode 100644 boot_source/code_app/driver/src/dev_eerom.c create mode 100644 boot_source/code_app/driver/src/dev_flashApi.c create mode 100644 boot_source/code_app/driver/src/dev_sys.c create mode 100644 boot_source/code_app/interface/inc/if_gpio.h create mode 100644 boot_source/code_app/interface/inc/if_main.h create mode 100644 boot_source/code_app/interface/src/if_gpio.c create mode 100644 boot_source/code_app/main/inc/config.h create mode 100644 boot_source/code_app/main/inc/main.h create mode 100644 boot_source/code_app/main/src/main.c create mode 100644 boot_source/code_app/service/CanStack/canBus_Com/Can_Transceiver.c create mode 100644 boot_source/code_app/service/CanStack/canBus_Com/Can_Transceiver.h create mode 100644 boot_source/code_app/service/CanStack/canBus_Com/UDS.c create mode 100644 boot_source/code_app/service/CanStack/canBus_Com/UDS.h create mode 100644 boot_source/code_app/service/CanStack/canBus_Com/can_def.h create mode 100644 boot_source/code_app/service/CanStack/canBus_Com/can_include.h create mode 100644 boot_source/code_app/service/CanStack/canBus_Com/can_type.h create mode 100644 boot_source/code_app/service/CanStack/canBus_Com/iso15765-2.c create mode 100644 boot_source/code_app/service/CanStack/canBus_Com/iso15765-2_def.h create mode 100644 boot_source/code_app/service/CanStack/canBus_Com/iso15765-2_entry.c create mode 100644 boot_source/code_app/service/CanStack/canBus_hongri/CanConfig_C301.c create mode 100644 boot_source/code_app/service/CanStack/canBus_hongri/CanConfig_C301.h create mode 100644 boot_source/code_app/service/CanStack/canBus_hongri/CanCtrl_C301.c create mode 100644 boot_source/code_app/service/CanStack/canBus_hongri/CanCtrl_C301.h create mode 100644 boot_source/code_app/service/CanStack/canBus_hongri/Diag_Appl_C301.c create mode 100644 boot_source/code_app/service/CanStack/canBus_hongri/Diag_Appl_C301.h create mode 100644 boot_source/code_app/service/CanStack/canBus_hongri/Diag_Eeprom_C301.c create mode 100644 boot_source/code_app/service/CanStack/canBus_hongri/Diag_Eeprom_C301.h create mode 100644 boot_source/code_app/service/CanStack/canBus_hongri/Service_Canstack_CanBus_hongri_All.h create mode 100644 boot_source/code_app/service/CanStack/canBus_hongri/UDS_SA_C301.c create mode 100644 boot_source/code_app/service/CanStack/canBus_hongri/UDS_SA_C301.h create mode 100644 boot_source/code_app/startup/inc/stm32f10x.h create mode 100644 boot_source/code_app/startup/inc/stm32f10x_it.h create mode 100644 boot_source/code_app/startup/inc/stm32f10x_libopt.h create mode 100644 boot_source/code_app/startup/inc/system_stm32f10x.h create mode 100644 boot_source/code_app/startup/src/stm32f10x_it.c create mode 100644 boot_source/code_app/startup/src/system_stm32f10x.c create mode 100644 boot_source/platform/CMSIS/ST/STM32F10x/CoreSupport/core_cm3.c create mode 100644 boot_source/platform/CMSIS/ST/STM32F10x/CoreSupport/core_cm3.h create mode 100644 boot_source/platform/CMSIS/ST/STM32F10x/Source/TrueSTUDIO/startup_stm32f10x_cl.s create mode 100644 boot_source/platform/CMSIS/ST/STM32F10x/Source/TrueSTUDIO/startup_stm32f10x_hd.s create mode 100644 boot_source/platform/CMSIS/ST/STM32F10x/Source/TrueSTUDIO/startup_stm32f10x_hd_vl.s create mode 100644 boot_source/platform/CMSIS/ST/STM32F10x/Source/TrueSTUDIO/startup_stm32f10x_ld.s create mode 100644 boot_source/platform/CMSIS/ST/STM32F10x/Source/TrueSTUDIO/startup_stm32f10x_ld_vl.s create mode 100644 boot_source/platform/CMSIS/ST/STM32F10x/Source/TrueSTUDIO/startup_stm32f10x_md.s create mode 100644 boot_source/platform/CMSIS/ST/STM32F10x/Source/TrueSTUDIO/startup_stm32f10x_md_vl.s create mode 100644 boot_source/platform/CMSIS/ST/STM32F10x/Source/TrueSTUDIO/startup_stm32f10x_xl.s create mode 100644 boot_source/platform/CMSIS/ST/STM32F10x/Source/arm/startup_stm32f10x_cl.s create mode 100644 boot_source/platform/CMSIS/ST/STM32F10x/Source/arm/startup_stm32f10x_hd.s create mode 100644 boot_source/platform/CMSIS/ST/STM32F10x/Source/arm/startup_stm32f10x_hd_vl.s create mode 100644 boot_source/platform/CMSIS/ST/STM32F10x/Source/arm/startup_stm32f10x_ld.s create mode 100644 boot_source/platform/CMSIS/ST/STM32F10x/Source/arm/startup_stm32f10x_ld_vl.s create mode 100644 boot_source/platform/CMSIS/ST/STM32F10x/Source/arm/startup_stm32f10x_md.s create mode 100644 boot_source/platform/CMSIS/ST/STM32F10x/Source/arm/startup_stm32f10x_md_vl.s create mode 100644 boot_source/platform/CMSIS/ST/STM32F10x/Source/arm/startup_stm32f10x_xl.s create mode 100644 boot_source/platform/CMSIS/ST/STM32F10x/Source/gcc_ride7/startup_stm32f10x_cl.s create mode 100644 boot_source/platform/CMSIS/ST/STM32F10x/Source/gcc_ride7/startup_stm32f10x_hd.s create mode 100644 boot_source/platform/CMSIS/ST/STM32F10x/Source/gcc_ride7/startup_stm32f10x_hd_vl.s create mode 100644 boot_source/platform/CMSIS/ST/STM32F10x/Source/gcc_ride7/startup_stm32f10x_ld.s create mode 100644 boot_source/platform/CMSIS/ST/STM32F10x/Source/gcc_ride7/startup_stm32f10x_ld_vl.s create mode 100644 boot_source/platform/CMSIS/ST/STM32F10x/Source/gcc_ride7/startup_stm32f10x_md.s create mode 100644 boot_source/platform/CMSIS/ST/STM32F10x/Source/gcc_ride7/startup_stm32f10x_md_vl.s create mode 100644 boot_source/platform/CMSIS/ST/STM32F10x/Source/gcc_ride7/startup_stm32f10x_xl.s create mode 100644 boot_source/platform/CMSIS/ST/STM32F10x/Source/iar/startup_stm32f10x_cl.s create mode 100644 boot_source/platform/CMSIS/ST/STM32F10x/Source/iar/startup_stm32f10x_hd.s create mode 100644 boot_source/platform/CMSIS/ST/STM32F10x/Source/iar/startup_stm32f10x_hd_vl.s create mode 100644 boot_source/platform/CMSIS/ST/STM32F10x/Source/iar/startup_stm32f10x_ld.s create mode 100644 boot_source/platform/CMSIS/ST/STM32F10x/Source/iar/startup_stm32f10x_ld_vl.s create mode 100644 boot_source/platform/CMSIS/ST/STM32F10x/Source/iar/startup_stm32f10x_md.s create mode 100644 boot_source/platform/CMSIS/ST/STM32F10x/Source/iar/startup_stm32f10x_md_vl.s create mode 100644 boot_source/platform/CMSIS/ST/STM32F10x/Source/iar/startup_stm32f10x_xl.s create mode 100644 boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/misc.h create mode 100644 boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_adc.h create mode 100644 boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_bkp.h create mode 100644 boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_can.h create mode 100644 boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_cec.h create mode 100644 boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_crc.h create mode 100644 boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_dac.h create mode 100644 boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_dbgmcu.h create mode 100644 boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_dma.h create mode 100644 boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_exti.h create mode 100644 boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_flash.h create mode 100644 boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_fsmc.h create mode 100644 boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_gpio.h create mode 100644 boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_i2c.h create mode 100644 boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_iwdg.h create mode 100644 boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_pwr.h create mode 100644 boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_rcc.h create mode 100644 boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_rtc.h create mode 100644 boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_sdio.h create mode 100644 boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_spi.h create mode 100644 boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_tim.h create mode 100644 boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_usart.h create mode 100644 boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_wwdg.h create mode 100644 boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/misc.c create mode 100644 boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_adc.c create mode 100644 boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_bkp.c create mode 100644 boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_can.c create mode 100644 boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_cec.c create mode 100644 boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_crc.c create mode 100644 boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_dac.c create mode 100644 boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_dbgmcu.c create mode 100644 boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_dma.c create mode 100644 boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_exti.c create mode 100644 boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_flash.c create mode 100644 boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_fsmc.c create mode 100644 boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_gpio.c create mode 100644 boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_i2c.c create mode 100644 boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_iwdg.c create mode 100644 boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_pwr.c create mode 100644 boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_rcc.c create mode 100644 boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_rtc.c create mode 100644 boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_sdio.c create mode 100644 boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_spi.c create mode 100644 boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_tim.c create mode 100644 boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_usart.c create mode 100644 boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_wwdg.c create mode 100644 boot_source/platform/drivers/inc/24cxx.h create mode 100644 boot_source/platform/drivers/inc/bsp_i2c_gpio.h create mode 100644 boot_source/platform/drivers/inc/can.h create mode 100644 boot_source/platform/drivers/inc/can2.h create mode 100644 boot_source/platform/drivers/inc/ecual_flash.h create mode 100644 boot_source/platform/drivers/inc/led.h create mode 100644 boot_source/platform/drivers/inc/pin_mux.h create mode 100644 boot_source/platform/drivers/inc/platform_driver_inc_all.h create mode 100644 boot_source/platform/drivers/inc/platform_eerom_address_def.h create mode 100644 boot_source/platform/drivers/inc/platform_type_def.h create mode 100644 boot_source/platform/drivers/inc/status.h create mode 100644 boot_source/platform/drivers/src/CAN2/can2.c create mode 100644 boot_source/platform/drivers/src/EEROM/24cxx.c create mode 100644 boot_source/platform/drivers/src/EEROM/bsp_i2c_gpio.c create mode 100644 boot_source/platform/drivers/src/GPIO/pin_mux.c create mode 100644 boot_source/platform/drivers/src/LED/led.c create mode 100644 boot_source/platform/drivers/src/flash/ecual_flash.c create mode 100644 doc/flash 和sram分配说明.txt create mode 100644 文件架构说明.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..00df2da --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +#忽略所有以 .o,.d,.crf,.uvoptx 结尾的文件 +*.o +*.d +*.crf +*.uvoptx + +# 忽略 si 目录 +/si/ + +# 忽略 JLinkLog.txt 文件 +JLinkLog.txt \ No newline at end of file diff --git a/boot_project/DebugConfig/Target_1_STM32F105RC.dbgconf b/boot_project/DebugConfig/Target_1_STM32F105RC.dbgconf new file mode 100644 index 0000000..90dabd8 --- /dev/null +++ b/boot_project/DebugConfig/Target_1_STM32F105RC.dbgconf @@ -0,0 +1,97 @@ +// <<< Use Configuration Wizard in Context Menu >>> +// Debug MCU Configuration +// DBG_SLEEP +// Debug Sleep Mode +// 0: (FCLK=On, HCLK=Off) FCLK is clocked by the system clock as previously configured by the software while HCLK is disabled +// 1: (FCLK=On, HCLK=On) HCLK is fed by the same clock that is provided to FCLK +// DBG_STOP +// Debug Stop Mode +// 0: (FCLK=Off, HCLK=Off) Clock controller disables all clocks +// 1: (FCLK=On, HCLK=On) FCLK and HCLK are provided by the internal RC oscillator which remains active +// DBG_STANDBY +// Debug Standby Mode +// 0: (FCLK=Off, HCLK=Off) The whole digital part is unpowered. +// 1: (FCLK=On, HCLK=On) Digital part is powered and FCLK and HCLK are provided by the internal RC oscillator which remains active +// DBG_IWDG_STOP +// Debug independent watchdog stopped when core is halted +// 0: The watchdog counter clock continues even if the core is halted +// 1: The watchdog counter clock is stopped when the core is halted +// DBG_WWDG_STOP +// Debug window watchdog stopped when core is halted +// 0: The window watchdog counter clock continues even if the core is halted +// 1: The window watchdog counter clock is stopped when the core is halted +// DBG_TIM1_STOP +// Timer 1 counter stopped when core is halted +// 0: The clock of the involved Timer Counter is fed even if the core is halted +// 1: The clock of the involved Timer counter is stopped when the core is halted +// DBG_TIM2_STOP +// Timer 2 counter stopped when core is halted +// 0: The clock of the involved Timer Counter is fed even if the core is halted +// 1: The clock of the involved Timer counter is stopped when the core is halted +// DBG_TIM3_STOP +// Timer 3 counter stopped when core is halted +// 0: The clock of the involved Timer Counter is fed even if the core is halted +// 1: The clock of the involved Timer counter is stopped when the core is halted +// DBG_TIM4_STOP +// Timer 4 counter stopped when core is halted +// 0: The clock of the involved Timer Counter is fed even if the core is halted +// 1: The clock of the involved Timer counter is stopped when the core is halted +// DBG_CAN1_STOP +// Debug CAN1 stopped when Core is halted +// 0: Same behavior as in normal mode +// 1: CAN1 receive registers are frozen +// DBG_I2C1_SMBUS_TIMEOUT +// I2C1 SMBUS timeout mode stopped when Core is halted +// 0: Same behavior as in normal mode +// 1: The SMBUS timeout is frozen +// DBG_I2C2_SMBUS_TIMEOUT +// I2C2 SMBUS timeout mode stopped when Core is halted +// 0: Same behavior as in normal mode +// 1: The SMBUS timeout is frozen +// DBG_TIM8_STOP +// Timer 8 counter stopped when core is halted +// 0: The clock of the involved timer counter is fed even if the core is halted, and the outputs behave normally. +// 1: The clock of the involved timer counter is stopped when the core is halted, and the outputs are disabled (as if there were an emergency stop in response to a break event). +// DBG_TIM5_STOP +// Timer 5 counter stopped when core is halted +// 0: The clock of the involved timer counter is fed even if the core is halted, and the outputs behave normally. +// 1: The clock of the involved timer counter is stopped when the core is halted, and the outputs are disabled (as if there were an emergency stop in response to a break event). +// DBG_TIM6_STOP +// Timer 6 counter stopped when core is halted +// 0: The clock of the involved timer counter is fed even if the core is halted, and the outputs behave normally. +// 1: The clock of the involved timer counter is stopped when the core is halted, and the outputs are disabled (as if there were an emergency stop in response to a break event). +// DBG_TIM7_STOP +// Timer 7 counter stopped when core is halted +// 0: The clock of the involved timer counter is fed even if the core is halted, and the outputs behave normally. +// 1: The clock of the involved timer counter is stopped when the core is halted, and the outputs are disabled (as if there were an emergency stop in response to a break event). +// DBG_CAN2_STOP +// Debug CAN2 stopped when Core is halted +// 0: Same behavior as in normal mode +// 1: CAN2 receive registers are frozen +// DBG_TIM12_STOP +// Timer 12 counter stopped when core is halted +// 0: The clock of the involved timer counter is fed even if the core is halted, and the outputs behave normally. +// 1: The clock of the involved timer counter is stopped when the core is halted, and the outputs are disabled (as if there were an emergency stop in response to a break event). +// DBG_TIM13_STOP +// Timer 13 counter stopped when core is halted +// 0: The clock of the involved timer counter is fed even if the core is halted, and the outputs behave normally. +// 1: The clock of the involved timer counter is stopped when the core is halted, and the outputs are disabled (as if there were an emergency stop in response to a break event). +// DBG_TIM14_STOP +// Timer 14 counter stopped when core is halted +// 0: The clock of the involved timer counter is fed even if the core is halted, and the outputs behave normally. +// 1: The clock of the involved timer counter is stopped when the core is halted, and the outputs are disabled (as if there were an emergency stop in response to a break event). +// DBG_TIM9_STOP +// Timer 9 counter stopped when core is halted +// 0: The clock of the involved timer counter is fed even if the core is halted, and the outputs behave normally. +// 1: The clock of the involved timer counter is stopped when the core is halted, and the outputs are disabled (as if there were an emergency stop in response to a break event). +// DBG_TIM10_STOP +// Timer 10 counter stopped when core is halted +// 0: The clock of the involved timer counter is fed even if the core is halted, and the outputs behave normally. +// 1: The clock of the involved timer counter is stopped when the core is halted, and the outputs are disabled (as if there were an emergency stop in response to a break event). +// DBG_TIM11_STOP +// Timer 11 counter stopped when core is halted +// 0: The clock of the involved timer counter is fed even if the core is halted, and the outputs behave normally. +// 1: The clock of the involved timer counter is stopped when the core is halted, and the outputs are disabled (as if there were an emergency stop in response to a break event). +// +DbgMCU_CR = 0x00000007; +// <<< end of configuration section >>> \ No newline at end of file diff --git a/boot_project/DebugConfig/hongri_boot_STM32F105RC.dbgconf b/boot_project/DebugConfig/hongri_boot_STM32F105RC.dbgconf new file mode 100644 index 0000000..90dabd8 --- /dev/null +++ b/boot_project/DebugConfig/hongri_boot_STM32F105RC.dbgconf @@ -0,0 +1,97 @@ +// <<< Use Configuration Wizard in Context Menu >>> +// Debug MCU Configuration +// DBG_SLEEP +// Debug Sleep Mode +// 0: (FCLK=On, HCLK=Off) FCLK is clocked by the system clock as previously configured by the software while HCLK is disabled +// 1: (FCLK=On, HCLK=On) HCLK is fed by the same clock that is provided to FCLK +// DBG_STOP +// Debug Stop Mode +// 0: (FCLK=Off, HCLK=Off) Clock controller disables all clocks +// 1: (FCLK=On, HCLK=On) FCLK and HCLK are provided by the internal RC oscillator which remains active +// DBG_STANDBY +// Debug Standby Mode +// 0: (FCLK=Off, HCLK=Off) The whole digital part is unpowered. +// 1: (FCLK=On, HCLK=On) Digital part is powered and FCLK and HCLK are provided by the internal RC oscillator which remains active +// DBG_IWDG_STOP +// Debug independent watchdog stopped when core is halted +// 0: The watchdog counter clock continues even if the core is halted +// 1: The watchdog counter clock is stopped when the core is halted +// DBG_WWDG_STOP +// Debug window watchdog stopped when core is halted +// 0: The window watchdog counter clock continues even if the core is halted +// 1: The window watchdog counter clock is stopped when the core is halted +// DBG_TIM1_STOP +// Timer 1 counter stopped when core is halted +// 0: The clock of the involved Timer Counter is fed even if the core is halted +// 1: The clock of the involved Timer counter is stopped when the core is halted +// DBG_TIM2_STOP +// Timer 2 counter stopped when core is halted +// 0: The clock of the involved Timer Counter is fed even if the core is halted +// 1: The clock of the involved Timer counter is stopped when the core is halted +// DBG_TIM3_STOP +// Timer 3 counter stopped when core is halted +// 0: The clock of the involved Timer Counter is fed even if the core is halted +// 1: The clock of the involved Timer counter is stopped when the core is halted +// DBG_TIM4_STOP +// Timer 4 counter stopped when core is halted +// 0: The clock of the involved Timer Counter is fed even if the core is halted +// 1: The clock of the involved Timer counter is stopped when the core is halted +// DBG_CAN1_STOP +// Debug CAN1 stopped when Core is halted +// 0: Same behavior as in normal mode +// 1: CAN1 receive registers are frozen +// DBG_I2C1_SMBUS_TIMEOUT +// I2C1 SMBUS timeout mode stopped when Core is halted +// 0: Same behavior as in normal mode +// 1: The SMBUS timeout is frozen +// DBG_I2C2_SMBUS_TIMEOUT +// I2C2 SMBUS timeout mode stopped when Core is halted +// 0: Same behavior as in normal mode +// 1: The SMBUS timeout is frozen +// DBG_TIM8_STOP +// Timer 8 counter stopped when core is halted +// 0: The clock of the involved timer counter is fed even if the core is halted, and the outputs behave normally. +// 1: The clock of the involved timer counter is stopped when the core is halted, and the outputs are disabled (as if there were an emergency stop in response to a break event). +// DBG_TIM5_STOP +// Timer 5 counter stopped when core is halted +// 0: The clock of the involved timer counter is fed even if the core is halted, and the outputs behave normally. +// 1: The clock of the involved timer counter is stopped when the core is halted, and the outputs are disabled (as if there were an emergency stop in response to a break event). +// DBG_TIM6_STOP +// Timer 6 counter stopped when core is halted +// 0: The clock of the involved timer counter is fed even if the core is halted, and the outputs behave normally. +// 1: The clock of the involved timer counter is stopped when the core is halted, and the outputs are disabled (as if there were an emergency stop in response to a break event). +// DBG_TIM7_STOP +// Timer 7 counter stopped when core is halted +// 0: The clock of the involved timer counter is fed even if the core is halted, and the outputs behave normally. +// 1: The clock of the involved timer counter is stopped when the core is halted, and the outputs are disabled (as if there were an emergency stop in response to a break event). +// DBG_CAN2_STOP +// Debug CAN2 stopped when Core is halted +// 0: Same behavior as in normal mode +// 1: CAN2 receive registers are frozen +// DBG_TIM12_STOP +// Timer 12 counter stopped when core is halted +// 0: The clock of the involved timer counter is fed even if the core is halted, and the outputs behave normally. +// 1: The clock of the involved timer counter is stopped when the core is halted, and the outputs are disabled (as if there were an emergency stop in response to a break event). +// DBG_TIM13_STOP +// Timer 13 counter stopped when core is halted +// 0: The clock of the involved timer counter is fed even if the core is halted, and the outputs behave normally. +// 1: The clock of the involved timer counter is stopped when the core is halted, and the outputs are disabled (as if there were an emergency stop in response to a break event). +// DBG_TIM14_STOP +// Timer 14 counter stopped when core is halted +// 0: The clock of the involved timer counter is fed even if the core is halted, and the outputs behave normally. +// 1: The clock of the involved timer counter is stopped when the core is halted, and the outputs are disabled (as if there were an emergency stop in response to a break event). +// DBG_TIM9_STOP +// Timer 9 counter stopped when core is halted +// 0: The clock of the involved timer counter is fed even if the core is halted, and the outputs behave normally. +// 1: The clock of the involved timer counter is stopped when the core is halted, and the outputs are disabled (as if there were an emergency stop in response to a break event). +// DBG_TIM10_STOP +// Timer 10 counter stopped when core is halted +// 0: The clock of the involved timer counter is fed even if the core is halted, and the outputs behave normally. +// 1: The clock of the involved timer counter is stopped when the core is halted, and the outputs are disabled (as if there were an emergency stop in response to a break event). +// DBG_TIM11_STOP +// Timer 11 counter stopped when core is halted +// 0: The clock of the involved timer counter is fed even if the core is halted, and the outputs behave normally. +// 1: The clock of the involved timer counter is stopped when the core is halted, and the outputs are disabled (as if there were an emergency stop in response to a break event). +// +DbgMCU_CR = 0x00000007; +// <<< end of configuration section >>> \ No newline at end of file diff --git a/boot_project/EventRecorderStub.scvd b/boot_project/EventRecorderStub.scvd new file mode 100644 index 0000000000000000000000000000000000000000..3be8041569678ece6130b0b9eebf0347606584de GIT binary patch literal 8192 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�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%0DjKqzmtZ+h zjBD~XTIi!2qNvG}GXcjmVK=yRTwovF_SK*yyc^9urxvCDXkD3{@GC#Vr?(&}(;UoH z*!CG&(Rf@*?r$AgVRDxzYP;707#pN!ovlA$z_cWyaw#c@LQG+MDwIazHzAgNYpF%4 zF8eu5W-b!6!1wWiCx;DZTHN#ad;li%N{z{mZY;?|Z7QkGs!ulQ z#}AZzA9tyKwH#8gm4)(KLVNJ8h;2{+-by&dMz$-`$bw&1o9vgLp^)NhObN-vezvxD z-0uH~S!+F>|EZIYF|gfG$07kk+?G;rwT_&}9QhdvY^iha83rBXHD3e0aQIfeT(lFn zQs2{|8=Ny6Q|*)8jZ62PA3XDB)fwVakG77~J%3cVGarU4B8Ag~hpO8Gky-;}WwWaWvbJv;jbzxqU(GO6 z7nyYAsW+pp1&M-vd|qkC3Wy#?R#L|uLm(%iIrw^Q?TR73;mg#%1jVS{(C)N|AQAu&T3$VcLX-VT zd3cxi3;e-eSleg^V>3c&5zEb5%u-d`3T%LGTiw~#{ytf`a|2$wh{@0WcNKZ zTc!Vn*LhZcGqX=MnAEXOszii19SGPVGz!3*q(XjNRq{zvC@D1%I3zWF0A970+|>#o z7t7KA$$|e9|3S&t`f>jFQodg=#cAzfW=FU0(^!ca$iPR?ulyM3Mdb6=!)DKBMj*HS zBooz+=bUDabiF_@!p;DD+kHdww{T%2V5=cqBAS!b$ujSfUnSe!=*t(FpVL?^ z5K9D0WD+`Y5QY$;AFM36!rM>VCzSFD+Apg;!fJz6w6HiuG%Q#G4y2gsR}GS0lQ?I; zCDgiDwBs9%oH7y0;u-1jLenYtqbZWvLC50M6gfAnGnGxX*dsazJPUuFp_J`+Hn3c9 z!dvzEiig(n#SVRVqe+@L8W6+@-0RLgVS;$Ly*-nC=7U8HnCM^L1x5qf`vb+aN7bg? zd4iXocoAa6|N2E7^B@Q6F)E>athdqn?}ZXea>1y9_)~&Nvxuw-8HBKMv+s=^#B9yhaoy0LA6PHYOUHe1vVr@ zM-R?dXw|!lo1TzRYB`~v_XAqv+vuqs)lN&FLqC;+7;MG6CDm8y(65wnDoD6YQxmZR zK5XTmz#DI!HuP_Ij(4c~6CfpU{KO5?v*OYQ|0X3ma^6pC<*1axhc19y#IKaXtiQi^ zAJ0a<;JOO176o^6sIEg*Y#&XkT;sO{6+{A-s#@pwVp|1VfF0fV+Ed8-Ovjm{HgdvN z_;$YvPO)U!Y3l5v-cLZ^nJfF4A+}dr3K(>^S(k)h3kvX{$2A?^Wunqvd$OaD+U$Dil~!Z3t6J!*Hzz6YXmp#PbgRYd}oKjh^Mug*ODtr zb5jwkAr(BumQr8*-yviYI-tE$09r-(P$#q@@4$Mf6nPIOQ;ksva@$)iGNz1k2Wj?t z$ev;Ij-~PU8nzJ@9Vk@Ce^HyxMtkFul5ltxQWuNw1+5FPE{E6pr$$cRr>3M}75UuZ zNP=GSuO)t{r`P z3MiL`D+U?H6UaqvNmlu#@?PW1y|B#vGX0vp)3)EcU3kS z6f1-eZp2g8yKRgDrSIHZ#UfiNNIhRpIlLl8o;F7BxmQVmRz**50 z#%()2xuY^sot|7FQ*_r74$|5a2nZ`d5EU(j1u;kE@4o>X_U!vx6iawhJv^6C3Sn^g z9!eQx`YT-01%a@rh4@laI8Q0ForZ15n8rL-fQ#%pN*u2@rv?WRZav}1TzPcD^l9Wy zSfiA(yMlLCX)_Uu9LyimQJPJNH-(bE8g5WbND^LX3@XpSy5>OC0Kh3;Tz7nY|IUz9gjr^tALR0+ z&j|p=nBim$H;!#Q0se*nXYhBxjSWi%x)qXgt`?L1k5$D_&~sX)A|o-5tBm^e2wO(9AhB`Qp)#*evNf zFuK@=6X-r~U2(u-sX-H#ysI?57_TF5(k3}#L#h@VgL+QbnM5RTOQRaLn#(5dBF5+FWt$}nqVf939Cvj+1WxuE=utSgJ zG3nTPkg$6o1c!v;Hw1|kI$8b1y5Cv75nKBqvn#V~KY&f+B=eh*!NJ$l?-uU?tUc*# z;;55NKDJrYk@jEpf;wkts4*Gcwqd-soc4uPq@O1q-pZ^LyX_$L32_RQqJ&+wBnHQ# z)ZO$x(!4Z@qyR-7Ll;m}KFx-(<=3Jw*xe<;gxWLRLibs%VtyJY>(I)_jW~Wqua)<& zSs*iFFPKIuYQlTlVOBkuzx5GuOA|H)gSg=(E9-U2;R!mwRbeEvnP~hHf^q!{s zi1OKJ)4rDfP*Qs?O>1r0yn0~vcY!+1`TY`D35aE78@aS1*(0~?peW+&!fly}uDz)y z-|bu=d)vyF5!&zVOyYPU!+xgWg?)1ZgZvPmx49H&Oq`dhhbl^i_@yRmoHaHufRgC$ zE8aCcb--Q1)}+hw;=;BPcg4n`c)ogMMdF=0wQt~|Bk}8{pGa98_@ZCM*IOJsIfez5Ne6X6YRxQFzKGu>XQff*cK_DYbm4Z8pJ`9{;x(euvgQY?#LduZav zK$XgHXi>^-?Pv7GQWL1dWL>sIj zpcI`300}AJ9ij{vyWFp$Ed`w?u@$U+ScvL=Aq!pArI^_{prSP)DSn*MMo5%*xSUG z$+P;UsJ}3|1Uu&})Wc@;4GNzlR<=*Kx#!V$-Dp>GU8eSSeEc+m^LCiVw50Q2u>#)_ zPrIP?-*(iFpWXes8O6JY9SBPKb)SR+vjQ2gld|gH{=9@(Xwn7snuk0Bn6hEH_9-4- zTPc1MCN_(4)C-t}lq=YSbdaD&9>!y-9?wc-*!HWW#b6(7N}oaEoD zA&BG;a$r`1ht=e!0mI$zY)t4mhEz14Ad8WC*lH!%ks;saSQC9VEZdooGw>?K3n!_)VX!m@bpmT!D{GtMIu?mrZ%KZox0$Wa@xp3w_TjtG5}i!v=P`U`31k_R8XRNwe2ESr(tR#LtoeXc+x5wf6OAnjgyd*m-t=fJ+g3V*Ap;y)t=n8CappG9BV;7)1<2cUL2Pk>9?HgBK(Gw zAyQ9LAK8UQZ(cPGY;n;;*Q|2+a+-$Yo2TAFQ$Q|V9|Xw{;6a^{kf|zQES9XW@j7H$ zd&dy26fLSRVH8MW4&2DhOyNsg!AOOG=K&Z6v!Q*VE3R(bBt_rJi&ro(+5Q9QBtj?{ zQP*GK+kiFSUUTtN#wIc5fyPX87uv;fQScXGxe{1ifDG)o+SJ&k?w)M@nHoKMjkj2F)=;; zM5->Jn_rLWF4@|2Gz=|8UP(B*I9<;TS~H>jo`>`H$YGPmepDg-ZO-Peaen0l(kg|sT+dIms-89K`% zF4xmA!Rt>!jbeSy%oZc+tYICHYFu%#3UsNSAT_s&4H3n_KL`lM%V#G2krGo(B2VeR zd~;goraF05K2yM(Aff2@wVK`mLe>|NK|`k6e+3X*g!Vo{A|paTy4kRlLPG&1?8vkkd_hmt4|S|Y%`h#gB~cyQqvOA zW$V2VOc;ze4ywoVT&sraY>JV?a2l$2xE6{%-Dd8FFvQv zdCK$NTDYX{{fh-j|Cu#ohu`+bRwrWP_M>;9g<|uM)Tp2r&nf^?acyDWKy*65oPdRo zB18+fSf_cWU$Y-o;6x`)s)7)E5Wa!>R8q?zF6(q$ahli`#WmxT7&R=;f{9^_x{H)>HiM(^V zv?`q0wD{!;X0#9XRDei$T%2CweXQ;RxN#mIxfsH3sa*+V#8A+4_34-~NQp*E{Rn#P zS;woilLt`vkeTC}p{|e1;&q*;Zt-g4v-dr?x<4@H9auJzeR4lG^nz=nbfMIw+awJS zy@e^=_glD>PW<;9z%LvKEF49+fC1{s@B09$s>JKJ;|`@+IRH~YtiP{cFt8ea?nKD! z)L1O&qf>uSGTF2w1DQaY!tvrUBgj(s>U~+(@QLl)T)JFmIGElI5(d=EFI3Lq7L}tp z`xo@hH7KjJEts7euyzDDyF-n2`;?BBr@AbUK=X2>tG9+dvE12LQ z{0{c#PNkm&j)I+L!@E};yMaqXe{uORL;4Avn>SG-y$C;kXXO!A?~8_9BCs?9P(_#~ zQU9o(y5p~Hp&4a?i0H`iDtSKVUHN#RLz(}sKWsB{XoYoUcbt+z?QJNFq5BHS;f%IF z;04RD!{3@-m1nU^zX;Km+AZWGxBypwmhY_oJ8jhylVl@&y@4od!9^Sy_htkx_k@d+ z_QQF#Ok;x4Q_xSPm&#D2u1)>D!4@Yf&ns?$5l7H_2k_OJT>u%{pQwZ(oyQ72MNQpe zaaxOkw;uA7{~Kr~_~9W8mQ4~M2NG=iSA!rAmDOcIgaW5IF)pGL`hj-rRlOOwHAlY1 z7_U=hIG*qthErtBFO?xCrV>FFxo#UzmhDc-yGMni-S?7HiF|9o0*(P0t$!Ny%=r}H zX-DGn6t!S2tvbZu6@010wcmMc7)SDY1Js~o-e5~4cx$IGK!tWW3xaLB2fVluKp+Ux zwtZtoiEvNP+%UFr!y1szON)w-bTW$$(b!OA{?2mo7M~AEEa=ZOl&E| zz}%tn?`7gix~J>qyq9!x&b8#gjyHT#&rFvGnDS&yMT;Q94uC1OFmi~Hh)p1PyZ;%T zY*ZdbY`<@97y$K92td*1a8wQ}3!jj;8*yND*Q^5U_a~BJtsnqg&yEaQf5g+b>m#ss zIu{{#_Z@s}%<)TmH6+m55xK3_4_lKrtBhJgn#+fmionx#SzDGzM-a68M z&$v^D;Ty&{{95}OKNL3-&=DCy&WUfxI`FE7B}}I_Ks0)0sDO@J+)|9ue6FeQpj!E8 z0p@8r%)w4KHI?ul4bT5|51QSsXNQxsdk|9p>FBHei`jN&1HD3>ZlWE^Caj`1Mi7pTtgcTX zl#rI6zN>fm|Lxf{8%w=~>tDY{JM5dsqM@}s$Tj+1iffSrX3Z=&LcN3W(r*YK-oq&n zrB6kQM7lZRz-g1!2Ct*Rqg9(b2#~F#E4a&M(jRlhnqq>5%9Nk9KlWl9VBS+Uv)8Qx z5|Gj&SI7NUS9Yu55i9D0q4HIC^5cu~fKj2MPV3an4zw2{s;Xbgas*UFGawI6 z8x_OB%=4TMm|3l&>#Ai0JTyb!UM0MBZBMmUZ$HVWjN!m1bK;|)jj#iLlo3M!q%Q`G5~ zA_O0E;vZ1b2vFY^fn$s@nFuJQw%F?9WbGnLmHQ%mmB=Rb^JpL#) za1I6oWngvIv zl;hx1pdR#~+Ba!aF+wEecQj&A$A9qv4_R?j=@IdGWw(lh+CK)yK_hBXh6f*Av#_(s z4*(UH^|*awyjb)2dZ3&w)TS&DApj@Qja}6nE?!fo=P2PC=JS@0&tjBtj!1dB6meWNw0a}((fV+_4MU5D8f_@IL(Av z__#Qp1vHgzqkb`+`>9p%1|JzZhaBS+y5@re015oe2x}8SaJmht^sJu9=VQAb745kZ zIsVg-UHpr~Xu1K46%c&M(j_1t4^Rt8c<&t@ymd_xz+I=T#0J)XAnS>Z!Dh_4UG;tG z1~(F`5+xAV1%|ajKbZ?+uB~sIYsKp%mw_wxS(diR2eb=>em}&T(S1DXXc=Hh#fCApbMx$kNWq3T)@#%b(|fR)jfa`vRTU(i1zfXsWx4;we(O%(P&e z52Xnl>(Mpg2x${vXhwb&(>(4y$K@B+OFw=^4A!5<@1I-!U*#lwl6$6rRQfs-{vIyP zQ^J|pVV(^JoW@E$nVJA z6A@zWiG!oA`psyhBg0ilCrJY?IsdUiy_DCZQrC?6OLo#5C`#oT|GC|bii^y8IlY3( zf5lpT?uzRBGG9{?Ey_$M4>F`ikU5<#f%fQ%xWM)8?MN@`f=9YGQi6Zms&d^F1M0QL z#K?>|ToV#odi4m&ZmcJ7w;>rkAoVd;eXM=kQrZZu4`D@JxW*~^ClSYLq>O2ZvkxKw z2d()}z_)lHy1$el0YgDOKO_xrNsW3Dun`f@9wD~#c4q)Gy6%kjErypDMtW707CeG$ zF{L2CD4X0??&0VZpIdoldjq%Z)>^ZJA+z+hBT!9)-zKf@ee^w~4kya<$REs928BjO zeB;IB)5>8luaRVp=o6v&JI_AMY}>CRpM|-$0#Nro98};>#1@D+Bkc{!(Lv7urh@b7 zu2@K#lG6=hBQMt*?h{p#pn2}{oa;YIzNfl$1E*_&4M|pr+K$=n?dBG_Rn(#t>~~-^ zl+whNhvYqXe5|YI0t6elr?&N6H2K-4W{sy8zhLyrn~bbRed`;YNtT^*L2}o`9s9F_ znJ9Ay>i;f#o7DecX-CX;JFr0QMJw6=gy^~ISZGw`R|B^JL_Y~TbjpdTa&<>i8lvup zs`6)L*0x7yIjc2gQ9=Gw#w^UWiZOUa8E?anp7zRd;sN^V3`fsTna~6UDbGRZTfp(9 zxx0m3wf4R=M4t+VX1d5Av|29a;~8s!MqxgGkf0=Yrks0!j`XsfUfWsbJ3|ODi_1}{ zo2p4##S~6Y`jq=*t8_r|ImfogSv=*7?K04p88?Ua^I8Wz%pmeSdsQ*-E+!ip7_JI& z#{$@NwK_5_we0PM)q<_{$DO9AnAO&4oa;Tq5;4NXcCW%hNw{j9M1yKr-;=3>$T=hk_?& z|MYl_Mk2!E62>^Wqw{v|kIh{Esb|`&m5>M0RKa-*cG801 z+49oHgBjG=>}#))RAR5h>o6~ziN!Wc_*6E2dl&aJl*#6r{w|Lch;i45|D0gWpY|i8 zxYEtfmw)CEmb4#_`f(t>WINgph>K-~+0N{TlXSb(VE&19>ZZP}yRNTZamZc{m4whm z@ztRU=I6@YK~uyf>#6LzH2kWdAap_SpkKnJMmJtvWQ1wzG&$s~xDY=*puF3~k`0)N3%?BOy&0xI+8l%O1sh;3B}4j&L5*M4=`ko6if|>_Hb}s@JY0DU z5%qMy`qE|zl1sagXALp{trWTeP%tvGeak2YN20kk6Yt2jDoh}w&%vrWItC{U2bfN= z0Rf8`aG73xjqHC!Bt4UOozme1jDw4}C*<>0 zlT>Ow)C$4;1~xUk-^xLzk8+)Y>me-i8^FJaFn$|Ex=$YJ!1nJ_d>bNk&ln{oPD8hQ zt-~v#n-3Yjp8jt;{ZAI4`j8PK3716xSY(5Tv za{>_8H{>tk{pH)kKg>NGPfaX~#x_;8R_5i6yj5o~eI>h4VGrvc<-S(@Z_zk|>tr2j zqN}9@rNGGJK#ZPOBsS;3GBuABp$~fB#%HIHr*M7gl2hPk?{vd9p^Qx7(TQ3l`vS;D z0x!)P)}2bUvp%PM0GG+Jf^k$4$?gu#4+HBES=cwzvnQU)L^UI1*%*u;MEWH+Ji#@W z>y6v_k`G_q{WC)BGhQ*l-kav2vB(ew)u1!mC^F_cM0>P&?TxcB;e?noXSt`=ZJ?ci z?v0-5l~#VBGDCgsfChJ(~SE5Yy&RE z!nG3(l55bb6Bxi9?pVR;1MgijuAZ1Sh+1^$f{Q%dw{wVxqCB=`{SZsXcVtH+H3gYC zZW0f^4#V0Mlqw~BKWla_0Z5b`u!%{_^ir-6G_}6Iz$xx@3Ss+DK<3=>+<|Gbb49q3 z6+yf$UvV^nTH~y+;Yhms9BnSYVQ52U`3Y((3O1`J-WvzVS_j^~3a_%($SVM2skY@a zd|fE4NuqF%!s7Nc-MVInRmKjuYVQRo5ri58k&e@Z4Y8u+w!UHXIpkM=8}D}uw)aKM zOY@(1-TKJ5E7L)a>1p`sxi^;AAS z$|U#S23p};iz{j<7ssX7DJgGWzAJcDWTi|xS)2U@b5hs((&=-5QL>57UL?G><5VnP zkVBAEv2}f9TwFHG@flx=-n0&NwnJ^VCp-li*!bphA6$+xDSl&x;OiwIu7yyUAO?%| zyw`!Nf`p*b-O#vuBpQAtp$O=9Ltm|+V5AeA7KdDQU=Wt8htKd_-~u7BpR5ZoNoiX( zi+1r4G8$2lLy)1I_i3a`gfT6Pae0suC7!T9~>M+mFT)<4Ghz@Xb=fE>}?`7a2y z=MB_G@QA12%=cigpdQiuQE{BknwP$B0G7c_Eg$YIk95?S^keayM9|OmHQeI>Fd^+z z(KUFzsgcs^-V7;W1kzHN-W4ezxnYj2q#=JIsQfw(z87K=JdenGWXX*q8$gT^ zJnuB;%rElx-wX?<$EHwP2u(=<$l;{tacK^ifFJhq7wYin`BqQ(r7Meb1kEz@K^PXv zuSd$!1oGH9i8^Ppw)zm3+=D|veIzV)nuU!^obd)DN&+%v+4EWNeD%BX=(JH5#zCI2 zPb!j7>_X6q@7O}pk1YtdhjVX28%LMWfrh<&xiiOG8+@^gK&5IqZff+|9t1p=J-tDa zO789;9O`wU%XXh*%jz`_2{+tf)1;~iNDOj&>QG4?&2NR}a~ae=*NmQpfa^_VB6`*X z3;<{?VuL>s(*Lq}imZkd#eLLfc2;}@v6idO&m;w1E}}qqUFh4iRPHOin(1sj<@-s8 zASB>ZF)&~|5>&szHy^*q=thZztmcIXQ)3{WA>ijdwiwp`jcuB;EWLGcc1SP(FY7iV z#e($#r>`J}woAqI(Yo=x-S=St#hmtrOLTkBl;CRtyLL65rvuAnv_rG)5f)C0-M&EH z3I!5ir?p?<1v6Y$>4+PcXB^chKQl}QUs+5m8Fng^AJ*pdh}Vcnlou1g(HMnvq=^Ou z6%HZAJp%@D_EzyKE9G?TGq8hFZQ}ItJg)S%M5s{3e14RC6*AD|Gb;n#f|Vv(S%9#@ z#>paIEa-jN=Z|fvpxCe$q?B=H19&KH-x~XIq{X?!$lCKjkCP?fZFW=4Wnk+7 z1y3!#NA>g+gnbHL2l;`tz2g<-nWPtK}9WYa1vg>AseZcwe%*)&eOVe^qr3!-XR6RQ2AQnes9$ zEW3RFkXU?hHnrQ;)yuep$96DcUi$+gUvkYywLG=(&H-5UXb6?JzU*XrZq6%;V}1M?iuU=h9am)cbIdeE^QN!0wyZPxucmL?;naQXJ3VV6~BO% zEO30ALwmco<6@x`f+iBecx(M>Z_J$2bp>Nzb391hu^9}Y2BYaULR--6VZu#3 zqZq*tR*b8NDN{xRzyv0=IdS6c?%yG30st7Tbtc4|(j#c#!I!XWXUizPiRxm&I)#doc*~sT z6xXlpjvQeqYxv_)jcvIl*&iT381M3oSJ1*G(O0gN23L|0Lkz0nYx5x}iQ>DHBJ|bY zd403ib*JR<2(JHBVT-8{{t1}PU#&SDp)^{`j z6Qr-63Vz#{3+kQFOCXxRylXc?mcPYx@Ly-QXp^fe(t#F<0(cw2;Uqj- z5+*xHUvUv+OmG=q8(~>HzZj5eB1Pl4DP1Ci6}%Uih4HJJ_h`HuI=av>I5j&M*yHGy z_-J~#(4*xA;SZtIqb#n|#TL9^Te>&|%XKa*OdX15#~odHqkr>H-6G0ihwV3NHZO_j z6RNQRlN8^jQVAH>K33mt=3$7vFj|KTH-q82AW6|n>ivS=1=X$0t`?LT4yZ?q>nFKlSGA1H|<<3Qpv9kSrdr6w3RJUXQ zWt#4#;pkBs8W3ZRl+}%*mZ)NSjnA+Loa9jSl|9;wixv&3p1L1lIz>o?5;r2PaVhA3 zT75Y98vP{2dxjstDS@_kybbH*0fJ*rm!l~_Ddd%nq2!V2>ZIq{24S0vY{l87XS&Ud z*jTlZa}{^uR)>L-6Y=dSU-J^p;_G|MKddu%f^Um-bSjM*z(WHPF=Q%c09^Si1W~A} zhIOgQT`f8=250(v#BnNzWmf$nCG60iS_Q^AkEKiR^Zyw3+Y)aXhiQVcbgo zd;xRFC!{vH>%U{>kTJE)QJay84%=9=yAfM7<#5K?$nJLbijhl6+wnadM2ixaTxV|e zRHffh#;2ib)yI+UR4I!Yml_J@N*o?~*nmdJjA(BK%TMcG>!~4libOtWvGuDy8x{_1 z9B(5g!Cu@2i>cJ5WInJ*INXz$5*w?jrZ& zgr+u4`a!M6i-7KHGP&BeglK#^n4Tt#hjeWb9|{|&923-$r8CG;1W*lRPtRL;n9f(v zc4gfSrCr@E?oM~EESKsY6ujprRxh{u3^f%~3l=$`|4o|3Q3EQ`-NR6yQ7aD6Prt2y z#LydFl)V7%lAwv;R5khrwto*WlX&xbRm*CU)n#6)5YzY}bq^9L_$ zTGOjRb8l3yzpx@4E<#{&eN=XUUv-h7_r1|ag$scm<~Hx!=+q5t`l_)HLO@}$p>W&B zS^5R|X%G?23!1L#h~m$cAGlGwYrzJM#gz}_HY>ijQ=pC6shm7)YYQWL&r#QO1)OxN zN0&A{f}=s5RaWDh#xJv9)4H)|l+MY?Ba!rPn~W^Dqp@3q-vk^%T=d2=#FKh}auc<~ zWd`sO;b6ypV|8*Rt9lQ#xBha(v7!-j!-q*(l5(WjCsInygKCJN1UjKUrL=MFl8DdU zXa^n&uefn~demx1Ji|IBjB#20tzg=*zv2vq@xjtLBc0SKvnYnihgL0}grtv+Ak8_a z_hoVg0@H&79!CM+YPWwU{`}zK=Qp;#wn!UBCxUl~8O-4~gA1c-?U!73Uu^X(RyvB0&;kE(w#s#AkyYVgoKiRwmHkwgxeqLnyvop8(dAR6XeZRCKLqLD*WP+L}rf z4HtIn(153?jIB1@t7tlKZd4KV2YsT&lz~w32xEVh>U42+-utPRZ{1A$|FzZ03-3fe zQK1kafS8{!O!kW#GcV&z_YH&^P?5CEMD&QAyDeOl7cyIp>DUQ#ha}DZvXyEXoPA^= zWUCya0~S(xu;Lb?ST$$34VlC5p}XTvM%&b->0j0!%%*dC-hUdUo0T#k%(C&@9=UYh;LfK!@gQ*%BX>F{F1y+|A*;zH~kJqiRqS2J2c`V6#sh4dEbB;Rvv#pnZR;ZcwC={hH92= zK>3ttKmO;YfbM(;-j|MmD}Q-yKdOQ`kKr)z&{9eCbZrfH8$}t}54)mO zq#Pk*EA=uBXvro5aBnn}wQLv)M(y%*Hne`q4U$uUMB;y-<$zHdm&cL{Axx~ax!IW_ zDlE>u9%>`4oRudLD=)^cUwXWD(#>HcYIz8@hoa2PBR)w1Gzu$P{VU&(`-7Z-32jF3 z+-fnsHoJ(&BdT+VNOy42P#GD01)Oh0X_vAr=7mHWv)T9*K1FVOLEdE6po|I(p_1$E z#<*14XwOMO(!n}CD{ILUY+-a5-{AgbaDRS$`wRf7-WS(_u6vqY$xqQ=-dK79=~GPR z$6P&HNk_bD%<>4-BQoK{ol=58Fe%*SbXZxsD~p>k3#8sxx-x)o^tU3&nJz}=v43Hs ztiGhW_khImJZX7F1=1yUImp$U>w#J#yqys>#0j*HgC8VBN0N(G{j1XCdemQ-7Im>GP%$bWESlha(+% zTA1?es=Y3Gv$Ae=YA6r|?EuDCw5CRj{zcxo3s-9xUG}Kn%5O3G<-G5F3!4x~(59dw zRYV3?v3HQ;&M%Q6?+QF=35s2SRS)!4lqc0+B++ny&jo=04|i>O*n1c7ZLFf=Z+kwdgIB6dtH0`ssFPQuaZXa|Nlez3kOfPBLLFvzJg%{3 zEDvQo@!Ht|E9Bu2!54-mqE>tcchL+0jC%bBCxInoER=P?`$YUtSWa}X*t8-Ihz6tA zX+xBBAR)TCy9jC6x~X{88=J8BUj0d2=C$D)^igrJiO|Bx&FhBb09@!~Vh&HeK$e{_(FgLfC z(`(z)#bMY8;qT4kf>j&8i@6crM=NDkGjC2$cr}qN>ro&!`lQ0J_N{Cj2gm$ni2Lb@ zNMZFlt5{mkmKM0GxoF>@vCOaJW4|yZ;aopcjhFv#GIvjSg>6or zAlg2ScoV72l!!{)MTFxy1wi({43{vZKPZ($2Rk9qyUw{ql3F zhB#1=zx9Pt%LF*Q=Yh!%6#QsCU-Ihr=W+{n$7XA7^$-Nbe^YrPNV@jN9|5EcJ0Uff zsut@@>sX%Pc472U_F>Ciwa$2XdbE$ZKJiqnrg>#tz29zivK*mf(9^O&aR+A{Ax0q& zM>0(iO?3F!B|bwY1_o-`xLYP))#VC%H=y-(AjAVex-N10$cI*~D69l1 z+^aqTmQN`RhcD|e?G?G6v3r1g#;-olyb@3gW%|1v>SNjLVdq+LVFdMsfTL9hmm#4f z>pU*~rU?nZWdu6q=+`0_&;yPns|*Z92nMlqeZ96(^QoWpo66`lh^|rgY0HUT{Q(!~a0HHHv+@uZI+x;rz z_?1+7sGT!8WCrZvPH_;1rFzy^GY?>cg$Lo$si=$@M%~8~S+!!jn)sZw&H*M+A}~%`M6J*dI>3BsBue zKa7y`z+EN5J6d&=!a+1K1=(1;Oi`~K*s_#~GM+d(m895u5vluT8vmVMU&(V<1LupY z@g)8BZ-A-q3fzKAj)Pcj&K*zlB`|s=IaXH`*8L%VSGg%lG_&O|Fn9YZ;G|3Ub-z(% z&HfTN@L;*g$!qsXJTu;G7I}KY2~AvwXRSjYHGXXnmA46fE?KyoDu+*iO; zQ(YR9oXnBBDwtTCYxTAC3z9p@ze_N$DJ_fZmAK|nu5N?jAAjGz=p#Z1xdkxXSdFxp z8pjX5Lzc^Ej}42Yc!~LI~^bPspvx)w3b!JeHl(QT3E@fOx+ocqqQbOE7;mOrTMXpGYc71k3|q0qO4N4LT~O8 zfTSkV&NGJR3(FKcr(C+fbP&ou>^31GM&UR=c3;8ScNQ^v8&1?uFLGw~|6Iy-{$B>R zSXP_X!~VzeMV34jKoZFsU}I2O zL?vuB5nE_sE|cFYAZJR7~Xoyh)_ zr+S+0=jj4z{*vj}(m5Su{86Xms|$NDUA>pT&o@&XrdP>X*g4&2H$uIUQ6s7)J2Qg; zphsa!et}dPG64KK0Bunw)dK(?EVQu?tVXo0m!kjMKHZV4L=xt_rGZ+;7?XTQF$r`< z>Crlc4v&yd<@oMnn)_HvqF(R$ldeok%d$i`jIJ)q^9h%QDv6KTpRWYof|!(~K}=e} zSwF;8CP1%**|{Y-D}Cs@T|mpa{)*B2nTznXIbfdLnQshFRE zZguoZtD%*T|B*cNFe(&6)oj!8UIYKRO0RBJs&mk|@Lz)uKR5Ri{9ofT20NIesA5c` zi6iKHs9(rW4nC&Pln3NNva_WLDg@OWIo7Qf3`H<49f%gpTZU094BVzRdjQsI_=5a*(vS;=5S>~nQ13-XrvX>?&>fW6qP>g zT}KC?YVRI-kP8OhJwjpww(90HyYS|i-ynjo#&3;s08aX6uLZLu%w#}zfbB)2&g~9` z-wTHk)Ow^V1DuY*xX>V_tuQ%It)b=B4bX=LL4}FB{@kIlK;~x!EjBb5lk#G`-WE0_ z+2pN1#DbwbT&Nlwk_Psk_>KC&h8W`~j1P11!J}IWZHBi;^h4%et2jsGh1=vHUk0`iz4b0>Hvn)iHiI!I!k7Pgl|>nZV4;)q5Dzi0tP`_bD5(ROIYCM} zN$VmM8-A@S=~MXXZs29678x9dEbzo!bhg0sip(RAeXYLLzc_{td%CYask~V=m_v7L zHg}ShC>wx4je3P%l=4_ZjhPftH=K+Gi~IU*VoR#Vkl{;N8sF856gLP%xrdzIovVKU3eq3%^@XAniW3VWeCXTfkFDx^!gH5Mx@!d>1#b859u6Gr5|oEZGNqO;?SD?R zoX<9y$+P-+W)rBrzjEYAP06_Eaw>ZP@-Xizq5vm7@OR5nYi4*S6OMB0{32L>KbqW9%PXxfCFo9yZ%lF9;&4uZ1H zSH4SCW+!iIhJA-<(7~TsA_>K?lEriiPov3{O6U31qlhtpkDxJ<*p})` zI&rGieCa3{SR%%Y<8c}2sX}YlK=IYUk|39yba>wt?)2vR9wi=xu&IXi%XJ9Ru?n$A&OR0pvN-;f0~cF6U>=q`GRMlB!5v%?tsYku=Cm zVNSYnQ!5o&ps*ilx@mvXhmJS)&U!!UUv5`o90o{zo1({(|jj-hC za8kP7Fiz4y+lk#<(!t#xm#|vm22~PS1XqXrLzjT*0G`vTF-ae#F4i&@|BRws6AY>> z_afzV*oouVo|VC$H>LoF+;i#eTI1`L)eH3jFF*mgy(cLS9~7)^bYZ3Jw=E$-bd@V%hyh-{$#LhqNqs<9F*ko5wa zZ`h?GzLl?Ty5pW?XS&3*i853Zcv0lFc!PU=u>$l=i~QTwdj>SsBYDn570?6HFrP@+ z?UymKZMKlY=w9y;7qg&`7i9a9olbY?l5Bq>hleZ*)^}9|cIB1Ivhp_IF=MPr*M_a< zN%n(XVy+m>!;gM+ru#x=>uCwh{5_mPQ%7oOv{pqfa%sA^M~z+jI2b{JV0*tWrzQu` zJ##>27Hh(@|5i%BmT{Bz^ff_@X~>1;;b{Pv;Po=OeGlhbmuScp-JMl0(|-av zc9}92#;Pb#X3uz1`w@;RRi>)ggsO)ZX<&py^J^{s7ErZ|{8FSSdY*kqHB z6{n^Al!$&8oHA28k-CUDolDaTyz?hW2yRo*jv>rRQqU- z30`ew%bOCRW zAUU1m$Y}AZd%BTEJYBPRyX+vDe83i?_JDsUUXsA%PiMUz*`4FW-Y+v}fdfgh?RfyC zbwKg8ULVnI=($_lM{c@XH-W{9J}sKY@fdpO6Li|2q%ImSz@K2aij1vcIcLmNj|^%} zhy8hLmmuZJ$L9&6m+d85jcBFxnpSck2B5Z8D1 zrL6lv$m?!yVo8~_SF{;~&#>d%Kow<4o~Sv-eL%y*sXkyOg=0X^6BRoSxyn4|4gPG_ zy?*;{+-6`2uIjfZyYJC>`vVkO8^gk|9d3Jvm+4J04vR>b!EC?(Wg4fFGn8h7o>-V+ zStr?4jU-kuc0$$R2n38){ne!jMB?Fpx~B~J^pz0+FGMdrK3PSig6q;sm@?fV6rSsJ zLj>5dM#{1uVJ;H$5!2P*;FMm>IUlfOR>CA}4_LJ+#W5x(B&De3>S;5d9P#|=ps!l+ z(8_!N2;~-BzoVFfMd6uXtu7~v?U_{zY9IOjTPgJFUK~3(#yey8C%U}lrLey?3<2jF zSjP^2Z@9-47?!qfVktoh&kAY-`Uced3Gn;AB&ko)uCqgz$k1oovCC10WGrHdr$ySn zj@0k?YZgr}^0huap{SmPUP^Mwdfc=z-JXTN;gyyi3vceMFEnt3)dDTv;9yQsEW^9X z5)BP0!?+;={`a1(J`!h~pUVep=)C~y*z!=WWct$t=A%dN)W<|r+!k*3bv(2lrRQcc z9C|n9~CzoRm^ox4kfQlgDxada*_Z8{EL|Zha7GXQJ_>sCKAs( zo+5hpdQHw@F5mxUJA_(`i2)k2op&VztmzQMu@A)9|A-a7x5fp;nMu{Nnp6*M8=cef zaJ{CZ;75|LfJLzXek2I`^&lr^FHfLh&q5UNkYQVF^Tk`P_AkL(aK0`0nC!sKMcwb7 z?hkU@Z5+GqB50pzMdjg}k8f8HlcM`KMc9dqQ46J3(Aw8L1Y}cGZ8LZmE-l$8mdkz< z@E3Xs95!~=D%ho*Dgg4nO-0&#OMTEqP)o^emlZ!5|3q}j0G2HRA=)<|BW7|k~iA(}0-7FxC!m$qw2 z-AGX9+}JWfNvHdbCqXh$|HOmqOM9t5b{wVG)=Bs7lRZr*VE%TN2|?KGhEr--2IqZ9 zw7s=MyAI*KZ+J5v3aj@`N&tg=6M|6Y29nhOtpguR4QrraSjXC!&sZP0A~{THLnqBn zh#K}dtm)tA;lJ&v7Fiplf`;A0oH>c-fs6Jh|A7U-_1$BCixGDvjqAg>KHTK%Qe4a0 z&?RGwZD`%3SJDapa9@#8F0$%!H@MQaNU@So-@{*FBx6aI)lL+NV3kJFhe$N-uvr!G z!WeS*zF=8}S3`&kM59467UWHR+V2mQh?p$~e7~UF@isCWaCTVt(9iE?w2~{iV%^4L z?l-Iz?@@5hA%t(-NJqjYBM?+2Jnx&H zs*nK)l1`_$$!e|s9P5XZYBo`wFBkkziOMk>E}VpZ%5=6zdW2@pDSe4V&P@WCzAeoy z3ofSU+&n%8%$;4(C%bp~EYu)OiIw(!*vJp3IuK^1ccGYYjECJ9^KY0jM44G*=b38l zQZH8!Xh({|ry(jc7q-Ei+k*8UGE&|vtQ)eyx84UhsYf@ z3CuR?Lu@RIC*}^42i=qdQjH|zj=31}KI`)Hrn3S;#Ym~%e-;1TK6_!g&-?1OQ2IiM zN09j9JWe#QdRvD?!kIDg9Egm1q#OaP`8R_4&O^EupmceS+(Xz-350lywkUU!rq=?7 zwwjz$Bc`hFL3YL6RPNX%?u^Hjou6dSDPsm_vHG~4KO1p!5*~fQf$}pyC^!*-=U%Ef zSA54r(lj=8{wvC@1A`Wvr8;NWAf9dRs>0z|D4VxW?b;LYo5H4FItqApLZtc5=f{%aAk1uzs7R1%DBf z2$YGasWqsdy*@y9plY!Ek+rxtkyl~VF%oFH$h?DRIdVDFTgJE`oNd9i0vhKrkQyra zMeS1e�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

3om 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 literal 0 HcmV?d00001 diff --git a/boot_project/Listings/startup_stm32f10x_cl.lst b/boot_project/Listings/startup_stm32f10x_cl.lst new file mode 100644 index 0000000000000000000000000000000000000000..ff1bcd05fa407e9f5845c23f0b130c38fd7cd7e3 GIT binary patch literal 69632 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

Oc39xTp65)co$>xC- zi5PssVEnx77gBxhvHWJBxhd^))-1^g-K$MkImfaroUnlQ(z9FytnMwhIxZLNAJh%G z0Bp;NAcco^8&4pL)`F;S2@Uuj6@A|?LX9#XFsweT$4QL;EuV$^#}cNESLNypA1_`d z^C486+t2J-)^Np)gxKKfl*~tk=Bnueq)G`%KtB8t@~`_;*M55uY5xQc?k$7uK6e2) zKqYaG3o)Ua-alY}jU-@hF_Spd=};5R5k+&+jZmR17jT0!U~7*9f)FP(TX0RqYXi{( z$=E=eg^_xL2-2l^oS75u*AV)}*>8|dJo%(X&16*X_e@!0h`+5CU2})hQvJ16YAirN zb1c4nZ9bK-P(C8d z^c%c|rsQdoS)k1t&ILjh(wf+k&ZV;7ONA$myOVEROEp{?Zh)+c?MD?=CObernI+)~ z_}N6I%ygR~A0-}bXaJKjL#dTbu@9dB-d|D{Dv-rnc%nkJkjCXe)#H(l)R01RWQ1;i zw3G45!Vm~q2lH$_QtdRJ@P_C~4f{z` zM#|`B(BicqMbCVA3|StGGrLAeny8DILQwio(Cn5o;2$N4oTwOW@V8-N6r6L9r|I=B zN4X*(`^D_h8GnXvXZL9^l@7wY*#!Jf3<251AQT%y{+W-OlfMAMwX?+Cm$l8unmjWr zNnSzxz~`D%#ONsRuN1(c%k9jh)s=?-RxLG9?`z4KkKk!xAb)Gl;v zysb;m4U&057-p8KWSpvJK0QDEIPHCY;%c$#+m+lUCRiA(^!!Art#BP@uSo~o@78vi zow@CSRG_LgtC3GqT89r`uFW6Q5DXSBT!;mm**HoXb7qrt6$av@iAJ(k9(F?W@eRu_@zBI)(qSp?N44bSfJ0yw*BOI48rB`fBIMlDl$ zu#)?D09Whu3QV!wN)e}a_8_o& zYxD;sfY3m=CmQPrFCCsQeVlI#mR6Vu`985AyBFX5XI^FFq8e5>EV#$eqgJ0HeZt@> z=k`zw+E=w^1l&9+G{M{z)`Z;gf#0nEJ%35!E#;ARf`jK@z>9z5cnFrI&QAC~QSNQd z223wQm^OT%U{T`c{At|l-FA%xMx&IzMa4fp9B3F%*9Z3vm?+9ZV)fbxkbv@rq`JDi zar%=BC4(4_lHy2o1w z+*lXIU|(@V3NjiOPiZa%|I8YI`|Y9SMnB{L5@L4pog0K)C*v|~ZVe&lfHju)$t58$ z9;m!;yEm*)t4dMahSh+Z(z9HxJjoGa>Mx_>jKQkL9l)V-E=khmSG|)ve{dG`y6?J% zNxtD(2{t^8Q9mUBKIf5?M@{1}rKDgS!FaA*C-RUc2~l?)On7;r&nG}UmpGvsqv0gY z-uP5;m!2>5w>g0X=3{(P$^BH;F#W1 zAl&2FbSZA6Hr&#^v}LH)UkVSW>NToJ z^~`!BK(8i_yWi$s1qBJm$0~;7;GB_qXKa)F{*!O$yS==v+x{CCKQ|oj(3lO@+JH;l zm2rNuXp^f1^YpZ$socp1c)c{$@h5Wi-{c}k-JSjz@`HgE&Z}(grFo}SVM3U3WLx3v zG&am{M1tS6^c}a2!tyNv-^3oK8$KE0+-05_39qjsai$6$ZOehM2FM$sYv$y}L~XkL z3cjA5je=tavh)x*UQd}zrol4KfL+-E&|Cm?FG6iy^h5XpZ5D8!G4)O?B??uMjUcEn z2f0b^PAY$Vwb2>`79qDC)F!B)U@wn#<4)CFGcc1uqB{pY_5im_Pl10)=hYbOrv1ql zb3|s0f2w_=>3#vXqK9)H-dvdGNUH?7S^&zx_nvL zp=|qRTmGnHVjNDQ7J*B?dU$cE#{ZnpjohG>hzqH+9WT9jP_-wWo{p!Nkm{dQ2TzXx z*qG-0)fF@6=LISUwz|DqUsIK#_$Ly6|Z$u2<(l?4C$1dH`D&b zuK=oY9||W5j6xaW4TQS^6B@|Co@mT|g89&6fFl6d4vYc`Q(z|j@Oa~OAp6^4oFVWw zLQq%mg<{>EbMrK9h-3WJRiGdYbki)pWR=>jFLgCGD`c%TC*9pyWe>v<#}Q`n+kbxb4LO4g#2sJbHLk zeiv#ayGZgzXH${NMkES%l}(+QKhsRU2Fs}muRHHV!gfV0!Vk5#MyZgO6X?{JS*q3h zRR_6F^69)$LU%ov5h^etPqLr)_hjI*YzW$uO|=ySWK)F(*2c3J$W>)H`(eiD!@fSNN%BM^yGD82)=ioBUS4x!W}N ztu9bw=NWJ(>D4XJgRui{Zooww)9OP8Gs<19)2k8dT004!>TixE?Yfgk(Ohoz!g zqo5L7P-(<)E2+6+CssLdfEM?V2a(NAiyNqidXkokA^e0Ig!Vc_Ulz11o=qnil*A(_ zK8RQkbnCFoL~kkSHlmVYTNFtWKH2O0;r6X@@HAZ)WvTJ7s61_~sw8kK)VTfNbXL)K z{_%E{GE8f#xIIL7`Jvy($*d^~(IOZ=yl_j{2j|u8=SGL9Wv+XPNVmFFKf#<;82<^` zRMZB=P}sulTB|8^AGq0D4L6dIfspEF)JGMiqR5hxc@vsd-zAV~72(PmLTT;RX0VSa zOW+45i<;>e(~r|uSX`wkl7n@P)QVoutAoEy7+7)GgQCgCSX0>u3M*lktD1VaH+?^r zED#uAyIvvWk9Hp@#ON)cAqrix!&k(LK6=W8rBDw=Zx8=HWStpmN30^%)ab1zqJ$rZD%wlA${;h{o-*0_GC{8pHxWif%RRJd?t?@@5ol|# zatY~yr2c67e1Gg@vpt!rP-zS!X4c{TS?*~Y*BjLEzJ0lX$X$=6?C1_ZC=) zO$?&)xzy1$wx?$!Otv!^!o?Nku%*4<$WRcqv$1k$Z(Ow|Ivz3K8@&Q05#6Y#RG_-Zj?sqav!`3-*Fuu@|E6g7KSh64 zdF8V7h?u|P{t&lV$U;Jd=TLD_Gtri1UL#nTwoT(C)unUw)uXH|?Ty~bAWqu7xy7=s z9Ktb%^Gv+IzMiGrZ|;=np@D@KUI ziryKx1>V~@bNR?Iw03Y_*14VD^u7a~KAm0y=h)W4B;E~eza`*fYd7DSL;ghz(RYH{ zqkFAWc;Tsb`$F75$jLxRzI3W%>!5gIvl7Vo!xw=0>+)X$PiWa?U`l(KB>;y_sgLaTJO4da~ zp@+s}^XG|}qBQ4CB!$#JszJN(S7y!^9SX|JRkoiHt*<8S<+6aGi}Sr8TP!ED(?cse z={DY6c;C0U#k#8UZWZb{#N--(Lv>t_#dp<$-l+%_&^t7EiVGi-di`lIYaG?u`4ctH z2JoxbWaotE!UIV_ZJV2Qmw=k$_Iez(3n!v=jAzUITshwRHekS^*s@fLz&YWG;J*Z{oR1J3L}!|&NR?(%7zS0h7}sr9%cECKi#RMf zTltX7;Jhp~P8k8SrK%04L-SENR;&&iyAeZx&5+Mb%m9f*ld9YQs@iNzrTPC>#v?jADq|XnsWrA05oA?gVU5Z^BOr_4SJq}7o51?P?5Ft zCJETr&js@X(MSEDzujcTbqLd4jveds-&gEW{@Tt+2k( z3L+#GC-!P^s6=I!OsF#WTH{0=kginXX9j#yt8sa-W~XB|LS3L|2R4oOxQLfc9BW?P zP*qHeG#R>VC8iy2*3_Fx_vkBWdQCgaQ8|RO1HR;@}mD){%}k z<%_JeB{tN#95F6V<`}J#0+F|Eg)pe^=t}U#zq|zF-8;8vt~p4ZoZt?@h90D8uaj2? zLT3)RK-1auj&hCgr(ek)J6Pu2==VVjlemQXe(!a~H_`<%B0$3y=*F~)$su5c&sNf} zfnXq<=Frtw&RCyoF1`vnbBp%87$~> ztlD*Aw~b}4Ry5O6N;V*?fLEtX!HYwBpDG+WhH;0{^UgFOJhQnRMz9*_nu*OU0sh==&ATO;qKD7NkJK7I>6Dr(j=-%(Z}m)^Q%GaoYGE!zu!(~qS+ z7kC)xi8TX^6Z00+zibxV!%#F;AWM7w0sq}48C1D@er0olrdq-jDtuA&(6RZRZ05lg zP~D&<`VzY8(-|BP>W|ks@mqd$qFc$pHkGU2!te>Mbu}b?^^n^14H`ftyg4yYiD+=X zWzoj`l>qakoR3vM+Gmt-AseJq!pd}dZtu62gj)q zh1@FMV68VLSEECU^Loi5!eUK@w&Ue{4vbq*=Q{N0g)o2c9Knxm-OjKlAgLZ3A~~S$ zRfJYDGnm1H{&x!qX`9kB?jK!)*QxAIRzREGKNdrNJo6SY4Y!^cz1~kDK|IiFKJh2^ zaxU)Qz?FGew$V7&gTO4^H0-iUzrGn&CS%-SuE4r25j0?Ki& z=S4AFt!S#mph@V7x{QI7e^;~q62yq9Y#F2DiGQDs_mwT`H(VH4hT;OS+2`4(3PpZj zJ_08}PF$rtRReOTmDgbElB4`&*fbv1c}x(Lzn>Lr(QYSP9K(KlAzM*ywRux*?+lFY z)IRUzbWUQ;YKVZU2@mcd(UTi2-)>|FVAi3igO{NgTcH@Y<}8nCiB5fTU;6S|B3F1@ z>klWE1TVUn$d zgYx`lM(d-oo#`#mO|*pQ_<7C*-O6fZX8lYZkh;^q#KU-n%-^kD+(R{?+;KA(27skC zf<}?D`>y~~>W-h_XAyAb8&XuX%XCEp^Kux9m({}wsZFm_$bH;22rSDcybJxfQ%P3S zr$%_!ZrMmd9kk6uuNe;pp8geWP;R;SDQmMT(`60oes$`ovG<24sP!NAFxlBUX*iFqJD}(3G+o*!v38( zE_4!FXiZ<-LY6ry;V3Qzsfta{r2(W$(%?O};#80k+5K(Edw}{Ef@eqg#@aL(C z#@aQ0or{ya^UM%pmNI09sjcB17x%N~+W#Q*NicD(MoR&w1}Q}8^#v20=%Z3NtRiu| zDLLc20&C%!v(9~erluF>7vnEBB%N|KCVA5nzl~SVg&T6{4b`xRxKgjvVjS9fW3^JT z03*$2>Wf$HgcEZ$BCX*3AX>^689U!&j0IF%Ksir>2b)En0!LP?z;*TyK$6hHVAI}j z14;3l1@h{1Cmsw79@|`+5KBM?Iy4itoi6gyfW>n?kD{`A>aYw3`e7Erh@%aO{lo~3 z_?X9#nsW9LJeCMqm%Dh_Rroizjs)*v4giYn18`T|sIrh-<>L5ur?Z-_>{5UAS(pxl z3xFU|(0=W>DhqB+BT4le3{$|I0DFF;4`B4mhz}cMy|G?J0j2yY1ePy=5dc$>PXo5| zHpEAIlV<}#!TG1neCpdTLodhj4&Cc8FY8+wU=%1%4&DGM#=cwHJ=RX&b1CqiH61&hT6YQ>F;iFe`$adEMh6D0gjbr8pbR-#Ve z45t9-jyqEklc>_+BeTN7kn~z%yWPU($rs=JWZ)kvj5Wx2x) zon)0HVN8f{X|z7giQu4HrmckU*Bf6NmQa;YuunRojD#>g#WK%|C>}0U2^g~-fz3xQR zhB$>AvSo4u{97l`ZAgOs3`R55q-`o~CywP{RxrT?!z@qX^^APe%>(u+QQJl@shVp3 zIvwNdL#+=L*%!U7!!}=1m}`bBy4<;dX_ZUdqxoLdOYTFh7Kigjqz5c@1IVR&hAHB{ zf*%WD@c1#8APD&Hnk~gYVsru{b^)HZ(q#bM{B615Z6x8k)ufawZ0{3T!wWg7zY# z3v$03{zGeK((~do!}Zrne~PfIN4>j?Q^a5uf{Cio&4RlI$^4mX@GBBp2L_}o*JX>u z*xl3G3ooS}w-&J@&#^Ep_%Hw(eeQifh4WYC*|FZbpK4s=p57OOShsC5Pb{i0-n6l( z`p&Wn^F?cRf{S9r!lXVZw;|wYcTrZoY^n&q_?}H`%`nDI&3NrThmZI#{e>@Olq*My z_!O99xvVBp4=K$dDwAdfpp8fFuiIA0r6LE|G#OhiE$K3@(mBU(?3q@$ZBv>EX2cB1 z^?$pZH53;d)1l7=k@J5^t`>aQ!t22|m_jQfkszbhq zfOqH<2hO@1{hK`}2IZ{z>LhxD$f?Uc56qHJ(+YV99Jz>=O=(~E^BX&lliZsX-a`#b zL;sfUBb)Ftqf2kikSs9O-JdB3!n$tu>$@LvX|%EPtXbf^sNja@`_dv@@;xDV4l#8a zrrZ@3Zip58?{J8$@n@=3Zw1>Jql_(r@50E{!A;kLJGu1uD zR4_?6iLWy60x@pdF>?ey=#04C%1DV>Ei|FLAk4@tf!hk}4q0D#8<)&>U6`R&7$9Ca zE{al0Ot_oJHD(NZX&({0@t(HFlE_~~&J*tIWAz?y>nrB3e2MWAao7-mPego5RvaEs zjBWZ?h@1fz7E_8AC0^!P{_z?Ro64fgF1P{;_g_)ey2D3(tJd^hgjAT%9isp|eer(b&+fya%em+2E$U=_KDH##Uc|yG8BN6a9}jHw0|x{QepkoexV(z^0b(gIvPjRl^Y#|(5%i@&v+v5>7idTSJVl1d zN~z9sN)q0G7^$xU;5ap}|G1Y91u~iW+Z`Y!@qZYuU>@UqWHo!H5KPDKyNe1&HuP-J z6^40wiC+=ehR@M#wsJ{(w9N4RXo;%jMuHh^!K`RTVyNU(Byj*oCHyh6{ZQDOBo1|(;cZTvnW3*5qKW~R+<;bqnxnOC zkDnGop8{~|MP8O^cBpbxSVCJ)K*|wBc!!FpB~Y?e^f0GU1-HF~f*_K7H9+*w`Z)uq z|NG+w+(f2PcD}E7Ssxm&0!K|=t=)~L(?NI5yb*f3g;xyT|7nb$?xdZQou4X|e2Z6Y zG?4S@s7EMxasOL=eteECXSW>nJGa}Kc;7#reO{~d6zX;=|7kCib|KB>Xg<>e9%6Oh zAd3Z6XzQ#>h1bUQMr`oo6(mz+k~xTI+27M94tcwN0@TS+x=iB6vt3x`(Ri7-V8@xM z-Kh4G%k=wHE09vKqthUuV2`J|Ek5x}#7R%F8#}MIq1GX}w0wGkO=mx*9fc;d{ITlS z;eRU14iKu;3L%kzM9U13atBYb&<~JhJS5p41C)V)Yx^9`2p`;31%FFp_cT;$?S)!L zGatF*)UK0;FQhnPdS;UsM26uBSo;K$8fOh?K}tI*U?NLvg7`S?UOP+ZGt1f4Y_Ujn zepSPR3X0doY5V*{CqS66oTb=*0VP}5@y;hPyipN50P$7Gv&h(iiNl!Wx3b1mtxA>y)R_=mXQ)y@UKL9U4(7zor z&DFUw3@pjYK3j{@h8l~+*~yZR5a#wS)My3OY^$y$DTv5!I#>>pQlrYecMu^aIvFK4 z2AD{fPFs3BYn3{K8LDzzX*XBKU8UuKB&AZ1y{o{wINH{-Bm_a@d<+4WbJAslq%Dz3 znzXRY7`ZUcpOWaamyb?XeHcIb-NjUwC{T!plt}3 z4cr5>)ftf$HshEJ@fvkCYhH~nY%&arffwStHXGY^(dH)GQ%L<+te3u4MT-^wY-4>D zV)E7|R}%JNzP}AOCwE^8$h&_^`2eUuLPgxvl#%0E`5-E#y$(i_nXi}PT%pa6yW(XP zFCIA$ZO`D-=_xh5O(-kfbzc@B1iHb05(9z8nV}(|4bT4E=eVey{|Q}`czxl8$(gC; zAp5>*n{-B1l0J}|b$`BkTqU>k%KbAY#YU;#!&mo_J$@IhaepjwJc$2Ls%R~hYHh)_ z{FZqn#-?$_zBkkeC)oTu?I}OD;C^A%>_lUGQz-+qJm4iK%5qI^LS6lN_24<&mWj|Q zzZ0ITgF9j8Wv-CC8{@FpEN4$9KJH<2@1bW2AUEAi%rm`M2cL$WvN`J=VKN z$Dl`yBl~HBCh!2qITgrBh?2+xgnG|-Qp>#qTMhb-yEbxA`SN`0MKznYlrJa)9NFCP zdoV~KyL%J?ZGapef_TAf|$ff1F%^DxyHeEI0!bI1kiI1p8IxgOJTzkcq={oZ3dRzy!^Mo8QA5c7=jflJ%{w0l)uMpey`0`nS)}an>LkwS5?` z?yuZ(p1;9M>xmLM6|X0fDV0N1(89PJ1xYesPpt++{Kyd0bw31x6Q)5@?s?~aPBz<% z(=ZDIy~7XKK^Jg>#cbNYa*(UEve=-+g?FSm&f8&^W5+;owGjOttfWJKNx>e7w*fl^ z@OP%vq+G4&P-_SE3Qi#x{>+;*pZTI*3F;^0pt>1g=>-82V)3okbdNjkr?dqTz#1X ztOG5T9v4^C0%6FZ*%?H$MG$NXI|gJ2Qoo@V=D66*5fh6$-6Z$<=;&3z*B@-YV6uVB zehCMZd^u0v@DxP^pk(2y+G+ssAH zjjOvWt%p`ZvM!)zjlihLo4Aya{=fZVP>(9Lq|1kFrH*?0`KQrP5BrBn? z-1ZUU&|3sQ5j8_tI*dyrI>zmFzQ> z928E1WgjbH)MYAbO*~x>zZy@GaU}kuy@CKh#avP38pQfOwbd|exhdm=EJR&I2$_7c?lg02yD*V5xIvf~V-$$0d50tVXUO{Oe4) z@5_xP^q=wt-1q_?w^m1&qR|{92wz$pjFS2Ze^Ktd_ zgoJk(LlCz#d^eZ2kPkOm;6f;=E7;qTx7k%$I6)X;(?wb+-OXxroXc3u85bJYm_Ji} z<8meSnp&cvG7UCQ)eajbX+5hA2eRhmG&4&erAJ{Z*NA3XY$i{}je;0l8S$Bhh0?s< zkouTRgJM0?*V1&LQ%nMj!iaM=0gnH@T71=J#$oGwWU#}&Q`3!cfDn0Us<5rtfX)MnS zv~V$RHGDJhO2Wi5ho6&YP4**odbE>3D=>2`cP6paH`CMkRG8<;!hgu$o{Qp$#$>j$ zfV|gebEws(dlPymuo+6p$Yv1`IbqnhG%Txk6$F1F+>?m@`v-1@brxl$Jy#_+Yjn3x z-f8TSxU!tl2u!bf7zI8H4IG);XL^UnIzdjB@>-*bbsNJQ29)s$#L6&pw&YCs_j zwd{WVICS-QyAiMQ-@=O>h5sh;B0)pH(sTs?SMu%))!&JU@=Uz9gz(Evqxsp*%puP_ z77tvsQzZrt=}D)Cw}dfhH@v0nDcY?=D5P>2E^qia1~TL%kMJ9Utjw)4Qyh%$$#3vv z4&EU=pNWc9bPI3qda!%1F|?~epvZk)CFAWk4n$GQ0bFk%TM`K^#_C-O_h3DDTBe~A zS9GgJWOoTh1K8g2Wlw=wqVuY<<8IW8DNmW*{f@jF>rHN8(+ ziMba*%{~lfveUR{7)^f@*6HQ856d-H9|iAB#vW~YRkM~xf6S*5!hUx8n8SyZG_rNw(JMeANg(^x^xzj?x( zVhV>yu$;?j@#0rc_OqVJv+S^1EOx)(>|p*XP8c%kv)cn zRvA($)pYC$pkc7L4?VzHLa&v?CvhkLV|%&MHZIB`*)m*_w2$1(qf(CRdq4w35-dEA zC^->jP^n<5z$4bS1MasETk-@N6%^{r^MM8GIr(+Q(%-(rw{`#BSeqvG%|zwN+fO7W z6QxK&%BmYucrpo~%t3G(Y|)W>D7~1EI*p;`_A?Y&6tG`6ijus}cV><`+-WtKtJH?X zqUXzClP{GggI!e;GtSgBeLmp&Wa(?O39_Tm+Kba-A!p^3sxR+D1iB)SLiJ|sxhf*^ z)d7$lzj5aS3@J&LzT+0)V+mYfd@#dXdNH6H4Ekewxfc8SYMr=cGagd$NoQ}PLw+6b zUge)OFTID$7R!_B_52Yz3wc`**Z!)|sk=O+Z0qqXvE07oko8T{3+FHrI0pLWBq|D8 zT5P+0pq-vCS?f_{IbE0Lq@K;P1$f({9;*4pr&xX_jyX!vV~`n<%~>~svpkuFURbl< zc-zG2-uPS336ysbF^JtSSFP_I7tvm-?Q{R6>1XH)`xvT zscdy3B>zA$$TAA6llAzn2o$lG%eiYA57s5Q7JK1vWLiUAZv191F=vrhJDUIiz3w8B zJE`Tf!WXh8ep=(D;}$U&0OIY6Ai^TyomopX=u3%?{RBTYEm_4}WbgfNq9~n!Q>6>N za{d?`K#m5_+%K+q&XE4FoQm}5Qwz~w$s~WaxU`S$V6yu!$WB1mCo`NN^f(Fb2#I#H zWyDi)FlaZ&WCYm(# z0K~5PBElG{nQ|^*k0L4U((xiTFLTY0^XO(V`)=%#8vPwqKP0M<=CrH^4y=RE)4#8- z#8=1~YyK#nQ4_SA%2RB5vy7)FC52+~>4a(h809K2HqmD@h#As@g%yt|U`V=}pd>zx zR5`2vM}sKA@=SJ(Ff~5zB*s?TRU{=nGVju(;aHjMau zk%oKeBB>bV81c&EpD-g^9noOJf3j4QoVqr+@k4{g)jqNQL>hZxJHgXHE@-85B&X3C zPJ*S-m^No!S+SOFRL`6RX8oHk zw#QS|Z`os}R!=h6U1p%|@PCC;P6XA!#~ZlPc$FXerBCe#zkZFNx&6tVPOcZP_YP6b=I zt&&NsL>dX%a^(8+J0EW>2RTvUW)g!_!dtj>JA|;ISR7+-E^SeV7fuDXjIQX%+J^qP z@6Wu)oeS$aRZwaF=X6Jr4}^%KwIbr6M~n2hCB_Hz!)K7dhoi=T#J1df-B8({Bzt~h z`!;hipVqcn3Val>fJfSRP-h0DvDJ7!QzS@BoDMQINs}YKlsG)CBUdy%=3FX7^9>nG z4(fhKgcC!!`Gp-N3P@ih(eFJD;}81H%t)nU^6{WAlD^k=H!+aQZ~Wrxnt<}zNZbF~5JG5{(JK&zH@syBKMy#onvc67l;0}uy3#a5!L7dqr_ zdg5jWe|hWX_(*><*8xRS3SDFJr(XUTQ|1rrgo#R1Mq=V+(>97E^F(qj=z;7AH>9+brqKbbdTe zKTtoyd6KY8DKmAgk`kIiO=BtLVRdEmsY5~h;Q*SDk{3^2r~s+RD`OgPoyJ95zQQz0 z;Jo&;0o8e5cp#%qdZX6TQEx&$-Bbc^rECvQSNWwVd-b(S64e80TQtMtE(T@53t&=? zA6r9Sj+Rl~+@+NIsc#(AJl6l*$2>8#OSZ2ntUuerOJAuXa^5D8W zz*p}u*q{f)RYux=@^y@`32*o}$Tc7%DwRFN?tpX~Ajhx^f%yjBz&2x^X0R0l*yItJgPkVa0z3y(&L}+q@VW5TdMYIJ8)Q+LRAR!`%T)^S+7K#<0z+ZHauxb8fcqaFvh-Wwcy3TVNa6;8E_)8EVhYGAb! zMueQwH2+L$)(j2F7x-@1eRa4?JEnaaPulqGQ&H{yvpsq_0j}zuH5v^TPCJq9g$WQ&OITp?h|$m?2)pdi*{1>tMmC>^Aqo{Vr(tu%7%|T3ZvY`CCFPjB z9G|%LxZA=vyJ)dV-n=kjtDWJ2^_qreFW~RKyDS@7O z!VXl)K%TP5(qE9t*-?gc2t{=TeW*ot3oD9rX-OEy9XOxnts>ZAebf!7!ba*T^L_Pp zdnTklu-+CBZC)t_C@>UkxPmdzankwkug-(=Dr`eG^m%jG>O{YwdSEk>sEZ&DTWN;RQOGL3-Efk%{^att@GP@neL7v>^_gH;`c;fdpl8Um^sM zk1KD{3S1S=_zePXeogYNNyQ|ri4?&|iG(W!Z=4ZTig@RqX-`U=Kl3_}$7H;;NwiF9 zepwc+BmvcGuvlj{el-clZCJD?-xI=34fh(5N;i$q-H@o@>3^w>t7jq7XLHm;=7cHpSvo49DafeiDrcg1D zscbyxpbv**TOV@G&6pq$rA=pFjp|Uq1Tgsw37~T&>_N_k>)Wj_U0V|WH>$s6 zoWj1vzDLcP^YL|7>}H;G3R*|gLU`TFD0)FWuRMMEF(#k#)h4`!LnVXTah>D4DeXie z_YHGs1JhqocX>;uVhuCnqH{ofm)X#fT$SF9>N!K`tQXC}pL}z6%5~H%)e#tWgO8;i z=UYq#n{BbFK2G$#>0}AxgUTUM&-~7&w)Q^TzO(8u4(ZQb6*e-t+mZiD<(Xmu5iKB1 z7*_b@$(u9jpuk-gg{ry`SMu5B{8H4KmvPmDSTqVyQL*D+eh~4)26C#Ybf6k5L%*fHeoCrJ)1ousA zzlChkcBN)`q^?l3M9p(zn37eaZ+RXSl7=L#r`vkR*|nzvL}6P?h9XE0t7(V5GPr8+>+99r_tQJWy<{Kr6O@N_aD;WM66Qt)dZMBUO$t3suEZ4tLO%DQ64)VPf}&PKQ-rd7BAr$)Ms zjLGdMX9X9cjlURZ;hYb^ziUwY5cK!n=u<1@Q9_t;HC_J)b;2pOalT-2mccFud=n5M zUEvuRBMOx0I=$UuCov8q`^<9Xi}R_Jmbp&EkfTDSSX9eC0k28=n4-3WeF>7+}yth-z&c;#e(yqUAB2!_r`c8_As#F^pGDtn& zAk7fSn}p#|Q61S=d-(=>iV1|`Qb#+`^*JuTas&g)f^q!-N{gP;xXZu%tDxyFSDXJB zw~{;sMIIE!#ws*2l`pxX6Ycg3MoJBfOH$?pLM{O!1mdxp`KIP#(POOU1;Uv1he9I= zg4%}QmoX*misR)BGGm?uVIkpSu(f&s)5d+YkuS6`rilr)TAlac&|RU*>;s50ts0|5 zh-Wi5>ie^fhMdt*NX0%}CU|EiPT0;E#j~tQZ#9)}fArYBi%A5d&4hg1$b4~%!S(aS z0E;roR}rrJpm>%Q;$)3@L=)eIbL6=OorhX*59yH=P2%@l5Ib{O>n=y5d z-{Hx*7hSJ3(vRB-WU}oHhTuw;vaZknHzF- zKm(BEH!LNsJ7mWGd_q_mMHQ7vJOCS+l2%v9RXK7JWFFf zuZcl5^N@<#E;;rTO$>oe6I~z%C-gqM7>t+zi%j~D(kw+l)9)(vID2wV_AMeur_6s|ae)yUl8j4uRdzY0hP%N^$KxwZF8@2@rJ;JW z0;E9j|Fj1ur8cjHe6Zc#n&&l^QD{^ag7FK`O}?J%UL)>*B7sQWgw|zW?oNWr`)9z7 z;mVEM5@P05(?`4yDa$yQwd*u~=ZC)48!?^y z4H7UW)I0D1B)%)CEaQS%T)gnj0>_*My7}u7VD%fQ5p5dENZ>|fgyKc!3|wQ&{2~RV zrIw|KZ5e4Evl04yQ4!b_F6{yN#2K#zl)F`1E?&-0Zulck>yYyOvqcJlP)R*Q@G!;C zx54K^U)MyB2Wfgx!0wo$Z%%PHGLn(h@ckVTQ`s$Y>`-Ck0;w1vBIMk_MAGWn)4?O^xl<%5f;)fonVPeSZZV2uD>1jp_%(PKpQD!UD}p9&!S$nA2jM(0KZJrrWhP zWVnSwR>i}Do{70n(TaT%n|JAc6d zlk&gT3Zz|33mZSnQS$*+A#}%vq6p$j!?oz2Er^-0t5Dj1VaO3?U+vCsA%OWnU3M4` zha24xWN;Lx5$g!VH|Op_#7v3*r0hP>Nj71Q+8MUrf4vuw^HaP3I(}6QS%9(HsC~QM zS?l?IOHH@2yAousX*+tf?ceD+nsh0lP7YCvlWx1@@eorBs--PF&qaQ{>5QV@0Sy>| zwqYT26oXH|%-XSP^-F#v+5KLDGy2J&u<%ok*`?6(u*#1aXf%#Wzyb+2XejX&V_1Kx zTgbDbeA8+G87;mYw97eSuG0{_cMhq6^$L<5-7G!JcBw=f*TY=l>e$q5A2>a7Onr{q=DDJOwR?Lyl$+LMtfMRU$@(2d&_#Jis4za z4aO_|zpAVGI+-iKM&C1!*hUXf-aFGO+wKH46s{gf=V_q6N%^oWIuVCWUa$*IgXEq~ zx@n|FM&Z9Hrz1kHe4k0*8+ONt8tUxZ?7Q`?&2U&wAcb5cK#!srHWnvI^T*g!fHXEl z8=06tWozsKO33=Nut4tf&tLq6Y&B zlf#A2!6_B_1%hK&VVZBA>GDyI?ZR3 zv-L{AhM7B1t6+;I4`qs4KnIL3^OKGNp4C`i6dW~M+UYS=!pXaZuH_}Vva|DTaVgHt zIN>|j#S+=$yHi*K?j*Xe&S*ixR9s$IQq_NsEZ)c`wBSa{HWjBU5V^No(}cz>t9}f2a|`>NLiw{we{Ten0cc?LNdoc{W`{ zqDMOFo&{2v$6VDWn?!14i`aQa%ANYJRodTzm>5q5RXmxb^S=$Nhnd?v?|baA^r_3@ z>=DZP_}JrG1=V#^Wg0N_zKuGmdI{a>YQ_J10W1F3B4$cZ@z+e+>UXA7R-H*4*Lc`Y zrgg~4Y#q%;Jsn;uY6JXgz1@h>W=$4j!@p-arDGWx02^aSlP#rhg&bbyz<)Ao_rpWdrEGL48QDHZqI!J5dZyo6zc38;>LuIj&A7 zt|~glslj13F#MI;*~%K3+Wre0i*T+vBo^ahd`VCZXFeCl|JhB~CIR4&-xh_6-<@We zn#>?5jbWCV*!%#{x7z@bxyPocsrgpat+Gh{@8O)J8U|}}k`+H)O-MliX^21r^45rZ zESkVf2{$;e0|PDguY6xob`<3U;62G(>HwZ{uVx&M){~DBKmvW9g!1R{iWy_a6cC98 zNz=?=6v}<*wlIe=+O438aqN|d$M@p57`Ua7y6n4|7vT2mgVQ7Ib2rn`#4ajf23i-L zG;_<`2OfV8c=hVRIxPm@A@6(aX#AiPU)XQw?XAQfynC)iAtLKxgF}UGZN5i2R{pbP zPYo-sFcovdW*Kho*c@TwPxi4M3YD891KRq5DK;Ko9?(%mQQY`sU95HCP0#r)-a=)t z_2KdI->N=)#`@jK^c`56IU>2$;ozpek&(eV+b51c1T$mE3Om|sPP)&PwN}Zd^3R9q zMM~CM;*!3Hf&96Cgd=ug)zp-t3k1v49Y;PFEKhvo`v8F|k0^^V`!Z`OGfm$Kt64imXF}WNZwTBs}#k#;j>sDM&(*Xg$0 zmlA}K69t^)>O&=I4wRpOiUNu=2B62^hIFPcm|)GPxjcQ>Mv6}FEkboDxY?wXK% z4Ysg2df1{qDt8P;Dlczlje}V<^}q!r=Qe!4yE539J$GH>ONiGvfZg_GNf?FI&1`}* z@=1e`z@FKniAO;6+ zt4M$lc-HSq&nUgXVQ8k@i55>j=f_Lk$JlQ9&X5FO#SVmA23hXsu*e*5i({p7q9J;E zoiJWN8MY;s-Z(Ywsxc7rfl{oV9Cs+?d zrtQI3qyL|=-CEb2OGP{lbb>@yP)#u1_EsnLEm5O`3UgVefi zNrKE1^Z$!;j!rkVj>trMcuS1CqAFHFkQ{xKdlqnEGkpHDsAY1>ZtF;nO7tKR9+ zTUjqJ?_+4X4h<0{>Qojq9%m2#M3vJOSz}1sy*y$j^X3x!Qs&m9SSdn;M~9}t2usL| zF4>Sn;>=~@My&SAsX&35zP_;D9qX_}KhlwK!mR=j>+h5Y5cMWjRsT2uyhHR+2~b@F zozi>w{{#7i8-C#~`p-{-he#VAcLQ$Y#`reo=oJ1O&?WlOpy?+%3?dgPkE`L)*xODY zzu2}~sGeuW&sj{neRY0gGd)Gr>lK^%_(W?G8%nCH&!tf`l~KPb4Z~+*$OICL^ml+J09$`Yaz6&2MvT zj6XEzJpt#=47kW(;2jtX&9UXD2e^<#}gByv8>E4!x$k7 zZ*xApCPZ(O)E1;-32J@P)(p)6_iW~n{2cJiBy?v(G4X^_CCbHGDMmw~`>rc6vSQ6r zl;siAAh*Ap6~11l9R59~b4Qw9U%;wp8pS0`qSm;%3Z90#Zu}~6BHyu#oTxm5A?sx? z(iho0ie!ZSYqOCxx)Iy%}e$6IWcsE<@9mlV&fugggR!h#|zVkkLXv^dA)OQC4Y8=mm zABMkRW?(YSw8!bh1BRGl|}@)p{7EgRATUMSdA_=qQec*q1wkt2A-H0T5iR$B%(x- zO5JA)JjRyGBd`hUFv$??*Z1Jc368T6Y9-)7>c)r;miUJ#9(um=tshW2A&{P~vqI|* z?nCaO_zh{x=)&nf3RtZ=?RIpDTM66{DSGq-BO3f4k~ZK}{Ej4!JirURA9(U#b5Gi} zg8|)v8L|KF$*EZ;z(4-UsXxdCBY^VdB)87eb|)4;HcAzNv`4}$6)7Ks{Gc$A?N}m# zJw%#4X4IlI0w;Gqd29takJdz^qrOQUEBTF2?PWYNx6Ec|D*hVG%J57v9JWfEh&c_# zh*8YcV9Riy<^R3-o#=s{GXRYm<_KqhCsrf7NLj}H&nAyV z+z9=1IWwI98Ty%n1{=xe&>7am`N$Tpz7a3tV2U$0FIq>}rNLbq4!DY+jWS6k07P%X zI{0MvB9gObw%Ct@HCNK8VK6T)m62k(K=>c@ur>u}eMsfLwR0s5@ULpjrB6DgQC#sn zW`=Cwv%zA)E09Ds1m%BGP*glrPxkJP|2$zpitp&QL|_7M7i0dr?@0zq<SXF#UZemwe2uyLsNXi~e^8`uAOHCR7S+~| zEf-=K)uyywL^JQ!Z8fuqXKISMQg4jc1^gW-iU^%kcXmYJ%53ouK zH$Nr+mZ))#u%R<8Zo-QuL?*31Zfu57Z^JDFDM%%u&qa_;jP3~IdYPUDLCzsKq?ZXl zSq~W<5SjP%bRapLsBQl+Cy)dyZvb2*N0(MEN20jI{sHl@y5OLwH&)dx5xoPJnS9TJ z6xt_Y&z=9`1*=ybF1P4re5{c`URQ?zeB=+0bofZpzTbt;|M;L#g39RyF>an*%%aIQ z30)5)6>AD3l?dLr^^s~c+7Hf z@ea1wX5c_V@tVF-S)E?JdZ*R?PvKu|Gm$ODmMU(te5Nn zVsnW(V1ZZwnr?H3OxN_iZ$wL^qxk8O_vg~D@Yb=j{j$@n9s?k*fj&xs3UsvY^n)dT z1B7~F`7%ixBwD(h+LT`F^(IDlO%0Fy&s*=Aimidz=ijIvZ_-}pk_|sbHI!vp`{oJ$ zN??M3(NBdRUw!?S+5uZvYGK&hydfSuhnpJF8?B;65}qRl;lwA46(J)R=y87N)#wE^mN|!%hd+%Y{#aHN1pA7Y>~^__*#%xR-UIoROJ)Q0>tvpU@WGb+gz)G7W29O{}-sjsyA- zsuQTbwHMd}WcUV~L&Vk&G6dXK^$}MrwE293U9jV!~##8{An*=g|@{k>85V7U{ zKz!wINcO4HXdJF*jCL*jU zqPH23;eGPwaTxTm5|o}oXWq5j)M<|A%7awT+O@Om_z-J3{0P~E;I_ywk5F#^Xj9)k ztN*!@auwrZt`D9ZsJyXr`+-W{N|!l^u+(7ZAL8=C8NHSbYWs^&M{6Jfu< ze7hS1Bk`y#1y>+id3XC?I@lZk?$vOirnL+pp2g0fAMS*CrA9c9QKA zl>`Y0gpmccW@qZ^0flvpXcT5_g4(D?_ZL{HQ#x%i$I}Q{7Z`~V`Ad28;F@DFNVCL4 zhY3VPe#t_8op2g{`5H*hD0d>aqdh9WogpA-=AO(zXJDWftXeYGA`k$0>Oy>^w%}$ih)WrC2)ZGAzr(DY(^2mxG zd(#Q6OLsDYX;h@YvqH%_qdDy6a+i9mkGsROnRenA3TcZ(9o&ZM^keE;fIUi%pLG^% z{cR5o-L#)R zAR=(gmy?&HYynrfRpp-Tw2bK6KJ{BuiqcvBO=yTM#8+S;CEs_r)Y3sX&t(PiX6N)# zDj*`&*vBi&$X&@O>3?v0Ed!7^voa*Txy=?0X@kgHsyK)a86Yv*Ci^Y8}wzyif zwfM+LV^;gdkTTL$Q52pEWFhw%#pc4LsAMRSVBP|)P=(spIV0vx;l=R48_m@0j_BRH zXrQT3`aH|u9XX*<>sG_Xv6*Ut*Z>Qk^NPcH84LEf;5guqvU!P-ND2CkfTI3(H%@rB z?;sz#6eolv)3&c0uBc<1v76;K;)Iv&t>`G-IPqQE*;SCzdVHX(Ua6xi3L0Y%!KbFM(SzGJeI%)759Oqe}WP~rES@;5f_So zBOWnQObri4P)037e5$e>2|@v>VdxvMh`-}o_CeIHrZqseHl|*%3=L0s^zG3Z&1t5D zG$If@#)#TM2o20){i}SAK=kzaFGU+m1_7NrDwwox29X8D@TE}yNK^3BR@xn34FmBL zB6Hp*XRh3Sz;$H)CC3#@HP*AdaCR!{h34#{m2dq*r;VkCSj85;mF^dWPVQMheQd6i z$A)t!obO=S?ygh^lToY^-x$a$nd=g(>I>gnb!3MfM8{pNpBO^|9ZW@%duqx9t{lzJ zMir#6FRh9Z$%5Z?NVTLqEJdXN$|S*%f-HF?1@EmQ{v{jR($!pm5P2f47u~%Du+^3N z0E2nQ{@rFQ?x}oanf??q5e`hl#+h)(00BLL7nX8>!Vj*fE}bbhOZ~xt({^6*j}rfm zLR@Z!xB4A%p{sjs7nh-{MqL0Zj}Yh&?1flX)8O{uhgg7Um1kr|`G08rWDLYlAs*g) z=aY;1v5myd{6sKI2P`35Gl9oJeG>Xm6hX#q6w{vJiQf7N2uYr&Wm+)*_a|k&D<*Q- z>pqWxprPUG2&f^jxRc7ZP)iiD5!14TP?p#BLNz;-=PaaS|6aivaFtu8Q({e%tLI2! zY`H*_^N^$w*SMo(OeD%Al7~r}-y|Hlk2pm^6&C*ny${V-A26vZ9d}LCB?^AKhLo{Wj-Fm|}t(x)b=iA(6H?-qx z=Ghk%`Q_ZQuu0v;{Wh{6O&Ku25CTDMrUy?gx#pCGkPf8xQ206l0(P|}t~CkeVhh-0 z#N^nZ*Ml88tRoHwW8k5-P^kRyAql5yYJz4qSHI@j7H!3#)RUC-C*WLoqSUp3)VPK) zQTh99Gv9X`foGE#|s$ zsWEe_`|exSJ6Dl<)AK^G96)$!jn z5An5xJwRyaW5^$zf%E7pduGmAuXxjuzP_-gvNKdj53S=_875??bZkg1qz zk32Erb7GtN1jsxF0v-4XAz>IO2Do3@&lyAu*)6)*PWrjPUv-ArK}zgC42GO z_fwl9g@Pt9{{x)PyUfq1J<``at6m`m0TcY}PqotQRK>5H{gOJhugkk*W94^9ll|K- zh)L6KQ83FlyDa$Ynoc=ltfv4OblN5QbTJlUgoqPxgVjm_(Tz!9j%Lj6r``Ww`?gre zB!n1R8L~KIc)(wOL7FY=^uCDR^kNZG}$eLAWW! zF-km&O>W!zUftY|9WxfL0Y^T{1~igZRs~{2A>VzVhQHl{zh8IN%4a@Of@Ow`q}dbc z(`dYN04X9Vm7kPIU&)xlCoiA*vkSdlEJTVYp?r8^!IR_8Q5yFc6?c4g9sBmO`?z8qXtSnMNhssfbrF8;pTgBYYc94@o&YV>@ z#PG#m{+uvWmS?;=>Byc{2It>RF{d6WHMiV+V5c52&84*k0i{rpH4|3r_?_@wzb4jF z!Tta0jujSV;5*|T!BO$RyVoJizgJUikLD5AGBkBfD7De@iBo@&F8OGQC2{75$=;cN zjZd0V+@cJO)9J}2SzWOA0>zg)x&>K*sx{E_6+!4Byl=YB2&g;F5A%kX3(+FIv%Z8!Z#?dYCEb2i{A{6Gm6 zQSP1^>h~j2+Re`3Kj+VJ4(jS@F$R6$u_aQW6vhlBB5q(Wb)xgC)ZkZ?FG{k@&7XSd z^b2yz8$Jt}eDzS2)PwZSssgLC1-Sxpcz-xAlsvh|jA*sqXET__cq}Cj%Y6v}|2Mrg z!l3a9DZf{X^VD6M=IqpWa1PZ`^KS>=8e|XJy?w(3YQmp&jjpZ14ZkLNI=0u`RN*;^ z$Q0!VNcUg8TCyVHQKH}ZZz}lUtP>bm>_@}+7zGji!0+WZ!OvJn6`6iR$;LR#N$N)3Y-)#xvlwjn_REp1p#E@ByKgV0ECc=Gr8zbv=T# zl2~I8zFd}`hCt&FTy8T3omg%T4HNSoGGJ13xWxRx& zOnKy>*TEy116sJ?1(*^7C9uiC$2w{%nKSB}80zfIV&i?VfB_DhaiiszN5rNPmmxr6RtCseHBVGmqF~ z{|P(HZVCw#7Uc4SdU>gAtkpgAw&usqFC}H>e*i&1 zzQ0zh1kS1t+lLK3^a8F&n!kJAy4p_*td7H{L8NQ0ijsf@ftTY97 zpFP3pO<5H^RM@;vrD1wyMA6((gU$IH(G^!r+LC z+ytEDriLkguq8+`HZV|=YGh(V9NSCn&|7UJZ1Isc5y@N_3%5nYIeu(nAYY;+Q7?$b zW}MBLV1C-#tjybb^9p9O+o!At&727}`L*!+>jZ5&-N(3f4Ah^CO4Npoj`X~PD2FKL zdFzq5Hludt57UAnhkDV2ZQG!E>%6wX9*0@OfNOwKZFW6BbMECIKAp56KBw8b2|7ix zVkty37g~eoGH2++YI#|#vN33cqLVb~!^%IkcE+n$XE|~#pZe|hf|BGOcskaaj15@x zx_6Ljv(9h}RDf3ieJ|4sUnw!@PP?DKs_+7eB2bO90{C1*p#Cn?BI5q23pGt%a<IzGvePz!!Opf+Olntf6uX}l21>72{RAHGf07KkX(7K)5 z!Qh-dZ}fie3S!&&N2(6X)D*ZNExos%iF;90^Xb3mow$MWW0;rat#w1xt<$iHtQmt)lt^_3U_nu2#!owqJDhl)&koGLWwP9V8gTJ_ z*I99ZeC<+U^r6);_1}){i-QFqc*o&A5yHUBwGZ%A;JEJb)4YQd)4{CZ)psF#=Q@txz$V$32I)bK82KMw z8X*o5P2dtVzE&>V-3^`G`)!-u)FexIh4)y>#IfT?i+-23e4m{ayR7WT{<0-}26h#s z!Fj-6kUwVh*=b(t8}WR-cmBr&QJ>}d@`;X2^#Y2!@%^v&s%u#uF{C~0w3|!+lKkHt zXgg-}$}$hjtwjbEbgEMO(e@nOXjRWC%ZnNmkh$vMlpoh>0{YFBLocW7VI$fmhK&ae zc$-tlz6!T}<|b{&m-|DHzal^E`$${9>tijc)zyU)_pJ231CJVgsyMw}_xAB+7BPy@ zC985EB-eUa(-KG|JOHZfe|5~L#=hR|7}a#7LPP0Ssf5JQfkwDduB7=WaiLotZ0G|j zlC24)({Fi>s{AtpkhLKUKPEr&S18eOd3ZHkw1!_}HoXxQ!P3^FK zl}Z&@r!A)(?i@Iz7W3#iZ4O{8#D&^Z&QjaNw++O4$8HTrB-~UhEN@Lc?_bG z2LxS!wrS(@(}22)sYS!exXtwM4-9j}{#}NH+PiFu;|mXY{%TI1z*ZlV*<+b*4-;RlYkG>{+!qb3e12?=Pto%ceI+q8vx^L^(2en9368`^OY^ z)_~$UaKV;@76`_kvZ-?U2nZEu;4m#HgjB&t$v`sqDa%0if?pYYj|NX@KIb_n8kieB z#W&9j|LwNvg(NW3yKkXA5B;hM{c-jpgc<ZX7zf>VtpN}>W|6>#$!^Lv*GIcL1_xoM^HkelknMYXUmlbM0ayNX&pLK%c9;F_}a5S4P7 zbJ)oqK_w#eU>Wa_5i#qVxcA={x8UziH=Ii^BCsfs6N2aKPANpSCBFo`u4-JJdlhYM z?DDx#kAalUrO{R~wBIXl>#W=NGOGqg{k2&Fc9p@1u-1V-9H|(*Qc_!6XAvf3VwDlsN5kg+ z5JW%lx&hOSsc&@nbo)E_ajVkN7K7Y$0eSRB`Vi!#nYcy7o0s2^pFKL*hNjWw`I*4n zRDvW1K&lUWdcPRwQT#03K}?9bWGdZ>pJ}?>lzH$`%1B1kUSl zd#qko{N`+ig1$AwyVN~e(mCR!1`WxewgjHZk+q^+DepRnp-imkI!G1t~kItc?W zv>dl+l{lXYja3_>npv%vhg!YH0Q1q4M{tGM7WMV{oJi0EJd8e=VX162Q5=U2r^j?M>ZPZX6am~#79>PA*L0Ow3 zxAV1YyJC_L<;{Le#{-Ibz)X|RaPRs#U`y*#ZmwD%VF*!o6D7StfKf0Hlce7-T7&|( z+#yvAvoe+9>8WZ`n6#V0tl8(LxAh6{VsW3X%OgJem zSU681V|i}6z!0}da<*j^|6#tfwv(XV2r-pw+GXoP6i=$@q&agyHET)?@o51 z)V$T|#mx>x$#KM)o$)!U_UlN1a8f7~>qB5jHp)R7mcA!?<~^Z|BJD5Vf$6p-tkAL> zQan0qS+YTGW!LA#jySYo=WwCT1X%|_rg8UHbr<%Ak=ydg1{;V7)kf!kMttFce==3y z%;(2!aUT10X*(G;Ojz?#A3mt20ubURCnjf`v>9oF4u|-yXhlV9Jc75tf)CF=!i%Qv zd!9gwuI^4Rx*LD+h^_i^WaoOTqph)Xq7#lkq#x$gH5w`Q4h6cJSe}RH0Vl%vnIejT znF%;Ja7vNUW*lZ_XLkltV3Wutkdil0#8?Sy0F3QL_oOTw+r}2j*C+>9Ee@L_u(7-Z z6*DnrfSnH6t_UQ|g0bBo?ss!3%J{Vtw_bH@H3>=G;51fvA&iL$VDtdzce#0+C5&j9 z^>!ipO@bTk72?!|#C{Y;xQu<2UZs?SoCF^FeAo@;X|$T>mzQS&@bI!?)O4qW9jI%dw*#8vB_T-}?e=O`6zl$So6w^)<&VJ!{phbNhHKpB@w2}yh=(_tMNn=pn z#IIJZeycoU9BuWZ%z7~*OUd*tmi?Ih*NK-ruC%rUykfXjuSP~b*Xq*}pRhcWFD|7e z`bTv2)EcOh#EFiw?tB}kl_4E)Tphsojk!VE{%a_?Tt~p7FqH)ovm24%&7XQQTH@`T z2)74!ve(PYJQ>0=fVPKdO*u(vZEm3s zZER2bA8HDzbL5^1VX!w&AFS#HBRWp{2ufDqgp?VzzEEIq-YZ}0p~}tRnxT~2hBAcY z+CvoeE9~y)fdCG>hOo2gk~>@PpgZE%XNo3frsKyE=Gma;v@`{o_ff#NqB0jVDlrH|6#|)Wln9C zKqjxpV0L-s7Hn?J!P(ilnx)(yeA3-ce38;TlYzr zC{L08|4Y(sdg7XZticg9^~^zSGYO=ssXPU?MQFeuxt3b5rRptEKUKjAoqoqQ^4PCR zBeiiP2z|a!ym{nyRm0$Sw~~ZR*+$MP5R_+0TAkC!%UsQ=Mn=_x6O>6U53Aj-uFI%e zkP+gCG294)XqG#x>E%V97-~}2GWaQx-NPgv7-!dyy$QYH%v5Q%PEQajC9>9A8j41H zwVF4ZS8~dNjTv zJ_+;yEsbT)cOpw%3Y2v-O zzTWhsfy=5~;6D!*9n# z|2(vZTU-dPZcD+Mm(`oV1dZZW%Z=l_V64+Y(U{yncJY-#g}o}CBK4iE=fIBUdNA9` zz_mp2(yWEfZiW(med*cz?jdlzo<)h5^yBn(c8U^T-^gIV46|2L#E`zhiH{h2KuS4= zPl-@PM~DgCV~?BOQux-}hV-T(7>_aTc$)|>49f52Q1aK~3c=O}co=@rSsGoUh|Zi0 zv7K=He9F9%BW7K6$ugF6arW(Mf9xVn%?~iqbf|w-Xsnb)e}C{K?)?%6!-}hxe7IcX z*aXwf+=bnz?AJQ7U4wbg_UsC}|B!u0e#oL_^$upq$)h6m0#!UZ^5X3J%13hB(3v>as;uTUl@SUXFbeYu#U$Ae z)KOVG7&`wTHSq`|_M+a1L>(smnQ6ijR^1tzzR|`m?r$kVK^Rn0Jss0GaedphnjS*B z;&Bw`xgE?~D*?M$qY>mgWYKo7j@;M1fFV>7z1DY5dAr}6e!MfUF>Mqbh3n;tR-!vc zVZ=%&kWx+HxQ#kP9?u>{@kzKalp-LNML1`kW5DgQ5_hcGe%`v#%BAB{`Iiwz;u z+LL)sE30N(4b562TJRSry#-O^L>!{0fcDe8`a2<{h{5o`jw3%!39|k7FLZ&W39oNoCK$*<*n?W-<&-fmC@G_CuVxKOpai}3eZBeVBPiAh z^3jpH zb~d9^{nL_XXhP(?!+c6zwN46}+H33_VcMQ`rEBHK`o8YWUD^O$k#3I0fLChZ^ zhueXB?^=j5$GtW!)UAvnAS=R*X!r{-_%fVfIK?_Z;6p`a1bMJW%ywhzufoz&>x~tg zKoLznFeoS~Mw!@pUv;pY`QuVPM98gh%V&n(pNx`XOgSY_4#(LHf3a-JkF_K^J|E#e z2^$oGtE*=?w)iEG8$N2>jR<8g=ix~iO^TxlYog$7I*SXeRCv{w%U2d4L$RZ*2+!hQWg&eir1u{Met#5{bv&ol1I0R z?cL^{V4dWZrSn;C5~LY``fmC7un|10F-vZ+>26A+UU!Uoh4A=>98hLHO095NXrNYL zMlEjJ9dj2jUmQ^tpYDL_7?jZVXym`juD!9HraebQ31mIk8dakl;4 zm_>R>4IOMpIH9-M`dGnm2+brV5_i`@O3pZCl5ovsIFlqqD^E1wB-WLgWluYdRD%1k zd+%%q+eM}Q2(Nx8`@%WB^AZ~vdlmsYW#4mCh{r*oY~EU?+?T_M42l7ln%Xb#j%Jgl z!b?`q@=MpEJ-nkgp4$*}6FC}p4iL@NY{jjdfyn++`x&jKah!I7j$Yp|OYO<3^o{J8 z%WACiDC;H>V|drbK$S3v+2A(X2`ba$`2D-=&dN1o6)tmxy7)y$L0Con>rm!l+C=t2 zTe(femyDHs3CC75-2;;KHO+kpuD9f|??bndNT4g>W?NMPkgg=xao48JKUE5b5(2vu zXtY_(P30HhJ$%j$W&H4ta*rd|nfo3G#I4#ux;UU9)==V=%*oQ>PG=YY6Gb0UBp1_! z+U&CvX>d~$%7)z*av+!nI@H}{Q{&!AY1o`iQ}=;(6VbVK00EVRyAq?F-Ls|TMR90~ z9~fIxK>CiPET~`cSS@ASyQ#wku(C`ck}{QpTh-3(mWQ#$>Q@gGskz7e;@+WOKb_-vzusx< z%2^kGVs9aOc`eHFo~DgsZX{vjuOnFzy z&L5j$vr6}yi)8@mtM>E25|*|LpuyrKctCOits=`tN0!*j13x{Ht-?{MObnmHBD=z( zWEw6eQaCE-$jDU-_dzGLn{bbr^~TbU%b}GHV?YsHEn+|muI_N4dVZ8iB2leg9Xzyg7D0Y-I^Rb>PLrBAT*ozgKqCr z$AzCJc&+p6JEbhha#K!FV!QsslQpUNiPAa@%wp;w&bOY7K~9Z9?yT$+hYyZvQ~=Tb z>3-8+BoBg_EUZb7W6At41p)%+`2+I!SmQCqpgKEc{X!RlR*VFE5-SawbR&=RGBW|W z&O}b$NkJT*X6|@vwKpwkI@sGF3qeb^u>oYny5BjC9J*Sf?mD_Wlju(PmWo~@Gu=xx zq4P~thbVMsfp=!1{SAP07gEZvS%x1QKt*Pie(R;Tg6pa(S_vkC(OwlKKYE+~(sTLi z5D5Kdl)DoA;@(LsPT0Ynm53dNC|no`yZiSRDdP6%{W1OQk zynpUttK(9+cr$bjECn2F%=aw{(KbhaX?5I;hK>EwK_O;pmuJxHYZsP1TUFdfUF@wZ z{{DSmu{&Y?+o@A1BmW7WHR8Ss*PEqgedU93XlgIj9R6_D8yJWUp=e7NfBw~Bdx&Xf zS;Pd5C%?8cJ`?W}iQjUn3@`I8xd09h&#TJ|8!9G&$G)33kGQAS-aS%Pghtf2=Ywp2 z%fA_n2Itbt`wvXpyWw@JCHe*^LJKf~ukkn0kDO3Q(0J?LAh}A&;bK6XVR=B|81T?~ z5Yw6_3ZDOhuXj$xcf@__Z1TePnh_6F1n7+mn*I0Or(G@IV*(04BcS%nhy%VL)gm_) z)m){>hyCCu*c7Q3tQbVe_R;Y=Z`S97d;<}2>7}=(7GDtQymOh}bURHeD_q?-<X{E*L3W_s$zLsg-&`V|I1+$L6T#JGKG~x_ttc)X+%5QlmyKQ}*yZN4H zelFiv#FQDj=jgJ`R%J$J}2%5{2}($_miRYEUG8s8`^EY z^m@R3^0~HQfkJmt;n)b2m1rWe>uB4}kj>xt^kJ9(z>`P`r&SR6}US z{z!J_xI_^;y4^TX)p@MH>I#22(SO>ax~@YfA&;$9Ejf7nfcJ(&(5K!5T^|Sb=qX~v zKp;^`x*iigZ-e#@C65t7+a(I%duhbeTym_SAZ?iBvK9fSst~av%E|9^QbQr2TfcgL zH_JZ(1fuSp!Hx^|F;A9LDN=I4C3MXsqpXoNj0jc6MPL0|W>NtcFGM!Jton_LX$&ab zh6r(Ki!1m>#F36_qcsk}i@V(u-aA|CMwoHjcR(hasRaW55{$xpxL5WhiX-zo_9Mtl zXs8|27&GGj{O-68s4~o0Hg;RLlK_im+uB1aji#-YShK*ta{l0bxL|`CGkCjJf065u zZhCCttD-yE#!yf|gy+8nqZQ5ZS`>BRGK*XN8qoah40{H$q zOHr7JfTgqrb_0$q?8JF`{*(uW-EGnPC^Upw(jZHf9%qT?bOizm#?Twg7^WcNav?fG zOw+0}DF=@9Z_F32iQrW=9r>qHpEVBjMPBKU>OlKR8$FXs>B>s@11^5S25rrTng}&$ zLsw)3I?8+qH19p?vMutg79Zgkgst3bIvm){XimGad#XA|z=m5Hx0f)3A#x1=e^p>z z4ialZa$FU(A_uS-mQ{duYWal4K?GsHl}!MJje`Ojd_zaULIZ%D(Ni1#!;d^D9ZODA zM4fImFlWraoX zdG(BP0(~`WO>Kr&HVhQ#rTH!%b0%1CW@B2? z2pr&Uj@C@1rGId##F4+JAuvU&B&e#_Az*MJ4qrHlV{=t5pNCIk1!$#YA;n{Ka-C8J z0R@L-3V?{ETvVKX&)OaX3M0nSo6%fG&~A$(+@) z25Tl^$m8jB=9#4=A!#}sx4yherfKmC<-?vuux@L#<(~Jo(Ao?`Sg%V#Y(lYRw2?a{ zO~w1RxQTGN7w?Q(WAD{l{1#OAu*RF0ID+62ut`(A6j7=6Bcg#((2fA&pBp3NcS zi)O~Ri5dkOueeQJ|N4q>Q$_l&@|4UgYLI$}Uem+HsFch%Ti913VIp28vixwdY*TgO zna3S7Ey_=m1w0r|t)?rRYJ-iX-%P|B6h=o{CMYZNrxF8~f{MTK#$uIy;23h2Wu#;M zVayBt2n?q}$C?WmY|K_qSJ9VsXaLzPFVZ3D$>T^|PAZOB=N{yH`%@iw3sBpJ5U$m= z0o~N)8k_}sDF`1C*ykK=&@-MXl>zB12p9lfcZ}=NYx;cby+eU%O)Mw)lcBe8x4Ow5rmsiFatc=~Dj1}ZXu<69+8uc&p9XBQ(T1_U*i4aE zt1`jn%}>gR-1s2EEW8R>V&ZxFX$ln({rWaC*ji~-G;XTY&m`{vuwA&(9L{;E^hxuK zm;oqdM2rla7nj|;Xuvn7iT0qk>tD4q^PNwYgpQgD;D5Sbn-TFfWJrg}&-3_Z>O>!q zI`a1kxK==N`rE(K#;~3doKv_8k8dg@x>Cr-%eZ+rz}TD))r1Or;O;Tjz4d9%!FI6`ipHeVs|UWtbZh# zER|0flC4Q*dRX@`sAYH_Xt2_@`!9wxf|^`)Y&Wd5GI9UDu+|r{{g^^ z9z+oqg+H?udoGYajgVezMObmfgO=c zd`)t(p4KERJbaZFRqM6qo=)x+rd3jlSgI5N_6rHwKIaq7VD*fA@XFLcVRtO08C|t4 z9walS5MR2IF~zKkDJLP_2oBz78wNvvW|y&8LTSWYW1Vh>&o0e42wc_VO(jvThTA@m zfpF6rXyK52)P@g#ot$AkdYeooj2MqO?Vqc)j%uR$V4u6B=042gJ5_9F2w7q;@WA6n zvwIR3Hv7Rrf%FWB2J{chagbg&%&z_)$5n}<>vIj7u+L#|aVq+8Cw|N_ady+x4MLd4 zvQlxF-I~qzuZ+L{w;hAgC4YkaFEeVC;_$fFRKja)!+4if=7LG`Lc~4QBS8lGex>$% zYzWmJC-xH-d;D^-0iTI^kb?8nc|DntpiE$xQaWof5EFzDU?@4g2+Fxh5^{(f&}qd+QPtN)|ImRMY3=3XrdV>YAJKPTY6p>s|)1<6x{eG)%9$I7ukXr(eaA4ievesNkhWR?KMI#Ub+I?~lL<^=PnHulNksd*ADb1*pLWFC4tPv zX7yUJAap~^Iist5U1$B+D~W{n3r|+;M7T6s%6;H|7U{8(t%O$7X(L^PqU7jRBI(K* zpo~?>P!2y{A1^z*m)Ion_0Viuc94Z)(ak&5Xu^y6TSg8MFQQWE&*-cOpB@wXUaSWb z7w4!SPdxwA(L^ZK%8}mIfC)H)>uKl57`1UHiOt-9r)-U*jw@JGl?82$!+BCimkd5+ zG@fCjzv1JJ`S;8KJb_2cA>iQpZ?BJ!@=}{)Jrz80rdx~1#@S!Of_W+b^_SZ|8(u?K zgPdz3ts)V>blCoHsBCC{fj!Ytgr$jjsY8-T{@BZvWnmc^z6O!|>QTj@5`uyxMQoSi z~10dxh=nL1`F<3YdX&s4^lMwfT9gq*!8-azMYN;f~1q zOHC6TvH$XD65KJ6h?=7CIFhi8$n3imcR&hlPfp44tD?^#+svZujtC~D57ce8p7$xU zT)qaR23ogIw_TT4qVB7i0QRhJ8|y=8uZik7=+xo(1n^9J^-POt+@V@euWTikN=gD9 zT~t+4-$i|I zJQz(U#WL`Pm{{muIc&QlaiDSaF`rspJ>%sGdEUhLBj%XhY>KGba*|@D+#Wtw;l{!o zIkV(@kdhNdMw;de-`*Chu|aaw?*J)$yE+6B>uj1u95GLi7Bm|;C4CW-cyMxtkTaHv zsrun`SH?)Cq2Q2llchU-q(gKcW)Wv@o^qL!==M0*I?akj2N>PG*F^r-Akx^oD}G&* z9iU-;cn(OW#5ppZ*;K9A&TC~dCku1g<|vYNt_J7choVR`fGlmuNf=GBxBRF%RSmn=ppq3vnQX)%%6P~Bv`>_U36C7ZkMD634Kl|UvR-+O}X)oCqIO(xVHy?Y)D?m@`(yfsJIW1f2Z)9j;& zEhU*lIE%i^Q;sU-`%)=_o7%M~&>d@jH0)W#E*~Ge&@$9_t>xQ!U2Jr)5^U9=-7`Jd zG52LS^}(<2BmZtuUl`kAu(`5&vj3gkM=|6!EJZ0D|Fp9CaA-ooIs?QiZVYx{jw& zu25ZclNv~rugG}88~=a6NygW{+D|3 zJ7Xih1hI28P*AEd9vj))YjaKR(Bo-`Lt5@~O#K&Es~uXPqY{bA<51xGa~vQtjW+cI zuJ%6>n2E83*q*$H!>{Be=4N@S7~Pa}^hr3Rg;sk8Al(7sjSx+~P=L_2$a8r5tmnMGU$uofL`ed9tW> zEJGgqQ9caeH5AzQ<%sS2YEFRl!veKM*R%+0R~&3s_+)mHitmSIV$0AW!=K;Oi+}CK zHDj|TH_ygZC}1elTXp_46$wnNj_%I7;u=|4{@?L5C=>O1ZgN$`1e=>dW?5Vckrmnx zJaDn&jzNFqad$A8`vG(*J-u=QhgnjdK!#@KG0oqbPSl@Tfm#;2!PUCd+2trA-()H zpmg!p#Ic2de&K0!w@$Wp^K+MLbtZame`eu-M=al@qhsEFE~OVi&9_LNP9zXBz+WY{H+Nj*Qt#YY0w;eM~}d zgX7psT`J|z^|w5R5NQ4M;W((_TfKrx#McR6vLe58HiP|avP4|}e1d_G4_lN?b?9^u ze@?sv3R#kD855decZC|+JC5O}3XFL(R$J4iKC`MB={3g8!i{D1DV`u)zJC40)QpmpMF6M!hylwAKZArpxhmZJ(1)f1dChVwTq zM#xhb#=8@9@yh-w-W3hB=w*j6HUAGZa7O8SvPAw>kRDq_X|BYT>Gxr<;}|^UFuU(~ zX;FyWqR85caE$ulrlwZEH*dBVBkgY1P25d`8Pz>D%uf12`$E_&;UV$E$*GbV-pZ$5 zjr0ZlX5D462D(cBRcC=9VY^7ziSIj-DiuRu+$ty)xY}H~1o!v-Os)`5K<)`{MX6>h z*@0=1l6;k{trxp%>3EzS1u!Rn7_f3F=ds?kmIa+ECZv z8#akH`ddgV*uJm!(2y7d1Ob(vf6w17KyUUk>F@$hLriM$HocL(08nBQ71u-gr%~`h8xO$p z5wN)W=c=H1#gqkuuv^+Kd<(Ce4YRvmGXa|rcUkkSk$sbXD$sNOWgp#7t-LA&uP~VG zn_1ZA?-AHWmV9BhZ71tXWFZ^*w$>uDGc=>5mBBHvL-MD+n!MgyO!a1!Zh%nm4p(F1 zGru$@KQPfEg|xS~n?S(JJDo*I=jxBAg}^h)<|c$**UrMXpZ<_xjW_pKj*+VLz(Vsc z=gU_LOy@A|5Em-xw`lJ+#&_U3(A?`B1fFTX#_3+L0^$eT>j^=7=Nl?#PwW6kq7s5! zps_>Ga|WzVh5MM#U+sBU1gMF+NyMwmM&ZnM@EDjTZW%qhn>RIBRtt4&`p@_WBXQ1b zm(azTf0iC`V^mqf=ws-EqW$~5$x2^ya&Gvz{9(nD=r`6^RZLSKfxwUvg0m7D>4#e#_#>X> zHqQp1zMMkj$RIsxR-FdZYlyC>p|?%w=p)UAHNy6NN^QPd5trR5XuR)Q5}x>7i)ows zQEN8+sYpVjxs(R9)ehS7aROR>M1Nn3IPx6bH)q5V>mpI8U8g{fl|-C1)5I&1B(TvI z>4)!AyA*s$L{}^G!H{52;Qh6GUExOQB8E`L*bRqqg>~JzSxzLja?W{GM3pI&Fo7dA zak^e+9t>QC6$IRMo0v#C4kAwCfDWet7atSaxL)^m__I&_P5zwZt_Q%18w-rk)#vnz zUIV!!z4$|O6N-oo>xua_Zy{c*n>;F3ZobvyRY9$8k=?i8lc{A-Y`P1GO6<7bWa5}G zNk-WCjCvs~XF5k|!cGKm5E+b@~1$$mM;q%ew6C;51OC{Rf+%d8ey7_D2I~u3VmitL_c{n@4^iI>GK}~Z{GFXUy zxOb`Wn4})S2_YWrrGvGJkYTWwN5a$5>6rj8yTaGBJOg&tVj$BwOTAD|0xfqmT~MM& zMrI|p@H+E(k`eSaok;Ytz;bG+!}IS+OV-x$x(3<{<9#ty{Wt<)lJP%%jdHC->g@aD z{K!7b=A@5p!qS0)GJ|7h+Q=z!vebOL-qxJ;`yNWeB`3+j{ z(-29FAstVdMBLLV@Vt;h{^Lq7zC`srFW<0o=U7qN)G`uQE0OT)$H% z<||r!NYeidJimWl7D?$z6Iy0W8&LPELZhUDCP6UEy=@Ky>nLad^tgxDMvz=24;he0 zR~8SUL1r@6sF_0hff_T=$nqj7lkc`TsLiS+BY;47h(2L|3NQf=gKMh_hT3%2x6=`xvr576y{+_QL*zBxuS^IqX_|>p>b)^v%(PAM&!37 z>}bd8!g^rY)}iOQ%)a6DCWM#nQjAz2tJAmbHDtdcJ*+1EYZk?u{f*Q?wtPN*+? zgb2G5G-d+u=9Sj@UjmMSs#&{A%CbI3Cpv_%C1rAl)t9jcmogWj3y;g%@KHHH7O7C* zwEjz6kk*ON#n&aw-bYfveuTaLr>+%c8cI$Zy4Wn=Uw?y9T&(VMtmJM#yM!PI@l>Qt zHTH;U?$M{U^>(M9RMvkFA;0!l19ooB(tP6X5n{K!CAECYYNmwBH2oZoC(5I@x_=_9Jz?SR2;Mj`;H@Bj~b|}5rfsvZ)@_&1{SjP~R z*d5Zaaxbyc_vt+t`9Uz$vFyRIT)IZylUi8MCgTuCNqrt2NT007x+^fFy){Omm@_E3 z>?^#k3%1LyXBgA%UcjH_VV>$o=OH9~(KLCaTxwSp?(}!fgUCz#&K`B$w*BxDwwNjP zF=dmo{{x@A-K#Nn)os0RBY9|D2QVfe%9`$b@-5xAYBhFfhdATLCL1W@oXylPHQL+u zQIZP&`X51-(UwLWif7$rJEps4Z=1Yt^)yIAaXB_T8z zF1UDcJ3R?6CRAiClZ>jU1-m);VfIoE*X!)9Q>x>K3pjb+Nkt_Im0gb%`eT>=+{^sT zi6v~m)5aIt!fAEJ@;ozol?QTj zP7Jqr3+Sp*efkJ(UDCtX|GWCMuTThRGwF}uRj2z1d|U?vnC@^Q=lnl?#Ha}EC5P_;>erEnYkk> z9E65*vk3rZIGJwRJIiB`<*W->V#S(fV+FH9BB>fc1N0i+FtYqN0N4-^l2i&=k3)70 z6sK4wcR?S^DT@r}5)!0<)zlgk=6d`>#=FW3@-`4*2a4lF+ynq~;Of?h9Ee>a5#vY5 zjieU~a7Tc>P!4)nx-g;AXoLn+aR5p@o%{Snt+?BVW3nPmJ(E6gw$?A&*Zw^_>s0m6 zt9ZTl+F)90OrdPw3T{d9?^sP|SoLCtP5>}-43-DH;nEu7roR|rfkHOw^^RaePFko- z_VdR1$+P>=Ek!k4mSwrk$5Sy!O7M)R&rYX78RvS%jDNg;^1Xu?nS#cB$rGTNASoaQ z+ih^a>*X?^NYZs2l;WgPhKPILr245kPJ9#c0(P|dy;Syu-AjpHpuoHIW)@?pv8qPjHa0xt?rUTl zE49{$Cg7dbUK!pMZ<{Y#H&wRiE~CJU(c~%y-g+YVV51q7UZD27T7DU zwXmD!d@l)nu$3w%BEDido^gisJQ5LRrrR?`rtL#t?mL4vqY|S2hth4$4`KxxRW7X_ zg}*MD(1FlOX*&(lfJvRx(Tn;0&6`5GP%>kqvu?+nxam%$BTvvh$%UEiW4I-nJxB?? z6I=tYcHHE@*jPh-&g0`(XQcCgv%@Og_R4&XbO<`pti3Iw8`r&L0X=|x1oLedsr2H^ z_@;vEQ#VaBp`<(MzhSA_4YRQEV{m^&W9~UXryXp4y5=nD4g?_2E)k~ghr=aXn^nxof@kR=c@D3B$I{&&$F$~V9(4O4B{^=(e zU5p=B2Q|T3_y9_DJu}*3Dk%>DLqNR0lJhFrOPeqD=vx(3LBp$P>a-$XNFZzQ zWq@^{aMu$DrmY2B;uih3zjY_5Ex!RPmpY}kFlrYh6!GqFY!7DejBTQ)*=+KiA>azr zNeV!>1;vxcDmv_##YtKGv3}Op;vD~`^Gxy^tMHk^IUpIzJ(i9&E{r@wBWm-V4prqY z|3iB{B$11L9g``KW(JMqV);&P1*lECQnc2e*j#6D0+4Voe)@NmkR9sXykCX zK#CXsxRx;Z!o_Libv@p}yB>d8!?+6bf-J99>nq}3zPremBbAP~P|1unN4n9%J`@jinf|;CaB)*VV zu#1=&a8%9`IoFP-G9OojxBH~nL0O2aeKLlUf(gVIhZNwovI2qs+jz{)1nnJ`)v52U zoDRcdv5}BuG|4iyE&LKcXV>C9sRsGj!0P8R$tl?>ZWlpeZ{tY>FSpPP0t@tmbKDYffM~C9cPQZXt2>zk?l9=l#t|4hf&&vP z8BNDc4|-(t!)LzDh|rc=L8%5gkcqiFb)$lb zw3j)Y#U9s01b?46$R?K~wo&>Gl%e)b?4ZI-$W00Y|>1za3`y(z2mYueqYM)K2{jgVRS-~~G=AF-5I zn&3S(X<2p@GlEuPjy(h!d$=Mz1K1Q z9Q4%uu}dl&Ir;e2CdB>PLQz1e?zz^r_pO%@s0j6={bsWN|F*&sj}d;yn9GEF9T`jF zH`}%nn$je|tz0UqI=V1DX<}HeZV_L(3%EfhHM zjKHtbUNg5{;di?nyc~i0w6C){tz|E@M=>4I?6a8(6R-JFW^KFihuKkD&MCje-G*2u z?cXLP+InV)2<{wv+QZ=yo+yQtHX^AkF`jb%1eUN^Jp@>%5LKh>j`E03E1 z`YB$3x>G)W4@TY?zd0`FjyrnQk?rn5E4F||B;YE?d^|n?M?JOXdKcRHwSiWJqVeW* zL}Z|c_aDz{g{;A0*cC^y;Q34u&I4gz_vilH6Mtflngr#-{21b&`Yv%+g@+o>LLp2K zwdG=$$tA7N#ujltGwA)h>2=4Ay-}iC-Ba(Y#O^WtYgg^eh#=EJfEAX|d#k(z|9#QG zV8HVaV~~znMsBMHK3c?t986Sq-&wPM}uU*A{Z0&o=A6L70i?vMY=E*g}QG( zj*tXU=c5}6X9BEx4b^V^(01b7W&tj_Nm&RSP_mQ>m19|eL&dU;myBwbR zOJ({+Qo1n4tEd@^FcQotjC!CKw3S?5=*dINlY1y8N+n0Y3XhcqWS9?o^JQpT4I@5= z*=hNRK$HDX$zeP#9*5GU;6`qUU-J|TPEUH^+RbV%!=>b{agD?G?wG8}IVSAP+#<%m zMU6}eQ_Mnwb`9G3=1{F=A+VNSydIYm^bmc@e&&Vr@GRJRyDwFm0F04@>wz;K#s^m{ zMMssCy@C{u0Qwy>bK@)NztPBI0YlbFE66;1WGj~RvUQ4Vl_1YS#b>OA{sEh#Ubq!k7BcycO$s6B| zBvnE_^~dlJfDeunPI?5pOlE*EfXJL}2LO$X9<`DXTtl`|Qa?Mx(pc!enVLNMNW!IJ zzO>_AQj@Zzm|YBKAz%vI@fPa)5rv8Yg=5BLz#_K4kt!1%Xi)XyA%S`>`D>w58UZ5x zz8!uvlyBx;$v~r6K^$l%tNXKhz^4{EshRZDz1=~Gn1F4a0Q8E!-QfG9PuqR_#g6SRFO0fb=C#SvGTm*TM81oL*aluJku3X$lX_*~xs@t~Xq z&E}g6z9PqwMQs2B0psc0g!u;b1Jd%KYfhdRE0!eD!*L<_$P~jjq$-gs;KqswRIr+KK?IiQll=pewXza$Yee0UUdIKgJKn&c$+r| z%BpsZ6n)N<%gbkgq`{|YjV+@c{tMx4>PcZl9NAf1vgpA6&wUrox!)tAJN>R2uwDRx zR9oF}uLcr^uh~fXZpGH64WLeCzg_RIveK_hbY91|60>%=gnd{|^zcf@-ddN(; zKnw=2Ou^M78On&S zGmxcI=h`%P0C-W6*UOnv7pklzEeep2rRN~^%Eh?IYA2f$vgjwxP)$ox|5j%(RBqis zvf+v{0C)}|;Mu^EGZ58Q@8BTY|V$Q4w+`&dsv z#{%DF6l(-2r?WM6N5TyB{G<+Y-(%f7&Ke_FUkE7K-}t#stsWP4%l%;E+>jsOWewv@ z$a674-5&f#$I-!`Fu2@1*p~Dxqy_0eNe>o?N};tjjpJUbYFc~-1|*^(1K8&?sx<-s z-8*pfC14NX%IcCilEQwmB!MX%`OA>hr%vIcupYRq@?LyTeS!+?j#!Yjrs-BMXT`Sd zn~=ZDyElVFej?ORJjZnnW5qrmxKBBJZVNSX{rG)JIoU+cd~*rd>|NccP~nVtCmcr{ zS{}ODY3%&99Ok_Z(Mp%~SYbOG)CpilEDk7gh#Qn_c-e#VWaBm2Ox;!AmQQ&3<Jf{D>g^CbdE=^x?K|d2>Fc(P|S^+pn$ z{ZHgslMr;pTamqoWZ!7vYOQv69o=4HA2G^Tgp0(h%DG{lUia#S^v3U}TXp zA~slgPR=JUoY!m@M$D#UVSEZHz*K{f{NGJFWo}*m<4)W@vvs_g+(|p{Ja{BOOihtN zkMQyHbWMva!-(H=j}O-(j)O7X9=#x!5pID% z&RIg3aSb}>;_&8jcEaQPbd&(GES{T#i+X{&c^k&!s%{P}o+bOO&0p4YlZs+>pjq?* zrOH`@hwBFHU9!|w(#_~LT^0J~j&)g@EMY3%^rTmae9ta@h1b*9)M;>=*y9 zV<$d0X?;#3zLEO^J~Bf3yk-%xUAVoabbp9vKJW0czIMa{W!SdUIezHYSzC$_Iq!fQ zr>@B%S?>N3Y-5ugWJYjKpq$-|+Y=8B*cboo!$3BW9a;@UBP5jk$oki3<+5f*7Qnts z(X?6-fM2-5lRqn#arl4LWcLQ*2%3mZZ#91C5iwha?V2+HNg6#|3g!v#~L1jvpwwC1abn1mU~ml=R$_{C7(RQ2UUVRFq(a z6FDE`Z`ENboNK8*p1L5C4Vma?rd$;s;@$mo>!%xCk%8r_6HI{ghUaC^R$TBaA6k1a zEeQu8(iwZ(QDvWElqVN5$B0?l=ILOYt3&+4Z9RHDP7?iXhs!>4e-o&5sA{p1O%T>w z@#Qak63f{^-fOH2+Px|1Sz!Q`&4d1?YizVgo57F6QH0z4G=f)=Vptd8tx`zjuOYgD z(4E?$UqxA?pRwyNyj0c9DmwCG3Piv)2sg4NS>jTGpi^Ks2j*aHK^5ZBlE!qe%BPRbk`W-S>*L#Lb$1>JsH z9J0+Le8osBdFgiv{#C1tmJ@#a$W@u^XuqusqvF8A;qGO+9!iBg?$@l-hq>}$4b1~XLe`8aa8O)kjeAbFGL zNx$45STxB*O739mI4bYO^^$V#Z3jNOF(LmPuZMqnJa%^xcbq)UskRgn`CX1J^MP24 z<$4ckW2ggqZ6<}~qxCh;TVBdN1s z=%k?Yn`1~ILPis6dDygJ{?=h@v~^&6r(%4kECMYb0;r|lH0X@grpE!+oSfMisVjuS z3k}af3#OI()nU_a0i&kPfSfWhDgpTYlNPCohR^9BX?h27XCc)drcM^F^-PBGidrqV zRpwh;lO4|qgGtV^c9Hw}s}87P9wM3S2~q~}prWsfsMq2bd5hmU=bKGjT04n8P=v(s z(3YgPS5JiDadb-S4eMx}U$MDpN4pPzP;%y1$Y?YXDC9l|e$oDVb1j>LLWHD5-Oo54r`*sD8+`u^(^Z zc}ZTR?v?-t0u1C0X2FVyE{sG7ma!}L8L~ml?THCOEZ?b?I#^L%)TO|Avf?m&wrTecMMkLa>r>=r-M%ea$<2FyD8So-w^v7M4q{nN&Q`1A zY9hQ*LEbMGJl)z*Y{B`p-U*K~dv_!P1)P>5mm2Lo(%pzf5-nsN+TX__7iV!p6LK)8 zl!kP=&{%7{ybd*Bi1i#AN|@@^3vGao6N;=-VhlYmV9~T^m58e8AKRM&De;4MzPmxt zgMDWo0*LhUw@DJNCk>O5iTBEK-O8mqo*3$4Q@vS)kkJfE7g5P$9O~x_3E%j;xGiT%*K}G6 z{IF(Oj)QaBllfB*EYy39x>*(${{^5jG^o?V8H%55a`UrtOfT2>s^;F5)#R{b+>*7% zd!|v9y#AYC)_4M^z-fDb51~TW55$1x2v?{WbksMRor|uAW zD8KT9UInB?yMqCOx(`hNh6(y(&N}`k<*MVo#R^LtAR3-sgRnCJB}aXtF;Ug0uNHGf z&e4!D?HuRQ<`|tM${E&xbw&+gHh*5O7H_-DlvB4)yQ|3)+?yPMw3Ni(2naA@snEq3 zbep{gZp;5R0P8PPc7 zg$qGo_)lbk;uWyUg5Px}PQ{j*FC8E=XjT~5o(nn>NshwN`IF+!hV3mc=N)Pc+QhbG z{mSQ|BV1#4JZ0}i;g zIJCF2X8b%WIdb1ibKA=hF5+qht$h34{CajqrO{xnAA@&`{1V0HY}zAUw`p&vF2zzv zc5(J(oj>XM>9Rrl{ zMRH<9-TtAUDTuGY`e(tY@$>h2ozH`$DP25iFWS_KVo_=faK;5qU+ZxoU zk20W}teNJZY2C6~hVA_jxpVlKmFy=LPHqCX|E40&R0n9A!=~7n@n_J{X^D_#o7uf= zXDDDECifAfvc&&@=X;ri?<)hPsy59u$kX0NYXfZybqS4uoJ(EP8Up-M6QF=88}dVU z&S{$&gsNW*wJ+HqBX)lCs5C>n>sCDt^Q94W;U zfW0Pg=}xe)4;aXl83Q)&Eb+ddt3GkkvIhm`89n^yeY*&g^Fgu~Aa(l>NF*Xi-8ZMoD1Hzh*H-y3p*#j~OVdRhuLJco} z=!|vx*UQvyP&oaYbpR$acE)J24nWmGRC1L8io3cB#8koVXBZg>IG?FEinW>P0cx<0 zyK^9>aCWx<#2icJOuw%Xagy*W^%TwQXiDhM=ZMH+2~^Fi$u`=Y3lHUZkM6GT^7Ffo~A69v+j ze%z0wQsjU3iG67NY??zP`DW?vs@CF|oj6V|&*I)v-chVCFc`M2=NbI~Zhb?KSi?uF zPw7|RhCZY9I@i3H;gSkq zGHx7hG|p^q>bmDs4*S~c6>77=g0AT{L;RupeHowf=V2fnWVeeXd3Q_)vroMkxWytcDLn~34zKt$<$Wv*+1PAd+{F1a zW|#Xy`|YN#j+0#Kj%m+2jRpw#TB|y32WUt67k7f_r4@-~kq5 zU+YLOEJ9^!P0lTc!NHZe$pY;QjX;o=c%|al&6Nm^zk&L^D$8QMo6O+ux?i&Lm7zyE zHN*J94SPRFP=^VU&V{>L42$AZ<=6tSFO$wb4}KeJ-DoY9OkOqb+M=Ykc)KqRUd0Fe zELu;J;?(A69C~SW+_Yp=`(}K1i_Y5>fGWJ7ThZHfT0Iedm#X752^?n;)m&OheI2{3 z9Qsj!4g?Vh!4Dl$;D$Zj`wLcR%Lj?SinsX|AB@kmsZ(j$h45cOOJP9%wO+?G1mmG! ziai!vt<=fQ%GD{p_-l=F-#XOBiuP8Z(Dgc2k1mQbd+P2F%n^Sgik4m;PBhi?14RoW zHs&d*ZT90Kxd-WQc(^>feL1EkU3)=#s;%$iu2HtWC`BP(LJ;+_N+1Bw;HVX!3$#yW z$#?Dy^)00YR9QiF!mH3qjaW(M)nW$^@l6nU4=N-q3A#KCUcoJk;DAnQ0+xMq{ zRAgRF(@}ahL$u6)U(F+6@yCiJlHRBC!quYj2B;)-xidYnl%NM_&j3WkX?ETpf!-0p zRHfFlyxxp;ko!RQ8azFg(!SJoI|lhKV#YCr37)KPYE1nzsfTeu`w>%yi0E4Jt8BOe zGRAZF=bsLLdR=#4ABFH&)X(XH%Nt5~yIfgo)g)$jkfqyM9g|MomYkPIr}l=3TS%0e z(`K7j8rupW7Y~A|6x~9NTNlntOA4+?Qe=OH1mq=BJpGSRw2|Nm#RthJo({0r>a8*& zszzdf1h*qK*AhNll}~x*pbUg;+?dVwyS|wzA3RJ$u*l(nr!56bD<87Ml&|nFL783ls==AD=ineC5fL(p|cbbJJ9c%Y$l633vURaU&2w&9{ zqSTeI7uX>-e-}owIFGKaZkPFP<$kR07`XV2cB3xve?1qPv-ZVO7`VplBl6#p9bBv2 zdmeozUF3^oUS|+N-ln+RQEU4x9d}v01ih?xKoKJ3XHZXeY%?Sqpu~ccEkm#a<)8*9 z=E7IEShzUP>j;F6t|P%lREJ>^6_v`k0mkm790s}+?TTP6a81IC+3ffAbFNVW3F@8~ z6_QTr2*71?ZQiSjw#s0fDj7nQu=7qD_*9MPBa^!FxV%!WNFuIn%LdT6Uz0Z#RHHkF z-`5D!i&}j6Krgo_@5<@A9ZnHPrHv*42h)DkZDPWig_8nf2>CTZf8if!BlC{<>QYFYGxrC&KsJjJKg3+f@7d%FE5PS!t0k-;4($;rkgGq zdpE_sVNFLvceJ7DYD^q`RTF6fE1M@L#_3sGR2~Nta8G+Q8w>mA{<8GujHPOyFX8cz zR%Z>&Q!JsAS4y)u*#Xp$C^KXT9$e#w75r^sdNm;G@s;`LmY1LnwRVz1IWuxL28bZm ztuQi;aIbsiK?enOgOr33Dt(%sM{_YR3G1NWswWnEz4(45DG!~-&d1&K(ii19;^_{B zb>^wgQlD*Z%+QRa0X3{tLNqm`w(;c^EH!D9IgK3#-TlI%&`jyv_1x#(;2aA84Bf3q z>5DWcUzc`wAa-}bFMFqeAq!(EbtU=rhE#GR4X5!%-wbC>1Kc@S%1pm$W*I{-UHbl_ zkiBD+(6fC>O_jHR{Rd{<5-~luj2>jz26_t~lP5z(|FJ&!e~fX{BO=T)hpDB&dx7A! zVkvd_@^Z%#rXrD7Gld?pL3BB;AT{0YTVxY(tdx@uRov!O5(zjLB)g zj?9>e&aRiCx5`akYkPvrt>59N)auY~bm=4&-gaSd-Tdcd+}WR(o1y8z5yZPY_es$< z|I7@dJ;@Qhbm$EYSR>3c;!L_0%yf*;E_Y04~#K+kL{)wH|L&ri>cRXV-D<@DtV`*g|(h@^^|}N_lR2 z5S*R~qSmvxYffOWuP0HbL`xNR2!8_)K!aJ>AmD-&mNwKcnjS>sa*;`t>8-i z#<1FG%00xCMjCSka8VosiH|E2WLHlq2+{Fan~CZP6rJy^pQ>HW67TtQ3(LNIod(9P z{$TxID~-m{06eA>_)qR$Xezrn;SANqK*yNBy5juovwy%1{()mA&Lg;CT;IUBWy1ph z8Ak10`I2B{ml;U-Fj3#W0OaMv$3>&=agv&*2;-yv*>-HRYHrDC-ZU*_;Gy?f^zO%- zTEL-@Otm29-YR}?Y=65?MwEDam`|QJlS+);_M*osGid@K_Y}Dt;Z?41z8>++TwoDC zG&zgcEPcH=*#p_UigILtJIW+z-j(5Obuy|}?${c?Vk|?+brR-2zwAT?ygPqrGSoZW zSV*}bZG<=}!G)JS@dP-rX)YW|c8roTSlMP_F`6Sr9#wlqoUH8&f%B@el3X@HDqh3G z6TnNxQ^vhijf|)58>%rcTBk#fG4Tw6pH~`D`x|2ywl9|Q6#lKJm)Wz3?XU+rKGJsdsxo%zVZ>s5e9Lco9{KisL+sMkKb7IkiKjJq7p?pyzV8+i5cus{mmTbS zbWt2WWRmRJ56*bdZqoOHLUmQk+v|+8SODp^X6N&u1|I5s>A!R*xh(iC{OI!W)jRBT zQ!F#YiVy9WX^GIRv_vW-zo#Vc_|5d+BNi?(UQ|aJE=c09jr}Hqpy?BMS(QVCeE3r5 zqBu4ny8@Tw(?!Se=~vU~on)WO5(Iy;azz}G#n%XKw>QC?3dWcaT^xK7gTf6WY~1k` zzzZ{guH+IG0?!`HZNQ&DPs=|RNIYn`iP-z5_j3rpHDhjX0G+FjAfW#6a3JRpVY3nd zm#JdL`08WTiE&Y|uC2J#d`UX{mYCDm5h9uaX@^$jr8*9c&|Ni?03EOcRK7@fxgziW zjFMtogi&LnHKf|B$9*}C+ zy+kNHq45c|<1?2rB|6DZ5xBrj1F7}WZPLS9G)u}4Cq#&3v4L3KPH5cGSqsgq101efH=6qOa zle@>b;HzPwzHefyDLZkapQ-BN$Z_e#R(6^o_jBav887i?d|kN{VBOuHCX`op$4qmp zY1;6OO~-wj!M-w+&4$56F=&P=J$eRvV!XZ>Il*#;xe0S;gVits*Z@Shrp9e;U4%1y zlD(ERV%C-1agRpo+LW1Q6?5S= zZ#Q%YxHmlrCwgnt6nzIPX~_x5#g4rDt|#WAfGq|pBTz!y5dod!fWC|{tksVTK~xa- zC@G0m%w3(vM4#)j;HpC^CJQx0u>1_5SS;-;qz7)krfa|5$LXPMA9n(QxCQy-~OJdg`rGLK$l@i~io$Hf3z1qr+M5pcnKxpF3Ay1-m_{cZbhwdhXi zfdQ4G@FM)_HO}f0)a)Yr8o^IwS3a(4 z@Cb2=0xWGY+;Uu7P~8!Rcl%O6%dI47u!h%Y67=U%;zO6m=IzB5mio83NQfcg=H3=3A=Z{^&7R z!%7@qIsSviet6|6CMA*K1;HbyGC#DJ|A#HV*6Ses_0X?!(!F^hb}4;UtoM8~vO=+Tl{8ja)|B&i=`r-z6^|@a?w$@V2TjbgxFR zmrgi9ChD;KamU_yzo`xL?S3=VJ|in}nknb~0cOJ~KYM!a@^!GjBQw6!ABC6T9SyG4 zhk$e%+7s|22}chtO`cvE6~dKPA-o}-I7IKI$R_XLUHKyQy4eB45BZhn${)Kc`p~U& ziSo2MlAZV3b#IVHDjoN964m?ojc^OkH+Ez^v;1$8IYJU>xh2dgh!Ywx$e}d>r)(P~ z5Tomwa<68uN%~1fp7XeC#fP)a;Yj$KTFR*y%i6Le9UbgiGlKTLT7MNs;o?9$xuG5~V|0Qm)+evN-GQTN zYGG=(yxR+7)Dc~Nx%3ucs>HYv*p^_k-i)r8BHof`9$x6w%(I76D$M%5Chh{rVg_cj z)^-eAoxgN{U~8G}@$r!uJMBrLeR})zYc{GS{@`k;076WABK91mbR1~p5 zE>7v!kMKb6_)xoN;)uO(5?xeU+*ot2a#N_*VaNajq!4;6_jw^45u&baf^LMZTQ^g* zgZMJy7D+QzStyB1ig$^a67la6=D-G$ztjW`2dmWD%8f}3Otn8oz9hj^@i@j~ve`>4 zp{n9;y|@nKag9Qm!y~fU%4$p+TGI0&F9$D6ypd79RbSbI(mcrO7+`~p50OT8j+}_; zQ|@L|qubIK-07^&nWy3ZY*`2lfkyefp)?U$X<^B4Am~Hxg6s7U2xWZAj;MDx0U3Dv zc3?bB`nKh&E{Yx$m(j!M#4j^v?o6*KxA!anx^Y?))(9qME!wLi@g!6D zGK4p=YmpA;rc?vG&!EA92d-U%OTA5pR|UjNo49g%mOA*EIQPW4y6+jYH5wyycV_nN z7_&i5yuF%k=nmL${G5A*6voJDF)ETkX2u9a>-GqHTjT7-);wNg6akChnewM@1d`OS zG=A=1mt|PFJVdqQ?&(}0u%eW#!Hzrk#@btC7AWbTAvrx}5?Fh0pU7MZ6($A$ zwWep#M80Wc$BA6lJr8#f4mjfF-}v;T`^L>7jU|x}$=m&}KfU#$p)SZzR=2HVrdL{UN^y&@`_fRVh)i($1|g(lL# zr+@g-Xu#UTu^ZLhqX(p5TvF=o`t7~*OPK2BiNi5sm$^0qRsRY+JOP)dy?K#jz_L}^ z$W@)qcOZp`1Gx~C*1G%w$Lk8XMcqB5&%DY7Knh7E$h3^jpVAN_lIs!;lBQV)7W;96 zH6F{1UUUD_#pRDa*l2Kxl$&4qn*J(=qvsqi3g zA-8Fj{fxZRlDb@J5L2MT>&pc+c+-}#Qjg=FdzyRrBK{;e6w#Sx2DAF(&+^znN*^gO zG=cmD?C=dIB+_Xuj_hg;iVq}y{N{)vk-(SQ$`uhK-v&JWJM?6r#RMOzLM1YcZkY7m2%~ZPWyW|Ki-nO-piNE;|*Gb%AT&1f@s?-_n>O=JLK7aueUyv@jH*? z5N7CSxuBPy-!-+n`Vtw-L1p8ulGk9Sev$#UP2Z})Mjg|Ls6v2n!u6U#pLWo8Q|Ch- zBm2s#;SqFIuXI-%KVkaLJ_hbTMvH~F#SRN&9Oe0D#P~zW^Rw+u01jR0XT*h;e>*(8 zIj!&(MOv2VpB7fFD_!GqAXkcO7z4CH2z>C+DJA$u(^x(ykuiX5=`ED@LBclJDLGxq zrz&~Hz*OK-!m8X(Dbb@wRB#z+pgQi#n)q9`fM#_p}pBFjQ#MO#rq-FeC!fS(8a`JPq1*qxJpd>#2HUI##75MubrTbrrw(2iZ*ullbN!F2|aaRMX= zwG-9!UiHc}@e83*@7r6EyKu$9`_m%jYnyrzO~sPySMfwX4z$*tX`A%h@lU2n(v=6% z_ojaZgnw~>@z9rLZI#+$ESzL&6Hq}{dH=PmL9}CPrF4Suo2rpbYhYiK>Gt{u*w@In zAB&-IjdkS=HPpKYyx`64rfvPz$vPCf{tn3}(=W7Rj>ozy%`2O&Hk{vj#Sj(J2#r9; zf6Gx!o{R@C2_l68Jqjz^M!@(c=cT;(ffHG*TF(33yR4!e>d=A2`uM%A5$_y&=s4rw z=(o3yk+U))Top+4L$d|6w5#S2W}h+q?_|tL@BQW8IRm${DAf74R2z06ZnVKb1L%uE zFv(ORn*$ikru~eHhIlqB z46mL(BZ~_}Y+-01Sp$$mK4kQd7ob0}HZcLF+();h;kEEpmkI2LYovzBha73gyb-3P zLliG~U2=jjyCYa*)F@@BVly1+n8mXc%kc`5WEi;(Z}Cxyn4e~vwTQ|~+T%Z}!gEP-+dp+(36ypqQb^}fJ7me@IQkvS^@ zSJ62ht?RC^KWQ%?n!Nx_BV+GczZW->==gbx9>y69@$1ZyW=4@3bN)|xrCZIY+(zl! zVajQ6IDab;{FxOF*~ge@?ZiH-VddC;ovncJA=Gr#$F= zD?A0IwVl2;x{2nXclP029g}y5NFyJ3_up!uy{h+rikiNELB}n zOnb$o5A9=AL*u{`!ZtqH#t!GX8M(XD>~ou{?@F6oV4}6XFtr8uX;>{4t$>5n4mV%lcit8YJ)HF{>(C(ux57JaV7vX4YN(HO zys;M%c2>!!%Ns&taA9TX-R+!QTmtPp?Nu)UaqB5S#KUaHnlk=b(RR^uY<6b;MuAC* zB2$GcnNI}VKXV3#r;$t^K2Yj1%l30<{aLwnot6kI7;BS#f(Lv$`tCv_Q4!H)e)DtI zk$lFl`(o+Py#w&Cw+DkdRI7rA5DV`f3yCb4OV1`!8f`qhbTtc^EzYV-mFk4=EQ*E6 z^5eSnuTlbiXN@X4i4j72zwYZ1!Us+84+C0)>NC$Qfj>aaPFG393d6@H5l(e~mgg1M3FWAsCH!L-XhRg1$*V7MA6!by5I$JSCN>fY!4$idAvOT z935X{b}7FXU9~+2xw6+fI`$Q09BcVxGBBU~-bFVJ{%~!iZxa~E-k5Kd+HH!|egvW{ z5@e=C{-za6aY@AAU$+RY!5-8uM=0+~kcs!OA^hk!H`^9(=%$d+Dh=KT7Ah6>-=K&a zKsC5NKC(S1m4KyEMBu(+YHsuPZJEnH5`*F-pIt%t6ff)d$RRtmw?h`|*&Xi3TZL#n zwqQ|R&5mG_K`Bf_bF>?9AC8u1PS5i0acb}o^Q(k3q;>kT&uN|Ptk#+UI<3QO9KHKbn}>EB zicCQXy7u^hxW$b!(4XkJx66{ier{T~59tUEqZ3s6miyiU_jBibmykP}L*OEY1+;Y! zJc#$=u;oeXP}y@52sQwcfg}fU zgKdct6c->MHYB^o_51qD3&}DP?_=QP_l`_(8~s9T-H9Ow%K9S>h-cka@zQ0zI|PzV zzkV#3=?_1x4_=I)x1=DFokG#;Cepj)=>*$WeZ-F=e^) zi(v6%L6(r0pX_npv$89+DECHE;6-{SqF;s+0i?H3a$`Ff5R z+^pny3cu4$er&*;q2B`EV0+NFJuG80nWmPiN$)=0KDmq;yV_5`^eSdbhOrwLB-~6*2Vjw-TQUn9NH{GHHpf+t# zP-+n~JzAUzQcC;mk)Z$Tm|7Cv$%QZFDv+M6c);DcqOCWE2ljVR$hl}w6^H9&T$aZl zLCC-qdyOXI=a)}r81Z1a$iLWRO;T8F;n9zm{Uw5RjOuadPObOm@p}I?wnAojPwGWs z=QYtBj39@CFc}^N7r>2`Q4h5mKOWYS*mQ~#$3KSX6!J0j#0qBw#MNJ||0#1UuxF?7 z;cXu*NY#E2Tz5@8Y~CI-4_(3Y@Gw@aEF3fq<;MzhFr(0WNapvr_x-+L4#xDMF?}_@ zc<7n&p#`->uawp3KO6VzE1Ai)YE`2_kw8*WK9hLzwq*X_>$r4xx*jH=A{&8{ktXqO z1F|y=y!W>kN#Yr1M0cp@Dv{v8$F(eP*|K#l2)W^T5%mRd^klg-083dLVknss_Z>GW z@)zhv`iN5RSDIKF*{Q%oH#FK6xiUt&JpbgGiG?J8APhgnGRNhcSQ>Vr{uk(Jv2;G# zL^$Zk)$U0oo!i>!h3ImNo*O^B-Wkn{qU|neVp=^58^4-@@s(+`{v$}y3c(_@7tgZB zMAhao>`B0;IgIWJl|b=<6B{YefjI%#;CrApJ#|yf?5wwWOrLIgI&@)l)hM6Oz5G3? zGedU{p1Nr~k-XW`;fPkwS_U*!A944yaBkeQlAPq^shg}$(}0ehvendxe)IWA-AHL* z@!9H;GI0wkD1ck8y0?%xwnCn@!MCyx4f08D#n%lP+4oGCnFIiU(BYepnSUoZJHe&b zvWP9vUB)1yKZlCxvYy}&G#65xdc#AsMYM!w|J1ySxuek>PjZ5E;~OZdL%G)j(?esx zgPChEv=YT*lu&x0X6*rEnh<$vH9sbcx}%iMpmzg1C`N-W$}X$(*7`m^L4W}etomu= zZ399Fu3qu?Bai~QUj>9rk>H*WTnmCj8~pp#Cbx9Z{<DAsmWUN5u8;^| z`D*%dlx?P?M&32z^*~E%g)K35`t%kilYReoInnQ}@?TEu@K*ipvdm!_u;b_6svbNR zmmd$S8ae;v|Jf>-Ozr2mAV}Xyka`nU`PZ3KP^fgP-}&VQ-wi_?+N zk0Z+MC?s$( z;jKCYdF&Wk!n3GbP|U!YT_XJrUI?=jj4~J=z!AZg2(6C~3pSTU3OyKjK;b`tP+66Aj)oX5Tq zo{T3S&lEi47}3TvYR_B_Phb}1XW?vSe(_ot3w95rfs)4argOR#@Xx{~_Oq}BkBlb? z_@9MSAT5Ilhgs0sFBDj9laTv~fl}mVJfFa2h#Z!f$0-H>Gz5DFUknQct3)ffcMb>z zPl&02wgC!A$$-2AWq(J)i6N#W9ziRl2oAKZgB^SL2+4djEdE5Wp}m9uIbb=+I>p23 zry`;6jbz)z!;#R}MiM9w_^roa(bi({z0@z*mB6*`8G!EvoD*OtMZ5f--JKCGvD&(( z@wYUc1>kSCf~6v`?Bo=8KKRSRB!%jG8z6tf1VH;B?rPFf(t1UQ|`hGzz+h2hPN z^cPvsIt072M%29^W!W=jVt^Gs*pQ*VaXCvAf^2JY*PHc8su1*VNbV9F%zzl62kMzx z2H*CwU`f{%wr5Fi`uoasd#~kvVR~M#Y5L?|dAcJoS#?ae^>$tH?^zO0}4mgl* znF=gxnH?ws)_-#*rEazdGSr-<57bXp<$^cs3sfuqP5~@7 zua*Bz<$se@R`5UrVa-uU@6lE8AIx7?j2X$UePxLOtyfGKV(8<{D+RNMWL4`S=^W>; zmx4({+(xjA^%%1~xKk()2c%0kF3t3m1qJc?WfSX{EX|vn>3O7l(XzaG6YIrYzv*7M zG=*d4FG~TYtm79QWf!FKlBJHh`*xOv=a+~b4|2>*ju9`uC9Xz3Va9~OH9Tih`BXip z#Q6%MIp5TCPL9j@=FTPE6P9L9CLP8vn>2Z1y#@B8bW(X1Pm2fUc4sWj<~pS>%O))k z2s12!6pl+OPvW>TXkZB>@Y*Dmn|W;{)UyEf6i`oYhmB+h(a98{&nuO8eXAM%VJdVa zcL_?d%9Lx#L$;Q8t@gz5HsGgle*u3SJ_qG96k~F1T`y8GTKkEo}jTl)ybyS zH`^V|-r9Q%{`q&O(rYS(&esD`F z<_}G>~?@R)ul(>Kaq8E{tuefY}kf_{y2B(nTR_l1B=fq^!2AovXWJ zILGIacGHE`tF!9ihf&U!V10$@!f9!BeGDfBMQL@Lk-h`c(xq?3r6(nwZa1jk@tlrQ zzT?SD%HA5IZdP?3H?5l%BfQiB!s zrQZ52Xy@PX@+E%@3s_Z3F{D_F5D*lZr~RuzT`vSg*vX`r?Crhcl^)oMaXSenBb8U5 zymMFgvYja%TJ7f6KJdf@qdp+7_$i2f; z7)+0rvaUXce=JVMhWbZ$eQt%fOSI=={yKt@#@d^)T&Zw%0lqmckgSS@smPa%2cA`!pbCYUMGGZ7hP*RJ zX^fQ^GvN=`N0OBxHfKU4l>SP|vHeF_QFej+q6g9TH3NcT3f2rM6iFT_;qh>@GtCtV zB}B|lRwStPdHaqM&rL&)uIbJMP`(k#?RI<-K`b0RtG$J@g7V>crhIT-i($}5f=T@t zX{$j0IYAcq(rC=47yaumYiMaN<3r$b5)! zQ7q4jn3Cz1z41@mtC3JggcYG}lytYeh8~+!P=sLVh~gB2B_p){5N7`EEDJsx7J~m8 zk%EVZ?|#*KA_SQv7h$P#1y4Vo0X&KBL|@tT)IfsU?W>-i7%;mJ_$sGkh2j3SuXZ~1 zIGWGARgZ($O6vh1vs*quWae|^V?BU4y!3@-o$t&+J11ZxzKr!c2D7dZMD+ zZ?m|Bpl8@>GvnPj4DI0C>}2pfVnZw9VZ_8S{`PLGEfIVxhy6Ag@8!dhP;bP~^HxOj zUZA`bOCvw*u0%q=gk}(jHc02%jSnD>jvz+&9Jw;kl7toF$q@_p+E=c)_6TPqp=JG{ z^JdT;c_yrqM2y~4d#ye})QQG55$jfpJv57Yt27>O)tjJGydX>!g2O|H%227xU zeTbi#U>BkNA5kMg89GmX#;~3{;1h!Bf}ppsfEH$qXr$-&ue6r$yMAkTvTwt+!UqDz z+-1HSI3%f$`lejVfI}T%b@=TuGxU3XpzYO1i!FgPSU|8n;7N6LR%NKOiqiwE$fW*+ zR<{VDT?F%Hn^W3n)D^^ z13LFVM^aTOXc@@u@@BI<7mlV8i=)@<%z0}%6+e(vKxl1ylg7vbiY>00lk#{yp#&P6w{Cw{_Ewlsa;K7cdf{Z zY--kuW8sf$?sS;@Sml~7D^HbvZnHdeq0*eP^2eYhs!1G+acR2+*aVJ6YMc2&xzv>R z*-?4s*|Uzk&ayw8_MRYrA={gsY0mLZtV-nUsLz>uGjv$AXQOZbw7>0D>OV`IbDZTK zyYpa`AAWPV|L#|hUt;M3`~-cb2vJW_Hf9O35mN@?%TxyWhGDU{(ZWvOw4mRDy%65Q zzZsdW3bVvsX;xkUmMPX+_T-2Z{PiGKt!UXK+GFufiqg73do4;!28}E_L$|0pqP5%m zBh+r+8PVG9jzRB<3g}UZ2X$VLc-PtKoa8zZ{=~tiUaMC3xk`==1~0L}j2dgV1MB=* z1LMQyBh?p@r^7NyB0xqL31+vW$GQOU=uD@3X43Bb*UH?X=JRvz-I6f@krlrJ9Y|oDKNvmDm;z(tI&Fhsp?dX;<1Jk z8I?m)61BEU#BK;l+3Bjh_&!5jB-M+N$UN)!XQ{{6^ji_nPwbS{2?wq4ZK8Yf-adL~ z;q$BW( zZyvvm$ujmSF{Y~~cj7veK5ClnA&i=g&0EXlBk|nWF zUSR$*wD6qb>G6F7_EbD<$2VXF#pA%+g0~;<1iX9jh6*0G^BZA-=y;1n$6I3GMP6q4 zZrE&P7X`<6!)S+#g7V#Pf>o|~(M_?|cafVo1f4_FIV5nr0FEK_1=6aAG5f6n+1U#W zc4yZoogp~P9C`LG4SL$$fgM_^OXtuZ)hAsp;y}YD0l$74PnZrk})K5w5y;p;=O42mGZfK|4#Buk4*BrPTFxB&&o5!D7 zAI)bDtkdyqcJi6qG(2P^25!;tSd&SABnzYu)vBuyclTWOv)t|iU@Sv!bp_9{lG|h{ zuXj4^SA}{{RGpeMXqONu*J=Jd2e;SF(UL5I8=|zupe^F|A`2~y8^iu2Q?7@50>-1V#OXiQM7vuGcc{M>)S6TtZ)@9mSh-M;M z1BH3-BR#Cx&7s+83NO0{V?-Wi*N^Lq)rs&3Es~Y7w|ree09@nTkB z*Lr+5&jBBeE>i~l1Eyljdo;#9Iv@sDM9_-Q*EoNEWl!~1?A#stTvQw{AG)&6ap=n5 zyv%-YAVF>E+fyo6F#G+zg8hqt2d6g+MXf#!)GylI|byZ-(>QI-4EGX(4^-{E?= zY*pYm`k?vDt+16~>$+&2lG|Iy?IW_)N8bUu6x3){yAzSbTKU0ZCD>(!FzH5eQ$?gpAeYr>haNOP$aat ze-=tl>Cfew(!4ben#OeDdlaqYHRN3;XqkpNwGX|TYEL6)DtvwSpcco>?bqTMlnw5` z;G75NO~IcHvy*pz9N+gw%FRwO_|u^Tr=73r?4HiB;Kv$?NBn{CZ_gdSB=8tfOy7hU z(VX6bzn1jPft$_=v!wv_s(%gNrD7Gxz3F&(t@=K!CfL&gFJeArMbN``DDNkpj5>A%g7A;#>I9?_O!DLL471FD8F>$ zBv|S2{}ObH@!mqa>^%1dPrZo~$$t&AB8z&`CEOWb<`-whpT4%#Wa|dU)G$+Cam#J8 zUr=7AR)sdVp)O`#m$hM!>QT$jCFu333D@&}E!b}hFy$Y?|07*r(x^1-R;j#0dDA^I zkBYTAesPvOouVy7LwK9<7V);=E#aNOOa;P=|A2jxcOso#BCqjbtiz;WKI-@wO2Jtw z{yyTCw~ET+fO6CYpeBYNf;}90`+!G81Ir|0CqlExUfm*lc<$Y9*)O+=Y7s`DzeYY) zwYCz2pF|q;wi1K?5xGNcg|`Xz^njV`@KvoD>d{+E489q;Ue)q7a4DIA zyIc;vwZ!1d5y5u5>y0*Md&7S_=+s(k;n6=(Z{ew1Q2X=PVY8@pS81&pwAM;+JQ-m& zx2qIwUgdV7#qgK6m_J&hJ(2rVt+mA9jz|+`RI1TkXssK-yF}M_A?$E(WcmN1wXTIW zS4IwXS-7P{cn$V&g3gGbD7>FSO)sdgB=y*`bI!R{* zTefbOY~3!ITtYf($ZV;ot=4Xt*yRv|-{PxfG3e&|4`Q$q`wwE!#P=V>;9G+yJ{fti z2g9*<8dET>Dv#m$6`o(TnatgW|XtoAYYV!j!96{lm;2d#jAH8OPWGJK8V(VFf{h$n-HZXGSA zGk-;GdM-1ox9cJxTDN|RdTH?pjkR9nK0NZlxj$>Ut@iG7fM}HOogxL=Kz(N9cjsvI z;42rzL1M6TtEk z9eJ-{)TLE@FUDT9EB-d-y;64mwB55euf#bVS`c{&oPF#k$T?)~D7*jkVckZorTFxZ z+&Ig>JAi2H2kwzjPQ=kY5>g{n_empS@Ph%YG#`Er{1`s2u=;2Cx{AsQvO`Ey$<#+p zfWPII*U4)d^E$coLuGwu9_LW7>oIzFn$?K%2+sc#8CK7U-8k3$;`IJ#>HARnzmHJq zFYwae9~Oh(8#sCXM=Dcx>oue{jO|;D-K`+1gE_eEwAQu){yI(|H*r01zR`03>1OT; zG=pyBzQB+R>&VIQNZk$%(Bz4cMbKm&*W@3d$!!BW&)<%Aq&=0jyrm3_XmRY->`|@T zV|mmbO96d`l3l3JXMCR2Vp}s`dwvG5t=}{Lj3XMgngciT9E49kvm}a73tXq;{j=pi zj)Y{cXF2pV4@^66ro9bri&@YVcRhFwuLZnOMXy=E_C4%v>)te#d(%{SQz6&Vk!Rz! zCJ*|{>3pKH$*{-&88*BrZ6p_*eQbgo5mHi4G%89CBwe(yY+CoeYjs(d!Xnlh#Mt4H z6waT_OOh)RA)jIdlA-zI_|qo6cUp0m$mLB}_5H4KSQiDcCm*3bie#RT;@98f4om{q zlKL9%dmKKCX!rPimU6r2S9#b=N<4l^N~f4Y z4F2QLI*h_q>TK-gn6M*sr0nJZ?FN~wj-3hi#ewM>erHdfqmp(Q#o*&Zv@=wqF2?@W zNNB^5U^fRyvj;f7NR^;h9?vE2oXFp$o<-oCGBQq+)lvQVzKo7CIlzMUa3-%kt#hrY zJxP{uzVOyj^UPz|CF(}BlM)buXGSQFqOvKD5`&KnQHky$F__#>eUvfU52E#?;EZ7J zhE|f;(VvRbcLk?_MeLdMFRuT5V>Fj!v`ue3v`uq>-P}(e&U6NCfUzP__;!3pr-4e|K%7q+Zl;}6gOW;^t z7ARIfmHE5Vb@i~)-r%t$C%1+TmI*TFtCv`{7?`~BQnR2=TG{I9xhz#ac$D=y#=UyQ zF+~p8g5HLlmD@ejg5Hf;)nBjAR9T-NH2)M!K$>P5F!#MsUJ4$I>P%fINCTEHx_G*v z%Sg{DkCh{>ywo75!pheAASOn}1V<@uKM3?-ZBP4cXBb)w_wfiu3s!&oh{^c~cAN9j zk`9~s@NnoK2C-k)$*vI;sgu^IxO;W6!pc0RPV%h^Yt@d(EY^FS(=nU<(Q!=%$MuHu zIvMsFCm`-Kzo_jso+t~QHvjaupR)EItJh%4D~z4ZGGCE3IsY?4@2)X?5(Dy99n_mV+o8_sW3tM{!of z%yh%g%EW&_?1?pDCQ76`c@)FthE3MgOIgggmzjxsnSJjYcjHDvKMB`3PnMh!?HM>T3u{%-jOz|w@7x>Jz*vY1z9tkas_+hKQ^R$^y=bD%?>T!lpF9w(4rlP-I zb|+4uR0U7*)4mt zzteJYk<*k$<>2fW92vu@E_o5d4Nq1tchQKU>%jAi!?Y7E&-(M(obE{I?TCOCAMUo| zY*CYGf=3mpCd_9_7wJQHQB63@VD)Lb2Iq!Io>srJ97g>hJE2$%I2hHG^g%2(M0?kA z@tL!lY|Sn>_p5hUNzW6=%Wwx(tJkYslBlQt87Ii3kCq3!Wyqu1@cTR$__#&C1HPE; z(s=!!;F2``9vw=Ivjt8EFrt(8hBbE$(XC(2p5(`7*8@A5O+lNA5y6hTCMOt9NEyq+ z_(}FoL7OuhodbT3)jA7!bvosx6L9QU1#2ORvQ~zc<0Yy;rtx3%r0m z-kuKGJ|3Rvbtigc?fPYmz;oOU zKAg35-lg-c1D~7o^$#6Z*Sb%2uwdWNEuhlQ_YG&Q${L;zdmJ9-tK~3LYIvC|z{SR` z0NjD~;4-{Vd0m7{auHu^B}#P?XKMv%H<@)Jmf7i_;y+3n-pJt_+#P^Fe#>{HL6j8#vEt*@2HZ&5Aecuy23@Sskdzlus{}=E1-?V+^LyD9zqiBBg0Bsf!9V^H9&qaA=V6r}a*z0~%fIXU z+}ECU_3U~cP>1)Ri|zg{pi|y&y99NC`c2ib`x)YHeZuA6{WNj6T9l`_2eJdS|An|? zucSPRlFe5s`Rmx>O{UwC3QmJs*-7k=Dt>O2dq5GCuW`5m78>{%;{>-d=>F}n)GpmR zj=Upf74K^{S;F7`m&r1lT`9U{?$s^h<(ApZEyFxPoN8(IIfe6s1hoPD?9L{t4Zo|g z0e#Jp-*fa(*`@ac<#uRt*V5jOhNT&v4&3d)Z7_@x)XJH(W36Bp6mSaH8fzZF7HIwa z$AYq)ry_{S*~xF5tNN0!RB-y=uyfe)aVh+deB@@l&GzkB`OrH(aJ|cqx--SmUFMd3 zkx<*9gTI&1=&Nk{coESjFT`lkQFh(g`RKdzc;6-4q`f~w_p4d%#GQ2O1?OMAf`aoP zX!&ygOPD2+R2#4TG}M0T(kDAIDl{7uxc2T~*nyNMk{v#S9dap`BKs%77Wv#3kE!yk ze_0alatV9y!rJag*PZz5 z$iD+4DSXD~?IvHAV1=Z)07E#C#dF2i7d(1Ie01P z$jb&M3wy~{*i3+>Be%Sw7NyfZCh65OFdj}Q?Z;LaZ8A%f(VjzB)G3Gt^BDdeAiRU=jVB3 ztTM1SJq`1(l7~Lgv4&#gT+HrA%C5YRHrtV4HwES@=*fr{B((&$FbN{tP~;)tghPvc zWahbNRFBczqTT(A4j*&xF39ZhKYn$ zM98x!?sviZnm#E@Gkqz`q>E*lt9EphiD#3RKGBwVs>anM@{E%O9zTxM#L~nQGiNG-B zUHCBd11dkmREJ?ljnXJmT(|0kYdfL~)px&@aZJU!3w5pvPqc64Bdu&%mx>hkrc9 zhQ9i)R6a_k=%b|4osND_oC#_o&MC0I)<01S^}spY|JU|Y|GZ7>pP=~j zh_*__t{ES*nSELBG)SQFo7pRSr}Exe8emERtiXFGD3k|t`#>br-fwYk>7K}C&w%X4 z*EAkOa*>(|yCk4@Sn-xIOQhj#L6n!m-x4IJq6b3#)@gAwd`F5EqGu?ydjR*KF#^lzqYU>pKH+?VEl**= z+5K2Mdw&+j$`v~s5~J@RMb_+G?HUQCjeyp=3ecZM=zGMmJWD|tqAx1({_Tk4bJ6i- zo>I^*42!m#@qP{R{0%n(dS&F$Rpea<${&Um+XB3QFygn(!~2DiiqEgP3U4uJ|4KU_ zt=9s2d_=HK$Gc-hv|WSuz7dmcD&Br7v9titt`Wti;C(+~czx-sP6;)g0PHg)X%sda z*vC;fjFv&1XxcK7&KR+BP3ZehQMXsKGZ~Z}xHF!J_foPLz8PiAq)Qipy>}Rvmj#D$ zhnxu|OxuH_U5P{WEVzV!f9S<`b*wPG;4Po&<(%b39#fy%_|_G*(U$baC6n|UM}^OX zFYfmFvK_YaL?Lat#rMJ*lg|{KVit;Ca+rOaGk(U*m(;0mhgoT&8l#w2SbWnVddx6#Yp~f0omq>@wr{4iX<_e|L2 zmxC!dDl_3r6nXk>_!8yA@bbMqVdh^8sDeYQ0nOKV`@ESShV44+U+`o~>I|Xx$vmc7 z3Kn#K7|z`*4$5K5Jr8*p_-6X$KL5fG!+m}Z2h(Mo0h*lP{ltHKurDkRikyEE_coIGg_ZVrrd`V3CF#HN~gpea89G}yKoX`2GOp3og3_pfkR4W_~Bz_p~@aKkw zl3q~l0}@Iy`9BPMG>$&CAu)+k8iz^ekip^7IqFya8XOg4I8wk-q;oh*4pMZYD%a(%+`ev`BQ-44P%hK-E4UXR)R==o zGwuh}TY~A9$_tj994}#u6N=MtOQ62;!nm9@z=%4Z#4+CnMgk@s_bXY=#>-Q3{>__* zS?$;7^Kd8if1(G|r3qY`u0tYeVCY3!P?@ByrdL!8u0Lt2Y4IDx45SD7ugN(Ssva>r z5#Raj6>lG9(=yfOyt2<<6IYd&f4*20FP5@5#b zf?WK|4$S(@*NCrGFp7JrmHtd^f;-tPDDv?kKNlAEyFW+$U7%XK(5`&Xoq?c36KB91&nC-q5ys{3}f9vQs!xiFZ?1jOD6oQj#cp6pIHG%!cv ze!zU#dM2JlcuMG@d75&!9U1)mQr9K_9^tg0Ojd2dJq|~Hbx}*I-tPN<@E*kYqPGm!VF8wwF#$k$cr_vrZ zFVBHU1u-DEIaW=M3~mMH!QQ!p>c-ot&#!14O5X@XM7|i2QLgnEECZiIq{e-YZfKCtX1(hqL=~SwR}m*# zwr;ErJ=S^w9+~8lJXX)aGV>X$CwF2;St2ZR`MlNBb171iTY>L}kiLk0r%%yG$gb5W zjn>dB5nDU*R=8bz1u9K(qkLLTx_~#++LpIcNp}U(x$xIAoK`aRujd^|^R+Lh+q-W- zn*4bQqT$7Wv!i+K-3xTuJVdZ_0nd%2&C+Qzu_nD1aAO<|-p*xCb-P-N09W@7v>F=O zyA_?9@9t=w%&9x$sJOqz^Nw?$YK6BSaD4v$s#soHQINJcQ)x@%c?TL|RQNlm!r$90 zfJ;C3VxN;vh9uaDoos;($sbb$rl2KYF_+(k8T$s{&?m6_K;O|}Hpc0~TJX^Mfr9bq z2RPlKH891<4tBf?EOy)X}T7mCoQcd#x~(Hyi)ZWnzuT!HVRP4GVYo`3~!AExM9 zv`-9}lxvW~?(%z>?;2_kr3g9{x%>xC*~Rw?T>B3&_0-f0N2e^C(0mZF=ATAb&^>_D zHI$1(L+lpf`w;(ll;eX3U?<$SsEfu)AHLjytvUp|HK1VCE4QNG`egJ+#3k6t=zAAo&W67N7p@A$7b~7Ye0S`it!wF!;P9f35rMig6b*E&U7n~zN2En zlSBA2g#TiS3BQ<9!B=zalI-TCL;6LMxrn}#T`&#&l823}f*$DyqWtFdk_5x@> z#eGR>HhzZ%=Uf<5P!qEGp&>TSqT*`~cgGrfXnqi9eQ|auG-1esJGyi)vco$Ue@}U} zyRm(MU9A$AG8EcAn2t5Vl@X=OuOwp^;gpx8(f;2lZzkk74)I-}U=f|>?iC5kti`Z%5iqIjq#bejtzkiBfN7jPBcXRAxb597 zx*otU2Z3uA1Cy=kRA$<F{DE0YneZ z|AwibDM5whAkB)>a1S-hC9Lu13v1XEC7f-gFME>~+wfa7beb#9{42cc0`}5z#_6X= z({l%OrT#-Yc>z<~QCqx*XD4oZ)Zwkw59RGJ;VfvJOKjffDfH!_d{@^V#p+${%>>-( zm2By*y${GL&GA^;m2dcG zvhJTW#$AeoU!xT;>`&fKzDIerJj0kvPBOA@#rIbo_ZJ;!J`}-PGr{>(m>p4k582t-UpV2abbHUbw(A@pj}roZ zW%~@$A-KX|^}8Lj5<+?+PfsYwT&gif@)Z8GmQv zp1b0kgWXfbHy^vPitjpneXxhly}W+q9bIy1ByheSW0apcURHc>>3aTx>)GQAb}7CI zJg*%wk6$^-b7iTDuUqFlj$hwV*b$soWGTnF_vA(npZDXQFj??<^`E$I%l-?xr9ijC zT(=+Tx?LW5@cgNBv(#N`OvCT!$YPg5xUU{*D1s-G$tv& zyL9e5b-B#Gtyi-M{c4LatK|d5XSd(pYkJ>`-KGq?Cty}@!d=Y$h;jb_8TG!s@QZri zgYb)b-vgNU6ki7Xg5YAnR{M+q?yaK*UC?0xMt{e!U>_H-;A?JEaU#|cWx#7C-o!O4 zROyRYg>FpAUq}3edoU_u-YC}s&Sk|-HHs`O@SGBkiG&hIp7~glG?Qa~i#ydB*lQ!c z)IcGBmx8}Y=f5<(_v1Iz*VLo%0Y5yEYEg(g|9`_>ww!>uI0@Qe4^G!^JkMoQi@AQ2 zb^S6y9}oR-ZlLp}a=ujjl9QpIHorwe-NWvWGx-jjU!^gl1b5Y*TFdx-H5v zK!=|}hva~%*ajWyqq5g?*;L*gQQYl%dACK&qq_^_L3@WYP#(^rye?IomC#$mIVe6@ z4%|Z2dM~f_0~j5#=ZF%s5d%=0R79nhaaqc!I^O^)=|F9x*?Y0B!=k7T^K~6=9{&AD znP?&0=+}E1P9e$vPLhOcIgI;cid~nGp-ctuw5Xf{UCyN8pMHc>17F8$Vlg5X9<2xg z3Ew)HixUFccLLa>My)Nw(^NX!Vffxy>CSQ?ioB4->|OIHf&=}FA)I3o>{ongORao_ zOocla|S~h`2C3$ z{M>>Cuf^O$dKr=Av>mvc1}}+(p2K;|=5CRHgC7Zf8+o3`H~19gxxD<#ay1iN2Y~<9 z5c=PMwabt6Nu0&-eNb!BElt^ zu{&ucAUlnGGq3_88nczaZxFvIv!U%2b*3u`Hwgr+OlHKDk_B$8Q`RtBk;cuV9sgv+ zK6&g;ocf;?@ts17{u_$o%zr$K+q3w!k;D(MQo-pnMN?QuWBoA@dMW}B=d^52!#X@l zdnkg_c21+!iX%TYj^?8Xgi&lnu@dc*wUSAn#r55DT7;erHCIQrw*nN+LzCNOzz?xkquSOH#v2?$U$|PSk`pcux1iz=^#yz11 z$%g0)Yp7)W*4=;?XSRs(D5fKRt{e2gxebra%)KuhIOG`#RpA#waDqHF61ruO;%q7G zJwf#$KTg5v8|F8~jBoELww*oT<*_aL0(AUq1X}R*gM#k@TF?h*$Aj6jRoN*QB&*5G z@LN-k!mcE|AH0D6t2*S>`R^TNGcLVvSymplF?XIBv}ejbKJBe~A7!d|{D?Vw@fKD2 z6n>NQ4K`x{Yc-4p3T{NbkvWCU802d=8NX2}BdULUNIS*I=6mqi@2{sF`DSOTYdG}7 zevO8GdXCk2nw=KVp2k^-zrh4(BYyjlH3)zj2C#RJ`-384J*-b`qW(LDbnZPwI@zW7 z68J9}3f)9EX>^--u}55mk(lms5})7{r_1kI5DCt~eMl33OMI^nxv+L89@-1~F4~UP zDhaqDI1V;EFnCBA4y_#=4jmn2T_x%v=ehAF>?FQ%IRW_P!2cNdB2_&)9I8a>d88(* z!=cTCFMxgnFi!)Mjn+(7Tk~JUj;>&1SQp5UEe-ncs{s3t9xJ~9l>eJ$Ux{kz9GMJ zL^zC7Bz!6T=-^1`mpFTSJTe&S85{^Lq;rzisj%-q_Ya2tWpFU`#z?7(lcEtD`W21E z_@zAbEf%~nyg<#vj79f<`Rd18tl~Uf=NX5UQY2J4T&Utsoz9biou5fKHKm&f+F2cL zAgIZhtF&|?W|Cw?5IsoaE;r6fPqmUZBDC@Jzm9rSd((c4_1IwOgF*PPAW9~)B|%QH zX6Gs;j%Yd&|B~=88UIr7FIE4SHs)XYn174s&Y8ccWKMB~vt%xc$B=e{KTA*hk*43VF!Fye4!`@1=LDV{{7CEsJU6XA zx66UE1XNwYIKV2_F!_c%m`r2BOLH)%AWdc=H>3xim?)YoGW-5gat!{@z#HlR&71t{ z-`q^Tg6D0t-Cn%U(R)lA{cp-(u+OLl|2x728=IYu4qyY1gdcd!agW0RYY|IMzA0IP z5Oang$y4Pl^CUS#$P}y={3gd}6k`c71ku50WMM2ZmMBL?O+r#UlCmTl2!kUf9>G|u zktF6cBf(g@0mfuoV<=+In8v6^nI=?Cl9Sq3C6m<*%Mfj^QzRcZ+gU@`34^xM*J zMJ=l|l#z6iFe9HkmLSEJ#wAh2GA+s2asnjzhLrheoSV^ND`E&ruFL_QT&bD>#%jiK z57n9!zpk$(si|wnb4lbEs|h5aPQx*_W<2+%TXNw|x8`zRUpt>m5))^F@irrYOJ6z& zrSH%{VpykvSdti=ROVeqVrDue*Xv0OCF-?=MrqIzgui<}iq}frz(Ew$NB|YnL;ybQ zF!R?v^rDXLG3&Y_V%0(9x>o}kyU!q#{7pteD|xfQPqZy0kosc_2Oz_1)PRiLswHkt zxdDkbEs-~l^xA497;9g^d+@gFxkb0%$a10Z{TTv{wT$_0&;b~l3EGer8-c}H$fWrd z(M#~qbSyQrZQiiqS|;pH%S>enEI~*R6C~Lrn`MifAj@*1oFpeFq{wLq!zd&E(fo(x z|5ygrU91)|D1!Q*>d}F`G%x>8^%z^O7*~J!E9(FE@_d!ezB-RA{`bm}5w!hx^CbL_ z@?6~q1W5JpBt0@ z-k5YF(&%$h{q7x;#u|JSefya7Zlo!=GwSD$OH=Ih6#ly)7+e{Ra`TZcLb?%fY1Zz2 zrv1`GA`FtJ)84f+c^r7kvUcvX>^DDTdRXcpI?46`zZ?HO5~D0i`}DMt|C8xVeuT^3 zwa>iY^pNy0+Acd zB%_XBPsF+d`Af6Dwolrx>0sn}2YIl>h~_cy4l40{>vG86cRfFIlLM!rUjXKS^5T%Mux8RVmJ&fr^K zjGyL-lW*Ytz!$~gjXDNr8ggTGH1f;`ZGK!H1HTFQ8F6?+)^otuaQv5L9Y*;##pQ|W zk9rjVZ^+nr$MyyEJRZzJ&dj$IYc#?aPvoD$UyU*4t&tQGe)xZsbQ)KE@E1jW#yM zF-kuc*B2>m1>NYIlpey>toU>o>$3RtqO#HQw!r`5<-ekrXVkX>{7I0DJ~hgxmH;2` zQwBda#Bp#M^EIjm`RXgW4;tyWkhX$m$&hP+sxCO+y9^`JQbQkv}i zI?7(6r-?p<^i6mZy%+CKuy>K9(@CdB>@^r^%KtRhucVV9uMz87(!)rbke(TzUaHXz zT^H%}_%YU?y@hrl_-eF+ppmb{(+r*Q+b_|1fOK?VPsErvc%AjMVMi-uE$6aEkByDs zTX~f-$PN|Quc7h`8FtjmA1A}Wdm)>~4x^0>d`&HrF+Y9@--j}<<|BWA{JY}h&=^5= z@uNMSL*Q7JwS8aG{=|pmhZ8z12h5L{9+kN78MbVPzW>4Vf4R^90cFzIWavosqB<_u z?L=wvg*wQfwl>DX!)W_Ykp8N%@DSR8@)~lDx;vor)$sFC-qr9P-PU8}d#J<{2fZJSt#cpn z@$w8E@GY2(l@4tEWgXNp^`rdMp5eHDLiJj!x3|$wFM%FEe;D}BFh@}AVd!S)kb?bF z4gX~wI+if}@Ix$*A?wcznSA$E@D-31Ur&R-hW2RV_=$)5!4Dy4Az*_qyqL*fkK;4& zcI4OWG&)9EcirfIXVl3H{MdeD&^k((Jc7P=HJjgn^5g4e==sSaEe1yy=uh;rpe0c`%VU*{JtG|r6=Ju=9--GgZUIkx*{3Oe0Q-WzeXhi+v z$Ig!Q(R0v2q^HH@Gwf`_97*$pA*`ZZAQHBkJES!9fpuLbRhccadavx8?vb^qdj^vqcKW! zePE2scIdSoy#G(*awqJxP}k3Bf1}RtfJS8*HZ*MW3Gh@$gYR{eMXjJ8h6!`Q~lZ~wb<@V)StMwAini$?j2;9CwZ!#8R@Y1DBa`U9OzT+I%Kj%UzD zGhoAb`BY!(PhRLR12)P#Q>w*?U)7$c97cQYiu$%uP7U%t!0Yj4+7FSB>@rpdYTKbY zhM&HP^&gjH#Q(84)$nO6XxdzYwE^-N^;iVF5r0y>7}7?&(wyc;tWV>WA?KA_M~~|U z-h=TmAAIODqhj=2#J^-Gqc0i!j{!gPD)>)UjUG1*{vNC;2p%ivlUtblCh!Sq81eBo zY+4Wgb(}xuUkcJ>w`|b#F|5?+29KNTX%+NK(usK1Ud!Y|fWM-Td1>KvKh{h}pL_~- zdhDzD?-s#s_zJ^%aTezt-8abY)CR|~R(lJuk*>iQZ_F7){{!?VTN9mhb%0JVJ-p4* zM)UU}O?ncY#^HDDF*@;gLU&`#=kic@vbACRcF3nV)v!Iuq4E1w=t=nuKAbd+ien7? zI^d~YjQj@vCFH-_oK}SLug3ov>QQqQIac(=ia0#!XM$pfu^&Z!$4I|}G{xmc`aPsg zNRvLq|0kqr-D~JceDB~10#9uxV?4qC@y}!}U$SmlQ}d?v+ZU`WtzAJ+dHK4s<}K@H z&05#IWy7XzjZN#ewl_9!X`kg`}NEnAwlv@cP>s8F(bQ&XF=U{=XOWt+FLp}k32 zsMzn`*1V}vxo$zpbfvDPWfPd&HkX$xcg$~`w{YHdcS7$*uZh+D3(6NPTbu9M($uJI z@HDhRdGl6JOItfLnan7WVW)ai%a(f-`U75h+m_MX2~mWREr!wZ$I>xDH6Sfo-_9~0 zVZtJXQgaqk@);&9=E-?;DfxXSEaAz8^C|fv6RuZkwi$U}Wx`EbQp@}+Cfuy0wcLMX zfQ&Yp%X!%ufxTqGcIAl~8cN{XR(Ne95IGNCEMLaU9-O6}uRLAOg zY*f=4t*niPqAY`AaThK4O=+qSNU{}Z^rv1#M~o1LR_$+}I= z+Zr40+19+y+tzY#(}wnSuIiOlwQjDGrsFoR_SP9#O&9iszKMf8C|TFmux0D!=5|-Z zmc~s@%(?_)oY0s}q}rwpP0ibzMp2rwtG^*m&FsagbEa9SDfN0cmA7o!*xa_cp}o0f zi*p0KKUEMmW>midwu{6zQ)6>)X>8sQW124r_heN6n+S$g0$0RG!kpVSkQ|n|Mi4w1 z)mMn#%IUSE>DvUMIV0DQIt%KBGxp~Fbd&UyD{ta7T zKFSuCgDQa5T-nsrxN>tGp46{sXm6-(YG~XMhbR4YZ$k!@6h{-en`#Em#DD4cuprKO zBF!(_$~{dR?yGIt*516O$+;<-h1s#G=15o zmJRm-iqCGg#qx3QKx?**;W62G$JyA_R_SYQA48OEdS$4t&P~l*J!2R|TV-3rR!xJI zRbz;PrXD89hA+{WA=w2By0>g>iOD)mV27oylt3(#xPiHE1EX9wC&*K>sD%N zj5D{{hK6%*+1{|J8D@*w1;VvD(?q_hsl93AXrjao;%wg9K87H20)!eF;|ddO+qP`m zI;wnT)B1DW4sWyziGs;wgEG`psV&CPSU#Lw%jIl{If9fQm*vZ3Q-0Z|4K4SrCQsS2 zp{cxO+m`mGsN0*RP_i}_rnCIjEgReKZ)j^GgR{)f%wnNMdOGDx zle%?|=LMEuhN)sj!v>aF4AL~|v`(7B@-@Xc4gUf3!e0vc+^<(}+gx6YF7C!~EERq% zi>M*j^0n~7_LnU5s7YgcVyLe9#TEh`$f-q&#VCRn$9J;%1? zXjWR$umwinj2KtLx94D{cQ$O>q^Gy#tl0{NIL!8()wh&4Y}%yp@5-rYx_jF_D_Ssm zwzO%u-8nT)TN+p2qNTo`vwFwYy5N*{$>s3EPRkk@I*jGWSn@;U4E zVl#8fOIOZWU$<5xW@*XVwR)YijkKd z7o;gLJ*T>^YQ1yy`dgP76`w)c>o%H8rRuWg<*Y%WdbQ^BgwC~qa_G&tkYK&_uA?TM zJI0|FjY8^LFCK-|3tTb^sTX|xD5S2y4LOx{dWX1?gR$D&L{2a_>N7WM$*9ltFax1m z^9>yl^_n-CVIn?E`~nd+0qgmEmH8$U{wPT`Tj$MX);x-`KanzPw$53|tf`dxRLZE? zx`K#CRI_yh_%kcb!e`R>49*D@GG(qc3x6RL@dLGpW!`5N{wj@Y*Ya(r zax%YW7J}0Fb}ip_DlD_pELsoAa-cg!sGNjdE(gD{lqS7zY~ zVeaD?Wcs67_(ICA*+#XY`9KIuSvA|JHZ)}k{ixeE)P^r72Bgdk&Q!CF*Cxv%3`w~e zoD(RLKg}Wx6N>nOLIH~{!U*X}!fUouIho5Wg5Q+euI1ZKg=OAl5%!wE#q(`PiJ7ey z;Q?SWvn@$sPM;U~nT;H|``w6p{W02_|Ey6>loUGrb3fZ-lt1IhhA;DiX z$05+cQm%d5R+f3(B6OJSHSW4mi1}HMrU}^;BMM9IZD1T{%!G8n6I=_Qpoxg%$y;N6zg`RUctHEH-`%OjD zMwVHVARIGEGk%oUgSZ9lQ+rEgMTzEjWDs7;U9gQQN}Z$mAtE(UQ7%#CC>1_SUMdzQ zfeKBCni8eXGpK2xLN}sXqty8ZH51eY8Z|pgU0_hhfy(_;EX<8k_1+;CP6YKjEpJ|w zdYzFsA5=Icm8(Rl=uDc<1)wh0s6|ogVuLyj)Hx*@*&ZbWqvxKHk5RoGb|&dFV+>J) z&4N>D)RGuAYOuNa<>ZKzdA{^{78fd*Sd0_aJfA2QE+jSJro`xoQKQByBf8!$6)}3$ zd`_b4E#r#OqXt|`biHks$LLWLt|YqNIyEtR)QGi2*W0HqMvt2D7NYAdv^Gkg8#UwY zMAzGBU5p;J;$1}7Td6)qkJ|BW&>@Z6r!hv4y52^j>-O`+=u!LKOLX0Sn_~2+{k9NY zx1TpgkJ_(|=(_#dWAv!~wi8{qpD#v_+HWV(b^Gm((WCbJI?=iPq(XnJ)6UZkC>1^+ z5C^xQRJbpWLpPyR_z>sdHk1lG;y838N`;RQ2Smb(QsHB99J(2$!pAuWx1&_p8ONa; zQYw6sb8t&ag-^wC=%$nkpXMCgmQvxtI1b&IQsJ|lgIiN7d@hbdH>XtiJxlLb*5i^j|U2l`X4@jqtb1!a=h%<1cyE z{5p57Hh-}Ex(Z|NF#%q#<7L43&)xIcFa^6qr7PFh`BpSEZz^l?#Uw6H6MhJZCnsa* zj!CSIlUN%kv39IPr`uWmC7GD!k3i(x8plC!L>ZnlNumGC-uJ-ARaE=W+`GHoq)FLsLn#oJ&=#z zyJ^#!=XR59n}sC1>~2cx>(c@i3s&S$(V~DT6)S?4KO#OWRH$0DB5Ktts1=b{1%-zN ztMcdfJ@e<@yUC^$T3(a=bw9o7otbm*ojG&n%$YOioGFv-9b?xFgo1UA|s2RVq}wGYfN!lS=J2W z5%V;C(~GyaINtuQ@%$fn`y*55SRl}0EeW^O>n6DZAop42S~&B{WCMDX-iJ!nwan9n zJ_TE@TO}TCP{~OWR;5Z6tinKhpsu$^TFB3D_88N*o$d<=Sw{}EswT(auL|l;^#-aM z^*z`L)}eYCYQOMfe*Q&NV*lx=gdTM)P+#k;1D>-8X^)?O1@Nz(xu-19SmCGx61BB0 zvI#CKstapY=9Nj!<%%fTSYNNJ=2K}+FeQ|>DlmysiyJDMY({Y1yX3&YkhW!J|3@c~ zPzm6cC9PIXrcp+)F)U;|Le>oP@u5$HJRZZ-GYMEDVIC#w<@h(I%%@bvOx>b|GO1fs zEt0czX`M{!(gu+%*QG(3)TLpOoUKdSWKx&5o3BlijeVEhSkP0d#F(-?(1>knfpRb? zgHmcf0E-eyHQ_+WP^FrkZBWHJeVt+c>D}@>#rAg~8T_UMvV#O(R2#Cswo7L<+IdeH z=9j0-cR0jm$PR(y%_+O}1G>KZ4D(kCy1@P-_*(;@pBK@dxp3jD{ICN$kZ=-3AMon{~y4u(Veb8E*@Iuw%A zE6^#@;gIYl;8Ue#H$g6f>zzo^E2Oa2y z2-GtXViXo|jTM!;`__UVHCBX!as;8eBHd!8*UNNugZ}yk`GB2qoyd^1j~*APX8rn2 zBB|zQR8=G!Yb%>Ix^6EsH=ijh>$PzUVeG^cP*(vCcA#swQ)RU1j9nU{QrGVZ4Pxc& zE`tIA`YnqQc_;9fz=)oF-=u&wN?D*r)>%w74w<9Yx`zf~i6v?HFzYGikGDf{Y`^~c z6ZqOO=JdTYrv|`LG-tlBW~sV&1)76lI|(g?D!`Pf?tB5w;p|nke9@#pbEN_*4J>KV zl|U1vR@-Xiizo1#QH!T$LDZ`b%0(4+R-h-4_eOwrPJ~QLO{RnpUr9TF_o@Of-K+dU zx-XYc7ty_1N{wT|=1RNyt0wU;M*A*- zDq0H}FHGY1;h~4iOU--B=^+mu!tBia(@q@pP>uc6)D!u)@YL4XlLDCSQ8hWIh4d{% zlg64xmG2D%E5c!wuoW8+CrE}ODWwKXN|l#5stN6->;$GGFU8r(b@~RJ2Hut<6=`n$VbHptM{PvMpCSghS3%olxoe=QWOSIte&=e z)lyQBeoVd^15Z6`X(;>{>*~$+z_#=g6H%&OoKrm}=1@`|auXyPk2#aX4q)bZ) zf&>~|(qcpJDdk@S^jFTC>4dfx6j0mh1*tbs5v(k432CXVh|;s{G?-&uWlfX%WQl;b zl9L3ml`IWZR_n@@*((xo=DJGzjnl-+2B@bt%wR#<6SSJ?IfefS6+iHPK+(`31P?<~ z7(-N=lcs_#4eH^XG=*aIbZ(ler${^W@|;vvUB6g8os+Dpns9!hcse&-HHFpFISH$x zK{q=WT?J6Ao}Oxvou%?R1IWb2tA)%*PT~IpWNuvu?N+dPiC(uuf8TJS?k5)}zeSqw zR5hxlkw8mOB(KzHpqYshqR})pQ9?A4<|ayr1_i+eDFMjTe` zUnoI~Y!X5vJY~j|1_4U1B<&yzhN_*Mt>{#KWq~>UnaacCY$R$B73HKs&A4(>AXd}F zt%oJSmNq~rfSg1ab^zog!}{`&R4~vta#A87bRBY$B5)RT$YC{Q{8pgsxkW(?T*Y;5 ztRM1Z0BPl*NE0FMEFR7q;pB|oJ7h4nPnE{IuX4=Kp1d8nvt3T%0<<<;(7L}`p z&9lp`N%UMQ$M~kt&$r91Y4m(5$B?J;g?726=C8z@KywR~SKH;5njhONy2tD6VrwSF zE{jl&(BlnuxyACDSP)#sW_bgr@gIW>e^Fm51buoeCl%_^mvierhV*@^-;(pc!rjll{M8!6fZ} zFHXd}nE!W-m-(mv*nmQ@9)?TRdPkCpbY(yGc^kP{pP{%RW*NjnJBbXKjCOWwb!dUe zs(_K2UeOe>$Gf}J1X8g}2}wkH8g&er>A{(pg8L)bMXAUTq<LHx}Cs7z=~3Otxe zL92ugry7YI^m%PO)&px)`5hNkH4D_Ma|VN2-QOQ+tqw&RQCnEt!=Q5@!~9XsR~yrB zbB{BhGv$Ug2`|b*IMx$g9gg>+)qANf=Cv*hq#~1v^(HgvY8%Eh&?xghm!_bs*Mu&M zXF#L=cLB(2{>lc*dXa`|092v*nhn+3m+tTEM9o+9_vj~N%~Ak`W;zt>?1$m<>Iwnn zsMS-PU%`#$@3~L+e~%32ALWz%4;#VOuCy8o(u5!Q{-MFwao>b1$G|eaD^1KJ)Spbk ziw4^tWVaZ?=V8JsO;yNzJ_{(AN~}ypdwXGBoDB%m`YgbjfeefoV_n%$<{+rbM5a3% z0`%g{K;0xQ?KAiWZcKO%)y}RcnfMQ_71{dhDnz=_$i7566Yq?qW$VcJUw=ow|8pk4 z5$}J}%S-xO(_NXSSmv@s>XPP5$T-KDQ;S_jm@DI}Iv0EkM&PYzZ7S8@M_<+@^oEKK z@=&7hfiUHZTViP-n)%-_`DeK~;pqbPF66^sDjkEtY0Ubp&I~5fap6>;zpM+IVk_ZO z0dE8S;lTw+lR+uEY)Ca^+tV(72REmGrx1IZ3AnPf#FDXS#%32){VB3o6_lt3rV$7y zGSMD8TWXcWXjdPjGMMH|9{g_?zl$58e-th>|5_-A&H{ESjcn%caAV7*zG6`X3WQ*! zgJyvby7|2@^50Zc6mU!f*uruWr+AGqg$D-nG9v)80lv_1-3X|yQ;7^*V{A)vY$B39 z`H*~fpoYxAX~4uVULL2REIJQdCA7FjGnELrZA4`2J^_O|RCiDDqyTW0tCDO;C9x+S zOH2Ge?II;jecGyZO&=K>+jXx`52+>8Rq5gCPiVDR-=pAZR{g;hbJc%7tnpC)2gX6S zAz7wu*PJoLo3ou+uthzfZPPx0io3yW_INs2R+gzp)mw)*3ux9W-|;PFoJ1e z&`ADneFlHG8C=m58$j(Nz3G)0gDWEOu1E&500HbW_*tg#2OEHAj--v(3|?slVMKr- z2~j{&@+Bs3HG(YzE&V;QNHB_-A`%v)?0?9`mmAhMxNldf=aKhiw#+0#vhROyl<(07M_Z2{2 z30K4c`vX`?i46NI(3(;cnZ9t!fwpCYgyv(V^Vn-6LKM+h@7E3kv zNiRN-kxg30lnJWt-Hw-*faRhR)rp6u#j%C~Bk-Ert&IjH}J?~P^CuN+$x0B_KIf%z$)1;kM9iS@0_U~Q(P zfWV5bNKDRQ{_g2Lor5xGTdRIaUI(Uxp_nOo1H(|gdb0L|Ef>XsZi!v3j)C(-if{Z1)Pv&_} z3kl*=1IKV-2!OLyW4uZVE+7ZNo<*??>WB9$X+RGq!@w3P+D6P#JBH2T{A_djkMO2J z)jIJlR14mE@YIz4XR;#Lt_e5BEj2*_EUz5ZEX-<0Ar4VQy})4{_1eiXiM{(Cccv7DQexL$EEL1748{|B_*>k$+6F{9r6SM_I3`6*2 zGyhbR+^BbY08^a>(=s3&4aDo}O!!hay(C#RAmdq(V1MKgEFe=Rzj$KP?PJ7uPxt?n zR+~2tf|l3}Lj1ek>$?$$XoaN-6FTWVlhpJA#Pa_XMQ7W4r?^vtzu&$*zv^4(1oU!+d>=?&M;>zMRP;@ZqV5eGb&+r56nBml@=y@KVc$Q8_gHkI%7 z`lngt7PD0o#S((JqQKu^LD;O;dd+GA`ci>^l?7yTSqtbk0@_vJ-|PUgrYhKCQt@*I z{ykPPCS}1&F)cIy(YL-yG9vcdD>7$8_4qblOhU zx?Hp#(`h?(-N$s=*ano^x+AC4mK%)+*CB7i1pH>Yi!Kq-Mre?`Vyhx6Xjh^l89(Z3 z36n#mkSiKXP9?Ak%ul7&j^wJmwNn-waoEJ=Z_Z22qcLFz18y8_Cm_GPFLJOr{ zH~~v^S3o^99|Mv}2qJlTye_dv+j&T#|908jI zZDpLTdjJyE*PtvS{Z23yOLs;QpHZttp@1cYHp1Fz#SbirkrTRLiOw)ZMr8=bP*NiU z6)hktL*+UH8d_w8!&QyUw_rS}E}@-8PDN$2l`}@>ENQiJpsfW=6C#M{rwT+)OKpP% z1FbE+xve&+VaCdh4pQyYBq03xo<=A;bNUW9w6%biE`ar2b@7$ZR!RkzY^E-0NL;21 zWNT#s=})sClPz_YIv$m6l!asxS%E$Em3L~qy>^}K`*sGJv5QXkyi4<9!g_`ei{&8&kKISPoGK&5O2P^vDLyCTUo;2cEUSUCE z@Gs$ukB&J)U)&wV*KW6pt%cggdX1Y2;`7+sq0fg+{yiAo({Ii2eEBfOb*i)T zsB`U71ZJFhKgRW+3}AU_2&Tr7TA0^Rh_ls9a92`e*5%BHg9Y+u4SfL47APnmS^#tP z>Z+XYf*S@|mRFI|R%~?Z@i-R|!ZNsyJYQXzj3E%kwj|@o)lr}aDefVqr2XC`sfe$g+D?dYebx%{rt+yqnc1R0cRP(Bzm)ZZ}}#uyA!)r(DHIk}^=WF?%Ph4{MF80>c=u=Jab z`NmLv2-1@+K($vTQZZ$shJd!ISfsOe_E8_?51}DXfTUF9>5P9jyR<&s7_pUaPa+EG zdG{OqfiWjXA~2PVR91v)f-SJi6g)T@fxs-xz(kTSrSwYd+Qxux3BrSH{$CCLoiP(5 zuv>GyV5)eeL&4^L^1QE_{P8g-$xq|6!hz#ppT=kHO=9}=K9fJGKW)80embdO<);Tf zdEPxPzE6L;wxYEm{H7ll@e#8>|5q1(S%2Q~5?KLZsVLxO6^1^4-dElH3a@H^RWqF8 zn;Q;_dNN;1!B$3g2eseLKj~Gdw_YGW->G2b$A>)mT@T+jcA^*up;!j!5kqWID$$>$ z4R9u3l9kWe(fbjETEuD>oSC;qnezLV?{-%IyV2YG5k3NQXNl=aF>H&&U<4F|EJ^Y(yUOtN_^MxzM)mP z)61_aveDvr*6|pd{}V62QGp2y31vDqq`v2Utbl*M$ijrOQj=(Myl`kezE!~QbJRm~ zKqoRRGMCJeo%eD9|AGB2jdev(2m9K2ca7ywt0!yvC`R~@hpD@DrXUiFKm?c8MJm_H zkO#MI7@|RT)|)Uh!Z1=$nd5DCE}Q?WB7S+X?5gTmcBQk4*Q%<6#@ST=5>Il_H)W>d zbHh>iTdwS6(US8%Rm^WIK1s()6}#UUYKkhUtuX(+B+Uk+jGgzxV*XU|NyNNEAW2M} zsjSCf&OP**e;4zYijNlzUq(omk6{+DVUghNWDLF=2T|WKj$buSJRoBG4g=24d3YTE zhC)1=0^@UGz zzdRums0y~iYRdmLgs;O_gm>>+FR7FkhY_X`FCtr}ihAMjMF|8+Am=H%RdHtMw#5AV zc&aKQC57rx)xRJQ#&mVo`=-K6h@686cv_&&x`!{Ob&nV;jkOdPfq>=&Dy{o@feH&~ zzWG}}YKv{YK#=^7!l?K{yacz@hB_?H)NOMLa> z$ZbJIFqZh2=i{*M#ZmYENi`2R7M zBTP0KGcy0&LZbLzmPk7JJpw0aw{ygBxS$Xn%>!W?8nV;PHx%SJ8xW+P0pPmQfN=LB z!0n~xmgD6s9f0M`e=7iY08sWa-hPVtQw3ORzY%2pJ$mCQf%+xt(+6-*UW4@ZS8*@g zDn*?F=8Y5Or>5I)0F`^k;thd-2t7i8TTcx%NFp((JaDSHQ$3VT=kLcu51oqO2i17P z*9s7eOC&G?D6v~45bA{zdqe_pTqyCBNC0J&*eeo13niWr2{fG&`$PiGqr~&4!fPEt zH$~z_kxI82i{SHn6T#bPoGF}s;n^vl~7fS9%P94QPo02K~iURjp`2J zR6`345rtd5?}J7BB^TuThC{F&8j<$jbm-CDK>tbJ&0H%w_+5 z*0A>9R}OFg{cG3%o&EQC=orjDnEu_u`a^0al>vLSgZcN6Dfc%I+m!p$@2DyF&bMmH z{os)@<-TRGhIf1pQ|{NiWzsnLm?^iQud26b%KcwXQ|@0Eyc4F}kHbLx|K61Q0NBzn z`XB4;B#WP>Q=RSFpQiK3oh0_Q4ogD4#Sfw*&Vw_b;IK{ydo`bw`=WIFtbO~x)~)nM z7LV@5-#2S}ZxrXKQM>8p%%k1t|$VwatY0_OiQwk9Y?LSZBK zBZmKP?nnk9hgxEp{uItfE5QM9a8HgjUr1&MD$&#&78zD)MF@K4Fb>CRs;ytt+5+o@ zW|%D)8eSD6B6me&4fJ<72*(^$R$Ecu(AomWYL_mkMEGhPc_w|K-Gg$Q7uUdAta%9= z>(M3kP0&!n@wpanAEPsuwBW4NNC=hj>a5nLnzmp~6nE8 zHyi#!oX4qca0LwTvw5`YEVthSJC zL?g%hW>WG1_y1YWUaqr|{FvcC0OcX+(@3NGX~RE;^N#|Yep?S8HzFoxO)Qy8^o|Vd zxDfPX&HHo6-{bvHG4o&C|5wJn%)HW2Hygx_p5Dz{RqRTDY*Dum7w%WLh-mq+x*fyJ zAK16M?c3kmuz#_0bxcf`9TO9u__&IR>1O7q)UBVHpI5gNsMn~AwwnIWW4lcB*_^}Z zGq_l{J7ToJNg}oSsB3>Gp~GB@(8_1H_9mY!oBen0e@3YPU+2CnDukc8d9~r&rEWJG zzAftZbB3=CI#oi=U54)!mHTzWH&x~Wb9)a#UK>tlo{hJojR#FEbW6wXY07xurTx{Li=#FgVflTun|^1)hM4lyhU1G_HYq zLiv~(0en!=8}nB~$}&&O3?Lw`_RDY?{J7InF$%>ez2uNF?leRoOJ_hfb{@RTbk#$d z{uIT{Tk7)M$jyxZQP*VuuU&|BgcHeRPcr{+U7nlxuYA! z*MOw$8dBdegX`(K7^eL*a0dj0zC@*SxoIxJX9RP%PFNK@z6L-CNfKle`QAlcO#u z9{}_0LLj&PRdguAWW?H+D~s{IJ&kDHa~w-Ttc@=Xtx8c0Wfeddj_i7-xz_N%&S<%O zX$Ubo$x){_X zQH+Z8>hw`ZW9el;<65z#?j)y;@%~4cxtsgHj|dd7Ag3j&bPdrKN?Y^D|8V<<8GG?^ zG~VToBdEYJ|3e+#7M_d8{11=$ANDyMv844Ln?FMQ56}C~+x8`VrEnDb65er`zJyb9 z`4S@Y9rPvqZP8nI3B2~Lx&%I0d}uC#&lTr(S2Z1Or-S`f=Y4V9u-=e(?jY`v=WHL| z1Mv#-Kzw|h{|bi(VvX=X{8LU3#AU(*@eS(%;eoh{oCCS}X@_&5<$<_?d;=i|9%p@m zJP^0g6NdQ%#}l>(;=}ZaVLoF$B0LbEq(@Bi)uE5T8sUHG5!3v%Pk%*tAdVv^L6`Zp zoF0f%Q3wyjANl<2Z4bl>dctEqo!bL(F-k2D#48ANcn`#d(gX1;wg=+9@PN`Dh*wDG zI^lsx_m&4DC6osu-6{`6x-BtZ9#2)(9*EB)&+3+WXd%yo)+XHbiDy}>bsSU~lk!~Bzt0xeo<$<^snL+b5k!g7#-h@os1Mw?P z55(K02jagi4@COD_CTb2<$*}ImIoqzd58z%_oN5n-O2-Tz4Abup*#?;usjg|NgjyX zOZ@+Icp#oFJP`Nf_CRcKcp%D7H!mORSO{a8RSpkC0)z+RT|)t3Nb@;|2cmf6Ddx{} zdLZs}cpws>_CTb2%L7roAz4;ekki+5?g9;eq(WoF0e^oF0hx!cEZfK%|7_ zfk+9<1CbJz2O=db4@62>9*C5%JP;{ic_324@<617<$*{E%L9=T!UNIg^gt|^9*EyP zmdzKEz!j z!gGy`Dg=E%GS-*2zJ{gqE%@3U#Sgg5E7WG^aV(HV0HMq91h%Q|%nk(V$lz3%?nqyh zPL9LbWK(?RLka-?`8Gf@noeJa1C5yf9sre@zqQ}e8|~{~5$%NHJeE=~`WaxRnU||G z;U+M&JDOSQmwp8R^8)DTcqh*0p~L!=PQStYhB~;;U;)~B2_weOVi8dUC;k{y z8bzi!dqgYnLn3Q&0*8?)m42(p!68;DN36Offy&-=V|2g?xK!m00{wtI7mOfrD3E^Z zf9TV~lF?2PY)I}YL;{u34BlHMnus@P_-LSCmelmcQY#UhNWyn2czN`gcnBZTrLn*Y zQGh2Mxhn&8F&rIKi381u1T}D6oClWZO!SCtIEBJX%zr7Xo&q|OaAh137*esWDvHAA zPhi)f$B}EFG+<0wW!^tVE;E38iU--+7e~Z3iY2fGk6i|2(P@M6RLsVqIps=DNK^$` zh%~2slm{;AN5l$=8z+66Q$EH6%_~;)#QS0n5V2z-X~CSbp5uTY~W}$=oBBa<3*ZNKEV-LFp@H-A$kpg3IFK*^%CL)d#a;TZ035uS-5JGduu zP4g4Qh?2^I9r-~C#Qf{<%r*r4LUac@>MMwI5t%>5`SW0+_e?lBP!nv9RQ6{wiN1*4 zog}eUL>Be;VRsGTuO#zz7UMWSM+uEt93q(Y0wYj)uoswt$~Sp|%lyMQi3g0<%EUl~ zFpto!#E0dV{EM-4ajS|BDHYF>j4A6eTse+Ys){sLv_%v(WHq8t7pifeRXA1`iUE>U zgm{ZM+Z1dmB4S=;l@+5x!STP|!Tu0xdV^}fpr z9UJ^;doK(iHuxOG2A}MEI7n^TdkAe2DD6)Q7k6wRWn#UNbf$N9`3i)|KI*$kJJ6u1 z>&ae~23N-a1K4qJ|4$eUI`sZggE4G>SuumvII+DN|Dbk%t-~bkLs{c_28KAE()&sC_8@$~D zi=|RH;SXW1SH*He{}C}*Eoh95oKO=Uf$d;T1ek+US0vcHq^7007Uo*a&TOfvsK(Kk z4lr>xW+Vs~viimF)xyEg`USE?ya95GZc#duj({U{a(;?2{j)A_fSO6`tA0eqldP4b zqs|1@P^%-v8?1aTV5#;LO-_d`!ntzxyXiHwc147l(~a?BTB2NC% z=5%4S^!D4RrN2Lk{(hx}{%#M^UpZzT#>kbM(8{KD~*-l4aN7CXzOn5pY7&$`rh_F54Ol%s=BPE89 z&&RxBT-~Vsf>$~JwcAsL8IDwvjO#*b;j$&sOJe=WnpIGMRgoHD2ByT*sDyrw7&oJ< z{Ts$H?^C#naG36be{%kyXg@U{3-LJO2q!ub2aRzJHwTSvLm+CJ4|y05k)h2f?fa?k zVcz+;c2e8d8T=}@r@oeC1kv<{M6|O9+9R6&xdtVc9*_4yDzLOns|W}5bMUs&MFV#i zGw*}A7Q!HT!Al%b4rvVFRBtTI`@*ScUpmy?pXo|m2Cse%yK$7ax&1ii&EVQfZAN^9 z-?@sZu|)T@a!zT&XBzMU*2x#Bl!$2HOSI$T}^ zA)|5qOOwX6XgAJ3CDw+Zx%h>t18hn#kP=gpQOX#qzsGU!P z=<~(6b`uV+G5GflONPK1Hjp7!*Y{OowNHC!(x`;%M|{wW#{qGUFO%o@{H+Xr+BNgL%)y^(xwW{__Uk#|xAkl_fQZ z`A@^rMo2s}AidFh|BMH_b_HoH|WW*fd)ExDEY#09RKr$yp}9oENG-7AFiv`ve-fXsd>O zU}&E`2z3<(kCMZ5FFs)eQN8yHS;S}d*8n_7JPaLaD%@58*x()hOWZ9;37H&vf1XbbZ@{X!Kge1-p zmITt=aWT|L%r~Z+F}JyPIxFKz@H-mU!m`kJfhgD{3WT09(kYD+iAvliR84pSOpgqz zh#}I}^KoF1ZWHP#6d}(ca7k|IHeaT)rKGr)%MmS!i@DKlzJlT;m6Ga*#1z}$$!-3_ ze%7f26qVEO$L>a15~?z6a5s0t#FP0Zi8}q0o=sw#ym`e6u_rP`WdBRNGTjr4B_p~K zXNr=4qeS%Zp~%B@+`-5>_h8>*=DlkPl&9GCQQo!ZLmvJLcT+tX_dm=u2ptggAC@eG z0v_Z`?K6+DcEG8Pv>$3*4|@r=7nh>@Vf6+h3m4nL2x#3i6*goG_HzDtE*3_W7Y4=7 z3F8`|N3VaLA9ZcqcMCL@}dtw2P-u7;& zhLRlDe%0Pgu}~DZ^!J4m&;c=~0q#Z{wG{AU-QK50UH?u(Tgz~*^`n1($9Y{bx;C;X zk&&&{#d~E7X)|DSjnVG;P+Z}9hT4bCp0kQC=|PBI>48h}AGSxRLUU0tyK z#)K2-Bi4jv#-Xj%M;32-06cmdt}p@+(jt9YaeuC1OQTkUmPz5v!J~$iKSowtMYl!5 zi3kR0kFvgIzG8Hr+k}>-Y$--BiUx@TXlEJqZHX;!4Lk1)7h`Y)p34Ji%X<~BttD7p zZ8Z2lj6!H=t5Th_%d5J{n1e(t4YUwl?pWap867%(Ldzl9vWz0UfNyz=aLqg(1L8I8 z?n8_Dp?I=9BIC?4LK55c>Fn8I%;DYYmkB^cX=y7i0=n0use#*WV*?M(!8}7}$N>6UGrEpAV{#Gtm{Sd(O zi>`^L8-UGQP6WR98T`UQ=w@6)ctLL2xW1fnG#ZH{J1N7$b&yg+as7T|Yg|vqz4_E2 zTwi42+7TZxA7tGr!e->WiI}Mb4~}LqCb6_&sFP@38BoQN%BjmCNdb<&khjWkXFQRKKi7 zHrH)F0rYTHiu3EMS{o|p2&g59u~?^Jb_w43WY2SMbC2UK^-c9S@~Wju zeXOw}bfJC`6e;)^%4U~GWQBsw4NIGv8|y0?G|b+?ACnWU?+vl=TYCm6gWD3RNcq{A zR$zQzTaD1nG<9lfDyYDbT`mWSpdsgc1J$uG<3`5-{d|(C5)L zl6$&ZRKgs7cWzQkw# z*%mw+W4(#gYOPE4e-I)_mwB~{?E@iDmWODC>Hjbamy7TnfI!{{6e#x-a#XAh;QhwP`E8^_}uJ+~NO(B0)79*e-sKYS|lu0I2K ze9h!{6)HMM_!A0XA<>Dz&Y?$>OH5}MaJpcx!GB#K$5d7r8*5}~=#7NU zAwtrF$kpu09#VXX51EdjIF6#$5+~a#5_Eegc0r>{9={zpz8lwz(}80c3~eh=bPKFh z$I}#@o-qxyn@~&mveEQsWXazV*rys{W18?nRJG+m8sbgD>`pd=*R1ck6#*R$6kB1LtjpZQ40YNatZs8(Gg*$5z<-?4{5F-~)Nr z2QKi8IkL96HOK%9*wzbRKFh{1`iEyG^|H1LKe_%=IlDg2)g1toXB?v`MEd`hNzC{ue)t z{+^R}{e8;>Y{8XaTYNV9`+kGpr24z2vmY43_8Qj^)#%Nkv&;(WW6Uy9JlEJm?vNf8LZlNa+{F(hc^->2Ae>H2gZkqAkZScT*ue7_%AeAyBU-$A4u z`0hkf{EF~+e(fJT0bWptIbi!-@Plg&{;(nWzruAb{B2@lB9LY?8vF@~k^JM24ZsD> za+$Lvf4o=Wqb1raBn`$j#4|uaHr-VoXVDpv;Z#a?^iyzVNrxU}$Y1{9Z5!x_h~rhl z+t&?#ox&S*T~*1|jO+5{gp@7{AxJXrodRQ89J^7ZEWWrFNz1Az2rHU=oR9ZGXZ1R+ zO=pAOJ!tUzxkI*H981MltZq$$>vhF~(auX~eijmqeryMDG(>_eAqiHwi1Hx$h)&Bp zzO@TDdj{9EdBEG341QY{-f$E`m(w^{g}PAB>;cjSO#uHy7H~wraNgmH^r+v%wT*D~ z3xj{eNn#3BvlL-z*dqA*48l<*vbZ*wcpnnWATUb-yA>((FPFM5nO0-ZK*l{VkLe zqA>L-z4EyRS&ku2uj9d#GQJe4rLb)y9x4)HpT#p<{cRVk1<wk{zL$>k7j8|2^K z+Y``j&xGvQb}r_i9R@!~iZUb!THT>xz&o5haT45rl))>_OJk6f)~y1kA(w^IpvS_g z3yB-2$R8+A;bx4skx}Op<)s9eQzdN(0rSbfleq~(Gs>wh?d;uBeEn* zR~hP;Dofu_#lzbL$V%ul8)B;vfXOS*kr+{q$OUDy3Q9bf;MZ>RzWac)%MLmF4XYrM{J07U*iM|za96UdJ=B%S0 z@0S`I*1pc@ZswbF1+{rz8v@3`3%aGhCnm{2)R+0HL~)xa&N{Z(*CI+b%96pS75k#1 zbSCHws60}(YBl8F+&eNbSpw^oiMTeO4-O4$wZH4tl^9X8=3&0nAoIY2#gEA9NUXU> z5+1fef}^>N>qnOV|AM2ZfTNdig%?UXdgx7XG>38hNG2DKj+9AvPy!(|#nSsO zC*qV0n2+Oc62{({xE`ng-fl+-G;Z$t}X4aio}3KF(*G zvHH6cS3@OmgixbvB#P?#x&&E8YZf!EVV(j`=r=D9=QF|qY4~;#9=>VtxWoe~{}9HD zab5l*4XmWte_eAWV`srhKc0j(5ZfG-o%U)Q_ zgp#pNSj}|Gsl)dP@#6I)%OQY zM5l4eXTB*4ZW9HyahxZsqj@sl4pDTcD2gVNN)5oHbpN4nzB2#}oa`;CCu zIv8TGL_e4LUKEgD7m&jtu_Bcs{lp0Zlf`1$2vF*anK+{f`$|#qlG7X|=gg5M7mJeV z&XU=(BrQs2Qwc`N;qX-0F1BNF91#Y&B1l~7sIS&{B5dowaBZpv@3_I>X%V@V45$(2 zCY%USd@eX;DyTIyo&<$4<{DHNW_T?+W&F5>S}z$BXFJVysBbDAN$7h$}?GSO9}W?kVoFY2+=>t%M6W_|KYq_E~e^TOPq| zkXn7z83$&Lt~5>eFoe>OO=%~H z(xjtQ9J=8InJhpu7D#wNC_eRq%J*JTK46t2v`@=`R&LJ|g)k2yeJoj#4-9#Kl>k}m z03m@qoB-2iz9vzK7M9UGaJXaM?$4v%lU--S(E-=G3qjT}G{1J-nEFt&pteZM03_?$ zDixrSYf$VPvAC5j7Wy^F!q1`0f6G4f*>rx?@iOxqIMm=`4ZzF4IDe+V#tVhLV_ZYD z$+jP^Y%qdoqI(|mK8pL8fE~kUq)Jg5R2U8`1Li6-JEwg@gh)O z2d=h8iIZy`I0+9(oM@Q4HBQ1BC+`PNek^gq?73jHkC81HA1~r6Z30fNF!;+wHl1j{ zv*s05m@qZuUWtQ-{K0|mJVflqwUu!2W8k2`fdkq7k~lQr{+z_|{t_BSshCC^=2gq? zdpeb+X=6>eHmaDvw4;0iO6YeeF|`jSYmFe@(=(HKufTP8Gw_Kh+qaG@ws=p_#!pob z4n_w`NVcFD@k~D#1WIg8m{e`By8NNH%$dx)4EUKJgdxpNgKr+|bK*x+3C?U%X8`C2 zx`3ELR!TP`%RWBgDx{V|I8rhXDXT-7R6hl)j@MAQPl$H-&Bz~I?!z2+68P8pi$H7l z82sw7HmyPOX_hBYRQGfu%Bcdq8%PqyFVf3j8WQ~inak433j@$XBzhE?^vfgKBYEgH z;`c3*_P$zBXwjZ#T*@|1gYF}IQ4~Gcm(Tk+0)`;OVq8TIB733tAw7sHOOeHwA&@w^ zSO`=WAV>V#^N04z)77Q~9mrojqIceh(e6CaM1&G#bNSIm=M%7w@DuGVnzk>zm zPmr}N1M4Fk(^%hE3m*X5i$lSkqCg006`h&>XpeN=N6C#Sk-vrcgWn|9G%XmkGnQa% zZ#Vd(h4#FxL{&L2Yrq49pCN*5{lwws-uF;RPa>hhI!;1T{_+Qh?Z6=|`ewEPhiegs zu-IM$!IX!5pb+w(aShk5ad0^MEF)|kI1Tgd`M9eQ+%6$ID7Yk&wG zo}$lsc*=yfRO9Aw_I5`YZVq5BSamLBk)^;5wsdcC%Krm0c(96s58Z$Q-lhhAlW^8K;o%n!JhTkPg9e6iNxt!mAjU~Iu5E;e%MJbtx5oK4`!f z6%O)9Z&Z!;Q}gOR031MXbhTm6J7WKUX$Tl>(eH5gPe#z%?HP=LTFe)_sO^ZO{X@f+ zr%ByQYZ47JQ?~x__tZvE``3dP{tMUIcC;Vn37Z`453BZTm>}A}EF+ZAWVt8>-Affx z@@UOagt2f2u7>}Bocn!){{g22YW=cfv5IYiCGku*t+k{Bl74O-P~td;jI8YTK9a%JdB2g}uIRkY@Gn^<#6CkLEyK0B)=7{vGtom$a+FUe+2##lur@S2_3gebmRjr4uCdZ$F&c* zIDfstKUQ2o^nqRFCgH0{&DAhl(QJp`Ar*0bR?Ok<6^{hE*c*mTIIebRLeIa^;D0VE zBwP&LM3-~72B*0CL(ozP+z8GELGdMQ=fub=)Pr>fh z>6Rge8C*k81*YWhaCHYGfp&HS2hZc$ML4+1;9qdyAa*GXUl1WpfmEa6decD)8Y?6! zy7Pb*)}oP*;|j(whW^Lk`^O62LbO1Bqu{s7hKKt)u1DBB1-_1Ol8Ro2g@X=A`?Ld1 z;;<7E_I4oC!Gq`(Jb1yN;U#jH6v9cL4(m|%E@DEvQz9BKcw1}m! z6O)F;9o*#<)WV$j=s<2;y1#=6RtiEK!P%_X$b9iQiLatO7_U2li6?N)UkQAD!r=E6 z3*HSG5pn1U0Wv(PSTk`Ayq3_mq9=;Oz)3i|NzqR}$VP1!Vv_{dR>B8lqji#gavr9j zVYlR@q8}=(FqRK=(gk@jiE9ST1{Q3P*F-g;HA4(*xh?eF9u%Vlkf$J z7c2vN`}>p)xe{U+*TDO7qNT7@@sxbvv2!pFFT}Np@PhGkqr^+LPZ)f)71%ViJqJsX z7|91ZSqNT2{Ilc|Nhhxqh&e}uxrGT*c7R?D+?^9E*JwJ)2VK_f&|{JQ@;br`bXmJ3 zUf>=lj5rwA09$h6;)fa+!90*(w_yEq9dJ8NmCJWjuSSXYL@pSy4^@5LJaI)iVQx>9ifNkvyG zC8AhK-Jk}oM)L=4+AT#E2#kJtKxYkLx-Gc&0w-iV^-rna!8%Fkk9Bbm8Vx-<XK+J>PD$|7l#|KH%W*od3)eV@+(13F|wqAvWq}3kR#w-fs8^dKZ&knA-gX zgI{A7lYW!<3y#i{c840~0knKsGLfb&7CO7aY5D(WDuW6FyKz$Q_e+VU!#S&M#OTg3 zPnUu=_9uX&+f2U4C2$n#?2dIINEl4|X=OkVuSzUj3RNEyI>2jjcmvR~qN+dpV2y5P zzB~^^4yx9n1<+3*0J#`)l~kIEc970hWRy}yER{;6s-XK3S)Zq@At!mfPrmn3i|PL- zGVq(02mEU{^z-HDfi4*BEI`!Q`{g{Ts8kyFVcU;uxChYmwoZiMv$~157znOwcN-5I zZE3x6%0tRGTFMT$|yc?;#*uVLM z9u^jnt!2QYTK&MWwr_JaT$*QNtZgHE#$ zkO%x>8u-H&TwAIAkZ-;(X>WtEwh@hWn~BTq;ZQxUtX-4eBd4JxE>(vx5A>afj0)8@^rc}$-8E;HO zmz4oAs?51}I~V!#mk(=f((~2g+C#Vjy=*Sl<4uUN+CYnGxH`0csDajhAXokl*JpSn z(92WM<2;S4;Xk2wfV1#Vxwg@=mj;qr6kSLignlduWH@XCvdp&fLWbW2*0G%~;Ag=W zisds{MoA|6(lETxfa`#fp&H^lkqdhy@<g4X%L?V;+0h;JxFW!wMWXl@TZsswf(O1iT|Ro_>SuA(PrfZSbbK zw_r^{7e-t@*l>{z?wz;}0Dt|f5?C%w_CLWE+->k>fZR9*is z+1$xQc_Ew+gT!P?^a%wZ*%2Oxr1<5-x|Qse`f#oJ2*%_;IByh753E&%IH1m#<{GL_ zH~p~Vo{a>VaUbNxmvFs^wv#RULSb$SGgDh+q(P$3$JOBNK*Eq=MROJX4%c65B;X~f zG!{7irw8^oa;oNtcI7tbGs|77E}H5RIt>x?P`OT#;OsWxS7bR=;Y@~MplWO=oT%Nr zVnuV`FpvlvrQb&q2306R$GkA#0SFLovyRG_3iqz27zHA<{V3fgqT|57slH-S1b$jU z<~v(71Z!mRN~oyCW=ur3a+7#p8x_j;;bjUNI)30b*bTeQBtSI8r6^*)?~44@j{LO9 z|Eb7-|5#Q=^l>OU?ygiECt0;4;CFjhY*i$^I(^h#q+YFN-gBYeT7L!D#9ujI?V%1Q z1#fjcos4EWyCc%fQv)Uyr#O`Tj}h43ZD{W+xE{C?tl=($&n^hZJ1=SO*Cz?;@^xrt zJcAz;ZTt`CrJm60G@&aZ7U+<}{S z;YR;PDQ!$VpLr+a+VxT3>o1&-@iZ;2uOg0%bE^7N>HrK4wOlrMIfjHO8a}+w@d%`i zB+)#vMR8hsq%p*N+rbmu<_s}?VNejGK$v&tdqCvRwDM!U^jsYR*@11yhvp0_6ff0< z^F*QJtWFg}p838a-b~2jsE=aNBIZ{0?Nk@oI+g*w>=|4N$HV%l4#F{v_S4-J$@o#9 zjCL%BJq511kAbM3<-Euvs@6qOCAcoc;Sls2&Fy>uZQO?IA=SNbS$0>^>p&Fkk82M5oh;!qKKfk(Z!6N@eL|NW7jKc>IQrXrZYA?p;tF1k_QC+-4zrjXf>x)ia3Up) zPIdWC+2BLkdljk-rErOJ{9C;}V5mW$fEl zpDwg@4ukpg2ybUyF|03fy^408{~dTSxm<{*SB}%z`??~HFt5W1rsy+11Rz(SPoUY| zy<|hbAWXt%(y5^YT;=Jcq3rEQ48SxG>GvT`rn@t6--`RC*16vL4MCdP4ibxHgyZlb z7s7Aj+6rC$f-4cpz~v!AjT>C#V12WA zK%Pl~BVL*B@;14M#v2D0eWitpdX`dAZM+9-Zu*$x+3g_$XkRKc(}T*+Tt;PhIsKqJ z9ZrTH;k3F3^WeX5?cPYVI*3HcU3{)Zp@KLg-H8NrHTtn`bcIcx-(&xUG=7ft>R{c( z2*=0L%GOY%xwbYEu5YXnn)-^bk=Bt~wUovxmSP#iv-e#fvR{Ql0wo9Wi_h8Knwpm8 z#`cbMG7>NEjI2z?6GvSr+Jd;T&*BQ-gh7a~5-%WbEcRoTMB|xA1=MrWDpo^XH)sfg z{&{dd84yX6eIA}c7<;R-(+I@NEi+)2Mi=lhWPp%V^#krAL{a>JNabp269SH;pW8|! zBnkwAdH-w>)&%2f;+EITVsG23XivX|Ll5E5F_sQV{v3fg>;e8hh3oE5L3n_s`*Vhe zP}U^qN*BHe;#v9PqHMo2*PoOdWVMzkCLBqH%yiT?E0BC<0o#$ww`8^QupT%`Mwf6w$v0|Fa z)hWNaaH}G2G7goe{JwQraRl=7E(naB9#!J`;*d3uc{XTB{bL$AS>Pke^+6R?OQOO zv0p19nfZ?32ur}Dj-%(HFT2)*>GpHL(Y*%$Od;vwBI3By`mi=iCbfx%e4fw*7-(%h z_cC_;yJa#`k25LA%+x>z{la;Rvj#6j@&YVxZwIITB_fp+6cWy0(qA7Y;-Mqzd?g?s z4LD8VNTF=SV3gG%!=Z$tM|tow1{QM}ts)S4i@m^Wd*0%;9UJ?!dB5)S!0Yc2^}leu zi0EZul?kj`U>c1rG3+rA>3x-Q>NAl_(5uM!Y%aw5cv}(*Qh3C548pJQPdbQymo*=} zb$&P!#`*&o>-%t(egR`05fuL6wa2=&tJe^_6lxX07ED)TytbiYk;LpPfLI2Lx|Nw; z97svX|08nf2e*bdmB&XX{&tUnw=Ty19^mi%-yr&>w@8h9!k#tqIfkzWEmfFPh-?{( z$OXu9jD32T2Uqbn2W`qcQsCq-ZT5hlei+vicYrp(W$@?52->Ugne*l#xA)e+*gjcPKi<(Mg*(6yg~3vCO-CGw}BaqNBJ4{@}$KgPRZIx_o;!`U>6y zY}MA+Hp5`NLmcUg(fbO)So@ARPU>EaZVQLY^LBi1DMAFYVi=cw5##&!2LG|EfX26u zuw)HzazE3srG!9R8fu}WexNZL?~%LPcwhla9OGQZept_W8_n=onGp-+A)%$s=Q*Be zlyFyer<~)j%*L@=Dgud^F?kWhRm zdV0aBT5XMmo`t!$eh9YhhcGoL*EiR7AaXu>=n_@Oah)l z;(cMC$}Z2!UgD?Elsi7$4iB5GnDWEg=)CngX(aUBQgGRdZ1o^$^_C5RF&Ah4UFt&t^<$?p)qj!0Pxm+-g*c!c2ilqd{YsNKP zhDcgKh+;)!XAa>6e+1kzi^`u+saX>K+bWsT+P=F~MlVG@7G(QrhEpp^0i5O|t`6phw3@K}g z`K-v$3(lWY3f#eB0NWM3%>eE}4*eRAVE^>S(?@>^Fcl)$dR$WV=#s2#iLbg7;6_I7e$#<7;kL@LwX-ibt{vv>AkEI^|v436Hi56tPB zJvY|*AFSrw_MUiuS9E26yd6iWUyP&F+v}Q}7PZvlYh5u}Sp+!{l~w?(i(^j?*OqT! zcQ+DQ8Oub1h;c>P7vn+}mY*Vvl89MFSp?MxC`zufp(u-zYh+eS&Ei>SF-okpGD3BX z67)r)z5QY=TljRM)54}iCU9w^G9+Z-b|9b~8di$jV25jnboQK?W;mDx;pf1X&Mm8G zX)L2;9Or>H?Ph*v4)ZlsbNKDLzqDJpaN8dJt5 z${gZwO}U?;l0mNLl!u8DuNf4mi861a0z_uda_*%}LJD;|+amh?bNGvYo?^!F69tTh zm6HsJawE}XvK?213fkj+o$YKmsB|o~D&84uuZq&i%bk~yBO&mEa6!Fq{h{te-^x^c z_~%qKlw1|Es8@S73ZP-DZ8eS}woyWEDFY=s(M_0&rxUa0o_*Hb_m;y-XT_P_%wP;H zr9gI(s@XGVAqUoyboyANCWaB->&Vq{;JO)9yZv2h>uI?MBDRuJG7}#!#~rvF`iGa{ z!zMccfAR0_^i|cl?H9)4J&{#&+c6gDs;X+QjQ6#p6M>eVe(4CB&#E8S>&-QjvG|V2~dX0orc<;i2sZ6&;+;J97F$mbc^V5e!Rg^ z_skKm`_%V{x?hF5)2Bs!3&f|<0$}Yl@!g&y{@uH=H;R6J$pxGd!f@~PoJd_neKc^y zzt?`8_}=ft_dq%tyVPL1M^j7i^>+lvW%AoU(BD=Be1`byB;DraN4(7sN*sS1-&M4q zJmTNT$hQ5`q<)lxbFygHMBT0<|ILL&vu^WYd=sCN)H+3c^kmh}Bacf8x&Ruz58qVZ z=sx1O+=b;bzOjjLIUZvk+)I6H?GgXhe&ShfbDhNDsh(4Tzq#V?h2pQ|u_w5>)sJ0A zybfz+9bPs>KZ*f}@pt6Evyf=iZSK?GIYaQYZK6FN$KN4y)gWo_kmu01F~?<3s5Im4 zMi>{=_SdMb%W#|K?+a-%ScppwFHI9i9#27ur=1#4V2J1siKinuUp_>9$!)@%0OQv) z0~c7~+rEf_=eWSo%S8P*9C5m3a4W;;+{Xpoo@#nLr@P&gFo0%>SsV-rrKgklaT(3( zZp>`6JfhoZe%XD*>$6evrfid(`f-bikMK=wnyTua zsBZ|Wz;lKcQQXIy9~Qhoi6tI1(R03lDaG9>xO00Zx_OCVQoFVv@piRI+2nHBF8OUy ze^GC4oN&v)EHbxkMHuUln*xvKno-kQ@Bgv) zCh&1y)!Del<56rU4sl{TwiAcRE+99-KNUe zJa(VRL7v+GYEs|x`y%5T@m=BdS#Il6*6d z>gsM2-8hZuJb^34Am0aFIuw@mBkn(a<@i8G()m6rv6dtABOX#>Lwp?teO_V*%?T_h zzRzwxKe1j}IbUUa`|0Cli}La*%Ztme_R&sD`5nV{FvxY6%`R1yf3&5sW)vg!=7{0Rp3@V$B`)Iqr4E*#eKVMRL zoJ$V{UI3g#*gG0GdMg*i?}5X+LER_%gm8Dw*vZ4orMEoWGqEoIF_9a1+nhLiQ(`R) zG5wJZ(p>IHB;$9H$@9S?P~vCHZ&&;{eB&()ip9@wex|fZ4=oqp@5RzBr27+fY2imf ztX8;et~Vw&$A6K$iO=1y#ik1jRD7>(W&xnzK+jzI4~gcRq}5ury!rZ+%Kp!cD}H+N^&FEo z_KSk~QXhC3%Ik40ug%)SKyMVCPN}HyP^@k>AEG~Uar|z8jB>&3>NvCK%+TDdqW!}( z94s^D375Xz71udxMkU(suh;zf=f>)~=?k=xGLe;Ct&9PABgqie4cwvRinlYqO!L*vbn*PbB#8&-Ze1mLoj-{S(7RdKgmY2+K zYSuk*sc3K#*|>kIFfe-shTTk{%onXjNWAGsrz0;>GpA^!>5zq2M*#B*A#~+7%!hh^``u@w&Zo?JlC9VQf#wU}U+8&xpuvz9o*UGn*rpoSsG|nPZJNRlwdUhJwQYI>GzvOLM zu#_y6bFJ%4N?y3dgv4DLahR8F(1zw6>@II0=iT^2`6as0E?u3tM4BekD6z0MH1EOp zCMlw=EFzmtI34ea;T6F6-`>jyl1gmF$mb^fkdZ+S^Fc&-+`s`^0dpK=6TCmc$N+;X zMg?Lp$1?+|D7%IqbbSLVhU`FX$lr$evqYeqnmd8R@U0BDykcw&L7OA4D%}R z4urx@1HX7$wMIQp7>$RngaU4eKPDAc#sSuwQm0IHP?^-w5m*IV(h4)STy>-Se5o5> zK1=c^KyGqD<3Nb9?Bv31?5%yEFdELlNVjP}hoxXV56M)Wq9j()H>C7*j zD?0O#)fx6sd_1e#i2T+!w_q+7+1?}rw1OnY3uU!Yhrc&TP1r1!4sZZ2gk73}q~aS{ z=X`C(hnKNloOPk(@z>T#y*N+%1t>kvK#0Q8cu9qj&H~oh!~h`I9}ts@e7p&-=TIGB z>iDgO#{ay@w9^|z2J0~tz!`z&!$96BR%x?D3_jD;Y;xk-A{g7n%3ml}c#HBXT0%|X z`W+SWSx7*-_)}uKEpKYOSl|7;o$HcV-@KWct6f+b9q=P!1a~nu;1D>eI8LsYslKgZ zN`2ZawSjI46+!YO_21SDsR9ZWb-JGPj0mANWU^MqHcz%nAC$ar5i5M1JR1_OQDBp1 z)tSGr`Jl_}qcWmguhfJXV0nc(kN?TNEdAe)iPFN5tM%8hu;uYh@7C2`pHSZvx~euD z-B@poDY=Y(>hErlI`q}Grfq?Bc7ml*(CVYpFxN%f2^LC%8e&a|VqdWNsiFH!jlayG zJtHi%YptQtF%_NrSe`O_h%$oOsEpRhXb;wn#Mf}f8+Ls;dHJC7@=!fq9$ZGB{r+c) z?tG?Mbtk^oj?0J!(LQ+Ev!VH*)ep3fG_}&)xMzlJMSEi%$2Q};!eNsL@u75kfZQ5d+FP0eFn=eXiA^}-B*?d7D5&F$05o7>~iBXn`by9}0qA9V= zvfrTXB$a%tFrkK!8MwIl(!_TBuukuxdyZfH;d{F*Euf=d{}i7Nt)xXFm$PjU{>kjc zGI37}2HOf4^G55++O|XTwUrABeK9t$SthqzCG*=v%)w`-x*a~sR{U5l*+rm{WIQIk zO^DwnV%8iIN@0kA!B|+#mkab_h`#QEFp2oZY`7v(mQ}bIQ@SsW&SeHmrFB-__hUs2(7U33;1P#k!=_o#Me zNoPvt)B@SsCF<^-D-|j9jH!U;^ESs( z#Ig7pcCFe6m$7Vb-y~)G1FU+5?9LH>q3DS=2$BM)(z9Z077y-H`EHf(8{}JiHdJ`3 zx9#S_@7!pWKwLVKp~0cAWu9pc?brs2n%0X6sguZhCU5wX(TWUujNeK$vH^@ZlUN(4raD#=EvBVVoVDT#HrBB?bWG>n zm&bp2+j&x6Z`Sfki2q(~H5<3+=?)eHc_ zJfRN43_X*wlP((a{pd2*t^0Kh^j*3F_uP20`I$Ne{4Aq}oO?Y7r7RP#943<&RRL*= zP?}I_&LFa?q3G{HdnfampIOFybZYrMZl;Xm&yzp54Mm|1H*~Q|oQ$BnP2hhl2P$6-)RyH@My_|i^C)l?{l2d+qbyrg?;bZ(`^{Gg+uowz_4K=t5w-$sFEDl|?|5Qf zbhwnmOuAxnQ~XY8lsCxt#`p=$8LX%3CgMcrAh(WQ6~3EAIBmqT+R%Qi&6y2Uqp7QXR+Y3GxJYwVutY_-lhKh;=f-(_ezb_@kq zJ4Fit1eW5}%-3T0Kqs*Az;${$7PYch6&;dVX|7foX}@mUa_E3@7P zTI03xZz6qX$ewNbD(hjT>A%2DKpk6NzMfRRKJVv?eJFU=XdIqCzP_e>{U1MHt&#H5 zKFo6IQKya&oC05vP$JF|xAPKi$Fp?ar19n4kR3$1!Uz%-dkr^OpHF3yff`7UogeXn{pKZa*x>gn5-wVwWprvDG>S*^u>FF1f}=mnh*>9F|J z^^@8v{T}t{mrMU9xiTgZ|FZBG7`ux#V{0|^Nc%s_#n1h$4{PI(fFEbqE;8zF><5SY zOj&+V%JR9V!{)1Z1UDyezJ{~+pVEEW-_vr`-Z^)8u+9#`v|-o?rOAOT{-J!EFUHVF zd=z##jsa~mMtf@6_+70%k;^GY@wqv`Eamy$W#i#Nl^J`Cl#}!sVp#1%nPJw=C$o#= z7n~QbP*xa8HnP%supDK3KlwZ}js?KlHA{fQ3*qgvc6#+v*NuK0(u@79e*RDAi8GeZ zqsC!L)swnGFR*aZhcYfJNx`l<-FPr-V0Ap`eWxuii*pvEIJ16bqotr=8g}R=upe*Q zg>U@-+4@-`{}9i0HZs-2T5z%JQ;irbT`kurfdx8Pu3XtY3!WO9|0l$5AH?_1+`m!#Q==hRr#QY_+=17gEhbxr^(n7Y%aL~L9;A(}-dKDf1Nqus z$gwiy;S0;b!?AAR;ZZCUmf0>i*W9*^t_z30be$BQFb%?q$xY20Hz&3dj;F*{PNC@R zH0M?9s5fUGIQty`1cZv1#{nU*_{0Fk&P*&Kkl?Bb5l1fO~uvB8rJC&y&E{9ytxn6YT z-$h@!L=20)RjyoV#wAOf(9rd0YcVRl8*do(C5jA~LMt%iD0)I+}vh-V)dJrxI89Xk@vOncfw9MH{Bk0;qTBuKlFZ= zCFW=DS}BY7o=JY}!25csq`I4tUODHPtcOm?`QA}>*T~99BAD@PqOxGZzbsvbU4uW8 z;2)e?3FCIQ2sp@N!5a6pJ1k9y3XnpIy7-)?Vr}zIoC&f8!p+i8-otJMQdq{i_5^KU zBK`nmiL@aB@IRpusO z3TT7nWC0HF>kG>%U?-%i(L6I(omRFPjJL*{mN*~xv);twAHu>JIr4@qP`n8H`&G=$ z+walb6zt3j?V1=0KBBn;ReYvjVg<3 zlN8nYBAm_gtqTPytW7dEX$x2jmO{U{Ifd`bg-J3(T4ZL2s15RK7TWbAoCi%&nP?QQ z;nFqj}hvxR`kXC|+faJC|gTv(528_Evq%_zF8)OKwMI)KC8- zY)(K+A$h{GbY@uRVy*X~wHHguL_M&@g(xatl_?7l6$}}Z6_poImT71cmu+$l7uB0` z(j}5qN?8pnvV!zQQH;BippT<%f{yVnu`NAB8Q?4c@oSkc?XIv*(lygdoPLY?951t* zV90__kyG7V`}p{B_@Y15_VI1t#h!!Fr+Wlh5w@|lj z*vao)BXa$m<%M!3FS~=hOiH^shHw0T+Q)b69;@NTiI-#qcsNtkp?%1-9;oS^f zI89^As>e_)o|y5$UNHb)*3%bc9?)yRt>N6bk+xqBomJmr265v}OU2W{o552e{ubrQ zu3ul;G=E4rB;xl6)0|tAqX@t-5aeqTX3Cx^7{~WUoAYUk32dUrXAN zF#1*O?$(}bx)y^3TTNBG!1_3HHnE&%bz(_nHfMB2`8DeV+r?LaL4 z2AeiJN#e+x(X}P5G4Cv5#7tqG!Y| zZFwEsFEYE&%1j(OS6)k-_PE-!|Ikwz!n(4wY4>Tqzx{NiJ*R2^zo#SZ@2Jc_@^qwq zEGN45?x!Q|PPGkhd^*y;Nz3~OcEV#h>)1o;uYD#u?ICz|OJ|SYuWiA%)|mCMdK#l? zL1omIlF(r`j!R-V2*=1U%$wf8A)vI|*TGPqmpCNfFO+X@eK6PWra9G$ZGrj2@ud4yT@!T+B{Ph^F0|pMlzFQvj*u4$dpooh@P$z+j zGh|plpDo`7`Q9Rux>}y~@D3&=wgzrsVz-D;Cd?9@f}}HFI{#?q;q-Vq&cHsCrCcwm zip0l0IN*emLXtFO^-|+jyvyyZpD#7Jn(e1ak6F{3ik?E&;vak=3LyR$Vz<`Il<8IG z{5BTNrsn5Si&exoNiK`>jTtnA>+t}3vm9p75OR?eiA*Xbl2QXOBMeEf0J;EoGmDsy zl#?ul&erB#fNjSnLVMs8)+TBC*HZelw3IK4TPLh+*K3=|Snrpyd=Se^^?JNDOqEnU z<>0I;uUkV01tT2y4Z^~1ivO3MhY^_o7y|SDY=j6lZx3f-8`9uBTqCv@6jmq|vaKuC zHZ|{ze;0F?8{%(~6RXynU7t`mu?=cFM1ZoSMjKtslvBpc%6SQ{b~!KcJo&E5H+HGu zmt}so5Xp&>=y{vn~|eC*As`?h|ivqQqDqZ=bGbH&?ExV0b0~L(&R5oTCGD%{HRo|vk}U6 zgLRvH@s}J4ZzyR>d~u<%W^RH4E-Vr{Y~Pf37flSP0fZc?yBra`bK<2-B|zZ`H|DC+_9pw@3(+WMAJU-?P# zm1SO;S2M6&mv+o^Htjq7Tx5L&>&offBWTmwJ8=pP@ZE5*ENA>V; z?4%z0MW&*#gsr)x^P(ohs4A-3IyweoNF@j0Snudq+CIp~wGU!W*08#?v}xX?X}-^n z&FQ|(rA_l|I>+!uEff^&Wa|iQAmnnLt^?kNrDHE()3b)0X{#=FW@-Dy zt7*Fv@psGkiaI?I4LOt9i6t+e)szYDO%<77&Gn_sy)^_o0C}N^gDZ@{%hJkXT+8R5 zxYran$G~CG<)T})M5=EW8ia-6mA`STW zmYK|rR_Eqt8ei?0Uf^>2ra(Ss=Z<%@A8Bhnq4zfWuF&PNEY!I-Nm;yd5oKXza%dqI z($^i@UzwOJ-`RC2Rp{qmI(?`IcUEGfB+e39>nVqjGQ4VhduuZvlrlVhvii7QoY(;WvC*9r6t2xf`ZH&r54x1C_0K@Fp89&W>vH3>f`V7Oh zx>v9v>gU~y)P5>^zF2v>E1$-YlGr&HB1T*6#(k3K7yPumEY5b(#s<@_v0szIM=!pA zYWw9eIUI$! zSRV6%`yp{TxH{If$Y)7MgQIbPiCq@!EaQD~Gqwte$z4CR;vCQCcr&GV28V`ZtdDyw zuS`hRxaEYRr%7BV2rUNC%;SI&jK$e<@*o!+UoCY)?O*<<*9+@Cl_%!ZNu*9ZtX7bh zBbqjDY0{a}b6q~U)ai6+$$rsLeW^i(VSJJ;^JzJCyzIe2nu6X<$3Jz7ekBY4Al+;>tB;qv?(vM}wJlWt7N`WPE(nq$~~KST6Ls}UUn@0aXOi@ zfXOk4oL&LQI%)_t)s(s3KYChuxH~R9JPK!$k~3GU(0}6}Jv07tYL9=MJGJlJI!x^_ z^ZhafNIw{VhKh~FUt%)0Ka9^NhWzrK1GMxHDT)xTF256~>HkMzVfBW! z?q5WCIL*p(p)}1est9MzaYP11N`Ya_+uT8~ZD^K@JUVU>p z+9zHbUOJVR2Wohc;)I-RS<6KRy5?~y%l5m<&-=7&agUiTSRH(mV>@(K&{xnhP^X7s z=-?_~DD30D!p8WbvvK!H+p;wBJf(H!jZ$Z*kJgrv-DND-KIMZa)@t>%b=UAARxrem z+OnmQ%j0Z_*2Vu#_`&)auNoRfhb?{E5|+z2jcP3ZY>I=X%->K@H1^#V7n*A=E;KZk zo3`;Y!rvd^`={%(ga(D3TkD^|SyaD9jdpwI*ohNrt@Tm5HUU#EAskWEjke{{$w}Wl z$hRaviyB9a^n+{IpeMXjJ&yaWappQ#Ia``-Eh;fjk-$Tu`8olZt7tj#u@*3KxGtm- z2L>8x30x<~9ZR&`GJ>u1@I26$9+a`>vZx*n5MA$kxi|zwP;k(zr!Zc+_X}M z$ani^al`n0XFEW+{X<;eRjs7p_uwoAVq5C`Ww;Ly(lTS1+Rh$%O0r5Ho0uujRH_p* z$12s)N%R5lJX9?8ceLj)8(GdB=$klvNQQac7~9NURZp7l*TEHDuOj6pOS7mak4t^{ zEWQ_AzZb(wG0?H8XC&y38P{>t0ZGY)pf6U;Sf}x22Y|V~v*JI|-QF zc>JBZ@o7!-zd#2z()Kp~;w8ayQ?P!CPsboWY~B>lp{m9AN_T~2ru~&=%~#(VX-Yn- z8=JV*XO%7mPEf@Y&sZaCmDZqp^$hTx;KMof9~_Q*aL6vC{sYsKA#Z;w8n`jBCf>{b z){PuOxBInqPJUVCbw~%B{{ecC*uGIO?-Aqfzw_yLmtQ|0rhc9m{~;H_#<}uPnKElh z6K6>Kqxas`JUiB@gWq3%-XA+dbnuNjea4OPaa=xU^8nsy;+dy4-h{|c8OqraQZ_Wv zz|tLJzO`SnthzM0R&2_@$~-Zx0@v8fggp4svC3uT=MC$m9Nx*RIjKWD>W)20JoV!# z-kie|-4*_I;E$6@JXy~E`QJO$Q|EG5*FHY6{JQo2vm{TS)iJtrMYq5)HGmV7NoLM` zZH(WAOzI}04b5-D*$|1VH_7)#?|YAg?2!=tKAX?DViQr%MPBXNX!S>zwftUursVY{ znpZfUU`duzCa|hdF4({Wvc85zih|Yg4o=tNh59!na={a7$x(*lm;FvUK!7zD@K?d# z5x`>21(`d1a{0^jGtH9E_p+ORiOr;VWGvE7mz^%j$PIXpH}^^?N6M(UDTX0)X@|R4 zunj6nBy19E?01}op@Au{20D}uKj9y%)x~qWuFth zZ0((6gFf`*+E;lLzNR(~To56meR}x$UFGN7^qFMT_i5(mhsw{NMe?&(=69Fc&IHP9 z%d^GKJOKX$1;xvDw_`&q_T}OP_RWcF&P&{MUSfcTl#PtEEdEB7eS0_r@e7-;W^-fj zTs}W>22ZLM(~O|6JDb?ZoJWm<_gF3%@|S zcAB{b?GJzc=e^!~lNMg@SHkM{h*5XGBR1(Mz8616^VGZQ9&4=3PwWuoc%M2Oo^tG! zmX#h>XdzRxoMxth9AjD|6PEfe`{LMF!2k`KTMUs=W#Td~>5jc1q*Y`HAMMb)-E3lLGSGLlq)M zqfnO^l7M@tghB2O9JVO~_j19Y?6?+x?qSib_v8ELuzf#1F>9K2c@mpo)`94J!yA@_ z?|NhXc5SE*3VJL#)8!kVf3L{(m!C%d99Nzv9RAi0)2St}6@9V2OHMZDx*)s)fjW46?7>j?GGm=|2VuNR5 zm$kq!lJuiEM#C0ZXEOKzD~g`jFl=J1IVXMjyO)jMH>s=pcXrw$Dd`VM`WbxJ)V;+P zr70IF0pGaZ?W7s2-9vZi@bvUtd3JifiZy^3uxGOQoV@+$~*T=4iuixtb+lF^JARavEIOBL7e*Ek>ZX))P6_w-B>T&R4>Wa4o zpgcBt?W|}aRO3GK^v+mp+cq4Yvh^Z-wqLY;d;CSQt#ZZ)7@^k)n|DvsTlhfnuWGty z4SwXa8s9zmi#3%rK);C!G>OY{^G6{D;j2kgh;E6%XhvA9X^1}rH=w^RBDO#MDC&Or zwg&M5avy)3a}XNN(?*18o?H|>Ff=Bo^14tBqFCIAv_-})1P=^^2>d}5M{OD`1R(N9 z#m0^6?$d%NmWBUAv~bv25n&fagfVUnubOUv*GD7bl0}KjhiesqQDI!+t3B6{Wx*jT_Kb!#sZ!I^vH@RuiJDZ{Z`cAiB%= zdq4h=ogd1>0|tN}_c;eov8Ez_2##TqqVIE-1PRXyJ?H~AQLn)>e-wJFAF4ST;*UZD zIcmT&ixfOR(!_^L@W;&X_aXcV0Kf7%f$w+V&sXJ%t z_hB&P<3R%w@X1H{2$Z-_J_^0fk;Q{gJ_-#;o>hzb&tJ+4&*$(rqtDo|)YR0g&#bNP zqxjZt!MaLJ2gZX>mk9RBj#&P5|482Np^CeYAI^lq7c=5MemJEQ1(*6o#GN4ohOv${ z;E9Pv(L|W=e$fK(sQ9MBAg1>*yn6w7VtFzh|Hq$SW2ae6?&F7>?2@$mke~YXo}`T3 zWMn9!i-?DA{6+EOdpL7Xn-vZaz+8 z1c&M$^Flr2?{n~l=cJ|163!va*CaA`8szw`HZ^fg0lK7sI zG+icH6dDwejt04$Q92srnh~<0K~9EV5LHJ$UXUvfhLaxZwMRA};h+pQ0=Iz-2#%0} zR|dbS@wec|eSBp=a40_2LuBai@xVY|!%om*@mLfdKcCVBQF-}AZ{A4*!sF9Y0t zjPUqFaI7hy4Z-rh4@eElo8VA+kuRSQ+N%Uyf!~Dp4E}tjw->KD337@@5o%C?H+!760M92t8Ei5U_X(CyRDDz_75Jm|F+j5!!B8~*)TymT=M);?mT8k8{+g7TJ@?Tl z0X5a2Krc@@5SyvcK%2W6)S~h%WygeBXh3iYpNn^;GlVDiA*#_sKJLOFVx42*q|%8$ zpZ1anQ}-zW%T%!fGNg`sHsnscfpiOg+(+w}^p^>4ZW98sn3XLPs1~JcROf zy99apA}Yf|w!}wMp@Bjo&9KZjM}$#Ai@_s3l@FhKHI@@SUj6MZ!66$Nm39=5HjKX} z4n^xe3=6rq8dOgo6&ldTs60o7kq0l&?RbNv0^In@;96m@_96Lz=iUUub||Vjo`n>pD%SUXaoTHctL@BPIU;&jHq5Y|Gl=av?lWTCf>g#jjAi$ z$ME_U2^z9k{H2B{9UDr?w&E{Tb&2RRNyH`(PIiYSz*DtL@P0e~e2Pys)K($Df@0OH z3knU?1*S`R@b|}wprFaUwuCMXYSNQH^Yv~R^9uZ-!ha3VKf)g#zW{^!eL-~MC*tP> zv9uY_pAp0o<9rUtzS0Da@MHPy+QN=)MG`iO7&APE!Xm|-}BZ5os( zp84ZGgnN2nG$(*zDi(j#&Nvkz5kGx)X~Xn)X&6!6#~+6(7>?tI*Q>WSPlxNocY0P0 zA+Qmg!CypKxH#K1&N=vz4-Kd0-6;vfDJEz=f0&IBMJ8l?5{1^3i?9Bh6rJGfr06S) zh!iO|uPm>^TUfHb_ymVICRAjAU-vOl+&dl^MEUzaizzdYH=}1xz@+5kZ2>*2rxPCi zD6R6*kB}WpOXKrt0Ds6K@#MpDQGt#0;E`Zo#UzT_De>_Y8YpdF+6t|yLmux@x%0&* zI8<)Iawlo<9+0hSs*H~i9Ewk9O}U#W0J%>vou8G@mG}+o=Yr+@KTm$FS+pDceL|mI z4WowNi9b{;HX{UwYM4<-{wOq1hp6rW9cG1883t@N(+S|=-I^Xg+K=C!osB^7&6M3I zSQoyDaDSa6^y~QZbr8Iu0N;L@yiI+R7DSX!0pAabf8j>VXgxH@^}Tvs5ZzJvbmCjF z+_+lO1v$gSY$?_Vp5#M;X^>-*xz?bAilg7m4$G3iW>}&|J{C?ul>DR|NZ>8-GyMn* z<7E;dJLOOF!a6i~ zJEQwEi&uZYQmH%f6S`QPeJXgAlmA0Gcs#b?%`XXJk~;hu{t(?T5-4F4w5A8@0OGX!3gj>X_DYarkUX>GL)`f5I4Oeg z8vM8qvl-@x2;ne49m8ONjvsE~*M+asGH@9rGd4b-?PsxJwjHtY`1`YjMWuT#Xa;nI ziBRStJ!D*8SsFHE`k&SVV!e>R7wK~=f0O!rA%8E^=Z*ZmU7uU=BcE&W&F02e|Jf1{ z)yD*-u2=y(VDrRZ!_;d2UWGp}mE`YEeP*!xD85~j@G*n~+m-AL-rtQspFv}eZj>OW zns}2;hUz=}eawK5d15ko1o4No8t5}oz>VaiU3IF3zn%IV$j2qXttmgHAK;Vu1x@^E zHvG9okc4|}1)~Dv9761e#S8xVL$I&3h~cMiWbdRIhIb0SCv6M&(m$ve_0lKUS2Q-h z&EI7jyKefe5pb$JH;KkvpvZ9B=(kdkW< zwa0z@Jo2tg@DnI?G6X98AvmOUECExe6dI5YZCj{rBBY7IA;x@k6j~sn{ZL;+bjWr) z{(Nm0v56TXtwA+;_Sw=Ch!idwhJ^_E%37fT9?5oyM}(NX)?kK6GqO)n8Ic+E@%UW{ z3RYQ$h4QaK0iQ;LhJfonA=yC^Pc{UHY$F?_+WN`R5E~j4D66L{E^DO7o)34b z6rFKJkc2gsz0s?U#O8;Ea6kThHe{U(aym;(qgW+8$%oR_puiM_3SFkJBNS4D0twk(B+GM=-npWYuI)I-1vwG0ky0!t0*X_E9HSJc2Dvtj;?$r( zqem`6%12BTD1Q`MQwMBYH4YSiJHaT2CAN#gve6*NFNLZ>0a=q+NROC}ns$$YKD>BS zEWUcx>Ubi)I^Mi`b^MIPYMlMPI==Rd)$w&}R>#j=EAAWU#A2&bLqlbpHC^saHpLT& z)Qm`HtX>^k$H45tQnGSlu2P+9immTY75A45seygja(}9n?rkAP;b1wRDWndRhf;;q z&f}xAckJY*o*l`SmX>*3UDLL!Jh!73b4T)uqzAv(k4qXmcI>#}h87{TqbYXw;8fql zR0SkSu^R+iPqelH@QlGDM`|IhfZUrNo!VEKE1k$pjgd$$@rk(wvtzQ1$oIL(IQzOfmp(aGnmAsmpY-(c(un{jXuQfls*vNBqw zWOI|FN9&0{3Kyha;TTCD8<;;{FScl)VCjiWwpEtk{%9p&_3AzSV(my=Dgk_qAF zxAI7~P|ObwpaSLxk}akh3`b!UhkJ<7!P+nqfq>c+5vqju?oGDs+L63F8HEADAbAj= z!9po}u-q?vbnIw~-@0mb?D^$#K6&T#l>%{?S-5 z-BV5v4d*lEeE(2iwm&;i$`;B))3eF;&ZgMIb>RK8cQEZ-ZhkTemg^D$yT9!tF_J3e zQv)R>-`W)Wod}pE9j5Gy3#z~8iwXNz8W;)oI3hMEf5M9^WJfIF z_U@+Gqfx*}x`DVL`zPU;={}A)~n+O|dUTLL&(WV}s!@2IE2>@&o&{PP8}0 zz7z?qOWBJJ%3t>4j%3p%ma8S*2GU=N1`F-h6K($LA^H}gfdn4+C={}#(qK=jm=(_3 zpvhm20!A_(hzqiR<;7&0sdOnnqI6O9z7`2=$h1cQ#Q#R(kCX-rrk5{8DQ4<$5|6Zb|@`ZE(txdYLKYNSH7S-eb zi+~xzL9#W`LHHkPBNt04RpvGj|8^bt!Uk#p=oR=HLVvf>7XB zMu4Iy1|ovw11?@BKT>WjmkKIQl+ddqKv5(E5kc~`F5d8fX4(=(gZH{fU=-O@3WbXB#%O3H=}>ggezS``FgQTtUg|AmvI8kw3*J%>9!0;F1XB1Vp-}9l z|2ACQmrD)zm23iSD8aYZfrk@_qyYMF^TqEOE(YnNMR|K2cr^VG1<-$|FMfZvKS&?e z|DihYX!;=vp#N@P{NhMD)z`<;&8op@gYAD$J%s2K!ZeV?`+O8^2K|XZ>3^j@N^~-{ zbdb>deN=2t{RyEW{Azua=!9zNAfXTVs92@)CxjO0gY{9O6RM?ygg)e>f>x@OPwz)N zB(;M++iygJqZ0_m2l0>iVw3ygh@*`L=r<#w(WC>hLHS`{-2TCVJiIqc8ddJMqM^~G zgV90zcYLu`*(_<)w%?5eMpF(%2H}tS;@ZNnq@g+grw%xpc!&VV|GqE2)m}>;Mfrd0 zfTPKW2!Q+}zW7#WEqRpYAJzd!lMfL9`9~#wI_I;Zcx3mQF6bXeLWMSm8T^iO1PPG; zq({JJ&5(z_d@2&?sC%BG&<@52?N58rZN3a`$mP!>f%Rwyb)7=ObWYao5BI%|G|z=$bwk@UP+p!S#-hdwC!P+Dr}Zq`B~$@!vz z-s2K0!yIFfJ6nLSAp~K>zZwAwQ>=*yl7HpJLj!~Xav_K+_q7^8Bsnhr3e<1nc8})I$i+u1f<+{AY+l-~Qs@FqBb>2F=@# z>cQ)$;3t6;o(xi8)0Q`bi;(YsM?>pU_eBTop9EvW-|OjfBNC_L0qGfFUCLf$5Ppe^ z+c%iXlnYt;F{6z4MFNGeT0v(AjpRc#K>y{A#0ctDdbm))h_1*Ss&aoMumSxL4bXp; zBLPn@-%}pIaJdeC&|*Ch35}FYFg7T^CKR{0Ka067v=1~~uZ;rMr)%Sa?CV1@;k)iF6349k%Sz zV6Z>)Ldb^?B7fqrQ>7k^?%Rg;lc8|K(QY#`WhuExAoZs%N~t(ht;~*%PF92-TGmfT z!GvaqFOOg?7!_1M<6;&M4BGw_+JMi7!=p0lMFFMHyBILMmJ$T^g>ZNjB`*pnebL1z z-ZGH3q+qPRR0D{j<%TJ z@$9}rs>BI5Q=9%S8d^g)B06Y4A+h`5bM%~?tE9%pge*$-A8G($ilIm#_Kz+O2w`Gd zXrXAo6Aq6eC$-X>> zVh4s@>D;#vo+QNy0aJw+q>98}9wLgK1160!`C@LcPpuDxeSbrwKn??G)(}I2udGKa zlg%CI8P+xlh4QL}@D`D*k0erlbv=sx>08p)13?Xa%|dvKNZCgcDgXOw9*mi(9G*W~ z&d7jNre~jjn&1cZ5KNJJJ*oPHkj@Wl$Q0qJaJsIjzC=5Qb^fyvl0R$Vq=K}N+cj*k$MdaIvKx`6f@ z%5q@J8#wyqdI)t=3DH0jZ;zr-%&M-zjK8BETvG6wNnb^`i5MzK69i-+WYEaG)lxr1*!b+NE%lClAI8Ee|?mN(y?@q z(62>O;W)9gY9FYNvQR>n4iftHNGe%XWsZe>s2;*Xi6{*u@!=W@Bk6K)3KLcEf~98$ zJ^M%_q((^vX(73fMp2?mZBm0OJlp_ffwVkANb0wv=%CwblY%<@P6Lz$lJW>4so#sD z!vzR7EwpnVYlO2vVm?wx?c-6D(!Kj_V$h4zn&~L-?(7=0{>xh$A?Z7Ha%^TAE5=jD)ggvk(0`Oy&ZK9Z= zLWgGFnIWKlS-1zDWWpl390B7ilpUGkFqdJ)N)zC}@FWN%uMxDUUWiHY?-S*6s@RVe zuA{TZv9bxT`2qG(5i&6~iRI=PyhUJTYVSa$Ln23Cg6I@E7QH}2oik>Ua{N-ud|gq;Z)-_U+ihw zfq;qG!!0c9mm(}t;erk5&=u~AqId*Kcnq-=jopm?IY&lw=qjW{cXpAnI!@>VXAOKX3-tHTQu5WPNNB ziK1q$r=ArKqBozzqGT?>yan~HE0yZv9~N$7-F7^NtrM%Tbs~ z4GgQxq=}*~u-zl}EOr3Ebz5tDn{46XTJyC&S|B4^K+Zxw)*~NhBOm8^aBc)?id{04 zO7BPiyRE&uT+H8^1;K7)?@|-o-nGjH!{#)_E;Hd>ZS6L^o#B^TGW%_CCxfrBWLz+0 z)D*kY1b4XLG=p1AaHk7Knh4)viMO_TkUavr$|m3gb$}zpy1KVAI-Z|8GF_Z_K_zKP zD1oNfPHX{~J=QZhJ$8q{vt#px6WkimKYF6CGIewgcfeeOXDszUjI9GldL~E5?odDt zt!sf-7(MP!$7G=?*4m#QE@K9)h^a$JI)$A!c`RbV8vE42WcMDl_HDANJKGqkeK=ni zp?z0-TPK>=&iv>MbI>z?V&OY3A1M`!U(gZcd zu1}4RSIs-ecbZ~*u{C6_GQw&c2!D3(Xmz}RamG1D1(}=nS56L2VJnXd#2{U&IDKT! z1)%fWQy86@7%v{1pUX_&HN~jNMRs5sjw{fNCgx;61`)V(CD{hH^OC49q#CKQ>(*?>Py4 zrAsmp`tuxS7F)xn#w+90j7V%~EZUx0&MJ3SsuOc3$(zO_X^81|M;h!$BEgj(RU`{% zt*ssxSq&ZmuOx-O#bJY`_xFHDg`}EdV+!e?s8*+|{gva>Rc0|PF9;P)A6X9}E|h61 zT}5Ns;s{X)CB+p`NAtzOwyxHWw(_nrm?`HZOUw$WO%y86pRdf$0Wg@B{2|6Kc!5~c zM@$qVq$!xG$;nzai$J2T9M8;+<>se`rzYk`D#uV`aK};q^b~@|fI;@BJdAV(uG?JY zxPf*8I_-l(Qw@X-!8}zzn;vEjzYE1QQmM{Dg;fkxlKePk7bcEORI24%+nx?GgrBC^ zohBkHJtL;Eg^(DXiUFm&s}4q&VxTgyZZYv9RBLpyPMY16RIaT%-4r`%@OyA26c|Nv z-K`2lPVONPl>+Hx6eHY9RxzA{;?OwCSLVUB8T?VN9U`e%LA3UyQZsm6lW@M$G~$t zYw(K{FO}2u(vydUL@Vmqi#-smd3k8GI@+c{WalNdK-#ce8;Ram3)GUKM!mEasD(mP z_c9NdpH9zJ*%*K(itFVbfdFFgtc>Ay-)m~1FIQhq>S2hccGOO@j@Aq0r>)qM|LE8;FjhU8K5|rJ!sfhA5K?1vnTgS(Q`56^6Jtfp*`ac1 zwGhN^r2Tq99GsskPK;N`9w3=67SkI9qLK_M7~m+WH!2V5VQB+-Z`tI@k?F}fYEkn#mAMK%1^N%I;+wv`7BMvk z`-j;~4-dS*L-4?>C5LjX1WlYIz6aXzP>f9~rXj^Xd1aF8U_z^!N|l%HJIE=E)0=Bh+*V;I9tS0hOGE!ki#P}EQH8lzEaAZ zTOWNm^!A_%NdJ#4nh8Rd{v-x>6L!@V1uXX`W3c8UqZ5-f(jAERX*i`^riG31`cOJZ zipct(c@WG<6GuVd=`+wK2?@nQwf?LR6o`ggf6k+5(~_l7Z0Xq^f8K+;s2&2+{eq8p zEd`|h=RSl865!!WF)Y67PxYk-G457m%2c+;VguRIfx*K5{?vdC2DvXAWCoRMF+lEd zltyW|Fu=}jX%NkMlA`-6LNW1M8pIqpcRnPU#$U#A*bjLtaAbLzjGQKE39*r{7kiU2 zB-@|LJSWMP>aSzzW0kQx3e)p*JV`)mJ23x7gMHN)iy5$Kd3=JdH?2Z0M~YvMWvipJ z6?GOh6kL5nW5Y~NjHh63efBL!2C+S_LThSL%~hw551=_QEk`Do1r2PsD`Dp_c9WGj z_{3<~Wmg&;av@0m396_GfFMKw$kac^(t{XOz|sbIjDrJ4^xp}D=5mr*?tKd&iyGVv zST|Dq=Ku`b2)Uk4fJppbV=~Z?9~c_O%=>{n7Pcl^+UC(6`ZtB-hA~Z*AIJ?RTiO}? zJq2TOx}<^JJfKAmjoB;el-Ad50fwsbM*2O5OwR(8LzF^HSOyK z3Nl{a!1Ns3Ou`_M3k_`kFx^`p32IdN6?lzoGJlxGYJ0>&f&zkbKToeL>DP; z&;0C3G(MG4bgG_@BrpgQd!~Zm^cihKDj23DMPeYKq+%dSk#0R)&TN%U0B7nhb};w~ zgGUOZX!8K#^2bXQRIH56vy-JueKM7)32`Jlz}2OSVHk!1V@%kt%QQTD0zN020?FcfC0SRCCUaTQ<)q+38u3rX3)%w{X-jkh2jj)OiquEvnS49V3CcPIYHYE;a{m} za!Li8&Eov*jPxau6n%phg`?a|<;=mx&R3bo-4M+V1s|wRPaV~986%aH4 zlxVvmh@b0mgQDyR089iFU#EtnW2m0B7YTCessWmaaAS5Eg2$@Ub90lG!Rk zA71e8dN_tmPgAVhpz!n(QEKElKQ&O9pF{Pf$k21!6N$4A$8`_^9kS~bp{F`}N2MrT zE>KBNPS1+^b)%53SB&DZi6iuaB@s0394XlY?c8fpn69GUp@!a>o}5R=tq%i$LShff z^9IGCJLlzc4@&gL06??GPVP2jK3S>KHLDET@tSlL zbf9t+`iq_>tpwYqOcYk>1nZ0NN?&f@JSTX|h*(CyqKvUN9e!hXz8CCPj#?Oq?uLBw zULaj5q=XFY2bE(dXUiPw(@7X@?EB`?`<)sKhJ&+#`7%tZOPPbH()1$H!62xlHJh#9 z%}4|)1S?n>FXu)lU6g_!;EPaV{!vDAIH)KOA+ouU8LeR-09AS7&Pw4#PX(Pu!QlBp zBM}(csd0g~1Ad?e4%XN?5sXe?9IS_7$#ethmKvne362MzBpI2#yEOuXz;;ge+*Sjm z#`rktB-V3@H8AbQEZEF&w5QBP25g5*`TlGfZU$DeqX1sJipScNOVxS*xk?nu8x^9W z_Z_+9+TVB_jV}Ks(C9Yf%gs%!oFxVMz0jTuwQ`n}oWKQ}wsMx#({YxRznOU9G zhQ(HMiW$StyLWY!+sm2C5pk{0KrLSrUmbgf59ar*H{o=(;=C+9=k(BKyqY!#R{VUt z(dlL1d@G&@rgPN_jDJ&X8}axItPAIWqX4m0+xhMxORxDNh7}wE>DOL7SI(s||0%sq z(7Z(6i-WeWbLrfHTIWOf;!rL_h40UN`|WglWzp9HLhpy$e=3KfW`-J>c*RWFl1Pgt0(z%uf;L z#s#t=?@`$p55`JQ&zxjmr!+k@*)qY&=DF(p7*;b zvQLiwukXah_!{(od$3?IGhEK3N;rF>guZma9(p)Wu466 zEtM_}bFUuGbj)W^AKG^9K;z%h&a)Qz*^QBeE0SSy#kukPIOuV>%SR#8hn{^H7lFXc zxlAA_>}wq;_G3wk7l`xx%*ll)DR{0PBsG8->1>}DDJSegU}G5P_s7c5ohTm@mpVze zh=cC%ebvc^a548=T>zo4G{mzlW!MSo>bNMtbA#^;o7A%7dbqfdcRF7#isgYMxl;)5 zGU~!Hh9P}V6W)&Zn+=@PP~1^iFz?0kfzb(i^z6VFUEm<>PIaFCcL)6GVGS=1*g0Le zcL%Xc8mDoVaexyB$XJ-S<_alzdVSe}eWl(cdTqDCR+=|h<3mcs!+)*@Wcn-(aPT~g z0T~RWi|pAqz-~|b-$p^aSn9`O7Z3k1!g`7}08uI=j-w09-M+vh;7LO}TlaMN07sFy zKM1|mW8eUDUS1M+pf=-hPbf3$Ewt4XGLHD1J<3oNGIVWHuyW~z@P0KWD>`x<+ErUa zn~Q;!WD6`qNep~-M~fgCTSNp5CL)nvV`R2z3r2P(%ZvPhn5dIb?kUnPB0<>wxyruD z>BFOw*Y*@)ttI8k^LvW4jUSA`UYQ6!2#3}!00qKc4v^#tkv?o-XtEWCR#=w1hy^lf zS>)ez$nXWY@Xf^W3j?FBkiQR%L>`XKrE^Yl0cu5fL|X?8SH}ES#{BHKq3eIaV_O;XJAoO8l`+55HRiW6MgZ4rWsHCx zn>SptGDhHyB*6Xs`4}VM1bFn|KzuFkfLM3N>Q(Fe2Q$MsNC?~Zxhgu_*A&|j4oW&8 z76S}qn^tYa!7@0*$KVa1i`f+0R1=oGWG@)F@e;SkU>(niAIRnRnbYjom)gp0t^Gw= zn|-#t=o@;j&%i4dVF4&hvCbish@7w3fR~OU=PvMaE?&Bd$u4=>SZZrEB*771+Jyv$ zB>B?87xa72=SwGF&^B)2OBY`-N4k|SyZC~h<~F|U<_ji6FW?K(#~VBI7s{(p=Rwxn z^lzV4FOU3hKb>u!1FwEGUecFQXl2wlZjY>q%&PJ3R> zR~0!XyY;0l*~YwIqiMs}a2Z=F~ThPPII>q=rhGiIpuZ5Phh!&|$) z?M}9lnGU|So6_#om#$x0N*BklT4rBoF`fR>-;8k_+Ccf^%D^dY8rBDM# zKpLy*I@)_C=2}KZt2>9V6GSdU!OM=jZ;%U2I@)<9iuc&Icdz%-qA}Rf&!i`-btqjC zO=%&b&-2pZ+>rv6A| zdG;b>(ApQf#ML(g6Nj;Z6C3|zgCl=#ypc2a!&sP63%de+rz3#!4vU^!O4$}g>D{Tn zec&IPRE1>kj=g(3cie5>`pE7kB_+s`Tc@J;l$jSy|*;~Rhvu3gJ6#J4}E=i_`iur6Ze+jtxQVe@exW~8-T1L>^ zd~SoW(hYWfBs?7*PFq)NNG_OOSsA&qGSV!nwBx9DN#n}O zNG?j%K89RIY1e10tfN{PBVAcX^>e?D%AVEY{N+^{91X!ETDYUgoTL&voA-=ladgD+ z&=5A0m50-VSZ>%9I}e?i9;}>d8O192orfpprsj{cSIAc^kixhM`#AXQxZ3o0T3fHS zU^D81o@3XJt6Mbk-o5SYacsn;4CPcNQxHl!l2^5~xN9`su{@L5?t(*@6a|qsv1jEX zIc^-O0Ix~IEaIKNZzw;QDi3CGYBKq5(f6KIF?)3z?fVu6^n?)fWG6+~N(AgW3sBJW zrxalu5wK(@fRHJBNnAh#tVj(C0th)D!geC;3nA?DAv}`^DPB-qn@tW) zBnj^c!A&j+znJiJ2yQY-_$7qn&e8yVlSjfYB^+nC1mGr%gkMH@E(A9@B>Zy1v4buU z-(-+*oOOdWGA&qz>GXgxyn@|11uPtUGcgr`WXTHB&Y_+tQl1J3)-^*t5u`i`3evNN zunDV{D^FPjt92+HLCO=hAhi!=qDXmaC0HFpnFvx|xd>9%P&SH`r+|XBYbYB*$}2)a z>K@8Pk@8eku=Wh)B1n0qElAf7?TaGiDYanj9oiQ`%2NzMn#yElI;Q2w@wuJl@<^(j zD(owk%hz6e?T#c*?NBg63#nUL4$mLiImz|AxSbc~FOMrRO1BJQHK=TVJW;})X)!Fa z(}m+Y_+V(wn6%_IL_`qO>jlNZGb_XIj*-P5mJ35K?9}W*Yp@&^cqZ66= zDZ+o`;6sB4Wb-Q}^j|KND?qt>54%_Aut};T+0xwwgeU7Ev>Al|u7}WW5Ps|sxJh${ zcV7F_Nw(}JA3t$OvV7C*v`)5QDg@9|XgFm%wl3ow8N|kHf(Uz2Eexy~;EQX4U`v5! zz2C|`*emy7yGz0SS6R~sTe$}tI{=gIn4w;|2b-7DtlWbgxXT(d_AB>b&vF6B%01XP zMvJm?5BADE z*!EIno~(fzQ2o~fc*+w(g2Rqp@yb2eEB9dE!PC57Hes+g__6ZKvP!k!R{%q z+=DImYOmabU6$*%eHU6MF|xaI5B9!b(_^kwk<%IjcWJ|%tlWcbZyDEPPK}jaxd+?a zzrJ!0c2aH@8VX*ZjheG^4>m4bLSNZjcI|g|MPeRE9ha4Ru;qU2C^(J=ku;&B{I4PyHV3SiG3Q5yW~0ai);x!M|L%ueXD74*<7F*)y%V_e!oj zP7UQ{0~U_7)-~Yq)T-67S!}~f_w6s^s;`^NyW9JFUy$4_r%3P|iBqwWEM`ngDQr_Q z=O3RSVSI3AY7eyq93MwyiR2GcSLIToc1<_va zqGj(~Fe174&=C866I<>z9mF{te;hJ(85udA93ISF)R+i}bBK+0CbKT@}r+G(o$=)^cjvTc~ zmY#(>y38p!ym12i&q$=z7u0hSM>-)AK`_s40T7RZGBC_Dbg1d&o$td?i%xyT1|_)| zzDr-RB}wjs-=(kEdeuSX-TK;zs|)$st*>3Uwveya@pWKuxQGp9Li>6K$g9x4fv>q? z+;5rJ6NYY-2xu*RVb5k57H#hfgr*p}FO@E*y1Lo^^zfbS$3Fgcw6<{uCC$K|TX1=G zs)NTKX87KV6BrBmGB9xHRDPgej&x*0^&C787PI?FZawat`yoKi{4l-gUb;}^nPb@G!?j+<%ky+d37HdLroIg_;DLp5J z>!5LZ6mHv+=gw9#b5NfpOSkBAC;7OIgm5=zX)rz5mki_$$7k^!%*aMY{4!@aL@SWC z#0l_+W3_GSFnw&itzhx=2-{pHfZGVZo$8J`^EMsRmPng-z5H5&rG z%yFyt9kzv%+cO#(A-P;*Qt^4ksJVSW?mTJG`tYWKP;DvYRwV_trr$M;7+J?L|#(U>+SGWd%;>%*%+?p_MUj1The_vadTnB-Y zqfo!(3jt}~sEgyzaDyk{gIdgT!w*VIqFtMxb->xV8xY|uF&u>E!g!ZSqXZ5`x?&uY&2XIB>@Js}%0!a01hU!A7p!(NBRUCv;x`wC;Crw=Z z3r-h81jTO{K1JVaC_>7t2c-B-!)0ScQ2Z7t_Ty>}#tc)m;iUL?q-X=`B7!0=3>I0k z63T^2VPpp&*(VI6F0ei}Xn)(#9ylIJdEhwQRDqB*E+m%nUleN<5W9;wprl&c%Vs187?xaW9M zT+{_nLG=fuiaTj5xSkTsLYiU90U)XW2dM`_8%IGZ{}mg7z2{ZRI8+{9TAOH)LQW{s5`I%|O4Qz)bqJc$n;-~C52@^AHlzTD-9KGUC zgr4Z_Lc_oopGcUPNu-i4*3T+Mf21$69v)>p1BztAN7rREOv>&gdiI1u(U^z)GsO;Dr_{ltRZ)|!;7M3o9}xBD_<()`^$3G zV4$%isa&pgH!;iOx{`x-xf1L_#11NGN>*zFCer*Y*c@L%W0uTQ-L zJ`}KDuh^+fdLhYlAP0!>hCqb+^r;^}e={yvz%)$%NUjXrP=)aPsb3PR?HDS`X7VF# zP^A#6r$uiKqSoL^u^{EQ2k@-h6mVLl^xk3d;0W{&)8*z^g&z;oU!eC+53eH~^^+3ZjTe*vUcYV(VNNVpT~pzFCStycCO zUmUYp>Kkh58>e*Dp4zY1=)? zWf0T$j}0cKxj^&vQ8YsaA2$U7^NmrMm?-j_d{|&$zBvlBGl;3D>OJTrh(!v6g?#Cj z@;=PN47JF&2-G}TnFh1eYUI`ssckVx=t+x~HKf$B7$oU?zr&ZYY_@+$s=Li&i+x}Q zz306c8EB*Y9&(Y3!#!NSA(HW7M#g%#i={0`i~cYT`@|Gb^~E3|oe#!vIAsYF0%fc^ zDNfH<$13GsEn_fI1>Ps zNFm!tlyWpnM(_*b3G1jUc3li@8*X&&XwS8^o+xvyhUXsB$ff0_h%-@f=}AC|m2=VL zj6=fNn0`eEj`hs57N_Ur%;@ZF4W8|{;4*k+pqOnze@OBzzsR&D0bWc_Yaj!40GcYz z!_B0E{)sKgVxH0n)n#AiZVloa_pye5o6p+}|Lg%ZEWsdI3{D9fwIvwDGs!a}r!Xof zIYAE!R|JIx59eD7=S6-r%t?pJ$9A$_>_^)bMzbv_X0m*V?yfVt5blo-H> zSi9?kaD!F7SbOS&kW-fPn>F{^ZK0BcS}32cz9ozrt=1fC|6gI$P#a~avH^cEj9RN~ z#K!nE!N6h@7-?YoHj zSQs_Zw#zByUk;;2+IAV{_(~Wx+P3c@2Y*q68)@59#C^O5H?qKbi2KzV+{hA36ZbD` za3hN>L)^cr!Hq1lEOEb9gBw|BGNAd_!FtkeY&*;b?!r{Vg6Dv3SM3hir%05b>4`)M zTAoOhpy7!`3EG`Vl%Q>oL8BJ_}WuL$5pDI)vAKzwBoF+vfcheUi;5HUg#IdBcc2ZD$ZiU>U<;;Vy*5sGML z+Flbxj8H`AAt}B#fEcBSW+vsJ~nq83NAA_}aIA_}aYA}X+sA}X+sA}X+s zA}X+sA}X+sA_`Cy@m(T9-RkCi-F#hN_uWzG(XKIj|L>_qhf9i4$H)XY2=HE8QfBwv zf}U}hbyIdBzc_?d$9oQ7DWj~czv0V8W9Rw9A!3jhh5hoDD0hLi400m_-&+v}V^Q`q*m48xosS>t({nq~pQ)uurIh!+x4o za2US>PxGFF<2N^G9;{p50GPBK06SvP?jiG{6y+iNQpQ;>;M+)hGtLSZzA^Q3##y1l zQ><4q&J0zaW4-Eq-;ch>zj*pjKRDk9HJxdg5(mBC&4b=8=0Wcg^B~VG-y?P4n~1RK ztlIG#SKr+2Ni2m2B2ZBPR=$HCfNS&$z$=;WM?klLmk$ql07{o^ffnqCJpel+GYP3A zeddqiRReiGt>QmVh!#oEiu{;&R#$y+SDhS1|7Oo3L2tNdqn)=m{%bfy$X~nPfFj3z zE4Nna1F`YMWH?k>19BDHjs>11L-1*523gV2PWm@oX2v|7%T8b z8npO$4jOX>w`$p#gT|=hmJUyN%fL235OgsALv_gi=qgCm!`Y$exE~pcj{D)b==d+t zb~{Lc?(7D4lC3-AVSj5o$;@ZM(d?$SBXDSV)~gLY42J(mVfxo;>w0#osw4h(wmcAT zXTMA`z}E2?%K*F3OhW*!af3jwSa_F#!}cY>U)4C=a;J%lIoss@DzAC1S**rcAjP*c zKu}#jfr`SSvk#Cqt;5>-@4WY}KmOZ+j-FOyoee2~wdtUS?aabC!utZQsqJ8xg761} z;*fwlySwV<<_ex02)fiR&ZpHU>ifcHB9|5V@=`0!~@tKJt&o63Rz z%;pE`|4s*xD-fR-oKn@N_?s}tee{5%;AL_6u#nq7%F`D9)!*`$wL3d2&7G|<56tH+ zp7A3!2!BF13(s)ZD)q9)J6mx}a^uF&vYP#E%`UWXJE}Gcm>omwoTTX!%_ffVa^AvW zOQ><%3ul|(TDajV9wGw;HN)HTyy0 zQ0uLX=3;iqpskeVb=74_!$XHw+k74Qill4(T?XwE@2aGsZDZ`jEu>)bYmy!gFJ!12 zt-I0tN6CX#{7f`)sLRk%KgTI-YYbh~Q{N`?**V(6^#p--zk=*zEL`8>L&;Iqu?DU$ zuA<~fk27d}iIpTre7uD#Gm_+pPyD%?ccX0@7b4oM1WVb5g=nT1qsi3@Ft`*RA_(TWs>WeV=Yi z6c2?(8^-6`QVUlB6Y_1D#Jiexbq?va+@O`FBseDL!;&6eQzIgYjqnNy!}HEE?^zC{ zR~obwgylf`5lOe*?zhVOTFY`Eyh_6TBdht~#>S)Swpzj+a%$#e#+KJexV<8Vd?zx( z>ypaW)Tpw-o0ytf@X}!8%C?z==z(h=z4x^L;hx|AgVQZpP(2k8>k0xEr7eMgOG0@A zxEFA1a@bEhT>H5HZ(BGFD`Z@OCwqGxhI{{>OEJ8xk#~gU?)em<#k_6`_xrsNxL=1c z+4Y25{C0)IxMWv7;m*Dny*t2igW*4#=F-1zk(gN2t$E~8Fjc`3Hgmy2+CI%YQ?c8m zyTp10=K_I-D?S=*R)B!H3XV8S;gangG9NweW?X)4#@Y0{DWWdGwjlCeM4)YXfwTqP zcpxIMewN5kS`ns*x)gjfBJW28p0I+)wzIgp1q0$xg7j4tf&p|Ds6e zA6)Duo_4`u9Zs$X>%;8f!n4`Cg@>JnWyk3fG2cwmz4L8`;?pTAiVssn6dvYiC_L;U z;cqFUwP-E~iVi#fW7eJXo@&RhfK~Z1yb-P4!z+X7Z}gk{;qUP706utXKTCou+wd^S z{{jUEu`D+Uw7EQ_V<}Z+y1c<@#|aB zCjYw^zSduYFRO+A;l*e6{rSFuzLJyi zcz=KK`K_I$r^8`58?14!w+1}yIRGz$gC|c1^FL%2|0AdlPyO=s9oMNi1Q&j=y;0Xu zK=$8tcX&k5Jq3#k830B{z)u+?fJ?415%9Cb2;hWfYy|vFJOVh=7#9IQ_YMH9rN&3V z&$a_V%cltu@GG(a(1K}V1pFc_0JKD!6ajxB!UMc0nj8VYAol=FLqUrv5eRE=Pr%$0 zh^Yx7Z3%N^Af_dRFeXlnfta2U!kRc62IBsN5az@wFc32mLf8|h>OjnlMC%{^;Kp#L z3_jxr$ZXs~$FbAZI~WFgia-9r-Bk73>!~x+aA}e*;6(~rolC94%~jPh_24s_!qvsK zI^btj>Oi>9j@_qC`F%|441bG79S9pcWmEp9i#j80l$B?Md-(Ez-_fO-f}C(efIOwC zPW3c8+Q3m#z4IUM_~U?my$`|(i^yXsX{~~R;|n;Cr)1G}K47u1 zY*ehz8Nc$RX6fS16U_GCaqoS1-SGz&nVR=W6i#V^ETO9NB%cBwnQO??^8uTTF05;& z_~u|LN}FW|MKo`B(#<#Fi{O;b@N^-UtS$PC=AtvWhHW(@vfAg{T-$W}*u1uAD?Z;3 z4%==tZ_&K%_i3itSJ196X2DbFCu(;`Lc&Yt^~H@LO&zZG?MzU3`Mim`Ew0Zb=sZ}#^g_oXm&A#Yb;Si&ESv^OQ{=SR+v4#g1LFHt{J z%2AB1w^CGHX>)C2NWGncC@J1^&h=uN!s%T>`-xU20L9aLf($dR45ffNAW@OW+&@hM z4@y*cnNarf`w|t^iBOKULn+!>>uDe8ZS5Fg7=a`0gA@mo-F(XcT=*=o8*~F!J|a$$ zcMeb(S1LbDQGA_?mcvElCt-qDt-z~x2Gid($#XyX8B`qq-4w$-j-!6raUSa%5`G#Z z`Y^_IyD2%E+f>#ZhOLdo#)_G=DITxwwo;BqX`9RX{3+G|(fkZg7%gk6fQh58Ee;*$ zF}DQZk+uY&@wMzYXyHfIGAtcSksIv8HV@W-!Qj@QxiD;&H^*3m=3s;@X$6PHGGUUz zuo0FFfsIf%@bN`45g;M68wE!;#+CKxMz%5pQ^_x{OnDIS%dA4cFSkqpMyy5>V7+a? z`1P6D1q$hxX@x*RSqV88o-r?M!7orvAdEE)6p15D128Ni&F*kC!AnX%@(|O1&%O8Y z{##tj`$0ds6*lTGc#)rR{wAj5=n9m@`Eko}bRo*({6-$f;X69UTAa9*hLfCe7UySh zu06aXH{Rm>yxehkYi|sGCoC|{I4%w!lcey zjmdDyxM7<LZch}vVVE#c@ z7i>5sTr3bj>2(O^)e?dDHJL*&rIrfB&xaj?*|ba`eje-)Or+%k@z)$3f;sfCK>RAj zA(%cZ1magG4#B(HD+S`Oc3!5@n2^O_VXob=*ST{gk1soiJ@Eg?@^q!*E^N(oeB< zdL_6}IheIUlbbA-v!Cv9SD>7 z>~=5yf5W@I00n=>ySlU<0CnHJ4jaJ_!r=Fd{`{wb&O7eR z^KX9(ABD_Gv><%z2b!dtroH#v`;T|{TRcf)pG2hlo_qe-c8A=}gzX%SPz_|d`@Xy@ z975nDK)x$R2JGf=EcqNSIS_8&>J2Ti(9UJyR&6-!d*DTlKF)#^o-X9XsD_W?fEIm! zyz^f8&e+}mhAf93fqMye{onNIv0QU>$2sF1%i3tj^9D;_L&}>)gI@4P>Vv!VbU&NE zD`(spZzQs1fLujq=lpiLZk8lPGmZHR?}G-RI#z-@RR7v+3Oc!;&aK@xa-iwH|1-A_ zntet%+$;~HrDul2E%Gp0cUCw&R363%or9$Z1%vJf!+%s`=wGNV?)NB`Gp#%V5^+q* z10YMmDIf+~b}`A-R%^1AUJ?$QN-qtEO{JHG!=}>9!{M8xO>lbma5#LkJd9Jj72)tL z@-R;8R))jBkcV+f_eePWOL-WlbF0GPrXlh;&gE9e<0@Ei9=9eQSBAqm+}e0tSq|rK z>*8@`I-I+$kH?kmaNhQ4Jg$s~bGFBPyn*Kj!+#iW^bc%1!f>O2fHMKz>Y8e{BV=1R ztQ5tx*d7imJuxkw4u_SRm=-(2VWlNT$j)$BDTxvCOgL;t$g|klv=;_>5m$=5lOk@u(uyYKpw7+TS1 zp9v9gpeq;#RJT^`&mim)3(uE{G_~K}@rOGHnr{9-?h?{q-Tg{|EzJrwlLH3R z-{b}NlPjn!RMNArljuO&#(^G9De4wQznn+}pH=JZGuFvhBqJ7bDDYJwFg7(9{~~eu zhfG@P%gI@AxCsTMC)+8FTYGPJ0n`?Lq}J2_O=2?rH3t|pHv^yW!{+MM*4|oASKWOS zZLs)%Y*_sYTFEAq^yK?Y-y(d#vbn;4y`cYFKBnM zCoBK%KKNK_m_6qt)~Y35g02qy>g{0u2jvJqI$tOKI$wJ>0=_%cZ4Jp#t;2@`;ggBb zp!^65i@G*oa2@!b`|dPBtjX)Vq|oGG_>W|ye_j8+D<_>i#Lc5*o2g6sLVDTy;;9_# z6OT7ws%*)Tey}x6mz@gEbtwDRoa?=(2i7!g_xOim9f|&Ufk?`zycu-su5i#u+ZVlk z@Z_R=#j0RtDjc93-A7%}47YIM^=86YRyjn+`D3kxjT}xPtCeE}(3eHqal32pJ@B)( z$#H?z?)&rae=kY8-F`xlov;*?Al+?0DZtkD+a*UkpiT)6wxHriIsf!0_>!kQf$q(p z)+cn_^N)AkeaGGS)z(ZmdRgihf^UZp1PG4alzK*RwR?Vl-~V;Tz3?ey)h@j*^)m6e zV|<|ctM-0BPPpoT-*JLJ7~fZN&_`Vg^8SFUIp{C_MG)`DV+fD>IgMY~b!U(4xe4#Z z^P9y-CtRl#kTIMPk4dn;5hh2zADeJJ{X!4i0_VCNmvEf|H!a;%|ha*JdPGzu0-nia8b`H)!)bxJWc2cIE8-{QN1Ftm&(K7#9^Azy`njMEwn3y`JoSfzhN@v)Kq z-gbBtBJ>BwFFdak;->f@y!MRmYUoBWev1!6SQH=ZEI9_@S$HC5tG}SE1;V3E;&G2) z0!sA4hAHfDY+U5s$nQb=|KiA>B5aXu%cX^n4;E_Dz@5dmg%gVpmIV;n4o&wcB?>&J zQ19`#S6yyWdEtusxQBH0a}=iL#z4v1=O9eXCjz7@pQErsJ{c%g_n4wWwJA`t>M=y) z;^qLUn#U9ka$7y6Djq<77}(~aT6h*S+KS3Mh`z%^s@PF?Jo4-ekSuisL0iz$Gagcf zjv(HN_N<3gnInkzo;~NGO0}BTX@qd(gzk2Eh{BkzTyR+Y?7H3Qp{DH6i|L`}?9g7H zmFgvInBUyC%Lw-dHuw9aMu`I4QiRtQqPh2^9;))q=(DoFsf0#rOgbjcmQWGCVy!Tg?6Jx-$`S4LAT=zz0LG z|JildwWQw|gYS!7_h)=N7d=Lr7EWGlVAULb9RjsFypv*hKR#JefjvVG%^$`Z3uISW zQRj7*VOxXRYB%5xn0G?#trU+{q1K_}m=K@Bzk)w^JI!u=t@@YT^@c zJ0n7ZiH`_FNa_8rx)R?eFOO2&Krl~SBnPVbDDSm?w)%G+~@7u@45T;cl{eU z+q>O{F^QVxu2j)cXZWS z+we*$mC*S6N-zByJUH{`5N2=%?cV!_|8byx*FW9~&#K;NL>{huC}QvU!=LXYfMOS4 zxx=QpT}-(~)Z`Qy4#}2Myj&V422EEa40S%Tz{NLyI#9 z!AloQBy8r6XAQ!43zTu(@9aVNih>dj9#Fz==M2J^D3x*C?_A`{^u=$;LwoZE@r#p6 zS{%x@et^lcHivTG4-OiRFH0(Gk~^PIU|HP23%XIthX&z8A|(yp#4;{GuFN_&v4jf; z!N^_K-p$zi8$_dLm+(LoC>tnwW|wj3G6HbS;ln)CJCx!bai3J_%{no+}`aV|%|SX%Da6f(bWrx|g=d5NBxOPO%o09H znk3n-Kf2+CHe( zffG3jL^*8J*Iq&49fR|JYLUwCgVe_S?xFBmX&8S zK6upP>88$e86WDs#Sg`+aL;Fa2n3723FUtw<3l`H{LLu;u8a?1Ve#}(=WgW7%)(Lj zB4a_h1m#h#2WZJ*5kQpT5=eJGiIZ^oCIeJGjz<%};g`%p6bD}(U0r>=l$L9qqR!q5S^ZFp3=~s(MS2y1n)aQqa^!7Jx0pKKla}e&&EtCr&EFSxbf_F7L(w_r| z-r_^>m@PNr58X&P26_SWHZk}xn#J(vJ>DS(V#i{fdEVnSLfaj8|3lM&*FIe~Bzb)x zVJpRO6TRBvV1%2C*&%eZ^Zm%Sl(3Wxhax+)gr%?cd@!h^?be?5;ZFb5U+|eLS}B1k zk713(+neyuK>gqU@y?Dre}Ciu^tU(SZ|O{6jw6FlHfV+u0hklW3^f@Jeqc@_gHJZ- zb~xaHIfV>9KB5_}Ex?>c2A?0%4A&E2zCeZ^q}GsIivV?oC|k9rpxc*3*~&Eq?Y_db z1_*^Kj>M3D0Rp{!P0I{GXtj|rVf6vfH?+n8h?W`&6qX(Uouvf^Kro$1I}6JWV9wFv z!eoMG=iR~rC|Y5pZ6!+%Xzg3KuqY%$o8R%m!UV&L16sVm>xv>SM8ri}RsaU8hE%?= z*nqaarzM5Sged-jmJ`6hY9VbWEHa>-OSF_Qnb6K*%LAa`pVa#JTVE6>BZGxgGa*!_+<-+0 z7^4RHcBbBdO9EhYDu=$NVLSLVoNk8~2_WF!)=q-h;?sAZR88!hC9Hz|T${?EY6Z>@nZN zL)qEBs|II>z87R?qu)``24{yrSeTuSW8hCXJB*2ova>Oqe!|%yycTC?W0?JfvqRV| z$GOqOOhW8v)Jv6VN#sswC>Ym+2h{89xn>X92@MFIq_OA^8_Q-D}?1Fc4Y;Z;dOrOOl` zSKrWwqY*4g62>i1;P9FoVC?|MaRre8enA1m+8b!HPxF854`1%Xi-Cksep~haU6-7Q zV^d@*X;38zmaN?u!M2v}mw3sLQwFIcSA)big5KbIwp6C}A zaN=V(@Dc(}a%+i1#AI~==w9^eKnHA&t^%EGjdr`k@oAXXi0J|d{&N&>6{c5GzDbAM ztNhy2>^N=SeE$ZVLBa9v{*IbE9Ns=j#34`gcNhe2L^|w=_L0N=yC7m4c>UvpK-Aha zfmb|^c%pwqhrhEF+MwM>9|fXY2}<86{Wt;ii(6@P(kCf`LlD|DbVECnj;094Qijli z@$(EBp&(jLAIl*OuB;`J=XefbAY~9qbRvhad}I(Ucu(dK*7Xb`!B6Foe_KE>04;G( z=a7G2K!E7Qi(llBe`7#^$RS^PsG|+%_NhF4$>A&mwd#NsIJisoTp+B#!QeX|2#6g2 zd8Hr+T{!qQAeE8BZAq@)fJ==IcqyHKIf`q-z1eltf5gY(V|uwJ?)X@Dyrtmy1b2LB z!STuN_)P`Jr@7-d7aX7Aj>CJ=O!;QJc?G6@tpvZztJWyo9 zfg(%3<$)qgzUzRNB1<0hK#?U6d!WdYA9|q3 zlAm~>$daFVpvaQPJy2xHQywU?S^?avH*}CQNIsPfithT)CD*a=HN5-J!S9{{%}qh*R(P zt++?5aNrpej|ORzXSK%jVHmmEVT)frw(%bB2?>GMiqg@KU+X+E5cU2p-3ZQ`CPkzo z=S{5YglqeaAMInec&8P)hdc-0gf_ax zdn$-6@ECjpL}4TwVG9#XOGmO1wZKUPgA-ElKbxMWFcC<2D57TH(#`zg{&S6xo%Q%QsvuBiVy&!$!^39wa6R9yQ~{CtUzme=pqMgwJ}FF_%qeYsd0NWxu z44&z?ECkO0z^f2)&eollX-^B%RGt<;I|S+1QJLXs1+-I;eleAiG(0>j$c`@g;2lOL z{sE<))37N6wfww>{c(*C*!UieH{WE+LJPc?G=7tO&oWz^g6Nfq_d~E*k-@i_UlpJkZan_ICQ++Z9tdBT zsO48im=l62lkQpEIg?0}J z&~yl+2PJAa1ji+4^?ivN0^rC5=wXSLI^+X`E^hmXK^qQn+gd*~Xu~0H7sy8jZ8^l* z`Dn!9K9X6GVY?O@?BquD~s4q^K zlNN3m+u7uF#9_><8Q(;w2@!~WCL@1cw=7L_B4EGH*q-5f9)TN*$r|4%)bI*T@}S+b z8rE(>L!h0{X;?XhXL|sj*RUEfdBz9ug$xFx;W{DxLS{AukuVq4DPTV{A-%nS$j%^p zxTRiWuE7^(YFddNIu2&W7FRw603=%|=9!m7@Ba8ib;RA6Iady{ierUAz)f>Ux(rT`0w;M5$H;ZN?TD4U*xy?yQ7 zeeL4q3ak*}_vd)_y;|>qD8-DN*3*03Qwx7U;F%JYb8-9t52Lek6k|cg1=H}#0uz2^tl(N$aG~0tpu& zOd)C6@p-^l@o=Fi)f_Sj`aYJRD5Z%)E&+Nxpsc!yLL38nB0&pVh0p=?WI$PYt5r;T zKu-mf)xx{ic!ex#Mb!bw(+P?FYtq;KF9OL*X_7J%+B}nxcAI{D_%e{Jl4_HS7_|9S zAiz?{a6zMSJ-ef_OPI40{Ag|`*q zn6XzC-d=!H+Fnz5M*&Vg{4vL2Qr~3boR?$%6PyY}%fMzh8|T~{pX0E9tDtqx&j~q> zTjb2vU5-x7ao!1Mp5UToW_|)V3ZA5{tIP(sQqZpQI7$JR;bC)h0Zw7CTH!54I9B&H zIqtr5YzV`)S)1d$PuFVSSDSVD3Al0Az(aa$$Z^~st8u0=@iyi-+^Nts*A%3m$Z6Qo zp=hpCl+>GZ8tgt);h1~yhpr~(I7E%@CKm)-a-0llI*Q5x2){Ky0SsxiPc-WKT#keE zHx)^b>HWOIZ!W+oyPboYVNcr^4y$dJqVJf6n-@wn}dmzXa4&@i&vg9XiU>V=0FZvKt)6)$x?; z?1qoK7*^XQ;U$SQsv*94&PMn2bHH27aHyu*nUcuCZtr`#)&9 z{%eaz2ZJb=G+(uNaxn1Mn1_KAeSqVp)i|_`!{(0}jH6}&jLsPKpZb9ZTLu`sY}874 zc@e;)C2ZORq(B|VNVvmpneu6D2IFXH!VtvJ@&pM-k0*}A2nKj^2IEL+w#kzuyPwWr9t{l~X$;dH8IEJ2hKWUZcLw7~s9|iElJ-Rj-)zH_w0k6c ziw#rKzLdc@23oKyd3!UMMnHomFM@_IE80+z{Rs3c84aVKY}o}8+U}!_#j#Jq$k~1(8gB}_-=O7XZj3Ol4KoZ{Uh8HW=WVkLy7U&zZ2JUT9*p@p_6fE~SO(|X zC+HhCs0D63nrEM&?rV_NSUw-HPf)jR=mdOu+k^HA>i!L#fM08wZ=axU;?N2B)r*Jh z6V#m?IsqNGz&;^-gfE@$4jF>qcv)C*h8=kL)t5yDXV}ih@4zfBIK%cfZlGFHaE9$} z{8r4;f-`J?+BOuc}Umw_6ep)r0%2k31%$N+dnqgCzzo?CVI?1!HfiYmHy-Q31;fk zQ#Tv!6U@}77ob03pJ1jwIqpgO1UvO<@7bn;Gt9uF4QQJS&M=)#o6w#rIK%WdZA9Br zaE9q_+KaZe;0)8>v>k0*!5OB*DV=wuXTbd!xcRPU6!`jjC=)w1Yo8Q4P~JB8nhLMu#p1jmkrvAD0u%1(64B^8K14sZ*C58G4*;*x0vyV z8!DjXH#BR-pPT>gGibxwIBkcv-!y2$+HS7A-=Ga^f5H)tdNa32rQhYZ??KL|gh z4{O?rKNnL+QkwT;m2I2*(8O`qk~R&k9YLUv>~rijJL~Xqa!OZot=STZ)|=4$Cpp_< zv9#a>cKm-%FDPlRcGK5E^Q>%fe}J2qb5{EDVq}s4t$YNPaAh=EqDJTeiff{&IckD5 zA(|#YyL+0QO_!+ID$UDgT``;| zQKNfT2_MW+otD@;Cfa-f8r}O8cu1nUdmqjVb5zZBsCVpskpOk~)H|Y!C91lo-Vt4z zqq59!?+7jvpz5A`M|8PFW%t}WqAPM#%)4Fh2(A>M?B4Z`=pzyp-MiiqT^-T(UU4O= z-TeVL|I&0{gjOWqov`Hju|8sU%0Ul)wpq>}kac37i1Po{4PP#Nn$9v+D&;9KOyuDWt0bIC1z!kU~U9 z;w^-88EF;^nmC-#IlFI~ID9Kevu~O>T*yeXQb0)uAukHh>>X-4px;Z>>K=+ZpqFyg z0C7M8@Uj4{?r}r`^om4{R&huH^jePU8bQMufIkY*=$^(iKu7&kw~`$;009TD-qqdH zfClK8990E^2U7sY3Q%{?qbZ={B&xdS;S|sbIV!6I_l{aLK@>fjL(u*j?V{-M91_NM zQM56Kgtc81ZDOdcR)v>e)_fG@TL*9nvN_|temRFV>8XtKD&`zU)Rv6%TIL)^)z*yj zie?-|*0zlEx@H_j*Y=F_(Uoyjr=HF@A7L3swQ5Jk`6x>{u2(xV&PQ6xam{)r<3hBh zAlI#DbI|e#N8NKdXt=~h-t#$V_{2ru3pr>w#YNz*95lS*qVUBO47DsOjS^yQ*pqQu zXA}^*moiSPjPfD3H{-O%C?0YzXPi=)#6#|tj8poOc*wn)aViQ)Jmg->I2DB?9&)c| zoQy&i54kroPDUY%hupr5Q&GtBA^2tvN{_IB2=328;Swhyf^X%Z@QD)|qH z7cfUNM%ou#1ERSw#tYj~$~(5sk(7)M{^pw}}8F`CZgpjS2nDW<;6L9cNJQe=IVgFd!0 zkmBp>9P|;EffQxmhqOG%Eq^MbT|!_oJxAPwiZ82nC< zhId>fUJ#_=9v6=n1!?%lMdkN7so!0JQeyaC{ipO1lgbEqi~+WgyW8LHrIxr6@>&jr zC2;au%pV2f&6m6ybJTy4bu-}Y<`9hL(E{-Xa|p)qIDz#4+NYa?P^0k*67t}Dc7lS0 zL|DovDoDtL*YPJQ$ontRZL)&A>l{QMh*pqKD+l4e;;9PqDdiyCOFT_MKAjwd#+0?(Uh<|M)Z{hX9H0%F4+uge0hP`NC6il#s^)yjV&&okh5GWH5dv{*s@ z?F$T%NJ|vtU**jZ-7H$FAphJBLnQd}1geY(FX3f^O8iPDdRqJ8HKO=+&T0jIc7mr> znI~J1Bse}VSb}4=u1auz;IiZdEI6y>3Ge~ALV+-2*2)v$%MV2-klof5oDkwCQ<|K% zzUUMmPT48s!pDkE>Fp~NkD}=Dq7&g=8uhN$?!vQ4(v3xDcf!l63Qr}wJeiz|Pu&)q zk#0Y1GI8686pEYe6HF6QWNx)jXk@@`_GyjGM>1}=&n-0`Sz||jVsX&IJuV2^ohEJ? zkLOp<*e6)V<9XKe_6d!Q_kw*|YCNk?7IIhPlYMPX6NUxeZJ%6bdbZ`B{KVq)hkFQM z`j<@HG(FEl_u3~|X5i`QtM&#?Y0QNWzm+U-JJVvlQ#_QX5R0aJZWH@@Ea%;h9 zXahX$!~C@72ECzLc-lwSX@$L!YIxew>fxIHR}kwqAV5S124+IBA@8TfOzxj;>m3 zTeqJF`p%*kqAihmhT&Qma< z^DZPO;0p|__MM#&{~^I4shYd$@ZlgUtDKGSoGZyW_>txQ{+iW`vk;y!>c8ZLG<<8c z9ool_i~2RNzm^8ikpMVagFf;CNRK;>(V!1H5Aw54V>Re2k^|iX1QRqkWFRbKe50JQ z6HV5yW+ID=_DLq|7d4T^)xczv^=q5R;u3y}$@BOKv>8ty7n!WI86-QjyVzu<&G>cjOH5YU zjGyIOuGy9%n>}o@!e&?jLEaT6D{O|957?C^D{O{4^niWDWQEPJJ_5VSWQEP}?Yh9O zHd$daH@jMwvM?8cn(Hq%#UR6)yIzC-dQ$+Y=02)Hf344hTyr;Q&|mL!psTqXH8`}$ zuTPk)@GF=JYwnXKEBp#9*4#}dEBp#9*4)h|EBp#9*4(E|R`?ZIthrlER`?ZIthw7Y zdsC6ko;F!!Gpe~eOjg;9YVJ;xRW_rV`;5sdn^Dbu)?}5<|3Qz zHd$#iuDLIoth5=|+&v~MZN@eCC6kpl$9U(@U@MK*igWQEOK z&3(gUh0R>e-Dk4GX0GPGX|lp*uIBDHSz$9*bKf#qVKY~A-%Z&Ts=59ihOdx3&wWpW z{ys(kspcNgV7QmzNiMnv4N}aVUDZ9T$zK$C_5+g@o`uSURriR=3eN(IRrf=a6`lna ztL{f8D?AG@SOK_PNO_n^Dz0X0pm=RCSM=tg;zZ z-4iCOY(`c0q{%9qQPn+VvdU&ubEuDsva zurwT(-m^9=EyuO@oDECUaq<1mfD2bv7i?IV&XwPbHY`l%>hJe9EKKJL@DDaDOy?@_ zB^wr|b0zq)4GYt`8hkBSr+Vc}wcu@FzRVc}wcY1@De3l{^7rFgOp3l{@S+X!q} zxENq8#?uYBa6Ndx4J*@8Ii6v|%5+qZXWFnb9TntRHmpoX6?wJ|E7MU)o@2wxbX1cc zFyO)^*Ml}JO~*BPz70#$aZP^6hNbDaCNHpIX*#aS3vF1Mj%)HF8gL{e}H}`&?8#A2ik{M;dRYQ`amBD zG<;dOt8JiO>Fuc%wtZ00wc9Hra~OSze?XA;1&lXXy)&JXeA|HNqkq*qqN{zNt5$)1 zE)@{NUy^hvOWcW9j6PMUx|_s8pf^9$uwRx$OCyfH{9MESvVIPuACGC+58pYA+hC4s z*pJ{DOvAtl4f{bngJ~EzsbPOvEQ6`CpVF|uG?u}%!Q-@s{cq>YC%W4AwLu$Rbj9x*gErjg3fftNHvEW50CJx*XzfT} z6V4m7_9TjpZGUUf+Le^MK!0b@+Lx5OKwr?beoq#Ojgnk6Xyr>18|m*2TKSSo4$was zwDKjF9H1{5wDcv5jgnk8Xz5E98|fBL5QoTJ;Jz_-I*w~_)sUZEugeu9RD5SRq;hn5=} zR`EnI7WhdTR^dc27Wl~;meE8k75FI{mcc|Y75J$dma)Vlqm`#=ScVddjPP^~i%4=J zBYeMxMIbqm5uTypk^(=|pe-LlG(p?54BBuaCIQg14chP`CIQfM4BBubCIQfM4chP{ zCIQg%3|c#qau?_a3|f1Vau?_a4O+XBau?|N2CaQbxeN3|nl35u3k+KMl1mP>z0jbQ zFS+CZy~v=IFS+CZz1X0oFJpmUV$jl;u2MqVOAT83(p5^Jml?G5C5w%5vfQABFOvfQ zut5u7I+^wEnb(Yp436zr(_{S1F;P^_>P@Qud#*aOG95M9})P z7OuP+3jcE!uDr^%2wH#M!lhSZ>3_k(rB_`Mh1Pdjxb$i){<|$)dX+`Tn0e8{g;$gE zzsJIbSDonC`b!30G63wgaN$)aI=23*!`op5fGK|I2=JO_OGbd#4O+-S6^TcHHw;<@ z7x6d(>@#Q;TSVgs@TNh_&?1;dfc*w7Ba3Jn0p2ob8CWbfTKjE-mT|>mBmIs+i?DKH zBmJ&Hi>Pv9BmJI1my7@hEZp)Ygch`Z(83LOx)I=g3pf0USplsdvT(zpZUi`N;f6;s zE1>lcEL^+Pj{rw3T>F#~8e0F*!nITV2=I}GYp+s5L+c+Kc*zLxiG?e#axH?^k6O6$ zY8U}NwQ%KCu0_!LXBIBK8b^T7EnIrll~HK@n1xHP#u4DSg-frp=om96EL?as839gO zxbUhI9a}$T;3Xr#X$u!#b)sYIUplaE5tsjO zG^_%PaIF4kHLSvlU@ZRUG%SOPSgQT!H7rAlU@HCJYFGvoi;PzOPQx;sSY(7RXjlZ3 z6B*%)8Wy4CL`L{~4VP5?9}L>^Aw(0jeaWB=C%T${*`N(CVj4i(R}9*4qpSE=4chP{ zCIPg4&7id-eZBwDptUC{d!g-7|BSEB#^f4k(ysK?ezZYrUsCQu+ha6cQtQVWwDKhv z9cX);K`UQ|NqsYWTAD3L z6&uJ=cFhr_hzsV3d?1jpZw=&>F@X(2|De%>f|T(<9JM)LkTMoXA0i(Tq=m;h26=Yp6QQ@sb*2e-0yLmuX zU3P=4k4sc|E0J}hM2nN^35g1CC9-Y~C_KM_vMO%{S)Y=q@Kz%07Ktiv1-ovQsPI-I z>(c>+=LS$#<*gv=4v7kHC9>`ms4T2p)F=&~k*M%iBJ1=2tk&K((B4113%B=-=qmgi zG8U{C5*Xh;(A$@9!C`4>UE7k=w`M5VoMEe)vYCMwA1w6Y(_hcE!;A;ch@@e>F_;w2m7OqM;oB*K$_)!BF`!`rk zqCYigOB9y;GlRAyVZlE)XfdvkB)rA;m_b`Z3u}4YppDUG2ye1IVbE%T0adSa(``E47-AD@-8p&KC)daejN{H#v*RgRKMm6|ptQh+220(%;ux`E{2s zJp6Vry4U%2j&%U)nsg9e;`k;)@Q$(GDE*90k2 zggI(+^gqWbLTwlhp*@wJ&eq}GIE>~2M4`#Mn8zf1+wfW`kA51P@WX4jmh$MWaS2}= z0h@=r3#6gZV0=RN^!0YZ0Al0px(NwRL(&MF=6WzOp`pIxhHV??3B#lW_nKlS6|r3b zjS1qQLnkMvc;gqHf&&|zG9@|1+rQ`(9OvPbsmUp9(xMYwL7A4E;Khn58zUICzz(J- zyqC%1Q3d4hPk3)Bi%0p9pG|ywCxmEMYkT{Mu0HD{&>Ww0BHK~MVr3-HB}Z0jtvgbTZ+5gra{)7b?s(fawITNdfA-VwEW zYhBzE0KfTwTb{A~{t1*A$v)B^j$m(JyB|*?hmxYxRzz+%4?il)Nlt=SMi@q*w%`1H zr7D+JBq+hF2_A;Aj$=8@hRsrp;kzcHoqh0Rh=?)LiN#$T$&O0f@LMY*M1d#0n0=Jk z4isQmYj-`g>IQxsrZ+^S?e?&4Nv02vMWAD3y10xsQ8tUkPS-6-f;p_+hK!aO|#Yk+3ZYQ*rYEDl-L}Ts-Zju_^ z_0RDoBm-SNFo0I=Suq-IcZwNfJXjx{`eKTy0UjWJ3UN=0iP4=PE?O_8m^Jg|Z^7(M zF>A`ppM!Zh#jLq5EEhn9S5nNH6&hUlHijx_qo#C_MRK{s<_^ddcaoQa|E567$?GK+7 zUols$!{}Ns87#ieILjZL7vE%@;SZM>XEV<5hs%s}8E5#zrN;S;GyLIlL4L?V%Ojj2mvYc>iA#~oIcWIA<;ayBG@Rm+ z%EXK_yy7xtQpOohahWnX;|!m;Oqr5#+9f_yre>V>h|iR18CRSs(=$%{!)MC< z8CQ}iGjh=K2xrR795h_wGG$f{8a{EEGCKzir?^a+lY@p=T&B#;LG2cwDf4nr`^9I< z139Q20V-_jaaFNTJ#fmk&{+T8_lL=)w%jMaogfhJ3GHi1~8SZhp^;AL`esNi~C84xKd_HYWDD4TK zN!t=iyTIqr_Jq>5_u2DwLY3srjuf-3&l$5b#SHViTzMwN4Ewt*c{ari2e|xrF2xKF zxXgGy#k322PP~v}+6O)xcBPnhg3p89DW<*PGvM`q(b3ZiFITA!+}hP?nHQW2%g{Fh zR&Ouj@Z#6LzzwSxak$QZGjR1v5r+%?{ec7V47a*Wcq?Eip2^Wl|Lwq`cqT_n{dWR~ z;+Y)pWe6OIXM_{pCIT(q3mA%Lao}9w4g?OxvpDcBa0dg2;#nLg#ruH+@r*EbNpUD( zD4xN&tT-Gv6wlyXT6_>V6wlyXUK|M=h^N!X=f#HsL-91{6XT=6p?I3}nelPpP(01~ z)c7QDAf8HFk`A45G+-#6;z&B=J`Eg-r#O-hxz7TJ;wg@#L+MkH%vT8sVw$N=*Al-@Korv?smOejkSL}}QkglMkSL}}QlUAQkRYa&^5AmN=X?U9 zm=+062lCs5L@_NA+z#Y-35jA_Bsd<(3keBg8mW(g3E;&9L@^B#LlemF6B5NVNDNLO ze@I9a(;zWCfxMKEAf_$>ls*7nPCyh>laxR}UP(w4Qp)6rFRwjWfy=4RmQB_`bF?m=&e zSaD1~CLq-%$K>M@lU;I5J`u5kn0zuNWM?iWH)V|I$;ISTktvJGZ61T~1lTdTJrad6 z`E+CoV{%7i3S)9-WQt<)nTQm|QeARPek?KBCCB8^h!w=-rzs&jb20f@#)zI=Odg9&Sxlbv*iA(-c`6cxF?l*N zg)#X>WC~;QOk|2;^2>-6#^hI#DU8XlBU2cYXCqS_ljj5^edc2Fyu^gtTugo!vErD# zARyHx$K*wc$u2o2e~4H?OkPR}*_n&U%NZkjaxr-|GG#G2>R;mW4%Rp~7scf0NEF88 zn8*~y%aOD~QS2DIq&^F*zq=L{Baz=S8M0Cg*$XmZF$^C=!J+xgauy zF}W}@g)zA(GDR`DI3k5Hxg;`$F}XA{g)zB2G8~itbG}X-!Yl8G1tz`bqH=}AgyURP zJ`%Cws9Yr=)g?#eYKh4%IV#sitRO1arG)IvMdkX85k0x6+z^?vsNBd{ZwG!?82--9 z?sl7RicoVQv?W3viwNH2%O@Q9GlK6g4^AHCv_tHX3{^hY|3*K$F$@Z^beDO_8F zKTY_&$f*AYH3(d&D;Y_5xJL`pSC^c`OTc3UY2LM=-RxrpY27&C4ejFuY23STx4I_; z66_i-E@x8GmEnnj0}I(4T^*hjICPW^(k0@_0j$CI;a$B<`-LJ6)|nD8=(l#Ozs#C~ zP^kf&8o=9Hhu7uvROmq-VWtHRK6u|Amj7vkJjP59;B7^u8%JgY62ac#{^D%XW(E2O zA!ka`iXb=g%u=ioL!cA3J6o|v6oFdE&W-Hw*6yA@pNdgh|7`d?NgC3k39!`%6sx60 z#gKhav07SG4B7dL)lrX%A-f>3w?VLI*HW7ZE)1Z_QG3WObzCz%9oA>XDBtK=7O?g{ z{Vo#}j-KRN9ZLo8@ zRxuI{UPXXLSuIH;DsTdc>>9=DsK8kyvTGHqqXKgn+4UJ)hj(Xa1GsSC5YPg>Fg3Bw z#{_7o}kbnt0IeI<_^Vb zvm%QL^^9Q6R$DNmo|R;Qw8%cEShHQ4T|BQ?Q(78lcL~-ao7&N{yCrE$OQZ6OiZ!LB zfq9Q&O&KU>_6k&NtW6|1H7CGmh@)&33$ zTKEGVJ19v*T3=^;tl2VoZQlh4$RAj%Bs3`#D%Qrb%Tw>1((3F%b z>^X^Al5&APFHuWU2vzXZcR5;IUM~pHlGIh#ixM>?b;b32i5il++IlHRi%aWe0a}u} z%6dhjT2fzFuS!%)>g(!{Ia*v+NBy^SaRnx2R3vUTB=uEwv_!R}zNn6osFF0))Nwgl zTvEpiP)iyr>I8`@Nkc)MC{ZP8sHc;2R6g{8a{%}Q0X;>4N>WxH(Ww%ZlCn;SPLrsV zlyyS%{u~w0UC{W?lFksIl9ZLlHfKsyNa}P#be2Sgq)sP9=Ms8bUni^y;O|a&SDSCw z@6+Q~t~?mPW)J#Sb8tZbTRiA%Uk)w~;7||x(vySB2pm?27unSF3-s_hVZ6Mzf`D!S zx@}+;0kvP@!sk~_UYxK(!my$1gsXE-c>_US^{f%3H(J&vt$Ef8(pxPjaTH!BNK;OF z@x^*Udb?$9($KmgBQ36_f^qOz&e@vN2>iGpP0eXs-6%*?a~f8k5TvC!#5c(Kq#!Mg zAiROxoRNB{7;+2mEqyBIOwA#)p~WqNv^0l&1#+t(4b3rKf!roYLvzelAh!$B&>Ra8 zkUKI`4Lw8P1+2vF%sESQM?ND+tvOX6==)hgYR#$m0QsCCwdPb$fqY(&T63zBK<r4ge?Hn|9ruy_w4w^bsd3rYoEuFbKy_bWQ&Rm=hrl6P}pvtZ`y`N#G&Rm)f<)EcA z#26U+a1I(eyTbHA4jMYUx^yH54V_(C`X~jBi;uo6eVlWa)~+mlB1o;aFH1)SsrB|{ z=~F>!#eG@&Opsc0UzUz#q?EELRHoxOr!^17>4YFnP6<+J9;(!7 zK}yY8OboX(87caPyrw_EeVKDgb1t{o;#Y!{nzK4cel1ARJG`dL_x_C_h2~BjZ1b!j zh2~C7B)|1!3r;!pZ4Ot-zsoSCH;afDelFyo*&@w1FXo`snp?z5{(TM#rJ1AI<_|e2 zbao=5&X-fr>X<9}l?=0Wrb>P_2Th%+l3&X~t80EM+mAVD=?vZmRYv_QT9*H+itcMR zKMw=W25?LY8tu7CJ~qQlogs3ey>U5c=?sAj;P@OgbjG*^a6%3mGGf>QI57teKVxzM zI5`D1<_r0h46}5`6omGs=AhP@G7!LNIjD7}1O#w;4r-mLOaOR)4r*nnN&q-B1?6fY zmhf2_rgi380`1MtL8UX75&-AqpwgKO9)NRmQ0dI|4#0UiD0OBL(Jv3CpjbyF#e05+ zDVkDwtGuMGvTRU3o ze*cfV-s$!m@AeQ}X)T0a@(^5QEree25L{s`gkC48qdJff$%RBG)El0Hc~P?_k#aUW z@UP&7{jk{*_W3JAkX>;)d(cB|aM9Vu@Uq1F9;+8MhSl(JpkM=(*%;lt{2;@$H%U0W zba5mH%@*m>#fLelBN&>bO8Bt{N4AcrnC;QtkWVtqmXPY@(Ht~eq)Qi{d9bGycKjI2 z5bzpk{CS3%9dl7VmV;J{TvLzdpk*2^l_zpg=Qh4j8D%`>LD)BEMuV%9r#)Bc)xG-S z^M!{n{xs$*&l!(F{AtQpov#7~@ux7p-2)1IoneNNeQo+C2bGaS**Tkos_Rg9&U+B! zPhqsh15NyGhG_{&VFbU+K_ww+g5X6DV*JUD`N9Wc-)ETWm=#9wha8k0v%&~o%0byR zYl7hA9F+0Lnjm=9gA{+FK_?+{qi)3dR~w020r5qi_^+2U**8Dhz< zg>E$I`~iWPoxv0UuO&BCE&aD77Hs-DRyinHMTtx9%E8`!4bLFSO|X<|cm& zb*UticEhxQ>fggm_63ji*vOPt-eIkP5KAj@oG7&*(cch3fFA+gupCtr7?o)#|kXCAW zcEhJBQQjAbser%0E;#`jp}4yuVVEDK-5rQ(TRrR)ja{-qct#W#m3}QE6$3%7Ur&(mp{3XgD*Z-8 z+UiyRjhM)w+WP`iHH0Cx-;9VM45__8L9{TW^;;1E%Sc!A9VtTUzwQ`-|0F@-a*&8B z5b&Q#d~##GtA`$nijUJojnTG812G()kdckhC5ulZQq=^S_On3r^=lWRVLuN<(X+V6 z1JT~2dbt@(&xw@K=}e|SnK3G#$@ZrM(+VGdl`50%&jh6Xc4=9DPWQ`{P{P1e0R;Xk zW27)pRDn6`m}YpEKYZ*echR{78Lmu2)$)9TbZ7)U@LfQ9w0&v6p*(b8~AFG?RcK}$A+;X-?x*$?J-abJL$s@C zsF;vL(t`Z7#>5!1gC~+u#r)7+ihC=85$n?}ywV}|N z8Ig*ruDlwal_5%Gj<4A{BxU9Ro0CIQXb!QtIV1wet$rU!p?+a$_u9G#b4Cj8LUF#J zgyb$57bH}>D1Js$i>j35vohX#n9t~zyxo2mzwEN zrP}BL3=WN8a6A!_W&^>{crqd_27-aHDI!BPLSeBvAP^Kv77B`|JOZyP%`*bZB|3A9 z2ii110kPEspm3jTgMGa%BFze6Pj8P%i$d7XPe){^M4XqOA*2H9x#9jv&EyKkv*9R+ zDvqOHo=c85i{t2&=ab_t;y8Nbh2;3q{5ZK|S3KU=lOHEv><-84`B8Gji{WTnew4hh zmyWi#_rPi!v=j9fidzc^__Bax!37K}+$$0j6&Elx*J}yZ*WOgHJbOK-^cw)nwcnDM9PBv$-^npKw79S5y_Zn!?ak8sJk35JASFMS&w~<^ z@^exhO0d56W@UcPtHU{^%+INHB&US=-NT9>3P_6Ya_}RG3GrR6{a9kc{I1>}%`s_y zH*6nEsIK;={+fTYho3$V8PX0Bdt6~s2MBG<^b;BsS^$VCe<}xM`5QtPFHZ|dcS>>l zg~U{s6t`z2CJg85_LmZq(=@(4{dI;lYs>Mb^KTTUl;C(ft3jy-hurxb6qds)?O@(- z1tdFlA@`lcM3*k)E=WvR&V}4Xi3!WOn7b4(T<*5Wl;?_jSwK<&P!lWe6^RK20K;g!nG}XG=_&--Z9&9FyjE(LX<-y4qWG-QbG*kiw)65ZYLA7idsu z0U%b~ML8(y23#t~xLqtD-6_TG5{aoUDQ=faOc>6^?J|jpy5R!%;S3w9Eyopig~F5) z9B(T%DAnMQTa|;ta<1a87Le@Jh1?p6i7s8pt(BOtoC~>i5)+nlF}J~CusDY)u3T1f zC4DSo#3J97(Z@4JU+$-X+?YeUB@D(VQm9!;L_zjs#;A5E!Zu}$mWUPrn{!CDMC*X3 zQm92r#N}>F#>jTK)@{ugB@u_-wj7czaoBB7p`k(|7fw%SjA+Nj(vFPj6_5*&XBq0P z5449jB)K^t+?Ar+Qba)34XDg>#EV3c|V7QVlKH3<&e+}AguO>b4aKL5GL0LIV5xgk+9Mq$sxbdIcP`e^8pgr5pZT9ec8^GNm8YF(l~&cb6EQxyy+ z;ql0{$y=Z<2T!Dkk7}pAOTm*7Y3&o4>`M8mi1bLr<>(ngIv{&G+SILXdaU`&lu-8L zVEig$r1f~d{B_3Iq4-V4*pYZPW9&dYpD=!Zrn4UIwueytHYJo+92MVXjMR!_;zGtq ztvDtwW{lK|W8(Xa5n8#RxXcW^TNHO)wB@no%FDRFsn&7-L z>(KOYxV<+&Ocm(x;5gg{2(D6T_c7K zpt<3P+!?N=1s?0RG1uB+!eET#)`|wpWgg?!im(-gf$h09_#v0gb-K!9+*%R#_}_Gm z?6`H{_UgdxmEV{RJ;_8re*ZSJH{DR&lpGCdmPE_u^tey4BpRPekNfmWqH!A^uXe-m zFWm{6f;)FG0e1=dM-0ye#Bp?II9!#7FSH}S_ZDpWrFd{ic9cfwz454_ z*vs*#q1G$$sIM1JX-tAw<56EJ_$cMTYw@Tbf%zyU!0Yj-AA0#Hjl288QPA3t2Yj4{ z+_&8E&g#HOr*RmQ$s}(lfVW8?$Sm(9gttp1(B|(Zgttv3ut>a@5Z*qKKocEE2ydf6 zkeLo9gtt>5$W-qqgtt{7$XtgLqT|-OD9J;b$Yvi1NSTGGBZ88q;UVdxNL5D483>O^ zM;U>52O_V4WdGBD(+OJu2HJ2&+ynCuzn#GEa)jCie=s$^NXg;9E+ElkU#4XJH-5sB zH;EU0zY<_52|0>B{#v5mA~}lAKAWN=yZpYI3~a$s|C|8r?kPOZOVsS1;^eyo?SwtH zwxK9sE+lB%aCq6P$+E96ChW-8u6lo;FL0@1?DX$bw%Xcnz2O(HjGz&INLgqXwp_YY zPTS>a$)%L7TEhCdNeV)v7V0LhR}vIn&uWV5Ca_l%w6*q|-gdNu7S_#WuO)OlS-0wo zRMZSvw8H5B-lqY)fxR>h#-wCv8jMTHvNRYkKsyd;bv8kwW*pKQZBmMsrNLwY+TBwc zOp&PBJ*C041Z|K8(-X8&8r+|-jnZI7$~H)YnJL>K4Q8cmSsKhv!SXbilb{XKU~Ymo zPJ?*~-7pR22N=FEP?`o0rDSOuEKJF=G*~1+I}Rxg7E9EOLrR0CDO#2W%LHh5Pie4R zqGtD$1}hS@K^m+~&_-$SNWwNsgHwD(_meKHb{f@3EDUf z9!=ZWgB=OlC=GTdY@;-ICS@C>!LupbAPt^N*|IcvJ_XCu;DrQjkOsRFv~e2j zPUwbd@REb^gGQ|#9q>L!J=uck6Rv&tD%6e}T1mXDVKZ{*#`-H7_N%}+jl)?St`c6= zuwM}7Fs>6`&*5R+=1PHXTE3xBTRlpPeHu2^qr`Yq!=`$)Uf8c;Q$1QjzMa4w@O*g9 z@E$&B4VHLEp{9Dg5P4U_mU_Grc~8TZdb|`lpkYfrUW>e+z-_~8_2E^$bj2H|sNW&Y z8Vcgt1?j^Etu@5u3(_ALv{n&UFi0OUXsx4Pm3)-Y?cKM>3yUF`NkeS-V})uBNkN1^ z(XdjG^h5ZlhLwJ#9>Sk$SgA+aA^dp)Lxgs>$_Qoc5Iv?)r5*nf7Gz09@p^E{{vrjsl!IM zMm2nlW(@@?O+ei>HKaTNdV@i06@3kV%%HW7zJ_m1 z=ms_X359A6xekELPij~x$aMhVO&V7Eg&MwD!%DqS!?z@GgBre7p-Meh~%&BKJEYx$_A^bvshc>F=yA&#gNNV_Q z4GSTX8vde&rHx|^-=kq^<5QN1U zBY_*#@O=t3)q^;KsCZMumU<9J0PokZr5@Mtw=`_2$2I(&1a4Hr-_@+4Af*Y&{GLH; z4Jl86K48#VMPI`Y8no8Y*YHCL-JpgaR;bpH>j237frgcWTn7L?qG6?9sNo-KSg99k z_{Ry{poV{_)w4NLW64gXBTQoUHik0o$}8h%`%Qaz^~=F|xd z3-z3K2%mN^yoRme1@SL5E5%5v_!)y1awKK^OM{knj&=MigO-Mlh5Q>qmsRq!nzePL zQhv^$O&zJ0pEqbzM=Ivu8nme+Rr3oe-JqOb)U2r^#1urx_Xch02tft(4+d@N$QAvP zL0dXr}{xx3^q6}lH2b7MX=8Z||21ReI zW|fYy>WwpKsbegA;|*Hs80+2ygO)nR!Z#_U8&tl@nw2^xrEiKs3muc%H$Bn~FC^cu zSt&| zG-y*ts(lZobc5QrK(nTfT>BOpw5220zC{LY>BzNju|Zopa_w81(hX|gGRVJ z!l0Foq4u3LXr*JQeWwgs=@@F?7b)GK_MOqJ(lOS)FAZAi7;E2G1}$}rweM?#mO94T zcQ&OP)V_0?l{zN1@4P_^9h2I3f$4sD3B*7@ZZEbTV}de*TbwSYY~hx1+~4$lN)~Md z$GuILQm|~x_GJM|18}9If^YyEwd8nr%}q(%ah!y{o*eHK$8qZUMshqpspcBM zDd)Zf=nk`8251m_GXXjUKttF52y|9@`u!6f+yt##-|<9?t>nAOaZAbflH-<=2a@Ba zk_QvORPy}466Xb!h0H;ttVc|N<5XZm9w^4MQ!=JHm|Av_ir~LWS!u>1pGMp~_d@XQX#~OxlPXc~p z(WaZA!h-B)P2Tbo4{+y9-jK(=o#ed9Tb_a%3i5nw@`kH$fB^nGlQ(?jMzaehZ#c`1 zX%|i2@Rl3deh~byzU~fXo$z_wOBQW-%a4YaO_q(@hYRAj|@j zxBLWA3H(Bnw;Tmw3H&0HH{^GhAs3sx;VR52Xn%>x8@|G%0)FZLOWeE1Syg6t-n(c! zao*|7IFp`9Ceuks+D^1%GF8RZq&s8PsVb;gw?5}^>3;LhNi~$pGy*B0qZ8jAR76lz zL`6kZR8&;FAu1}~5ET^>5fv2`0Ra^i6z__&F3;Z2TI+fCuKv9LynF;}pZ#5Hujl!# zwVr)B=TwxBh=o-J{L&~NQ47lo_-hT1eKiLqI{?pbr9gMkMf~f z)Ixy2A<75wqgFK98>4)n7WY5!zdXtZYH6E#K~jSE$D({pC&)_R*G2i5P>`0uKOW^{N3aH4yOrY?Kexq7DN5#wZ`EMJ)vQ=c0V5 z7WEL|H%0kiyxjkQe?H0wYHWk2@Gn}v{TC*9u}ZxZfdj30 zsF(>a$8akZj}-B(G2AM}14aCm7;c5)aU%X|3^zk{p(FlU3^y{l&=KDj!;MNVbi`ke z;YK7EI^x?M-c+r^rvR$e!aII%Mc_arC{_4_tJIDdZbf1oSE-#b+=|3Fu2Q>VxD|e%3K2VE0An;#D`9LjhfxsWKe9;}hZzFJ^6%Q3NVb;-nw=!+6qrrF0O2s2Z z{PY-ZmEwUSent$pLh(2eKQo3Kom}XM&yL|nCKo#5XT@-%k_#R2IWgRbD!>ve+<0>^jhFg&s$5raQ7#@wC?)aS_!;MHTbexw9 zVz?2>g^u`w7;Z#zp(B1_3^yV%PIvq+GI;SFzl&pZR3=DD2P61_=DJC?BZB z9T52IqkNziw?N=;w0zMWzvU4)(29qOnQ&7Kw^H#)5x+TxTcvoQh~E;!tx!Bp#8<>{ zqmv6A@mpiKk;#RQ_-!%VsN_ON{Pq}bL~@}czS86H$r@UvOyp2{@Q2<#aaRNmL}DJV zrB=moD-z?lO5Gj9tw@aHDs@i`w<0l)*HZV!@aRzKT55F+HzK*vaT@Q7;YK7EI^y@o za3hin9q}~=FTUgVV2qB+1W5_rAByrZoggcLe>lp=go3mL{*fpjQws7D_(!9BL@KN) z;MYd^h*nrsz&{q{BVu7y0lzNFN7TZy0{#iZ7vJ%FGDb(#q6Pxq*GKtKE$Se^KNaOe zwWx&v|8$fO)uJ8({4-HLP>cH?@Ef9hpcXek;Gd21fm+-Ff!`SA1GTsX0>8=fMR)w3 zkHCReJXFkt%`x0c#Un-hg&1y?;(;Q*C5Bs}c$|p87{iTDE_B3Sis42k7dqlE$8e*P z3mx&TG2DpcLPz{HhqrgbI~lv-exHdO3J?C!8nrDz1A&;v73%d6w(>BH>(d({Y{g+1 zSEn~a*h<4Nu1(uRI66RDncfOvBZ~_eCvHaw8&O=y2=5GGBZ&(c;kOlBydv!m*{CRx ze&BgegpR2K*$4FA2py9Jk`L&2B6Lg_$UUInjnENcuxfyQFG5F@!J+|rUxbcGgEa&6 z`w=>#4VDbhA1bJ# zKLh%c2pwp{?F{HoBXpn*cQc?ri_n2K+{}RfLeoX7&6fchD8mCp&A$p^D-4eh;jcs3 z>cYcA_?r;6vhe5-J`}=66&EtX--fUe#f6OUtRM4@NnQisw&YOz9!eK7!l#F@k;H|J z@N9Q*3&(%6@JOe5wk*}nm=+A=ErMbZw$Tm$fG3637uR;t$6a4P1b=_gjh@2=wcJ`se`{$v>iQBMd3neM^8;_Q1@fi{Y32t%p9SPC znr!c?nh-f9R%ooJwJZI7MQMnf61RE|KIPkKr_jBz{x(lxxm3nfA`V&U+dbOa1+!S{ z?(9i__o!C-4o`Nq+XFk1@AOQm6@D!dIMl;+8n0pwl>nsX{_jvOJW}pn&(+sTP34wK zwW&I$lKxs<_kjqJ68C$924RqD6B<0|4H|_(ey@7O8w?Q!`7P@)Z!lCCnD#Bk@B|yQ zRNFhD$>G;|;7@LH!Vx^>aQGk)!SMf4)zKQSZ(#qBkQ*G1owL^Bzx5!^Gk#wGtfpGp z%UVY$RcwqKH3q*0Cymp)!_)TX6xZ2g(+Aw)3H$R3YwqYS9bakxMc|TtYuDyD8x|~` z-M^4Sr-_k;OCQ?Vl0&Cikl*njm2ro;zJPs1N9B&C*E!b_l7Po{~H0OU4 zQF>fnBwm#mc7;F#ZV0cZT=$r+DkW42f6C3L?aaeCYOv6k+M3$a_MtwmM9bB4vn9;`?lCq7NE-Nq>9y0dR5f`l=GZRJR>zNlHKUxSwu+as=55cG$9Ip-K`CW+ zdlWhvd}=Rke99~3%N~VRT7$`@aZ$4D^(gj%xL005-tlOq+6-T35*-((%)6d#X)eL< z1&;;GY4e^(VO&k6mXwln*^y zW;XqO=z@hnaZTRuS@s*E7%HL%Jj!lE6oWk13gR&Kf^R&W_JTN!&ESxS(`FEbsT+LjVb=|!EVYAKe?`|RG#T6u zqAc};(-n*TAj(ohIK#89A;ehj2xodW?FccLTf%G)yOt1RxhI_ESa-o#jJj=(MwEG;=P7TY7RmkKsrbz(TCIN+BFJY9HVI3_vZmkZpj zJrSCEI?#&+?UtViO?@5cD+KLUpa@N+3G@;{yG1BMQ*8o$rJ#8o3So*G2YHo%c_|8E z3L4?71Zy!5a{b1)rRUu6)CAnE^aNhG)~ezC37mqv0xah$W>pBrFJSKRU`w@oROGJY0v)!I`#9`3W4Ye8-e_bUv(1t{&@>6{Fw3V0yEg28g{SQCPFu-rBt z@*q6I8e^}LxLrIVAe5qPq`=?T3Q{~8U^Y6}Qr3o`iO%(tbsi)s?15b$dE8?tg{55k zSnsHY+?0FT6GbWaOn}*Oy05#~5Q1i$?u#xqdax+vp7U5i%5CygQOa#rSZ>O_5MaSz zIpwy5pdBoy+)EzJPr0oEDoD9k0?bC|Qts6dG|{<~+vdTdlzZJ{1u3`PQH{ANx5E=f zDYrAg>^NP@?FvCNPM31KJy?`-dpuTVU?gJ0z zr`&!46{OsO0JG7#l=~{2h4tlUC zUVz!?T*{pjf+jkba`Qb{lyc{JtRUqUIBIBa$}RLnQOaEuV0N4?X7++6_{43<-FRS4R_a?0J~!Tgk4EueywyDz|ObS~xY4?z>1OSv^3EK0ctJywu% zk2q?0Zpy9oL{Z8;7GQRqF6GvRpc$u2xhFhWlyXmctRUsqd#Whqo>o|H$~_Zc!C*P% zHiV!ZET`N?59X)bCIJ@IRs5~F6Fj(uqfqT^jJa4ZFSU$+?0FO6GbWa zT7cPcx|G`%f@Yj9<=*gMQOdpPv4WJ_?x~`b+o7=Bl-n6#!C*P%c7>oFET`OV59X)b zUI7)P+&ckgqjM?uZU~y_T*~e9U{T7w@3DfEJ3tiN@GIBa;GHGrW))-!+~@hoGd(Ti zx&j6t7<}xRj-FcXdm9dVtPS636Zpc%1D|*ZLK>63og=+B#@{Xasi#^i-EE!570fEQ z`piQShSTD6&%ohYtJV|e#222zz%9f#&c5`}xZ}rI$O-+Ghv2!hapW}q+A}?!P2FQH z1~K9AzVR4nY+Sk9V6*-jFPz#dpfD6$yS*RDH(yWpP~`0^^c3a{kKlYqr~6FLgb2^} zY>&`v8$UeRXL%@+B|O)2JcDzs{kW+<+cW+Vze^)G({nw-Gp!xDiJs>vm}rf-d7e*5 zTNf0PEs+s)3;etc=m;jqz3K3LkCcwrM{(g^kP+~(zzFVQT_6!NFD}-L2x)0*X(`v> zA9o~vFWCsZ8Go?`>J>pv;Sx=xtxCKRbde^~_X9Zs9~)k(iS#`{j=)xMnI?v+I4CVI z*F^f>UG_l_1Q%-}eG@ekbZdW!AX?MR=KXY2|7zObTy1LZXsz-8v^emf1Eal;IGojb zcs_tLOFsl`E3h|YY(vW84^j4}jBQL={2|J&$k-t%i$6r!+cS1(%Hj`Ec4fv6OIiFO z%HEx^!&4T2h_b6Qc0|hJ4^j3(V(BebG{MnVS>+$=9dAXM;*P~Xo4m!T;N0D3tlY84Dm_+uI^^f@LvKZS z=8nZb=Z@&gGb^71n=~7k~HFqqkmUJ0RXT$3?+gQ0{kyZY&=8+XI6XkThuun5#ZNc?oe#SPy z15a98@CThij=dmb8&ej4h_VYac1X(N4^j4#j2)V?_(PPvEMteIEdCH>ugKWpDT_Zu z*{d>kM9Sh1QT94wUH5@W%YM?dtGVk9-8H7OMsKUu^oSDms~hrYdwJ(RW^iLJpXNte z&wP5jJeN;Tq#W-~b#Kb$)6*(_-g|Q{pPpnn-knvhFnn`I_-=D|c6qx;DOYLQ!(?^S zey5>}r+sA}oipusG}@9-TAoJ9GK? zwC~F0j1VA|jFD4inFw1?+NZra~Bbn&!*kVofC`-i!FeA@Tt z^6_aukjuxX{i9qyKJ5n$Uoh>Td6dpJY1+fnO*idd7`k}czs#d^rv0m2K0fVV=koDs z|0b7@Py3-~u+uEF?ccQzhggPk2%WddYVDy-aj{M;g| zn4LSHpI2y?N+OQue&fkGg?6bl!p@!FpIc~`N+j&u4deNRcBxdt&Yka{AK0;Au_qMmCfT|A5_Pg?2_ZH$1dk9N0P8%+OFW`~xOedK0=_bJfN_=T_U*ft8mna-YOi z+tMPdKsF2z#s)E7Q)p+#hGwqXt}V1PvZ0x)w(AP*jBIGMUhn?o3FN83+>GDM77;kXlG;-)pmQKosmsc+Z}~= zMmAAxD+9X$tL<)YLRaao+W6<(YP&bE^0MVu+v*~#KsJ|-P;K`W+F9Aqj_+CBUub7! zLo-)x4;0!N+0f2a+nPctmrBC9|) zUu};U+L_~tYI~y4&d4UJ?a4wrBb%tU^@VmuHc@R)2X+Hi+q2$;ZqB%BGXJtb>uC~pEc1AWdbJg}jp`DQp?Oe5ODYP@Pp`EL?mjb&1 ztL+tI;;M~gvlHU0?X|$l%Vw-ZwQVc13S{%u_Ijb6Ii9GtHwx{HY@*uUEVMJSiE7(k zXlG;-)wUzB8?f5m_9k>s&Q%-#oLg;s0xK_Dezol_vI=B#=?K;KPNAKZ4ehwv-Yv8< zvZ0x)w)YC{jBIGAPoskXgT(x}=*bP{12aJiUHj>Rwh_AMf11m3^u@cpGu*fQq z%~#teg?8q6qS`(!v@^1aYWu9v&d4UJ?ejuABb%tUF9W*)tL+sSwpsPr%^Pc(h;id^g=r;8`^QTol$6KWJ5DoZD$tR8QIXzRom=BJ0ly~ zxoVpe*bP{1^NfkBHkwvDA->wq4XnHX#!6J%{35GBHeYS$7228OiE2B)(9Xyvs_lY8 zJ0qK@wgrWDMmAAx3j@0WtL+kRLU-U@weion)pluMsSw#$mF0@++TLbY99XlG?Z zJFd3Hg?2_ZG;`H$tZZn<)wZ(G&d7#luG;P@v@^1yovXH0g?2_Z zv~$&VPhdA-wcTe-T(yyGc0zo$JrG!V*^HH_wlzgofo#6o9xSvo#}n1|P@$cXO;p>% zg?2_ZQEiVD+8NnIwXF^82CTLX^`)k+S|@xNU3*vgXRf@`x1&M+L9#!aA(f8S)}DaD z&j4-A82Cn|5W#o+KbIlpwhr_01;{*n6aA(P=?cH?6KVmF=QE^f+?c=%z3G3mN1D3> zgx>Z4LWWeUr2wHf{%^^U$Y)icnlYG{nW^C9HJJ}>0D+UYHA5;L5d`P%l?;IosL^&WJL4kN9BPvauR%ysZK;Fy{ z`{qp726qrpg?TIgtke@}&u;Q|W?XfA_wjKKXK+`>HFZ>~aSo^P?To{({fu)sm%B5r zsk!{KC`UQ6C*yD&wtv7Nuz!QUy%~q&h;cl(?_?Z~BgXLrzngJ5ju^+w&3hS#Ggb9tDl#{fxtLgdDXn81DxehvNu2YFWU2m~l9cki+nB{`O}ajw9d*L+(Jv zmHam>r_ZsJqX01bnp@gprO)gmIPtAPhrb7;^*x zVQ7NFINK8#h9)SCbBJh%FCK>+3cp&9w8H*>ZpJ~h?XBs6(xhZfv4_p~U|SxCJ?uQs zb&t&hag^tK5RaUWK^>U}dw~bx$We}lyufpKxCKEI&M^SZn!Nj^jr@()agz$ z!)@`RjBDw#O8ak%P+9Mvswmu6h0eZ48&Y(G) zkz1;`XbMoST%$PCR5ycV2pRzRx;djN|6saxyAIoo}C{%Otj%U z2&=Z&L+2Tvow0{mbf@Ra*~gYOhFP@IW9`{5CD0gV(On*E9iM%WJmcusCScQ9<+)1L za`0)Ubms15uBBQJzqz3!nwRv=psNK}9aW8}%B|!+$whw)1RfazT;sqFJTQD~X|y3z zqC9BGFj?UHP|4>*h71xWOXPzQna<+v~%pYmK$IzH{OqI7)5V}^xuSI3;=m3(aA7*WXvq9@e94gc>G-lC^V9KFM~-%J=BMLphRjdLZHCNG z$JY&+pN`v^Y=>{*EKJ9@JXe&CJ3LmDjypY8n2x(VSD21_m}{xRFpAP~ui%Q(@g2z( zrQ<#acHn^v)A4;n=BMKahRjdL4-J{0jvqO4w2L!89X~c?emWjBWPUn+V#xe-{G7-# zF4je9_Jzla((Fr*6{gu&o-0hVL(C1h2!AWMw$Aj{QnqSj>&vW0y1XNQ@n6N{7U44; zIPfAo+mQKbc9tRY(`=3*^V4jeBL`lD&oN|vnw@LN{4|?y$ow?BfJt10i_&a?$BNSI zLXQ=u*+S11rr9OT4Y;^25?oQ5T`IW3G+XSzffv^+44I#1OAMKxW>*?AKh2gpa^S`F z8bju%*|mnuPqXU`nV)7i64}-XcV61NvfqZ|ZoS~mj+-3-dDzyRUg@}p32^m=mtVIi zBt84q4;)q~Ce^|-c-?ZVVp0`6gBLBgDJGqN&)@~i?TSg)k&K}mBzGt#o%4*L3*I{w zlg@U=(8cab#ia9`F?37$F2#&=7d$D$7dxvIbF5+bp2^*cX|NN`H%#u)kezA1TXL_4 z%v9q&5SYf*8ZvW@H$VV-fT0SeM_YJQ~hpki#$@az)~^^jsr%n%Kx z$HR&-Ap?Wy@rYvL>G7yy;_0zgG4b?xOfm8FSf`kHdOWU}czQgcn4I)@QbTs8IX%{E z$V|0MkEb+b=Gvvl28P<2FhAPNZwhhw@vLUz39?Z`Hg3+4=QL#Eb}6z+LndyQBhPCn zo+O(!6wi_uG!##hEgFjF$%`6_C(272if78p8p=tPt%kC5&bji6q0FSaWO>z4X4YM{ zyv`IQi~lWpx|_VAnRvFmsUaIVXUldCnZRAPyrm%%x676t8j5GjP7TGgWtWEH+48oA z;@PrWL-B0cqoH`V?A1_Cw!C8~JLjA&?;6TXy33aL3}t5BWy=Rl)t4LK%p}bNaRme7 z;0er!5=*1f7_Kh+C6zuA4@FF2!+v!$U%vvIiWB* z7x_eDX;vtVPDehKSeh3S0~KHhpGhpu42gjZfPF5pEH@;_=Ote#E~W!#$d`(X2;p+% zE5${Wa9Q%T;v!Pu?Rpr;H;RjB0pTHcNO7SU7#?!pDlSw5!$WS?5WK*KC$N~s4WS(L zGy%BN6&LD(;i11XB-a>}1%-#)nTiYapzx5Jt++rB3J32iGn5yFqb*9$dG;-Ke-g53XC_mMhNc;k({VinDsSwgUccR-DztwH4rQ zQJmF-!$W;nD9-31y56mdGkUo2(BEy6E9iQ+E6(WQ!b5*6nQI)N>)j z_mtuSJ-BYc-_we-dibvQjN+^wuC0K-4T`gR_^$V?;;bGV9_qVMaYhf(^`29l(Zhv@ z{x(UjpzA%aIHQLP5B+UnZpZ*#??s6jZ&bb9^dK)ZwoPJ2Ru>v#uS?9R>Ow>84T%+Wy*CvX(*dLf zf7=xo5yEx7w-gsq0y7W%?ND4q3fJ{^DlVc0W*+$4rMOUxwClaCxKIr$4Dh#GaiJV( z*W07GP!B2$@V8fT1zqnQ#RYnB-GaY&6&L7{b-ni#7wExt3;y;g&g$X2-usHPdbqX% z{ytEg)x&qa4;5$i;P6o2{faYsh^}`)aYhdp9{T%8as^%QW5pRgTzKg3Q|5*a(Dgo( znDIu{%U$nti3Q>kh+Xdsi3QpchF$MViCJlhqOSLq#H_M}QP=xgVpdoV4JYIqiCJAa zG{g=`%*g6OL+o3L8C6|qh|L;G_oY~cg06SE;$k|0wBYXy#YKd0UGGfAMU=qI1Ans> z7m>nsy|WY-(E>9M{LN8ZC`Q`#&Q@Hg1{DVQo2$4`jzxj#_^vJs2d5R14;JO8W=PS z89hYTyGU_H4;LQ#yI67sUGEab89iKh=fyWIU5c}MaCoTiD#aN+MAy4paYhdp9{RgSas^%QUd0(b zTzKg3e&&V`(DfdWnDIu{%Uy4c!~$^%#IE;#`#H_SLQP+D|VpdtgsOvo< zF)J*Gh7*e@`ne6eI0=&nPZbg9-!uZBSe&N80tCRa~eC6$bd* zD7k{J_nhJaJ-BYc-zLQcdSqSidBp{KaNUBx&5E;n_^$VY;;bI7t$@ERinDt7uJ@wi ztR5U5>id%7j2@!vy{tH+hYJt=ZIxU>*Ly{AMh_Pr`rF3bhyl9Z>k>2GsCv2Uy&fyWICyKLrxV8fRK2@C6!*{*U6le9|@KE2+6=(DiUGEFU89iKh=wPORzEjUGH>>1=&;VKOb3t_ z{GFq?h!C#povXNr5}0}5Z@%IpQn;>np5h`}VCI3p^A#70k#@Zc6c?&Ng#rE+C@z#E z?Rpm~F4Thx1N<$NTtU~nNO6H4T({uwV#Nh|WL@tP#RYnB-GaYGinDt7u6L>8tRAkd zfWONWXZ7%1?{dXiJvcnncd_D(9-`}Ap*W+53lIG*kz7I7yHasR4;LQ#Tgu$A19ZJ> zBxbx(^>Wv{R$_s;1Y*~_PGW(!gkjfPCNV25QPlOWmzY(SFzR|YNX!b$q2YwwC^4%m zhlbd4i5Xd4Xo%e;F{7#r4Y8XgR?zisQCv(1kQV%{P+UX^*Y$2yTto@XJn(m$;v!PG zu6MiQB3fYPfxkNx7mAT~y*m{bszHST{#Gh3lq2nWcPTE^g9-!ut&&_p*SlMBfgW79 z;O`#A1$ty%?_R|PdT`x>ztxJfdibt)pW>_@uC0K-`xR&P@Llf##aTT#Jk)oM;*1`m z>piGAqlXI*{XHbPg0AGqZtiBu`&dXDZv-)y)$UUt%qpu4Oxn~q-^mXAOw?T0Q z4e(hF#uNdW!Q(~^MkH}9@Hq`eG{HOskDD|Y5ydsZ=QS8n1v3#mZq{HZOWFos&|s(w zl?r&=qQOv@v=P3j!B8107V!9z0t;H<%Nh)n;c5ntTQwLclQqLvG#Dtu^$Z?g)u2_z zx5L*oXq9md2Rv@mpjE~<#Md=wmEjOk>o+uLlo2iQO${1lT!`p#y8;WE;#(Rt%D52G z<1Pmd^x=)S6=(cWRdZL|t++sFBC#v(QCy%iao832D$dGG7H5ie^b;Sc3jA(+H z2p&JuU_=zx6+hNsL>0_L@OV&zp)6@v{6vGHE>tYw@ly?k!lYgCGYy8yP_cl=&lOnE z6~EA6pbXbDc>Gd>fihWF{7Qp?GF;E#@oNoQWqeosMuS!v*K)w)Aq`q(d{_KdgH{<1 z5w)H*obHk}aK~vh%80Ibx(1ChE=2Trh5`$^;+YyW%D52G;~WPL^x=-P6=(cWRdZLI ztGGaDBC#vZQ(T}kao82lQJj^TFzSluD$c4*9CgL{inAhfcsMWTDb8xl;URav;*7*D zJmfA=oKe_?hui|i6?DZ5H5gL_WCo85H5ie^b;XM`7|{eX5jV<7FBQg-N^OpbXbDcwC~vK$)y7 zUa7%A8LnsWc$EgNGQKNbtwF1dYdPR?sRpewzAIj%L8}ahh+1E(L8FZ5iq~n-DC0sz zkINKT&=s%Opi#z!h#r?aaG(!=+@v_;kE)ux;?0T+geDTZ;w_2`bS4hF;tIuCnF*t= zc&p;9%EVDuyiIXdWDXDK<#xqcjX6Bz?ogbO*oBAOor*IGyYP@(sknl!c$Wraih#`E zag_!mlDMvTw+17cU?zgcdo&mk#dXDdH5gF^GZ8$l)?g@0+7<89V5kcf3wXR=gP|~K zSA0N&p)yn~;Bk!t3%cTi8Vr=-dIpaVX)sVG>xvI+Fi?i;89Y9sL92}KijQj0D&txX zcwDPNtBmi8k7>{ojPT5nb_d4H{)!i0JVN1r~J0CpBo4aUr6|rx~m-Hx_>9 z%QF%)-l(RzCvK2fpfZ8j5}%b=pfO?C5jRTADohkL#OEYt^(Bn@;U3%wkj?n zg=>SaC@!J}W*+!^RdJyhX%l=+aiJPi8sKl6;zBvn7Wlg2LOrN3z~38^D`B>^{OwYl)x)>Gw-smg;P6o2-HJ1M zh{m@^aYhdp9{SrWxq`O$j^d0SEUswxW|bw3y52_;v%+#{I3XWP%<9UaA$Cw=MphRZVxLINsOmyP>{E#q zbiL0M7t;Zx1%IC_E+T~MdS56mq6B6h`1?|E5h+~P`$};UEim)I-`9!@#Ynr}H;N0@ zpuzxuhZGmek#@ar6&LD3g#rF%jo^D*R22nX?{vildT`x>zcUmU=#h23GZh!;!F3D% zW-HF>;k({hinDsSwgUdmn$x&14s-07Ar0ygzI`& zC@!J|W*+!kqPU0@uIpW?xQG^*dEoCV#f4&|UGHkeg=$b?fWM`R3*|_=-ZhE~^`OE4 zf7eQ`pzB?yxIhoCTky9`ae*FL*SlVEfgW79;O_>-Sv`E$yHRmg57$<}-*UxSJ$%=@ zNpV&W4iELcS#d@W(e-XooYBLDhyGSbuAuAPsyL&E3lII>!Q7Amy55}Eh7MOY9 z?-9j?Vx(Q~QN@L7P+@?-wTcVnNW0!+iVO9i!T^8kBv;V&9#>qT2iGn5dqQ!69$D9W zQgMMET({tFz2dAMzUw`uIID+iE8y>G#aTUk*Ly~BRu2vj_1&O2qlf5v&nnL7;le|I z8zooJ^`29l(Zhv@{x&l=bbzk+g2aqBs$TATTO<~UOCWZ=7bO;GOBi;&mn3GTC5pP< z%M!E75=LEbtHi9Z92!o@D-yH1a%hOXDlsFg3k|W?BxY1~p&_w0e~E}{iy9{Ag#xKNC=>+Murs0I}V_}itpP>!_g zy{))V4=N1sw_9=rU2l)#0zJ5H!QWoR1$ty%?;XVjdT`x>zjqa9_3&NqJ;hl)Tw4Ku z`xIyO@LlhH#aTT#Jk<9C#Th+B*ZWX$Mh_Pr`r9wLg06Q!aYhdp9{M}T+^_+<-X{_> z-l%%H>wPM*KwJW`>wPA%KwHAF>wPXUD=ksf^}djpRhBU7dS6P+3d^D4gnT72t1E|w z*w+#>vbxX^`$l3$RTmm!ha^_e^}bbHOb3t_{LLCk_oZ0XhKLZZ>z%H+h!U82;O`8@ zMWk?D?@Yx-w7|>*f3p=Aijj7`vlJJqL4^VS<|r0r+inDt7u6KdrtR5U5>bpR3 zMi0^TE>xV+!-a?b7D}$5>s_QcqlXI*{Vif{_yAq+Qi&OFRK48wE|XXwE`iwfE|*xK zEn(R87E8=ZOB8jzDC5*b>5{X%1IW(M*Ds}_?)oojKo724@OPWy ztRBAW-L5#Rhifa~?+(RTJ$%=@Q*l-g4iEKRsW_vD=z4c4&gkL7Lw~CzSJ3tDR-Dnp zg@^uDGdE&@u6Lirj5n%Y?t1r2ED)DK?0OGKEYOxP?0Rb?W~C*Hy555lv&s@iUGE`@ zSz$ReoREhlW_9Jz5PL*oMphRZVvkD9sOmyPY^}r!y53`oi|GK;g1>c&iwNPm-s6gk zD1n&={+>`=L<-mSo>W{!3(P$5w_b6f7-`pgN^zkYR2bmzX~l(dq+RbB#f5rMVSv94 zk}K$X&nhm^gX z>cQcmzFQP$^blR|Ma3CCTzKg3CCL?Zy_Xed^l;&!zgL+XIY8HYO=89yRWEnFZ4wK_ zB@nyb>kcR+E0 z9$dHJ?<2)oJ$%>uSaDVl*H*yaLB&};eAoL#aaIow5B2?2aYhf(^*&Ra(Zhv@{yvvn zLD&02aYhdp9{T&5xnl?Ddf!OQc%$m&u6Iacfw%->*ZWptfwqKU*PC@L-JRmtth7W? z*E?NeR$0QR>zyGnD=deG6LO}+tgajyVzVV?WObn-c9z79sxCCd=18od>z%E*m<}K< z_?xS^h!C#p%~M=N3Cuk3caGvBQn;>nuHqtEVCI3p`HBn0NW0#7iVM}C!T^8gD=w5H z?Rpm|F4Thx1N<$JTtU~nP;r4CT({tFq2dBPvaWZL;sQOmZo%KhinDt7u6K#ztRAkd zfWJkGvwHZhcd6p69vmL(dzs>l9-`}At~jHI3lIG*mRv#CyFzhB4;LQ#yNWsZ&X?j3 zXI!l~``%K;1^N<+jqe)81^N<)o$p%3S$zqk)_0xatiHri?^~ugt1pL#^K!l7 ztiBu`ayKZ>=yts0D|f|&>&Z_{8XOWFo+*I=j%l?r&gLxZ6(X(PN-gP}51EZ}ja0t;H-#lm zlo2iQ0Sy{uT!`p#jRFgr;)5DA%D52G<0B3n=))V2D$e+$s^+e^R&jyQL}FKbOmTtE z#9>!lr#LG!Vbm2LSDaOuIO>W|D9(z^;o-bIsW_`KhlkvH#TkiRc*s4aIHRx&54oom zSI`xo(O^swkQqE~&|pLo*A<`DU_=wlMDVy#gAq|&SA0%`5mhh~!Q&tYwaghc?VbZR6sRl!3s93<`WeP0likE9JP=@OnJTBH?piI^k zuh3wi4A(PwT%tj%jPHt9YS1dXc%6badiDDkg*Mb+$xan zjsR%{1@i5IFi!~lWT2;RAUGx*JBw{sbuju7noV=vi+^)a(fyH10?w4 z8BiYI)oKV5{E3XHj<*0w{S*O}G7O|kAAw5b>2x=kyIFMs;sBmW_m)Oi+Ow$=BiN7v zV_MSMaCfYalr#$610I6(H0>=441$H?01x)zWBtILe;0Gp+-|9ypAk(Rtu|PFIR_QT{B_Pe zL6kt3Wl(z+R}TNGpGnG@tz#pIrs-jQOB zwbrhdF-_^R>`uB+jXOO8>Zdc!013Z}0C{HQc4A52OFJu&I+bQy^VH~9X8?Fl&&tyA zaxveRAo4ys&_ec*Mra#rDs7(_sb&>4k&aAi>eFavMRodY{cGtP`sVpB8S+nBXj; zt&Jw~c_K=1?hk*>ari=Fb4Ij`shSybYP^skZDv(>I=n+hW~W75TRlK69hRZF2SYS3Ru zNZiB7T#?XU3aTdzi`(>95{gUxwM0sG61Y=;Bbaeb$6JV-^&tV78)U9ie=CSF#tGyd z&f~0~a8aZ9-D6wJ=KR5Rhch#(5l`p>`7!5a3kE77=&+>6SsKa_WR9Xr))i0n*#e5( zf91NGtDxW>0?+n533VJFoEr0VpDQRlAJCHk=c+iJ^9^LLNSrX|S?X|>|;HP9kKb%ocOT*H?N zs8X_{b4%@I0)lH2y8`k`d%1>!<(LY1v4G0eim3;85q*V#pjlgpvucTkf-L5=x>8Wx zU9HXSHZ0Dor4AcagkF_Tw-VW+;%V(B@0*6~Q{WfqHH z5M6Jvp}I66G%Sr9EEc~ky3u0sE2HHW%egp`*eD}_JHfi^CoRpRI!j|}?JXs^8((W_ z9Sc9YF$`%;ALqczN>bcy@NxvlTe2|MIP80(c&4BCkF5a>?u{FyN_qoq5@@hGZjfr~ z4X|IJ!F_RqR9$a?-5(9^j~k>qX9hF`GWJ~N;ppuvN2gER{= z0~!JvJQO!b*Spk!hkynT#|_ep=hT3QfCi7m4YG^N)Pl!=7LVpwSgm;wXt6fO!ieog zffkSDSQxe4FwkOMj)jri4FfG6&#^FiyJ4Wk`qTn0YoPjSm5$cdbiGOE36qc8+EbSH z%ddv9xjh}gO1C1TaY1`V@NoH9YOTSOyY%^2LWf$0qvFB=PZpH$vBFulQItFeHG5MY517;5_N zhmaog986ycO<@WOO{s3d^i^XDhZ-3l8PzRVycSvvi(63Lg2lGbVtCww>J}_s4=qMS zEx7%F#T&)~<~yDR+=9><%p&>LVs@BxtfHViKzyHxe}2|C2U& zJ}|o01TDU!2_8$7(jM$?6%PUEKnP{M(P8N8qX?FEM2F$&@5d1=T^SvQE5s)P8{N@X z`gwZK&@pryLNGn$wrX>FCBO{dgRo3`!OsjW7hgK&_|~77Yi;0so#zplneb2~$vFxNJ&`8odI+Amnu`Lr z4A1vWM|be7l<(c1=NX7-TyVD%>IdRJ-%~KZIoFC82&lWqLRh=tX`zFfAd|8SVYlvZ z7EvBu;;`=Kat-40qWURERTc@X+yd$c+MzI)32ICwn9w0@C4ep$5S>em3w)u1iv>0X z9{S3b<730>yCNk0DO`q<;!6bD+}50ydj^r>S33x^yaxZc@WQ!U=0KQ`8vNB9r~rRx zj;|Nolql#fE|)tH=dLCuFgsnyE);K)rsIE+<5Pn)h|wazAdG&C-_ zUy+^bJSDJy2(aud>S=+sx228TkGj=OrV|a2=~+wH z$7l)}=#7RR(HNtLySSe-^zflEIz83hWawehQ8qc>&l`GZbd)7WZ?<%Fl<9oGAm~yh z&<}50(oAm=Tw7~;CgSyjt4rcu6kIubbC=*y44B=Q1lN&1UJ#gDlU^2BO9X?J61{B| zSbI+?eSj_eVSE6-BEWJuTD&QY*sB6->M2Er>)v+vngE;Ad)4x=^~2HM>k6v{_iS*I z;SZ2+Xwu$4B8=9YH#KPPo)E`Z{M$8XS`&j5{x+C*`j!jSR^yz&Q znl2p>wYrzuu{eDi(31Y4S-bIDI`4oGrz)FV9{ z_(*Z-6Je<$KWq3{ay@Z>cslxN%8jm$F4y26Jv-w3_6tvTAZe;vkYA@{XL~!GH20Y7 z#nNiy{`8F|JIng$RD>f)n?st+-jbn4-hgMt-&(TPGU?YtBPR*y9r#&)@78mU7VnHs z`gKEa3!GxXljPH5d}Ex)c+Sv#XL^#ZBB$p=XBsknAC@LjwK;->_bzlsQWf<8a$ZWd z;e}#)vEe)-<7VL;$^GJIJrR$twVx}=p6s1EDoA?k_k07^Iwwt;IX&8tNr>~Jd}FlL zQ^!3&YS1t=dI(w^E{Iw*4vVTsgIFLf#`MIS0yXvvC0TCE-eRC8hH7}BB&&HOUItzy z$+l8+bF7v?LAtO^*|8l>UDa}p{ueG+>50pwF+BZ9kcipk(c%<`x1r#YWby+k`~xvB zPsyInY6)(Vj03#K6t-BvZZi0&SWn}X>1KnDYcp=CMtOC=#ju?=1ZF8KRv30%_AV+h z55VKPe5+wQv-f0a7S+4Wu<@cI@$O7fn6PRkd$*GG$#bw$fSsNGeNB?&8MsT4ouzX0 zY>g&hl|tjEbyRV83lQXudZc1lor3M1G@$m_3dAG2Pom&7it-}4CPka-VX=ZsF!+DC zVz@kf*u$`15uCqdtN z8x7Y;)8YQRX?-wX^as2@5w{tU-Nkj0Q?+wIPX;C(c$gs#wMN@8-FV?R>*Gd^Lu$ba z>BbI5PsNSG0pV2z{sEh(<2J#7_`-`!p3x?d4GsC(u+hUV8yfPn;rR@1EY60_3M|Nm z7Zg~O4O=YvTV%tFahqWBL^iw>nEV#m@N(R!I2*RcjS92jmAFkXAdwBPY7@wY#{6t} z-NP;$8uPPZdj=0F&W5)XSda}n6j+oEJ1zNJWW%nwO)z;P8{Q5~ev53_9XBe@hCOkk z!fe!(+;#0}RF+2aNl6mnCyM${se)VE}&m3w5=(2_sTt%`AVauI7;Ud zhf=f(0aQnY$LF38$N$!lot4;`2d+f`&-(9ll?G=#&TWjvB?#CvQ?`s}A2p{-D!RSX?A57|&-Hr7T_@0ZjkP^?bRfo0x|G<w_XPIH)GlAMK=mLM}{P=pqR;p3I)F5sM*vQovIL51v z8x7l5iu=VzvD~oHXz8NkmXxeips3)gBl}7S-z*>ix~jV^Wvdlf1cNISkr8)#61r)n z+S6q&6U5o{O2bwRI>PydVcqS~(PL1v?6bx$SP{Z%&vr0d6vTZ2T@c0^55ui3$Q+#u zB8Z1G67Q^4Vcv4lwH}2j12lj6d5TbYM|Lx`m8K?pi-?;FHo>PQ*cRLYbc;WL&q#1g zC3yJCasjwOf{}->BhqIl&l<4S(A?KMLysQvDs90VE#4T#>G}e~c+TQOqd0{P_$G^w zjNv>TfIn~XhT$+9!qW+ws@E)8Yp6w^2NAt3pc`W}#tRerdO*Xqa~O$R-QNi4p)uOU{idWLjY7A0 zn*oB@Zor(1q`3q9EsIBU8pa1w0=~oIG1-B})C7E|#ba_K4s!zdE{jJq7;w}b__r+| z&0SzI4}srp`J#$UXJ}8{C^ixdi|1)?+$cI8wBqS{CvFuT6O(hJy*Oek?S*!Nx83gVzs|_ z%JdVAiHjSKGTWHoJEPd7dWtb}V*sPGgi*D}4xxTTIwx~9SF6mJI&E6tMC+Gu9P-(Q zZ|j>e;iO4ZPP7IbJ{Zh32IG1s&4}=P!&Jm2tnQ_0x_fnQ(@a;6gAD8f^-!0@?K z!)XIYxX@VSOig|Iexikj|Jlqw_-er*8L}z5Nbp_lK~`obA{Ps;DZ){}5bq^|YmGgw zaiOVwB%#WO|mSE06=n{RY z1mjZ!>m`JEjRd13ri=4sDb@`adM(vbYw+k9vjP5q%j+duuGlx?xYY%~8zk7$R<@*X z(>F@88n|?80JvN(!M5ycU$QCBTIWp?tY+W*kb(6L?yUA^1J>ZA<l1RdnsyIM5|*csOxLGJB-!deQz7!fW#*%jge5BbWQ9Q88nsrU zt<@OmE`%PFBrH==l-H?s3hk*xQJ4UjsK*uBJSK|53;_CsLgOIi?voO%=D4KwYP}@O z-Ep6kQ%^|}maI5R`TDd%^M*v}^o&AtCW_as4GPUUJYJMNmx7&b&E0T&y}Pa3+==Hk zfu?_xfjismRbg9OdP@4dVY@r+Eq*FM_y?lcY~UD+UoC)dS$Z*LOQWlBbqN17ncJY^ zqHn8*%Ltc?;MY7{ZHBAK(eQ7+>o+`ICK~?DrN8s;ao;_x?!a-C)@lvD!@Sk z|3||z2|pe^__Uu6J_@&Cd>S%?d$FRTn>EPd_+$YDCTbo+qSmx|A=L`7&b~z@ zsg-IKcvoEe_*!l7y`E=^5zIU$$NmSkT1R)+DEvEk z@>ICs!GDsvAJ*XMO$#`NujVLqR0b!5epIXB)O1ynx?|EGVbZ1pGqTp%-Zl8IVWCUv zX23Rl5R6_J(l}x`yfhPDg5HlW9rc^~Q%0P?e<1i@!=B+oX-_sfi8%5EKu_i4G>sqJ z&nc_KVU*LDR36K-L!0*i_f#<$-RD8ZKq8ZEPAf5J$#mjo~ zFA;lU5-bw?vls>v;tGnpEz?2fALz6s+wJr)`>)LQ$5pv1+y7gNa!qF7Qc)!Hwb?#5 zF;al*vYioimSsD$i76K6MxIMIFE-hi`@Jp_RSP%y-7%eR_Peua29jwd4xk6#+Kg=k ze&pGP)9vhah|#^?G#0w|wY#&uL`EhpUsL4Ve3S_^QKn6a2cq_;KAhnAKP$2i+bM z!&f+~BWopGwBRrNmM44xlF7gF4ZZ@Z`Bx6%E08kuif`v=K5GyTC38q?9=v=yz3knl zub)A$d*|uvXVUBb5LsH{G3E?{L!hwk_*v@EB2P-5P4>AA$vtT0AQyWw=q~s%U4QYc zBuV}p{tik$KOsqazMCX()g?)(cS`k?PPi4{dtzU;_m>DIe@fKoUnI#L-%FA=VXM8` zSu3B?JoAJT`udSb{ww?)lzeX${12Qw4*vs3wQBG5U%`(_@)z(IcHf;OU&BvsH}0*q zPnk5Mr++Hm{6{c38vYJS4!eLx+lY37b+dFwC&jQcY$aP7w56q5baY=n3{YD+to=Y_x0B%Or1Gp z24(St-YKQ2C!g#R_lMv~PfYUvz)P6pCmFfUz4W6xAjk&GHLor@M`L0>&q5_0rqo{e+;_@ zC0n;zB9qx2<&`A)M|G4j(Fb9h9p85U*d#=DCItsb|Q4!A+UoTwRg2w@fXWDk9fVB`~vpEOR&~3gTHj93)bzXj^sDm zqo20(DbORQLX!V(l8l4DJy19BJgU??dGgemGbpd8!OJb}O{3ttx6+f$f~}b~XoI8S zqq5WtTKXpUo=Sc_ zwgr}x$y0kLVw`TZ>UbwfMoY9bb;^wXsgvPh3N%4{Y)dfr-izObjX^S8m||ESoDGrO zr!I!(h^dtgtaMV}gkPo2uY#k5HG>R}A)k98pC&2;=sGi}Oq$S(YnnU&hcfE`cg*Yn zl|E=RlV+UC5938BKlnIFW=qe!1c4aMr?yY*gD;;xVUjx&;Pq(fK`!UaHN~DTTu>z^ z%D}(=BuVy5_xSW0^$5HVrh)GJEJ;R6zIDP(za;S~#F1Zc8^|JX`q5$t4c0Xzy>Yj{?qelLP(UHzv?>@5wX?4a0qOoJFF_Vx5m_?26cIeAt=%RWYi$~L`|CryMh zn(T6d4#LT>y{;}9pKE~2e3Ebljr>ksvOtnFo6syKK<6QjCw2W{b-FBYQY8jwR!|8? z{7zl+eJF^{uvLN68~9Z)@V!@~lJ{^Me;H2t!gt}AIzuZn>0KkqQLyJk*wxYZYdD8G zby{Cif>&h2#-(L?U*AOdI)L8E$#l0>?K^o|G7mQB1hbdAi#w@Z4zEIoYpK-qA*s)a zK^}Q{9i7u|g4b~Qcnkgy=L5LbbB6x{UVu~Vkx4T5yGgRe9ZaqC@577syy81BBjzmO zkKiSFs)14b5Ar_v-|$T16at}6;PHf{d`fxdg<=6eC8U2%a zA;2kwU%*BioxRiAVXZj@EYr2{r2ngqPGz>kE7XgzLThaeBUx}h3!L_E>yjhEkA_-H zV{jpWFI9jZH?a?ljvWGCl7x*ehSTNW%4nD{TK#*!rO{9_;*PKl28~@~JG@3?C{6B% z^S=f@(dg{$=d+$h*gYuuKGb;_7AOp5HyyeuE{gppQ)8t=aLSK_Wg8O0A7b>BiR8Yw zbu3|gvUA*jtV@0(F)aD1uIB$69sji7hpLbWtR$^{)B2~L4CRYGY-WF77BVk{3xNND zG=cH4i5cNqfCeQi{u7MwJCKraJV^Rld~DG1XfIrD)FMg_O@0K<&^!g8EA>w9ntAds z`}(oo{p!Hkf~UHOkL?uR+?=u%6{HIYd-kOMzLQ~vsZ8se0ILkIWyw9@Mi*vVQxlyw zzXE%BytH`$Han-y6t8>_$_QTRgj^)zN3h*Csek&6^g1Ou4qoYMw3n%ZGCvehBrH@y=wNX>6Q!A7E`lcb542Hjhl3o7=C<|uG6|Vui{-};F1_EbY znCp|#Su&cu&HDQ!`N?5P@-ak4CxShVeDZfVyhtxphVTo2OfQuC@SMrLMl*`O){?Ko z|F|yM1d%-tTQlLD5^EDy^U-iE3Mcma#jDWRrk{vemHd0)@tUf93UsP8DgHWpk*?;& zo*uWSdJ3EcoiHga+-dG*xbVsDW}KIy*2x{&9<0^sROqx2Tap|Le+MQ1cotl1L5IH( z{?4pHoN(m<&wA+O`6hY|hF0t9qtodcHeNDbLB{)Fq5t0D|NozS@A+L)uVB?<$<{Q( zZ2=h6A(TIm>`zg0_o|odICwRX?4R6=Mwl})){1arW?=Vh$o6=7-gB=>fpOY-LD>2y zobGt_+Ft2y7&c<~Fu1J+owlun3%I+>G#GZneWO3+gPA>yi%063t*q z!aW`0ehB{#N_u`=m;96Ediwh&q-y||<3TuqgL5eD4%TwK`2u$a$RW4>&mr}(^{WH7 z^#59AJMw=?$3L+j~Y=H+?hu*i_`9K($Y5`EmH87H+&o25MeJl7lsb*;m%FVB<>Hp;gyyS zxHO(x>*$+u;*67$IyeIVh%drE@CEl1;P0Sh{sO+zdJneLSrMHk#mCk~ z)FxbW;aysS_>Rx#f2Schc$d2pISQ~r$zea`LQlO^PqAY`Z-a^b!Qb;)V#>O)HFY84 z?jcwIJJ(Oj^qh3+^m5eapOMe;$MI>Q;`{y?7ASJcLH<)y9o=q{P}|HY6JRuO=8@iL zXLdugo=A6XZ*DjoNeAB!*FyDB4yoTN+#BiZhi)?+&Z_A6+(V9Nt)q+El!K|R%$$Z1 zv`)bbhiuj68Xw%I=QQuG3wOMcqqOtjrVDqx(WCXaV)tBrM5Fr0cI~hn-bLXWo%|0v z&ip$UJPost*F0u;^d1Vwu>|`45n^`rNvW9L6`k5|?kx_!L|E6Qa~e+nsPB_UUcNSU z*U|l{qsI><79K9+AjqzsfSKH%Z|#_mbPe|Kb0wqjBp~ zcG}9z*$?3A9vdtRSt<5EM;ouh2}l};NK1f zu(S(X%Jq3y-v_lP3JC#ups@@Jbre5&hgcC6(nKD}Ef@OWFqph;)sG=i_wB zb>d8TqL3Eg8L(?ma?Ff6x;c9ALCJ!db;(}%X+8Ws0dIm%OrN&#{!@N! z_GiQW6SDuOf2m9GQO=soz8{{I@tnB^atdqoED#)T=7LYQM*b_O{-YUCnhLju@QXU> zR(I3rW?Y;m_y-h!2IQb*=xOZuDcHi~u8dWR{g9v||6dQa^!;+?iJeoYD2#{keRvpx zs-dsS*pebx*W`cK(L-e<#^A&7w%(bOXDE=5co4w-&J~=LhZy(YU9-GDxZ4B2un~MJ zcg$@)-E&x`p+6qMhBN#Kx;opHCp>?L`#b-dB+I`Wf2#i(WJvJ9@d!9Wwznbw0$zhI zBc9?WKZTdzWSeg8;1f^$!?7=&T}Mx1o`6??XoOp*Qzq8jV^!jKdDwLppAHd+zcHjd zzM=+HVaUnsHjKupp{$ZzEROfRueGYB;AcB*Awu^#@lE)!oxaUs@C7V+>ZU7o!JX%b1$uY7cQ81Bxx0{8 zpwyV=$QrW;k)7 zHqh5cgQO1{5W=JAxYTz7K(Zp{b$jS#U=9DR1B(uLXqoM1-G*My>)>wK-7^l}4-Ahd zW=`Wpvvl%AIt;h;@r(IV5lPI*(q!m%?NzsW!S}`y`{(d4T&7*Yk0??W*24CxSc3-> z)pAu`avX$~QsgmP95_>FUtLE}n^OinAt8M6JZ)d9eYID)y;D#;*@Lg;gh^e=w-0bD znRp#{{**{Bc!Hy?U&gluEJ#QDGaB4cH?VLi!e2C;%|44Wa;a2n>S=E1f&04CPNLJPR6vG*a!VdeEnUN>tq9;o_N-tQX$_n& ztZ_nO7vIr$5kllgaW>FtsFyvsmv3Y;OlN}jZ;j-Cx?ezFPV{fFOEm-Im7uY+4UDaiKoHOBaRxvgdU zd-^9$#RspW`lrs6VN+P*AMlBP4(I>XCBFwhz=5*uBVZd&hO=$lKT&Msen@GxAF?6a z#{F=AJljTlcs7@9lYg;|`~OL7- zjr&K6ZQS21wsHSxv5os@h;7_|n%KtucO0gVzgleL{#{}l?e~gp+<)zNwf!owjr;eC zZM5GfwsHUYzoYFh7TdW039*g#8^kv5-}t-Qev8<~{U`k!y??UU#{G@Ir}vK*+qi$Z z*v8|p5Zk!_w121VXNhgxKSyk%{d}>F`?ra0+<#DPTE4I=8II)fU zJH$5b?-AR$f2`QX{r@PoasO11Zoj3k*b zGbyQpv>faOKd5*_g(Gt66%{<<3!(>+-isVme8B?gj zH2oclsqbDI)o)fz{a+L_|0fkwU%f1ven2txcPnQ4amCbomq*hNE2jR0Vy54xnELBh zMAO$Rrhb!RroTlo^`{k6e@-#=?Po>vze+Ln|5D8KbKeohr~aH`>a}M_^(MvC&sNOz zgNmsSE2h3%G4*Q|Q}@mZk4Js3V(M2Zrhc7b>NhE-ev4x2Us6o{4#m_TR!sdd#nhiw zO#L~<)K7Y6wEU+irv9OGqx#K?sdu(S^&Z94A69J2r6uKc|@bpA}P|(-D@3dc9)m z%N0|sPX zy^5*dubBFSim5-MnEDfnsqa%v{nvfb^Pk%vGW7w)OrKRu{Tjv8uUAa{9>vt}Q%wDF z#ngYPn0nKOusqb;6jQ%jG4*>CQ-4@7^~V%b|1ZVVy^Z1Vs3#OtuTyM}ubBFMim5-M z*c@Lm^)GA+k4OCu#T=iy+hGJH@E<-k-mCpD=HEHqGk@8NZ?~KQ9X;UL_}`GP*K+U- zdnR}zU`#61azK#mPc-?FnEqS%%JHp))xYCQ=3nZ^vOxAj#-zGeXP<}6kJFa&d?sUd zEch_~cfk)Y@Xwd}!{B`jL*56L_Y3OJgD*WJ)N3)`FCXT&8GNTY{>5N;h=4E!pbG_U6;!1Cewe-A9qKLmc!^AfE8v>zW;JPUji z)7uZv=OOBLyqWnu2_94R>rY@A51@Vm?2`2F$!`R|Mz!C?VCkPzKL;%RSu)y&_ndt` zkkerKusqj;&$9hr>YoF@1I%c=AGhO6o6_$Cw}ZJDfchiggzbMaJ?#T*Ltr0%#f0|m-Gvep3Q{zGVkY!Si^FnIsR;OK8rlLzct=35MMql&#R6X^6lFiu=KZ?UkWV!YjO!J{b_SN zaM|{+$$P*P;3tqRukTl=+x|86`@uUEKL-A|;-|o$0JA2H%i1eX3a`Lp0-(BH*1GsnLREd6WhKLM{$`hS44U|vP) zvvA>a;8Se+`C#dPQ%{1WzfFE8So+uG3&GN#CXa)ULH}6t`x~(Ir>TDo{D|#8lm7uM z{bllZ!JW2$Onw}^S@9piS;Z%yLn8fY#!rBED!m@O3w$H&GVjkhVCg?IejoT;+utPT z!7X5#MaI7jEd6Qf9{@}Lnfytx^q0wB0OydNi$|IMAHmXJrv4M~UX}lE!O~x*PQxty zWAZ8B->dSy8T_K+W#FFP@P3{LUJvFvEFOOYSo+J%Zv-s;WAf$Tab>Tr2VV^Kr!{AJ zUj|Emneo31z5zOHhROe5!O~x*{xn$n$K=|-LVrW$&-RWVuq5`QV@Ug52YnpOW={K! zxg2i?_&x-XSA$oc5HjuE*`Aj;8S!badZG7#ak_|K;|+r4LwoTVu#7jdJbS@1zDWKz z@B%wtNPZqHR?uz8gG>@x}Qz zzb}Agypj4|u#6v)9|M1OsaLzy#(xGZB|&-1*0hdyZaSA%8zkorP!){YmFSAk{x zkh}$aF?6wiV_+FSq`niJ$9Um;Z2s4RW&Du(t>FF88?Am1SjG>jKL|eCjt7#T1k3m# z`9<)p(AU`XC!wPtB2gP(`~KC7<=%lIMn&ETsseps~nFj&S9sb3DBhw;OGR=*A` zBg2R;tteHU1r^>fb29`>Q}>*qJ1p9bdrXMOwuc!A=71M~f7y@~HXk9)nae(s09 z8H{R+^flfKU>qw!`$9e*?O?0oQ^7-Esn2!l1&Z~V^?w+80_j=*FLLy+f@OY^=XWpo zYRo^P+938U?;-H@c0Q8&Z@@BNNq!M5^ONKg`Ql+eJpM*-)4b5$6u>ec$oL-s%lsSp zQ{d0NCXD|@u*|Pfe*i4=Y2>HCGJi(?D>QVOFC(+zpYqx;zg1wFkD|`|*M$4SpJ>s( z@cz7Vvse3e!~Xrb%JULS4A*#R8WQ{A`7!=-#K&?$q(=RAbml*f{2`hAc|Y(@n&AEA z{rH^|e;FG3xax1750?2`=D!VmtgT-Dw z2mYeckAJP_-KO-{f$voMQt-P^3a@WB_(8>kV41(=@h8ACUrT;JSmtNRH-PU}_y6!Ec2n%k448q=0C{^u*`Ro-vO5SP4arixAU3gZD5(7B)=Cd z^NnP4f9HFNSE0d3{ke0CSDQ8Wcb0cO;*)#8=skH~0K<6HqS_i}ec0=H2~;CfAMS-N zAJ(s9Pc=d&-Q)?(}Q_^c)s_8 z{}U|d|5LDhc>c#=!Je$IV*aOtx2o%L4mb@SKq8*sX7D3QzX&YrZQ{ngJq`Jj;CCTDn+5ax3b?GEM?V11Rrc^vu*~-}{gdEpRsH`9_&UX}$BM^~fv>Uo zH-lw9pXt|uW&WPL6)f}h8-@t}qKg^H%kI?OA5Op`bd;D{dp2wH= zy$QTk@wj5NPR~uh6MDaj@9Hk!fcW?YP*6Tsclq|0iT^{ZGee%Qo8ILo5ufKL*T>ae ze(7c6&*u_S`;qJaH1hZB3+|7jF936X0Ix}=yeq-IU{ou^z2JVOU!>B{t$F4ze|C6o z!rVVo0_txB<74jUyc*a?u+%T|GBAD^X3qa4@Hq~z0dG+H1>h};OAcS|@P{0}0i0Ip zZ*llea1J{A!z|CeVEh0o;2(kU%bkFK3dS!|0{$f!zW_1k%k=xeyA(eS=8q3}!ly(3 zGZ;(3&H0n(zA4Ie4lj4O)8UlEC5LxA{Pzyu>F`4i|A)h~Pmh-OG>4lVUgz*Ohj%)B zgTuEw{B4IHb@@I4!`8^E8h}5-~ZiwI zaLrrsdqu=&|DO4u1bzmLZiwN8Wl7%%J{kSDHCFEee;dsA1*X3M{3sZY8N(NWUjj>c zE(On;?f0)3|7!3&F#BWV>%c3(7=|{y2iyT(WcfDmW#Fb+zJ53On{z__LGXU?T{ixc z;ICu8u*veX;NOD(hvnM0p?~!Xf4qmse>M04Fut1OpALTXSg&@{#%}_5VZQJ*tG9ti zj|;Egdhq4o*I4}m@JEmLYSG6s`3-^p<^-?ytyV9AZ^eA!2dusu+=2e?R?F9eZv)Hq z_zD_}a_2{p@!tx66 z1bD9H_23)8xNIhV4*Y#^qvc8PG3eh)`F4Znf!nP9VQ>LlV|fqwVsNeHuYxZFOZ`FL z*!u{0snvf8egMq=HOv13ct04!0ESOph~wjZzuq#uYIx1yHI~CLM9&x|rv%sTo z4v)VH{C@EHbNu}C;78x))jnmf*OlN0us%WR-$%ed0nfL``y_b(!mxdO8N37UL&(lt zkN*k2Oz{uFyTFp){|0|h>HEPS0n7EMfnj;e+r#>GD!2tK*KZ+s3wVz`-r3+;SZ|!P z+zoC9H(A~U9tGpFneuG~e+n$^Zw&klc(c_n1$QkD>+f#xE^wXIKMcMVe2!(zt$V)( zi@m%9{7Q_^3;zVX5G?l>Yo)#QU}-wP8owP4Bb6X3Uivo^m^gFgm7 z-tt}GTftJEAA`RRmi&GW{w7$?|M%dZDLw%=>UqVdgHOeJ(e1XpP2kUBd`YhNJHg)v zUuloO4!pj_tG&YVR`Acj1D4+nUa=}H&vtOS746CDyTM-tOZ<<5--PiT;hVsF!Drd{ zp98-HKF5~tZg4y1bLDzH1l|A^`}}{vd8NMyp1^#q#6Rgw)F-gihXnXm@IHIIW#CU^ z{#N3*fo}r`^%wkeuw4K5f%k*u{(KDlywdl8cVYf@oz4Fn;77qy|GoqM16Ypt3-H48 zz1p2N{_hwcEcSLb413GkF#c)aF2(iWEsEEGb6_doh2ROLkAa)lhxzRScY)>nt^sdR z{7LZl!L_!0cYq%SzsmBx;6Et+hv1jM{Z{`ucwWC(+iCe(a1JczKf3|jhlAz%%m@EU z>5IU>RlFMfJXqS-7Vt~pgl`}*&|KLWQ{ehJL^4BA`juSdt? zP2l4!F94sRxEZ_z4D)5;uL5&^BVoB0ycvA9(yDJQ(QB z1%DiTuHt_Hqikk8bY4x3_bo8)m07Pt{yunt(jNscQv7Q$Zg~RD8ON*fo&n=o5#%=u z6F0bb0nY=Y>dc(vjZcnw(6?*{jRdHF+ zcfe08ehB<~u$2E7;6EsS3j8OX3WXykg zbN%D}ij4Un+HdMFfOp#YA@YgKz!)Ew@|*^~9!z^peF6BEM&xJNtIH;fx%5buyVTT` zfnG8>FbIbcsZwDAo5Kx^kEF}oX?LKttFNPPpsyeQ?^@Ehx}kn@pwEwzhFYS(fr)W! zjyk%eaR_26Gm;ANAeF3V2{8{L zRAzKZGUFw4qk}2Q@<2yj8MpD___ONKF)tfr=g9D{vW?(d5 z%AiR3WVqRY{a$Tjfhn)>0Uj;9#@oj81#?`p?Sk3lAfK$Z1%nL@w_C6QvbDnDD^fAz zUy10x6~XQj`D9cGHna!?cRvbWi0(a+H1!qRVnp{UYH4d#I~N_kbIPR0%vBEdM=`sZ zG9-+JXJ~duG@1$u<6+CsY|1D> zb}9&0rewnLH09>U&Sl7OM=k7&E)QE%g~IldFPke-u?Jc{S+NmYK3Tc7Sw300EgBwT zYHPE6(%JScpVWJ|<&#zRX*-}(FfOgau7f!Z?tZ$XWS$$?Xg>UoV}{gUSk|aj!-!!r zG>^lnj_T19~OwD(*N8bVFl%WGBWOIPgOFK&Dm{qneH0Kf7 z7%>d7rK8Gy74ymJyD=VMA#ypmHJGN%rCf1)9(_Ty6FgHg7qQu)n$fk>06cV<6QHM# zihVy(C9t<?<3)68)R%19O3ks_2}Z~X17YV zVSdaiTetc`uZUk?ltv}LV#k+vr zcF>$em0*7{T{- zIXcjwx1A}U1Jl{me5qi3AuRU$Hi2sd*k8FQ*u)oCZwf^m0;mYCF9Ic*HW%b%TVRC6 zD}hRc_bgSK(0hXu9!(*IH#S`ik-9xRb!z?4AI>)IlYQG~y(nK$6f5k=ZpA0WZa8^1nl3VmD^-mfuGuNR) zU%5DuDW5k|7=&vaIFP9bOJ=a8ciA5+XluhLR9~upOHX^M6aK$FWMT>urjH<;>-s)s z53vQOu*rXM$3b?k&_+_`?qui@)qmHNW@lfT95gR8CW&!EWc>y?p}uP(6=?3+RGr1C zEY)yfY+EruU_5#GZmx`LGt(P1ftBvP@G3$-lGXfTSxNirvO(;q(JzZd_5iAR!dmij z5t?2uLUSa7@vWwhS=~REje%zAUjxTG*g;-Y+*N<`RJo*wkPkc^9bzu#rg5Kh$;X~F zf@s36+4OI1RTr5yzIhRV7h>ZAu|ckOBs6f07)esa)1ua+ZY@Q@8wU2KH_mDOqNxBC z$L{zaM6s-5RCu2VG}p_h6?jovtvf~)gol&yXK8~1pP80T-_S`Gyrh`o*$fm>#t9&>0nsT?sqUepYUW*@QY?IBYhOp4Uh2e)T>Vo!RyIZ=Jr^ zM0hc1^Y;ShD+#yux8VobFpOhKI46cLMq{udj+OJt(7Q3p=>wh)@B$#@`?CY`olkr= z@%}>lB;H!^{uw0{X9vC4l?!Ov^d1m=#|Q(Rl=n`I^&2fpe)k#i z&2WY7gryqlM@#`&u`Jf9TN?xRmHCDt|G)C#JJ>#W^8ZrdlzDS2Y|4NsJ_aAu53z#v{;^f}C% zNn4H{mgv7C)KFclp_SOEdV$CIFdidGH&}%_zUV`xmrgBdmqzJvn&#V+15}a1baH69 z=#t0{S1HU}sd8oDJERXIm{&+CyW|%M4CCT`*!0&Vx=~;g;14dJgcsYCJQRQ(tBsF& z7lm_4z99%MC`0tkF;~JX(XV969x<6bGc%GOJaaUk!GIXP6l|E!&&wdg|Kh*4C}6>#OT& zuWLE0v$1hQXH&z5&c=qi&1ZEsG}QGWqz@r|2NfPX_ibES_rAXVwXJL0 zd|U=x(^=Qu*VEG4Ue~^=WqDm!M{93)XUD2KxN%-y*Mqm9<#p{Xt2(yxZlHpsCQ7-~ zSRs`zZrhHKji@VyA}n(LJ-HCWZz&8*f{g7p|6<(!BF}ycuaJ$BN)O?Z=}Tv$W{kTT zKUoHr*jyqX{jaHFIW?3Y!=yW8_U!P#5hthIIvD{yI9Px94`QnCDqxNTlR@eYxH z(tuI&^w?N#Byt!nM9Qg!CHjb3XqrlBo=R9cm9Wea8mB65Ah^X11h=?>;1)L!BE@a* zU!%)H+_ZK>Pb6$}e@En!w1>F533@idB~0khhifi0_P4f-VAYNjrm?T5 zBXV)Tk!u5vT$=utuAb;g_IGqOq*nE=)w!CmXjx29fA4vz)^3=?u*fDndS4L~DFZlK zhK{bt-GLstHQ-1E2S@7l2Kc&O7tQ%j}Nx%6N@ z02#yj(MkmxGb$kR#DEBSjq@7>N!>bd&<=>MkjwLyY%|$RjOEu)&R<^m$k3 zhYGewEQ?Xt8=-2QLHymaK1OTBRE*De3Mec6J6)pPs?9nV!JtkN#~UXAdA zy=@8~M@Wb9G*fVXRqJ(#=x8&o?Q_|Xa6JuT1S@qY2HD7kVW9N&e79e=4=OoUtUo|k zvFfXWbc!oq6hx8N1Y!M>AYm+^^qYe)=LJE+`>J=^MRvR44Cl$|(Z@)bKlT^|`PYiW zob0(*EL1Rq33#((zu81J0p=}5E@&TI)aTH#_d+QgVyX-aUKy2CWq2u6E7Y0m0yrp~%pY3DM)ICV(SJ z97PR4zT0e_K_wF{7*g`7+JI7^R3DO^R&MeOGu41@vy#nVY?xW~p;)U&XMuH~8rago zrY6a-mM=sHwM>{Zq-DdZkNO%>vNi8~CZzgUSL9_iT*z5%8K(&|eOTiV%OD!44{9K) za&?cq%~reuTY-&BzsgFmyvSPCudy~r+978oWzkr$WQk{MJp;dHUb zFTp~wU~))|1*Uw>LBvyhG+ZVg^nYaDeoTXn?| zo=47lBNI~10Q-V#fBjHdM?_-N#bitw11xqqgBjEeRt7Q7RO^DM@#=DcZ~=` zt6T6Y>mDnH@+19ffBYyKWJZsoLBZIOUNI|6eIpBfhq%_r++y?1ELb!{G;N)&94qh4 zjcqFrd;T8=AlyR@rmyKs(#4$hTnyjGgSlc$v6$XLHHF7+J;ry67FINASYm)icv6PO z(}Qqe+l!S_{^X3AUh(?27h5q0>AMr|>u57yy3*rVK$e@th|D&Ob7M4&6LocUtJ0;M z8`hbJ<+r|!`2!ArQD}7Ozkk}kFJzhxnhZ0LO7G4zDb};IZ(XSRUY$cWv8#FQHY#inf#C(KHBP6x3riu@!#vr*RJu2C~+;fQC8=RrSdAw+8Dx1s_l0h$srZ2DG+xwr=Qb z>F4YO+QAxcTPZd8p8R+tW)SHxHIEiiv~fGub@ZoNd(nDLE?q5sYdzqS#+09VPj}~* zb=_SZEuF^Ico8NAzRbCLoOjH=SmKYGZmIM*jn~M+&`@_KGg0&gCraHzL#@bzRnI(b zIZYdSkDo}PcG10h8E?4oJB=%e7u>eIU*l{Iu!e*Yilb>Wg{AJ1dpnvU_X@9J=@H)q znfJXcsu8LX#*a<+pZRR;n#yQ->~5I1@3eVaL~K@HG%YMlj#fYa*9Pj^`=-fty^ZrT z#o)Q7%m6itmnx0(w{!gcBY#te&$$>w_rKYHas9CZ5oJFs0VzSuW9?|7Ia$9nF)^OS zBR;V-v0#w%0f}YJ^$QdIg~G^L2@J@MbT-cOd(wxh_%WEl)ViM`1#Nx%Ac*&IU z1yel5ba6+jj7qptCVdc&+Bbri!|`Fp;RHoGn=N8EodfGb1q9+N{w?ho9W0EL@NKe~ z8^WI~-&;%gbzKp4eC3K2OBxWE8J}1QJBvlvi@TP9NAjie%H%*N{$PHnWPZMf$y;WK z=ll2s#qPm(W8%PS=}G2o=Sv{+v@i!y4t_h=%=Vl_2%@ooD@zljqd2b;CLKzP{C~@Z za(bk+XkrZW6WK-Eb7NSgj_u=H&l*^p%a5eCHxJq*tUt7;C2X-!;@gt@Bg+E(b{~9= zOP5A%h0B-<*8)bh$PG?x!{3?IlJt0{v@(yS`o&8MMONBu4nLjA;`SG8-KbjpY$CC^ zBRSC9-#&of&u~SVnW9IabEh$*wbtBvsYR2MskYTU1C7asWc@%}&iq25V=OZ=kC zFb8a?<7ir`uzglG%tdUSiyD_KU9@y*QzJ5Po9PgmEe-6()jd#ymMK?1JZq@ihjOEM zz^;Uq&g71-tZCy*2GdQ8@niVIRkd(=Sk=O+HQfm|EUj-`)KI^S#%KDoG?fmM-nQ0- z-*}|__B^V>VY%Hf#jUNTp)6gp%rq1r3b$ef{w-l03Vtu`uh^h*waq7!SX>Bef8_dC zw2eSz)o{<*ZCc&+JV=GRV?f@&`{rsSoDOmQf2aCKjAE5J^i`8od~ zJRA;#weX8zY>D#}HA-wHUZ!QlRsxmU{#-b=5+%Ds$8;9r03LE`s}JU;2glKOSH8gUW?-I!=(&L2ETPVS`3OQ%k&0?QDTD<8}v?Cy9N#!tdNkI7LRlp!u+I%-UcEzR^s z#g7!5mDsGrX62yFir;_^Z%@VMsZER7`Sob&toVhQ-msWBv0aJnN^DmS%C7iZJs;No zil3#nD%}40XfZ0LEYsT*Mu|;IY*J#Aa!@A4Z1#RwEsDtz4r;Ii{E;;yrUccD2Zh*V z#3my)88a{$#-qbDhC)_Dayd!p0mAdWIUHF-V9QX=6!=nX3}Ryt8-p1b1M8#Z0L?+v zuZtJ)%5r2aL$oN>3`8VGY$swn5!;Cw*ojE%nQlB(_a1z65lxEUH_<85k+l|n5vo}U zqr}!Bwhpm%n1OXLt>!?j0)7P@ct%qTz_6$3ku?h8)Gv!t%{WA2#6}`E60wn(fsu%` zo+`#7_(72UA$B$YfnLdMzl5z_>_YS-Z8Iv0Q`K&`v0~d1+m6_F%*1xME$D#lM@2%< z3p{G3;ZgI*_BoPn6e$$zO zeXt39`+#AKqu@=$lwvB|Kryxqv1N!Y!wfA08_o>uf{E_YedH0g2&M$ptO14C62z7u zwgfY<1Z*_ZS%GP`avZ=O&~R7j@RK$ucN^DVLi!uX?Qqh7A#-#X8D+b!=PQ>?1Vchm{yaX02Qy3e{Z#x={ zid&d!CdG*p84(smj#lFCL&>e}Cq?#Gg5n>w>+mP6X%)o}|#&ZY;#JCY}39JX5W*y;CR=)_|6UhgJ+X$ikHdP(CRK9wFEEatWg4HeU)If4AxP(i+r zWkwQj-N7ES{YkXpG3>lQXWNF7}IX#HK<)ZmJRwyHVrZ75+#cK#2wu0x)LNS|6 zVZB=XsXhBb&)av6=N;>LI~j1GALhgVUg0OGWuE6=-~<1iW4|7czl=BA=R_HCUbGtj z=y*In<3Uf1qg-EXU=05wWjhVX{N%%U_Z=e?YG)uw$7@O>)A^P0mO1hIFY&w|eJe~U z-&&n`i6u4O{dZR8*X_jH_kU}=C(o>m$4e!7Q~lBFXL~PB%GC(9yc6&K>yGvIyoD+J zkL0lfSR;Y>JABu%-Y?Jbyc6;L(-4^RT>Q5S|Ji$iZ=Sd2`D4B1ya@Iq`CSc0od`ZV p>uWt;d-+I7Ka2oLL+wVyn{%ba3bpGIq>sDjj#}^LFj|nu{{y#ADq;Wt literal 0 HcmV?d00001 diff --git a/boot_project/Objects/boot.build_log.htm b/boot_project/Objects/boot.build_log.htm new file mode 100644 index 0000000..c6fd0f7 --- /dev/null +++ b/boot_project/Objects/boot.build_log.htm @@ -0,0 +1,116 @@ + + +
+

Vision Build Log

+

Tool Versions:

+IDE-Version: Vision V5.25.2.0 +Copyright (C) 2018 ARM Ltd and ARM Germany GmbH. All rights reserved. +License Information: Zachary Administrator, Zachary, LIC=TIVNB-2IHDY-01WP1-C2K2G-5HIE0-XG8NS + +Tool Versions: +Toolchain: MDK-ARM Plus Version: 5.25.2.0 +Toolchain Path: C:\Keil_v5\ARM\ARMCC\Bin +C Compiler: Armcc.exe V5.06 update 6 (build 750) +Assembler: Armasm.exe V5.06 update 6 (build 750) +Linker/Locator: ArmLink.exe V5.06 update 6 (build 750) +Library Manager: ArmAr.exe V5.06 update 6 (build 750) +Hex Converter: FromElf.exe V5.06 update 6 (build 750) +CPU DLL: SARMCM3.DLL V5.25.2.0 +Dialog DLL: DCM.DLL V1.17.1.0 +Target DLL: Segger\JL2CM3.dll V2.99.29.0 +Dialog DLL: TCM.DLL V1.35.1.0 + +

Project:

+E:\liudagui\project\HONGRI\code\boot_up\boot_project\hongri_boot.uvprojx +Project File Date: 11/04/2024 + +

Output:

+*** Using Compiler 'V5.06 update 6 (build 750)', folder: 'C:\Keil_v5\ARM\ARMCC\Bin' +Rebuild target 'hongri_boot' +assembling startup_stm32f10x_cl.s... +compiling misc.c... +compiling stm32f10x_dma.c... +compiling led.c... +compiling stm32f10x_pwr.c... +compiling stm32f10x_can.c... +compiling stm32f10x_iwdg.c... +compiling stm32f10x_flash.c... +compiling 24cxx.c... +compiling core_cm3.c... +compiling stm32f10x_rcc.c... +compiling stm32f10x_gpio.c... +compiling bsp_i2c_gpio.c... +compiling stm32f10x_it.c... +compiling can2.c... +compiling dev_flashApi.c... +compiling dev_crc32.c... +compiling dev_eerom.c... +compiling system_stm32f10x.c... +compiling dev_sys.c... +compiling UDS.c... +compiling iso15765-2_entry.c... +compiling Can_Transceiver.c... +compiling Diag_Eeprom_C301.c... +compiling iso15765-2.c... +compiling CanCtrl_C301.c... +compiling CanConfig_C301.c... +compiling UDS_SA_C301.c... +..\boot_source\code_app\service\CanStack\canBus_hongri\UDS_SA_C301.c(48): warning: #177-D: function "BL_BE32_TO_MCU" was declared but never referenced + static uint32_t BL_BE32_TO_MCU(uint8_t *pBuf) +..\boot_source\code_app\service\CanStack\canBus_hongri\UDS_SA_C301.c: 1 warning, 0 errors +compiling app_can.c... +compiling main.c... +..\boot_source\code_app\main\src\main.c(163): warning: #188-D: enumerated type mixed with another type + RCC_APB1PeriphClockCmd (RCC_APB1Periph_PWR | RCC_APB1Periph_BKP,ENABLE );// +..\boot_source\code_app\main\src\main.c(164): warning: #188-D: enumerated type mixed with another type + PWR_BackupAccessCmd(ENABLE);// +..\boot_source\code_app\main\src\main.c(198): warning: #188-D: enumerated type mixed with another type + TimeTaskData.F_Time_1MS = RESET; +..\boot_source\code_app\main\src\main.c(207): warning: #188-D: enumerated type mixed with another type + TimeTaskData.F_Time_5MS = RESET; +..\boot_source\code_app\main\src\main.c(213): warning: #188-D: enumerated type mixed with another type + TimeTaskData.F_Time_10MS = RESET; +..\boot_source\code_app\main\src\main.c(222): warning: #188-D: enumerated type mixed with another type + TimeTaskData.F_Time_20MS = RESET; +..\boot_source\code_app\main\src\main.c(226): warning: #188-D: enumerated type mixed with another type + TimeTaskData.F_Time_50MS = RESET; +..\boot_source\code_app\main\src\main.c(230): warning: #188-D: enumerated type mixed with another type + TimeTaskData.F_Time_100MS = RESET; +..\boot_source\code_app\main\src\main.c(234): warning: #188-D: enumerated type mixed with another type + TimeTaskData.F_Time_1000MS = RESET; +..\boot_source\code_app\main\src\main.c(89): warning: #177-D: function "Task_RunToAppCheckValide" was declared but never referenced + static uint8_t Task_RunToAppCheckValide(void) +..\boot_source\code_app\main\src\main.c: 10 warnings, 0 errors +compiling Diag_Appl_C301.c... +..\boot_source\code_app\driver\inc\dev_eerom.h(32): warning: #1-D: last line of file ends without a newline + /** EOF */ +..\boot_source\code_app\service\CanStack\canBus_hongri\Diag_Appl_C301.c(1329): warning: #177-D: variable "crc32" was declared but never referenced + uint32_t crc32=0; +..\boot_source\code_app\service\CanStack\canBus_hongri\Diag_Appl_C301.c(2026): warning: #550-D: variable "CRC_16" was set but never used + uint16_t CRC_16=0xFFFF; +..\boot_source\code_app\service\CanStack\canBus_hongri\Diag_Appl_C301.c(2121): warning: #223-D: function "GetCrc32Chk" declared implicitly + if(GetCrc32Chk() == transSequenceValue) +..\boot_source\code_app\service\CanStack\canBus_hongri\Diag_Appl_C301.c(289): warning: #177-D: function "Diag_ExtMemorySecFAAFlagSave" was declared but never referenced + static void Diag_ExtMemorySecFAAFlagSave(uint8_t cnt) +..\boot_source\code_app\service\CanStack\canBus_hongri\Diag_Appl_C301.c: 5 warnings, 0 errors +linking... +Program Size: Code=22124 RO-data=980 RW-data=252 ZI-data=12716 +FromELF: creating hex file... +".\Objects\boot.axf" - 0 Error(s), 16 Warning(s). + +

Software Packages used:

+ +Package Vendor: Keil + http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.1.0.pack + Keil.STM32F1xx_DFP.2.1.0 + STMicroelectronics STM32F1 Series Device Support, Drivers and Examples + +

Collection of Component include folders:

+ .\RTE\_hongri_boot + C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include + +

Collection of Component Files used:

+Build Time Elapsed: 00:00:06 +
+ + diff --git a/boot_project/Objects/boot.hex b/boot_project/Objects/boot.hex new file mode 100644 index 0000000..57be32b --- /dev/null +++ b/boot_project/Objects/boot.hex @@ -0,0 +1,1463 @@ +:020000040800F2 +:10000000A832002085010008153E00088D2A00084E +:10001000113E0008FD020008F9540008000000002D +:10002000000000000000000000000000394200084D +:100030006F10000800000000B53E00086143000892 +:100040009F0100089F0100089F0100089F01000810 +:100050009F0100089F0100089F0100089F01000800 +:100060009F0100089F0100089F0100089F010008F0 +:100070009F0100089F0100089F0100089F010008E0 +:100080009F0100089F0100089F0100089F010008D0 +:100090009F0100089F0100089F0100089F010008C0 +:1000A0009F0100089F0100089F0100089F010008B0 +:1000B0009F0100089F0100089F0100089F010008A0 +:1000C0009F0100089F0100089F0100089F01000890 +:1000D0009F0100089F0100089F0100089F01000880 +:1000E0009F0100089F0100089F0100080000000018 +:1000F0000000000000000000000000000000000000 +:1001000000000000000000009F0100089F0100089F +:100110009F0100089F0100089F0100089F0100083F +:100120009F0100089F0100089F0100089F0100082F +:100130009F0100089F0100089F0100089F0100081F +:100140009F010008B9040008E90400089F010008A5 +:10015000DFF80CD000F04CF800480047E9560008E2 +:10016000A8320020EFF30980704780F309887047B8 +:10017000EFF30880704780F30888704740BA7047F3 +:10018000C0BA70470648804706480047FEE7FEE7CA +:10019000FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE737 +:1001A000214400085101000840EA01039B0703D0E5 +:1001B00009E008C9121F08C0042AFAD203E011F8A6 +:1001C000013B00F8013B521EF9D27047D2B201E068 +:1001D00000F8012B491EFBD270470022F6E710B54C +:1001E00013460A4604461946FFF7F0FF204610BDA5 +:1001F000064C074D06E0E06840F0010394E8070074 +:1002000098471034AC42F6D3FFF7A6FF205A0008F7 +:10021000405A00080FB470B5049D9DF81A000828D4 +:1002200002DD08208DF81A000C49049808609DF83A +:100230001A008872002407E00DF11B00015D0748D9 +:100240000B300155601CC4B29DF81A00A042F3DCCB +:10025000284600F005F870BC5DF814FB802A0020E9 +:1002600070B5044603254FF6D0702040B0F5806F7E +:1002700004D1012500201149086010E040F2DF7030 +:10028000844203D040F20B70844204D10225002046 +:100290000A49086003E00325002008490860012D91 +:1002A00004D0022D03D0032D05D103E004E002F0B9 +:1002B000EBFE01E000E000BF00BF70BDF0000020D9 +:1002C00010B501214FF0C05003F0F6FD012003F0FE +:1002D000EBFD10BD00BF0748006800F4E060064970 +:1002E0000843001D03490860BFF34F8F00BF00BFE4 +:1002F000FEE700000CED00E00000FA0500BFFEE79D +:1003000002480068C043014908607047D8000020D7 +:1003100000B50648006838B901200549086005485D +:100320000249086005F0EAF800BD0000E000002086 +:10033000DC0000202083B8ED4FF0FF300149086059 +:1003400070470000D800002030B503460C4609482D +:100350000268002108E0605C5040C5B2064850F8D1 +:10036000250080EA1222491C9942F4D30148026018 +:10037000002030BDD80000208026002000B589B0C4 +:100380000121092003F0B8FD0121480603F094FD86 +:100390000121880603F090FD4FF40050ADF82000D5 +:1003A00003208DF8220018208DF8230008A940486A +:1003B00002F08FFA4FF48050ADF8200048208DF8FD +:1003C000230008A93A4802F084FA00208DF81A00A8 +:1003D00001208DF81B0000208DF81C008DF81D00F9 +:1003E0008DF81E008DF81F008DF8160001208DF885 +:1003F000170008208DF8180001208DF8190006203C +:10040000ADF8140005A92B4800F0B9FA0E208DF8BC +:100410000E0000208DF80F0001208DF81000002044 +:10042000ADF80400ADF80600ADF80800ADF80A001C +:100430000120ADF80C008DF8110001A800F046F97C +:10044000012210211B4800F091FA41208DF8000094 +:1004500001208DF8010000208DF8020001208DF8A8 +:100460000300684603F0DEFC012005F0A9F8012234 +:100470005102104800F07AFA012291020D4800F072 +:1004800075FA0122D1030B4800F070FA42208DF872 +:10049000000001208DF8010000208DF802000120ED +:1004A0008DF80300684603F0BDFC002009B000BDD4 +:1004B000000C01400068004000B587B0012005F045 +:1004C0008BF802AA0121074800F0E3FA0698009091 +:1004D00002A80FC8FFF79EFE142102A8FFF77DFEB9 +:1004E00007B000BD0068004010B54FF400712D4802 +:1004F00000F0ACF9012820D12B492A4800F06AF914 +:10050000012815D100BF022808DA284911F8301057 +:1005100021B1264911F83010032900D104E002214D +:10052000224A02F8301000BF1F491E4800F042F86E +:100530004FF400711B4800F059F84FF480611948DE +:1005400000F084F901282BD11749891C154800F0C7 +:1005500041F901281FD10124022C03DA134810F8B5 +:10056000340000B912E00320104901F8340001EB17 +:10057000C401081D002103F0A1FF1CB90C4800F0C4 +:1005800089F802E0074800F085F800BF0649891C99 +:10059000044800F00FF84FF48061024800F026F89C +:1005A00010BD0000006800400200F010FC000020B8 +:1005B0000064004000220C4B994202D10023836169 +:1005C00011E0C1F3130201F000730BB1C2600AE045 +:1005D00001F080630BB1026105E001F000630BB133 +:1005E000826000E0426070477000F030B1F5007F3B +:1005F0003AD00FDC202928D006DC01291CD00429A0 +:100600001DD0082940D11DE0402921D0B1F5807FBF +:100610003AD126E0B1F5004F31D006DCB1F5806F5C +:1006200025D0B1F5006F2FD124E0B1F5803F12D075 +:10063000B1F5003F28D111E0154A826025E008227B +:10064000C26022E01022C2601FE0082202611CE0AA +:100650001022026119E00822426016E01022426076 +:1006600013E00422426010E0042242600DE0042204 +:1006700042600AE0002282610422426005E000221A +:1006800082610422426000E000BF00BF70470000AA +:100690000101010010B504460B48844209D1012133 +:1006A000480603F019FC00214FF0007003F014FC21 +:1006B00008E00121880603F00FFC00214FF0806064 +:1006C00003F00AFC10BD00000064004010B50021DA +:1006D000837A012202FA03F13D4A126842F00102D4 +:1006E0003B4B1A603A4A1C3212688A43384B1C331F +:1006F0001A60027BCAB9364A0C3212688A43344BFC +:100700000C331A604288C38842EA0343304A4032BD +:10071000847A42F834300288838842EA03432C4AC0 +:100720004032847A02EBC4025360027B012A19D161 +:10073000274A0C3212680A43254B0C331A60428850 +:10074000038842EA0343224A4032847A42F8343032 +:10075000C288838842EA03431D4A4032847A02EB0E +:10076000C4025360C27A3AB9194A121D12688A4308 +:10077000174B1B1D1A6006E0154A121D12680A432A +:10078000134B1B1D1A60028932B9114A14321268C8 +:100790008A430F4B14331A600289012A06D10C4A8E +:1007A000143212680A430A4B14331A60427B012A3E +:1007B00006D1074A1C3212680A43054B1C331A60E3 +:1007C000034A126822F00102014B1A6010BD0000BA +:1007D0000066004010B50246002001F4700343B1EA +:1007E0009369C1F3130423400BB101202DE00020D5 +:1007F0002BE001F0807343B15368C1F3130423402D +:100800000BB1012021E000201FE001F0006343B1A3 +:100810009368C1F3130423400BB1012015E00020BD +:1008200013E001F0007343B1D368C1F31304234014 +:100830000BB1012009E0002007E01369C1F31304A4 +:1008400023400BB1012000E0002010BD70B504462C +:100850000D46002660692840002871D0B5F5807FDC +:100860005CD010DC082D35D006DC012D20D0022D07 +:1008700024D0042D72D127E0102D31D0202D35D079 +:10088000402D6BD138E0B5F5004F60D009DCB5F5EF +:10089000007F49D0B5F5806F4CD0B5F5006F5DD1C4 +:1008A0004FE0B5F5803F2DD0B5F5003F56D12FE094 +:1008B000A0682D4900F0D2FB064651E0E068032114 +:1008C00000F0CCFB06464BE0E068082100F0C6FBD8 +:1008D000064645E0E068102100F0C0FB06463FE018 +:1008E0002069032100F0BAFB064639E0206908219F +:1008F00000F0B4FB064633E02069102100F0AEFBA7 +:1009000006462DE06068082100F0A8FB064627E0B7 +:100910006068102100F0A2FB064621E0A0690121D9 +:1009200000F09CFB06461BE0A069022100F096FB4C +:10093000064615E0A069042100F090FB06460FE092 +:100940000FE0A069702100F089FB064608E06068AE +:10095000042100F083FB064602E0FFE7002600BF0B +:1009600000E00026304670BD010101001AB1436964 +:100970000B43436102E043698B434361704730B5E9 +:10098000024600200023146824F002041460146856 +:1009900044F00104146000E05B1C546804F001049E +:1009A0001CB94FF6FF74A342F6D1546804F0010459 +:1009B0000CB900206CE08C79012C04D1146844F04F +:1009C0008004146003E0146824F080041460CC797F +:1009D000012C04D1146844F04004146003E014684E +:1009E00024F0400414600C7A012C04D1146844F003 +:1009F0002004146003E0146824F0200414604C7A8E +:100A0000012C04D1146844F01004146003E014684D +:100A100024F0100414608C7A012C04D1146844F082 +:100A20000804146003E0146824F008041460CC7A0D +:100A3000012C04D1146844F00404146003E0146829 +:100A400024F0040414608C78A407CD7844EA05648B +:100A50000D7944EA05444D7944EA05540D886D1E2C +:100A60002C43D461146824F001041460002300E0D6 +:100A70005B1C546804F001041CB14FF6FF74A342E0 +:100A8000F6D1546804F001040CB1002000E001200C +:100A900030BD10B500F5D87303EB01131B6803F0EC +:100AA00004031372137A53B900F5D87303EB0113DF +:100AB0001B6840F2FF7404EA5353136009E000F529 +:100AC000D87303EB01131B686FF0604404EAD3038F +:100AD000536000F5D87303EB01131B6803F00203A6 +:100AE000537200F5D87303EB01135B6803F00F0337 +:100AF000937200F5D87303EB01135B681B0AD37480 +:100B000000F5D87303EB01139B68D37200F5D8731B +:100B100003EB01139B681C0A147300F5D87303EBF5 +:100B200001139B681C0C547300F5D87303EB01137D +:100B30009B681B0E937300F5D87303EB0113DB68FE +:100B4000D37300F5D87303EB0113DB681C0A14742C +:100B500000F5D87303EB0113DB681C0C547400F52B +:100B6000D87303EB0113DB681B0E937421B9C368C0 +:100B700043F02003C36003E0036943F020030361F3 +:100B800010BD10B502460020936803F08063B3F1F6 +:100B9000806F00D110E0936803F00063B3F1006F41 +:100BA00001D1012008E0936803F08053B3F1805F26 +:100BB00001D1022000E00420042874D002F5C073A3 +:100BC00003EB00131B6803F0010402F5C07303EB91 +:100BD00000131C600B7A7BB94B7A0C8843EA4453B0 +:100BE00002F5C07404EB00142468234302F5C074BA +:100BF00004EB0014236010E00B7A4C6843EAC40352 +:100C00004C7A234302F5C07404EB00142468234398 +:100C100002F5C07404EB001423608B7A03F00F0319 +:100C20008B7202F5C07303EB00135B6823F00F04B3 +:100C300002F5C07303EB00135C6002F5C07303EBB5 +:100C400000135B688C7A234302F5C07404EB001434 +:100C500063608B7B1C064B7B44EA03440B7B44EABA +:100C60000323CC7A234302F5C07404EB0014A36081 +:100C70008B7C1C064B7C44EA03440B7C44EA032334 +:100C8000CC7B234302F5C07404EB0014E36002F54F +:100C9000C07303EB00131B6843F0010402F5C0733B +:100CA00003EB00131C6010BD10B50246002321B1F8 +:100CB000012907D002290FD109E090681D4C00EAF4 +:100CC00004030BE090681C4C00EA040306E0906803 +:100CD0001A4C00EA040301E0002300BF00BF184CD7 +:100CE000181BA34216D007DC83B16FF08060184454 +:100CF00070B1022818D111E0B0F5007F10D0114C6E +:100D0000204448B1B0F5003F0ED10BE002230DE0C6 +:100D100000230BE0002309E0002307E0012305E0A6 +:100D2000012303E0012301E0002300BF00BFD8B28C +:100D300010BD0000030000040003000800000310C1 +:100D4000000100080001FFF70FB430B585B00024A2 +:100D5000142208A96846FFF727FA012004F050FC86 +:100D600020B9012005B030BC5DF814FB69460E487F +:100D7000FFF707FF0546002401E0601C84B2012054 +:100D800004F03EFC40B129460748FFF78DFF18B933 +:100D900040F6FF708442F0DB40F6FF70844201DBD6 +:100DA0000120DFE70020DDE70068004010B50020EB +:100DB00000F00AF910BD70473048407820F040003C +:100DC0002E4948700846407820F0200048700846B8 +:100DD000407820F0100048700846807820F00F001E +:100DE00088700846807820F0F00088700846007807 +:100DF00020F0010008700846007820F00800087014 +:100E00000846007820F0040008700846007820F0BA +:100E1000020008700846007820F02000087008469C +:100E2000007820F0100008700846007820F080005C +:100E300008700846007820F04000087008464078A6 +:100E400020F0010048700846407820F00200487009 +:100E50000846407820F00400487000204871C1F82E +:100E6000F000C1F8F400C1F8F800C1F8FC00C1F8C6 +:100E7000EC004FF6FF70A1F8E600704770150020F7 +:100E80000148007870470000F600002010B50024EB +:100E9000002012490870124908701249087012495E +:100EA000087072B6FFF788FF00240DE000200F499C +:100EB00008550F4908552146012001F041FE204602 +:100EC00001F030FE601CC4B2012CEFDB00F09AF898 +:100ED00001F0BEFF03F0A8FD62B610BDF7000020D0 +:100EE000F6000020F8000020F5000020F9000020A6 +:100EF000FA0000200949097842290DD107494978AB +:100F00004F2909D105498978452905D10349C9786F +:100F1000522901D1012000E0002070478E000020FE +:100F200010B506480078002806DD04480078401E09 +:100F30000249087003F0D2FC10BD0000F800002048 +:100F400002480078401C014908707047F6000020F4 +:100F50000149087070470000F500002010B5FFF748 +:100F60002AFF02F0E5FC04F045F9FFF7E9FFFFF77F +:100F7000D7FF10BD10B503480078012801D104F057 +:100F800029F910BDF700002000204FF4AC7000E0FC +:100F9000401E0028FCD1704710B50446012C00DB30 +:100FA00010BD44B98021064801F068FD10210548B4 +:100FB00001F064FD00E000BF00BF00BFF0E70000EB +:100FC00000100140000C014010B50446012C00DB6C +:100FD00010BD74B91021094801F04EFD8021084868 +:100FE00001F04CFDFFF7D0FF8021054801F044FDE2 +:100FF00000E000BF00BF00BFEAE70000000C0140B6 +:101000000010014010B50020FFF7C6FF10BD000022 +:1010100010B500240F480078012817D1FFF79EFF74 +:101020000D480068B0F5FA6F0AD3FFF7BFFE06E07F +:10103000601C84B2B4F5487F01DBFFF74BF9F7E79A +:1010400005480068401C0449086002E0012001498D +:10105000087010BDF7000020F000002002460020BC +:1010600002EA01030BB1012000E000207047704745 +:101070000120014908707047C200002070B5044685 +:10108000012501F0FDFCA04200D10025284670BDDD +:1010900038B502221021684604F0C8FA0546012D31 +:1010A00001D0002038BD002409E01DF8040006A18D +:1010B000095D884201D00020F4E7601CC4B2022C14 +:1010C000F3DB0120EEE700004852000010B50548B0 +:1010D000807800F00F00012802D1FFF7D9FF10BD82 +:1010E0000120FCE77015002000200549897801F0F7 +:1010F0000F01012901D1012000E00120704700000B +:101100007015002002460020A2F57143843B73B99C +:101110000B78632B01DD012008E04B783C2B01DDCF +:10112000012003E08B781F2B00DD012000E000BFD1 +:1011300000BF704770B5054604F0BCFA72B68B2D3F +:1011400006D10E480068012182680D48904711E0E1 +:101150002E2D0FD1002404E0AA200A490855601C56 +:10116000C4B2082CF8DB054800680822054943682A +:101170000348984704F0A6FA62B670BD2800002024 +:1011800000380208A8000020002004E0AA21034A39 +:101190001154411CC8B20828F8DB70478E000020AB +:1011A000012802D0022800D000BF7047012802D0D9 +:1011B000022800D000BF70472DE9F0410446207995 +:1011C000401CC6B22068477820688578032E03DC6F +:1011D000132003F0BBFF44E037B1032F1BD0802F57 +:1011E00003D0832F2ED117E000BF042E05D013208B +:1011F00003F0ACFF03F0B6FC32E00220A081032D27 +:1012000001DC012D03DA312003F0A0FF02E02846C3 +:10121000FFF7CCFF24E000BF042E05D0132003F01D +:1012200095FF03F09FFC1BE00220A081032D01DC51 +:10123000012D03DA312003F089FF02E02846FFF791 +:10124000AFFF0DE003F006FA18B1802003F0BCFFF9 +:1012500005E0002003F0B8FF122003F077FF00BF85 +:1012600000BF03F037FCBDE8F08170B5044620797B +:10127000401CC6B22068457825F08005022E03D1B7 +:10128000132003F063FF1FE0012D02D0022D0CD1CB +:1012900000E000BF032E05D0132003F057FF03F03A +:1012A00061FC10E00220A0810DE003F0D3F918B139 +:1012B000802003F089FF05E0002003F085FF122065 +:1012C00003F044FF00BF00BF03F004FC70BD00004A +:1012D00070B50246002028E00D5C2B02002421E0BE +:1012E000134DB5F8E6505D4005F4004555B1104D7D +:1012F000B5F8E65041F2210686EA45050C4EA6F8FF +:10130000E65009E00A4DB5F8E6504FF6FF7606EADA +:101310004505074EA6F8E6504FF6FF7505EA43036C +:10132000651CECB2082CDBDB401C9042D4D370BDB2 +:10133000701500202DE9F04105460E4617464FF086 +:1013400000081448807800F00F00012805D01148EB +:10135000807800F00F00022814D104F0ABF972B6C7 +:101360000D4800683A46314643682846984780460B +:1013700004F0A8F962B6B8F1000F01D1002402E030 +:10138000012400E0012414B90120BDE8F08100200F +:10139000FBE70000701500202800002070B504460F +:1013A0002079401CC5B22068467826F08006022DC0 +:1013B00003DC132003F0CAFE2FE0012E02D0032E1F +:1013C0001CD10DE0032D05D0132003F0BFFE03F068 +:1013D000C9FB04E00220A0810A20114908701BE02B +:1013E000032D05D0132003F0B1FE03F0BBFB04E096 +:1013F0000220A0810A200B4908700DE003F02AF9B1 +:1014000018B1802003F0E0FE05E0002003F0DCFED0 +:10141000122003F09BFE00BF00BF03F05BFB70BD1A +:1014200044000020450000202DE9F05F06460F46ED +:1014300090461B48B0F8E84000252BE04FF44830B8 +:10144000B5FBF0F100FB115010B9404603F02EFA45 +:1014500017F805B04FEA0B294FF0000A16E084EAAE +:10146000090000F4004028B141F2210080EA440064 +:1014700084B203E04FF6FF7000EA44044FF6FF70B9 +:1014800000EA49090AF1010000F0FF0ABAF1080F69 +:10149000E5DB6D1CB542D1D32046BDE8F09F0000CE +:1014A00070150020704710B50346002003E01C5C57 +:1014B0000C54441CE0B29042F9DB10BD10B5034659 +:1014C000002002E00C5C1C54401C9042FAD310BD7A +:1014D0001D48007820F0800080301B4908700020F3 +:1014E000C1F8EC00C1F8F400C1F8F00008464078FB +:1014F00020F0010048700846007820F002000870D3 +:101500000846007820F0040008700846007820F0B3 +:10151000200008700846007820F001000870084696 +:10152000007820F0080008700846407820F010008D +:1015300048700846807820F00F0088700846807850 +:1015400020F0F000887070477015002070B50646D6 +:101550000C461546224629463046FFF7AFFF70BDC0 +:101560002DE9F04F9BB007464FF00008C34600241A +:101570003879401C00F0FF0801201A90B8F1040FE0 +:101580000FD0B8F1060F0CD0B8F1080F09D0B8F1A0 +:101590000A0F06D0B8F10C0F03D0132003F0D6FDCC +:1015A00083E04FF0010BBBF1050F01DD4FF0050BA0 +:1015B000012400255BE0012101EB45013868405C16 +:1015C0000DF804001DF804004FEA002A601CC4B2A4 +:1015D000022101EB45013868405C0DF804001DF85C +:1015E000040040EA0A0A601CC4B2002019900026D8 +:1015F0002DE0304800EB06100088504525D1012031 +:1016000019902C4800EB0610407A012803D12A4992 +:1016100051F8260080474FF000090DE0254800EB07 +:101620000610406810F809000DF80400601CC4B2F0 +:1016300009F1010000F0FF091E4800EB0610007AD6 +:101640004845EBDC00201A9003E0701CC6B2052E62 +:10165000CFDB00BF03F050F910B100201A9008E072 +:10166000199810B901201A9003E0681CC5B25D45B5 +:10167000A1DB00BFBC81012505E01DF80500B968AC +:101680004855681CC5B2A542F7DB1A9801280CD151 +:1016900002F0E0FF18B1802003F096FD05E0002085 +:1016A00003F092FD312003F051FD03F013FA1BB05B +:1016B000BDE8F08FB8590008085A0008002005E07E +:1016C0000449095C044A1154411CC8B20528F7DBDF +:1016D0007047000033580008B0000020002005E0EB +:1016E0000449095C044A1154411CC8B20928F7DBBB +:1016F000704700002A5800083D150020002004E033 +:10170000FF21034A1154411CC8B20628F8DB704778 +:10171000B500002070470000002005E00449095C86 +:10172000044A1154411CC8B20928F7DB7047000075 +:1017300021580008341500202DE9FC410446257984 +:1017400020684678206887780B2D03D0132003F09B +:10175000FDFC46E10EB9442F03D0312003F0F6FC26 +:101760003FE1C5480078C0F3400018B1702003F095 +:10177000EDFC36E12068C0788DF80400206800791F +:101780008DF80500206840798DF806002068807982 +:101790008DF807002068C0798DF800002068007A75 +:1017A0008DF801002068407A8DF802002068807A68 +:1017B0008DF803009DF8040000069DF8051000EB6D +:1017C00001409DF8061000EB01209DF80710084429 +:1017D000A949C1F8F8009DF8000000069DF8011025 +:1017E00000EB01409DF8021000EB01209DF8031072 +:1017F0000844A149C1F8FC0008460078C0F3C000C5 +:10180000002857D10846D0F8FC00B0F5805F0AD810 +:101810000846D0F8F800401C28B10846D0F8F80077 +:101820009649884203D0312003F090FCD9E09248D9 +:10183000D0F8F8009149884207D18F48807820F08D +:10184000F00010308C4988700CE08B48D0F8F8001C +:101850008B49884206D18848807820F0F0002030FB +:10186000854988708448007820F008000830824953 +:1018700008700846007820F00200801C08700020E4 +:10188000C1F8EC00C1F8F000C1F8F4004FF6FF70A9 +:10189000A1F8E6002020A16848700420A1688870A3 +:1018A0000020A168C8700420A081FEF731FDFEF77A +:1018B00043FD96E07048D0F8F800724988420FD096 +:1018C0006D48D0F8F800B0F5601F09D06A48D0F82C +:1018D000F800B0F1805F03D0312003F037FC7AE0EC +:1018E0006548D0F8F8006749884205D16248D0F8C9 +:1018F000FC00B0F5CC3F17D85F48D0F8F800B0F541 +:10190000601F05D15C48D0F8FC00B0F5002F0BD863 +:101910005948D0F8F800B0F1805F09D15648D0F8A6 +:10192000FC00B0F1806F03D9312003F00FFC52E0CE +:1019300051484078C0F3800018B9222003F006FC1B +:1019400049E04D48D0F8F8004E49884207D14A484E +:10195000807820F00F00401C474988701AE0464804 +:10196000D0F8F800B0F5601F07D14348807820F028 +:101970000F00801C404988700CE03F48D0F8F80008 +:10198000B0F1805F06D13C48807820F00F00801CC9 +:10199000394988703848007820F00200801C3649A8 +:1019A00008700020C1F8EC00C1F8F000C1F8F400A4 +:1019B0004FF6FF70A1F8E6002020A16848700420CF +:1019C000A16888700020A168C8700420A081FEF77B +:1019D0009FFCFEF7B1FC2848007820F0080026495B +:1019E000087002F089FF98B32348007820F00200C5 +:1019F000214908700846007820F040000870084629 +:101A0000007820F0800008700846407820F001003F +:101A100048700846807820F00F008870084680786B +:101A200020F0F00088700020C1F8F800C1F8FC0038 +:101A3000C1F8F4004FF6FF70A1F8E6000020C1F8ED +:101A4000EC00C1F8F000887500210B48C1750176E3 +:101A50000948007820F010000749087008464078CF +:101A600020F0100048700846407820F020004870B0 +:101A700003F030F8BDE8FC817015002000F0002074 +:101A800000D8BFFE00A000082DE9F04105460E4633 +:101A900000270F48854214D1B6F5CC3F11D803F08A +:101AA00009FE72B60B4800683321826808489047E7 +:101AB000074603F007FE62B60FB9002402E00124D6 +:101AC00000E0012414B90120BDE8F0810020FBE70B +:101AD00000A000082800002070B504464FF6FF76ED +:101AE0002579012D03D0132003F030FB86E0454813 +:101AF000007800F0010040B142484078C0F3800017 +:101B000018B9222003F022FB78E03E480078C0F3A9 +:101B1000400020B13B484078C0F3001018B92420A1 +:101B200003F014FB6AE03748007820F01000103012 +:101B3000344908700846407820F010004870084684 +:101B4000007820F0200008700846007820F002009D +:101B500008700846407820F0040048700846407835 +:101B600020F02000487000204871C1F8EC00C1F856 +:101B7000FC00C1F8F8000846007800F0010010B938 +:101B80000020C1F8F4001F480078C0F3C00018B16D +:101B90001C48B0F8E6602DE01A48807800F00F008D +:101BA000012808D117493722D1F8F4001649FFF768 +:101BB0003BFC06461EE01348807800F00F00022828 +:101BC00009D110493722D1F8F4004FF46011FFF722 +:101BD0002BFC06460EE00B48807800F00F00022830 +:101BE00008D108493722D1F8F4004FF08051FFF7AF +:101BF0001BFC0646FEF784FB0120A08102F06AFF71 +:101C000070BD00007015002000A000082DE9FC5FE9 +:101C100004464FF0000B2579206846782068C0788C +:101C20002168897800EB01201FFA80FA042D06DA7A +:101C3000132003F08BFA02F04DFFBDE8FC9F5046E5 +:101C4000BAF57F4F73D009DCA0F2022040B3A0F5B3 +:101C50005C40A0F5EF7000286AD107E06FF47F4187 +:101C60000844002877D00128F6D168E002F036FE5B +:101C7000032803D07F2003F069FA10E0052D03D07C +:101C8000132003F063FA0AE0012E03D0122003F0C0 +:101C90005DFA04E00020A16808710520A08169E1D7 +:101CA0002068007900062168497900EB014021682D +:101CB000897900EB01202168C97900EB0109082D21 +:101CC00003D0132003F042FA38E0012E03D0122093 +:101CD00003F03CFA32E0AA480078C0F3001018B9CB +:101CE000222003F033FA29E0312002F0DFFD4846DC +:101CF000FFF7C4F9E8B9A248807800F00F00012886 +:101D000002D19F49C87002E001209D4908719C489A +:101D1000007820F010009A4908700846007820F0FA +:101D20000100401C08700020A168087104E025E053 +:101D300012E10120A16808710520A0811AE102F0DA +:101D4000CDFD032808D002F0C9FD022804D07F2071 +:101D500003F0FCF911E0B7E0042D03D0132003F0E9 +:101D6000F5F90AE0012E03D0122003F0EFF904E0A8 +:101D70000020A16808710520A081FBE00D2D03D192 +:101D800020680079442803D0132003F0DFF99AE09B +:101D9000012E03D0122003F0D9F994E02068407995 +:101DA0008DF80400206880798DF805002068C079DE +:101DB0008DF806002068007A8DF807002068407AC8 +:101DC0008DF800002068807A8DF801002068C07AC4 +:101DD0008DF802002068007B8DF803009DF8040058 +:101DE00000069DF8051000EB01409DF8061000EB81 +:101DF00001209DF8071047189DF8000000069DF887 +:101E0000011000EB01409DF8021000EB01209DF84D +:101E1000031000EB01085B48874251D1B8F5CC3F75 +:101E200005D8574880780121B1EB101F18D05448CD +:101E3000007820F00200524908700846007820F02F +:101E4000080008700846407820F0400048700846B6 +:101E5000807820F0F0008870312003F077F932E0CC +:101E6000312002F023FD41463846FFF70DFE0128E0 +:101E700022D14348407820F00400001D40494870BA +:101E80000846407820F0400048700846407820F02E +:101E90000800487000F06AFA8B20FFF74BF9002029 +:101EA000A16808710520A0813548007820F0010064 +:101EB000401C3349087006E0722003F047F902E045 +:101EC000312003F043F955E0042D03D0132003F033 +:101ED0003DF940E0012E03D0122003F037F93AE03B +:101EE00027484078C0F3801018B9222003F02EF95B +:101EF00031E0FFF7EBF8012821D1FFF7F5F80128D1 +:101F00001DD11F480079012819D11D48C07801282A +:101F100015D1FFF739F92E20FFF70CF91848407852 +:101F200020F008000830164948700020A1680871A8 +:101F30000520A081002012490871C87002E022200B +:101F400003F004F900200E49C1F8F4000846807837 +:101F500020F00F0088700DE002F07CFB18B18020AB +:101F600003F032F905E0002003F02EF9312003F0F0 +:101F7000EDF800BF00BF02F0ADFD00BF5DE6000060 +:101F80007015002000A000082DE9FE43054602F070 +:101F9000ABFC07462879401CC6B2286890F801803F +:101FA000022E03DC132003F0D1F8CDE1B8F1010FCC +:101FB00009D0B8F1020F6CD0B8F1050F6FD0B8F1AD +:101FC000060F6DD13EE1012F03D17F2003F0BEF853 +:101FD0005EE0032E03D0132003F0B8F858E0DC488D +:101FE000007801280ED1A9684870002405E000217E +:101FF000A01CAA681154601CC4B2042CF7DB062094 +:10200000A88145E0D348007A012803D0D148807ADE +:10201000012803D1372003F099F839E00120A9689D +:102020004870CD480078012812D1CA48007B0328A7 +:102030000EDB362003F08AF80120C64988720020A2 +:102040008880C648007810B90120C44908707AE138 +:10205000C148007810B9C24802F0BEF8002406E07A +:10206000BF48015DA01CAA681154601CC4B2042CB6 +:10207000F6DB02ABBB4A0421B94802F025F8002088 +:10208000B449087208800120B34908700620A8816D +:1020900059E1012F05D17F2003F058F868E068E08E +:1020A00043E1072E03D0132003F050F860E0AA4864 +:1020B0000078012859D10020A7490870A548807AE6 +:1020C000012803D1362003F041F849E0002406E05E +:1020D000A01C2968085C0DF80400601CC4B2042C24 +:1020E000F6DB9DF800008DF804009DF801008DF8E6 +:1020F00005009DF802008DF806009DF803008DF89C +:102100000700042201A9974801F0CCFF90B10220FA +:10211000A9684870A881002003F01EF801208C49AE +:10212000087000208D4908708A49087302208E4982 +:10213000087015E0352003F009F88648007B401C44 +:10214000844908730846007B032809DB0120887254 +:10215000002088808148007810B901207F490870EC +:1021600000207C490880087202E0242002F0EEFF83 +:10217000E9E0012F03D17F2002F0E8FF61E0032EA8 +:1021800003D0132002F0E2FF5BE0714840780128A1 +:102190000FD10520A9684870002405E00021A01C8B +:1021A000AA681154601CC4B2042CF7DB0620A88175 +:1021B00047E06848407A012803D06648C07A012881 +:1021C00003D1372002F0C2FF3BE00520A968487028 +:1021D00061484078012812D15E48407B03280EDB1D +:1021E000362002F0B3FF01215A48C1720021C1809C +:1021F0005A48407810B9012058494870A3E0564821 +:10220000407810B9564801F0E7FF002406E0544832 +:10221000015DA01CAA681154601CC4B2042CF6DB3A +:1022200002AB504A04214E4801F092FF0021494878 +:1022300041720020474948800120474948700620E4 +:10224000A88180E0012F03D17F2002F07FFF6BE0A7 +:10225000072E03D0132002F079FF65E03E48407856 +:1022600001285ED100203C4948703A48C07A0128D4 +:1022700003D1362002F06AFF4CE0002406E0A01CE7 +:102280002968085C0DF80400601CC4B2042CF6DB5D +:102290009DF800008DF804009DF801008DF8050000 +:1022A0009DF802008DF806009DF803008DF80700E8 +:1022B000042201A92B4801F0F5FEA0B10620A9686F +:1022C00048700220A881002002F046FF012020492A +:1022D000487000202149487000211E4841730420A5 +:1022E0002149087016E0352002F030FF1948407B84 +:1022F000401CC1B217484173407B03280ADB01210F +:102300001448C1720021C1801448407810B90120DE +:102310001249487000200F49488000210D48417241 +:1023200002E0242002F012FF0DE002F093F918B150 +:10233000802002F049FF05E0002002F045FF122056 +:1023400002F004FF00BF00BF02F0C4FBBDE8FE8343 +:10235000C000002070260020BD0000208C0000205E +:10236000C7000020C3000020C20000204220044912 +:1023700008704F204870452088705220C870704700 +:102380008E0000202DE9F04705460024A246A14614 +:10239000A888801E86B228684778FD4890F8058096 +:1023A00008F1010000F0FF08012E02DA132002F00C +:1023B000CDFEB6F5806F03DD712002F0C7FEFCE1B3 +:1023C000F3480078C0F3800050B9F148D0F8F0002D +:1023D000B0F5406F04D8EE484078C0F3001070B1FB +:1023E000EB48407820F01000E949487008464078F2 +:1023F00020F040004870702002F0A8FEDDE1E448C3 +:102400000078C0F3801028B9E14800780121B1EBD1 +:10241000D01F03D1722002F099FECEE1DC48007893 +:10242000C0F3400018B9242002F090FEC5E1D8485E +:102430004078C0F3401028B9012F03D0732002F078 +:1024400085FEBAE1781C804502D10220A881B4E162 +:10245000B84503D0732002F079FEAEE1CC48007895 +:1024600000F0010040B1CA484078C0F3800018B9BC +:10247000222002F06BFEA0E1C548007820F0200089 +:102480002030C34908700846407820F020002030F2 +:10249000487008464771007800F0010000287CD0A1 +:1024A000002415E0A01C2968085CB949D1F8F01097 +:1024B000B84A5054B648D0F8F000401CB449C1F8AE +:1024C000F0000846D0F8F400401CC1F8F400641C89 +:1024D000B442E7D32868811C3046FDF735FFAC488D +:1024E000D0F8F400AA49D1F8FC10884277D3A84864 +:1024F000D0F8F000B0F5006F2DD3A5494FF400627D +:10250000D1F8F800A349FEF715FF40B9FEF7E0FF48 +:10251000722002F01BFE02F0DDFABDE8F0879C4855 +:10252000D0F8F80000F500609949C1F8F8000846B5 +:10253000D0F8F000A0F50060C1F8F000002405E03C +:1025400004F500609349085C0855641C9048D0F875 +:10255000F000A042F4D88E48D0F8F000F0B18C48DA +:10256000D0F8F09005E0FF208A4901F8090009F150 +:102570000109B9F5006FF6D385494FF40062D1F82F +:10258000F8008449FEF7D6FE40B9FEF7A1FF72209D +:1025900002F0DCFD02F09EFABFE7A5E000207C49D6 +:1025A000C1F8F0000846407820F001004870084665 +:1025B000007820F0040008700846007820F0200021 +:1025C00008700846407820F04000403048700846C7 +:1025D000407820F01000103048707EE0FFE76C4833 +:1025E000D0F8F000B0F5006F77D36948407820F05C +:1025F0000100401C664948700846007820F004003D +:10260000001D08704FF40062D1F8F8006149FEF730 +:1026100091FE38B9FEF75CFF722002F097FD02F0E0 +:1026200059FA7AE75A48007820F080005849087033 +:102630000846D0F8F80000F50060C1F8F800084638 +:10264000D0F8F000A0F50060C1F8F000002405E02B +:1026500004F500604F49085C0855641C4C48D0F8EC +:10266000F000A042F4D84A48D0F8EC00401C484999 +:10267000C1F8EC000846807800F00F00012805D171 +:102680000846D0F8EC00B0F5607F17D84048807855 +:1026900000F00F00022805D13D48D0F8EC00B0F55D +:1026A000607F0BD83A48807800F00F0002280ED1E6 +:1026B0003748D0F8EC00B0F5802F08D9FEF708FFB6 +:1026C000722002F043FD02F005FA26E705E03048EB +:1026D000007820F040002E4908702D48007820F046 +:1026E00004002B49087066E0B6F5805F58DA0024D4 +:1026F0000FE0A01C2968085C2549D1F8F010254A94 +:1027000050542348D0F8F000401C2149C1F8F00093 +:10271000641CB442EDD31E49D1F8F0001D49FEF708 +:10272000D7FD2868811C3046FDF70EFE1848D0F80A +:10273000F400194900EB010A154880780121B1EB3A +:10274000101F0BD10AEB06001449884206D210482C +:10275000104AD0F8F0105046FEF7F8FE0C48D0F8BA +:10276000F4000B49D1F8F01008440949C1F8F4000D +:102770000846D0F8F400D1F8FC10884217D304487A +:10278000407820F010001030014948700FE0000040 +:10279000701500207016002000F00020FFFF0020C0 +:1027A00000200B49C1F8F400312002F0CFFC0020DA +:1027B0000749C1F8F0000220A8810548007820F000 +:1027C00010000349087002F085F900BFA5E600007B +:1027D000701500202DE9F047054695F8048028681B +:1027E000407806022868807806432868C71C4FF0A6 +:1027F0000109B8F1030F03DC132002F0A7FC5CE031 +:10280000002447E02F4800EB04100088B0423FD17D +:102810002C4800EB0410407A072839D1294800EBF6 +:102820000410007AC01C404505D0132002F08EFC35 +:102830004FF0000930E039463046FEF763FC0128CE +:1028400005D1312002F082FC4FF0000924E0032082 +:10285000A8811C4800EB0410027A1A4800EB04100F +:1028600041683846FEF71FFE164800EB041000884A +:102870004FF28411884208D100F028F812484078BD +:1028800020F00200801C104948704FF0000903E05E +:10289000601CC4B2052CB5DB00BFB9F1010F0CD12F +:1028A00001F0D8FE18B1802002F08EFC05E0002077 +:1028B00002F08AFC312002F049FC02F00BF9BDE87D +:1028C000F0870000B8590008701500200146FF206D +:1028D00070472DE9F0410246002500260020002324 +:1028E0000024002791F803C00CF00F0591F803C0F5 +:1028F0000CF0100CBCF1000F03D091F802C04CEAB0 +:10290000050591F800C0BCF1000F31D0146800201B +:102910002BE04FF0010C0CFA00F3B1F800C00CEA08 +:1029200003069E4220D183004FF00F0C0CFA03F7F0 +:10293000BC4305FA03FC4CEA040491F803C0BCF163 +:10294000280F06D14FF0010C0CFA00FCC2F814C09D +:102950000AE091F803C0BCF1480F05D14FF0010C1B +:102960000CFA00FCC2F810C0401C0828D1D3146037 +:10297000B1F800C0BCF1FF0F34DD546800202EE038 +:1029800000F1080C4FF0010808FA0CF3B1F800C090 +:102990000CEA03069E4221D183004FF00F0C0CFA83 +:1029A00003F7BC4305FA03FC4CEA040491F803C0A6 +:1029B000BCF1280F05D100F1080C08FA0CF8C2F898 +:1029C000148091F803C0BCF1480F07D100F1080C46 +:1029D0004FF0010808FA0CF8C2F81080401C0828D3 +:1029E000CED35460BDE8F081F0B50A460023002440 +:1029F0000021002500F00046B6F1004F02D11D4E27 +:102A0000F16901E01B4E7168C0F3034583B200F425 +:102A10004016B6F5401F08D121F07061154E76685A +:102A200026F07066134F7E6012E000F48016B6F553 +:102A3000801F06D1032606FA05F4A14341F0706118 +:102A400006E0460D360103FA06F6B14341F0706127 +:102A500022B1460D360103FA06F6314300F0004676 +:102A6000B6F1004F02D1034EF16101E0014E7160F9 +:102A7000F0BD0000000001404161704701617047F6 +:102A80000148006870470000D800002000BFFEE742 +:102A9000704700002DE9F04F95B004468A469046F5 +:102AA0001E460025402105A8FDF797FB0020049055 +:102AB0000027012003904FF0000B194800EB441051 +:102AC00000680490164800EB44104779FF2E00D0B0 +:102AD0003746402F00D94027114800EB4410D0F86A +:102AE0001C90002505E019F8050005A94855681C4B +:102AF000C5B2BD42F7D305ABCDE90074514640469F +:102B0000049A00F029F88346BBF1000F02D101209E +:102B1000039001E000200390039815B0BDE8F08F0A +:102B20003858000810B50446012C06DA0020034985 +:102B300008552146012000F003F810BDFB000020DD +:102B4000012803D10122034B5A5402E00022014B19 +:102B50005A547047F40000202DE9F04F87B0064624 +:102B60008B4617469846DDE910954FF0000A012E76 +:102B700003DB012007B0BDE8F08F1F48C0F80490C8 +:102B800000201D4948721D4800EB4510007908706F +:102B90001A4800EB4510407C08B1012000E00020FD +:102BA00015498872154800EB4510807C08B101205A +:102BB00000E000201049087200208DF810000297F4 +:102BC000084600798DF8120000208DF811000024CD +:102BD00006E018F804100DF113000155601CC4B292 +:102BE0009DF81200A042F4DC0698009002A80FC8DD +:102BF000FEF7AAF85046BDE7982A0020385800088A +:102C00002DE9F04106460C46154600270848005DB0 +:102C100008B1012C02DB0020BDE8F0812B462246E2 +:102C200039463046FFF736FF80464046F4E700005D +:102C3000F400002010B54FF400600B49086002F06A +:102C40004BFD4FF480600849091F086002F044FD05 +:102C50004FF480600449086002F03EFD4FF40060CC +:102C60000149091F086010BD140C014010B54FF454 +:102C700000600949086002F02FFD4FF480600649AA +:102C8000086002F029FD4FF480600349091D0860C7 +:102C900002F022FD10BD0000100C014070B5054689 +:102CA0000024002618E06006040E4FF480600F49EF +:102CB000086002F011FD0D480838006800F400605B +:102CC00008B1601CC4B24FF480600849091D086057 +:102CD00002F002FD701CC6B2082EE4DB15B9FFF746 +:102CE000C5FF01E0FFF7A6FF204670BD100C0140B4 +:102CF00070B50446002524E004F0800020B14FF4B4 +:102D000000601149086004E04FF400600E49091D9D +:102D1000086002F0E1FC4FF480600B49086002F0AB +:102D2000DBFC4FF480600849091D0860072D02D1C3 +:102D30004000091F08606006040E02F0CDFC681C0C +:102D4000C5B2082DD8DB70BD100C014010B54FF492 +:102D500000600A4908604010086002F0BDFC4FF4B2 +:102D600000600649091D086002F0B6FC4FF480605F +:102D70000249091D086002F0AFFC10BD100C0140B3 +:102D800010B54FF40060074908604010091F086043 +:102D900002F0A2FC4FF400600249091F086002F033 +:102DA0009BFC10BD140C014010B54FF400600E499F +:102DB000086002F091FC4FF480600B49086002F05B +:102DC0008BFC09480838006800F4006008B1012451 +:102DD00000E000244FF480600349091D086002F000 +:102DE0007BFC204610BD0000100C014010B50446CD +:102DF0000548827A00212046FFF702FF012800D112 +:102E000010BD0020FCE700001C15002070B5054631 +:102E10000C46224600212846FFF7F2FE012800D189 +:102E200070BD0020FCE7000010B50446044800789F +:102E300010B900F0E1FD01E000F034FC10BD00002D +:102E40006600002010B500F04DFC00F01DFE10BD26 +:102E500010B50020044908710449C870FF200449D6 +:102E60000870FFF7EFFF10BD600000205A0000203F +:102E7000660000203EB57948006878498988084492 +:102E800001907748C078052806D0062834D0072856 +:102E900076D0082875D1A1E07048C088082817DBD3 +:102EA00000207049096808706C4880796D4909688C +:102EB00048706C480068801C00906848C088ADF875 +:102EC00008006649C988891C88B200F00DFD12E02F +:102ED0006248807963490968087062480068401C4C +:102EE00000905E48C088ADF808005C49C988491C5C +:102EF00088B200F0F9FCA8E05849C88800F0F4FC5A +:102F00005648C088B0F5805F3CDB10205549096801 +:102F10000870544800680078524909680870002019 +:102F20005049096848704D48C08800164D490968E5 +:102F3000887000204B490968C8704848C088000A5A +:102F400048490968087145488079464909684871C7 +:102F500044480068801D00904048807A801F80B2FD +:102F6000ADF808003D48807A801F3C4988800846BB +:102F7000408920F4706048810020394988702CE035 +:102F80002DE060E010203749096808703548006876 +:102F900000783249C988C1F30321084331490968DF +:102FA00008702E4880792F49096848702D480068BC +:102FB000801C00902948807A801E80B2ADF80800FD +:102FC0002648807A801E254988800846408920F45A +:102FD0007060488100202249887036E000BF2020C0 +:102FE0002049096808701F48006800781B49498912 +:102FF000C1F3032108431B49096808701948006898 +:10300000401C00901648C078082808D11348C08892 +:1030100012498988401A80B2ADF8080005E00F48CF +:10302000807A401E80B2ADF808000C488188807A12 +:10303000401E084409498880BDF80810491C88B220 +:1030400000F052FC01E001203EBD00BF06480168CF +:103050006846884704462046F6E700001C15002015 +:103060005A0000206C00002084000020002005E0B1 +:10307000AA21044A12681154411CC8B20828F7DB7F +:10308000704700006C00002070B5FE48867A082E5C +:1030900001D0002070BDFB48C07A00F0F00038B1CC +:1030A000102804D020287DD030287CD154E200BFE5 +:1030B000F548007998B1F4480079012801D1002041 +:1030C000E8E7F048C07A022826D1EE48007B3E2887 +:1030D00022D1EC48407B80281ED10020DAE7E94865 +:1030E000C07A022818D1E748007B3E2814D1E54871 +:1030F000407B802810D1E548008828B9E448008842 +:1031000010B9E448007938B10020E0490880012076 +:10311000E14908700020BDE700F0E4FA0220DA4936 +:1031200008710020DD498880D648C07A00F0F000A0 +:1031300000287DD010287CD1D2480088C0F30A0036 +:1031400040F2DF71884206D10120CF49087100F0BA +:1031500005FB00209EE7D248C078022807D0D0485F +:10316000C078032803D0CE48C078082806D10120B3 +:10317000C549087100F0F2FA00208BE7082E7AD1D9 +:10318000C048C07A00F00F004FF6FF7101EA00203E +:10319000C249C8800846C088BA49097B0843BF496C +:1031A000C88001E0DEE06AE20846C088072869DDE1 +:1031B00000204881B3480D3008600B46D988B14BD8 +:1031C0001B88C3F30A00B74B1A689047B3490860DD +:1031D0000846807A00F0030088B102280ED103204F +:1031E000A9490880072008710846808820F480706B +:1031F00000F58070888000F0BBFA42E000BFA7486D +:103200000068C8B39F48407BA449096808709D487E +:10321000807BA249096848709A48C07B9F49096829 +:1032200088709848007C9D490968C870954801E0FD +:1032300035E08FE0407C9949096808719148807CAD +:103240009649096848710620944988800846008993 +:1032500020F00F00401C088103208B4908800520C6 +:1032600008710846808820F4807000F5807088809E +:1032700000F07EFA04E00BE0FFE7002082490871CD +:1032800000BF0AE001208049087100F067FA04E0FD +:1032900001207D49087100F061FA0020FAE67948C2 +:1032A0000088C0F30A00804908807648C07A7B49CC +:1032B000C8800846C088401CB04244DC0846C0882C +:1032C00007283ADC0846C08880B3002048816D4852 +:1032D0000C3008600B46D9886A4B1B88C3F30A0080 +:1032E000704B1A6890476D49086008460068F0B155 +:1032F0000846807A00F00300C8B9002407E061485E +:103300000C30005D654909680855601CC4B263480B +:103310008079401EC0B2A042F1DA01205A490871FA +:103320005E4AD088614A1168884711E005E00120B3 +:103330005549087100F012FA0AE00120524908715B +:1033400000F00CFA04E001204F49087100F006FA81 +:1033500000209FE601204C49087100F0FFF900BFF2 +:1033600000BF8DE147480088C0F30A0040F2DF71DA +:10337000884206D101204449087100F0EFF900208D +:1033800088E641480079032803D03F4800790528A2 +:1033900076D13D48007905280FD13B488088C0F39D +:1033A000002040B942490878FFF772FB404908788D +:1033B000FFF73AFD01E000206CE638488088C01D28 +:1033C0003649C988884237DB3448C0883349898800 +:1033D000401A401CB0420EDC2A48C07A00F00F00B0 +:1033E0002E49097A01F00F01884205D001202649B3 +:1033F000087100F0B3F9ACE000240AE021480C3079 +:10340000005D26490968254A928811440855601CC8 +:10341000C4B2224881790079401C081AC0B2A04287 +:10342000ECDA012018490871002008801B4AD08876 +:103430001E4A116888478CE0082E0BD11148C07ACB +:1034400000F00F001549097A01F00F01884202D0FF +:1034500000F048F97DE00B48017B104800680F4AF6 +:10346000928881540748407B0C4909680B4A92882E +:10347000114448700348807B08490968074A19E0ED +:1034800069E00000802A0020600000205200002037 +:10349000540000204800002056000020281500207D +:1034A0005A0000207C0000205800002070000020FE +:1034B000680000209288114488707348C07B73496B +:1034C0000968724A92881144C8706F48017C6F483D +:1034D00000686E4A9288104401716B48407C6B49C9 +:1034E00009686A4A9288114448716748817C674834 +:1034F0000068664A92881044817164488088C01DC3 +:10350000624988800846007A401C098960F30301FB +:103510005E4801815E488078B0B15D488078401E89 +:103520005B4988700846807870B9052008710320CF +:1035300008800846808820F4807000F580708880BC +:1035400000F016F90020A5E50F205149088003205E +:10355000087100209EE593E04B480088C0F30A0004 +:103560004C49098888420ED047480088C0F30A00B9 +:1035700040F2DF71884206D101204549087100F010 +:10358000EDF8002086E54448C078022807D042487C +:10359000C078062803D04048C07807286ED13E483E +:1035A000007900F00100A0B93B48C078062807D098 +:1035B0003948C07807280ED13748807801280AD1C9 +:1035C00036490878FFF764FA34490878FFF72CFC8D +:1035D00001E000205EE53048C07802284CD1032E7F +:1035E0004ADB2948C07A302804D0312839D0322823 +:1035F0003ED13AE028480079C0F38000F8B9264867 +:10360000808820F00400001D234988801E48007B2C +:10361000234908721C48457B0A2D02DA01204872B2 +:1036200016E005F0800058B1F02D05DDF92D03DC22 +:1036300001201B4948720BE00E201949487207E02F +:1036400005F109000A2190FBF1F0401C1449487271 +:103650001348007A10498870012008800320C87040 +:1036600009E00F200C49088005E000F00DFA02E0A7 +:1036700000F00AFA00BF00BF00200BE500E000BF29 +:1036800000BF002006E50000802A00202815002049 +:1036900060000020580000205A0000206800002030 +:1036A0001C1500200D480079052802D007280DD1EF +:1036B00007E00F200949088003200871FF20C87027 +:1036C00005E0002005490880087100E0704700BF50 +:1036D000FF200349087000BFF8E7000060000020E9 +:1036E0006600002010B518480079012809DD164849 +:1036F0000079082805D00820134908711349086883 +:10370000804700201049088008710846808820F40E +:10371000807088800846808820F4007088800C487B +:10372000008920F00F000A490881002048810948DB +:103730000078802806D108490878FFF7A9F9FF200A +:103740000449087010BD00006000002074000020D3 +:1037500028150020660000206800002010B5FFF743 +:10376000C1FF10BD014A508170470000281500209C +:1037700070B538488088C0F34020D8B1354DA8884E +:10378000C0F34020002863D02846808820F40070D1 +:103790002946888030490878FFF728FB0446002C2A +:1037A00056D12846808820F4007000F50070294624 +:1037B00088804DE027488088C0F30020002847D04B +:1037C000244DA888C0F30020002841D02348007869 +:1037D000FF283DD18020214908702846808820F4A8 +:1037E00080702946888008201D498872002605E0DF +:1037F000AA201C4909688855701CC6B21848807AEE +:10380000B042F5DC13480079072804D1322015496D +:103810000968087003E03020124909680870002028 +:1038200010490968487001200E4909688870002015 +:103830000849887008490878FFF7D8FA04463CB967 +:103840000448808820F4007000F5007001498880E9 +:1038500070BD0000600000206800002066000020AD +:103860001C1500206C00002010B51E4800880028A0 +:1038700036D01C4C2088002832D020460088401EBC +:10388000214608800846008840BB08460079032886 +:1038900006D0052807D0062809D007281CD103E048 +:1038A000FFF720FF19E000BFFFF71CFF15E00D48F0 +:1038B000C07810B9FFF716FF0DE003200949088012 +:1038C000052008710846808820F4807000F580701B +:1038D0008880FFF74DFF00E000BF01E0FFF748FFE1 +:1038E00010BD0000600000200C4A12780C4B03EB66 +:1038F00042125179884202DB0A4A91720CE0C2B24C +:10390000094B9A5C094B9A5C064B9A721A46927A5A +:10391000082A01DA08229A72704700006800002025 +:10392000385800081C150020CC570008BC57000868 +:1039300010B5FFF799FF00F067F910BD10B5034609 +:1039400009B9012010BD1648C07808B10320F9E775 +:103950001448807A082801DD022200E00122114883 +:10396000807A801A80B2884203DB05200C4CE0701C +:1039700002E006200A4CE0700320094C2080094830 +:1039800003600020074CA0802046C1800448808846 +:1039900020F00100401C024CA0800020D2E7000073 +:1039A0005A0000201C15002011484089000A401CC4 +:1039B0000F49498960F30B210D4841818188807A44 +:1039C000401E80B208440A49C988884203DB0820A7 +:1039D0000849C87002E007200649C870032005495D +:1039E00008800846808820F00100401C88807047CD +:1039F0001C1500205A00002010B51F48C07805286B +:103A000006D006280ED0072817D008282CD100E0B1 +:103A100000BF1A4801680020884700201649088026 +:103A2000C87022E00F20144908800220C8700846A0 +:103A3000808820F00400888017E00F48807860B10B +:103A40000D488078401E0C4988700846807820B95F +:103A50000F2008800220C87007E00948407A064914 +:103A600008800320C87000E010BD00BFFF2005499A +:103A7000087000BFF8E700005A000020780000201E +:103A80001C1500206600002010B501241B48C078DA +:103A900001280EDD1948C07809280AD009201749E5 +:103AA000C870174908688047044614B900201349B4 +:103AB000C8700020114908800846808820F0010065 +:103AC00088800846808820F00200888054B1002059 +:103AD000C8700C4908720846408920F4706048811B +:103AE000082088720848007830B908490878FEF73D +:103AF000CFFFFF200449087010BD00005A000020CD +:103B0000800000201C1500206600002068000020B6 +:103B100070B539480079C0F34000D0B1364DA8885F +:103B2000C0F34000002866D02846808820F00200BC +:103B30002946888031490878FFF758F90446002C57 +:103B400059D12846808820F00200801C29468880B0 +:103B500051E02948007900F0010000284BD0264DA3 +:103B6000A88800F00100002845D025480078FF28EB +:103B700041D10020224908702846808820F00100A9 +:103B800029468880FFF772FAFFF774F906466EB986 +:103B90001A490878FFF72AF9044664BB284680884A +:103BA00020F00200801C2946888024E01248C0785A +:103BB000072807D01048C078082803D00E48C078DE +:103BC00006280ED10C48C078062803D100200D49E4 +:103BD000888006E00B488188807A401E081A0949CF +:103BE0008880FF20064908700348808820F0010083 +:103BF000401C0149888070BD5A00002068000020E8 +:103C0000660000201C15002010B51648008820B35F +:103C1000144C208808B320460088401E21460880A6 +:103C200008460088D0B90846C078801E072813D2FD +:103C3000DFE800F00407120C0D0E0F00FFF724FF61 +:103C40000BE0FFF7B1FEFFF763FF06E000BF00BF28 +:103C500000BFFFF719FF00E000BF01E0FFF758FFCA +:103C600010BD00005A00002008B5074840680090C9 +:103C700006490098086004490868FCF77CFA034884 +:103C80000068804708BD000000A00008E800002090 +:103C900008B501211C2000F02FF94FF40070ADF899 +:103CA000000010208DF8030003208DF80200694603 +:103CB0005348FEF70EFE4FF400715148FEF7DEFE4A +:103CC0000120ADF8000010208DF8030003208DF8CE +:103CD000020069464A48FEF7FCFD01214848FEF70C +:103CE000CDFE40F20240ADF8000010208DF8030038 +:103CF00003208DF8020069464148FEF7EAFD0221E3 +:103D00003F48FEF7BBFE4FF480613D48FEF7B4FE2E +:103D1000A020ADF8000010208DF8030003208DF8DE +:103D2000020069463748FEF7D4FD20213548FEF7EA +:103D3000A3FE80213348FEF7A1FE44F22720ADF810 +:103D4000000010208DF8030003208DF80200694662 +:103D50002D48FEF7BEFD4FF400712B48FEF78EFE96 +:103D600001212948FEF788FE02212748FEF784FE3C +:103D700004212548FEF780FE4FF480412248FEF7DB +:103D80007BFE20212048FEF777FE4FF48070ADF8CF +:103D9000000048208DF8030069461948FEF799FD98 +:103DA0004FF40070ADF8000048208DF8030069461C +:103DB0001448FEF78EFD0121084600F09DF8012110 +:103DC0001248FEF711FE1020ADF8000001208DF81A +:103DD000020010208DF8030069460B48FEF779FDBC +:103DE00010210948FEF74AFE4FF40050ADF80000DC +:103DF00004208DF8030069460248FEF76AFD08BDFD +:103E00000008014000100140000C0140000130009A +:103E100000BFFEE7704710B54FF4A06000F03AF81D +:103E200010BD000070B5002100230F22C47804B338 +:103E3000154C246804F4E064C4F5E064210AC1F17F +:103E40000403CA40447804FA03F1847814402143FF +:103E500009010E4C0678A155047804F01F050124D1 +:103E6000AC4005786D11AD0005F1E025C5F80041C5 +:103E700009E0047804F01F050124AC40044D0678E5 +:103E8000761145F8264070BD0CED00E000E400E03E +:103E900080E100E002490143024A116070470000DE +:103EA0000000FA050CED00E00149086270470000CF +:103EB00000000E427047000029B1064AD269024351 +:103EC000044BDA6104E0034AD2698243014BDA61B0 +:103ED000704700000010024029B1064A12690243EF +:103EE000044B1A6104E0034A12698243014B1A61D0 +:103EF000704700000010024029B1064A926902434F +:103F0000044B9A6104E0034A92698243014B9A612F +:103F100070470000001002402DE9F041002100220E +:103F2000002500230026002400278C46DFF860814E +:103F3000D8F8048008F00C0121B1042907D0082921 +:103F400059D109E0DFF84C81C0F8008058E0DFF873 +:103F50004481C0F8008053E0DFF83481D8F8048051 +:103F600008F47012DFF82881D8F8048008F480354E +:103F7000920C0D2A01D0921C00E0062235B9DFF820 +:103F8000188102FB08F8C0F8008033E0DFF80081F8 +:103F9000D8F82C8008F48036DFF8F480D8F82C802C +:103FA00008F00F0808F1010446B9DFF8E880B8FB13 +:103FB000F4F808FB02F8C0F800801BE0DFF8D080BE +:103FC000D8F82C80C8F3031808F10107DFF8C08087 +:103FD000D8F82C80C8F3032808F1020CDFF8B4806D +:103FE000B8FBF7F808FB0CF8B8FBF4F808FB02F88C +:103FF000C0F8008004E0DFF89C80C0F8008000BFBB +:1040000000BFDFF88C80D8F8048008F0F0010909BF +:10401000DFF8888018F80130D0F8008028FA03F81B +:10402000C0F80480DFF86880D8F8048008F4E06104 +:10403000090ADFF8688018F80130D0F8048028FAFF +:1040400003F8C0F80880DFF84880D8F8048008F446 +:104050006051C90ADFF8448018F80130D0F80480B4 +:1040600028FA03F8C0F80C80DFF82480D8F8048020 +:1040700008F44041890BDFF8288018F80130D0F8A7 +:104080000C80B8FBF3F8C0F81080BDE8F0810000A8 +:104090000010024000127A0000093D0000000020DC +:1040A0001000002070B503460C460120002107E0F7 +:1040B000655C5E5CB54201D0002003E04D1CE9B2B6 +:1040C0009142F5DB00BF70BD78B50C46057845B967 +:1040D000457835B9857825B9C57815B900251D709D +:1040E00078BD002107E0455C184E765C75400DF800 +:1040F00001504D1CE9B20429F5DB9DF8015005F093 +:10410000F0059DF8006006F00F0645EA06151570EB +:104110009DF801502D072D0E9DF8026045EA1615F9 +:1041200055709DF8025005F0F0059DF8036045EAD2 +:10413000161595709DF8035005F00F069DF8005078 +:1041400066F31F15D5701C7000BFC9E71C5A000824 +:1041500078B50C46057845B9457835B9857825B9DF +:10416000C57815B900251D7078BD002107E0455CB4 +:10417000184E765C75400DF801504D1CE9B20429CB +:10418000F5DB9DF8005005F00F069DF8015066F331 +:104190001F1515709DF801502D099DF8026006F05D +:1041A0000F0645EA061555709DF8035005F0F00519 +:1041B0009DF8026045EA161595709DF8035005F0CC +:1041C0000F059DF8006045EA1615D5701C7000BFFC +:1041D000CAE700001C5A00082DE9F0410446FCF72C +:1041E0004FFE0546134800782844C5B2002612E069 +:1041F000691C42F2BB02514343F2390202EB410017 +:10420000C11700EB11610912A0EB0127FDB204F800 +:10421000015B701CC6B2042EEADB06480078401C25 +:104220000449087008460078642801D1002008700D +:10423000BDE8F081E4000020704710B500F002F8FE +:1042400010BD00000CB500200190009040480068AF +:1042500040F480303E49086000BF3D48006800F4EB +:10426000003000900198401C0190009820B94FF652 +:10427000FF7101988842F0D13548006800F40030A1 +:1042800010B10120009001E000200090009801286A +:104290005CD13048006840F010002E4908600846A4 +:1042A000006820F0030008600846006840F0020043 +:1042B00008602748406826494860084640684860CA +:1042C0000846406840F4806048600846C06A224959 +:1042D00008401F49C8620846C06A204908431C4973 +:1042E000C8620846006840F08060086000BF184857 +:1042F000006800F000600028F9D01548406820F4FC +:104300007C10134948600846406840F4E810486053 +:104310000846006840F08070086000BF0C480068E4 +:1043200000F000700028F9D00948406820F0030030 +:10433000074948600846406840F00200486000BFF6 +:104340000348406800F00C000828F9D10CBD0000BB +:10435000001002400020024000F0FEFF140801009F +:104360000F480068401C0E4908600E480068401C59 +:104370000C4908600A4800684FF47A71B0FBF1F20A +:1043800001FB1200012804D107480068401C0649BF +:1043900008600648007810B9012004490870704789 +:1043A000340000202C0000203800002030000020C5 +:1043B00030B5164800684FF47A72B0FBF2F1B1F1F3 +:1043C000807F01D301201DE021F07F40401E4FF08F +:1043D000E022506150170F22002807DA13071D0E44 +:1043E0000B4B00F00F04241F1D5503E013071C0E98 +:1043F000084B1C5400BF00204FF0E02290610720C2 +:104400001061002008B100BFFEE730BD140000209D +:1044100018ED00E000E400E010B5FFF725FC10BD4A +:1044200010B51648006840F00100144908600846BD +:10443000406813490840114948600846006811491E +:1044400008400E4908600846006820F48020086093 +:104450000846406820F4FE0048600846006820F0E6 +:10446000A05008604FF47F0088600020C862FFF70A +:10447000E4FE4FF000600449086010BD00100240E7 +:104480000000FFF0FFFFF6FE08ED00E010B50A485F +:104490000078401C084908700846007803280ADBA9 +:1044A00000200870002401E0601CC4B2012CFBDB7A +:1044B00072B6FFF7B1FF10BDEC00002002460023EA +:1044C00021B90D4800681060012070470A48036850 +:1044D0001068984205D81068181A884209D301203C +:1044E000F3E71068C0F1FF301844884201D301207F +:1044F000EBE70020E9E70000340000204F48007897 +:1045000001280AD14E484089401C4D49488101206C +:10451000087000204949087000E070474848408909 +:10452000052190FBF1F201FB120030B944484089AB +:1045300018B101204249487000E0EEE74048408948 +:104540000A2190FBF1F201FB120028B93C48408996 +:1045500010B101203A49887039484089142190FBF4 +:10456000F1F201FB120028B93548408910B1012051 +:104570003349C87032484089322190FBF1F201FB87 +:10458000120028B92E48408910B101202C49087129 +:104590002B484089642190FBF1F201FB120028B9FD +:1045A0002748408910B10120254948712448408995 +:1045B0004FF4FA7190FBF1F201FB120028B9204888 +:1045C000408910B101201E4988711D4840894FF46F +:1045D0007A7190FBF1F201FB120028B9184840896A +:1045E00010B101201649C8711548408940F2DC51CC +:1045F00090FBF1F201FB120028B91148408910B17B +:1046000001200F4908720E4840894FF4FA6190FB6F +:10461000F1F201FB120028B90948408910B10120CC +:10462000074948720648408941F27071884202DBAE +:1046300000200349488100BF6FE7000030000020E0 +:104640000C01002000200249087048804860704733 +:104650003C00002003484078022801D10120704727 +:104660000020FCE75801002010B504462046FCF766 +:10467000A3FD10BD70B53848007900F04000B8B116 +:104680003548007920F0400033490871012408467C +:10469000407900B104243148007818B124F00104B5 +:1046A00044F0020404F0010010B1002000F05AFDB3 +:1046B0002948007902281AD104202749087128487E +:1046C00080680078274948700020244908702448F1 +:1046D0008089C82802DA2248858900E0C825EAB224 +:1046E0001F4B19699868FCF7DEFE00F049FA1A487A +:1046F000007900F0100068B300201B4908801748BB +:10470000007878280AD11948007838B11348007821 +:10471000782814D115484088012810D120200E494E +:1047200008710E48007808B9012000E002200C4909 +:1047300088700F490A480161083000F0ADFE074853 +:104740000078782806D109480078012802D1022093 +:104750000149087170BD0000480000205000002091 +:104760005801002070010020520000203C00002071 +:104770003D0B002010B504462046FCF776FD10BD29 +:1047800070B5044601252289D4E9000100F003F840 +:104790000025284670BD03E0531E9AB28B5C8354FB +:1047A000002AF9D1704700002DE9F041044638484D +:1047B000007800F07F072068457825F0800594F8A0 +:1047C0000480B8F1010F03D1132000F0BFFC5BE0BF +:1047D000012D04D0022D04D0032D44D100E000BFF0 +:1047E00000BFB8F1020F05D0132000F0AFFC00F0BD +:1047F000B9F948E0012F01D1022D03D0022F07D1D2 +:10480000032D05D17E2000F0A1FC00F0ABF93AE0C9 +:10481000032F04D1022D02D101201D49087100206F +:1048200000F0A0FC002606E000201A4988551A492D +:104830008855701CC6B2022EF6DBFCF719FC062068 +:10484000A0810020A16888703220A168C870012072 +:10485000A1680871F420A1684871032D02D10120DC +:10486000FCF776FB0FE0FFF7F5FE20B180200B4947 +:104870000968C87006E0002008490968C87012205D +:1048800000F064FC00BF00BF00F024F9BDE8F08137 +:1048900058010020BD000020C0000020480000207A +:1048A00010B504462046FCF779FD10BD10B504464E +:1048B0000320094908707F204870084684707820DA +:1048C000C870AA20087148718871C8710821002039 +:1048D000FEF79CFA10BD0000180100200148007886 +:1048E00070470000580100200248007800F07F0067 +:1048F0007047000058010020014800787047000010 +:10490000500000200A4A127902F0FE02084B1A7188 +:1049100049B91A461268824205D11A46127942F004 +:1049200002021A7170470122024B1A7000BFF9E7A8 +:10493000480000205600002070B504460D46A078BF +:10494000012804D0022803D0032806D104E000BFC8 +:10495000284600F057F801E000E000BF00BF00204B +:10496000A07070BD01460120044A127942F0010294 +:10497000024B1A711A46116000207047480000204F +:104980002DE9F04104460D46002740F6C41085424B +:1049900003DD0220FEF7E6FE16E040F2DF708442FF +:1049A00003D102200A49487006E040F20B708442AD +:1049B00002D101200649487005488581FFF7D2FFE2 +:1049C00006460EB9024887683846BDE8F081000007 +:1049D0005801002010B5044600210448FFF792FF5B +:1049E000FEF7BCFE05200249088010BD58010020DA +:1049F0005200002010B503210148FFF783FF10BDCE +:104A0000580100200021054A1180054948714021C4 +:104A1000034A11710121034A1170704752000020AE +:104A2000480000205600002010B500201E49887064 +:104A300001200870087148710020C8701B48886008 +:104A40001B491948016100201A49487108717F20EB +:104A50001949087078208870002018490870184992 +:104A60000870FFF7EFFD1748007820F02000154987 +:104A7000087000240EE0002113480155801E0155E6 +:104A8000001F20F8141000200F490A3921F81400E3 +:104A9000601CC4B2022CEEDBFCF7EAFA00200B49E2 +:104AA00008800B49088010BD5801002079010020C2 +:104AB0003D0B002048000020700100205000002025 +:104AC00056000020BB0000207A2600205400002061 +:104AD0005200002010B517480079042822D116484A +:104AE0000269846823781548007848B17F201070E7 +:104AF000537012480078907003210F48818208E0BB +:104B00000C480068C078802803D003F14000107082 +:104B1000521C0A480078782801D0FFF793FD08203E +:104B2000044908710348007940F0100001490871F8 +:104B300010BD000048000020580100205000002057 +:104B400010B504462046FCF70BFD10BD10B5044619 +:104B50002046FCF7F1FD10BD10B504462046FCF7D9 +:104B6000BBFF10BD002002490968C87070470000F3 +:104B70004800002010B504462046FDF747F810BD58 +:104B80002DE9F05F4FF00008F8488468067B207834 +:104B9000F749085C00EB4000F64901EB80004578DE +:104BA0002078F349085C00EB4000F24901EB8000FB +:104BB00090F804902078EE49085C00EB4000ED4945 +:104BC00001EB800090F805A0FFF78EFE074694F8F1 +:104BD00000B02078862800DBC346E7480078C0F3A1 +:104BE000401058B1E1484078022807D18020E349BD +:104BF0000968C870FFF76EFFBDE8F09FDC4810F849 +:104C00000B00FF2874D0012F04D0022F71D0032F86 +:104C100070D14DE0D5484078022848D12078272827 +:104C20000ED020782E280BD020782F2808D020787E +:104C3000312805D02078342802D02078372809D1AF +:104C40007F20CF4908708020CC490968C870FFF7E1 +:104C500041FFD1E7607800F0800040B32078C4497C +:104C6000085C00EB4000C34901EB8000C078F0B164 +:104C70002078192802D02078282804D18020BF4924 +:104C80000968C87013E02078B949085C00EB40005F +:104C9000B84911F82000B04205D01320B849087077 +:104CA000FFF718FFA8E78020B4490968C8709FE0A3 +:104CB000AE48407802284BD1207827280ED02078A3 +:104CC0002E280BD020782F2808D02078312805D026 +:104CD0002078342802D0207837280CD17F20A849AA +:104CE00008708020A5490968C870FFF7F3FE83E7C4 +:104CF000C8E12EE07BE0607800F0800040B32078CF +:104D00009B49085C00EB40009A4901EB8000C078A9 +:104D1000F0B12078192802D02078282804D18020EA +:104D200096490968C87013E020789149085C00EB47 +:104D30004000904911F82000B04205D0132090495E +:104D40000870FFF7C7FE57E780208C490968C870D4 +:104D50004EE086484078022848D1207827280ED097 +:104D600020782E280BD020782F2808D020783128C2 +:104D700005D02078342802D02078372809D17F2028 +:104D80007F49087080207D490968C870FFF7A2FE3E +:104D900032E7607800F0800040B320787449085C06 +:104DA00000EB4000734901EB8000C078F0B120783F +:104DB000192802D02078282804D180206F4909685A +:104DC000C87013E020786A49085C00EB400069492C +:104DD00011F82000B04205D0132069490870FFF790 +:104DE00079FE09E7802065490968C87000E000BFC6 +:104DF00000BF20785E49085C00EB40005D4901EB94 +:104E00008000C078002875D0607800F0800000280D +:104E100071D0012E6FDD207828285AD004DC1028AC +:104E200007D0112868D105E03E287CD08528F9D12B +:104E3000D4E000BF607881280ED0607883280BD042 +:104E40006078822802D12078112805D060788228E5 +:104E50002DD1207810282AD1022E03D013204849C2 +:104E6000087035E0FFF740FD012816D1062D01D06E +:104E7000042D09D1002042490870607800F08000BC +:104E80003E490968C87023E0B8F1000F20D14FF007 +:104E900001087E203A4908701AE00020384908705D +:104EA000607800F0800035490968C87010E02F482C +:104EB0004078022806D1802030490968C870FFF781 +:104EC00009FE99E6607800F080002C490968C870F6 +:104ED000CDE0032E11D02548407802280DD123487B +:104EE0004078022841D1802024490968C870FFF722 +:104EF000F1FD81E6C1E0BBE0B2E06078802802D03D +:104F00006078832823D1FFF7EFFC012815D1052D08 +:104F10000AD100201A490870607800F08000174913 +:104F20000968C87021E02DE0B8F1000F1DD14FF0E5 +:104F300001087E201249087017E00020104908700F +:104F4000607800F080000D490968C8700DE00748DE +:104F50004078022806D1802008490968C870FFF708 +:104F6000B9FD49E612200649087080E0580100208A +:104F7000305900089458000870150020480000209F +:104F8000500000206078802819D1FFF7ADFC01287F +:104F90000BD1042D21D1002060490870607800F009 +:104FA00080005F490968C87017E000205B490870FD +:104FB000607800F080005A490968C8700DE05948CF +:104FC0004078022806D1802055490968C870FFF74B +:104FD00081FD11E612205149087048E0022E07D0E9 +:104FE00050484078022803D113204C49087036E01D +:104FF0006078812802D06078822822D1FFF774FC83 +:10500000012814D1032D09D100204449087060788B +:1050100000F0800042490968C87020E0B8F1000F34 +:105020001DD14FF001087E203C49087017E0002098 +:105030003A490870607800F0800039490968C87002 +:105040000DE038484078022806D1802034490968AC +:10505000C870FFF73FFDCFE512203049087006E029 +:10506000607800F080002E490968C87000BF17E022 +:1050700000202B490968C87012E0002028490968FF +:10508000C8700DE011202549087026484078022894 +:1050900006D1802022490968C870FFF71BFDABE5E7 +:1050A0001E48007888BB022D01D1022F07D1032DA5 +:1050B00001D1032F03D1052D07D1012F05D17F2069 +:1050C00016490870FFF706FD26E01648007900EA49 +:1050D000090020B91348407900EA0A0028B13320BA +:1050E0000E490870FFF7F6FC16E005200E4908800F +:1050F00020780E4A105C00EB40000D4A02EB800065 +:10510000816808480830884706E0FFE70020044926 +:105110000968C870FFF7DEFC00BF6DE55000002095 +:10512000480000205801002052000020305900089B +:105130009458000810B504462046FCF725FF10BD22 +:10514000014948717047000058010020014908706A +:1051500070470000500000200149087170470000AE +:105160005801002070B5044612488068057811483F +:105170008068407800F07F06012C03D1012000F008 +:1051800047F904E0102D02D1304600F041F9FFF755 +:10519000ABFB01280CD10020FBF7DAFEFBF778FF10 +:1051A000012805D1FBF7A6FE10B90A2002490870B4 +:1051B00070BD000058010020440000200149087122 +:1051C000704700005801002001490968C870704705 +:1051D0004800002010B50348007908B1FFF74AFAEB +:1051E00010BD00004800002010B5FBF711FFFFF7CD +:1051F0004DF910BD10B500F02BF810BD70B5044688 +:105200002068457825F080052679012E03D11320EA +:10521000FFF79CFF19E06DB9022E05D01320FFF7B0 +:1052200095FFFFF79FFC10E00020A1684870022066 +:10523000A0810AE01220FFF789FFFFF793FCFFF738 +:1052400009FA10B18020FFF7BFFFFFF743FC70BDE4 +:1052500010B56548008818B364480078012806D165 +:105260000020624908704FF4FA705F490880604876 +:105270000079A8B95C480088401E5B490880084650 +:10528000008868B9002008800120FFF76BFF002428 +:1052900004E0002057490855601CC4B2022CF8DB1A +:1052A0005348007900F00C00C0B153480088A8B101 +:1052B00051480088401E504908800846008868B957 +:1052C0004B480068807830B90320494909688870E4 +:1052D00000F0CEF802E0012047490880002455E0A4 +:1052E000464830F81400B0F57A7F06DB4348001DCD +:1052F00030F81400B0F57A7F46DA4048001D30F8E7 +:105300001400401C81B23D48001D20F81410001FFD +:1053100030F81400401C394921F8140001F108004C +:10532000005D012810D1084630F81400B0F57A7FEE +:105330002ADB002021F814000021304808300155F4 +:1053400000202F4908551FE02C480A30005D012835 +:105350001AD12A48001D30F81400B0F57A7F13DB0B +:105360000020274908550021244808300155001F16 +:1053700020F81410801D0155801C005D032803DBFC +:1053800002211E480C300155601CC4B2022CA7DB60 +:105390001C480078002809DD1A480078401E194989 +:1053A00008700846007808B9FAF794FF16480078A4 +:1053B000002809DD14480078401E1349087008468B +:1053C000007808B9FAF786FF10480078002809DD50 +:1053D0000E480078401E0D4908700846007808B94C +:1053E000FAF778FF10BD000054000020560000209E +:1053F00048000020C000002052000020702600203D +:10540000BD00002044000020450000204600002090 +:1054100010B50446FFF768FA01280AD1FFF7CEFE5F +:1054200004F07F00012810D04FF4FA700B49088077 +:105430000BE004F07F00012807D1FFF7BFFE012039 +:10544000FFF77EFE0020054908800548047004F03F +:105450007F00012801D1FBF7AFFC10BD54000020F4 +:105460005801002010B504462046FCF78BFF10BD04 +:1054700010B506490648016103218182083000F019 +:105480000BF84FF4FA700349088010BD700100203A +:10549000580100205200002070B5044608480068FA +:1054A000C078802805D0A189A068FEF747FA054694 +:1054B00002E00025FFF756FB284600F003F870BD18 +:1054C0004800002070B504460CB1032000E0002025 +:1054D000054629460148FFF72FFA70BD5801002004 +:1054E00010B50320FFF7EEFF002010BD10B50446F5 +:1054F0002046FDF76FF910BD00BFFEE7002114E064 +:10550000084608220BE00B4B1B68034023B10A4BF3 +:105510001B6883EA500000E04008531EDAB2002AFC +:10552000F1DC064B43F82100491C054B1B689942EE +:10553000E6D37047DC000020E00000208026002039 +:10554000D000002002E008C8121F08C1002AFAD1CA +:1055500070477047002001E001C1121F002AFBD1F3 +:105560007047000008B501210820FEF7C5FC0320A4 +:105570008DF8020014208DF803004FF48060ADF820 +:10558000000069460D48FDF7A4F903208DF80200DC +:105590004FF40060ADF8000014208DF80300694658 +:1055A0000648FDF796F94FF480610448FDF766FA66 +:1055B0004FF400610148FDF761FA08BD000C01409D +:1055C000022800DB70470121024A02F8301000BFB8 +:1055D000F8E70000FC000020022803DA074911F870 +:1055E000301001B970470121044A02F8301000213F +:1055F00002EBC002517000BFF4E70000FC00002085 +:105600000146022908DA064810F8310020B10448A2 +:1056100010F83100032801D1002070470120FCE779 +:10562000FC00002010B5FFF79DFF10BD2DE9F041F3 +:1056300007460C461646FDF789FBA020FDF758FBF0 +:10564000FDF7B2FB00B130E0A046E11704EB1161B9 +:10565000C1F30720FDF74CFBFDF7A6FB00B124E0EA +:10566000E0B2FDF745FBFDF79FFB00B11DE0FDF744 +:105670006DFBA120FDF73CFBFDF796FB00B114E0AC +:1056800000250BE0711EA94201D0012100E000219C +:105690000846FDF703FB7855681C85B2B542F1DB7F +:1056A000FDF76EFB0120BDE8F081FDF769FB0020EE +:1056B000F9E70000014802490860704700F0002047 +:1056C0002800002003480068006810B1002001494C +:1056D0000860704728000020002001E0411C88B2CB +:1056E0003C28FBDB7047000086B0FEF799FEFAF716 +:1056F000E7FDFEF75DFE01A8FEF70EFCFEF78BFB53 +:10570000FEF7C6FAFFF78EFFFBF7C0FBFAF736FE8F +:105710004FF400712548FDF7AFF9FBF7B7FBFBF736 +:10572000C1FE41E0FEF7EAFE21480078012805D1DC +:1057300000201F49087000F03DF835E01C48407813 +:10574000012803D100201A4948702DE018488078BC +:10575000012805D1002016498870FFF745FD23E098 +:105760001348C078012803D100201149C8701BE0FC +:105770000F480079012803D100200D49087113E07A +:105780000B484079012803D10020094948710BE0FA +:105790000748C079012807D100200549C8714FF496 +:1057A00000710248FDF768F9BCE70000000C0140F9 +:1057B0000C01002010B5FBF7DDFB10BD000102035A +:1057C00004050607080C10141820304000010203DD +:1057D0000405060708090909090A0A0A0A0B0B0B3E +:1057E0000B0C0C0C0C0D0D0D0D0D0D0D0D0E0E0EEC +:1057F0000E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0FC6 +:105800000F0F0F0F0F0F0F0F0F0F0F0F0F39323139 +:10581000343830312D4446303200000000000000A2 +:105820000056480012566E00000056480012566E90 +:1058300000000001170B10001B0700000008040007 +:105840000000020000000000000000000000000056 +:10585000292E0008180100200B070000FF07000098 +:1058600000000800DF070000FF070000000008003C +:105870002D010000FF0700000000080000000000EC +:105880000000000000000000000000000000000018 +:10589000000000000206031000000000A9470008F5 +:1058A0000206031000000000A148000803060300E0 +:1058B00000000000414B0008060501000000000048 +:1058C000355100080303031000000000694600087A +:1058D0001402010001000000ED540008060501005B +:1058E00000000000754B00080B02010001000000E1 +:1058F0004D4B0008FF020100010000006554000844 +:105900000102010001000000594B000802060310CB +:1059100000000000FD510008020303100000000019 +:1059200075470008000000000000000000000000B3 +:10593000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77 +:105940000001FFFFFFFFFFFFFFFFFFFFFFFFFFFF64 +:10595000FFFF02FFFFFFFF0304FFFFFFFFFF05FF45 +:10596000FF06FFFF07FF0809FFFFFFFFFFFF0AFF1A +:10597000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF37 +:10598000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF27 +:10599000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF17 +:1059A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07 +:1059B000FFFFFFFFFF0B000094F100003D150020EA +:1059C00009010000FFFF000095F10000B500002074 +:1059D00006010000FFFF000093F10000B00000206E +:1059E00005010000FFFF00008CF1000046150020BB +:1059F00013010000FFFF000080F1000034150020BB +:105A000009010000FFFF0000DD160008FD16000878 +:105A1000BD16000815170008191700083E53E17B52 +:105A2000405A000800000020FC0000004455000817 +:105A30003C5B0008FC000020AC310000545500081D +:105A40000000000001020304010203040607080924 +:105A50000204060800A24A04000000000000000042 +:105A6000010203040607080900000000000000000E +:105A70000000000000000000000000000000000026 +:105A80000000000000000000000000000000000016 +:105A90000000000000000000000000000000000006 +:105AA00000000000000000000000000018010020BD +:105AB000D5490008F5490008C55400088149000887 +:105AC000E1540008814700080000000000000000C9 +:105AD00000000000000000000000000000000000C6 +:105AE00000000000000000000000000000000000B6 +:105AF00000000000000000000000000000000000A6 +:105B00000000000000000000000000000000000095 +:105B1000000100000800000000000000000000007C +:105B20000000000000000000000000000000000075 +:0C5B300000000000000000000000000069 +:04000005080001519D +:00000001FF diff --git a/boot_project/Objects/boot.htm b/boot_project/Objects/boot.htm new file mode 100644 index 0000000..062cea8 --- /dev/null +++ b/boot_project/Objects/boot.htm @@ -0,0 +1,1916 @@ + + +Static Call Graph - [.\Objects\boot.axf] +
+

Static Call Graph for image .\Objects\boot.axf


+

#<CALLGRAPH># ARM Linker, 5060750: Last Updated: Tue Nov 05 09:42:11 2024 +

+

Maximum Stack Usage = 384 bytes + Unknown(Cycles, Untraceable Function Pointers)

+Call chain for Maximum Stack Depth:

+CAN2_RX1_IRQHandler ⇒ APP_CAN_FifoMessageReceive ⇒ APP_CAN_MessageTypeHandle ⇒ ISO15765_Precopy ⇒ ISO15765_RxStateTask ⇒ ISO15765_CanTransmitMsg ⇒ IF_CAN_TransmitMsg ⇒ IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +

+

+Mutually Recursive functions +

  • ADC1_2_IRQHandler   ⇒   ADC1_2_IRQHandler
    + +

    +

    +Function Pointers +

      +
    • ADC1_2_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • BusFault_Handler from stm32f10x_it.o(i.BusFault_Handler) referenced from startup_stm32f10x_cl.o(RESET) +
    • CAN1_RX0_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • CAN1_RX1_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • CAN1_SCE_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • CAN1_TX_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • CAN2_RX0_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • CAN2_RX1_IRQHandler from can2.o(i.CAN2_RX1_IRQHandler) referenced from startup_stm32f10x_cl.o(RESET) +
    • CAN2_SCE_IRQHandler from can2.o(i.CAN2_SCE_IRQHandler) referenced from startup_stm32f10x_cl.o(RESET) +
    • CAN2_TX_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • DMA1_Channel1_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • DMA1_Channel2_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • DMA1_Channel3_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • DMA1_Channel4_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • DMA1_Channel5_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • DMA1_Channel6_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • DMA1_Channel7_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • DMA2_Channel1_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • DMA2_Channel2_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • DMA2_Channel3_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • DMA2_Channel4_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • DMA2_Channel5_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • DebugMon_Handler from stm32f10x_it.o(i.DebugMon_Handler) referenced from startup_stm32f10x_cl.o(RESET) +
    • Diag_Read_ECUSoftwareCode_F193 from diag_eeprom_c301.o(i.Diag_Read_ECUSoftwareCode_F193) referenced from diag_appl_c301.o(.constdata) +
    • Diag_Read_ECUSoftwareCode_F194 from diag_eeprom_c301.o(i.Diag_Read_ECUSoftwareCode_F194) referenced from diag_appl_c301.o(.constdata) +
    • Diag_Read_ECUSoftwareCode_F195 from diag_eeprom_c301.o(i.Diag_Read_ECUSoftwareCode_F195) referenced from diag_appl_c301.o(.constdata) +
    • Diag_Read_F18C from diag_eeprom_c301.o(i.Diag_Read_F18C) referenced from diag_appl_c301.o(.constdata) +
    • Diag_Read_FBLVersionInformation from diag_eeprom_c301.o(i.Diag_Read_FBLVersionInformation) referenced from diag_appl_c301.o(.constdata) +
    • ETH_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • ETH_WKUP_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • EXTI0_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • EXTI15_10_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • EXTI1_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • EXTI2_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • EXTI3_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • EXTI4_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • EXTI9_5_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • FLASH_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • HardFault_Handler from stm32f10x_it.o(i.HardFault_Handler) referenced from startup_stm32f10x_cl.o(RESET) +
    • I2C1_ER_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • I2C1_EV_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • I2C2_ER_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • I2C2_EV_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • ISO15765_DrvConfirmation from iso15765-2.o(i.ISO15765_DrvConfirmation) referenced from canconfig_c301.o(.constdata) +
    • MemManage_Handler from stm32f10x_it.o(i.MemManage_Handler) referenced from startup_stm32f10x_cl.o(RESET) +
    • NMI_Handler from stm32f10x_it.o(i.NMI_Handler) referenced from startup_stm32f10x_cl.o(RESET) +
    • OTG_FS_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • OTG_FS_WKUP_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • PVD_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • PendSV_Handler from stm32f10x_it.o(i.PendSV_Handler) referenced from startup_stm32f10x_cl.o(RESET) +
    • RCC_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • RTCAlarm_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • RTC_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • Reset_Handler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • SPI1_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • SPI2_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • SPI3_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • SVC_Handler from stm32f10x_it.o(i.SVC_Handler) referenced from startup_stm32f10x_cl.o(RESET) +
    • SysTick_Handler from dev_sys.o(i.SysTick_Handler) referenced from startup_stm32f10x_cl.o(RESET) +
    • SystemInit from system_stm32f10x.o(i.SystemInit) referenced from startup_stm32f10x_cl.o(.text) +
    • TAMPER_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • TIM1_BRK_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • TIM1_CC_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • TIM1_TRG_COM_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • TIM1_UP_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • TIM2_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • TIM3_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • TIM4_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • TIM5_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • TIM6_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • TIM7_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • UART4_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • UART5_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • USART1_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • USART2_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • USART3_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • Uds_CommunicationControl from uds.o(i.Uds_CommunicationControl) referenced from canconfig_c301.o(.constdata) +
    • Uds_ControlDTCSetting from uds.o(i.Uds_ControlDTCSetting) referenced from canconfig_c301.o(.constdata) +
    • Uds_CopyToCAN from uds.o(i.Uds_CopyToCAN) referenced from iso15765-2_entry.o(.data) +
    • Uds_DiagControlSession from uds.o(i.Uds_DiagControlSession) referenced from canconfig_c301.o(.constdata) +
    • Uds_ECUReset from uds.o(i.Uds_ECUReset) referenced from canconfig_c301.o(.constdata) +
    • Uds_PhysFuncGetBuffer from uds.o(i.Uds_PhysFuncGetBuffer) referenced from iso15765-2_entry.o(.data) +
    • Uds_PhysReqInd from uds.o(i.Uds_PhysReqInd) referenced from iso15765-2_entry.o(.data) +
    • Uds_PhysRxErrorIndication from uds.o(i.Uds_PhysRxErrorIndication) referenced from iso15765-2_entry.o(.data) +
    • Uds_ReadDataByIdentifier from uds.o(i.Uds_ReadDataByIdentifier) referenced from canconfig_c301.o(.constdata) +
    • Uds_RequestDownload from uds.o(i.Uds_RequestDownload) referenced from canconfig_c301.o(.constdata) +
    • Uds_RequestTransferExit from uds.o(i.Uds_RequestTransferExit) referenced from canconfig_c301.o(.constdata) +
    • Uds_RoutineControl from uds.o(i.Uds_RoutineControl) referenced from canconfig_c301.o(.constdata) +
    • Uds_SecurityAccess from uds.o(i.Uds_SecurityAccess) referenced from canconfig_c301.o(.constdata) +
    • Uds_TesterPresent from uds.o(i.Uds_TesterPresent) referenced from canconfig_c301.o(.constdata) +
    • Uds_TransferData from uds.o(i.Uds_TransferData) referenced from canconfig_c301.o(.constdata) +
    • Uds_TxConfirmation from uds.o(i.Uds_TxConfirmation) referenced from iso15765-2_entry.o(.data) +
    • Uds_TxErrorIndication from uds.o(i.Uds_TxErrorIndication) referenced from iso15765-2_entry.o(.data) +
    • Uds_WriteDataByIdentifier from uds.o(i.Uds_WriteDataByIdentifier) referenced from canconfig_c301.o(.constdata) +
    • UsageFault_Handler from stm32f10x_it.o(i.UsageFault_Handler) referenced from startup_stm32f10x_cl.o(RESET) +
    • WWDG_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • __main from entry.o(.ARM.Collect$$$$00000000) referenced from startup_stm32f10x_cl.o(.text) +
    • main from main.o(i.main) referenced from entry9a.o(.ARM.Collect$$$$0000000B) +
    +

    +

    +Global Symbols +

    +

    __main (Thumb, 0 bytes, Stack size unknown bytes, entry.o(.ARM.Collect$$$$00000000)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(.text) +
    +

    _main_stk (Thumb, 0 bytes, Stack size unknown bytes, entry2.o(.ARM.Collect$$$$00000001)) + +

    _main_scatterload (Thumb, 0 bytes, Stack size unknown bytes, entry5.o(.ARM.Collect$$$$00000004)) +

    [Calls]

    • >>   __scatterload +
    + +

    __main_after_scatterload (Thumb, 0 bytes, Stack size unknown bytes, entry5.o(.ARM.Collect$$$$00000004)) +

    [Called By]

    • >>   __scatterload +
    + +

    _main_clock (Thumb, 0 bytes, Stack size unknown bytes, entry7b.o(.ARM.Collect$$$$00000008)) + +

    _main_cpp_init (Thumb, 0 bytes, Stack size unknown bytes, entry8b.o(.ARM.Collect$$$$0000000A)) + +

    _main_init (Thumb, 0 bytes, Stack size unknown bytes, entry9a.o(.ARM.Collect$$$$0000000B)) + +

    __rt_final_cpp (Thumb, 0 bytes, Stack size unknown bytes, entry10a.o(.ARM.Collect$$$$0000000D)) + +

    __rt_final_exit (Thumb, 0 bytes, Stack size unknown bytes, entry11a.o(.ARM.Collect$$$$0000000F)) + +

    __get_PSP (Thumb, 6 bytes, Stack size 0 bytes, core_cm3.o(.emb_text), UNUSED) + +

    __set_PSP (Thumb, 6 bytes, Stack size 0 bytes, core_cm3.o(.emb_text), UNUSED) + +

    __get_MSP (Thumb, 6 bytes, Stack size 0 bytes, core_cm3.o(.emb_text), UNUSED) + +

    __set_MSP (Thumb, 6 bytes, Stack size 0 bytes, core_cm3.o(.emb_text)) +

    [Called By]

    • >>   JumpToExecute +
    + +

    __REV16 (Thumb, 4 bytes, Stack size 0 bytes, core_cm3.o(.emb_text), UNUSED) + +

    __REVSH (Thumb, 4 bytes, Stack size 0 bytes, core_cm3.o(.emb_text), UNUSED) + +

    Reset_Handler (Thumb, 8 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    ADC1_2_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +

    [Calls]

    • >>   ADC1_2_IRQHandler +
    +
    [Called By]
    • >>   ADC1_2_IRQHandler +
    +
    [Address Reference Count : 1]
    • startup_stm32f10x_cl.o(RESET) +
    +

    CAN1_RX0_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    CAN1_RX1_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    CAN1_SCE_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    CAN1_TX_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    CAN2_RX0_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    CAN2_TX_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    DMA1_Channel1_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    DMA1_Channel2_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    DMA1_Channel3_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    DMA1_Channel4_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    DMA1_Channel5_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    DMA1_Channel6_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    DMA1_Channel7_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    DMA2_Channel1_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    DMA2_Channel2_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    DMA2_Channel3_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    DMA2_Channel4_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    DMA2_Channel5_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    ETH_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    ETH_WKUP_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    EXTI0_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    EXTI15_10_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    EXTI1_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    EXTI2_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    EXTI3_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    EXTI4_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    EXTI9_5_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    FLASH_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    I2C1_ER_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    I2C1_EV_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    I2C2_ER_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    I2C2_EV_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    OTG_FS_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    OTG_FS_WKUP_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    PVD_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    RCC_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    RTCAlarm_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    RTC_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    SPI1_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    SPI2_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    SPI3_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    TAMPER_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    TIM1_BRK_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    TIM1_CC_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    TIM1_TRG_COM_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    TIM1_UP_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    TIM2_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    TIM3_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    TIM4_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    TIM5_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    TIM6_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    TIM7_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    UART4_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    UART5_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    USART1_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    USART2_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    USART3_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    WWDG_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    __aeabi_memcpy (Thumb, 36 bytes, Stack size 0 bytes, memcpya.o(.text), UNUSED) + +

    __aeabi_memcpy4 (Thumb, 0 bytes, Stack size 0 bytes, memcpya.o(.text)) +

    [Called By]

    • >>   Can2_Send_Message +
    + +

    __aeabi_memcpy8 (Thumb, 0 bytes, Stack size 0 bytes, memcpya.o(.text), UNUSED) + +

    __aeabi_memset (Thumb, 14 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED) +

    [Called By]

    • >>   _memset$wrapper +
    • >>   __aeabi_memclr +
    + +

    __aeabi_memset4 (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED) + +

    __aeabi_memset8 (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED) + +

    __aeabi_memclr (Thumb, 4 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED) +

    [Calls]

    • >>   __aeabi_memset +
    + +

    __aeabi_memclr4 (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text)) +

    [Called By]

    • >>   CAN2_RX1_IRQHandler +
    • >>   IF_CAN_CopyDataAndStartTx +
    + +

    __aeabi_memclr8 (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED) + +

    _memset$wrapper (Thumb, 18 bytes, Stack size 8 bytes, memseta.o(.text), UNUSED) +

    [Calls]

    • >>   __aeabi_memset +
    + +

    __scatterload (Thumb, 28 bytes, Stack size 0 bytes, init.o(.text)) +

    [Calls]

    • >>   __main_after_scatterload +
    +
    [Called By]
    • >>   _main_scatterload +
    + +

    __scatterload_rt2 (Thumb, 0 bytes, Stack size 0 bytes, init.o(.text), UNUSED) + +

    APP_CAN_FifoMessageReceive (Thumb, 72 bytes, Stack size 32 bytes, app_can.o(i.APP_CAN_FifoMessageReceive)) +

    [Stack]

    • Max Depth = 352
    • Call Chain = APP_CAN_FifoMessageReceive ⇒ APP_CAN_MessageTypeHandle ⇒ ISO15765_Precopy ⇒ ISO15765_RxStateTask ⇒ ISO15765_CanTransmitMsg ⇒ IF_CAN_TransmitMsg ⇒ IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   APP_CAN_MessageTypeHandle +
    +
    [Called By]
    • >>   CAN2_RX1_IRQHandler +
    + +

    BSP_BKP_Init (Thumb, 20 bytes, Stack size 8 bytes, main.o(i.BSP_BKP_Init)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = BSP_BKP_Init +
    +
    [Calls]
    • >>   RCC_APB1PeriphClockCmd +
    • >>   PWR_BackupAccessCmd +
    +
    [Called By]
    • >>   main +
    + +

    BSP_vSystemReset (Thumb, 30 bytes, Stack size 0 bytes, app_can.o(i.BSP_vSystemReset)) +

    [Called By]

    • >>   Uds_TimerTask +
    • >>   Can_Task +
    + +

    BusFault_Handler (Thumb, 4 bytes, Stack size 0 bytes, stm32f10x_it.o(i.BusFault_Handler)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    Bzip2_Finish (Thumb, 12 bytes, Stack size 0 bytes, uds_sa_c301.o(i.Bzip2_Finish)) +

    [Called By]

    • >>   Diag_RequestTransferExit +
    + +

    Bzip2_Init (Thumb, 26 bytes, Stack size 4 bytes, uds_sa_c301.o(i.Bzip2_Init)) +

    [Stack]

    • Max Depth = 4
    • Call Chain = Bzip2_Init +
    +
    [Calls]
    • >>   _Bzip2_InitTable +
    +
    [Called By]
    • >>   Diag_RequestDownload +
    + +

    Bzip2_Start (Thumb, 10 bytes, Stack size 0 bytes, uds_sa_c301.o(i.Bzip2_Start)) +

    [Called By]

    • >>   Diag_RequestDownload +
    + +

    Bzip2_Update (Thumb, 44 bytes, Stack size 12 bytes, uds_sa_c301.o(i.Bzip2_Update)) +

    [Stack]

    • Max Depth = 12
    • Call Chain = Bzip2_Update +
    +
    [Called By]
    • >>   Diag_TransferData +
    + +

    CAN2_Mode_Init (Thumb, 308 bytes, Stack size 40 bytes, can2.o(i.CAN2_Mode_Init)) +

    [Stack]

    • Max Depth = 64
    • Call Chain = CAN2_Mode_Init ⇒ GPIO_Init +
    +
    [Calls]
    • >>   CAN_Init +
    • >>   CAN_ITConfig +
    • >>   CAN_FilterInit +
    • >>   RCC_APB2PeriphClockCmd +
    • >>   RCC_APB1PeriphClockCmd +
    • >>   GPIO_Init +
    • >>   NVIC_Init +
    • >>   can_bus_open_hook +
    +
    [Called By]
    • >>   main +
    + +

    CAN2_RX1_IRQHandler (Thumb, 44 bytes, Stack size 32 bytes, can2.o(i.CAN2_RX1_IRQHandler)) +

    [Stack]

    • Max Depth = 384
    • Call Chain = CAN2_RX1_IRQHandler ⇒ APP_CAN_FifoMessageReceive ⇒ APP_CAN_MessageTypeHandle ⇒ ISO15765_Precopy ⇒ ISO15765_RxStateTask ⇒ ISO15765_CanTransmitMsg ⇒ IF_CAN_TransmitMsg ⇒ IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   CAN_Receive +
    • >>   APP_CAN_FifoMessageReceive +
    • >>   can_bus_ready_hook +
    • >>   __aeabi_memclr4 +
    +
    [Address Reference Count : 1]
    • startup_stm32f10x_cl.o(RESET) +
    +

    CAN2_SCE_IRQHandler (Thumb, 186 bytes, Stack size 8 bytes, can2.o(i.CAN2_SCE_IRQHandler)) +

    [Stack]

    • Max Depth = 24
    • Call Chain = CAN2_SCE_IRQHandler ⇒ CAN_GetITStatus +
    +
    [Calls]
    • >>   CAN_GetITStatus +
    • >>   CAN_GetFlagStatus +
    • >>   CAN_DeInit +
    • >>   CAN_ClearITPendingBit +
    • >>   CAN_ClearFlag +
    • >>   TickOut +
    +
    [Address Reference Count : 1]
    • startup_stm32f10x_cl.o(RESET) +
    +

    CAN_ClearFlag (Thumb, 52 bytes, Stack size 0 bytes, stm32f10x_can.o(i.CAN_ClearFlag)) +

    [Called By]

    • >>   CAN2_SCE_IRQHandler +
    + +

    CAN_ClearITPendingBit (Thumb, 162 bytes, Stack size 0 bytes, stm32f10x_can.o(i.CAN_ClearITPendingBit)) +

    [Called By]

    • >>   CAN2_SCE_IRQHandler +
    + +

    CAN_DeInit (Thumb, 50 bytes, Stack size 8 bytes, stm32f10x_can.o(i.CAN_DeInit)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = CAN_DeInit +
    +
    [Calls]
    • >>   RCC_APB1PeriphResetCmd +
    +
    [Called By]
    • >>   CAN2_SCE_IRQHandler +
    + +

    CAN_FilterInit (Thumb, 258 bytes, Stack size 8 bytes, stm32f10x_can.o(i.CAN_FilterInit)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = CAN_FilterInit +
    +
    [Called By]
    • >>   CAN2_Mode_Init +
    + +

    CAN_GetFlagStatus (Thumb, 120 bytes, Stack size 8 bytes, stm32f10x_can.o(i.CAN_GetFlagStatus)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = CAN_GetFlagStatus +
    +
    [Called By]
    • >>   CAN2_SCE_IRQHandler +
    + +

    CAN_GetITStatus (Thumb, 284 bytes, Stack size 16 bytes, stm32f10x_can.o(i.CAN_GetITStatus)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = CAN_GetITStatus +
    +
    [Calls]
    • >>   CheckITStatus +
    +
    [Called By]
    • >>   CAN2_SCE_IRQHandler +
    + +

    CAN_ITConfig (Thumb, 18 bytes, Stack size 0 bytes, stm32f10x_can.o(i.CAN_ITConfig)) +

    [Called By]

    • >>   CAN2_Mode_Init +
    + +

    CAN_Init (Thumb, 276 bytes, Stack size 12 bytes, stm32f10x_can.o(i.CAN_Init)) +

    [Stack]

    • Max Depth = 12
    • Call Chain = CAN_Init +
    +
    [Called By]
    • >>   CAN2_Mode_Init +
    + +

    CAN_Receive (Thumb, 240 bytes, Stack size 8 bytes, stm32f10x_can.o(i.CAN_Receive)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = CAN_Receive +
    +
    [Called By]
    • >>   CAN2_RX1_IRQHandler +
    + +

    CAN_Transmit (Thumb, 294 bytes, Stack size 8 bytes, stm32f10x_can.o(i.CAN_Transmit)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = CAN_Transmit +
    +
    [Called By]
    • >>   Can2_Send_Message +
    + +

    CAN_TransmitStatus (Thumb, 138 bytes, Stack size 8 bytes, stm32f10x_can.o(i.CAN_TransmitStatus)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = CAN_TransmitStatus +
    +
    [Called By]
    • >>   Can2_Send_Message +
    + +

    Can2_Send_Message (Thumb, 96 bytes, Stack size 48 bytes, can2.o(i.Can2_Send_Message)) +

    [Stack]

    • Max Depth = 56
    • Call Chain = Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   CAN_TransmitStatus +
    • >>   CAN_Transmit +
    • >>   can_bus_send_ready +
    • >>   __aeabi_memcpy4 +
    +
    [Called By]
    • >>   IF_CAN_SendCanData +
    + +

    CanExt_CanTransShutdown (Thumb, 10 bytes, Stack size 8 bytes, app_can.o(i.CanExt_CanTransShutdown)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = CanExt_CanTransShutdown ⇒ CanTrans_GoToSleep +
    +
    [Calls]
    • >>   CanTrans_GoToSleep +
    +
    [Called By]
    • >>   Can_Task +
    + +

    CanTask_BusErrorDetection (Thumb, 2 bytes, Stack size 0 bytes, app_can.o(i.CanTask_BusErrorDetection)) +

    [Called By]

    • >>   CanTask_TimerProcess +
    + +

    CanTask_FBLInit (Thumb, 196 bytes, Stack size 0 bytes, app_can.o(i.CanTask_FBLInit)) +

    [Called By]

    • >>   Uds_TransSessionType +
    • >>   CanTask_InitProcess +
    + +

    CanTask_GetSaRandom (Thumb, 6 bytes, Stack size 0 bytes, app_can.o(i.CanTask_GetSaRandom)) +

    [Called By]

    • >>   SA_Random +
    + +

    CanTask_InitProcess (Thumb, 80 bytes, Stack size 8 bytes, app_can.o(i.CanTask_InitProcess)) +

    [Stack]

    • Max Depth = 32
    • Call Chain = CanTask_InitProcess ⇒ ISO15765_InitPowerOn ⇒ ISO15765_Init ⇒ ISO15765_TxInit +
    +
    [Calls]
    • >>   IF_CAN_IsOnLine +
    • >>   CanTrans_Init +
    • >>   ISO15765_InitPowerOn +
    • >>   CanTask_FBLInit +
    • >>   Uds_PowerOnInit +
    • >>   IF_CAN_InitLoaclStatus +
    +
    [Called By]
    • >>   main +
    + +

    CanTask_IsAppBeenErased (Thumb, 40 bytes, Stack size 0 bytes, app_can.o(i.CanTask_IsAppBeenErased)) +

    [Called By]

    • >>   Uds_SetState +
    + +

    CanTask_SetStayInBootFlagValue (Thumb, 6 bytes, Stack size 0 bytes, app_can.o(i.CanTask_SetStayInBootFlagValue)) +

    [Called By]

    • >>   Uds_DiagControlSession +
    • >>   Uds_SetState +
    + +

    CanTask_UdsStateProcess (Thumb, 16 bytes, Stack size 8 bytes, app_can.o(i.CanTask_UdsStateProcess)) +

    [Stack]

    • Max Depth = 112
    • Call Chain = CanTask_UdsStateProcess ⇒ Uds_StateTask ⇒ Uds_ContextTask ⇒ Uds_SetState ⇒ Diag_CheckValidApp1 ⇒ ee_ReadBytes ⇒ IIC_Read_Byte ⇒ IIC_NAck +
    +
    [Calls]
    • >>   Uds_StateTask +
    +
    [Called By]
    • >>   uds_SysTick_Process_1ms +
    + +

    CanTrans_GoToNormal (Thumb, 38 bytes, Stack size 8 bytes, can_transceiver.o(i.CanTrans_GoToNormal)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = CanTrans_GoToNormal +
    +
    [Calls]
    • >>   GPIO_SetBits +
    +
    [Called By]
    • >>   CanTrans_Init +
    + +

    CanTrans_GoToSleep (Thumb, 50 bytes, Stack size 8 bytes, can_transceiver.o(i.CanTrans_GoToSleep)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = CanTrans_GoToSleep +
    +
    [Calls]
    • >>   GPIO_SetBits +
    • >>   GPIO_ResetBits +
    • >>   CanTrans_Delay +
    +
    [Called By]
    • >>   CanExt_CanTransShutdown +
    + +

    CanTrans_Init (Thumb, 10 bytes, Stack size 8 bytes, can_transceiver.o(i.CanTrans_Init)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = CanTrans_Init ⇒ CanTrans_GoToNormal +
    +
    [Calls]
    • >>   CanTrans_GoToNormal +
    +
    [Called By]
    • >>   CanTask_InitProcess +
    + +

    Can_Task (Thumb, 68 bytes, Stack size 8 bytes, app_can.o(i.Can_Task)) +

    [Stack]

    • Max Depth = 320
    • Call Chain = Can_Task ⇒ CanTask_TimerProcess ⇒ ISO15765_Task ⇒ ISO15765_TxTask ⇒ ISO15765_TxStateTask ⇒ ISO15765_CanTransmitMsg ⇒ IF_CAN_TransmitMsg ⇒ IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   BSP_vSystemReset +
    • >>   CanExt_CanTransShutdown +
    • >>   CanTask_TimerProcess +
    +
    [Called By]
    • >>   Uds_SysTick_Process_10ms +
    + +

    DebugMon_Handler (Thumb, 2 bytes, Stack size 0 bytes, stm32f10x_it.o(i.DebugMon_Handler)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    Diag_AppDataInit (Thumb, 8 bytes, Stack size 0 bytes, diag_appl_c301.o(i.Diag_AppDataInit)) +

    [Called By]

    • >>   Uds_PowerOnInit +
    • >>   Uds_DiagControlSession +
    + +

    Diag_CheckTransmitSequence (Thumb, 20 bytes, Stack size 16 bytes, diag_appl_c301.o(i.Diag_CheckTransmitSequence)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = Diag_CheckTransmitSequence +
    +
    [Calls]
    • >>   GetCrc32Chk +
    +
    [Called By]
    • >>   Diag_RoutineControl +
    + +

    Diag_CheckValidApp1 (Thumb, 54 bytes, Stack size 16 bytes, diag_appl_c301.o(i.Diag_CheckValidApp1)) +

    [Stack]

    • Max Depth = 64
    • Call Chain = Diag_CheckValidApp1 ⇒ ee_ReadBytes ⇒ IIC_Read_Byte ⇒ IIC_NAck +
    +
    [Calls]
    • >>   ee_ReadBytes +
    +
    [Called By]
    • >>   Diag_CheckValidApplication +
    • >>   Uds_SetState +
    + +

    Diag_CheckValidApplication (Thumb, 24 bytes, Stack size 8 bytes, diag_appl_c301.o(i.Diag_CheckValidApplication)) +

    [Stack]

    • Max Depth = 72
    • Call Chain = Diag_CheckValidApplication ⇒ Diag_CheckValidApp1 ⇒ ee_ReadBytes ⇒ IIC_Read_Byte ⇒ IIC_NAck +
    +
    [Calls]
    • >>   Diag_CheckValidApp1 +
    +
    [Called By]
    • >>   Diag_RoutineControl +
    + +

    Diag_CheckVerifyUpgradePacket (Thumb, 22 bytes, Stack size 0 bytes, diag_appl_c301.o(i.Diag_CheckVerifyUpgradePacket)) +

    [Called By]

    • >>   Diag_RoutineControl +
    + +

    Diag_CheckWriteDIDRange (Thumb, 48 bytes, Stack size 0 bytes, diag_appl_c301.o(i.Diag_CheckWriteDIDRange)) +

    [Called By]

    • >>   Diag_WriteDataByIdentifier +
    + +

    Diag_ClrAPP1UpdateMark (Thumb, 72 bytes, Stack size 16 bytes, diag_eeprom_c301.o(i.Diag_ClrAPP1UpdateMark)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = Diag_ClrAPP1UpdateMark +
    +
    [Calls]
    • >>   flashdnit +
    • >>   flashInit +
    +
    [Called By]
    • >>   Diag_RoutineControl +
    + +

    Diag_ClrEepromUpdateMark (Thumb, 20 bytes, Stack size 0 bytes, diag_eeprom_c301.o(i.Diag_ClrEepromUpdateMark)) +

    [Called By]

    • >>   Diag_RoutineControl +
    + +

    Diag_CommunicationControl (Thumb, 178 bytes, Stack size 24 bytes, diag_appl_c301.o(i.Diag_CommunicationControl)) +

    [Stack]

    • Max Depth = 32
    • Call Chain = Diag_CommunicationControl ⇒ Uds_ProcessFinished +
    +
    [Calls]
    • >>   Diag_CommEnable +
    • >>   Diag_CommDisable +
    • >>   Uds_SetSupFuncEnableFlag +
    • >>   Uds_SetNRC +
    • >>   Uds_ResponseEnable +
    • >>   Uds_ProcessFinished +
    • >>   Uds_CheckAdrrType +
    +
    [Called By]
    • >>   Uds_CommunicationControl +
    + +

    Diag_ControlDTCSetting (Thumb, 100 bytes, Stack size 16 bytes, diag_appl_c301.o(i.Diag_ControlDTCSetting)) +

    [Stack]

    • Max Depth = 24
    • Call Chain = Diag_ControlDTCSetting ⇒ Uds_ProcessFinished +
    +
    [Calls]
    • >>   Uds_SetSupFuncEnableFlag +
    • >>   Uds_SetNRC +
    • >>   Uds_ResponseEnable +
    • >>   Uds_ProcessFinished +
    • >>   Uds_CheckAdrrType +
    +
    [Called By]
    • >>   Uds_ControlDTCSetting +
    + +

    Diag_DataCalcCRC (Thumb, 96 bytes, Stack size 16 bytes, diag_appl_c301.o(i.Diag_DataCalcCRC)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = Diag_DataCalcCRC +
    +
    [Called By]
    • >>   Diag_TransferData +
    + +

    Diag_DataProgram (Thumb, 94 bytes, Stack size 24 bytes, diag_appl_c301.o(i.Diag_DataProgram)) +

    [Stack]

    • Max Depth = 24
    • Call Chain = Diag_DataProgram +
    +
    [Calls]
    • >>   flashdnit +
    • >>   flashInit +
    +
    [Called By]
    • >>   Diag_TransferData +
    + +

    Diag_EcuReset (Thumb, 132 bytes, Stack size 16 bytes, diag_appl_c301.o(i.Diag_EcuReset)) +

    [Stack]

    • Max Depth = 24
    • Call Chain = Diag_EcuReset ⇒ Uds_ProcessFinished +
    +
    [Calls]
    • >>   Uds_SetSupFuncEnableFlag +
    • >>   Uds_SetNRC +
    • >>   Uds_ResponseEnable +
    • >>   Uds_ProcessFinished +
    • >>   Uds_CheckAdrrType +
    +
    [Called By]
    • >>   Uds_ECUReset +
    + +

    Diag_FlashCalcCRC (Thumb, 118 bytes, Stack size 40 bytes, diag_appl_c301.o(i.Diag_FlashCalcCRC)) +

    [Stack]

    • Max Depth = 328
    • Call Chain = Diag_FlashCalcCRC ⇒ Uds_ForceTransmitResPending ⇒ ISO15765_CanTransmitMsgWithDlc ⇒ IF_CAN_TransmitMsg ⇒ IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   Uds_ForceTransmitResPending +
    +
    [Called By]
    • >>   Diag_RequestTransferExit +
    + +

    Diag_HndUpdataEV (Thumb, 2 bytes, Stack size 0 bytes, diag_eeprom_c301.o(i.Diag_HndUpdataEV)) +

    [Called By]

    • >>   main +
    + +

    Diag_MemCopy (Thumb, 22 bytes, Stack size 8 bytes, diag_eeprom_c301.o(i.Diag_MemCopy)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = Diag_MemCopy +
    +
    [Called By]
    • >>   Diag_WriteDataByIdentifier +
    • >>   Uds_ContextTask +
    + +

    Diag_MemCpy (Thumb, 20 bytes, Stack size 8 bytes, diag_appl_c301.o(i.Diag_MemCpy)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = Diag_MemCpy +
    +
    [Called By]
    • >>   Diag_RamWrite +
    + +

    Diag_ProgramFailedDataInit (Thumb, 120 bytes, Stack size 0 bytes, diag_appl_c301.o(i.Diag_ProgramFailedDataInit)) +

    [Called By]

    • >>   Diag_TransferData +
    + +

    Diag_RamWrite (Thumb, 20 bytes, Stack size 16 bytes, diag_appl_c301.o(i.Diag_RamWrite)) +

    [Stack]

    • Max Depth = 24
    • Call Chain = Diag_RamWrite ⇒ Diag_MemCpy +
    +
    [Calls]
    • >>   Diag_MemCpy +
    +
    [Called By]
    • >>   Diag_TransferData +
    + +

    Diag_ReadDataByIdentifier (Thumb, 340 bytes, Stack size 144 bytes, diag_appl_c301.o(i.Diag_ReadDataByIdentifier)) +

    [Stack]

    • Max Depth = 152
    • Call Chain = Diag_ReadDataByIdentifier ⇒ Uds_ProcessFinished +
    +
    [Calls]
    • >>   Uds_SetSupFuncEnableFlag +
    • >>   Uds_SetNRC +
    • >>   Uds_ProcessFinished +
    • >>   Uds_GetNRC +
    • >>   Uds_CheckAdrrType +
    +
    [Called By]
    • >>   Uds_ReadDataByIdentifier +
    + +

    Diag_Read_ECUSoftwareCode_F193 (Thumb, 22 bytes, Stack size 0 bytes, diag_eeprom_c301.o(i.Diag_Read_ECUSoftwareCode_F193)) +
    [Address Reference Count : 1]

    • diag_appl_c301.o(.constdata) +
    +

    Diag_Read_ECUSoftwareCode_F194 (Thumb, 22 bytes, Stack size 0 bytes, diag_eeprom_c301.o(i.Diag_Read_ECUSoftwareCode_F194)) +
    [Address Reference Count : 1]

    • diag_appl_c301.o(.constdata) +
    +

    Diag_Read_ECUSoftwareCode_F195 (Thumb, 20 bytes, Stack size 0 bytes, diag_eeprom_c301.o(i.Diag_Read_ECUSoftwareCode_F195)) +
    [Address Reference Count : 1]

    • diag_appl_c301.o(.constdata) +
    +

    Diag_Read_F18C (Thumb, 2 bytes, Stack size 0 bytes, diag_eeprom_c301.o(i.Diag_Read_F18C)) +
    [Address Reference Count : 1]

    • diag_appl_c301.o(.constdata) +
    +

    Diag_Read_FBLVersionInformation (Thumb, 22 bytes, Stack size 0 bytes, diag_eeprom_c301.o(i.Diag_Read_FBLVersionInformation)) +
    [Address Reference Count : 1]

    • diag_appl_c301.o(.constdata) +
    +

    Diag_RequestDownload (Thumb, 832 bytes, Stack size 32 bytes, diag_appl_c301.o(i.Diag_RequestDownload)) +

    [Stack]

    • Max Depth = 40
    • Call Chain = Diag_RequestDownload ⇒ Uds_ProcessFinished +
    +
    [Calls]
    • >>   Bzip2_Start +
    • >>   Bzip2_Init +
    • >>   Uds_SetNRC +
    • >>   Uds_ProcessFinished +
    • >>   Uds_GetNRC +
    +
    [Called By]
    • >>   Uds_RequestDownload +
    + +

    Diag_RequestEraseFlash (Thumb, 72 bytes, Stack size 24 bytes, diag_appl_c301.o(i.Diag_RequestEraseFlash)) +

    [Stack]

    • Max Depth = 24
    • Call Chain = Diag_RequestEraseFlash +
    +
    [Calls]
    • >>   flashdnit +
    • >>   flashInit +
    +
    [Called By]
    • >>   Diag_RoutineControl +
    + +

    Diag_RequestTransferExit (Thumb, 298 bytes, Stack size 16 bytes, diag_appl_c301.o(i.Diag_RequestTransferExit)) +

    [Stack]

    • Max Depth = 344
    • Call Chain = Diag_RequestTransferExit ⇒ Diag_FlashCalcCRC ⇒ Uds_ForceTransmitResPending ⇒ ISO15765_CanTransmitMsgWithDlc ⇒ IF_CAN_TransmitMsg ⇒ IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   Bzip2_Finish +
    • >>   Diag_FlashCalcCRC +
    • >>   Uds_SetNRC +
    • >>   Uds_ProcessFinished +
    +
    [Called By]
    • >>   Uds_RequestTransferExit +
    + +

    Diag_RoutineControl (Thumb, 882 bytes, Stack size 48 bytes, diag_appl_c301.o(i.Diag_RoutineControl)) +

    [Stack]

    • Max Depth = 336
    • Call Chain = Diag_RoutineControl ⇒ Uds_ForceTransmitResPending ⇒ ISO15765_CanTransmitMsgWithDlc ⇒ IF_CAN_TransmitMsg ⇒ IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   Diag_RequestEraseFlash +
    • >>   Diag_CheckVerifyUpgradePacket +
    • >>   Diag_CheckValidApplication +
    • >>   Diag_CheckTransmitSequence +
    • >>   Diag_SetEepromAppErasureMark +
    • >>   Diag_ClrEepromUpdateMark +
    • >>   Diag_ClrAPP1UpdateMark +
    • >>   Uds_SetSupFuncEnableFlag +
    • >>   Uds_SetNRC +
    • >>   Uds_ProcessFinished +
    • >>   Uds_GetCurSessionAccessStatus +
    • >>   Uds_ForceTransmitResPending +
    • >>   Uds_CheckAdrrType +
    +
    [Called By]
    • >>   Uds_RoutineControl +
    + +

    Diag_SecurityAccess (Thumb, 968 bytes, Stack size 40 bytes, diag_appl_c301.o(i.Diag_SecurityAccess)) +

    [Stack]

    • Max Depth = 64
    • Call Chain = Diag_SecurityAccess ⇒ SA_Random +
    +
    [Calls]
    • >>   SA_GenerateKeyFBL +
    • >>   SA_GenerateKey +
    • >>   SA_Compare +
    • >>   Uds_SetSupFuncEnableFlag +
    • >>   Uds_SetProtect +
    • >>   Uds_SetNRC +
    • >>   Uds_ProcessFinished +
    • >>   Uds_GetCurSessionState +
    • >>   Uds_CheckAdrrType +
    • >>   SA_Random +
    +
    [Called By]
    • >>   Uds_SecurityAccess +
    + +

    Diag_SetEepromAppErasureMark (Thumb, 20 bytes, Stack size 0 bytes, diag_eeprom_c301.o(i.Diag_SetEepromAppErasureMark)) +

    [Called By]

    • >>   Diag_RoutineControl +
    + +

    Diag_TransferData (Thumb, 1098 bytes, Stack size 32 bytes, diag_appl_c301.o(i.Diag_TransferData)) +

    [Stack]

    • Max Depth = 56
    • Call Chain = Diag_TransferData ⇒ Diag_RamWrite ⇒ Diag_MemCpy +
    +
    [Calls]
    • >>   Bzip2_Update +
    • >>   Diag_RamWrite +
    • >>   Diag_ProgramFailedDataInit +
    • >>   Diag_DataProgram +
    • >>   Diag_DataCalcCRC +
    • >>   Uds_SetNRC +
    • >>   Uds_ProcessFinished +
    +
    [Called By]
    • >>   Uds_TransferData +
    + +

    Diag_WriteDataByIdentifier (Thumb, 238 bytes, Stack size 32 bytes, diag_appl_c301.o(i.Diag_WriteDataByIdentifier)) +

    [Stack]

    • Max Depth = 40
    • Call Chain = Diag_WriteDataByIdentifier ⇒ Diag_MemCopy +
    +
    [Calls]
    • >>   EED_WriteDID +
    • >>   Diag_CheckWriteDIDRange +
    • >>   Diag_MemCopy +
    • >>   Uds_SetSupFuncEnableFlag +
    • >>   Uds_SetNRC +
    • >>   Uds_ProcessFinished +
    • >>   Uds_CheckAdrrType +
    +
    [Called By]
    • >>   Uds_WriteDataByIdentifier +
    + +

    EED_WriteDID (Thumb, 6 bytes, Stack size 0 bytes, app_can.o(i.EED_WriteDID)) +

    [Called By]

    • >>   Diag_WriteDataByIdentifier +
    + +

    GPIO_Init (Thumb, 278 bytes, Stack size 24 bytes, stm32f10x_gpio.o(i.GPIO_Init)) +

    [Stack]

    • Max Depth = 24
    • Call Chain = GPIO_Init +
    +
    [Called By]
    • >>   CAN2_Mode_Init +
    • >>   bsp_InitI2C +
    • >>   LED_Init +
    + +

    GPIO_PinRemapConfig (Thumb, 138 bytes, Stack size 20 bytes, stm32f10x_gpio.o(i.GPIO_PinRemapConfig)) +

    [Stack]

    • Max Depth = 20
    • Call Chain = GPIO_PinRemapConfig +
    +
    [Called By]
    • >>   LED_Init +
    + +

    GPIO_ResetBits (Thumb, 4 bytes, Stack size 0 bytes, stm32f10x_gpio.o(i.GPIO_ResetBits)) +

    [Called By]

    • >>   LED_Init +
    • >>   CanTrans_GoToSleep +
    • >>   main +
    + +

    GPIO_SetBits (Thumb, 4 bytes, Stack size 0 bytes, stm32f10x_gpio.o(i.GPIO_SetBits)) +

    [Called By]

    • >>   bsp_InitI2C +
    • >>   LED_Init +
    • >>   CanTrans_GoToSleep +
    • >>   CanTrans_GoToNormal +
    + +

    GetCrc32Chk (Thumb, 6 bytes, Stack size 0 bytes, uds_sa_c301.o(i.GetCrc32Chk)) +

    [Called By]

    • >>   Diag_CheckTransmitSequence +
    + +

    HardFault_Handler (Thumb, 4 bytes, Stack size 0 bytes, stm32f10x_it.o(i.HardFault_Handler)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    IF_CAN_CancelTransmitMsg (Thumb, 2 bytes, Stack size 0 bytes, app_can.o(i.IF_CAN_CancelTransmitMsg)) +

    [Called By]

    • >>   ISO15765_Precopy +
    • >>   ISO15765_TxInit +
    • >>   ISO15765_RxInit +
    + +

    IF_CAN_InitLoaclStatus (Thumb, 24 bytes, Stack size 8 bytes, app_can.o(i.IF_CAN_InitLoaclStatus)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = IF_CAN_InitLoaclStatus +
    +
    [Calls]
    • >>   IF_CAN_IsOnLine +
    +
    [Called By]
    • >>   CanTask_InitProcess +
    + +

    IF_CAN_IsOnLine (Thumb, 20 bytes, Stack size 0 bytes, app_can.o(i.IF_CAN_IsOnLine)) +

    [Called By]

    • >>   IF_CAN_InitLoaclStatus +
    • >>   CanTask_InitProcess +
    + +

    IF_CAN_SendCanData (Thumb, 160 bytes, Stack size 64 bytes, app_can.o(i.IF_CAN_SendCanData)) +

    [Stack]

    • Max Depth = 120
    • Call Chain = IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   Can2_Send_Message +
    +
    [Called By]
    • >>   IF_CAN_CopyDataAndStartTx +
    + +

    IF_CAN_TransmitMsg (Thumb, 46 bytes, Stack size 24 bytes, app_can.o(i.IF_CAN_TransmitMsg)) +

    [Stack]

    • Max Depth = 264
    • Call Chain = IF_CAN_TransmitMsg ⇒ IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   IF_CAN_CopyDataAndStartTx +
    +
    [Called By]
    • >>   ISO15765_CanTransmitMsg +
    • >>   ISO15765_CanTransmitMsgWithDlc +
    + +

    IIC_Ack (Thumb, 52 bytes, Stack size 8 bytes, bsp_i2c_gpio.o(i.IIC_Ack)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = IIC_Ack +
    +
    [Calls]
    • >>   i2c_Delay +
    +
    [Called By]
    • >>   IIC_Read_Byte +
    + +

    IIC_NAck (Thumb, 42 bytes, Stack size 8 bytes, bsp_i2c_gpio.o(i.IIC_NAck)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = IIC_NAck +
    +
    [Calls]
    • >>   i2c_Delay +
    +
    [Called By]
    • >>   IIC_Read_Byte +
    + +

    IIC_Read_Byte (Thumb, 80 bytes, Stack size 16 bytes, bsp_i2c_gpio.o(i.IIC_Read_Byte)) +

    [Stack]

    • Max Depth = 24
    • Call Chain = IIC_Read_Byte ⇒ IIC_NAck +
    +
    [Calls]
    • >>   IIC_NAck +
    • >>   IIC_Ack +
    • >>   i2c_Delay +
    +
    [Called By]
    • >>   ee_ReadBytes +
    + +

    IIC_Send_Byte (Thumb, 88 bytes, Stack size 16 bytes, bsp_i2c_gpio.o(i.IIC_Send_Byte)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = IIC_Send_Byte +
    +
    [Calls]
    • >>   i2c_Delay +
    +
    [Called By]
    • >>   ee_ReadBytes +
    + +

    IIC_Start (Thumb, 48 bytes, Stack size 8 bytes, bsp_i2c_gpio.o(i.IIC_Start)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = IIC_Start +
    +
    [Calls]
    • >>   i2c_Delay +
    +
    [Called By]
    • >>   ee_ReadBytes +
    + +

    IIC_Stop (Thumb, 36 bytes, Stack size 8 bytes, bsp_i2c_gpio.o(i.IIC_Stop)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = IIC_Stop +
    +
    [Calls]
    • >>   i2c_Delay +
    +
    [Called By]
    • >>   ee_ReadBytes +
    + +

    IIC_Wait_Ack (Thumb, 62 bytes, Stack size 8 bytes, bsp_i2c_gpio.o(i.IIC_Wait_Ack)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = IIC_Wait_Ack +
    +
    [Calls]
    • >>   i2c_Delay +
    +
    [Called By]
    • >>   ee_ReadBytes +
    + +

    ISO15765_CanTransmitMsg (Thumb, 26 bytes, Stack size 8 bytes, iso15765-2.o(i.ISO15765_CanTransmitMsg)) +

    [Stack]

    • Max Depth = 272
    • Call Chain = ISO15765_CanTransmitMsg ⇒ IF_CAN_TransmitMsg ⇒ IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   IF_CAN_TransmitMsg +
    +
    [Called By]
    • >>   ISO15765_TxStateTask +
    • >>   ISO15765_RxStateTask +
    + +

    ISO15765_CanTransmitMsgWithDlc (Thumb, 26 bytes, Stack size 16 bytes, iso15765-2.o(i.ISO15765_CanTransmitMsgWithDlc)) +

    [Stack]

    • Max Depth = 280
    • Call Chain = ISO15765_CanTransmitMsgWithDlc ⇒ IF_CAN_TransmitMsg ⇒ IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   IF_CAN_TransmitMsg +
    +
    [Called By]
    • >>   Uds_ForceTransmitResPending +
    + +

    ISO15765_DrvConfirmation (Thumb, 22 bytes, Stack size 8 bytes, iso15765-2.o(i.ISO15765_DrvConfirmation)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = ISO15765_DrvConfirmation ⇒ ISO15765_TxFinishProcess +
    +
    [Calls]
    • >>   ISO15765_TxFinishProcess +
    • >>   ISO15765_RxFinishProcess +
    +
    [Called By]
    • >>   ISO15765_Precopy +
    +
    [Address Reference Count : 1]
    • canconfig_c301.o(.constdata) +
    +

    ISO15765_InitPowerOn (Thumb, 24 bytes, Stack size 8 bytes, iso15765-2.o(i.ISO15765_InitPowerOn)) +

    [Stack]

    • Max Depth = 24
    • Call Chain = ISO15765_InitPowerOn ⇒ ISO15765_Init ⇒ ISO15765_TxInit +
    +
    [Calls]
    • >>   ISO15765_Init +
    +
    [Called By]
    • >>   CanTask_InitProcess +
    + +

    ISO15765_Precopy (Thumb, 1534 bytes, Stack size 16 bytes, iso15765-2.o(i.ISO15765_Precopy)) +

    [Stack]

    • Max Depth = 304
    • Call Chain = ISO15765_Precopy ⇒ ISO15765_RxStateTask ⇒ ISO15765_CanTransmitMsg ⇒ IF_CAN_TransmitMsg ⇒ IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   IF_CAN_CancelTransmitMsg +
    • >>   ISO15765_DrvConfirmation +
    • >>   ISO15765_TxInit +
    • >>   ISO15765_RxStateTask +
    • >>   ISO15765_RxInit +
    • >>   ISO15765_RxResetBus +
    +
    [Called By]
    • >>   APP_CAN_MessageTypeHandle +
    + +

    ISO15765_RxResetBus (Thumb, 8 bytes, Stack size 8 bytes, iso15765-2.o(i.ISO15765_RxResetBus)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = ISO15765_RxResetBus ⇒ ISO15765_RxInit +
    +
    [Calls]
    • >>   ISO15765_RxInit +
    +
    [Called By]
    • >>   ISO15765_Precopy +
    • >>   Uds_PhysReqInd +
    + +

    ISO15765_RxSetFCStatus (Thumb, 6 bytes, Stack size 0 bytes, iso15765-2.o(i.ISO15765_RxSetFCStatus)) +

    [Called By]

    • >>   Uds_PhysFuncGetBuffer +
    + +

    ISO15765_Task (Thumb, 12 bytes, Stack size 8 bytes, iso15765-2.o(i.ISO15765_Task)) +

    [Stack]

    • Max Depth = 304
    • Call Chain = ISO15765_Task ⇒ ISO15765_TxTask ⇒ ISO15765_TxStateTask ⇒ ISO15765_CanTransmitMsg ⇒ IF_CAN_TransmitMsg ⇒ IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   ISO15765_TxTask +
    • >>   ISO15765_RxTask +
    +
    [Called By]
    • >>   CanTask_TimerProcess +
    + +

    ISO15765_Transmit (Thumb, 98 bytes, Stack size 8 bytes, iso15765-2.o(i.ISO15765_Transmit)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = ISO15765_Transmit +
    +
    [Called By]
    • >>   Uds_TransmitResponse +
    + +

    LED_Init (Thumb, 368 bytes, Stack size 8 bytes, led.o(i.LED_Init)) +

    [Stack]

    • Max Depth = 32
    • Call Chain = LED_Init ⇒ GPIO_Init +
    +
    [Calls]
    • >>   RCC_APB2PeriphClockCmd +
    • >>   GPIO_SetBits +
    • >>   GPIO_ResetBits +
    • >>   GPIO_PinRemapConfig +
    • >>   GPIO_Init +
    +
    [Called By]
    • >>   main +
    + +

    MemManage_Handler (Thumb, 4 bytes, Stack size 0 bytes, stm32f10x_it.o(i.MemManage_Handler)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    NMI_Handler (Thumb, 2 bytes, Stack size 0 bytes, stm32f10x_it.o(i.NMI_Handler)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    NVIC_Configuration (Thumb, 12 bytes, Stack size 8 bytes, dev_sys.o(i.NVIC_Configuration)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = NVIC_Configuration +
    +
    [Calls]
    • >>   NVIC_PriorityGroupConfig +
    +
    [Called By]
    • >>   main +
    + +

    NVIC_Init (Thumb, 100 bytes, Stack size 16 bytes, misc.o(i.NVIC_Init)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = NVIC_Init +
    +
    [Called By]
    • >>   CAN2_Mode_Init +
    + +

    NVIC_PriorityGroupConfig (Thumb, 10 bytes, Stack size 0 bytes, misc.o(i.NVIC_PriorityGroupConfig)) +

    [Called By]

    • >>   NVIC_Configuration +
    + +

    PWR_BackupAccessCmd (Thumb, 6 bytes, Stack size 0 bytes, stm32f10x_pwr.o(i.PWR_BackupAccessCmd)) +

    [Called By]

    • >>   BSP_BKP_Init +
    + +

    PendSV_Handler (Thumb, 2 bytes, Stack size 0 bytes, stm32f10x_it.o(i.PendSV_Handler)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    RCC_APB1PeriphClockCmd (Thumb, 26 bytes, Stack size 0 bytes, stm32f10x_rcc.o(i.RCC_APB1PeriphClockCmd)) +

    [Called By]

    • >>   CAN2_Mode_Init +
    • >>   BSP_BKP_Init +
    + +

    RCC_APB1PeriphResetCmd (Thumb, 26 bytes, Stack size 0 bytes, stm32f10x_rcc.o(i.RCC_APB1PeriphResetCmd)) +

    [Called By]

    • >>   CAN_DeInit +
    + +

    RCC_APB2PeriphClockCmd (Thumb, 26 bytes, Stack size 0 bytes, stm32f10x_rcc.o(i.RCC_APB2PeriphClockCmd)) +

    [Called By]

    • >>   CAN2_Mode_Init +
    • >>   bsp_InitI2C +
    • >>   LED_Init +
    + +

    RCC_GetClocksFreq (Thumb, 374 bytes, Stack size 24 bytes, stm32f10x_rcc.o(i.RCC_GetClocksFreq)) +

    [Stack]

    • Max Depth = 24
    • Call Chain = RCC_GetClocksFreq +
    +
    [Called By]
    • >>   main +
    + +

    SA_Compare (Thumb, 36 bytes, Stack size 16 bytes, uds_sa_c301.o(i.SA_Compare)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = SA_Compare +
    +
    [Called By]
    • >>   Diag_SecurityAccess +
    + +

    SA_GenerateKey (Thumb, 132 bytes, Stack size 20 bytes, uds_sa_c301.o(i.SA_GenerateKey)) +

    [Stack]

    • Max Depth = 20
    • Call Chain = SA_GenerateKey +
    +
    [Called By]
    • >>   Diag_SecurityAccess +
    + +

    SA_GenerateKeyFBL (Thumb, 130 bytes, Stack size 20 bytes, uds_sa_c301.o(i.SA_GenerateKeyFBL)) +

    [Stack]

    • Max Depth = 20
    • Call Chain = SA_GenerateKeyFBL +
    +
    [Called By]
    • >>   Diag_SecurityAccess +
    + +

    SA_Random (Thumb, 92 bytes, Stack size 24 bytes, uds_sa_c301.o(i.SA_Random)) +

    [Stack]

    • Max Depth = 24
    • Call Chain = SA_Random +
    +
    [Calls]
    • >>   CanTask_GetSaRandom +
    +
    [Called By]
    • >>   Diag_SecurityAccess +
    + +

    SVC_Handler (Thumb, 2 bytes, Stack size 0 bytes, stm32f10x_it.o(i.SVC_Handler)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    SysTick_Handler (Thumb, 64 bytes, Stack size 0 bytes, dev_sys.o(i.SysTick_Handler)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    SysTick_Init (Thumb, 92 bytes, Stack size 12 bytes, dev_sys.o(i.SysTick_Init)) +

    [Stack]

    • Max Depth = 12
    • Call Chain = SysTick_Init +
    +
    [Called By]
    • >>   main +
    + +

    SystemInit (Thumb, 92 bytes, Stack size 8 bytes, system_stm32f10x.o(i.SystemInit)) +

    [Stack]

    • Max Depth = 28
    • Call Chain = SystemInit ⇒ SetSysClock ⇒ SetSysClockTo72 +
    +
    [Calls]
    • >>   SetSysClock +
    +
    [Called By]
    • >>   main +
    +
    [Address Reference Count : 1]
    • startup_stm32f10x_cl.o(.text) +
    +

    TickOut (Thumb, 58 bytes, Stack size 0 bytes, dev_sys.o(i.TickOut)) +

    [Called By]

    • >>   CAN2_SCE_IRQHandler +
    + +

    TimeTaskDispatch_Flag (Thumb, 318 bytes, Stack size 0 bytes, dev_sys.o(i.TimeTaskDispatch_Flag)) +

    [Called By]

    • >>   main +
    + +

    UDS_ForcPendingReset (Thumb, 12 bytes, Stack size 0 bytes, uds.o(i.UDS_ForcPendingReset)) +

    [Called By]

    • >>   Uds_ProcessFinished +
    • >>   Uds_PowerOnInit +
    + +

    Uds_CheckAdrrType (Thumb, 16 bytes, Stack size 0 bytes, uds.o(i.Uds_CheckAdrrType)) +

    [Called By]

    • >>   Diag_WriteDataByIdentifier +
    • >>   Diag_SecurityAccess +
    • >>   Diag_RoutineControl +
    • >>   Diag_ReadDataByIdentifier +
    • >>   Diag_EcuReset +
    • >>   Diag_ControlDTCSetting +
    • >>   Diag_CommunicationControl +
    • >>   Uds_TesterPresent +
    • >>   Uds_DiagControlSession +
    + +

    Uds_CommunicationControl (Thumb, 12 bytes, Stack size 8 bytes, uds.o(i.Uds_CommunicationControl)) +

    [Stack]

    • Max Depth = 40
    • Call Chain = Uds_CommunicationControl ⇒ Diag_CommunicationControl ⇒ Uds_ProcessFinished +
    +
    [Calls]
    • >>   Diag_CommunicationControl +
    +
    [Address Reference Count : 1]
    • canconfig_c301.o(.constdata) +
    +

    Uds_ControlDTCSetting (Thumb, 12 bytes, Stack size 8 bytes, uds.o(i.Uds_ControlDTCSetting)) +

    [Stack]

    • Max Depth = 32
    • Call Chain = Uds_ControlDTCSetting ⇒ Diag_ControlDTCSetting ⇒ Uds_ProcessFinished +
    +
    [Calls]
    • >>   Diag_ControlDTCSetting +
    +
    [Address Reference Count : 1]
    • canconfig_c301.o(.constdata) +
    +

    Uds_CopyToCAN (Thumb, 22 bytes, Stack size 16 bytes, uds.o(i.Uds_CopyToCAN)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = Uds_CopyToCAN +
    +
    [Calls]
    • >>   Uds_CopyToCanMemCpy +
    +
    [Address Reference Count : 1]
    • iso15765-2_entry.o(.data) +
    +

    Uds_DiagControlSession (Thumb, 232 bytes, Stack size 24 bytes, uds.o(i.Uds_DiagControlSession)) +

    [Stack]

    • Max Depth = 104
    • Call Chain = Uds_DiagControlSession ⇒ Uds_SetState ⇒ Diag_CheckValidApp1 ⇒ ee_ReadBytes ⇒ IIC_Read_Byte ⇒ IIC_NAck +
    +
    [Calls]
    • >>   Diag_AppDataInit +
    • >>   CanTask_SetStayInBootFlagValue +
    • >>   Uds_SetNRC +
    • >>   Uds_ResponseEnable +
    • >>   Uds_ProcessFinished +
    • >>   Uds_CheckAdrrType +
    • >>   Uds_SetState +
    +
    [Address Reference Count : 1]
    • canconfig_c301.o(.constdata) +
    +

    Uds_ECUReset (Thumb, 12 bytes, Stack size 8 bytes, uds.o(i.Uds_ECUReset)) +

    [Stack]

    • Max Depth = 32
    • Call Chain = Uds_ECUReset ⇒ Diag_EcuReset ⇒ Uds_ProcessFinished +
    +
    [Calls]
    • >>   Diag_EcuReset +
    +
    [Address Reference Count : 1]
    • canconfig_c301.o(.constdata) +
    +

    Uds_ForceTransmitResPending (Thumb, 42 bytes, Stack size 8 bytes, uds.o(i.Uds_ForceTransmitResPending)) +

    [Stack]

    • Max Depth = 288
    • Call Chain = Uds_ForceTransmitResPending ⇒ ISO15765_CanTransmitMsgWithDlc ⇒ IF_CAN_TransmitMsg ⇒ IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   ISO15765_CanTransmitMsgWithDlc +
    +
    [Called By]
    • >>   Diag_FlashCalcCRC +
    • >>   Diag_RoutineControl +
    + +

    Uds_GetCurSessionAccessStatus (Thumb, 6 bytes, Stack size 0 bytes, uds.o(i.Uds_GetCurSessionAccessStatus)) +

    [Called By]

    • >>   Diag_RoutineControl +
    • >>   CanTask_ReprogrammingCheck +
    + +

    Uds_GetCurSessionState (Thumb, 10 bytes, Stack size 0 bytes, uds.o(i.Uds_GetCurSessionState)) +

    [Called By]

    • >>   Diag_SecurityAccess +
    • >>   Uds_TransSessionType +
    • >>   Uds_SetState +
    • >>   Uds_Scheduler +
    + +

    Uds_GetNRC (Thumb, 6 bytes, Stack size 0 bytes, uds.o(i.Uds_GetNRC)) +

    [Called By]

    • >>   Diag_RequestDownload +
    • >>   Diag_ReadDataByIdentifier +
    + +

    Uds_PhysFuncGetBuffer (Thumb, 78 bytes, Stack size 24 bytes, uds.o(i.Uds_PhysFuncGetBuffer)) +

    [Stack]

    • Max Depth = 24
    • Call Chain = Uds_PhysFuncGetBuffer +
    +
    [Calls]
    • >>   ISO15765_RxSetFCStatus +
    • >>   Uds_NetLayerStartRec +
    +
    [Address Reference Count : 1]
    • iso15765-2_entry.o(.data) +
    +

    Uds_PhysReqInd (Thumb, 24 bytes, Stack size 8 bytes, uds.o(i.Uds_PhysReqInd)) +

    [Stack]

    • Max Depth = 24
    • Call Chain = Uds_PhysReqInd ⇒ ISO15765_RxResetBus ⇒ ISO15765_RxInit +
    +
    [Calls]
    • >>   ISO15765_RxResetBus +
    • >>   Uds_NetLayerEndOfRec +
    +
    [Address Reference Count : 1]
    • iso15765-2_entry.o(.data) +
    +

    Uds_PhysRxErrorIndication (Thumb, 12 bytes, Stack size 8 bytes, uds.o(i.Uds_PhysRxErrorIndication)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = Uds_PhysRxErrorIndication +
    +
    [Calls]
    • >>   Uds_NetLayerEndOfRec +
    +
    [Address Reference Count : 1]
    • iso15765-2_entry.o(.data) +
    +

    Uds_PowerOnInit (Thumb, 128 bytes, Stack size 8 bytes, uds.o(i.Uds_PowerOnInit)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = Uds_PowerOnInit +
    +
    [Calls]
    • >>   Diag_AppDataInit +
    • >>   UDS_ForcPendingReset +
    +
    [Called By]
    • >>   CanTask_InitProcess +
    + +

    Uds_ProcessFinished (Thumb, 94 bytes, Stack size 8 bytes, uds.o(i.Uds_ProcessFinished)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = Uds_ProcessFinished +
    +
    [Calls]
    • >>   UDS_ForcPendingReset +
    +
    [Called By]
    • >>   Diag_WriteDataByIdentifier +
    • >>   Diag_TransferData +
    • >>   Diag_SecurityAccess +
    • >>   Diag_RoutineControl +
    • >>   Diag_RequestTransferExit +
    • >>   Diag_RequestDownload +
    • >>   Diag_ReadDataByIdentifier +
    • >>   Diag_EcuReset +
    • >>   Diag_ControlDTCSetting +
    • >>   Diag_CommunicationControl +
    • >>   Uds_TesterPresent +
    • >>   Uds_DiagControlSession +
    • >>   Uds_Scheduler +
    + +

    Uds_ReadDataByIdentifier (Thumb, 12 bytes, Stack size 8 bytes, uds.o(i.Uds_ReadDataByIdentifier)) +

    [Stack]

    • Max Depth = 160
    • Call Chain = Uds_ReadDataByIdentifier ⇒ Diag_ReadDataByIdentifier ⇒ Uds_ProcessFinished +
    +
    [Calls]
    • >>   Diag_ReadDataByIdentifier +
    +
    [Address Reference Count : 1]
    • canconfig_c301.o(.constdata) +
    +

    Uds_RequestDownload (Thumb, 12 bytes, Stack size 8 bytes, uds.o(i.Uds_RequestDownload)) +

    [Stack]

    • Max Depth = 48
    • Call Chain = Uds_RequestDownload ⇒ Diag_RequestDownload ⇒ Uds_ProcessFinished +
    +
    [Calls]
    • >>   Diag_RequestDownload +
    +
    [Address Reference Count : 1]
    • canconfig_c301.o(.constdata) +
    +

    Uds_RequestTransferExit (Thumb, 12 bytes, Stack size 8 bytes, uds.o(i.Uds_RequestTransferExit)) +

    [Stack]

    • Max Depth = 352
    • Call Chain = Uds_RequestTransferExit ⇒ Diag_RequestTransferExit ⇒ Diag_FlashCalcCRC ⇒ Uds_ForceTransmitResPending ⇒ ISO15765_CanTransmitMsgWithDlc ⇒ IF_CAN_TransmitMsg ⇒ IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   Diag_RequestTransferExit +
    +
    [Address Reference Count : 1]
    • canconfig_c301.o(.constdata) +
    +

    Uds_ResponseEnable (Thumb, 10 bytes, Stack size 0 bytes, uds.o(i.Uds_ResponseEnable)) +

    [Called By]

    • >>   Diag_EcuReset +
    • >>   Diag_ControlDTCSetting +
    • >>   Diag_CommunicationControl +
    • >>   Uds_TesterPresent +
    • >>   Uds_DiagControlSession +
    • >>   Uds_TransmitResponse +
    + +

    Uds_RoutineControl (Thumb, 12 bytes, Stack size 8 bytes, uds.o(i.Uds_RoutineControl)) +

    [Stack]

    • Max Depth = 344
    • Call Chain = Uds_RoutineControl ⇒ Diag_RoutineControl ⇒ Uds_ForceTransmitResPending ⇒ ISO15765_CanTransmitMsgWithDlc ⇒ IF_CAN_TransmitMsg ⇒ IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   Diag_RoutineControl +
    +
    [Address Reference Count : 1]
    • canconfig_c301.o(.constdata) +
    +

    Uds_SecurityAccess (Thumb, 12 bytes, Stack size 8 bytes, uds.o(i.Uds_SecurityAccess)) +

    [Stack]

    • Max Depth = 72
    • Call Chain = Uds_SecurityAccess ⇒ Diag_SecurityAccess ⇒ SA_Random +
    +
    [Calls]
    • >>   Diag_SecurityAccess +
    +
    [Address Reference Count : 1]
    • canconfig_c301.o(.constdata) +
    +

    Uds_SetNRC (Thumb, 6 bytes, Stack size 0 bytes, uds.o(i.Uds_SetNRC)) +

    [Called By]

    • >>   Diag_WriteDataByIdentifier +
    • >>   Diag_TransferData +
    • >>   Diag_SecurityAccess +
    • >>   Diag_RoutineControl +
    • >>   Diag_RequestTransferExit +
    • >>   Diag_RequestDownload +
    • >>   Diag_ReadDataByIdentifier +
    • >>   Diag_EcuReset +
    • >>   Diag_ControlDTCSetting +
    • >>   Diag_CommunicationControl +
    • >>   Uds_TesterPresent +
    • >>   Uds_DiagControlSession +
    + +

    Uds_SetProtect (Thumb, 6 bytes, Stack size 0 bytes, uds.o(i.Uds_SetProtect)) +

    [Called By]

    • >>   Diag_SecurityAccess +
    + +

    Uds_SetSupFuncEnableFlag (Thumb, 8 bytes, Stack size 0 bytes, uds.o(i.Uds_SetSupFuncEnableFlag)) +

    [Called By]

    • >>   Diag_WriteDataByIdentifier +
    • >>   Diag_SecurityAccess +
    • >>   Diag_RoutineControl +
    • >>   Diag_ReadDataByIdentifier +
    • >>   Diag_EcuReset +
    • >>   Diag_ControlDTCSetting +
    • >>   Diag_CommunicationControl +
    • >>   Uds_TesterPresent +
    + +

    Uds_StateTask (Thumb, 14 bytes, Stack size 8 bytes, uds.o(i.Uds_StateTask)) +

    [Stack]

    • Max Depth = 104
    • Call Chain = Uds_StateTask ⇒ Uds_ContextTask ⇒ Uds_SetState ⇒ Diag_CheckValidApp1 ⇒ ee_ReadBytes ⇒ IIC_Read_Byte ⇒ IIC_NAck +
    +
    [Calls]
    • >>   Uds_ContextTask +
    +
    [Called By]
    • >>   CanTask_UdsStateProcess +
    + +

    Uds_Task (Thumb, 8 bytes, Stack size 8 bytes, uds.o(i.Uds_Task)) +

    [Stack]

    • Max Depth = 96
    • Call Chain = Uds_Task ⇒ Uds_TimerTask ⇒ Uds_SetState ⇒ Diag_CheckValidApp1 ⇒ ee_ReadBytes ⇒ IIC_Read_Byte ⇒ IIC_NAck +
    +
    [Calls]
    • >>   Uds_TimerTask +
    +
    [Called By]
    • >>   CanTask_TimerProcess +
    + +

    Uds_TesterPresent (Thumb, 84 bytes, Stack size 16 bytes, uds.o(i.Uds_TesterPresent)) +

    [Stack]

    • Max Depth = 24
    • Call Chain = Uds_TesterPresent ⇒ Uds_ProcessFinished +
    +
    [Calls]
    • >>   Uds_SetSupFuncEnableFlag +
    • >>   Uds_SetNRC +
    • >>   Uds_ResponseEnable +
    • >>   Uds_ProcessFinished +
    • >>   Uds_CheckAdrrType +
    +
    [Address Reference Count : 1]
    • canconfig_c301.o(.constdata) +
    +

    Uds_TransSessionType (Thumb, 76 bytes, Stack size 8 bytes, uds.o(i.Uds_TransSessionType)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = Uds_TransSessionType +
    +
    [Calls]
    • >>   CanTask_FBLInit +
    • >>   Uds_GetCurSessionState +
    • >>   Uds_SetStateSessionAccess +
    • >>   Uds_SetFlashProtect +
    +
    [Called By]
    • >>   Uds_SetState +
    + +

    Uds_TransferData (Thumb, 12 bytes, Stack size 8 bytes, uds.o(i.Uds_TransferData)) +

    [Stack]

    • Max Depth = 64
    • Call Chain = Uds_TransferData ⇒ Diag_TransferData ⇒ Diag_RamWrite ⇒ Diag_MemCpy +
    +
    [Calls]
    • >>   Diag_TransferData +
    +
    [Address Reference Count : 1]
    • canconfig_c301.o(.constdata) +
    +

    Uds_TxConfirmation (Thumb, 24 bytes, Stack size 16 bytes, uds.o(i.Uds_TxConfirmation)) +

    [Stack]

    • Max Depth = 32
    • Call Chain = Uds_TxConfirmation ⇒ Uds_NetLayerEndOfTrans +
    +
    [Calls]
    • >>   Uds_NetLayerEndOfTrans +
    +
    [Called By]
    • >>   Uds_TxErrorIndication +
    • >>   Uds_TransmitResponse +
    +
    [Address Reference Count : 1]
    • iso15765-2_entry.o(.data) +
    +

    Uds_TxErrorIndication (Thumb, 12 bytes, Stack size 8 bytes, uds.o(i.Uds_TxErrorIndication)) +

    [Stack]

    • Max Depth = 40
    • Call Chain = Uds_TxErrorIndication ⇒ Uds_TxConfirmation ⇒ Uds_NetLayerEndOfTrans +
    +
    [Calls]
    • >>   Uds_TxConfirmation +
    +
    [Address Reference Count : 1]
    • iso15765-2_entry.o(.data) +
    +

    Uds_WriteDataByIdentifier (Thumb, 12 bytes, Stack size 8 bytes, uds.o(i.Uds_WriteDataByIdentifier)) +

    [Stack]

    • Max Depth = 48
    • Call Chain = Uds_WriteDataByIdentifier ⇒ Diag_WriteDataByIdentifier ⇒ Diag_MemCopy +
    +
    [Calls]
    • >>   Diag_WriteDataByIdentifier +
    +
    [Address Reference Count : 1]
    • canconfig_c301.o(.constdata) +
    +

    UsageFault_Handler (Thumb, 4 bytes, Stack size 0 bytes, stm32f10x_it.o(i.UsageFault_Handler)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    _Bzip2_InitTable (Thumb, 56 bytes, Stack size 0 bytes, uds_sa_c301.o(i._Bzip2_InitTable)) +

    [Called By]

    • >>   Bzip2_Init +
    + +

    __scatterload_copy (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_copy), UNUSED) + +

    __scatterload_null (Thumb, 2 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_null), UNUSED) + +

    __scatterload_zeroinit (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_zeroinit), UNUSED) + +

    bsp_InitI2C (Thumb, 88 bytes, Stack size 8 bytes, bsp_i2c_gpio.o(i.bsp_InitI2C)) +

    [Stack]

    • Max Depth = 32
    • Call Chain = bsp_InitI2C ⇒ GPIO_Init +
    +
    [Calls]
    • >>   RCC_APB2PeriphClockCmd +
    • >>   GPIO_SetBits +
    • >>   GPIO_Init +
    +
    [Called By]
    • >>   ee_Init +
    + +

    ee_Init (Thumb, 8 bytes, Stack size 8 bytes, 24cxx.o(i.ee_Init)) +

    [Stack]

    • Max Depth = 40
    • Call Chain = ee_Init ⇒ bsp_InitI2C ⇒ GPIO_Init +
    +
    [Calls]
    • >>   bsp_InitI2C +
    +
    [Called By]
    • >>   main +
    + +

    ee_ReadBytes (Thumb, 134 bytes, Stack size 24 bytes, 24cxx.o(i.ee_ReadBytes)) +

    [Stack]

    • Max Depth = 48
    • Call Chain = ee_ReadBytes ⇒ IIC_Read_Byte ⇒ IIC_NAck +
    +
    [Calls]
    • >>   IIC_Wait_Ack +
    • >>   IIC_Stop +
    • >>   IIC_Start +
    • >>   IIC_Send_Byte +
    • >>   IIC_Read_Byte +
    +
    [Called By]
    • >>   Diag_CheckValidApp1 +
    + +

    flashInit (Thumb, 8 bytes, Stack size 0 bytes, dev_flashapi.o(i.flashInit)) +

    [Called By]

    • >>   Diag_RequestEraseFlash +
    • >>   Diag_DataProgram +
    • >>   Diag_ClrAPP1UpdateMark +
    + +

    flashdnit (Thumb, 16 bytes, Stack size 0 bytes, dev_flashapi.o(i.flashdnit)) +

    [Called By]

    • >>   Diag_RequestEraseFlash +
    • >>   Diag_DataProgram +
    • >>   Diag_ClrAPP1UpdateMark +
    + +

    main (Thumb, 194 bytes, Stack size 24 bytes, main.o(i.main)) +

    [Stack]

    • Max Depth = 352
    • Call Chain = main ⇒ Uds_SysTick_Process_10ms ⇒ Can_Task ⇒ CanTask_TimerProcess ⇒ ISO15765_Task ⇒ ISO15765_TxTask ⇒ ISO15765_TxStateTask ⇒ ISO15765_CanTransmitMsg ⇒ IF_CAN_TransmitMsg ⇒ IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   RCC_GetClocksFreq +
    • >>   GPIO_ResetBits +
    • >>   SystemInit +
    • >>   TimeTaskDispatch_Flag +
    • >>   SysTick_Init +
    • >>   NVIC_Configuration +
    • >>   CAN2_Mode_Init +
    • >>   ee_Init +
    • >>   LED_Init +
    • >>   Diag_HndUpdataEV +
    • >>   CanTask_InitProcess +
    • >>   BSP_BKP_Init +
    • >>   uds_SysTick_Process_1ms +
    • >>   Uds_SysTick_Process_10ms +
    +
    [Address Reference Count : 1]
    • entry9a.o(.ARM.Collect$$$$0000000B) +

    +

    +Local Symbols +

    +

    CheckITStatus (Thumb, 18 bytes, Stack size 0 bytes, stm32f10x_can.o(i.CheckITStatus)) +

    [Called By]

    • >>   CAN_GetITStatus +
    + +

    i2c_Delay (Thumb, 14 bytes, Stack size 0 bytes, bsp_i2c_gpio.o(i.i2c_Delay)) +

    [Called By]

    • >>   IIC_NAck +
    • >>   IIC_Ack +
    • >>   IIC_Wait_Ack +
    • >>   IIC_Stop +
    • >>   IIC_Start +
    • >>   IIC_Send_Byte +
    • >>   IIC_Read_Byte +
    + +

    can_bus_open_hook (Thumb, 18 bytes, Stack size 0 bytes, can2.o(i.can_bus_open_hook)) +

    [Called By]

    • >>   CAN2_Mode_Init +
    + +

    can_bus_ready_hook (Thumb, 34 bytes, Stack size 0 bytes, can2.o(i.can_bus_ready_hook)) +

    [Called By]

    • >>   CAN2_RX1_IRQHandler +
    + +

    can_bus_send_ready (Thumb, 32 bytes, Stack size 0 bytes, can2.o(i.can_bus_send_ready)) +

    [Called By]

    • >>   Can2_Send_Message +
    + +

    SetSysClock (Thumb, 8 bytes, Stack size 8 bytes, system_stm32f10x.o(i.SetSysClock)) +

    [Stack]

    • Max Depth = 20
    • Call Chain = SetSysClock ⇒ SetSysClockTo72 +
    +
    [Calls]
    • >>   SetSysClockTo72 +
    +
    [Called By]
    • >>   SystemInit +
    + +

    SetSysClockTo72 (Thumb, 266 bytes, Stack size 12 bytes, system_stm32f10x.o(i.SetSysClockTo72)) +

    [Stack]

    • Max Depth = 12
    • Call Chain = SetSysClockTo72 +
    +
    [Called By]
    • >>   SetSysClock +
    + +

    Uds_ContextTask (Thumb, 226 bytes, Stack size 16 bytes, uds.o(i.Uds_ContextTask)) +

    [Stack]

    • Max Depth = 96
    • Call Chain = Uds_ContextTask ⇒ Uds_SetState ⇒ Diag_CheckValidApp1 ⇒ ee_ReadBytes ⇒ IIC_Read_Byte ⇒ IIC_NAck +
    +
    [Calls]
    • >>   Diag_MemCopy +
    • >>   Uds_TransmitResponse +
    • >>   Uds_SetState +
    • >>   Uds_Scheduler +
    +
    [Called By]
    • >>   Uds_StateTask +
    + +

    Uds_CopyToCanMemCpy (Thumb, 16 bytes, Stack size 0 bytes, uds.o(i.Uds_CopyToCanMemCpy)) +

    [Called By]

    • >>   Uds_CopyToCAN +
    + +

    Uds_NetLayerEndOfRec (Thumb, 44 bytes, Stack size 0 bytes, uds.o(i.Uds_NetLayerEndOfRec)) +

    [Called By]

    • >>   Uds_PhysRxErrorIndication +
    • >>   Uds_PhysReqInd +
    + +

    Uds_NetLayerEndOfTrans (Thumb, 44 bytes, Stack size 16 bytes, uds.o(i.Uds_NetLayerEndOfTrans)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = Uds_NetLayerEndOfTrans +
    +
    [Calls]
    • >>   Uds_PostProcessing +
    +
    [Called By]
    • >>   Uds_TxConfirmation +
    + +

    Uds_NetLayerStartRec (Thumb, 24 bytes, Stack size 0 bytes, uds.o(i.Uds_NetLayerStartRec)) +

    [Called By]

    • >>   Uds_PhysFuncGetBuffer +
    + +

    Uds_PostProcessing (Thumb, 24 bytes, Stack size 0 bytes, uds.o(i.Uds_PostProcessing)) +

    [Called By]

    • >>   Uds_NetLayerEndOfTrans +
    + +

    Uds_Scheduler (Thumb, 1436 bytes, Stack size 40 bytes, uds.o(i.Uds_Scheduler)) +

    [Stack]

    • Max Depth = 48
    • Call Chain = Uds_Scheduler ⇒ Uds_ProcessFinished +
    +
    [Calls]
    • >>   Uds_ProcessFinished +
    • >>   Uds_GetCurSessionState +
    +
    [Called By]
    • >>   Uds_ContextTask +
    + +

    Uds_SetFlashProtect (Thumb, 6 bytes, Stack size 0 bytes, uds.o(i.Uds_SetFlashProtect)) +

    [Called By]

    • >>   Uds_TransSessionType +
    + +

    Uds_SetState (Thumb, 78 bytes, Stack size 16 bytes, uds.o(i.Uds_SetState)) +

    [Stack]

    • Max Depth = 80
    • Call Chain = Uds_SetState ⇒ Diag_CheckValidApp1 ⇒ ee_ReadBytes ⇒ IIC_Read_Byte ⇒ IIC_NAck +
    +
    [Calls]
    • >>   Diag_CheckValidApp1 +
    • >>   CanTask_SetStayInBootFlagValue +
    • >>   CanTask_IsAppBeenErased +
    • >>   Uds_TransSessionType +
    • >>   Uds_GetCurSessionState +
    +
    [Called By]
    • >>   Uds_DiagControlSession +
    • >>   Uds_TimerTask +
    • >>   Uds_ContextTask +
    + +

    Uds_SetStateSessionAccess (Thumb, 6 bytes, Stack size 0 bytes, uds.o(i.Uds_SetStateSessionAccess)) +

    [Called By]

    • >>   Uds_TransSessionType +
    + +

    Uds_TimerTask (Thumb, 406 bytes, Stack size 8 bytes, uds.o(i.Uds_TimerTask)) +

    [Stack]

    • Max Depth = 88
    • Call Chain = Uds_TimerTask ⇒ Uds_SetState ⇒ Diag_CheckValidApp1 ⇒ ee_ReadBytes ⇒ IIC_Read_Byte ⇒ IIC_NAck +
    +
    [Calls]
    • >>   BSP_vSystemReset +
    • >>   Uds_TransmitResPending +
    • >>   Uds_SetState +
    +
    [Called By]
    • >>   Uds_Task +
    + +

    Uds_TransmitResPending (Thumb, 28 bytes, Stack size 8 bytes, uds.o(i.Uds_TransmitResPending)) +

    [Stack]

    • Max Depth = 56
    • Call Chain = Uds_TransmitResPending ⇒ Uds_TransmitResponse ⇒ Uds_TxConfirmation ⇒ Uds_NetLayerEndOfTrans +
    +
    [Calls]
    • >>   Uds_TransmitResponse +
    +
    [Called By]
    • >>   Uds_TimerTask +
    + +

    Uds_TransmitResponse (Thumb, 40 bytes, Stack size 16 bytes, uds.o(i.Uds_TransmitResponse)) +

    [Stack]

    • Max Depth = 48
    • Call Chain = Uds_TransmitResponse ⇒ Uds_TxConfirmation ⇒ Uds_NetLayerEndOfTrans +
    +
    [Calls]
    • >>   ISO15765_Transmit +
    • >>   Uds_TxConfirmation +
    • >>   Uds_ResponseEnable +
    +
    [Called By]
    • >>   Uds_TransmitResPending +
    • >>   Uds_ContextTask +
    + +

    ISO15765_Init (Thumb, 12 bytes, Stack size 8 bytes, iso15765-2.o(i.ISO15765_Init)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = ISO15765_Init ⇒ ISO15765_TxInit +
    +
    [Calls]
    • >>   ISO15765_TxInit +
    • >>   ISO15765_RxInit +
    +
    [Called By]
    • >>   ISO15765_InitPowerOn +
    + +

    ISO15765_PreCanTransmit (Thumb, 486 bytes, Stack size 24 bytes, iso15765-2.o(i.ISO15765_PreCanTransmit)) +

    [Stack]

    • Max Depth = 24
    • Call Chain = ISO15765_PreCanTransmit +
    +
    [Calls]
    • >>   ISO15765_SetOptimalDlc +
    +
    [Called By]
    • >>   ISO15765_TxStateTask +
    + +

    ISO15765_PreTransmitClearCanDataPtr (Thumb, 22 bytes, Stack size 0 bytes, iso15765-2.o(i.ISO15765_PreTransmitClearCanDataPtr)) +

    [Called By]

    • >>   ISO15765_TxStateTask +
    + +

    ISO15765_RxFinishProcess (Thumb, 54 bytes, Stack size 0 bytes, iso15765-2.o(i.ISO15765_RxFinishProcess)) +

    [Called By]

    • >>   ISO15765_DrvConfirmation +
    + +

    ISO15765_RxInit (Thumb, 98 bytes, Stack size 8 bytes, iso15765-2.o(i.ISO15765_RxInit)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = ISO15765_RxInit +
    +
    [Calls]
    • >>   IF_CAN_CancelTransmitMsg +
    +
    [Called By]
    • >>   ISO15765_Precopy +
    • >>   ISO15765_RxTask +
    • >>   ISO15765_Init +
    • >>   ISO15765_RxResetBus +
    + +

    ISO15765_RxStateTask (Thumb, 226 bytes, Stack size 16 bytes, iso15765-2.o(i.ISO15765_RxStateTask)) +

    [Stack]

    • Max Depth = 288
    • Call Chain = ISO15765_RxStateTask ⇒ ISO15765_CanTransmitMsg ⇒ IF_CAN_TransmitMsg ⇒ IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   ISO15765_CanTransmitMsg +
    +
    [Called By]
    • >>   ISO15765_Precopy +
    • >>   ISO15765_RxTask +
    + +

    ISO15765_RxTask (Thumb, 122 bytes, Stack size 8 bytes, iso15765-2.o(i.ISO15765_RxTask)) +

    [Stack]

    • Max Depth = 296
    • Call Chain = ISO15765_RxTask ⇒ ISO15765_RxStateTask ⇒ ISO15765_CanTransmitMsg ⇒ IF_CAN_TransmitMsg ⇒ IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   ISO15765_RxStateTask +
    • >>   ISO15765_RxInit +
    +
    [Called By]
    • >>   ISO15765_Task +
    + +

    ISO15765_SetOptimalDlc (Thumb, 50 bytes, Stack size 0 bytes, iso15765-2.o(i.ISO15765_SetOptimalDlc)) +

    [Called By]

    • >>   ISO15765_PreCanTransmit +
    + +

    ISO15765_TransmitOfCF (Thumb, 72 bytes, Stack size 0 bytes, iso15765-2.o(i.ISO15765_TransmitOfCF)) +

    [Called By]

    • >>   ISO15765_TxTask +
    + +

    ISO15765_TxFinishProcess (Thumb, 126 bytes, Stack size 8 bytes, iso15765-2.o(i.ISO15765_TxFinishProcess)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = ISO15765_TxFinishProcess +
    +
    [Called By]
    • >>   ISO15765_DrvConfirmation +
    + +

    ISO15765_TxInit (Thumb, 114 bytes, Stack size 8 bytes, iso15765-2.o(i.ISO15765_TxInit)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = ISO15765_TxInit +
    +
    [Calls]
    • >>   IF_CAN_CancelTransmitMsg +
    +
    [Called By]
    • >>   ISO15765_Precopy +
    • >>   ISO15765_TxTask +
    • >>   ISO15765_Init +
    + +

    ISO15765_TxStateTask (Thumb, 232 bytes, Stack size 16 bytes, iso15765-2.o(i.ISO15765_TxStateTask)) +

    [Stack]

    • Max Depth = 288
    • Call Chain = ISO15765_TxStateTask ⇒ ISO15765_CanTransmitMsg ⇒ IF_CAN_TransmitMsg ⇒ IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   ISO15765_CanTransmitMsg +
    • >>   ISO15765_PreTransmitClearCanDataPtr +
    • >>   ISO15765_PreCanTransmit +
    +
    [Called By]
    • >>   ISO15765_TxTask +
    + +

    ISO15765_TxTask (Thumb, 90 bytes, Stack size 8 bytes, iso15765-2.o(i.ISO15765_TxTask)) +

    [Stack]

    • Max Depth = 296
    • Call Chain = ISO15765_TxTask ⇒ ISO15765_TxStateTask ⇒ ISO15765_CanTransmitMsg ⇒ IF_CAN_TransmitMsg ⇒ IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   ISO15765_TxStateTask +
    • >>   ISO15765_TxInit +
    • >>   ISO15765_TransmitOfCF +
    +
    [Called By]
    • >>   ISO15765_Task +
    + +

    CanTrans_Delay (Thumb, 16 bytes, Stack size 0 bytes, can_transceiver.o(i.CanTrans_Delay)) +

    [Called By]

    • >>   CanTrans_GoToSleep +
    + +

    Diag_CommDisable (Thumb, 12 bytes, Stack size 0 bytes, diag_appl_c301.o(i.Diag_CommDisable)) +

    [Called By]

    • >>   Diag_CommunicationControl +
    + +

    Diag_CommEnable (Thumb, 12 bytes, Stack size 0 bytes, diag_appl_c301.o(i.Diag_CommEnable)) +

    [Called By]

    • >>   Diag_CommunicationControl +
    + +

    JumpToExecute (Thumb, 30 bytes, Stack size 8 bytes, main.o(i.JumpToExecute)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = JumpToExecute +
    +
    [Calls]
    • >>   __set_MSP +
    +
    [Called By]
    • >>   Sys_GotoApp +
    + +

    Sys_GotoApp (Thumb, 8 bytes, Stack size 8 bytes, main.o(i.Sys_GotoApp)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = Sys_GotoApp ⇒ JumpToExecute +
    +
    [Calls]
    • >>   JumpToExecute +
    +
    [Called By]
    • >>   Task_RunToApp +
    + +

    Task_RunToApp (Thumb, 44 bytes, Stack size 8 bytes, main.o(i.Task_RunToApp)) +

    [Stack]

    • Max Depth = 24
    • Call Chain = Task_RunToApp ⇒ Sys_GotoApp ⇒ JumpToExecute +
    +
    [Calls]
    • >>   Sys_GotoApp +
    +
    [Called By]
    • >>   Uds_SysTick_Process_10ms +
    + +

    Uds_SysTick_Process_10ms (Thumb, 12 bytes, Stack size 8 bytes, main.o(i.Uds_SysTick_Process_10ms)) +

    [Stack]

    • Max Depth = 328
    • Call Chain = Uds_SysTick_Process_10ms ⇒ Can_Task ⇒ CanTask_TimerProcess ⇒ ISO15765_Task ⇒ ISO15765_TxTask ⇒ ISO15765_TxStateTask ⇒ ISO15765_CanTransmitMsg ⇒ IF_CAN_TransmitMsg ⇒ IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   Can_Task +
    • >>   Task_RunToApp +
    +
    [Called By]
    • >>   main +
    + +

    uds_SysTick_Process_1ms (Thumb, 8 bytes, Stack size 8 bytes, main.o(i.uds_SysTick_Process_1ms)) +

    [Stack]

    • Max Depth = 120
    • Call Chain = uds_SysTick_Process_1ms ⇒ CanTask_UdsStateProcess ⇒ Uds_StateTask ⇒ Uds_ContextTask ⇒ Uds_SetState ⇒ Diag_CheckValidApp1 ⇒ ee_ReadBytes ⇒ IIC_Read_Byte ⇒ IIC_NAck +
    +
    [Calls]
    • >>   CanTask_UdsStateProcess +
    +
    [Called By]
    • >>   main +
    + +

    APP_CAN_MessageTypeHandle (Thumb, 92 bytes, Stack size 16 bytes, app_can.o(i.APP_CAN_MessageTypeHandle)) +

    [Stack]

    • Max Depth = 320
    • Call Chain = APP_CAN_MessageTypeHandle ⇒ ISO15765_Precopy ⇒ ISO15765_RxStateTask ⇒ ISO15765_CanTransmitMsg ⇒ IF_CAN_TransmitMsg ⇒ IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   ISO15765_Precopy +
    +
    [Called By]
    • >>   APP_CAN_FifoMessageReceive +
    + +

    CanTask_ReprogrammingCheck (Thumb, 26 bytes, Stack size 8 bytes, app_can.o(i.CanTask_ReprogrammingCheck)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = CanTask_ReprogrammingCheck +
    +
    [Calls]
    • >>   Uds_GetCurSessionAccessStatus +
    +
    [Called By]
    • >>   CanTask_TimerProcess +
    + +

    CanTask_SaRandomCounter (Thumb, 12 bytes, Stack size 0 bytes, app_can.o(i.CanTask_SaRandomCounter)) +

    [Called By]

    • >>   CanTask_TimerProcess +
    + +

    CanTask_TimerProcess (Thumb, 24 bytes, Stack size 8 bytes, app_can.o(i.CanTask_TimerProcess)) +

    [Stack]

    • Max Depth = 312
    • Call Chain = CanTask_TimerProcess ⇒ ISO15765_Task ⇒ ISO15765_TxTask ⇒ ISO15765_TxStateTask ⇒ ISO15765_CanTransmitMsg ⇒ IF_CAN_TransmitMsg ⇒ IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   ISO15765_Task +
    • >>   Uds_Task +
    • >>   CanTask_BusErrorDetection +
    • >>   CanTask_SaRandomCounter +
    • >>   CanTask_ReprogrammingCheck +
    +
    [Called By]
    • >>   Can_Task +
    + +

    IF_CAN_CopyDataAndStartTx (Thumb, 140 bytes, Stack size 120 bytes, app_can.o(i.IF_CAN_CopyDataAndStartTx)) +

    [Stack]

    • Max Depth = 240
    • Call Chain = IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   __aeabi_memclr4 +
    • >>   IF_CAN_SendCanData +
    +
    [Called By]
    • >>   IF_CAN_TransmitMsg +
    +

    +

    +Undefined Global Symbols +


    diff --git a/boot_project/Objects/boot.lnp b/boot_project/Objects/boot.lnp new file mode 100644 index 0000000..f072b65 --- /dev/null +++ b/boot_project/Objects/boot.lnp @@ -0,0 +1,36 @@ +--cpu Cortex-M3 +".\objects\startup_stm32f10x_cl.o" +".\objects\core_cm3.o" +".\objects\misc.o" +".\objects\stm32f10x_gpio.o" +".\objects\stm32f10x_rcc.o" +".\objects\stm32f10x_can.o" +".\objects\stm32f10x_dma.o" +".\objects\stm32f10x_flash.o" +".\objects\stm32f10x_iwdg.o" +".\objects\stm32f10x_pwr.o" +".\objects\led.o" +".\objects\24cxx.o" +".\objects\bsp_i2c_gpio.o" +".\objects\can2.o" +".\objects\stm32f10x_it.o" +".\objects\system_stm32f10x.o" +".\objects\dev_flashapi.o" +".\objects\dev_crc32.o" +".\objects\dev_sys.o" +".\objects\dev_eerom.o" +".\objects\uds.o" +".\objects\iso15765-2.o" +".\objects\iso15765-2_entry.o" +".\objects\can_transceiver.o" +".\objects\diag_eeprom_c301.o" +".\objects\canconfig_c301.o" +".\objects\canctrl_c301.o" +".\objects\diag_appl_c301.o" +".\objects\uds_sa_c301.o" +".\objects\main.o" +".\objects\app_can.o" +--library_type=microlib --strict --scatter ".\link_sct\STM32F105Boot.sct" +--summary_stderr --info summarysizes --map --load_addr_map_info --xref --callgraph --symbols +--info sizes --info totals --info unused --info veneers +--list ".\Listings\boot.map" -o .\Objects\boot.axf \ No newline at end of file diff --git a/boot_project/Objects/diag_appl_hr.__i b/boot_project/Objects/diag_appl_hr.__i new file mode 100644 index 0000000..3e0247a --- /dev/null +++ b/boot_project/Objects/diag_appl_hr.__i @@ -0,0 +1,6 @@ +--c99 -c --cpu Cortex-M3 -D__MICROLIB -g -O3 --apcs=interwork --split_sections -I ..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport -I ..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc -I ..\boot_source\platform\drivers\inc -I ..\boot_source\code_app\startup\inc -I ..\boot_source\code_app\driver\inc -I ..\boot_source\code_app\interface\inc -I ..\boot_source\code_app\service\CanStack\canBus_Com\inc -I ..\boot_source\code_app\service\CanStack\canBus_hongri\inc -I ..\boot_source\code_app\service\Eeprom\inc -I ..\boot_source\code_app\main\inc -I ..\boot_source\code_app\app_boot\inc --diag_suppress 236 +-I.\RTE\_hongri_boot +-IC:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include +-IC:\Keil_v5\ARM\CMSIS\Include +-D__UVISION_VERSION="525" -DSTM32F10X_CL -DUSE_STDPERIPH_DRIVER -DSTM32F10X_CL -DUSE_STM3210C_EVAL +-o .\objects\diag_appl_hr.o --omf_browse .\objects\diag_appl_hr.crf --depend .\objects\diag_appl_hr.d "..\boot_source\code_app\service\CanStack\canBus_hongri\src\Diag_Appl_hr.c" \ No newline at end of file diff --git a/boot_project/Objects/hongri_boot.axf b/boot_project/Objects/hongri_boot.axf new file mode 100644 index 0000000000000000000000000000000000000000..0565153f6b21e71bd9836b933d3643a36e9db16c GIT binary patch literal 572108 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 z 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 z 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 + +
    +

    Vision Build Log

    +

    Tool Versions:

    +IDE-Version: Vision V5.25.2.0 +Copyright (C) 2018 ARM Ltd and ARM Germany GmbH. All rights reserved. +License Information: Zachary Administrator, Zachary, LIC=TIVNB-2IHDY-01WP1-C2K2G-5HIE0-XG8NS + +Tool Versions: +Toolchain: MDK-ARM Plus Version: 5.25.2.0 +Toolchain Path: C:\Keil_v5\ARM\ARMCC\Bin +C Compiler: Armcc.exe V5.06 update 6 (build 750) +Assembler: Armasm.exe V5.06 update 6 (build 750) +Linker/Locator: ArmLink.exe V5.06 update 6 (build 750) +Library Manager: ArmAr.exe V5.06 update 6 (build 750) +Hex Converter: FromElf.exe V5.06 update 6 (build 750) +CPU DLL: SARMCM3.DLL V5.25.2.0 +Dialog DLL: DCM.DLL V1.17.1.0 +Target DLL: Segger\JL2CM3.dll V2.99.29.0 +Dialog DLL: TCM.DLL V1.35.1.0 + +

    Project:

    +E:\liudagui\project\HONGRI\code\boot_up\boot_project\hongri_boot.uvprojx +Project File Date: 11/04/2024 + +

    Output:

    +*** Using Compiler 'V5.06 update 6 (build 750)', folder: 'C:\Keil_v5\ARM\ARMCC\Bin' +Rebuild target 'hongri_boot' +assembling startup_stm32f10x_cl.s... +compiling stm32f10x_gpio.c... +compiling misc.c... +compiling stm32f10x_dma.c... +compiling stm32f10x_iwdg.c... +compiling stm32f10x_pwr.c... +compiling stm32f10x_can.c... +compiling stm32f10x_rcc.c... +compiling led.c... +compiling stm32f10x_flash.c... +compiling 24cxx.c... +compiling core_cm3.c... +compiling bsp_i2c_gpio.c... +compiling dev_eerom.c... +compiling dev_crc32.c... +compiling dev_flashApi.c... +compiling stm32f10x_it.c... +compiling system_stm32f10x.c... +compiling dev_sys.c... +compiling can2.c... +compiling iso15765-2_entry.c... +compiling Can_Transceiver.c... +compiling iso15765-2.c... +compiling Diag_Eeprom_C301.c... +compiling UDS.c... +compiling CanConfig_C301.c... +compiling CanCtrl_C301.c... +compiling UDS_SA_C301.c... +..\boot_source\code_app\service\CanStack\canBus_hongri\UDS_SA_C301.c(48): warning: #177-D: function "BL_BE32_TO_MCU" was declared but never referenced + static uint32_t BL_BE32_TO_MCU(uint8_t *pBuf) +..\boot_source\code_app\service\CanStack\canBus_hongri\UDS_SA_C301.c: 1 warning, 0 errors +compiling Diag_Appl_C301.c... +..\boot_source\code_app\driver\inc\dev_eerom.h(32): warning: #1-D: last line of file ends without a newline + /** EOF */ +..\boot_source\code_app\service\CanStack\canBus_hongri\Diag_Appl_C301.c(1329): warning: #177-D: variable "crc32" was declared but never referenced + uint32_t crc32=0; +..\boot_source\code_app\service\CanStack\canBus_hongri\Diag_Appl_C301.c(2026): warning: #550-D: variable "CRC_16" was set but never used + uint16_t CRC_16=0xFFFF; +..\boot_source\code_app\service\CanStack\canBus_hongri\Diag_Appl_C301.c(2121): warning: #223-D: function "GetCrc32Chk" declared implicitly + if(GetCrc32Chk() == transSequenceValue) +..\boot_source\code_app\service\CanStack\canBus_hongri\Diag_Appl_C301.c(289): warning: #177-D: function "Diag_ExtMemorySecFAAFlagSave" was declared but never referenced + static void Diag_ExtMemorySecFAAFlagSave(uint8_t cnt) +..\boot_source\code_app\service\CanStack\canBus_hongri\Diag_Appl_C301.c: 5 warnings, 0 errors +compiling main.c... +..\boot_source\code_app\main\src\main.c(163): warning: #188-D: enumerated type mixed with another type + RCC_APB1PeriphClockCmd (RCC_APB1Periph_PWR | RCC_APB1Periph_BKP,ENABLE );// +..\boot_source\code_app\main\src\main.c(164): warning: #188-D: enumerated type mixed with another type + PWR_BackupAccessCmd(ENABLE);// +..\boot_source\code_app\main\src\main.c(198): warning: #188-D: enumerated type mixed with another type + TimeTaskData.F_Time_1MS = RESET; +..\boot_source\code_app\main\src\main.c(207): warning: #188-D: enumerated type mixed with another type + TimeTaskData.F_Time_5MS = RESET; +..\boot_source\code_app\main\src\main.c(213): warning: #188-D: enumerated type mixed with another type + TimeTaskData.F_Time_10MS = RESET; +..\boot_source\code_app\main\src\main.c(222): warning: #188-D: enumerated type mixed with another type + TimeTaskData.F_Time_20MS = RESET; +..\boot_source\code_app\main\src\main.c(226): warning: #188-D: enumerated type mixed with another type + TimeTaskData.F_Time_50MS = RESET; +..\boot_source\code_app\main\src\main.c(230): warning: #188-D: enumerated type mixed with another type + TimeTaskData.F_Time_100MS = RESET; +..\boot_source\code_app\main\src\main.c(234): warning: #188-D: enumerated type mixed with another type + TimeTaskData.F_Time_1000MS = RESET; +..\boot_source\code_app\main\src\main.c(89): warning: #177-D: function "Task_RunToAppCheckValide" was declared but never referenced + static uint8_t Task_RunToAppCheckValide(void) +..\boot_source\code_app\main\src\main.c: 10 warnings, 0 errors +compiling app_can.c... +linking... +Program Size: Code=22124 RO-data=980 RW-data=252 ZI-data=12716 +FromELF: creating hex file... +".\Objects\hongri_boot.axf" - 0 Error(s), 16 Warning(s). + +

    Software Packages used:

    + +Package Vendor: Keil + http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.1.0.pack + Keil.STM32F1xx_DFP.2.1.0 + STMicroelectronics STM32F1 Series Device Support, Drivers and Examples + +

    Collection of Component include folders:

    + .\RTE\_hongri_boot + C:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include + +

    Collection of Component Files used:

    +Build Time Elapsed: 00:00:06 +
    + + diff --git a/boot_project/Objects/hongri_boot.hex b/boot_project/Objects/hongri_boot.hex new file mode 100644 index 0000000..57be32b --- /dev/null +++ b/boot_project/Objects/hongri_boot.hex @@ -0,0 +1,1463 @@ +:020000040800F2 +:10000000A832002085010008153E00088D2A00084E +:10001000113E0008FD020008F9540008000000002D +:10002000000000000000000000000000394200084D +:100030006F10000800000000B53E00086143000892 +:100040009F0100089F0100089F0100089F01000810 +:100050009F0100089F0100089F0100089F01000800 +:100060009F0100089F0100089F0100089F010008F0 +:100070009F0100089F0100089F0100089F010008E0 +:100080009F0100089F0100089F0100089F010008D0 +:100090009F0100089F0100089F0100089F010008C0 +:1000A0009F0100089F0100089F0100089F010008B0 +:1000B0009F0100089F0100089F0100089F010008A0 +:1000C0009F0100089F0100089F0100089F01000890 +:1000D0009F0100089F0100089F0100089F01000880 +:1000E0009F0100089F0100089F0100080000000018 +:1000F0000000000000000000000000000000000000 +:1001000000000000000000009F0100089F0100089F +:100110009F0100089F0100089F0100089F0100083F +:100120009F0100089F0100089F0100089F0100082F +:100130009F0100089F0100089F0100089F0100081F +:100140009F010008B9040008E90400089F010008A5 +:10015000DFF80CD000F04CF800480047E9560008E2 +:10016000A8320020EFF30980704780F309887047B8 +:10017000EFF30880704780F30888704740BA7047F3 +:10018000C0BA70470648804706480047FEE7FEE7CA +:10019000FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE737 +:1001A000214400085101000840EA01039B0703D0E5 +:1001B00009E008C9121F08C0042AFAD203E011F8A6 +:1001C000013B00F8013B521EF9D27047D2B201E068 +:1001D00000F8012B491EFBD270470022F6E710B54C +:1001E00013460A4604461946FFF7F0FF204610BDA5 +:1001F000064C074D06E0E06840F0010394E8070074 +:1002000098471034AC42F6D3FFF7A6FF205A0008F7 +:10021000405A00080FB470B5049D9DF81A000828D4 +:1002200002DD08208DF81A000C49049808609DF83A +:100230001A008872002407E00DF11B00015D0748D9 +:100240000B300155601CC4B29DF81A00A042F3DCCB +:10025000284600F005F870BC5DF814FB802A0020E9 +:1002600070B5044603254FF6D0702040B0F5806F7E +:1002700004D1012500201149086010E040F2DF7030 +:10028000844203D040F20B70844204D10225002046 +:100290000A49086003E00325002008490860012D91 +:1002A00004D0022D03D0032D05D103E004E002F0B9 +:1002B000EBFE01E000E000BF00BF70BDF0000020D9 +:1002C00010B501214FF0C05003F0F6FD012003F0FE +:1002D000EBFD10BD00BF0748006800F4E060064970 +:1002E0000843001D03490860BFF34F8F00BF00BFE4 +:1002F000FEE700000CED00E00000FA0500BFFEE79D +:1003000002480068C043014908607047D8000020D7 +:1003100000B50648006838B901200549086005485D +:100320000249086005F0EAF800BD0000E000002086 +:10033000DC0000202083B8ED4FF0FF300149086059 +:1003400070470000D800002030B503460C4609482D +:100350000268002108E0605C5040C5B2064850F8D1 +:10036000250080EA1222491C9942F4D30148026018 +:10037000002030BDD80000208026002000B589B0C4 +:100380000121092003F0B8FD0121480603F094FD86 +:100390000121880603F090FD4FF40050ADF82000D5 +:1003A00003208DF8220018208DF8230008A940486A +:1003B00002F08FFA4FF48050ADF8200048208DF8FD +:1003C000230008A93A4802F084FA00208DF81A00A8 +:1003D00001208DF81B0000208DF81C008DF81D00F9 +:1003E0008DF81E008DF81F008DF8160001208DF885 +:1003F000170008208DF8180001208DF8190006203C +:10040000ADF8140005A92B4800F0B9FA0E208DF8BC +:100410000E0000208DF80F0001208DF81000002044 +:10042000ADF80400ADF80600ADF80800ADF80A001C +:100430000120ADF80C008DF8110001A800F046F97C +:10044000012210211B4800F091FA41208DF8000094 +:1004500001208DF8010000208DF8020001208DF8A8 +:100460000300684603F0DEFC012005F0A9F8012234 +:100470005102104800F07AFA012291020D4800F072 +:1004800075FA0122D1030B4800F070FA42208DF872 +:10049000000001208DF8010000208DF802000120ED +:1004A0008DF80300684603F0BDFC002009B000BDD4 +:1004B000000C01400068004000B587B0012005F045 +:1004C0008BF802AA0121074800F0E3FA0698009091 +:1004D00002A80FC8FFF79EFE142102A8FFF77DFEB9 +:1004E00007B000BD0068004010B54FF400712D4802 +:1004F00000F0ACF9012820D12B492A4800F06AF914 +:10050000012815D100BF022808DA284911F8301057 +:1005100021B1264911F83010032900D104E002214D +:10052000224A02F8301000BF1F491E4800F042F86E +:100530004FF400711B4800F059F84FF480611948DE +:1005400000F084F901282BD11749891C154800F0C7 +:1005500041F901281FD10124022C03DA134810F8B5 +:10056000340000B912E00320104901F8340001EB17 +:10057000C401081D002103F0A1FF1CB90C4800F0C4 +:1005800089F802E0074800F085F800BF0649891C99 +:10059000044800F00FF84FF48061024800F026F89C +:1005A00010BD0000006800400200F010FC000020B8 +:1005B0000064004000220C4B994202D10023836169 +:1005C00011E0C1F3130201F000730BB1C2600AE045 +:1005D00001F080630BB1026105E001F000630BB133 +:1005E000826000E0426070477000F030B1F5007F3B +:1005F0003AD00FDC202928D006DC01291CD00429A0 +:100600001DD0082940D11DE0402921D0B1F5807FBF +:100610003AD126E0B1F5004F31D006DCB1F5806F5C +:1006200025D0B1F5006F2FD124E0B1F5803F12D075 +:10063000B1F5003F28D111E0154A826025E008227B +:10064000C26022E01022C2601FE0082202611CE0AA +:100650001022026119E00822426016E01022426076 +:1006600013E00422426010E0042242600DE0042204 +:1006700042600AE0002282610422426005E000221A +:1006800082610422426000E000BF00BF70470000AA +:100690000101010010B504460B48844209D1012133 +:1006A000480603F019FC00214FF0007003F014FC21 +:1006B00008E00121880603F00FFC00214FF0806064 +:1006C00003F00AFC10BD00000064004010B50021DA +:1006D000837A012202FA03F13D4A126842F00102D4 +:1006E0003B4B1A603A4A1C3212688A43384B1C331F +:1006F0001A60027BCAB9364A0C3212688A43344BFC +:100700000C331A604288C38842EA0343304A4032BD +:10071000847A42F834300288838842EA03432C4AC0 +:100720004032847A02EBC4025360027B012A19D161 +:10073000274A0C3212680A43254B0C331A60428850 +:10074000038842EA0343224A4032847A42F8343032 +:10075000C288838842EA03431D4A4032847A02EB0E +:10076000C4025360C27A3AB9194A121D12688A4308 +:10077000174B1B1D1A6006E0154A121D12680A432A +:10078000134B1B1D1A60028932B9114A14321268C8 +:100790008A430F4B14331A600289012A06D10C4A8E +:1007A000143212680A430A4B14331A60427B012A3E +:1007B00006D1074A1C3212680A43054B1C331A60E3 +:1007C000034A126822F00102014B1A6010BD0000BA +:1007D0000066004010B50246002001F4700343B1EA +:1007E0009369C1F3130423400BB101202DE00020D5 +:1007F0002BE001F0807343B15368C1F3130423402D +:100800000BB1012021E000201FE001F0006343B1A3 +:100810009368C1F3130423400BB1012015E00020BD +:1008200013E001F0007343B1D368C1F31304234014 +:100830000BB1012009E0002007E01369C1F31304A4 +:1008400023400BB1012000E0002010BD70B504462C +:100850000D46002660692840002871D0B5F5807FDC +:100860005CD010DC082D35D006DC012D20D0022D07 +:1008700024D0042D72D127E0102D31D0202D35D079 +:10088000402D6BD138E0B5F5004F60D009DCB5F5EF +:10089000007F49D0B5F5806F4CD0B5F5006F5DD1C4 +:1008A0004FE0B5F5803F2DD0B5F5003F56D12FE094 +:1008B000A0682D4900F0D2FB064651E0E068032114 +:1008C00000F0CCFB06464BE0E068082100F0C6FBD8 +:1008D000064645E0E068102100F0C0FB06463FE018 +:1008E0002069032100F0BAFB064639E0206908219F +:1008F00000F0B4FB064633E02069102100F0AEFBA7 +:1009000006462DE06068082100F0A8FB064627E0B7 +:100910006068102100F0A2FB064621E0A0690121D9 +:1009200000F09CFB06461BE0A069022100F096FB4C +:10093000064615E0A069042100F090FB06460FE092 +:100940000FE0A069702100F089FB064608E06068AE +:10095000042100F083FB064602E0FFE7002600BF0B +:1009600000E00026304670BD010101001AB1436964 +:100970000B43436102E043698B434361704730B5E9 +:10098000024600200023146824F002041460146856 +:1009900044F00104146000E05B1C546804F001049E +:1009A0001CB94FF6FF74A342F6D1546804F0010459 +:1009B0000CB900206CE08C79012C04D1146844F04F +:1009C0008004146003E0146824F080041460CC797F +:1009D000012C04D1146844F04004146003E014684E +:1009E00024F0400414600C7A012C04D1146844F003 +:1009F0002004146003E0146824F0200414604C7A8E +:100A0000012C04D1146844F01004146003E014684D +:100A100024F0100414608C7A012C04D1146844F082 +:100A20000804146003E0146824F008041460CC7A0D +:100A3000012C04D1146844F00404146003E0146829 +:100A400024F0040414608C78A407CD7844EA05648B +:100A50000D7944EA05444D7944EA05540D886D1E2C +:100A60002C43D461146824F001041460002300E0D6 +:100A70005B1C546804F001041CB14FF6FF74A342E0 +:100A8000F6D1546804F001040CB1002000E001200C +:100A900030BD10B500F5D87303EB01131B6803F0EC +:100AA00004031372137A53B900F5D87303EB0113DF +:100AB0001B6840F2FF7404EA5353136009E000F529 +:100AC000D87303EB01131B686FF0604404EAD3038F +:100AD000536000F5D87303EB01131B6803F00203A6 +:100AE000537200F5D87303EB01135B6803F00F0337 +:100AF000937200F5D87303EB01135B681B0AD37480 +:100B000000F5D87303EB01139B68D37200F5D8731B +:100B100003EB01139B681C0A147300F5D87303EBF5 +:100B200001139B681C0C547300F5D87303EB01137D +:100B30009B681B0E937300F5D87303EB0113DB68FE +:100B4000D37300F5D87303EB0113DB681C0A14742C +:100B500000F5D87303EB0113DB681C0C547400F52B +:100B6000D87303EB0113DB681B0E937421B9C368C0 +:100B700043F02003C36003E0036943F020030361F3 +:100B800010BD10B502460020936803F08063B3F1F6 +:100B9000806F00D110E0936803F00063B3F1006F41 +:100BA00001D1012008E0936803F08053B3F1805F26 +:100BB00001D1022000E00420042874D002F5C073A3 +:100BC00003EB00131B6803F0010402F5C07303EB91 +:100BD00000131C600B7A7BB94B7A0C8843EA4453B0 +:100BE00002F5C07404EB00142468234302F5C074BA +:100BF00004EB0014236010E00B7A4C6843EAC40352 +:100C00004C7A234302F5C07404EB00142468234398 +:100C100002F5C07404EB001423608B7A03F00F0319 +:100C20008B7202F5C07303EB00135B6823F00F04B3 +:100C300002F5C07303EB00135C6002F5C07303EBB5 +:100C400000135B688C7A234302F5C07404EB001434 +:100C500063608B7B1C064B7B44EA03440B7B44EABA +:100C60000323CC7A234302F5C07404EB0014A36081 +:100C70008B7C1C064B7C44EA03440B7C44EA032334 +:100C8000CC7B234302F5C07404EB0014E36002F54F +:100C9000C07303EB00131B6843F0010402F5C0733B +:100CA00003EB00131C6010BD10B50246002321B1F8 +:100CB000012907D002290FD109E090681D4C00EAF4 +:100CC00004030BE090681C4C00EA040306E0906803 +:100CD0001A4C00EA040301E0002300BF00BF184CD7 +:100CE000181BA34216D007DC83B16FF08060184454 +:100CF00070B1022818D111E0B0F5007F10D0114C6E +:100D0000204448B1B0F5003F0ED10BE002230DE0C6 +:100D100000230BE0002309E0002307E0012305E0A6 +:100D2000012303E0012301E0002300BF00BFD8B28C +:100D300010BD0000030000040003000800000310C1 +:100D4000000100080001FFF70FB430B585B00024A2 +:100D5000142208A96846FFF727FA012004F050FC86 +:100D600020B9012005B030BC5DF814FB69460E487F +:100D7000FFF707FF0546002401E0601C84B2012054 +:100D800004F03EFC40B129460748FFF78DFF18B933 +:100D900040F6FF708442F0DB40F6FF70844201DBD6 +:100DA0000120DFE70020DDE70068004010B50020EB +:100DB00000F00AF910BD70473048407820F040003C +:100DC0002E4948700846407820F0200048700846B8 +:100DD000407820F0100048700846807820F00F001E +:100DE00088700846807820F0F00088700846007807 +:100DF00020F0010008700846007820F00800087014 +:100E00000846007820F0040008700846007820F0BA +:100E1000020008700846007820F02000087008469C +:100E2000007820F0100008700846007820F080005C +:100E300008700846007820F04000087008464078A6 +:100E400020F0010048700846407820F00200487009 +:100E50000846407820F00400487000204871C1F82E +:100E6000F000C1F8F400C1F8F800C1F8FC00C1F8C6 +:100E7000EC004FF6FF70A1F8E600704770150020F7 +:100E80000148007870470000F600002010B50024EB +:100E9000002012490870124908701249087012495E +:100EA000087072B6FFF788FF00240DE000200F499C +:100EB00008550F4908552146012001F041FE204602 +:100EC00001F030FE601CC4B2012CEFDB00F09AF898 +:100ED00001F0BEFF03F0A8FD62B610BDF7000020D0 +:100EE000F6000020F8000020F5000020F9000020A6 +:100EF000FA0000200949097842290DD107494978AB +:100F00004F2909D105498978452905D10349C9786F +:100F1000522901D1012000E0002070478E000020FE +:100F200010B506480078002806DD04480078401E09 +:100F30000249087003F0D2FC10BD0000F800002048 +:100F400002480078401C014908707047F6000020F4 +:100F50000149087070470000F500002010B5FFF748 +:100F60002AFF02F0E5FC04F045F9FFF7E9FFFFF77F +:100F7000D7FF10BD10B503480078012801D104F057 +:100F800029F910BDF700002000204FF4AC7000E0FC +:100F9000401E0028FCD1704710B50446012C00DB30 +:100FA00010BD44B98021064801F068FD10210548B4 +:100FB00001F064FD00E000BF00BF00BFF0E70000EB +:100FC00000100140000C014010B50446012C00DB6C +:100FD00010BD74B91021094801F04EFD8021084868 +:100FE00001F04CFDFFF7D0FF8021054801F044FDE2 +:100FF00000E000BF00BF00BFEAE70000000C0140B6 +:101000000010014010B50020FFF7C6FF10BD000022 +:1010100010B500240F480078012817D1FFF79EFF74 +:101020000D480068B0F5FA6F0AD3FFF7BFFE06E07F +:10103000601C84B2B4F5487F01DBFFF74BF9F7E79A +:1010400005480068401C0449086002E0012001498D +:10105000087010BDF7000020F000002002460020BC +:1010600002EA01030BB1012000E000207047704745 +:101070000120014908707047C200002070B5044685 +:10108000012501F0FDFCA04200D10025284670BDDD +:1010900038B502221021684604F0C8FA0546012D31 +:1010A00001D0002038BD002409E01DF8040006A18D +:1010B000095D884201D00020F4E7601CC4B2022C14 +:1010C000F3DB0120EEE700004852000010B50548B0 +:1010D000807800F00F00012802D1FFF7D9FF10BD82 +:1010E0000120FCE77015002000200549897801F0F7 +:1010F0000F01012901D1012000E00120704700000B +:101100007015002002460020A2F57143843B73B99C +:101110000B78632B01DD012008E04B783C2B01DDCF +:10112000012003E08B781F2B00DD012000E000BFD1 +:1011300000BF704770B5054604F0BCFA72B68B2D3F +:1011400006D10E480068012182680D48904711E0E1 +:101150002E2D0FD1002404E0AA200A490855601C56 +:10116000C4B2082CF8DB054800680822054943682A +:101170000348984704F0A6FA62B670BD2800002024 +:1011800000380208A8000020002004E0AA21034A39 +:101190001154411CC8B20828F8DB70478E000020AB +:1011A000012802D0022800D000BF7047012802D0D9 +:1011B000022800D000BF70472DE9F0410446207995 +:1011C000401CC6B22068477820688578032E03DC6F +:1011D000132003F0BBFF44E037B1032F1BD0802F57 +:1011E00003D0832F2ED117E000BF042E05D013208B +:1011F00003F0ACFF03F0B6FC32E00220A081032D27 +:1012000001DC012D03DA312003F0A0FF02E02846C3 +:10121000FFF7CCFF24E000BF042E05D0132003F01D +:1012200095FF03F09FFC1BE00220A081032D01DC51 +:10123000012D03DA312003F089FF02E02846FFF791 +:10124000AFFF0DE003F006FA18B1802003F0BCFFF9 +:1012500005E0002003F0B8FF122003F077FF00BF85 +:1012600000BF03F037FCBDE8F08170B5044620797B +:10127000401CC6B22068457825F08005022E03D1B7 +:10128000132003F063FF1FE0012D02D0022D0CD1CB +:1012900000E000BF032E05D0132003F057FF03F03A +:1012A00061FC10E00220A0810DE003F0D3F918B139 +:1012B000802003F089FF05E0002003F085FF122065 +:1012C00003F044FF00BF00BF03F004FC70BD00004A +:1012D00070B50246002028E00D5C2B02002421E0BE +:1012E000134DB5F8E6505D4005F4004555B1104D7D +:1012F000B5F8E65041F2210686EA45050C4EA6F8FF +:10130000E65009E00A4DB5F8E6504FF6FF7606EADA +:101310004505074EA6F8E6504FF6FF7505EA43036C +:10132000651CECB2082CDBDB401C9042D4D370BDB2 +:10133000701500202DE9F04105460E4617464FF086 +:1013400000081448807800F00F00012805D01148EB +:10135000807800F00F00022814D104F0ABF972B6C7 +:101360000D4800683A46314643682846984780460B +:1013700004F0A8F962B6B8F1000F01D1002402E030 +:10138000012400E0012414B90120BDE8F08100200F +:10139000FBE70000701500202800002070B504460F +:1013A0002079401CC5B22068467826F08006022DC0 +:1013B00003DC132003F0CAFE2FE0012E02D0032E1F +:1013C0001CD10DE0032D05D0132003F0BFFE03F068 +:1013D000C9FB04E00220A0810A20114908701BE02B +:1013E000032D05D0132003F0B1FE03F0BBFB04E096 +:1013F0000220A0810A200B4908700DE003F02AF9B1 +:1014000018B1802003F0E0FE05E0002003F0DCFED0 +:10141000122003F09BFE00BF00BF03F05BFB70BD1A +:1014200044000020450000202DE9F05F06460F46ED +:1014300090461B48B0F8E84000252BE04FF44830B8 +:10144000B5FBF0F100FB115010B9404603F02EFA45 +:1014500017F805B04FEA0B294FF0000A16E084EAAE +:10146000090000F4004028B141F2210080EA440064 +:1014700084B203E04FF6FF7000EA44044FF6FF70B9 +:1014800000EA49090AF1010000F0FF0ABAF1080F69 +:10149000E5DB6D1CB542D1D32046BDE8F09F0000CE +:1014A00070150020704710B50346002003E01C5C57 +:1014B0000C54441CE0B29042F9DB10BD10B5034659 +:1014C000002002E00C5C1C54401C9042FAD310BD7A +:1014D0001D48007820F0800080301B4908700020F3 +:1014E000C1F8EC00C1F8F400C1F8F00008464078FB +:1014F00020F0010048700846007820F002000870D3 +:101500000846007820F0040008700846007820F0B3 +:10151000200008700846007820F001000870084696 +:10152000007820F0080008700846407820F010008D +:1015300048700846807820F00F0088700846807850 +:1015400020F0F000887070477015002070B50646D6 +:101550000C461546224629463046FFF7AFFF70BDC0 +:101560002DE9F04F9BB007464FF00008C34600241A +:101570003879401C00F0FF0801201A90B8F1040FE0 +:101580000FD0B8F1060F0CD0B8F1080F09D0B8F1A0 +:101590000A0F06D0B8F10C0F03D0132003F0D6FDCC +:1015A00083E04FF0010BBBF1050F01DD4FF0050BA0 +:1015B000012400255BE0012101EB45013868405C16 +:1015C0000DF804001DF804004FEA002A601CC4B2A4 +:1015D000022101EB45013868405C0DF804001DF85C +:1015E000040040EA0A0A601CC4B2002019900026D8 +:1015F0002DE0304800EB06100088504525D1012031 +:1016000019902C4800EB0610407A012803D12A4992 +:1016100051F8260080474FF000090DE0254800EB07 +:101620000610406810F809000DF80400601CC4B2F0 +:1016300009F1010000F0FF091E4800EB0610007AD6 +:101640004845EBDC00201A9003E0701CC6B2052E62 +:10165000CFDB00BF03F050F910B100201A9008E072 +:10166000199810B901201A9003E0681CC5B25D45B5 +:10167000A1DB00BFBC81012505E01DF80500B968AC +:101680004855681CC5B2A542F7DB1A9801280CD151 +:1016900002F0E0FF18B1802003F096FD05E0002085 +:1016A00003F092FD312003F051FD03F013FA1BB05B +:1016B000BDE8F08FB8590008085A0008002005E07E +:1016C0000449095C044A1154411CC8B20528F7DBDF +:1016D0007047000033580008B0000020002005E0EB +:1016E0000449095C044A1154411CC8B20928F7DBBB +:1016F000704700002A5800083D150020002004E033 +:10170000FF21034A1154411CC8B20628F8DB704778 +:10171000B500002070470000002005E00449095C86 +:10172000044A1154411CC8B20928F7DB7047000075 +:1017300021580008341500202DE9FC410446257984 +:1017400020684678206887780B2D03D0132003F09B +:10175000FDFC46E10EB9442F03D0312003F0F6FC26 +:101760003FE1C5480078C0F3400018B1702003F095 +:10177000EDFC36E12068C0788DF80400206800791F +:101780008DF80500206840798DF806002068807982 +:101790008DF807002068C0798DF800002068007A75 +:1017A0008DF801002068407A8DF802002068807A68 +:1017B0008DF803009DF8040000069DF8051000EB6D +:1017C00001409DF8061000EB01209DF80710084429 +:1017D000A949C1F8F8009DF8000000069DF8011025 +:1017E00000EB01409DF8021000EB01209DF8031072 +:1017F0000844A149C1F8FC0008460078C0F3C000C5 +:10180000002857D10846D0F8FC00B0F5805F0AD810 +:101810000846D0F8F800401C28B10846D0F8F80077 +:101820009649884203D0312003F090FCD9E09248D9 +:10183000D0F8F8009149884207D18F48807820F08D +:10184000F00010308C4988700CE08B48D0F8F8001C +:101850008B49884206D18848807820F0F0002030FB +:10186000854988708448007820F008000830824953 +:1018700008700846007820F00200801C08700020E4 +:10188000C1F8EC00C1F8F000C1F8F4004FF6FF70A9 +:10189000A1F8E6002020A16848700420A1688870A3 +:1018A0000020A168C8700420A081FEF731FDFEF77A +:1018B00043FD96E07048D0F8F800724988420FD096 +:1018C0006D48D0F8F800B0F5601F09D06A48D0F82C +:1018D000F800B0F1805F03D0312003F037FC7AE0EC +:1018E0006548D0F8F8006749884205D16248D0F8C9 +:1018F000FC00B0F5CC3F17D85F48D0F8F800B0F541 +:10190000601F05D15C48D0F8FC00B0F5002F0BD863 +:101910005948D0F8F800B0F1805F09D15648D0F8A6 +:10192000FC00B0F1806F03D9312003F00FFC52E0CE +:1019300051484078C0F3800018B9222003F006FC1B +:1019400049E04D48D0F8F8004E49884207D14A484E +:10195000807820F00F00401C474988701AE0464804 +:10196000D0F8F800B0F5601F07D14348807820F028 +:101970000F00801C404988700CE03F48D0F8F80008 +:10198000B0F1805F06D13C48807820F00F00801CC9 +:10199000394988703848007820F00200801C3649A8 +:1019A00008700020C1F8EC00C1F8F000C1F8F400A4 +:1019B0004FF6FF70A1F8E6002020A16848700420CF +:1019C000A16888700020A168C8700420A081FEF77B +:1019D0009FFCFEF7B1FC2848007820F0080026495B +:1019E000087002F089FF98B32348007820F00200C5 +:1019F000214908700846007820F040000870084629 +:101A0000007820F0800008700846407820F001003F +:101A100048700846807820F00F008870084680786B +:101A200020F0F00088700020C1F8F800C1F8FC0038 +:101A3000C1F8F4004FF6FF70A1F8E6000020C1F8ED +:101A4000EC00C1F8F000887500210B48C1750176E3 +:101A50000948007820F010000749087008464078CF +:101A600020F0100048700846407820F020004870B0 +:101A700003F030F8BDE8FC817015002000F0002074 +:101A800000D8BFFE00A000082DE9F04105460E4633 +:101A900000270F48854214D1B6F5CC3F11D803F08A +:101AA00009FE72B60B4800683321826808489047E7 +:101AB000074603F007FE62B60FB9002402E00124D6 +:101AC00000E0012414B90120BDE8F0810020FBE70B +:101AD00000A000082800002070B504464FF6FF76ED +:101AE0002579012D03D0132003F030FB86E0454813 +:101AF000007800F0010040B142484078C0F3800017 +:101B000018B9222003F022FB78E03E480078C0F3A9 +:101B1000400020B13B484078C0F3001018B92420A1 +:101B200003F014FB6AE03748007820F01000103012 +:101B3000344908700846407820F010004870084684 +:101B4000007820F0200008700846007820F002009D +:101B500008700846407820F0040048700846407835 +:101B600020F02000487000204871C1F8EC00C1F856 +:101B7000FC00C1F8F8000846007800F0010010B938 +:101B80000020C1F8F4001F480078C0F3C00018B16D +:101B90001C48B0F8E6602DE01A48807800F00F008D +:101BA000012808D117493722D1F8F4001649FFF768 +:101BB0003BFC06461EE01348807800F00F00022828 +:101BC00009D110493722D1F8F4004FF46011FFF722 +:101BD0002BFC06460EE00B48807800F00F00022830 +:101BE00008D108493722D1F8F4004FF08051FFF7AF +:101BF0001BFC0646FEF784FB0120A08102F06AFF71 +:101C000070BD00007015002000A000082DE9FC5FE9 +:101C100004464FF0000B2579206846782068C0788C +:101C20002168897800EB01201FFA80FA042D06DA7A +:101C3000132003F08BFA02F04DFFBDE8FC9F5046E5 +:101C4000BAF57F4F73D009DCA0F2022040B3A0F5B3 +:101C50005C40A0F5EF7000286AD107E06FF47F4187 +:101C60000844002877D00128F6D168E002F036FE5B +:101C7000032803D07F2003F069FA10E0052D03D07C +:101C8000132003F063FA0AE0012E03D0122003F0C0 +:101C90005DFA04E00020A16808710520A08169E1D7 +:101CA0002068007900062168497900EB014021682D +:101CB000897900EB01202168C97900EB0109082D21 +:101CC00003D0132003F042FA38E0012E03D0122093 +:101CD00003F03CFA32E0AA480078C0F3001018B9CB +:101CE000222003F033FA29E0312002F0DFFD4846DC +:101CF000FFF7C4F9E8B9A248807800F00F00012886 +:101D000002D19F49C87002E001209D4908719C489A +:101D1000007820F010009A4908700846007820F0FA +:101D20000100401C08700020A168087104E025E053 +:101D300012E10120A16808710520A0811AE102F0DA +:101D4000CDFD032808D002F0C9FD022804D07F2071 +:101D500003F0FCF911E0B7E0042D03D0132003F0E9 +:101D6000F5F90AE0012E03D0122003F0EFF904E0A8 +:101D70000020A16808710520A081FBE00D2D03D192 +:101D800020680079442803D0132003F0DFF99AE09B +:101D9000012E03D0122003F0D9F994E02068407995 +:101DA0008DF80400206880798DF805002068C079DE +:101DB0008DF806002068007A8DF807002068407AC8 +:101DC0008DF800002068807A8DF801002068C07AC4 +:101DD0008DF802002068007B8DF803009DF8040058 +:101DE00000069DF8051000EB01409DF8061000EB81 +:101DF00001209DF8071047189DF8000000069DF887 +:101E0000011000EB01409DF8021000EB01209DF84D +:101E1000031000EB01085B48874251D1B8F5CC3F75 +:101E200005D8574880780121B1EB101F18D05448CD +:101E3000007820F00200524908700846007820F02F +:101E4000080008700846407820F0400048700846B6 +:101E5000807820F0F0008870312003F077F932E0CC +:101E6000312002F023FD41463846FFF70DFE0128E0 +:101E700022D14348407820F00400001D40494870BA +:101E80000846407820F0400048700846407820F02E +:101E90000800487000F06AFA8B20FFF74BF9002029 +:101EA000A16808710520A0813548007820F0010064 +:101EB000401C3349087006E0722003F047F902E045 +:101EC000312003F043F955E0042D03D0132003F033 +:101ED0003DF940E0012E03D0122003F037F93AE03B +:101EE00027484078C0F3801018B9222003F02EF95B +:101EF00031E0FFF7EBF8012821D1FFF7F5F80128D1 +:101F00001DD11F480079012819D11D48C07801282A +:101F100015D1FFF739F92E20FFF70CF91848407852 +:101F200020F008000830164948700020A1680871A8 +:101F30000520A081002012490871C87002E022200B +:101F400003F004F900200E49C1F8F4000846807837 +:101F500020F00F0088700DE002F07CFB18B18020AB +:101F600003F032F905E0002003F02EF9312003F0F0 +:101F7000EDF800BF00BF02F0ADFD00BF5DE6000060 +:101F80007015002000A000082DE9FE43054602F070 +:101F9000ABFC07462879401CC6B2286890F801803F +:101FA000022E03DC132003F0D1F8CDE1B8F1010FCC +:101FB00009D0B8F1020F6CD0B8F1050F6FD0B8F1AD +:101FC000060F6DD13EE1012F03D17F2003F0BEF853 +:101FD0005EE0032E03D0132003F0B8F858E0DC488D +:101FE000007801280ED1A9684870002405E000217E +:101FF000A01CAA681154601CC4B2042CF7DB062094 +:10200000A88145E0D348007A012803D0D148807ADE +:10201000012803D1372003F099F839E00120A9689D +:102020004870CD480078012812D1CA48007B0328A7 +:102030000EDB362003F08AF80120C64988720020A2 +:102040008880C648007810B90120C44908707AE138 +:10205000C148007810B9C24802F0BEF8002406E07A +:10206000BF48015DA01CAA681154601CC4B2042CB6 +:10207000F6DB02ABBB4A0421B94802F025F8002088 +:10208000B449087208800120B34908700620A8816D +:1020900059E1012F05D17F2003F058F868E068E08E +:1020A00043E1072E03D0132003F050F860E0AA4864 +:1020B0000078012859D10020A7490870A548807AE6 +:1020C000012803D1362003F041F849E0002406E05E +:1020D000A01C2968085C0DF80400601CC4B2042C24 +:1020E000F6DB9DF800008DF804009DF801008DF8E6 +:1020F00005009DF802008DF806009DF803008DF89C +:102100000700042201A9974801F0CCFF90B10220FA +:10211000A9684870A881002003F01EF801208C49AE +:10212000087000208D4908708A49087302208E4982 +:10213000087015E0352003F009F88648007B401C44 +:10214000844908730846007B032809DB0120887254 +:10215000002088808148007810B901207F490870EC +:1021600000207C490880087202E0242002F0EEFF83 +:10217000E9E0012F03D17F2002F0E8FF61E0032EA8 +:1021800003D0132002F0E2FF5BE0714840780128A1 +:102190000FD10520A9684870002405E00021A01C8B +:1021A000AA681154601CC4B2042CF7DB0620A88175 +:1021B00047E06848407A012803D06648C07A012881 +:1021C00003D1372002F0C2FF3BE00520A968487028 +:1021D00061484078012812D15E48407B03280EDB1D +:1021E000362002F0B3FF01215A48C1720021C1809C +:1021F0005A48407810B9012058494870A3E0564821 +:10220000407810B9564801F0E7FF002406E0544832 +:10221000015DA01CAA681154601CC4B2042CF6DB3A +:1022200002AB504A04214E4801F092FF0021494878 +:1022300041720020474948800120474948700620E4 +:10224000A88180E0012F03D17F2002F07FFF6BE0A7 +:10225000072E03D0132002F079FF65E03E48407856 +:1022600001285ED100203C4948703A48C07A0128D4 +:1022700003D1362002F06AFF4CE0002406E0A01CE7 +:102280002968085C0DF80400601CC4B2042CF6DB5D +:102290009DF800008DF804009DF801008DF8050000 +:1022A0009DF802008DF806009DF803008DF80700E8 +:1022B000042201A92B4801F0F5FEA0B10620A9686F +:1022C00048700220A881002002F046FF012020492A +:1022D000487000202149487000211E4841730420A5 +:1022E0002149087016E0352002F030FF1948407B84 +:1022F000401CC1B217484173407B03280ADB01210F +:102300001448C1720021C1801448407810B90120DE +:102310001249487000200F49488000210D48417241 +:1023200002E0242002F012FF0DE002F093F918B150 +:10233000802002F049FF05E0002002F045FF122056 +:1023400002F004FF00BF00BF02F0C4FBBDE8FE8343 +:10235000C000002070260020BD0000208C0000205E +:10236000C7000020C3000020C20000204220044912 +:1023700008704F204870452088705220C870704700 +:102380008E0000202DE9F04705460024A246A14614 +:10239000A888801E86B228684778FD4890F8058096 +:1023A00008F1010000F0FF08012E02DA132002F00C +:1023B000CDFEB6F5806F03DD712002F0C7FEFCE1B3 +:1023C000F3480078C0F3800050B9F148D0F8F0002D +:1023D000B0F5406F04D8EE484078C0F3001070B1FB +:1023E000EB48407820F01000E949487008464078F2 +:1023F00020F040004870702002F0A8FEDDE1E448C3 +:102400000078C0F3801028B9E14800780121B1EBD1 +:10241000D01F03D1722002F099FECEE1DC48007893 +:10242000C0F3400018B9242002F090FEC5E1D8485E +:102430004078C0F3401028B9012F03D0732002F078 +:1024400085FEBAE1781C804502D10220A881B4E162 +:10245000B84503D0732002F079FEAEE1CC48007895 +:1024600000F0010040B1CA484078C0F3800018B9BC +:10247000222002F06BFEA0E1C548007820F0200089 +:102480002030C34908700846407820F020002030F2 +:10249000487008464771007800F0010000287CD0A1 +:1024A000002415E0A01C2968085CB949D1F8F01097 +:1024B000B84A5054B648D0F8F000401CB449C1F8AE +:1024C000F0000846D0F8F400401CC1F8F400641C89 +:1024D000B442E7D32868811C3046FDF735FFAC488D +:1024E000D0F8F400AA49D1F8FC10884277D3A84864 +:1024F000D0F8F000B0F5006F2DD3A5494FF400627D +:10250000D1F8F800A349FEF715FF40B9FEF7E0FF48 +:10251000722002F01BFE02F0DDFABDE8F0879C4855 +:10252000D0F8F80000F500609949C1F8F8000846B5 +:10253000D0F8F000A0F50060C1F8F000002405E03C +:1025400004F500609349085C0855641C9048D0F875 +:10255000F000A042F4D88E48D0F8F000F0B18C48DA +:10256000D0F8F09005E0FF208A4901F8090009F150 +:102570000109B9F5006FF6D385494FF40062D1F82F +:10258000F8008449FEF7D6FE40B9FEF7A1FF72209D +:1025900002F0DCFD02F09EFABFE7A5E000207C49D6 +:1025A000C1F8F0000846407820F001004870084665 +:1025B000007820F0040008700846007820F0200021 +:1025C00008700846407820F04000403048700846C7 +:1025D000407820F01000103048707EE0FFE76C4833 +:1025E000D0F8F000B0F5006F77D36948407820F05C +:1025F0000100401C664948700846007820F004003D +:10260000001D08704FF40062D1F8F8006149FEF730 +:1026100091FE38B9FEF75CFF722002F097FD02F0E0 +:1026200059FA7AE75A48007820F080005849087033 +:102630000846D0F8F80000F50060C1F8F800084638 +:10264000D0F8F000A0F50060C1F8F000002405E02B +:1026500004F500604F49085C0855641C4C48D0F8EC +:10266000F000A042F4D84A48D0F8EC00401C484999 +:10267000C1F8EC000846807800F00F00012805D171 +:102680000846D0F8EC00B0F5607F17D84048807855 +:1026900000F00F00022805D13D48D0F8EC00B0F55D +:1026A000607F0BD83A48807800F00F0002280ED1E6 +:1026B0003748D0F8EC00B0F5802F08D9FEF708FFB6 +:1026C000722002F043FD02F005FA26E705E03048EB +:1026D000007820F040002E4908702D48007820F046 +:1026E00004002B49087066E0B6F5805F58DA0024D4 +:1026F0000FE0A01C2968085C2549D1F8F010254A94 +:1027000050542348D0F8F000401C2149C1F8F00093 +:10271000641CB442EDD31E49D1F8F0001D49FEF708 +:10272000D7FD2868811C3046FDF70EFE1848D0F80A +:10273000F400194900EB010A154880780121B1EB3A +:10274000101F0BD10AEB06001449884206D210482C +:10275000104AD0F8F0105046FEF7F8FE0C48D0F8BA +:10276000F4000B49D1F8F01008440949C1F8F4000D +:102770000846D0F8F400D1F8FC10884217D304487A +:10278000407820F010001030014948700FE0000040 +:10279000701500207016002000F00020FFFF0020C0 +:1027A00000200B49C1F8F400312002F0CFFC0020DA +:1027B0000749C1F8F0000220A8810548007820F000 +:1027C00010000349087002F085F900BFA5E600007B +:1027D000701500202DE9F047054695F8048028681B +:1027E000407806022868807806432868C71C4FF0A6 +:1027F0000109B8F1030F03DC132002F0A7FC5CE031 +:10280000002447E02F4800EB04100088B0423FD17D +:102810002C4800EB0410407A072839D1294800EBF6 +:102820000410007AC01C404505D0132002F08EFC35 +:102830004FF0000930E039463046FEF763FC0128CE +:1028400005D1312002F082FC4FF0000924E0032082 +:10285000A8811C4800EB0410027A1A4800EB04100F +:1028600041683846FEF71FFE164800EB041000884A +:102870004FF28411884208D100F028F812484078BD +:1028800020F00200801C104948704FF0000903E05E +:10289000601CC4B2052CB5DB00BFB9F1010F0CD12F +:1028A00001F0D8FE18B1802002F08EFC05E0002077 +:1028B00002F08AFC312002F049FC02F00BF9BDE87D +:1028C000F0870000B8590008701500200146FF206D +:1028D00070472DE9F0410246002500260020002324 +:1028E0000024002791F803C00CF00F0591F803C0F5 +:1028F0000CF0100CBCF1000F03D091F802C04CEAB0 +:10290000050591F800C0BCF1000F31D0146800201B +:102910002BE04FF0010C0CFA00F3B1F800C00CEA08 +:1029200003069E4220D183004FF00F0C0CFA03F7F0 +:10293000BC4305FA03FC4CEA040491F803C0BCF163 +:10294000280F06D14FF0010C0CFA00FCC2F814C09D +:102950000AE091F803C0BCF1480F05D14FF0010C1B +:102960000CFA00FCC2F810C0401C0828D1D3146037 +:10297000B1F800C0BCF1FF0F34DD546800202EE038 +:1029800000F1080C4FF0010808FA0CF3B1F800C090 +:102990000CEA03069E4221D183004FF00F0C0CFA83 +:1029A00003F7BC4305FA03FC4CEA040491F803C0A6 +:1029B000BCF1280F05D100F1080C08FA0CF8C2F898 +:1029C000148091F803C0BCF1480F07D100F1080C46 +:1029D0004FF0010808FA0CF8C2F81080401C0828D3 +:1029E000CED35460BDE8F081F0B50A460023002440 +:1029F0000021002500F00046B6F1004F02D11D4E27 +:102A0000F16901E01B4E7168C0F3034583B200F425 +:102A10004016B6F5401F08D121F07061154E76685A +:102A200026F07066134F7E6012E000F48016B6F553 +:102A3000801F06D1032606FA05F4A14341F0706118 +:102A400006E0460D360103FA06F6B14341F0706127 +:102A500022B1460D360103FA06F6314300F0004676 +:102A6000B6F1004F02D1034EF16101E0014E7160F9 +:102A7000F0BD0000000001404161704701617047F6 +:102A80000148006870470000D800002000BFFEE742 +:102A9000704700002DE9F04F95B004468A469046F5 +:102AA0001E460025402105A8FDF797FB0020049055 +:102AB0000027012003904FF0000B194800EB441051 +:102AC00000680490164800EB44104779FF2E00D0B0 +:102AD0003746402F00D94027114800EB4410D0F86A +:102AE0001C90002505E019F8050005A94855681C4B +:102AF000C5B2BD42F7D305ABCDE90074514640469F +:102B0000049A00F029F88346BBF1000F02D101209E +:102B1000039001E000200390039815B0BDE8F08F0A +:102B20003858000810B50446012C06DA0020034985 +:102B300008552146012000F003F810BDFB000020DD +:102B4000012803D10122034B5A5402E00022014B19 +:102B50005A547047F40000202DE9F04F87B0064624 +:102B60008B4617469846DDE910954FF0000A012E76 +:102B700003DB012007B0BDE8F08F1F48C0F80490C8 +:102B800000201D4948721D4800EB4510007908706F +:102B90001A4800EB4510407C08B1012000E00020FD +:102BA00015498872154800EB4510807C08B101205A +:102BB00000E000201049087200208DF810000297F4 +:102BC000084600798DF8120000208DF811000024CD +:102BD00006E018F804100DF113000155601CC4B292 +:102BE0009DF81200A042F4DC0698009002A80FC8DD +:102BF000FEF7AAF85046BDE7982A0020385800088A +:102C00002DE9F04106460C46154600270848005DB0 +:102C100008B1012C02DB0020BDE8F0812B462246E2 +:102C200039463046FFF736FF80464046F4E700005D +:102C3000F400002010B54FF400600B49086002F06A +:102C40004BFD4FF480600849091F086002F044FD05 +:102C50004FF480600449086002F03EFD4FF40060CC +:102C60000149091F086010BD140C014010B54FF454 +:102C700000600949086002F02FFD4FF480600649AA +:102C8000086002F029FD4FF480600349091D0860C7 +:102C900002F022FD10BD0000100C014070B5054689 +:102CA0000024002618E06006040E4FF480600F49EF +:102CB000086002F011FD0D480838006800F400605B +:102CC00008B1601CC4B24FF480600849091D086057 +:102CD00002F002FD701CC6B2082EE4DB15B9FFF746 +:102CE000C5FF01E0FFF7A6FF204670BD100C0140B4 +:102CF00070B50446002524E004F0800020B14FF4B4 +:102D000000601149086004E04FF400600E49091D9D +:102D1000086002F0E1FC4FF480600B49086002F0AB +:102D2000DBFC4FF480600849091D0860072D02D1C3 +:102D30004000091F08606006040E02F0CDFC681C0C +:102D4000C5B2082DD8DB70BD100C014010B54FF492 +:102D500000600A4908604010086002F0BDFC4FF4B2 +:102D600000600649091D086002F0B6FC4FF480605F +:102D70000249091D086002F0AFFC10BD100C0140B3 +:102D800010B54FF40060074908604010091F086043 +:102D900002F0A2FC4FF400600249091F086002F033 +:102DA0009BFC10BD140C014010B54FF400600E499F +:102DB000086002F091FC4FF480600B49086002F05B +:102DC0008BFC09480838006800F4006008B1012451 +:102DD00000E000244FF480600349091D086002F000 +:102DE0007BFC204610BD0000100C014010B50446CD +:102DF0000548827A00212046FFF702FF012800D112 +:102E000010BD0020FCE700001C15002070B5054631 +:102E10000C46224600212846FFF7F2FE012800D189 +:102E200070BD0020FCE7000010B50446044800789F +:102E300010B900F0E1FD01E000F034FC10BD00002D +:102E40006600002010B500F04DFC00F01DFE10BD26 +:102E500010B50020044908710449C870FF200449D6 +:102E60000870FFF7EFFF10BD600000205A0000203F +:102E7000660000203EB57948006878498988084492 +:102E800001907748C078052806D0062834D0072856 +:102E900076D0082875D1A1E07048C088082817DBD3 +:102EA00000207049096808706C4880796D4909688C +:102EB00048706C480068801C00906848C088ADF875 +:102EC00008006649C988891C88B200F00DFD12E02F +:102ED0006248807963490968087062480068401C4C +:102EE00000905E48C088ADF808005C49C988491C5C +:102EF00088B200F0F9FCA8E05849C88800F0F4FC5A +:102F00005648C088B0F5805F3CDB10205549096801 +:102F10000870544800680078524909680870002019 +:102F20005049096848704D48C08800164D490968E5 +:102F3000887000204B490968C8704848C088000A5A +:102F400048490968087145488079464909684871C7 +:102F500044480068801D00904048807A801F80B2FD +:102F6000ADF808003D48807A801F3C4988800846BB +:102F7000408920F4706048810020394988702CE035 +:102F80002DE060E010203749096808703548006876 +:102F900000783249C988C1F30321084331490968DF +:102FA00008702E4880792F49096848702D480068BC +:102FB000801C00902948807A801E80B2ADF80800FD +:102FC0002648807A801E254988800846408920F45A +:102FD0007060488100202249887036E000BF2020C0 +:102FE0002049096808701F48006800781B49498912 +:102FF000C1F3032108431B49096808701948006898 +:10300000401C00901648C078082808D11348C08892 +:1030100012498988401A80B2ADF8080005E00F48CF +:10302000807A401E80B2ADF808000C488188807A12 +:10303000401E084409498880BDF80810491C88B220 +:1030400000F052FC01E001203EBD00BF06480168CF +:103050006846884704462046F6E700001C15002015 +:103060005A0000206C00002084000020002005E0B1 +:10307000AA21044A12681154411CC8B20828F7DB7F +:10308000704700006C00002070B5FE48867A082E5C +:1030900001D0002070BDFB48C07A00F0F00038B1CC +:1030A000102804D020287DD030287CD154E200BFE5 +:1030B000F548007998B1F4480079012801D1002041 +:1030C000E8E7F048C07A022826D1EE48007B3E2887 +:1030D00022D1EC48407B80281ED10020DAE7E94865 +:1030E000C07A022818D1E748007B3E2814D1E54871 +:1030F000407B802810D1E548008828B9E448008842 +:1031000010B9E448007938B10020E0490880012076 +:10311000E14908700020BDE700F0E4FA0220DA4936 +:1031200008710020DD498880D648C07A00F0F000A0 +:1031300000287DD010287CD1D2480088C0F30A0036 +:1031400040F2DF71884206D10120CF49087100F0BA +:1031500005FB00209EE7D248C078022807D0D0485F +:10316000C078032803D0CE48C078082806D10120B3 +:10317000C549087100F0F2FA00208BE7082E7AD1D9 +:10318000C048C07A00F00F004FF6FF7101EA00203E +:10319000C249C8800846C088BA49097B0843BF496C +:1031A000C88001E0DEE06AE20846C088072869DDE1 +:1031B00000204881B3480D3008600B46D988B14BD8 +:1031C0001B88C3F30A00B74B1A689047B3490860DD +:1031D0000846807A00F0030088B102280ED103204F +:1031E000A9490880072008710846808820F480706B +:1031F00000F58070888000F0BBFA42E000BFA7486D +:103200000068C8B39F48407BA449096808709D487E +:10321000807BA249096848709A48C07B9F49096829 +:1032200088709848007C9D490968C870954801E0FD +:1032300035E08FE0407C9949096808719148807CAD +:103240009649096848710620944988800846008993 +:1032500020F00F00401C088103208B4908800520C6 +:1032600008710846808820F4807000F5807088809E +:1032700000F07EFA04E00BE0FFE7002082490871CD +:1032800000BF0AE001208049087100F067FA04E0FD +:1032900001207D49087100F061FA0020FAE67948C2 +:1032A0000088C0F30A00804908807648C07A7B49CC +:1032B000C8800846C088401CB04244DC0846C0882C +:1032C00007283ADC0846C08880B3002048816D4852 +:1032D0000C3008600B46D9886A4B1B88C3F30A0080 +:1032E000704B1A6890476D49086008460068F0B155 +:1032F0000846807A00F00300C8B9002407E061485E +:103300000C30005D654909680855601CC4B263480B +:103310008079401EC0B2A042F1DA01205A490871FA +:103320005E4AD088614A1168884711E005E00120B3 +:103330005549087100F012FA0AE00120524908715B +:1033400000F00CFA04E001204F49087100F006FA81 +:1033500000209FE601204C49087100F0FFF900BFF2 +:1033600000BF8DE147480088C0F30A0040F2DF71DA +:10337000884206D101204449087100F0EFF900208D +:1033800088E641480079032803D03F4800790528A2 +:1033900076D13D48007905280FD13B488088C0F39D +:1033A000002040B942490878FFF772FB404908788D +:1033B000FFF73AFD01E000206CE638488088C01D28 +:1033C0003649C988884237DB3448C0883349898800 +:1033D000401A401CB0420EDC2A48C07A00F00F00B0 +:1033E0002E49097A01F00F01884205D001202649B3 +:1033F000087100F0B3F9ACE000240AE021480C3079 +:10340000005D26490968254A928811440855601CC8 +:10341000C4B2224881790079401C081AC0B2A04287 +:10342000ECDA012018490871002008801B4AD08876 +:103430001E4A116888478CE0082E0BD11148C07ACB +:1034400000F00F001549097A01F00F01884202D0FF +:1034500000F048F97DE00B48017B104800680F4AF6 +:10346000928881540748407B0C4909680B4A92882E +:10347000114448700348807B08490968074A19E0ED +:1034800069E00000802A0020600000205200002037 +:10349000540000204800002056000020281500207D +:1034A0005A0000207C0000205800002070000020FE +:1034B000680000209288114488707348C07B73496B +:1034C0000968724A92881144C8706F48017C6F483D +:1034D00000686E4A9288104401716B48407C6B49C9 +:1034E00009686A4A9288114448716748817C674834 +:1034F0000068664A92881044817164488088C01DC3 +:10350000624988800846007A401C098960F30301FB +:103510005E4801815E488078B0B15D488078401E89 +:103520005B4988700846807870B9052008710320CF +:1035300008800846808820F4807000F580708880BC +:1035400000F016F90020A5E50F205149088003205E +:10355000087100209EE593E04B480088C0F30A0004 +:103560004C49098888420ED047480088C0F30A00B9 +:1035700040F2DF71884206D101204549087100F010 +:10358000EDF8002086E54448C078022807D042487C +:10359000C078062803D04048C07807286ED13E483E +:1035A000007900F00100A0B93B48C078062807D098 +:1035B0003948C07807280ED13748807801280AD1C9 +:1035C00036490878FFF764FA34490878FFF72CFC8D +:1035D00001E000205EE53048C07802284CD1032E7F +:1035E0004ADB2948C07A302804D0312839D0322823 +:1035F0003ED13AE028480079C0F38000F8B9264867 +:10360000808820F00400001D234988801E48007B2C +:10361000234908721C48457B0A2D02DA01204872B2 +:1036200016E005F0800058B1F02D05DDF92D03DC22 +:1036300001201B4948720BE00E201949487207E02F +:1036400005F109000A2190FBF1F0401C1449487271 +:103650001348007A10498870012008800320C87040 +:1036600009E00F200C49088005E000F00DFA02E0A7 +:1036700000F00AFA00BF00BF00200BE500E000BF29 +:1036800000BF002006E50000802A00202815002049 +:1036900060000020580000205A0000206800002030 +:1036A0001C1500200D480079052802D007280DD1EF +:1036B00007E00F200949088003200871FF20C87027 +:1036C00005E0002005490880087100E0704700BF50 +:1036D000FF200349087000BFF8E7000060000020E9 +:1036E0006600002010B518480079012809DD164849 +:1036F0000079082805D00820134908711349086883 +:10370000804700201049088008710846808820F40E +:10371000807088800846808820F4007088800C487B +:10372000008920F00F000A490881002048810948DB +:103730000078802806D108490878FFF7A9F9FF200A +:103740000449087010BD00006000002074000020D3 +:1037500028150020660000206800002010B5FFF743 +:10376000C1FF10BD014A508170470000281500209C +:1037700070B538488088C0F34020D8B1354DA8884E +:10378000C0F34020002863D02846808820F40070D1 +:103790002946888030490878FFF728FB0446002C2A +:1037A00056D12846808820F4007000F50070294624 +:1037B00088804DE027488088C0F30020002847D04B +:1037C000244DA888C0F30020002841D02348007869 +:1037D000FF283DD18020214908702846808820F4A8 +:1037E00080702946888008201D498872002605E0DF +:1037F000AA201C4909688855701CC6B21848807AEE +:10380000B042F5DC13480079072804D1322015496D +:103810000968087003E03020124909680870002028 +:1038200010490968487001200E4909688870002015 +:103830000849887008490878FFF7D8FA04463CB967 +:103840000448808820F4007000F5007001498880E9 +:1038500070BD0000600000206800002066000020AD +:103860001C1500206C00002010B51E4800880028A0 +:1038700036D01C4C2088002832D020460088401EBC +:10388000214608800846008840BB08460079032886 +:1038900006D0052807D0062809D007281CD103E048 +:1038A000FFF720FF19E000BFFFF71CFF15E00D48F0 +:1038B000C07810B9FFF716FF0DE003200949088012 +:1038C000052008710846808820F4807000F580701B +:1038D0008880FFF74DFF00E000BF01E0FFF748FFE1 +:1038E00010BD0000600000200C4A12780C4B03EB66 +:1038F00042125179884202DB0A4A91720CE0C2B24C +:10390000094B9A5C094B9A5C064B9A721A46927A5A +:10391000082A01DA08229A72704700006800002025 +:10392000385800081C150020CC570008BC57000868 +:1039300010B5FFF799FF00F067F910BD10B5034609 +:1039400009B9012010BD1648C07808B10320F9E775 +:103950001448807A082801DD022200E00122114883 +:10396000807A801A80B2884203DB05200C4CE0701C +:1039700002E006200A4CE0700320094C2080094830 +:1039800003600020074CA0802046C1800448808846 +:1039900020F00100401C024CA0800020D2E7000073 +:1039A0005A0000201C15002011484089000A401CC4 +:1039B0000F49498960F30B210D4841818188807A44 +:1039C000401E80B208440A49C988884203DB0820A7 +:1039D0000849C87002E007200649C870032005495D +:1039E00008800846808820F00100401C88807047CD +:1039F0001C1500205A00002010B51F48C07805286B +:103A000006D006280ED0072817D008282CD100E0B1 +:103A100000BF1A4801680020884700201649088026 +:103A2000C87022E00F20144908800220C8700846A0 +:103A3000808820F00400888017E00F48807860B10B +:103A40000D488078401E0C4988700846807820B95F +:103A50000F2008800220C87007E00948407A064914 +:103A600008800320C87000E010BD00BFFF2005499A +:103A7000087000BFF8E700005A000020780000201E +:103A80001C1500206600002010B501241B48C078DA +:103A900001280EDD1948C07809280AD009201749E5 +:103AA000C870174908688047044614B900201349B4 +:103AB000C8700020114908800846808820F0010065 +:103AC00088800846808820F00200888054B1002059 +:103AD000C8700C4908720846408920F4706048811B +:103AE000082088720848007830B908490878FEF73D +:103AF000CFFFFF200449087010BD00005A000020CD +:103B0000800000201C1500206600002068000020B6 +:103B100070B539480079C0F34000D0B1364DA8885F +:103B2000C0F34000002866D02846808820F00200BC +:103B30002946888031490878FFF758F90446002C57 +:103B400059D12846808820F00200801C29468880B0 +:103B500051E02948007900F0010000284BD0264DA3 +:103B6000A88800F00100002845D025480078FF28EB +:103B700041D10020224908702846808820F00100A9 +:103B800029468880FFF772FAFFF774F906466EB986 +:103B90001A490878FFF72AF9044664BB284680884A +:103BA00020F00200801C2946888024E01248C0785A +:103BB000072807D01048C078082803D00E48C078DE +:103BC00006280ED10C48C078062803D100200D49E4 +:103BD000888006E00B488188807A401E081A0949CF +:103BE0008880FF20064908700348808820F0010083 +:103BF000401C0149888070BD5A00002068000020E8 +:103C0000660000201C15002010B51648008820B35F +:103C1000144C208808B320460088401E21460880A6 +:103C200008460088D0B90846C078801E072813D2FD +:103C3000DFE800F00407120C0D0E0F00FFF724FF61 +:103C40000BE0FFF7B1FEFFF763FF06E000BF00BF28 +:103C500000BFFFF719FF00E000BF01E0FFF758FFCA +:103C600010BD00005A00002008B5074840680090C9 +:103C700006490098086004490868FCF77CFA034884 +:103C80000068804708BD000000A00008E800002090 +:103C900008B501211C2000F02FF94FF40070ADF899 +:103CA000000010208DF8030003208DF80200694603 +:103CB0005348FEF70EFE4FF400715148FEF7DEFE4A +:103CC0000120ADF8000010208DF8030003208DF8CE +:103CD000020069464A48FEF7FCFD01214848FEF70C +:103CE000CDFE40F20240ADF8000010208DF8030038 +:103CF00003208DF8020069464148FEF7EAFD0221E3 +:103D00003F48FEF7BBFE4FF480613D48FEF7B4FE2E +:103D1000A020ADF8000010208DF8030003208DF8DE +:103D2000020069463748FEF7D4FD20213548FEF7EA +:103D3000A3FE80213348FEF7A1FE44F22720ADF810 +:103D4000000010208DF8030003208DF80200694662 +:103D50002D48FEF7BEFD4FF400712B48FEF78EFE96 +:103D600001212948FEF788FE02212748FEF784FE3C +:103D700004212548FEF780FE4FF480412248FEF7DB +:103D80007BFE20212048FEF777FE4FF48070ADF8CF +:103D9000000048208DF8030069461948FEF799FD98 +:103DA0004FF40070ADF8000048208DF8030069461C +:103DB0001448FEF78EFD0121084600F09DF8012110 +:103DC0001248FEF711FE1020ADF8000001208DF81A +:103DD000020010208DF8030069460B48FEF779FDBC +:103DE00010210948FEF74AFE4FF40050ADF80000DC +:103DF00004208DF8030069460248FEF76AFD08BDFD +:103E00000008014000100140000C0140000130009A +:103E100000BFFEE7704710B54FF4A06000F03AF81D +:103E200010BD000070B5002100230F22C47804B338 +:103E3000154C246804F4E064C4F5E064210AC1F17F +:103E40000403CA40447804FA03F1847814402143FF +:103E500009010E4C0678A155047804F01F050124D1 +:103E6000AC4005786D11AD0005F1E025C5F80041C5 +:103E700009E0047804F01F050124AC40044D0678E5 +:103E8000761145F8264070BD0CED00E000E400E03E +:103E900080E100E002490143024A116070470000DE +:103EA0000000FA050CED00E00149086270470000CF +:103EB00000000E427047000029B1064AD269024351 +:103EC000044BDA6104E0034AD2698243014BDA61B0 +:103ED000704700000010024029B1064A12690243EF +:103EE000044B1A6104E0034A12698243014B1A61D0 +:103EF000704700000010024029B1064A926902434F +:103F0000044B9A6104E0034A92698243014B9A612F +:103F100070470000001002402DE9F041002100220E +:103F2000002500230026002400278C46DFF860814E +:103F3000D8F8048008F00C0121B1042907D0082921 +:103F400059D109E0DFF84C81C0F8008058E0DFF873 +:103F50004481C0F8008053E0DFF83481D8F8048051 +:103F600008F47012DFF82881D8F8048008F480354E +:103F7000920C0D2A01D0921C00E0062235B9DFF820 +:103F8000188102FB08F8C0F8008033E0DFF80081F8 +:103F9000D8F82C8008F48036DFF8F480D8F82C802C +:103FA00008F00F0808F1010446B9DFF8E880B8FB13 +:103FB000F4F808FB02F8C0F800801BE0DFF8D080BE +:103FC000D8F82C80C8F3031808F10107DFF8C08087 +:103FD000D8F82C80C8F3032808F1020CDFF8B4806D +:103FE000B8FBF7F808FB0CF8B8FBF4F808FB02F88C +:103FF000C0F8008004E0DFF89C80C0F8008000BFBB +:1040000000BFDFF88C80D8F8048008F0F0010909BF +:10401000DFF8888018F80130D0F8008028FA03F81B +:10402000C0F80480DFF86880D8F8048008F4E06104 +:10403000090ADFF8688018F80130D0F8048028FAFF +:1040400003F8C0F80880DFF84880D8F8048008F446 +:104050006051C90ADFF8448018F80130D0F80480B4 +:1040600028FA03F8C0F80C80DFF82480D8F8048020 +:1040700008F44041890BDFF8288018F80130D0F8A7 +:104080000C80B8FBF3F8C0F81080BDE8F0810000A8 +:104090000010024000127A0000093D0000000020DC +:1040A0001000002070B503460C460120002107E0F7 +:1040B000655C5E5CB54201D0002003E04D1CE9B2B6 +:1040C0009142F5DB00BF70BD78B50C46057845B967 +:1040D000457835B9857825B9C57815B900251D709D +:1040E00078BD002107E0455C184E765C75400DF800 +:1040F00001504D1CE9B20429F5DB9DF8015005F093 +:10410000F0059DF8006006F00F0645EA06151570EB +:104110009DF801502D072D0E9DF8026045EA1615F9 +:1041200055709DF8025005F0F0059DF8036045EAD2 +:10413000161595709DF8035005F00F069DF8005078 +:1041400066F31F15D5701C7000BFC9E71C5A000824 +:1041500078B50C46057845B9457835B9857825B9DF +:10416000C57815B900251D7078BD002107E0455CB4 +:10417000184E765C75400DF801504D1CE9B20429CB +:10418000F5DB9DF8005005F00F069DF8015066F331 +:104190001F1515709DF801502D099DF8026006F05D +:1041A0000F0645EA061555709DF8035005F0F00519 +:1041B0009DF8026045EA161595709DF8035005F0CC +:1041C0000F059DF8006045EA1615D5701C7000BFFC +:1041D000CAE700001C5A00082DE9F0410446FCF72C +:1041E0004FFE0546134800782844C5B2002612E069 +:1041F000691C42F2BB02514343F2390202EB410017 +:10420000C11700EB11610912A0EB0127FDB204F800 +:10421000015B701CC6B2042EEADB06480078401C25 +:104220000449087008460078642801D1002008700D +:10423000BDE8F081E4000020704710B500F002F8FE +:1042400010BD00000CB500200190009040480068AF +:1042500040F480303E49086000BF3D48006800F4EB +:10426000003000900198401C0190009820B94FF652 +:10427000FF7101988842F0D13548006800F40030A1 +:1042800010B10120009001E000200090009801286A +:104290005CD13048006840F010002E4908600846A4 +:1042A000006820F0030008600846006840F0020043 +:1042B00008602748406826494860084640684860CA +:1042C0000846406840F4806048600846C06A224959 +:1042D00008401F49C8620846C06A204908431C4973 +:1042E000C8620846006840F08060086000BF184857 +:1042F000006800F000600028F9D01548406820F4FC +:104300007C10134948600846406840F4E810486053 +:104310000846006840F08070086000BF0C480068E4 +:1043200000F000700028F9D00948406820F0030030 +:10433000074948600846406840F00200486000BFF6 +:104340000348406800F00C000828F9D10CBD0000BB +:10435000001002400020024000F0FEFF140801009F +:104360000F480068401C0E4908600E480068401C59 +:104370000C4908600A4800684FF47A71B0FBF1F20A +:1043800001FB1200012804D107480068401C0649BF +:1043900008600648007810B9012004490870704789 +:1043A000340000202C0000203800002030000020C5 +:1043B00030B5164800684FF47A72B0FBF2F1B1F1F3 +:1043C000807F01D301201DE021F07F40401E4FF08F +:1043D000E022506150170F22002807DA13071D0E44 +:1043E0000B4B00F00F04241F1D5503E013071C0E98 +:1043F000084B1C5400BF00204FF0E02290610720C2 +:104400001061002008B100BFFEE730BD140000209D +:1044100018ED00E000E400E010B5FFF725FC10BD4A +:1044200010B51648006840F00100144908600846BD +:10443000406813490840114948600846006811491E +:1044400008400E4908600846006820F48020086093 +:104450000846406820F4FE0048600846006820F0E6 +:10446000A05008604FF47F0088600020C862FFF70A +:10447000E4FE4FF000600449086010BD00100240E7 +:104480000000FFF0FFFFF6FE08ED00E010B50A485F +:104490000078401C084908700846007803280ADBA9 +:1044A00000200870002401E0601CC4B2012CFBDB7A +:1044B00072B6FFF7B1FF10BDEC00002002460023EA +:1044C00021B90D4800681060012070470A48036850 +:1044D0001068984205D81068181A884209D301203C +:1044E000F3E71068C0F1FF301844884201D301207F +:1044F000EBE70020E9E70000340000204F48007897 +:1045000001280AD14E484089401C4D49488101206C +:10451000087000204949087000E070474848408909 +:10452000052190FBF1F201FB120030B944484089AB +:1045300018B101204249487000E0EEE74048408948 +:104540000A2190FBF1F201FB120028B93C48408996 +:1045500010B101203A49887039484089142190FBF4 +:10456000F1F201FB120028B93548408910B1012051 +:104570003349C87032484089322190FBF1F201FB87 +:10458000120028B92E48408910B101202C49087129 +:104590002B484089642190FBF1F201FB120028B9FD +:1045A0002748408910B10120254948712448408995 +:1045B0004FF4FA7190FBF1F201FB120028B9204888 +:1045C000408910B101201E4988711D4840894FF46F +:1045D0007A7190FBF1F201FB120028B9184840896A +:1045E00010B101201649C8711548408940F2DC51CC +:1045F00090FBF1F201FB120028B91148408910B17B +:1046000001200F4908720E4840894FF4FA6190FB6F +:10461000F1F201FB120028B90948408910B10120CC +:10462000074948720648408941F27071884202DBAE +:1046300000200349488100BF6FE7000030000020E0 +:104640000C01002000200249087048804860704733 +:104650003C00002003484078022801D10120704727 +:104660000020FCE75801002010B504462046FCF766 +:10467000A3FD10BD70B53848007900F04000B8B116 +:104680003548007920F0400033490871012408467C +:10469000407900B104243148007818B124F00104B5 +:1046A00044F0020404F0010010B1002000F05AFDB3 +:1046B0002948007902281AD104202749087128487E +:1046C00080680078274948700020244908702448F1 +:1046D0008089C82802DA2248858900E0C825EAB224 +:1046E0001F4B19699868FCF7DEFE00F049FA1A487A +:1046F000007900F0100068B300201B4908801748BB +:10470000007878280AD11948007838B11348007821 +:10471000782814D115484088012810D120200E494E +:1047200008710E48007808B9012000E002200C4909 +:1047300088700F490A480161083000F0ADFE074853 +:104740000078782806D109480078012802D1022093 +:104750000149087170BD0000480000205000002091 +:104760005801002070010020520000203C00002071 +:104770003D0B002010B504462046FCF776FD10BD29 +:1047800070B5044601252289D4E9000100F003F840 +:104790000025284670BD03E0531E9AB28B5C8354FB +:1047A000002AF9D1704700002DE9F041044638484D +:1047B000007800F07F072068457825F0800594F8A0 +:1047C0000480B8F1010F03D1132000F0BFFC5BE0BF +:1047D000012D04D0022D04D0032D44D100E000BFF0 +:1047E00000BFB8F1020F05D0132000F0AFFC00F0BD +:1047F000B9F948E0012F01D1022D03D0022F07D1D2 +:10480000032D05D17E2000F0A1FC00F0ABF93AE0C9 +:10481000032F04D1022D02D101201D49087100206F +:1048200000F0A0FC002606E000201A4988551A492D +:104830008855701CC6B2022EF6DBFCF719FC062068 +:10484000A0810020A16888703220A168C870012072 +:10485000A1680871F420A1684871032D02D10120DC +:10486000FCF776FB0FE0FFF7F5FE20B180200B4947 +:104870000968C87006E0002008490968C87012205D +:1048800000F064FC00BF00BF00F024F9BDE8F08137 +:1048900058010020BD000020C0000020480000207A +:1048A00010B504462046FCF779FD10BD10B504464E +:1048B0000320094908707F204870084684707820DA +:1048C000C870AA20087148718871C8710821002039 +:1048D000FEF79CFA10BD0000180100200148007886 +:1048E00070470000580100200248007800F07F0067 +:1048F0007047000058010020014800787047000010 +:10490000500000200A4A127902F0FE02084B1A7188 +:1049100049B91A461268824205D11A46127942F004 +:1049200002021A7170470122024B1A7000BFF9E7A8 +:10493000480000205600002070B504460D46A078BF +:10494000012804D0022803D0032806D104E000BFC8 +:10495000284600F057F801E000E000BF00BF00204B +:10496000A07070BD01460120044A127942F0010294 +:10497000024B1A711A46116000207047480000204F +:104980002DE9F04104460D46002740F6C41085424B +:1049900003DD0220FEF7E6FE16E040F2DF708442FF +:1049A00003D102200A49487006E040F20B708442AD +:1049B00002D101200649487005488581FFF7D2FFE2 +:1049C00006460EB9024887683846BDE8F081000007 +:1049D0005801002010B5044600210448FFF792FF5B +:1049E000FEF7BCFE05200249088010BD58010020DA +:1049F0005200002010B503210148FFF783FF10BDCE +:104A0000580100200021054A1180054948714021C4 +:104A1000034A11710121034A1170704752000020AE +:104A2000480000205600002010B500201E49887064 +:104A300001200870087148710020C8701B48886008 +:104A40001B491948016100201A49487108717F20EB +:104A50001949087078208870002018490870184992 +:104A60000870FFF7EFFD1748007820F02000154987 +:104A7000087000240EE0002113480155801E0155E6 +:104A8000001F20F8141000200F490A3921F81400E3 +:104A9000601CC4B2022CEEDBFCF7EAFA00200B49E2 +:104AA00008800B49088010BD5801002079010020C2 +:104AB0003D0B002048000020700100205000002025 +:104AC00056000020BB0000207A2600205400002061 +:104AD0005200002010B517480079042822D116484A +:104AE0000269846823781548007848B17F201070E7 +:104AF000537012480078907003210F48818208E0BB +:104B00000C480068C078802803D003F14000107082 +:104B1000521C0A480078782801D0FFF793FD08203E +:104B2000044908710348007940F0100001490871F8 +:104B300010BD000048000020580100205000002057 +:104B400010B504462046FCF70BFD10BD10B5044619 +:104B50002046FCF7F1FD10BD10B504462046FCF7D9 +:104B6000BBFF10BD002002490968C87070470000F3 +:104B70004800002010B504462046FDF747F810BD58 +:104B80002DE9F05F4FF00008F8488468067B207834 +:104B9000F749085C00EB4000F64901EB80004578DE +:104BA0002078F349085C00EB4000F24901EB8000FB +:104BB00090F804902078EE49085C00EB4000ED4945 +:104BC00001EB800090F805A0FFF78EFE074694F8F1 +:104BD00000B02078862800DBC346E7480078C0F3A1 +:104BE000401058B1E1484078022807D18020E349BD +:104BF0000968C870FFF76EFFBDE8F09FDC4810F849 +:104C00000B00FF2874D0012F04D0022F71D0032F86 +:104C100070D14DE0D5484078022848D12078272827 +:104C20000ED020782E280BD020782F2808D020787E +:104C3000312805D02078342802D02078372809D1AF +:104C40007F20CF4908708020CC490968C870FFF7E1 +:104C500041FFD1E7607800F0800040B32078C4497C +:104C6000085C00EB4000C34901EB8000C078F0B164 +:104C70002078192802D02078282804D18020BF4924 +:104C80000968C87013E02078B949085C00EB40005F +:104C9000B84911F82000B04205D01320B849087077 +:104CA000FFF718FFA8E78020B4490968C8709FE0A3 +:104CB000AE48407802284BD1207827280ED02078A3 +:104CC0002E280BD020782F2808D02078312805D026 +:104CD0002078342802D0207837280CD17F20A849AA +:104CE00008708020A5490968C870FFF7F3FE83E7C4 +:104CF000C8E12EE07BE0607800F0800040B32078CF +:104D00009B49085C00EB40009A4901EB8000C078A9 +:104D1000F0B12078192802D02078282804D18020EA +:104D200096490968C87013E020789149085C00EB47 +:104D30004000904911F82000B04205D0132090495E +:104D40000870FFF7C7FE57E780208C490968C870D4 +:104D50004EE086484078022848D1207827280ED097 +:104D600020782E280BD020782F2808D020783128C2 +:104D700005D02078342802D02078372809D17F2028 +:104D80007F49087080207D490968C870FFF7A2FE3E +:104D900032E7607800F0800040B320787449085C06 +:104DA00000EB4000734901EB8000C078F0B120783F +:104DB000192802D02078282804D180206F4909685A +:104DC000C87013E020786A49085C00EB400069492C +:104DD00011F82000B04205D0132069490870FFF790 +:104DE00079FE09E7802065490968C87000E000BFC6 +:104DF00000BF20785E49085C00EB40005D4901EB94 +:104E00008000C078002875D0607800F0800000280D +:104E100071D0012E6FDD207828285AD004DC1028AC +:104E200007D0112868D105E03E287CD08528F9D12B +:104E3000D4E000BF607881280ED0607883280BD042 +:104E40006078822802D12078112805D060788228E5 +:104E50002DD1207810282AD1022E03D013204849C2 +:104E6000087035E0FFF740FD012816D1062D01D06E +:104E7000042D09D1002042490870607800F08000BC +:104E80003E490968C87023E0B8F1000F20D14FF007 +:104E900001087E203A4908701AE00020384908705D +:104EA000607800F0800035490968C87010E02F482C +:104EB0004078022806D1802030490968C870FFF781 +:104EC00009FE99E6607800F080002C490968C870F6 +:104ED000CDE0032E11D02548407802280DD123487B +:104EE0004078022841D1802024490968C870FFF722 +:104EF000F1FD81E6C1E0BBE0B2E06078802802D03D +:104F00006078832823D1FFF7EFFC012815D1052D08 +:104F10000AD100201A490870607800F08000174913 +:104F20000968C87021E02DE0B8F1000F1DD14FF0E5 +:104F300001087E201249087017E00020104908700F +:104F4000607800F080000D490968C8700DE00748DE +:104F50004078022806D1802008490968C870FFF708 +:104F6000B9FD49E612200649087080E0580100208A +:104F7000305900089458000870150020480000209F +:104F8000500000206078802819D1FFF7ADFC01287F +:104F90000BD1042D21D1002060490870607800F009 +:104FA00080005F490968C87017E000205B490870FD +:104FB000607800F080005A490968C8700DE05948CF +:104FC0004078022806D1802055490968C870FFF74B +:104FD00081FD11E612205149087048E0022E07D0E9 +:104FE00050484078022803D113204C49087036E01D +:104FF0006078812802D06078822822D1FFF774FC83 +:10500000012814D1032D09D100204449087060788B +:1050100000F0800042490968C87020E0B8F1000F34 +:105020001DD14FF001087E203C49087017E0002098 +:105030003A490870607800F0800039490968C87002 +:105040000DE038484078022806D1802034490968AC +:10505000C870FFF73FFDCFE512203049087006E029 +:10506000607800F080002E490968C87000BF17E022 +:1050700000202B490968C87012E0002028490968FF +:10508000C8700DE011202549087026484078022894 +:1050900006D1802022490968C870FFF71BFDABE5E7 +:1050A0001E48007888BB022D01D1022F07D1032DA5 +:1050B00001D1032F03D1052D07D1012F05D17F2069 +:1050C00016490870FFF706FD26E01648007900EA49 +:1050D000090020B91348407900EA0A0028B13320BA +:1050E0000E490870FFF7F6FC16E005200E4908800F +:1050F00020780E4A105C00EB40000D4A02EB800065 +:10510000816808480830884706E0FFE70020044926 +:105110000968C870FFF7DEFC00BF6DE55000002095 +:10512000480000205801002052000020305900089B +:105130009458000810B504462046FCF725FF10BD22 +:10514000014948717047000058010020014908706A +:1051500070470000500000200149087170470000AE +:105160005801002070B5044612488068057811483F +:105170008068407800F07F06012C03D1012000F008 +:1051800047F904E0102D02D1304600F041F9FFF755 +:10519000ABFB01280CD10020FBF7DAFEFBF778FF10 +:1051A000012805D1FBF7A6FE10B90A2002490870B4 +:1051B00070BD000058010020440000200149087122 +:1051C000704700005801002001490968C870704705 +:1051D0004800002010B50348007908B1FFF74AFAEB +:1051E00010BD00004800002010B5FBF711FFFFF7CD +:1051F0004DF910BD10B500F02BF810BD70B5044688 +:105200002068457825F080052679012E03D11320EA +:10521000FFF79CFF19E06DB9022E05D01320FFF7B0 +:1052200095FFFFF79FFC10E00020A1684870022066 +:10523000A0810AE01220FFF789FFFFF793FCFFF738 +:1052400009FA10B18020FFF7BFFFFFF743FC70BDE4 +:1052500010B56548008818B364480078012806D165 +:105260000020624908704FF4FA705F490880604876 +:105270000079A8B95C480088401E5B490880084650 +:10528000008868B9002008800120FFF76BFF002428 +:1052900004E0002057490855601CC4B2022CF8DB1A +:1052A0005348007900F00C00C0B153480088A8B101 +:1052B00051480088401E504908800846008868B957 +:1052C0004B480068807830B90320494909688870E4 +:1052D00000F0CEF802E0012047490880002455E0A4 +:1052E000464830F81400B0F57A7F06DB4348001DCD +:1052F00030F81400B0F57A7F46DA4048001D30F8E7 +:105300001400401C81B23D48001D20F81410001FFD +:1053100030F81400401C394921F8140001F108004C +:10532000005D012810D1084630F81400B0F57A7FEE +:105330002ADB002021F814000021304808300155F4 +:1053400000202F4908551FE02C480A30005D012835 +:105350001AD12A48001D30F81400B0F57A7F13DB0B +:105360000020274908550021244808300155001F16 +:1053700020F81410801D0155801C005D032803DBFC +:1053800002211E480C300155601CC4B2022CA7DB60 +:105390001C480078002809DD1A480078401E194989 +:1053A00008700846007808B9FAF794FF16480078A4 +:1053B000002809DD14480078401E1349087008468B +:1053C000007808B9FAF786FF10480078002809DD50 +:1053D0000E480078401E0D4908700846007808B94C +:1053E000FAF778FF10BD000054000020560000209E +:1053F00048000020C000002052000020702600203D +:10540000BD00002044000020450000204600002090 +:1054100010B50446FFF768FA01280AD1FFF7CEFE5F +:1054200004F07F00012810D04FF4FA700B49088077 +:105430000BE004F07F00012807D1FFF7BFFE012039 +:10544000FFF77EFE0020054908800548047004F03F +:105450007F00012801D1FBF7AFFC10BD54000020F4 +:105460005801002010B504462046FCF78BFF10BD04 +:1054700010B506490648016103218182083000F019 +:105480000BF84FF4FA700349088010BD700100203A +:10549000580100205200002070B5044608480068FA +:1054A000C078802805D0A189A068FEF747FA054694 +:1054B00002E00025FFF756FB284600F003F870BD18 +:1054C0004800002070B504460CB1032000E0002025 +:1054D000054629460148FFF72FFA70BD5801002004 +:1054E00010B50320FFF7EEFF002010BD10B50446F5 +:1054F0002046FDF76FF910BD00BFFEE7002114E064 +:10550000084608220BE00B4B1B68034023B10A4BF3 +:105510001B6883EA500000E04008531EDAB2002AFC +:10552000F1DC064B43F82100491C054B1B689942EE +:10553000E6D37047DC000020E00000208026002039 +:10554000D000002002E008C8121F08C1002AFAD1CA +:1055500070477047002001E001C1121F002AFBD1F3 +:105560007047000008B501210820FEF7C5FC0320A4 +:105570008DF8020014208DF803004FF48060ADF820 +:10558000000069460D48FDF7A4F903208DF80200DC +:105590004FF40060ADF8000014208DF80300694658 +:1055A0000648FDF796F94FF480610448FDF766FA66 +:1055B0004FF400610148FDF761FA08BD000C01409D +:1055C000022800DB70470121024A02F8301000BFB8 +:1055D000F8E70000FC000020022803DA074911F870 +:1055E000301001B970470121044A02F8301000213F +:1055F00002EBC002517000BFF4E70000FC00002085 +:105600000146022908DA064810F8310020B10448A2 +:1056100010F83100032801D1002070470120FCE779 +:10562000FC00002010B5FFF79DFF10BD2DE9F041F3 +:1056300007460C461646FDF789FBA020FDF758FBF0 +:10564000FDF7B2FB00B130E0A046E11704EB1161B9 +:10565000C1F30720FDF74CFBFDF7A6FB00B124E0EA +:10566000E0B2FDF745FBFDF79FFB00B11DE0FDF744 +:105670006DFBA120FDF73CFBFDF796FB00B114E0AC +:1056800000250BE0711EA94201D0012100E000219C +:105690000846FDF703FB7855681C85B2B542F1DB7F +:1056A000FDF76EFB0120BDE8F081FDF769FB0020EE +:1056B000F9E70000014802490860704700F0002047 +:1056C0002800002003480068006810B1002001494C +:1056D0000860704728000020002001E0411C88B2CB +:1056E0003C28FBDB7047000086B0FEF799FEFAF716 +:1056F000E7FDFEF75DFE01A8FEF70EFCFEF78BFB53 +:10570000FEF7C6FAFFF78EFFFBF7C0FBFAF736FE8F +:105710004FF400712548FDF7AFF9FBF7B7FBFBF736 +:10572000C1FE41E0FEF7EAFE21480078012805D1DC +:1057300000201F49087000F03DF835E01C48407813 +:10574000012803D100201A4948702DE018488078BC +:10575000012805D1002016498870FFF745FD23E098 +:105760001348C078012803D100201149C8701BE0FC +:105770000F480079012803D100200D49087113E07A +:105780000B484079012803D10020094948710BE0FA +:105790000748C079012807D100200549C8714FF496 +:1057A00000710248FDF768F9BCE70000000C0140F9 +:1057B0000C01002010B5FBF7DDFB10BD000102035A +:1057C00004050607080C10141820304000010203DD +:1057D0000405060708090909090A0A0A0A0B0B0B3E +:1057E0000B0C0C0C0C0D0D0D0D0D0D0D0D0E0E0EEC +:1057F0000E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0FC6 +:105800000F0F0F0F0F0F0F0F0F0F0F0F0F39323139 +:10581000343830312D4446303200000000000000A2 +:105820000056480012566E00000056480012566E90 +:1058300000000001170B10001B0700000008040007 +:105840000000020000000000000000000000000056 +:10585000292E0008180100200B070000FF07000098 +:1058600000000800DF070000FF070000000008003C +:105870002D010000FF0700000000080000000000EC +:105880000000000000000000000000000000000018 +:10589000000000000206031000000000A9470008F5 +:1058A0000206031000000000A148000803060300E0 +:1058B00000000000414B0008060501000000000048 +:1058C000355100080303031000000000694600087A +:1058D0001402010001000000ED540008060501005B +:1058E00000000000754B00080B02010001000000E1 +:1058F0004D4B0008FF020100010000006554000844 +:105900000102010001000000594B000802060310CB +:1059100000000000FD510008020303100000000019 +:1059200075470008000000000000000000000000B3 +:10593000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77 +:105940000001FFFFFFFFFFFFFFFFFFFFFFFFFFFF64 +:10595000FFFF02FFFFFFFF0304FFFFFFFFFF05FF45 +:10596000FF06FFFF07FF0809FFFFFFFFFFFF0AFF1A +:10597000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF37 +:10598000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF27 +:10599000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF17 +:1059A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07 +:1059B000FFFFFFFFFF0B000094F100003D150020EA +:1059C00009010000FFFF000095F10000B500002074 +:1059D00006010000FFFF000093F10000B00000206E +:1059E00005010000FFFF00008CF1000046150020BB +:1059F00013010000FFFF000080F1000034150020BB +:105A000009010000FFFF0000DD160008FD16000878 +:105A1000BD16000815170008191700083E53E17B52 +:105A2000405A000800000020FC0000004455000817 +:105A30003C5B0008FC000020AC310000545500081D +:105A40000000000001020304010203040607080924 +:105A50000204060800A24A04000000000000000042 +:105A6000010203040607080900000000000000000E +:105A70000000000000000000000000000000000026 +:105A80000000000000000000000000000000000016 +:105A90000000000000000000000000000000000006 +:105AA00000000000000000000000000018010020BD +:105AB000D5490008F5490008C55400088149000887 +:105AC000E1540008814700080000000000000000C9 +:105AD00000000000000000000000000000000000C6 +:105AE00000000000000000000000000000000000B6 +:105AF00000000000000000000000000000000000A6 +:105B00000000000000000000000000000000000095 +:105B1000000100000800000000000000000000007C +:105B20000000000000000000000000000000000075 +:0C5B300000000000000000000000000069 +:04000005080001519D +:00000001FF diff --git a/boot_project/Objects/hongri_boot.htm b/boot_project/Objects/hongri_boot.htm new file mode 100644 index 0000000..18707ae --- /dev/null +++ b/boot_project/Objects/hongri_boot.htm @@ -0,0 +1,1916 @@ + + +Static Call Graph - [.\Objects\hongri_boot.axf] +
    +

    Static Call Graph for image .\Objects\hongri_boot.axf


    +

    #<CALLGRAPH># ARM Linker, 5060750: Last Updated: Mon Nov 04 19:26:00 2024 +

    +

    Maximum Stack Usage = 384 bytes + Unknown(Cycles, Untraceable Function Pointers)

    +Call chain for Maximum Stack Depth:

    +CAN2_RX1_IRQHandler ⇒ APP_CAN_FifoMessageReceive ⇒ APP_CAN_MessageTypeHandle ⇒ ISO15765_Precopy ⇒ ISO15765_RxStateTask ⇒ ISO15765_CanTransmitMsg ⇒ IF_CAN_TransmitMsg ⇒ IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +

    +

    +Mutually Recursive functions +

  • ADC1_2_IRQHandler   ⇒   ADC1_2_IRQHandler
    + +

    +

    +Function Pointers +

      +
    • ADC1_2_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • BusFault_Handler from stm32f10x_it.o(i.BusFault_Handler) referenced from startup_stm32f10x_cl.o(RESET) +
    • CAN1_RX0_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • CAN1_RX1_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • CAN1_SCE_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • CAN1_TX_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • CAN2_RX0_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • CAN2_RX1_IRQHandler from can2.o(i.CAN2_RX1_IRQHandler) referenced from startup_stm32f10x_cl.o(RESET) +
    • CAN2_SCE_IRQHandler from can2.o(i.CAN2_SCE_IRQHandler) referenced from startup_stm32f10x_cl.o(RESET) +
    • CAN2_TX_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • DMA1_Channel1_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • DMA1_Channel2_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • DMA1_Channel3_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • DMA1_Channel4_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • DMA1_Channel5_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • DMA1_Channel6_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • DMA1_Channel7_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • DMA2_Channel1_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • DMA2_Channel2_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • DMA2_Channel3_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • DMA2_Channel4_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • DMA2_Channel5_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • DebugMon_Handler from stm32f10x_it.o(i.DebugMon_Handler) referenced from startup_stm32f10x_cl.o(RESET) +
    • Diag_Read_ECUSoftwareCode_F193 from diag_eeprom_c301.o(i.Diag_Read_ECUSoftwareCode_F193) referenced from diag_appl_c301.o(.constdata) +
    • Diag_Read_ECUSoftwareCode_F194 from diag_eeprom_c301.o(i.Diag_Read_ECUSoftwareCode_F194) referenced from diag_appl_c301.o(.constdata) +
    • Diag_Read_ECUSoftwareCode_F195 from diag_eeprom_c301.o(i.Diag_Read_ECUSoftwareCode_F195) referenced from diag_appl_c301.o(.constdata) +
    • Diag_Read_F18C from diag_eeprom_c301.o(i.Diag_Read_F18C) referenced from diag_appl_c301.o(.constdata) +
    • Diag_Read_FBLVersionInformation from diag_eeprom_c301.o(i.Diag_Read_FBLVersionInformation) referenced from diag_appl_c301.o(.constdata) +
    • ETH_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • ETH_WKUP_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • EXTI0_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • EXTI15_10_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • EXTI1_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • EXTI2_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • EXTI3_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • EXTI4_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • EXTI9_5_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • FLASH_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • HardFault_Handler from stm32f10x_it.o(i.HardFault_Handler) referenced from startup_stm32f10x_cl.o(RESET) +
    • I2C1_ER_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • I2C1_EV_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • I2C2_ER_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • I2C2_EV_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • ISO15765_DrvConfirmation from iso15765-2.o(i.ISO15765_DrvConfirmation) referenced from canconfig_c301.o(.constdata) +
    • MemManage_Handler from stm32f10x_it.o(i.MemManage_Handler) referenced from startup_stm32f10x_cl.o(RESET) +
    • NMI_Handler from stm32f10x_it.o(i.NMI_Handler) referenced from startup_stm32f10x_cl.o(RESET) +
    • OTG_FS_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • OTG_FS_WKUP_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • PVD_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • PendSV_Handler from stm32f10x_it.o(i.PendSV_Handler) referenced from startup_stm32f10x_cl.o(RESET) +
    • RCC_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • RTCAlarm_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • RTC_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • Reset_Handler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • SPI1_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • SPI2_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • SPI3_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • SVC_Handler from stm32f10x_it.o(i.SVC_Handler) referenced from startup_stm32f10x_cl.o(RESET) +
    • SysTick_Handler from dev_sys.o(i.SysTick_Handler) referenced from startup_stm32f10x_cl.o(RESET) +
    • SystemInit from system_stm32f10x.o(i.SystemInit) referenced from startup_stm32f10x_cl.o(.text) +
    • TAMPER_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • TIM1_BRK_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • TIM1_CC_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • TIM1_TRG_COM_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • TIM1_UP_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • TIM2_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • TIM3_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • TIM4_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • TIM5_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • TIM6_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • TIM7_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • UART4_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • UART5_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • USART1_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • USART2_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • USART3_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • Uds_CommunicationControl from uds.o(i.Uds_CommunicationControl) referenced from canconfig_c301.o(.constdata) +
    • Uds_ControlDTCSetting from uds.o(i.Uds_ControlDTCSetting) referenced from canconfig_c301.o(.constdata) +
    • Uds_CopyToCAN from uds.o(i.Uds_CopyToCAN) referenced from iso15765-2_entry.o(.data) +
    • Uds_DiagControlSession from uds.o(i.Uds_DiagControlSession) referenced from canconfig_c301.o(.constdata) +
    • Uds_ECUReset from uds.o(i.Uds_ECUReset) referenced from canconfig_c301.o(.constdata) +
    • Uds_PhysFuncGetBuffer from uds.o(i.Uds_PhysFuncGetBuffer) referenced from iso15765-2_entry.o(.data) +
    • Uds_PhysReqInd from uds.o(i.Uds_PhysReqInd) referenced from iso15765-2_entry.o(.data) +
    • Uds_PhysRxErrorIndication from uds.o(i.Uds_PhysRxErrorIndication) referenced from iso15765-2_entry.o(.data) +
    • Uds_ReadDataByIdentifier from uds.o(i.Uds_ReadDataByIdentifier) referenced from canconfig_c301.o(.constdata) +
    • Uds_RequestDownload from uds.o(i.Uds_RequestDownload) referenced from canconfig_c301.o(.constdata) +
    • Uds_RequestTransferExit from uds.o(i.Uds_RequestTransferExit) referenced from canconfig_c301.o(.constdata) +
    • Uds_RoutineControl from uds.o(i.Uds_RoutineControl) referenced from canconfig_c301.o(.constdata) +
    • Uds_SecurityAccess from uds.o(i.Uds_SecurityAccess) referenced from canconfig_c301.o(.constdata) +
    • Uds_TesterPresent from uds.o(i.Uds_TesterPresent) referenced from canconfig_c301.o(.constdata) +
    • Uds_TransferData from uds.o(i.Uds_TransferData) referenced from canconfig_c301.o(.constdata) +
    • Uds_TxConfirmation from uds.o(i.Uds_TxConfirmation) referenced from iso15765-2_entry.o(.data) +
    • Uds_TxErrorIndication from uds.o(i.Uds_TxErrorIndication) referenced from iso15765-2_entry.o(.data) +
    • Uds_WriteDataByIdentifier from uds.o(i.Uds_WriteDataByIdentifier) referenced from canconfig_c301.o(.constdata) +
    • UsageFault_Handler from stm32f10x_it.o(i.UsageFault_Handler) referenced from startup_stm32f10x_cl.o(RESET) +
    • WWDG_IRQHandler from startup_stm32f10x_cl.o(.text) referenced from startup_stm32f10x_cl.o(RESET) +
    • __main from entry.o(.ARM.Collect$$$$00000000) referenced from startup_stm32f10x_cl.o(.text) +
    • main from main.o(i.main) referenced from entry9a.o(.ARM.Collect$$$$0000000B) +
    +

    +

    +Global Symbols +

    +

    __main (Thumb, 0 bytes, Stack size unknown bytes, entry.o(.ARM.Collect$$$$00000000)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(.text) +
    +

    _main_stk (Thumb, 0 bytes, Stack size unknown bytes, entry2.o(.ARM.Collect$$$$00000001)) + +

    _main_scatterload (Thumb, 0 bytes, Stack size unknown bytes, entry5.o(.ARM.Collect$$$$00000004)) +

    [Calls]

    • >>   __scatterload +
    + +

    __main_after_scatterload (Thumb, 0 bytes, Stack size unknown bytes, entry5.o(.ARM.Collect$$$$00000004)) +

    [Called By]

    • >>   __scatterload +
    + +

    _main_clock (Thumb, 0 bytes, Stack size unknown bytes, entry7b.o(.ARM.Collect$$$$00000008)) + +

    _main_cpp_init (Thumb, 0 bytes, Stack size unknown bytes, entry8b.o(.ARM.Collect$$$$0000000A)) + +

    _main_init (Thumb, 0 bytes, Stack size unknown bytes, entry9a.o(.ARM.Collect$$$$0000000B)) + +

    __rt_final_cpp (Thumb, 0 bytes, Stack size unknown bytes, entry10a.o(.ARM.Collect$$$$0000000D)) + +

    __rt_final_exit (Thumb, 0 bytes, Stack size unknown bytes, entry11a.o(.ARM.Collect$$$$0000000F)) + +

    __get_PSP (Thumb, 6 bytes, Stack size 0 bytes, core_cm3.o(.emb_text), UNUSED) + +

    __set_PSP (Thumb, 6 bytes, Stack size 0 bytes, core_cm3.o(.emb_text), UNUSED) + +

    __get_MSP (Thumb, 6 bytes, Stack size 0 bytes, core_cm3.o(.emb_text), UNUSED) + +

    __set_MSP (Thumb, 6 bytes, Stack size 0 bytes, core_cm3.o(.emb_text)) +

    [Called By]

    • >>   JumpToExecute +
    + +

    __REV16 (Thumb, 4 bytes, Stack size 0 bytes, core_cm3.o(.emb_text), UNUSED) + +

    __REVSH (Thumb, 4 bytes, Stack size 0 bytes, core_cm3.o(.emb_text), UNUSED) + +

    Reset_Handler (Thumb, 8 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    ADC1_2_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +

    [Calls]

    • >>   ADC1_2_IRQHandler +
    +
    [Called By]
    • >>   ADC1_2_IRQHandler +
    +
    [Address Reference Count : 1]
    • startup_stm32f10x_cl.o(RESET) +
    +

    CAN1_RX0_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    CAN1_RX1_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    CAN1_SCE_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    CAN1_TX_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    CAN2_RX0_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    CAN2_TX_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    DMA1_Channel1_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    DMA1_Channel2_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    DMA1_Channel3_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    DMA1_Channel4_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    DMA1_Channel5_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    DMA1_Channel6_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    DMA1_Channel7_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    DMA2_Channel1_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    DMA2_Channel2_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    DMA2_Channel3_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    DMA2_Channel4_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    DMA2_Channel5_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    ETH_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    ETH_WKUP_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    EXTI0_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    EXTI15_10_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    EXTI1_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    EXTI2_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    EXTI3_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    EXTI4_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    EXTI9_5_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    FLASH_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    I2C1_ER_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    I2C1_EV_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    I2C2_ER_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    I2C2_EV_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    OTG_FS_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    OTG_FS_WKUP_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    PVD_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    RCC_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    RTCAlarm_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    RTC_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    SPI1_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    SPI2_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    SPI3_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    TAMPER_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    TIM1_BRK_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    TIM1_CC_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    TIM1_TRG_COM_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    TIM1_UP_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    TIM2_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    TIM3_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    TIM4_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    TIM5_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    TIM6_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    TIM7_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    UART4_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    UART5_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    USART1_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    USART2_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    USART3_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    WWDG_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_stm32f10x_cl.o(.text)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    __aeabi_memcpy (Thumb, 36 bytes, Stack size 0 bytes, memcpya.o(.text), UNUSED) + +

    __aeabi_memcpy4 (Thumb, 0 bytes, Stack size 0 bytes, memcpya.o(.text)) +

    [Called By]

    • >>   Can2_Send_Message +
    + +

    __aeabi_memcpy8 (Thumb, 0 bytes, Stack size 0 bytes, memcpya.o(.text), UNUSED) + +

    __aeabi_memset (Thumb, 14 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED) +

    [Called By]

    • >>   _memset$wrapper +
    • >>   __aeabi_memclr +
    + +

    __aeabi_memset4 (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED) + +

    __aeabi_memset8 (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED) + +

    __aeabi_memclr (Thumb, 4 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED) +

    [Calls]

    • >>   __aeabi_memset +
    + +

    __aeabi_memclr4 (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text)) +

    [Called By]

    • >>   CAN2_RX1_IRQHandler +
    • >>   IF_CAN_CopyDataAndStartTx +
    + +

    __aeabi_memclr8 (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED) + +

    _memset$wrapper (Thumb, 18 bytes, Stack size 8 bytes, memseta.o(.text), UNUSED) +

    [Calls]

    • >>   __aeabi_memset +
    + +

    __scatterload (Thumb, 28 bytes, Stack size 0 bytes, init.o(.text)) +

    [Calls]

    • >>   __main_after_scatterload +
    +
    [Called By]
    • >>   _main_scatterload +
    + +

    __scatterload_rt2 (Thumb, 0 bytes, Stack size 0 bytes, init.o(.text), UNUSED) + +

    APP_CAN_FifoMessageReceive (Thumb, 72 bytes, Stack size 32 bytes, app_can.o(i.APP_CAN_FifoMessageReceive)) +

    [Stack]

    • Max Depth = 352
    • Call Chain = APP_CAN_FifoMessageReceive ⇒ APP_CAN_MessageTypeHandle ⇒ ISO15765_Precopy ⇒ ISO15765_RxStateTask ⇒ ISO15765_CanTransmitMsg ⇒ IF_CAN_TransmitMsg ⇒ IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   APP_CAN_MessageTypeHandle +
    +
    [Called By]
    • >>   CAN2_RX1_IRQHandler +
    + +

    BSP_BKP_Init (Thumb, 20 bytes, Stack size 8 bytes, main.o(i.BSP_BKP_Init)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = BSP_BKP_Init +
    +
    [Calls]
    • >>   RCC_APB1PeriphClockCmd +
    • >>   PWR_BackupAccessCmd +
    +
    [Called By]
    • >>   main +
    + +

    BSP_vSystemReset (Thumb, 30 bytes, Stack size 0 bytes, app_can.o(i.BSP_vSystemReset)) +

    [Called By]

    • >>   Uds_TimerTask +
    • >>   Can_Task +
    + +

    BusFault_Handler (Thumb, 4 bytes, Stack size 0 bytes, stm32f10x_it.o(i.BusFault_Handler)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    Bzip2_Finish (Thumb, 12 bytes, Stack size 0 bytes, uds_sa_c301.o(i.Bzip2_Finish)) +

    [Called By]

    • >>   Diag_RequestTransferExit +
    + +

    Bzip2_Init (Thumb, 26 bytes, Stack size 4 bytes, uds_sa_c301.o(i.Bzip2_Init)) +

    [Stack]

    • Max Depth = 4
    • Call Chain = Bzip2_Init +
    +
    [Calls]
    • >>   _Bzip2_InitTable +
    +
    [Called By]
    • >>   Diag_RequestDownload +
    + +

    Bzip2_Start (Thumb, 10 bytes, Stack size 0 bytes, uds_sa_c301.o(i.Bzip2_Start)) +

    [Called By]

    • >>   Diag_RequestDownload +
    + +

    Bzip2_Update (Thumb, 44 bytes, Stack size 12 bytes, uds_sa_c301.o(i.Bzip2_Update)) +

    [Stack]

    • Max Depth = 12
    • Call Chain = Bzip2_Update +
    +
    [Called By]
    • >>   Diag_TransferData +
    + +

    CAN2_Mode_Init (Thumb, 308 bytes, Stack size 40 bytes, can2.o(i.CAN2_Mode_Init)) +

    [Stack]

    • Max Depth = 64
    • Call Chain = CAN2_Mode_Init ⇒ GPIO_Init +
    +
    [Calls]
    • >>   CAN_Init +
    • >>   CAN_ITConfig +
    • >>   CAN_FilterInit +
    • >>   RCC_APB2PeriphClockCmd +
    • >>   RCC_APB1PeriphClockCmd +
    • >>   GPIO_Init +
    • >>   NVIC_Init +
    • >>   can_bus_open_hook +
    +
    [Called By]
    • >>   main +
    + +

    CAN2_RX1_IRQHandler (Thumb, 44 bytes, Stack size 32 bytes, can2.o(i.CAN2_RX1_IRQHandler)) +

    [Stack]

    • Max Depth = 384
    • Call Chain = CAN2_RX1_IRQHandler ⇒ APP_CAN_FifoMessageReceive ⇒ APP_CAN_MessageTypeHandle ⇒ ISO15765_Precopy ⇒ ISO15765_RxStateTask ⇒ ISO15765_CanTransmitMsg ⇒ IF_CAN_TransmitMsg ⇒ IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   CAN_Receive +
    • >>   APP_CAN_FifoMessageReceive +
    • >>   can_bus_ready_hook +
    • >>   __aeabi_memclr4 +
    +
    [Address Reference Count : 1]
    • startup_stm32f10x_cl.o(RESET) +
    +

    CAN2_SCE_IRQHandler (Thumb, 186 bytes, Stack size 8 bytes, can2.o(i.CAN2_SCE_IRQHandler)) +

    [Stack]

    • Max Depth = 24
    • Call Chain = CAN2_SCE_IRQHandler ⇒ CAN_GetITStatus +
    +
    [Calls]
    • >>   CAN_GetITStatus +
    • >>   CAN_GetFlagStatus +
    • >>   CAN_DeInit +
    • >>   CAN_ClearITPendingBit +
    • >>   CAN_ClearFlag +
    • >>   TickOut +
    +
    [Address Reference Count : 1]
    • startup_stm32f10x_cl.o(RESET) +
    +

    CAN_ClearFlag (Thumb, 52 bytes, Stack size 0 bytes, stm32f10x_can.o(i.CAN_ClearFlag)) +

    [Called By]

    • >>   CAN2_SCE_IRQHandler +
    + +

    CAN_ClearITPendingBit (Thumb, 162 bytes, Stack size 0 bytes, stm32f10x_can.o(i.CAN_ClearITPendingBit)) +

    [Called By]

    • >>   CAN2_SCE_IRQHandler +
    + +

    CAN_DeInit (Thumb, 50 bytes, Stack size 8 bytes, stm32f10x_can.o(i.CAN_DeInit)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = CAN_DeInit +
    +
    [Calls]
    • >>   RCC_APB1PeriphResetCmd +
    +
    [Called By]
    • >>   CAN2_SCE_IRQHandler +
    + +

    CAN_FilterInit (Thumb, 258 bytes, Stack size 8 bytes, stm32f10x_can.o(i.CAN_FilterInit)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = CAN_FilterInit +
    +
    [Called By]
    • >>   CAN2_Mode_Init +
    + +

    CAN_GetFlagStatus (Thumb, 120 bytes, Stack size 8 bytes, stm32f10x_can.o(i.CAN_GetFlagStatus)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = CAN_GetFlagStatus +
    +
    [Called By]
    • >>   CAN2_SCE_IRQHandler +
    + +

    CAN_GetITStatus (Thumb, 284 bytes, Stack size 16 bytes, stm32f10x_can.o(i.CAN_GetITStatus)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = CAN_GetITStatus +
    +
    [Calls]
    • >>   CheckITStatus +
    +
    [Called By]
    • >>   CAN2_SCE_IRQHandler +
    + +

    CAN_ITConfig (Thumb, 18 bytes, Stack size 0 bytes, stm32f10x_can.o(i.CAN_ITConfig)) +

    [Called By]

    • >>   CAN2_Mode_Init +
    + +

    CAN_Init (Thumb, 276 bytes, Stack size 12 bytes, stm32f10x_can.o(i.CAN_Init)) +

    [Stack]

    • Max Depth = 12
    • Call Chain = CAN_Init +
    +
    [Called By]
    • >>   CAN2_Mode_Init +
    + +

    CAN_Receive (Thumb, 240 bytes, Stack size 8 bytes, stm32f10x_can.o(i.CAN_Receive)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = CAN_Receive +
    +
    [Called By]
    • >>   CAN2_RX1_IRQHandler +
    + +

    CAN_Transmit (Thumb, 294 bytes, Stack size 8 bytes, stm32f10x_can.o(i.CAN_Transmit)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = CAN_Transmit +
    +
    [Called By]
    • >>   Can2_Send_Message +
    + +

    CAN_TransmitStatus (Thumb, 138 bytes, Stack size 8 bytes, stm32f10x_can.o(i.CAN_TransmitStatus)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = CAN_TransmitStatus +
    +
    [Called By]
    • >>   Can2_Send_Message +
    + +

    Can2_Send_Message (Thumb, 96 bytes, Stack size 48 bytes, can2.o(i.Can2_Send_Message)) +

    [Stack]

    • Max Depth = 56
    • Call Chain = Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   CAN_TransmitStatus +
    • >>   CAN_Transmit +
    • >>   can_bus_send_ready +
    • >>   __aeabi_memcpy4 +
    +
    [Called By]
    • >>   IF_CAN_SendCanData +
    + +

    CanExt_CanTransShutdown (Thumb, 10 bytes, Stack size 8 bytes, app_can.o(i.CanExt_CanTransShutdown)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = CanExt_CanTransShutdown ⇒ CanTrans_GoToSleep +
    +
    [Calls]
    • >>   CanTrans_GoToSleep +
    +
    [Called By]
    • >>   Can_Task +
    + +

    CanTask_BusErrorDetection (Thumb, 2 bytes, Stack size 0 bytes, app_can.o(i.CanTask_BusErrorDetection)) +

    [Called By]

    • >>   CanTask_TimerProcess +
    + +

    CanTask_FBLInit (Thumb, 196 bytes, Stack size 0 bytes, app_can.o(i.CanTask_FBLInit)) +

    [Called By]

    • >>   Uds_TransSessionType +
    • >>   CanTask_InitProcess +
    + +

    CanTask_GetSaRandom (Thumb, 6 bytes, Stack size 0 bytes, app_can.o(i.CanTask_GetSaRandom)) +

    [Called By]

    • >>   SA_Random +
    + +

    CanTask_InitProcess (Thumb, 80 bytes, Stack size 8 bytes, app_can.o(i.CanTask_InitProcess)) +

    [Stack]

    • Max Depth = 32
    • Call Chain = CanTask_InitProcess ⇒ ISO15765_InitPowerOn ⇒ ISO15765_Init ⇒ ISO15765_TxInit +
    +
    [Calls]
    • >>   IF_CAN_IsOnLine +
    • >>   CanTrans_Init +
    • >>   ISO15765_InitPowerOn +
    • >>   CanTask_FBLInit +
    • >>   Uds_PowerOnInit +
    • >>   IF_CAN_InitLoaclStatus +
    +
    [Called By]
    • >>   main +
    + +

    CanTask_IsAppBeenErased (Thumb, 40 bytes, Stack size 0 bytes, app_can.o(i.CanTask_IsAppBeenErased)) +

    [Called By]

    • >>   Uds_SetState +
    + +

    CanTask_SetStayInBootFlagValue (Thumb, 6 bytes, Stack size 0 bytes, app_can.o(i.CanTask_SetStayInBootFlagValue)) +

    [Called By]

    • >>   Uds_DiagControlSession +
    • >>   Uds_SetState +
    + +

    CanTask_UdsStateProcess (Thumb, 16 bytes, Stack size 8 bytes, app_can.o(i.CanTask_UdsStateProcess)) +

    [Stack]

    • Max Depth = 112
    • Call Chain = CanTask_UdsStateProcess ⇒ Uds_StateTask ⇒ Uds_ContextTask ⇒ Uds_SetState ⇒ Diag_CheckValidApp1 ⇒ ee_ReadBytes ⇒ IIC_Read_Byte ⇒ IIC_NAck +
    +
    [Calls]
    • >>   Uds_StateTask +
    +
    [Called By]
    • >>   uds_SysTick_Process_1ms +
    + +

    CanTrans_GoToNormal (Thumb, 38 bytes, Stack size 8 bytes, can_transceiver.o(i.CanTrans_GoToNormal)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = CanTrans_GoToNormal +
    +
    [Calls]
    • >>   GPIO_SetBits +
    +
    [Called By]
    • >>   CanTrans_Init +
    + +

    CanTrans_GoToSleep (Thumb, 50 bytes, Stack size 8 bytes, can_transceiver.o(i.CanTrans_GoToSleep)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = CanTrans_GoToSleep +
    +
    [Calls]
    • >>   GPIO_SetBits +
    • >>   GPIO_ResetBits +
    • >>   CanTrans_Delay +
    +
    [Called By]
    • >>   CanExt_CanTransShutdown +
    + +

    CanTrans_Init (Thumb, 10 bytes, Stack size 8 bytes, can_transceiver.o(i.CanTrans_Init)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = CanTrans_Init ⇒ CanTrans_GoToNormal +
    +
    [Calls]
    • >>   CanTrans_GoToNormal +
    +
    [Called By]
    • >>   CanTask_InitProcess +
    + +

    Can_Task (Thumb, 68 bytes, Stack size 8 bytes, app_can.o(i.Can_Task)) +

    [Stack]

    • Max Depth = 320
    • Call Chain = Can_Task ⇒ CanTask_TimerProcess ⇒ ISO15765_Task ⇒ ISO15765_TxTask ⇒ ISO15765_TxStateTask ⇒ ISO15765_CanTransmitMsg ⇒ IF_CAN_TransmitMsg ⇒ IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   BSP_vSystemReset +
    • >>   CanExt_CanTransShutdown +
    • >>   CanTask_TimerProcess +
    +
    [Called By]
    • >>   Uds_SysTick_Process_10ms +
    + +

    DebugMon_Handler (Thumb, 2 bytes, Stack size 0 bytes, stm32f10x_it.o(i.DebugMon_Handler)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    Diag_AppDataInit (Thumb, 8 bytes, Stack size 0 bytes, diag_appl_c301.o(i.Diag_AppDataInit)) +

    [Called By]

    • >>   Uds_PowerOnInit +
    • >>   Uds_DiagControlSession +
    + +

    Diag_CheckTransmitSequence (Thumb, 20 bytes, Stack size 16 bytes, diag_appl_c301.o(i.Diag_CheckTransmitSequence)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = Diag_CheckTransmitSequence +
    +
    [Calls]
    • >>   GetCrc32Chk +
    +
    [Called By]
    • >>   Diag_RoutineControl +
    + +

    Diag_CheckValidApp1 (Thumb, 54 bytes, Stack size 16 bytes, diag_appl_c301.o(i.Diag_CheckValidApp1)) +

    [Stack]

    • Max Depth = 64
    • Call Chain = Diag_CheckValidApp1 ⇒ ee_ReadBytes ⇒ IIC_Read_Byte ⇒ IIC_NAck +
    +
    [Calls]
    • >>   ee_ReadBytes +
    +
    [Called By]
    • >>   Diag_CheckValidApplication +
    • >>   Uds_SetState +
    + +

    Diag_CheckValidApplication (Thumb, 24 bytes, Stack size 8 bytes, diag_appl_c301.o(i.Diag_CheckValidApplication)) +

    [Stack]

    • Max Depth = 72
    • Call Chain = Diag_CheckValidApplication ⇒ Diag_CheckValidApp1 ⇒ ee_ReadBytes ⇒ IIC_Read_Byte ⇒ IIC_NAck +
    +
    [Calls]
    • >>   Diag_CheckValidApp1 +
    +
    [Called By]
    • >>   Diag_RoutineControl +
    + +

    Diag_CheckVerifyUpgradePacket (Thumb, 22 bytes, Stack size 0 bytes, diag_appl_c301.o(i.Diag_CheckVerifyUpgradePacket)) +

    [Called By]

    • >>   Diag_RoutineControl +
    + +

    Diag_CheckWriteDIDRange (Thumb, 48 bytes, Stack size 0 bytes, diag_appl_c301.o(i.Diag_CheckWriteDIDRange)) +

    [Called By]

    • >>   Diag_WriteDataByIdentifier +
    + +

    Diag_ClrAPP1UpdateMark (Thumb, 72 bytes, Stack size 16 bytes, diag_eeprom_c301.o(i.Diag_ClrAPP1UpdateMark)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = Diag_ClrAPP1UpdateMark +
    +
    [Calls]
    • >>   flashdnit +
    • >>   flashInit +
    +
    [Called By]
    • >>   Diag_RoutineControl +
    + +

    Diag_ClrEepromUpdateMark (Thumb, 20 bytes, Stack size 0 bytes, diag_eeprom_c301.o(i.Diag_ClrEepromUpdateMark)) +

    [Called By]

    • >>   Diag_RoutineControl +
    + +

    Diag_CommunicationControl (Thumb, 178 bytes, Stack size 24 bytes, diag_appl_c301.o(i.Diag_CommunicationControl)) +

    [Stack]

    • Max Depth = 32
    • Call Chain = Diag_CommunicationControl ⇒ Uds_ProcessFinished +
    +
    [Calls]
    • >>   Diag_CommEnable +
    • >>   Diag_CommDisable +
    • >>   Uds_SetSupFuncEnableFlag +
    • >>   Uds_SetNRC +
    • >>   Uds_ResponseEnable +
    • >>   Uds_ProcessFinished +
    • >>   Uds_CheckAdrrType +
    +
    [Called By]
    • >>   Uds_CommunicationControl +
    + +

    Diag_ControlDTCSetting (Thumb, 100 bytes, Stack size 16 bytes, diag_appl_c301.o(i.Diag_ControlDTCSetting)) +

    [Stack]

    • Max Depth = 24
    • Call Chain = Diag_ControlDTCSetting ⇒ Uds_ProcessFinished +
    +
    [Calls]
    • >>   Uds_SetSupFuncEnableFlag +
    • >>   Uds_SetNRC +
    • >>   Uds_ResponseEnable +
    • >>   Uds_ProcessFinished +
    • >>   Uds_CheckAdrrType +
    +
    [Called By]
    • >>   Uds_ControlDTCSetting +
    + +

    Diag_DataCalcCRC (Thumb, 96 bytes, Stack size 16 bytes, diag_appl_c301.o(i.Diag_DataCalcCRC)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = Diag_DataCalcCRC +
    +
    [Called By]
    • >>   Diag_TransferData +
    + +

    Diag_DataProgram (Thumb, 94 bytes, Stack size 24 bytes, diag_appl_c301.o(i.Diag_DataProgram)) +

    [Stack]

    • Max Depth = 24
    • Call Chain = Diag_DataProgram +
    +
    [Calls]
    • >>   flashdnit +
    • >>   flashInit +
    +
    [Called By]
    • >>   Diag_TransferData +
    + +

    Diag_EcuReset (Thumb, 132 bytes, Stack size 16 bytes, diag_appl_c301.o(i.Diag_EcuReset)) +

    [Stack]

    • Max Depth = 24
    • Call Chain = Diag_EcuReset ⇒ Uds_ProcessFinished +
    +
    [Calls]
    • >>   Uds_SetSupFuncEnableFlag +
    • >>   Uds_SetNRC +
    • >>   Uds_ResponseEnable +
    • >>   Uds_ProcessFinished +
    • >>   Uds_CheckAdrrType +
    +
    [Called By]
    • >>   Uds_ECUReset +
    + +

    Diag_FlashCalcCRC (Thumb, 118 bytes, Stack size 40 bytes, diag_appl_c301.o(i.Diag_FlashCalcCRC)) +

    [Stack]

    • Max Depth = 328
    • Call Chain = Diag_FlashCalcCRC ⇒ Uds_ForceTransmitResPending ⇒ ISO15765_CanTransmitMsgWithDlc ⇒ IF_CAN_TransmitMsg ⇒ IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   Uds_ForceTransmitResPending +
    +
    [Called By]
    • >>   Diag_RequestTransferExit +
    + +

    Diag_HndUpdataEV (Thumb, 2 bytes, Stack size 0 bytes, diag_eeprom_c301.o(i.Diag_HndUpdataEV)) +

    [Called By]

    • >>   main +
    + +

    Diag_MemCopy (Thumb, 22 bytes, Stack size 8 bytes, diag_eeprom_c301.o(i.Diag_MemCopy)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = Diag_MemCopy +
    +
    [Called By]
    • >>   Diag_WriteDataByIdentifier +
    • >>   Uds_ContextTask +
    + +

    Diag_MemCpy (Thumb, 20 bytes, Stack size 8 bytes, diag_appl_c301.o(i.Diag_MemCpy)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = Diag_MemCpy +
    +
    [Called By]
    • >>   Diag_RamWrite +
    + +

    Diag_ProgramFailedDataInit (Thumb, 120 bytes, Stack size 0 bytes, diag_appl_c301.o(i.Diag_ProgramFailedDataInit)) +

    [Called By]

    • >>   Diag_TransferData +
    + +

    Diag_RamWrite (Thumb, 20 bytes, Stack size 16 bytes, diag_appl_c301.o(i.Diag_RamWrite)) +

    [Stack]

    • Max Depth = 24
    • Call Chain = Diag_RamWrite ⇒ Diag_MemCpy +
    +
    [Calls]
    • >>   Diag_MemCpy +
    +
    [Called By]
    • >>   Diag_TransferData +
    + +

    Diag_ReadDataByIdentifier (Thumb, 340 bytes, Stack size 144 bytes, diag_appl_c301.o(i.Diag_ReadDataByIdentifier)) +

    [Stack]

    • Max Depth = 152
    • Call Chain = Diag_ReadDataByIdentifier ⇒ Uds_ProcessFinished +
    +
    [Calls]
    • >>   Uds_SetSupFuncEnableFlag +
    • >>   Uds_SetNRC +
    • >>   Uds_ProcessFinished +
    • >>   Uds_GetNRC +
    • >>   Uds_CheckAdrrType +
    +
    [Called By]
    • >>   Uds_ReadDataByIdentifier +
    + +

    Diag_Read_ECUSoftwareCode_F193 (Thumb, 22 bytes, Stack size 0 bytes, diag_eeprom_c301.o(i.Diag_Read_ECUSoftwareCode_F193)) +
    [Address Reference Count : 1]

    • diag_appl_c301.o(.constdata) +
    +

    Diag_Read_ECUSoftwareCode_F194 (Thumb, 22 bytes, Stack size 0 bytes, diag_eeprom_c301.o(i.Diag_Read_ECUSoftwareCode_F194)) +
    [Address Reference Count : 1]

    • diag_appl_c301.o(.constdata) +
    +

    Diag_Read_ECUSoftwareCode_F195 (Thumb, 20 bytes, Stack size 0 bytes, diag_eeprom_c301.o(i.Diag_Read_ECUSoftwareCode_F195)) +
    [Address Reference Count : 1]

    • diag_appl_c301.o(.constdata) +
    +

    Diag_Read_F18C (Thumb, 2 bytes, Stack size 0 bytes, diag_eeprom_c301.o(i.Diag_Read_F18C)) +
    [Address Reference Count : 1]

    • diag_appl_c301.o(.constdata) +
    +

    Diag_Read_FBLVersionInformation (Thumb, 22 bytes, Stack size 0 bytes, diag_eeprom_c301.o(i.Diag_Read_FBLVersionInformation)) +
    [Address Reference Count : 1]

    • diag_appl_c301.o(.constdata) +
    +

    Diag_RequestDownload (Thumb, 832 bytes, Stack size 32 bytes, diag_appl_c301.o(i.Diag_RequestDownload)) +

    [Stack]

    • Max Depth = 40
    • Call Chain = Diag_RequestDownload ⇒ Uds_ProcessFinished +
    +
    [Calls]
    • >>   Bzip2_Start +
    • >>   Bzip2_Init +
    • >>   Uds_SetNRC +
    • >>   Uds_ProcessFinished +
    • >>   Uds_GetNRC +
    +
    [Called By]
    • >>   Uds_RequestDownload +
    + +

    Diag_RequestEraseFlash (Thumb, 72 bytes, Stack size 24 bytes, diag_appl_c301.o(i.Diag_RequestEraseFlash)) +

    [Stack]

    • Max Depth = 24
    • Call Chain = Diag_RequestEraseFlash +
    +
    [Calls]
    • >>   flashdnit +
    • >>   flashInit +
    +
    [Called By]
    • >>   Diag_RoutineControl +
    + +

    Diag_RequestTransferExit (Thumb, 298 bytes, Stack size 16 bytes, diag_appl_c301.o(i.Diag_RequestTransferExit)) +

    [Stack]

    • Max Depth = 344
    • Call Chain = Diag_RequestTransferExit ⇒ Diag_FlashCalcCRC ⇒ Uds_ForceTransmitResPending ⇒ ISO15765_CanTransmitMsgWithDlc ⇒ IF_CAN_TransmitMsg ⇒ IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   Bzip2_Finish +
    • >>   Diag_FlashCalcCRC +
    • >>   Uds_SetNRC +
    • >>   Uds_ProcessFinished +
    +
    [Called By]
    • >>   Uds_RequestTransferExit +
    + +

    Diag_RoutineControl (Thumb, 882 bytes, Stack size 48 bytes, diag_appl_c301.o(i.Diag_RoutineControl)) +

    [Stack]

    • Max Depth = 336
    • Call Chain = Diag_RoutineControl ⇒ Uds_ForceTransmitResPending ⇒ ISO15765_CanTransmitMsgWithDlc ⇒ IF_CAN_TransmitMsg ⇒ IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   Diag_RequestEraseFlash +
    • >>   Diag_CheckVerifyUpgradePacket +
    • >>   Diag_CheckValidApplication +
    • >>   Diag_CheckTransmitSequence +
    • >>   Diag_SetEepromAppErasureMark +
    • >>   Diag_ClrEepromUpdateMark +
    • >>   Diag_ClrAPP1UpdateMark +
    • >>   Uds_SetSupFuncEnableFlag +
    • >>   Uds_SetNRC +
    • >>   Uds_ProcessFinished +
    • >>   Uds_GetCurSessionAccessStatus +
    • >>   Uds_ForceTransmitResPending +
    • >>   Uds_CheckAdrrType +
    +
    [Called By]
    • >>   Uds_RoutineControl +
    + +

    Diag_SecurityAccess (Thumb, 968 bytes, Stack size 40 bytes, diag_appl_c301.o(i.Diag_SecurityAccess)) +

    [Stack]

    • Max Depth = 64
    • Call Chain = Diag_SecurityAccess ⇒ SA_Random +
    +
    [Calls]
    • >>   SA_GenerateKeyFBL +
    • >>   SA_GenerateKey +
    • >>   SA_Compare +
    • >>   Uds_SetSupFuncEnableFlag +
    • >>   Uds_SetProtect +
    • >>   Uds_SetNRC +
    • >>   Uds_ProcessFinished +
    • >>   Uds_GetCurSessionState +
    • >>   Uds_CheckAdrrType +
    • >>   SA_Random +
    +
    [Called By]
    • >>   Uds_SecurityAccess +
    + +

    Diag_SetEepromAppErasureMark (Thumb, 20 bytes, Stack size 0 bytes, diag_eeprom_c301.o(i.Diag_SetEepromAppErasureMark)) +

    [Called By]

    • >>   Diag_RoutineControl +
    + +

    Diag_TransferData (Thumb, 1098 bytes, Stack size 32 bytes, diag_appl_c301.o(i.Diag_TransferData)) +

    [Stack]

    • Max Depth = 56
    • Call Chain = Diag_TransferData ⇒ Diag_RamWrite ⇒ Diag_MemCpy +
    +
    [Calls]
    • >>   Bzip2_Update +
    • >>   Diag_RamWrite +
    • >>   Diag_ProgramFailedDataInit +
    • >>   Diag_DataProgram +
    • >>   Diag_DataCalcCRC +
    • >>   Uds_SetNRC +
    • >>   Uds_ProcessFinished +
    +
    [Called By]
    • >>   Uds_TransferData +
    + +

    Diag_WriteDataByIdentifier (Thumb, 238 bytes, Stack size 32 bytes, diag_appl_c301.o(i.Diag_WriteDataByIdentifier)) +

    [Stack]

    • Max Depth = 40
    • Call Chain = Diag_WriteDataByIdentifier ⇒ Diag_MemCopy +
    +
    [Calls]
    • >>   EED_WriteDID +
    • >>   Diag_CheckWriteDIDRange +
    • >>   Diag_MemCopy +
    • >>   Uds_SetSupFuncEnableFlag +
    • >>   Uds_SetNRC +
    • >>   Uds_ProcessFinished +
    • >>   Uds_CheckAdrrType +
    +
    [Called By]
    • >>   Uds_WriteDataByIdentifier +
    + +

    EED_WriteDID (Thumb, 6 bytes, Stack size 0 bytes, app_can.o(i.EED_WriteDID)) +

    [Called By]

    • >>   Diag_WriteDataByIdentifier +
    + +

    GPIO_Init (Thumb, 278 bytes, Stack size 24 bytes, stm32f10x_gpio.o(i.GPIO_Init)) +

    [Stack]

    • Max Depth = 24
    • Call Chain = GPIO_Init +
    +
    [Called By]
    • >>   CAN2_Mode_Init +
    • >>   bsp_InitI2C +
    • >>   LED_Init +
    + +

    GPIO_PinRemapConfig (Thumb, 138 bytes, Stack size 20 bytes, stm32f10x_gpio.o(i.GPIO_PinRemapConfig)) +

    [Stack]

    • Max Depth = 20
    • Call Chain = GPIO_PinRemapConfig +
    +
    [Called By]
    • >>   LED_Init +
    + +

    GPIO_ResetBits (Thumb, 4 bytes, Stack size 0 bytes, stm32f10x_gpio.o(i.GPIO_ResetBits)) +

    [Called By]

    • >>   LED_Init +
    • >>   CanTrans_GoToSleep +
    • >>   main +
    + +

    GPIO_SetBits (Thumb, 4 bytes, Stack size 0 bytes, stm32f10x_gpio.o(i.GPIO_SetBits)) +

    [Called By]

    • >>   bsp_InitI2C +
    • >>   LED_Init +
    • >>   CanTrans_GoToSleep +
    • >>   CanTrans_GoToNormal +
    + +

    GetCrc32Chk (Thumb, 6 bytes, Stack size 0 bytes, uds_sa_c301.o(i.GetCrc32Chk)) +

    [Called By]

    • >>   Diag_CheckTransmitSequence +
    + +

    HardFault_Handler (Thumb, 4 bytes, Stack size 0 bytes, stm32f10x_it.o(i.HardFault_Handler)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    IF_CAN_CancelTransmitMsg (Thumb, 2 bytes, Stack size 0 bytes, app_can.o(i.IF_CAN_CancelTransmitMsg)) +

    [Called By]

    • >>   ISO15765_Precopy +
    • >>   ISO15765_TxInit +
    • >>   ISO15765_RxInit +
    + +

    IF_CAN_InitLoaclStatus (Thumb, 24 bytes, Stack size 8 bytes, app_can.o(i.IF_CAN_InitLoaclStatus)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = IF_CAN_InitLoaclStatus +
    +
    [Calls]
    • >>   IF_CAN_IsOnLine +
    +
    [Called By]
    • >>   CanTask_InitProcess +
    + +

    IF_CAN_IsOnLine (Thumb, 20 bytes, Stack size 0 bytes, app_can.o(i.IF_CAN_IsOnLine)) +

    [Called By]

    • >>   IF_CAN_InitLoaclStatus +
    • >>   CanTask_InitProcess +
    + +

    IF_CAN_SendCanData (Thumb, 160 bytes, Stack size 64 bytes, app_can.o(i.IF_CAN_SendCanData)) +

    [Stack]

    • Max Depth = 120
    • Call Chain = IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   Can2_Send_Message +
    +
    [Called By]
    • >>   IF_CAN_CopyDataAndStartTx +
    + +

    IF_CAN_TransmitMsg (Thumb, 46 bytes, Stack size 24 bytes, app_can.o(i.IF_CAN_TransmitMsg)) +

    [Stack]

    • Max Depth = 264
    • Call Chain = IF_CAN_TransmitMsg ⇒ IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   IF_CAN_CopyDataAndStartTx +
    +
    [Called By]
    • >>   ISO15765_CanTransmitMsg +
    • >>   ISO15765_CanTransmitMsgWithDlc +
    + +

    IIC_Ack (Thumb, 52 bytes, Stack size 8 bytes, bsp_i2c_gpio.o(i.IIC_Ack)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = IIC_Ack +
    +
    [Calls]
    • >>   i2c_Delay +
    +
    [Called By]
    • >>   IIC_Read_Byte +
    + +

    IIC_NAck (Thumb, 42 bytes, Stack size 8 bytes, bsp_i2c_gpio.o(i.IIC_NAck)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = IIC_NAck +
    +
    [Calls]
    • >>   i2c_Delay +
    +
    [Called By]
    • >>   IIC_Read_Byte +
    + +

    IIC_Read_Byte (Thumb, 80 bytes, Stack size 16 bytes, bsp_i2c_gpio.o(i.IIC_Read_Byte)) +

    [Stack]

    • Max Depth = 24
    • Call Chain = IIC_Read_Byte ⇒ IIC_NAck +
    +
    [Calls]
    • >>   IIC_NAck +
    • >>   IIC_Ack +
    • >>   i2c_Delay +
    +
    [Called By]
    • >>   ee_ReadBytes +
    + +

    IIC_Send_Byte (Thumb, 88 bytes, Stack size 16 bytes, bsp_i2c_gpio.o(i.IIC_Send_Byte)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = IIC_Send_Byte +
    +
    [Calls]
    • >>   i2c_Delay +
    +
    [Called By]
    • >>   ee_ReadBytes +
    + +

    IIC_Start (Thumb, 48 bytes, Stack size 8 bytes, bsp_i2c_gpio.o(i.IIC_Start)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = IIC_Start +
    +
    [Calls]
    • >>   i2c_Delay +
    +
    [Called By]
    • >>   ee_ReadBytes +
    + +

    IIC_Stop (Thumb, 36 bytes, Stack size 8 bytes, bsp_i2c_gpio.o(i.IIC_Stop)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = IIC_Stop +
    +
    [Calls]
    • >>   i2c_Delay +
    +
    [Called By]
    • >>   ee_ReadBytes +
    + +

    IIC_Wait_Ack (Thumb, 62 bytes, Stack size 8 bytes, bsp_i2c_gpio.o(i.IIC_Wait_Ack)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = IIC_Wait_Ack +
    +
    [Calls]
    • >>   i2c_Delay +
    +
    [Called By]
    • >>   ee_ReadBytes +
    + +

    ISO15765_CanTransmitMsg (Thumb, 26 bytes, Stack size 8 bytes, iso15765-2.o(i.ISO15765_CanTransmitMsg)) +

    [Stack]

    • Max Depth = 272
    • Call Chain = ISO15765_CanTransmitMsg ⇒ IF_CAN_TransmitMsg ⇒ IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   IF_CAN_TransmitMsg +
    +
    [Called By]
    • >>   ISO15765_TxStateTask +
    • >>   ISO15765_RxStateTask +
    + +

    ISO15765_CanTransmitMsgWithDlc (Thumb, 26 bytes, Stack size 16 bytes, iso15765-2.o(i.ISO15765_CanTransmitMsgWithDlc)) +

    [Stack]

    • Max Depth = 280
    • Call Chain = ISO15765_CanTransmitMsgWithDlc ⇒ IF_CAN_TransmitMsg ⇒ IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   IF_CAN_TransmitMsg +
    +
    [Called By]
    • >>   Uds_ForceTransmitResPending +
    + +

    ISO15765_DrvConfirmation (Thumb, 22 bytes, Stack size 8 bytes, iso15765-2.o(i.ISO15765_DrvConfirmation)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = ISO15765_DrvConfirmation ⇒ ISO15765_TxFinishProcess +
    +
    [Calls]
    • >>   ISO15765_TxFinishProcess +
    • >>   ISO15765_RxFinishProcess +
    +
    [Called By]
    • >>   ISO15765_Precopy +
    +
    [Address Reference Count : 1]
    • canconfig_c301.o(.constdata) +
    +

    ISO15765_InitPowerOn (Thumb, 24 bytes, Stack size 8 bytes, iso15765-2.o(i.ISO15765_InitPowerOn)) +

    [Stack]

    • Max Depth = 24
    • Call Chain = ISO15765_InitPowerOn ⇒ ISO15765_Init ⇒ ISO15765_TxInit +
    +
    [Calls]
    • >>   ISO15765_Init +
    +
    [Called By]
    • >>   CanTask_InitProcess +
    + +

    ISO15765_Precopy (Thumb, 1534 bytes, Stack size 16 bytes, iso15765-2.o(i.ISO15765_Precopy)) +

    [Stack]

    • Max Depth = 304
    • Call Chain = ISO15765_Precopy ⇒ ISO15765_RxStateTask ⇒ ISO15765_CanTransmitMsg ⇒ IF_CAN_TransmitMsg ⇒ IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   IF_CAN_CancelTransmitMsg +
    • >>   ISO15765_DrvConfirmation +
    • >>   ISO15765_TxInit +
    • >>   ISO15765_RxStateTask +
    • >>   ISO15765_RxInit +
    • >>   ISO15765_RxResetBus +
    +
    [Called By]
    • >>   APP_CAN_MessageTypeHandle +
    + +

    ISO15765_RxResetBus (Thumb, 8 bytes, Stack size 8 bytes, iso15765-2.o(i.ISO15765_RxResetBus)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = ISO15765_RxResetBus ⇒ ISO15765_RxInit +
    +
    [Calls]
    • >>   ISO15765_RxInit +
    +
    [Called By]
    • >>   ISO15765_Precopy +
    • >>   Uds_PhysReqInd +
    + +

    ISO15765_RxSetFCStatus (Thumb, 6 bytes, Stack size 0 bytes, iso15765-2.o(i.ISO15765_RxSetFCStatus)) +

    [Called By]

    • >>   Uds_PhysFuncGetBuffer +
    + +

    ISO15765_Task (Thumb, 12 bytes, Stack size 8 bytes, iso15765-2.o(i.ISO15765_Task)) +

    [Stack]

    • Max Depth = 304
    • Call Chain = ISO15765_Task ⇒ ISO15765_TxTask ⇒ ISO15765_TxStateTask ⇒ ISO15765_CanTransmitMsg ⇒ IF_CAN_TransmitMsg ⇒ IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   ISO15765_TxTask +
    • >>   ISO15765_RxTask +
    +
    [Called By]
    • >>   CanTask_TimerProcess +
    + +

    ISO15765_Transmit (Thumb, 98 bytes, Stack size 8 bytes, iso15765-2.o(i.ISO15765_Transmit)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = ISO15765_Transmit +
    +
    [Called By]
    • >>   Uds_TransmitResponse +
    + +

    LED_Init (Thumb, 368 bytes, Stack size 8 bytes, led.o(i.LED_Init)) +

    [Stack]

    • Max Depth = 32
    • Call Chain = LED_Init ⇒ GPIO_Init +
    +
    [Calls]
    • >>   RCC_APB2PeriphClockCmd +
    • >>   GPIO_SetBits +
    • >>   GPIO_ResetBits +
    • >>   GPIO_PinRemapConfig +
    • >>   GPIO_Init +
    +
    [Called By]
    • >>   main +
    + +

    MemManage_Handler (Thumb, 4 bytes, Stack size 0 bytes, stm32f10x_it.o(i.MemManage_Handler)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    NMI_Handler (Thumb, 2 bytes, Stack size 0 bytes, stm32f10x_it.o(i.NMI_Handler)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    NVIC_Configuration (Thumb, 12 bytes, Stack size 8 bytes, dev_sys.o(i.NVIC_Configuration)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = NVIC_Configuration +
    +
    [Calls]
    • >>   NVIC_PriorityGroupConfig +
    +
    [Called By]
    • >>   main +
    + +

    NVIC_Init (Thumb, 100 bytes, Stack size 16 bytes, misc.o(i.NVIC_Init)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = NVIC_Init +
    +
    [Called By]
    • >>   CAN2_Mode_Init +
    + +

    NVIC_PriorityGroupConfig (Thumb, 10 bytes, Stack size 0 bytes, misc.o(i.NVIC_PriorityGroupConfig)) +

    [Called By]

    • >>   NVIC_Configuration +
    + +

    PWR_BackupAccessCmd (Thumb, 6 bytes, Stack size 0 bytes, stm32f10x_pwr.o(i.PWR_BackupAccessCmd)) +

    [Called By]

    • >>   BSP_BKP_Init +
    + +

    PendSV_Handler (Thumb, 2 bytes, Stack size 0 bytes, stm32f10x_it.o(i.PendSV_Handler)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    RCC_APB1PeriphClockCmd (Thumb, 26 bytes, Stack size 0 bytes, stm32f10x_rcc.o(i.RCC_APB1PeriphClockCmd)) +

    [Called By]

    • >>   CAN2_Mode_Init +
    • >>   BSP_BKP_Init +
    + +

    RCC_APB1PeriphResetCmd (Thumb, 26 bytes, Stack size 0 bytes, stm32f10x_rcc.o(i.RCC_APB1PeriphResetCmd)) +

    [Called By]

    • >>   CAN_DeInit +
    + +

    RCC_APB2PeriphClockCmd (Thumb, 26 bytes, Stack size 0 bytes, stm32f10x_rcc.o(i.RCC_APB2PeriphClockCmd)) +

    [Called By]

    • >>   CAN2_Mode_Init +
    • >>   bsp_InitI2C +
    • >>   LED_Init +
    + +

    RCC_GetClocksFreq (Thumb, 374 bytes, Stack size 24 bytes, stm32f10x_rcc.o(i.RCC_GetClocksFreq)) +

    [Stack]

    • Max Depth = 24
    • Call Chain = RCC_GetClocksFreq +
    +
    [Called By]
    • >>   main +
    + +

    SA_Compare (Thumb, 36 bytes, Stack size 16 bytes, uds_sa_c301.o(i.SA_Compare)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = SA_Compare +
    +
    [Called By]
    • >>   Diag_SecurityAccess +
    + +

    SA_GenerateKey (Thumb, 132 bytes, Stack size 20 bytes, uds_sa_c301.o(i.SA_GenerateKey)) +

    [Stack]

    • Max Depth = 20
    • Call Chain = SA_GenerateKey +
    +
    [Called By]
    • >>   Diag_SecurityAccess +
    + +

    SA_GenerateKeyFBL (Thumb, 130 bytes, Stack size 20 bytes, uds_sa_c301.o(i.SA_GenerateKeyFBL)) +

    [Stack]

    • Max Depth = 20
    • Call Chain = SA_GenerateKeyFBL +
    +
    [Called By]
    • >>   Diag_SecurityAccess +
    + +

    SA_Random (Thumb, 92 bytes, Stack size 24 bytes, uds_sa_c301.o(i.SA_Random)) +

    [Stack]

    • Max Depth = 24
    • Call Chain = SA_Random +
    +
    [Calls]
    • >>   CanTask_GetSaRandom +
    +
    [Called By]
    • >>   Diag_SecurityAccess +
    + +

    SVC_Handler (Thumb, 2 bytes, Stack size 0 bytes, stm32f10x_it.o(i.SVC_Handler)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    SysTick_Handler (Thumb, 64 bytes, Stack size 0 bytes, dev_sys.o(i.SysTick_Handler)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    SysTick_Init (Thumb, 92 bytes, Stack size 12 bytes, dev_sys.o(i.SysTick_Init)) +

    [Stack]

    • Max Depth = 12
    • Call Chain = SysTick_Init +
    +
    [Called By]
    • >>   main +
    + +

    SystemInit (Thumb, 92 bytes, Stack size 8 bytes, system_stm32f10x.o(i.SystemInit)) +

    [Stack]

    • Max Depth = 28
    • Call Chain = SystemInit ⇒ SetSysClock ⇒ SetSysClockTo72 +
    +
    [Calls]
    • >>   SetSysClock +
    +
    [Called By]
    • >>   main +
    +
    [Address Reference Count : 1]
    • startup_stm32f10x_cl.o(.text) +
    +

    TickOut (Thumb, 58 bytes, Stack size 0 bytes, dev_sys.o(i.TickOut)) +

    [Called By]

    • >>   CAN2_SCE_IRQHandler +
    + +

    TimeTaskDispatch_Flag (Thumb, 318 bytes, Stack size 0 bytes, dev_sys.o(i.TimeTaskDispatch_Flag)) +

    [Called By]

    • >>   main +
    + +

    UDS_ForcPendingReset (Thumb, 12 bytes, Stack size 0 bytes, uds.o(i.UDS_ForcPendingReset)) +

    [Called By]

    • >>   Uds_ProcessFinished +
    • >>   Uds_PowerOnInit +
    + +

    Uds_CheckAdrrType (Thumb, 16 bytes, Stack size 0 bytes, uds.o(i.Uds_CheckAdrrType)) +

    [Called By]

    • >>   Diag_WriteDataByIdentifier +
    • >>   Diag_SecurityAccess +
    • >>   Diag_RoutineControl +
    • >>   Diag_ReadDataByIdentifier +
    • >>   Diag_EcuReset +
    • >>   Diag_ControlDTCSetting +
    • >>   Diag_CommunicationControl +
    • >>   Uds_TesterPresent +
    • >>   Uds_DiagControlSession +
    + +

    Uds_CommunicationControl (Thumb, 12 bytes, Stack size 8 bytes, uds.o(i.Uds_CommunicationControl)) +

    [Stack]

    • Max Depth = 40
    • Call Chain = Uds_CommunicationControl ⇒ Diag_CommunicationControl ⇒ Uds_ProcessFinished +
    +
    [Calls]
    • >>   Diag_CommunicationControl +
    +
    [Address Reference Count : 1]
    • canconfig_c301.o(.constdata) +
    +

    Uds_ControlDTCSetting (Thumb, 12 bytes, Stack size 8 bytes, uds.o(i.Uds_ControlDTCSetting)) +

    [Stack]

    • Max Depth = 32
    • Call Chain = Uds_ControlDTCSetting ⇒ Diag_ControlDTCSetting ⇒ Uds_ProcessFinished +
    +
    [Calls]
    • >>   Diag_ControlDTCSetting +
    +
    [Address Reference Count : 1]
    • canconfig_c301.o(.constdata) +
    +

    Uds_CopyToCAN (Thumb, 22 bytes, Stack size 16 bytes, uds.o(i.Uds_CopyToCAN)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = Uds_CopyToCAN +
    +
    [Calls]
    • >>   Uds_CopyToCanMemCpy +
    +
    [Address Reference Count : 1]
    • iso15765-2_entry.o(.data) +
    +

    Uds_DiagControlSession (Thumb, 232 bytes, Stack size 24 bytes, uds.o(i.Uds_DiagControlSession)) +

    [Stack]

    • Max Depth = 104
    • Call Chain = Uds_DiagControlSession ⇒ Uds_SetState ⇒ Diag_CheckValidApp1 ⇒ ee_ReadBytes ⇒ IIC_Read_Byte ⇒ IIC_NAck +
    +
    [Calls]
    • >>   Diag_AppDataInit +
    • >>   CanTask_SetStayInBootFlagValue +
    • >>   Uds_SetNRC +
    • >>   Uds_ResponseEnable +
    • >>   Uds_ProcessFinished +
    • >>   Uds_CheckAdrrType +
    • >>   Uds_SetState +
    +
    [Address Reference Count : 1]
    • canconfig_c301.o(.constdata) +
    +

    Uds_ECUReset (Thumb, 12 bytes, Stack size 8 bytes, uds.o(i.Uds_ECUReset)) +

    [Stack]

    • Max Depth = 32
    • Call Chain = Uds_ECUReset ⇒ Diag_EcuReset ⇒ Uds_ProcessFinished +
    +
    [Calls]
    • >>   Diag_EcuReset +
    +
    [Address Reference Count : 1]
    • canconfig_c301.o(.constdata) +
    +

    Uds_ForceTransmitResPending (Thumb, 42 bytes, Stack size 8 bytes, uds.o(i.Uds_ForceTransmitResPending)) +

    [Stack]

    • Max Depth = 288
    • Call Chain = Uds_ForceTransmitResPending ⇒ ISO15765_CanTransmitMsgWithDlc ⇒ IF_CAN_TransmitMsg ⇒ IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   ISO15765_CanTransmitMsgWithDlc +
    +
    [Called By]
    • >>   Diag_FlashCalcCRC +
    • >>   Diag_RoutineControl +
    + +

    Uds_GetCurSessionAccessStatus (Thumb, 6 bytes, Stack size 0 bytes, uds.o(i.Uds_GetCurSessionAccessStatus)) +

    [Called By]

    • >>   Diag_RoutineControl +
    • >>   CanTask_ReprogrammingCheck +
    + +

    Uds_GetCurSessionState (Thumb, 10 bytes, Stack size 0 bytes, uds.o(i.Uds_GetCurSessionState)) +

    [Called By]

    • >>   Diag_SecurityAccess +
    • >>   Uds_TransSessionType +
    • >>   Uds_SetState +
    • >>   Uds_Scheduler +
    + +

    Uds_GetNRC (Thumb, 6 bytes, Stack size 0 bytes, uds.o(i.Uds_GetNRC)) +

    [Called By]

    • >>   Diag_RequestDownload +
    • >>   Diag_ReadDataByIdentifier +
    + +

    Uds_PhysFuncGetBuffer (Thumb, 78 bytes, Stack size 24 bytes, uds.o(i.Uds_PhysFuncGetBuffer)) +

    [Stack]

    • Max Depth = 24
    • Call Chain = Uds_PhysFuncGetBuffer +
    +
    [Calls]
    • >>   ISO15765_RxSetFCStatus +
    • >>   Uds_NetLayerStartRec +
    +
    [Address Reference Count : 1]
    • iso15765-2_entry.o(.data) +
    +

    Uds_PhysReqInd (Thumb, 24 bytes, Stack size 8 bytes, uds.o(i.Uds_PhysReqInd)) +

    [Stack]

    • Max Depth = 24
    • Call Chain = Uds_PhysReqInd ⇒ ISO15765_RxResetBus ⇒ ISO15765_RxInit +
    +
    [Calls]
    • >>   ISO15765_RxResetBus +
    • >>   Uds_NetLayerEndOfRec +
    +
    [Address Reference Count : 1]
    • iso15765-2_entry.o(.data) +
    +

    Uds_PhysRxErrorIndication (Thumb, 12 bytes, Stack size 8 bytes, uds.o(i.Uds_PhysRxErrorIndication)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = Uds_PhysRxErrorIndication +
    +
    [Calls]
    • >>   Uds_NetLayerEndOfRec +
    +
    [Address Reference Count : 1]
    • iso15765-2_entry.o(.data) +
    +

    Uds_PowerOnInit (Thumb, 128 bytes, Stack size 8 bytes, uds.o(i.Uds_PowerOnInit)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = Uds_PowerOnInit +
    +
    [Calls]
    • >>   Diag_AppDataInit +
    • >>   UDS_ForcPendingReset +
    +
    [Called By]
    • >>   CanTask_InitProcess +
    + +

    Uds_ProcessFinished (Thumb, 94 bytes, Stack size 8 bytes, uds.o(i.Uds_ProcessFinished)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = Uds_ProcessFinished +
    +
    [Calls]
    • >>   UDS_ForcPendingReset +
    +
    [Called By]
    • >>   Diag_WriteDataByIdentifier +
    • >>   Diag_TransferData +
    • >>   Diag_SecurityAccess +
    • >>   Diag_RoutineControl +
    • >>   Diag_RequestTransferExit +
    • >>   Diag_RequestDownload +
    • >>   Diag_ReadDataByIdentifier +
    • >>   Diag_EcuReset +
    • >>   Diag_ControlDTCSetting +
    • >>   Diag_CommunicationControl +
    • >>   Uds_TesterPresent +
    • >>   Uds_DiagControlSession +
    • >>   Uds_Scheduler +
    + +

    Uds_ReadDataByIdentifier (Thumb, 12 bytes, Stack size 8 bytes, uds.o(i.Uds_ReadDataByIdentifier)) +

    [Stack]

    • Max Depth = 160
    • Call Chain = Uds_ReadDataByIdentifier ⇒ Diag_ReadDataByIdentifier ⇒ Uds_ProcessFinished +
    +
    [Calls]
    • >>   Diag_ReadDataByIdentifier +
    +
    [Address Reference Count : 1]
    • canconfig_c301.o(.constdata) +
    +

    Uds_RequestDownload (Thumb, 12 bytes, Stack size 8 bytes, uds.o(i.Uds_RequestDownload)) +

    [Stack]

    • Max Depth = 48
    • Call Chain = Uds_RequestDownload ⇒ Diag_RequestDownload ⇒ Uds_ProcessFinished +
    +
    [Calls]
    • >>   Diag_RequestDownload +
    +
    [Address Reference Count : 1]
    • canconfig_c301.o(.constdata) +
    +

    Uds_RequestTransferExit (Thumb, 12 bytes, Stack size 8 bytes, uds.o(i.Uds_RequestTransferExit)) +

    [Stack]

    • Max Depth = 352
    • Call Chain = Uds_RequestTransferExit ⇒ Diag_RequestTransferExit ⇒ Diag_FlashCalcCRC ⇒ Uds_ForceTransmitResPending ⇒ ISO15765_CanTransmitMsgWithDlc ⇒ IF_CAN_TransmitMsg ⇒ IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   Diag_RequestTransferExit +
    +
    [Address Reference Count : 1]
    • canconfig_c301.o(.constdata) +
    +

    Uds_ResponseEnable (Thumb, 10 bytes, Stack size 0 bytes, uds.o(i.Uds_ResponseEnable)) +

    [Called By]

    • >>   Diag_EcuReset +
    • >>   Diag_ControlDTCSetting +
    • >>   Diag_CommunicationControl +
    • >>   Uds_TesterPresent +
    • >>   Uds_DiagControlSession +
    • >>   Uds_TransmitResponse +
    + +

    Uds_RoutineControl (Thumb, 12 bytes, Stack size 8 bytes, uds.o(i.Uds_RoutineControl)) +

    [Stack]

    • Max Depth = 344
    • Call Chain = Uds_RoutineControl ⇒ Diag_RoutineControl ⇒ Uds_ForceTransmitResPending ⇒ ISO15765_CanTransmitMsgWithDlc ⇒ IF_CAN_TransmitMsg ⇒ IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   Diag_RoutineControl +
    +
    [Address Reference Count : 1]
    • canconfig_c301.o(.constdata) +
    +

    Uds_SecurityAccess (Thumb, 12 bytes, Stack size 8 bytes, uds.o(i.Uds_SecurityAccess)) +

    [Stack]

    • Max Depth = 72
    • Call Chain = Uds_SecurityAccess ⇒ Diag_SecurityAccess ⇒ SA_Random +
    +
    [Calls]
    • >>   Diag_SecurityAccess +
    +
    [Address Reference Count : 1]
    • canconfig_c301.o(.constdata) +
    +

    Uds_SetNRC (Thumb, 6 bytes, Stack size 0 bytes, uds.o(i.Uds_SetNRC)) +

    [Called By]

    • >>   Diag_WriteDataByIdentifier +
    • >>   Diag_TransferData +
    • >>   Diag_SecurityAccess +
    • >>   Diag_RoutineControl +
    • >>   Diag_RequestTransferExit +
    • >>   Diag_RequestDownload +
    • >>   Diag_ReadDataByIdentifier +
    • >>   Diag_EcuReset +
    • >>   Diag_ControlDTCSetting +
    • >>   Diag_CommunicationControl +
    • >>   Uds_TesterPresent +
    • >>   Uds_DiagControlSession +
    + +

    Uds_SetProtect (Thumb, 6 bytes, Stack size 0 bytes, uds.o(i.Uds_SetProtect)) +

    [Called By]

    • >>   Diag_SecurityAccess +
    + +

    Uds_SetSupFuncEnableFlag (Thumb, 8 bytes, Stack size 0 bytes, uds.o(i.Uds_SetSupFuncEnableFlag)) +

    [Called By]

    • >>   Diag_WriteDataByIdentifier +
    • >>   Diag_SecurityAccess +
    • >>   Diag_RoutineControl +
    • >>   Diag_ReadDataByIdentifier +
    • >>   Diag_EcuReset +
    • >>   Diag_ControlDTCSetting +
    • >>   Diag_CommunicationControl +
    • >>   Uds_TesterPresent +
    + +

    Uds_StateTask (Thumb, 14 bytes, Stack size 8 bytes, uds.o(i.Uds_StateTask)) +

    [Stack]

    • Max Depth = 104
    • Call Chain = Uds_StateTask ⇒ Uds_ContextTask ⇒ Uds_SetState ⇒ Diag_CheckValidApp1 ⇒ ee_ReadBytes ⇒ IIC_Read_Byte ⇒ IIC_NAck +
    +
    [Calls]
    • >>   Uds_ContextTask +
    +
    [Called By]
    • >>   CanTask_UdsStateProcess +
    + +

    Uds_Task (Thumb, 8 bytes, Stack size 8 bytes, uds.o(i.Uds_Task)) +

    [Stack]

    • Max Depth = 96
    • Call Chain = Uds_Task ⇒ Uds_TimerTask ⇒ Uds_SetState ⇒ Diag_CheckValidApp1 ⇒ ee_ReadBytes ⇒ IIC_Read_Byte ⇒ IIC_NAck +
    +
    [Calls]
    • >>   Uds_TimerTask +
    +
    [Called By]
    • >>   CanTask_TimerProcess +
    + +

    Uds_TesterPresent (Thumb, 84 bytes, Stack size 16 bytes, uds.o(i.Uds_TesterPresent)) +

    [Stack]

    • Max Depth = 24
    • Call Chain = Uds_TesterPresent ⇒ Uds_ProcessFinished +
    +
    [Calls]
    • >>   Uds_SetSupFuncEnableFlag +
    • >>   Uds_SetNRC +
    • >>   Uds_ResponseEnable +
    • >>   Uds_ProcessFinished +
    • >>   Uds_CheckAdrrType +
    +
    [Address Reference Count : 1]
    • canconfig_c301.o(.constdata) +
    +

    Uds_TransSessionType (Thumb, 76 bytes, Stack size 8 bytes, uds.o(i.Uds_TransSessionType)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = Uds_TransSessionType +
    +
    [Calls]
    • >>   CanTask_FBLInit +
    • >>   Uds_GetCurSessionState +
    • >>   Uds_SetStateSessionAccess +
    • >>   Uds_SetFlashProtect +
    +
    [Called By]
    • >>   Uds_SetState +
    + +

    Uds_TransferData (Thumb, 12 bytes, Stack size 8 bytes, uds.o(i.Uds_TransferData)) +

    [Stack]

    • Max Depth = 64
    • Call Chain = Uds_TransferData ⇒ Diag_TransferData ⇒ Diag_RamWrite ⇒ Diag_MemCpy +
    +
    [Calls]
    • >>   Diag_TransferData +
    +
    [Address Reference Count : 1]
    • canconfig_c301.o(.constdata) +
    +

    Uds_TxConfirmation (Thumb, 24 bytes, Stack size 16 bytes, uds.o(i.Uds_TxConfirmation)) +

    [Stack]

    • Max Depth = 32
    • Call Chain = Uds_TxConfirmation ⇒ Uds_NetLayerEndOfTrans +
    +
    [Calls]
    • >>   Uds_NetLayerEndOfTrans +
    +
    [Called By]
    • >>   Uds_TxErrorIndication +
    • >>   Uds_TransmitResponse +
    +
    [Address Reference Count : 1]
    • iso15765-2_entry.o(.data) +
    +

    Uds_TxErrorIndication (Thumb, 12 bytes, Stack size 8 bytes, uds.o(i.Uds_TxErrorIndication)) +

    [Stack]

    • Max Depth = 40
    • Call Chain = Uds_TxErrorIndication ⇒ Uds_TxConfirmation ⇒ Uds_NetLayerEndOfTrans +
    +
    [Calls]
    • >>   Uds_TxConfirmation +
    +
    [Address Reference Count : 1]
    • iso15765-2_entry.o(.data) +
    +

    Uds_WriteDataByIdentifier (Thumb, 12 bytes, Stack size 8 bytes, uds.o(i.Uds_WriteDataByIdentifier)) +

    [Stack]

    • Max Depth = 48
    • Call Chain = Uds_WriteDataByIdentifier ⇒ Diag_WriteDataByIdentifier ⇒ Diag_MemCopy +
    +
    [Calls]
    • >>   Diag_WriteDataByIdentifier +
    +
    [Address Reference Count : 1]
    • canconfig_c301.o(.constdata) +
    +

    UsageFault_Handler (Thumb, 4 bytes, Stack size 0 bytes, stm32f10x_it.o(i.UsageFault_Handler)) +
    [Address Reference Count : 1]

    • startup_stm32f10x_cl.o(RESET) +
    +

    _Bzip2_InitTable (Thumb, 56 bytes, Stack size 0 bytes, uds_sa_c301.o(i._Bzip2_InitTable)) +

    [Called By]

    • >>   Bzip2_Init +
    + +

    __scatterload_copy (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_copy), UNUSED) + +

    __scatterload_null (Thumb, 2 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_null), UNUSED) + +

    __scatterload_zeroinit (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_zeroinit), UNUSED) + +

    bsp_InitI2C (Thumb, 88 bytes, Stack size 8 bytes, bsp_i2c_gpio.o(i.bsp_InitI2C)) +

    [Stack]

    • Max Depth = 32
    • Call Chain = bsp_InitI2C ⇒ GPIO_Init +
    +
    [Calls]
    • >>   RCC_APB2PeriphClockCmd +
    • >>   GPIO_SetBits +
    • >>   GPIO_Init +
    +
    [Called By]
    • >>   ee_Init +
    + +

    ee_Init (Thumb, 8 bytes, Stack size 8 bytes, 24cxx.o(i.ee_Init)) +

    [Stack]

    • Max Depth = 40
    • Call Chain = ee_Init ⇒ bsp_InitI2C ⇒ GPIO_Init +
    +
    [Calls]
    • >>   bsp_InitI2C +
    +
    [Called By]
    • >>   main +
    + +

    ee_ReadBytes (Thumb, 134 bytes, Stack size 24 bytes, 24cxx.o(i.ee_ReadBytes)) +

    [Stack]

    • Max Depth = 48
    • Call Chain = ee_ReadBytes ⇒ IIC_Read_Byte ⇒ IIC_NAck +
    +
    [Calls]
    • >>   IIC_Wait_Ack +
    • >>   IIC_Stop +
    • >>   IIC_Start +
    • >>   IIC_Send_Byte +
    • >>   IIC_Read_Byte +
    +
    [Called By]
    • >>   Diag_CheckValidApp1 +
    + +

    flashInit (Thumb, 8 bytes, Stack size 0 bytes, dev_flashapi.o(i.flashInit)) +

    [Called By]

    • >>   Diag_RequestEraseFlash +
    • >>   Diag_DataProgram +
    • >>   Diag_ClrAPP1UpdateMark +
    + +

    flashdnit (Thumb, 16 bytes, Stack size 0 bytes, dev_flashapi.o(i.flashdnit)) +

    [Called By]

    • >>   Diag_RequestEraseFlash +
    • >>   Diag_DataProgram +
    • >>   Diag_ClrAPP1UpdateMark +
    + +

    main (Thumb, 194 bytes, Stack size 24 bytes, main.o(i.main)) +

    [Stack]

    • Max Depth = 352
    • Call Chain = main ⇒ Uds_SysTick_Process_10ms ⇒ Can_Task ⇒ CanTask_TimerProcess ⇒ ISO15765_Task ⇒ ISO15765_TxTask ⇒ ISO15765_TxStateTask ⇒ ISO15765_CanTransmitMsg ⇒ IF_CAN_TransmitMsg ⇒ IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   RCC_GetClocksFreq +
    • >>   GPIO_ResetBits +
    • >>   SystemInit +
    • >>   TimeTaskDispatch_Flag +
    • >>   SysTick_Init +
    • >>   NVIC_Configuration +
    • >>   CAN2_Mode_Init +
    • >>   ee_Init +
    • >>   LED_Init +
    • >>   Diag_HndUpdataEV +
    • >>   CanTask_InitProcess +
    • >>   BSP_BKP_Init +
    • >>   uds_SysTick_Process_1ms +
    • >>   Uds_SysTick_Process_10ms +
    +
    [Address Reference Count : 1]
    • entry9a.o(.ARM.Collect$$$$0000000B) +

    +

    +Local Symbols +

    +

    CheckITStatus (Thumb, 18 bytes, Stack size 0 bytes, stm32f10x_can.o(i.CheckITStatus)) +

    [Called By]

    • >>   CAN_GetITStatus +
    + +

    i2c_Delay (Thumb, 14 bytes, Stack size 0 bytes, bsp_i2c_gpio.o(i.i2c_Delay)) +

    [Called By]

    • >>   IIC_NAck +
    • >>   IIC_Ack +
    • >>   IIC_Wait_Ack +
    • >>   IIC_Stop +
    • >>   IIC_Start +
    • >>   IIC_Send_Byte +
    • >>   IIC_Read_Byte +
    + +

    can_bus_open_hook (Thumb, 18 bytes, Stack size 0 bytes, can2.o(i.can_bus_open_hook)) +

    [Called By]

    • >>   CAN2_Mode_Init +
    + +

    can_bus_ready_hook (Thumb, 34 bytes, Stack size 0 bytes, can2.o(i.can_bus_ready_hook)) +

    [Called By]

    • >>   CAN2_RX1_IRQHandler +
    + +

    can_bus_send_ready (Thumb, 32 bytes, Stack size 0 bytes, can2.o(i.can_bus_send_ready)) +

    [Called By]

    • >>   Can2_Send_Message +
    + +

    SetSysClock (Thumb, 8 bytes, Stack size 8 bytes, system_stm32f10x.o(i.SetSysClock)) +

    [Stack]

    • Max Depth = 20
    • Call Chain = SetSysClock ⇒ SetSysClockTo72 +
    +
    [Calls]
    • >>   SetSysClockTo72 +
    +
    [Called By]
    • >>   SystemInit +
    + +

    SetSysClockTo72 (Thumb, 266 bytes, Stack size 12 bytes, system_stm32f10x.o(i.SetSysClockTo72)) +

    [Stack]

    • Max Depth = 12
    • Call Chain = SetSysClockTo72 +
    +
    [Called By]
    • >>   SetSysClock +
    + +

    Uds_ContextTask (Thumb, 226 bytes, Stack size 16 bytes, uds.o(i.Uds_ContextTask)) +

    [Stack]

    • Max Depth = 96
    • Call Chain = Uds_ContextTask ⇒ Uds_SetState ⇒ Diag_CheckValidApp1 ⇒ ee_ReadBytes ⇒ IIC_Read_Byte ⇒ IIC_NAck +
    +
    [Calls]
    • >>   Diag_MemCopy +
    • >>   Uds_TransmitResponse +
    • >>   Uds_SetState +
    • >>   Uds_Scheduler +
    +
    [Called By]
    • >>   Uds_StateTask +
    + +

    Uds_CopyToCanMemCpy (Thumb, 16 bytes, Stack size 0 bytes, uds.o(i.Uds_CopyToCanMemCpy)) +

    [Called By]

    • >>   Uds_CopyToCAN +
    + +

    Uds_NetLayerEndOfRec (Thumb, 44 bytes, Stack size 0 bytes, uds.o(i.Uds_NetLayerEndOfRec)) +

    [Called By]

    • >>   Uds_PhysRxErrorIndication +
    • >>   Uds_PhysReqInd +
    + +

    Uds_NetLayerEndOfTrans (Thumb, 44 bytes, Stack size 16 bytes, uds.o(i.Uds_NetLayerEndOfTrans)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = Uds_NetLayerEndOfTrans +
    +
    [Calls]
    • >>   Uds_PostProcessing +
    +
    [Called By]
    • >>   Uds_TxConfirmation +
    + +

    Uds_NetLayerStartRec (Thumb, 24 bytes, Stack size 0 bytes, uds.o(i.Uds_NetLayerStartRec)) +

    [Called By]

    • >>   Uds_PhysFuncGetBuffer +
    + +

    Uds_PostProcessing (Thumb, 24 bytes, Stack size 0 bytes, uds.o(i.Uds_PostProcessing)) +

    [Called By]

    • >>   Uds_NetLayerEndOfTrans +
    + +

    Uds_Scheduler (Thumb, 1436 bytes, Stack size 40 bytes, uds.o(i.Uds_Scheduler)) +

    [Stack]

    • Max Depth = 48
    • Call Chain = Uds_Scheduler ⇒ Uds_ProcessFinished +
    +
    [Calls]
    • >>   Uds_ProcessFinished +
    • >>   Uds_GetCurSessionState +
    +
    [Called By]
    • >>   Uds_ContextTask +
    + +

    Uds_SetFlashProtect (Thumb, 6 bytes, Stack size 0 bytes, uds.o(i.Uds_SetFlashProtect)) +

    [Called By]

    • >>   Uds_TransSessionType +
    + +

    Uds_SetState (Thumb, 78 bytes, Stack size 16 bytes, uds.o(i.Uds_SetState)) +

    [Stack]

    • Max Depth = 80
    • Call Chain = Uds_SetState ⇒ Diag_CheckValidApp1 ⇒ ee_ReadBytes ⇒ IIC_Read_Byte ⇒ IIC_NAck +
    +
    [Calls]
    • >>   Diag_CheckValidApp1 +
    • >>   CanTask_SetStayInBootFlagValue +
    • >>   CanTask_IsAppBeenErased +
    • >>   Uds_TransSessionType +
    • >>   Uds_GetCurSessionState +
    +
    [Called By]
    • >>   Uds_DiagControlSession +
    • >>   Uds_TimerTask +
    • >>   Uds_ContextTask +
    + +

    Uds_SetStateSessionAccess (Thumb, 6 bytes, Stack size 0 bytes, uds.o(i.Uds_SetStateSessionAccess)) +

    [Called By]

    • >>   Uds_TransSessionType +
    + +

    Uds_TimerTask (Thumb, 406 bytes, Stack size 8 bytes, uds.o(i.Uds_TimerTask)) +

    [Stack]

    • Max Depth = 88
    • Call Chain = Uds_TimerTask ⇒ Uds_SetState ⇒ Diag_CheckValidApp1 ⇒ ee_ReadBytes ⇒ IIC_Read_Byte ⇒ IIC_NAck +
    +
    [Calls]
    • >>   BSP_vSystemReset +
    • >>   Uds_TransmitResPending +
    • >>   Uds_SetState +
    +
    [Called By]
    • >>   Uds_Task +
    + +

    Uds_TransmitResPending (Thumb, 28 bytes, Stack size 8 bytes, uds.o(i.Uds_TransmitResPending)) +

    [Stack]

    • Max Depth = 56
    • Call Chain = Uds_TransmitResPending ⇒ Uds_TransmitResponse ⇒ Uds_TxConfirmation ⇒ Uds_NetLayerEndOfTrans +
    +
    [Calls]
    • >>   Uds_TransmitResponse +
    +
    [Called By]
    • >>   Uds_TimerTask +
    + +

    Uds_TransmitResponse (Thumb, 40 bytes, Stack size 16 bytes, uds.o(i.Uds_TransmitResponse)) +

    [Stack]

    • Max Depth = 48
    • Call Chain = Uds_TransmitResponse ⇒ Uds_TxConfirmation ⇒ Uds_NetLayerEndOfTrans +
    +
    [Calls]
    • >>   ISO15765_Transmit +
    • >>   Uds_TxConfirmation +
    • >>   Uds_ResponseEnable +
    +
    [Called By]
    • >>   Uds_TransmitResPending +
    • >>   Uds_ContextTask +
    + +

    ISO15765_Init (Thumb, 12 bytes, Stack size 8 bytes, iso15765-2.o(i.ISO15765_Init)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = ISO15765_Init ⇒ ISO15765_TxInit +
    +
    [Calls]
    • >>   ISO15765_TxInit +
    • >>   ISO15765_RxInit +
    +
    [Called By]
    • >>   ISO15765_InitPowerOn +
    + +

    ISO15765_PreCanTransmit (Thumb, 486 bytes, Stack size 24 bytes, iso15765-2.o(i.ISO15765_PreCanTransmit)) +

    [Stack]

    • Max Depth = 24
    • Call Chain = ISO15765_PreCanTransmit +
    +
    [Calls]
    • >>   ISO15765_SetOptimalDlc +
    +
    [Called By]
    • >>   ISO15765_TxStateTask +
    + +

    ISO15765_PreTransmitClearCanDataPtr (Thumb, 22 bytes, Stack size 0 bytes, iso15765-2.o(i.ISO15765_PreTransmitClearCanDataPtr)) +

    [Called By]

    • >>   ISO15765_TxStateTask +
    + +

    ISO15765_RxFinishProcess (Thumb, 54 bytes, Stack size 0 bytes, iso15765-2.o(i.ISO15765_RxFinishProcess)) +

    [Called By]

    • >>   ISO15765_DrvConfirmation +
    + +

    ISO15765_RxInit (Thumb, 98 bytes, Stack size 8 bytes, iso15765-2.o(i.ISO15765_RxInit)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = ISO15765_RxInit +
    +
    [Calls]
    • >>   IF_CAN_CancelTransmitMsg +
    +
    [Called By]
    • >>   ISO15765_Precopy +
    • >>   ISO15765_RxTask +
    • >>   ISO15765_Init +
    • >>   ISO15765_RxResetBus +
    + +

    ISO15765_RxStateTask (Thumb, 226 bytes, Stack size 16 bytes, iso15765-2.o(i.ISO15765_RxStateTask)) +

    [Stack]

    • Max Depth = 288
    • Call Chain = ISO15765_RxStateTask ⇒ ISO15765_CanTransmitMsg ⇒ IF_CAN_TransmitMsg ⇒ IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   ISO15765_CanTransmitMsg +
    +
    [Called By]
    • >>   ISO15765_Precopy +
    • >>   ISO15765_RxTask +
    + +

    ISO15765_RxTask (Thumb, 122 bytes, Stack size 8 bytes, iso15765-2.o(i.ISO15765_RxTask)) +

    [Stack]

    • Max Depth = 296
    • Call Chain = ISO15765_RxTask ⇒ ISO15765_RxStateTask ⇒ ISO15765_CanTransmitMsg ⇒ IF_CAN_TransmitMsg ⇒ IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   ISO15765_RxStateTask +
    • >>   ISO15765_RxInit +
    +
    [Called By]
    • >>   ISO15765_Task +
    + +

    ISO15765_SetOptimalDlc (Thumb, 50 bytes, Stack size 0 bytes, iso15765-2.o(i.ISO15765_SetOptimalDlc)) +

    [Called By]

    • >>   ISO15765_PreCanTransmit +
    + +

    ISO15765_TransmitOfCF (Thumb, 72 bytes, Stack size 0 bytes, iso15765-2.o(i.ISO15765_TransmitOfCF)) +

    [Called By]

    • >>   ISO15765_TxTask +
    + +

    ISO15765_TxFinishProcess (Thumb, 126 bytes, Stack size 8 bytes, iso15765-2.o(i.ISO15765_TxFinishProcess)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = ISO15765_TxFinishProcess +
    +
    [Called By]
    • >>   ISO15765_DrvConfirmation +
    + +

    ISO15765_TxInit (Thumb, 114 bytes, Stack size 8 bytes, iso15765-2.o(i.ISO15765_TxInit)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = ISO15765_TxInit +
    +
    [Calls]
    • >>   IF_CAN_CancelTransmitMsg +
    +
    [Called By]
    • >>   ISO15765_Precopy +
    • >>   ISO15765_TxTask +
    • >>   ISO15765_Init +
    + +

    ISO15765_TxStateTask (Thumb, 232 bytes, Stack size 16 bytes, iso15765-2.o(i.ISO15765_TxStateTask)) +

    [Stack]

    • Max Depth = 288
    • Call Chain = ISO15765_TxStateTask ⇒ ISO15765_CanTransmitMsg ⇒ IF_CAN_TransmitMsg ⇒ IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   ISO15765_CanTransmitMsg +
    • >>   ISO15765_PreTransmitClearCanDataPtr +
    • >>   ISO15765_PreCanTransmit +
    +
    [Called By]
    • >>   ISO15765_TxTask +
    + +

    ISO15765_TxTask (Thumb, 90 bytes, Stack size 8 bytes, iso15765-2.o(i.ISO15765_TxTask)) +

    [Stack]

    • Max Depth = 296
    • Call Chain = ISO15765_TxTask ⇒ ISO15765_TxStateTask ⇒ ISO15765_CanTransmitMsg ⇒ IF_CAN_TransmitMsg ⇒ IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   ISO15765_TxStateTask +
    • >>   ISO15765_TxInit +
    • >>   ISO15765_TransmitOfCF +
    +
    [Called By]
    • >>   ISO15765_Task +
    + +

    CanTrans_Delay (Thumb, 16 bytes, Stack size 0 bytes, can_transceiver.o(i.CanTrans_Delay)) +

    [Called By]

    • >>   CanTrans_GoToSleep +
    + +

    Diag_CommDisable (Thumb, 12 bytes, Stack size 0 bytes, diag_appl_c301.o(i.Diag_CommDisable)) +

    [Called By]

    • >>   Diag_CommunicationControl +
    + +

    Diag_CommEnable (Thumb, 12 bytes, Stack size 0 bytes, diag_appl_c301.o(i.Diag_CommEnable)) +

    [Called By]

    • >>   Diag_CommunicationControl +
    + +

    JumpToExecute (Thumb, 30 bytes, Stack size 8 bytes, main.o(i.JumpToExecute)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = JumpToExecute +
    +
    [Calls]
    • >>   __set_MSP +
    +
    [Called By]
    • >>   Sys_GotoApp +
    + +

    Sys_GotoApp (Thumb, 8 bytes, Stack size 8 bytes, main.o(i.Sys_GotoApp)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = Sys_GotoApp ⇒ JumpToExecute +
    +
    [Calls]
    • >>   JumpToExecute +
    +
    [Called By]
    • >>   Task_RunToApp +
    + +

    Task_RunToApp (Thumb, 44 bytes, Stack size 8 bytes, main.o(i.Task_RunToApp)) +

    [Stack]

    • Max Depth = 24
    • Call Chain = Task_RunToApp ⇒ Sys_GotoApp ⇒ JumpToExecute +
    +
    [Calls]
    • >>   Sys_GotoApp +
    +
    [Called By]
    • >>   Uds_SysTick_Process_10ms +
    + +

    Uds_SysTick_Process_10ms (Thumb, 12 bytes, Stack size 8 bytes, main.o(i.Uds_SysTick_Process_10ms)) +

    [Stack]

    • Max Depth = 328
    • Call Chain = Uds_SysTick_Process_10ms ⇒ Can_Task ⇒ CanTask_TimerProcess ⇒ ISO15765_Task ⇒ ISO15765_TxTask ⇒ ISO15765_TxStateTask ⇒ ISO15765_CanTransmitMsg ⇒ IF_CAN_TransmitMsg ⇒ IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   Can_Task +
    • >>   Task_RunToApp +
    +
    [Called By]
    • >>   main +
    + +

    uds_SysTick_Process_1ms (Thumb, 8 bytes, Stack size 8 bytes, main.o(i.uds_SysTick_Process_1ms)) +

    [Stack]

    • Max Depth = 120
    • Call Chain = uds_SysTick_Process_1ms ⇒ CanTask_UdsStateProcess ⇒ Uds_StateTask ⇒ Uds_ContextTask ⇒ Uds_SetState ⇒ Diag_CheckValidApp1 ⇒ ee_ReadBytes ⇒ IIC_Read_Byte ⇒ IIC_NAck +
    +
    [Calls]
    • >>   CanTask_UdsStateProcess +
    +
    [Called By]
    • >>   main +
    + +

    APP_CAN_MessageTypeHandle (Thumb, 92 bytes, Stack size 16 bytes, app_can.o(i.APP_CAN_MessageTypeHandle)) +

    [Stack]

    • Max Depth = 320
    • Call Chain = APP_CAN_MessageTypeHandle ⇒ ISO15765_Precopy ⇒ ISO15765_RxStateTask ⇒ ISO15765_CanTransmitMsg ⇒ IF_CAN_TransmitMsg ⇒ IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   ISO15765_Precopy +
    +
    [Called By]
    • >>   APP_CAN_FifoMessageReceive +
    + +

    CanTask_ReprogrammingCheck (Thumb, 26 bytes, Stack size 8 bytes, app_can.o(i.CanTask_ReprogrammingCheck)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = CanTask_ReprogrammingCheck +
    +
    [Calls]
    • >>   Uds_GetCurSessionAccessStatus +
    +
    [Called By]
    • >>   CanTask_TimerProcess +
    + +

    CanTask_SaRandomCounter (Thumb, 12 bytes, Stack size 0 bytes, app_can.o(i.CanTask_SaRandomCounter)) +

    [Called By]

    • >>   CanTask_TimerProcess +
    + +

    CanTask_TimerProcess (Thumb, 24 bytes, Stack size 8 bytes, app_can.o(i.CanTask_TimerProcess)) +

    [Stack]

    • Max Depth = 312
    • Call Chain = CanTask_TimerProcess ⇒ ISO15765_Task ⇒ ISO15765_TxTask ⇒ ISO15765_TxStateTask ⇒ ISO15765_CanTransmitMsg ⇒ IF_CAN_TransmitMsg ⇒ IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   ISO15765_Task +
    • >>   Uds_Task +
    • >>   CanTask_BusErrorDetection +
    • >>   CanTask_SaRandomCounter +
    • >>   CanTask_ReprogrammingCheck +
    +
    [Called By]
    • >>   Can_Task +
    + +

    IF_CAN_CopyDataAndStartTx (Thumb, 140 bytes, Stack size 120 bytes, app_can.o(i.IF_CAN_CopyDataAndStartTx)) +

    [Stack]

    • Max Depth = 240
    • Call Chain = IF_CAN_CopyDataAndStartTx ⇒ IF_CAN_SendCanData ⇒ Can2_Send_Message ⇒ CAN_TransmitStatus +
    +
    [Calls]
    • >>   __aeabi_memclr4 +
    • >>   IF_CAN_SendCanData +
    +
    [Called By]
    • >>   IF_CAN_TransmitMsg +
    +

    +

    +Undefined Global Symbols +


    diff --git a/boot_project/Objects/hongri_boot.lnp b/boot_project/Objects/hongri_boot.lnp new file mode 100644 index 0000000..0a0fb6c --- /dev/null +++ b/boot_project/Objects/hongri_boot.lnp @@ -0,0 +1,36 @@ +--cpu Cortex-M3 +".\objects\startup_stm32f10x_cl.o" +".\objects\core_cm3.o" +".\objects\misc.o" +".\objects\stm32f10x_gpio.o" +".\objects\stm32f10x_rcc.o" +".\objects\stm32f10x_can.o" +".\objects\stm32f10x_dma.o" +".\objects\stm32f10x_flash.o" +".\objects\stm32f10x_iwdg.o" +".\objects\stm32f10x_pwr.o" +".\objects\led.o" +".\objects\24cxx.o" +".\objects\bsp_i2c_gpio.o" +".\objects\can2.o" +".\objects\stm32f10x_it.o" +".\objects\system_stm32f10x.o" +".\objects\dev_flashapi.o" +".\objects\dev_crc32.o" +".\objects\dev_sys.o" +".\objects\dev_eerom.o" +".\objects\uds.o" +".\objects\iso15765-2.o" +".\objects\iso15765-2_entry.o" +".\objects\can_transceiver.o" +".\objects\diag_eeprom_c301.o" +".\objects\canconfig_c301.o" +".\objects\canctrl_c301.o" +".\objects\diag_appl_c301.o" +".\objects\uds_sa_c301.o" +".\objects\main.o" +".\objects\app_can.o" +--library_type=microlib --strict --scatter ".\link_sct\STM32F105Boot.sct" +--summary_stderr --info summarysizes --map --load_addr_map_info --xref --callgraph --symbols +--info sizes --info totals --info unused --info veneers +--list ".\Listings\hongri_boot.map" -o .\Objects\hongri_boot.axf \ No newline at end of file diff --git a/boot_project/Objects/hongri_boot.sct b/boot_project/Objects/hongri_boot.sct new file mode 100644 index 0000000000000000000000000000000000000000..2cc918800c58f453084bb3a2ded884b21bf5fcd8 GIT binary patch literal 8192 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 literal 0 HcmV?d00001 diff --git a/boot_project/Objects/hongri_boot_hongri_boot.dep b/boot_project/Objects/hongri_boot_hongri_boot.dep new file mode 100644 index 0000000..e7c5c03 --- /dev/null +++ b/boot_project/Objects/hongri_boot_hongri_boot.dep @@ -0,0 +1,482 @@ +Dependencies for Project 'hongri_boot', Target 'hongri_boot': (DO NOT MODIFY !) +F (..\boot_source\platform\CMSIS\ST\STM32F10x\Source\arm\startup_stm32f10x_cl.s)(0x67188B3E)(--cpu Cortex-M3 -g --apcs=interwork --pd "__MICROLIB SETA 1" -I.\RTE\_hongri_boot -IC:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include --pd "__UVISION_VERSION SETA 525" --pd "STM32F10X_CL SETA 1" --list .\listings\startup_stm32f10x_cl.lst --xref -o .\objects\startup_stm32f10x_cl.o --depend .\objects\startup_stm32f10x_cl.d) +F (..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport\core_cm3.c)(0x61605444)(--c99 -c --cpu Cortex-M3 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport -I ..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc -I ..\boot_source\platform\drivers\inc -I ..\boot_source\code_app\startup\inc -I ..\boot_source\code_app\driver\inc -I ..\boot_source\code_app\interface\inc -I ..\boot_source\code_app\service\CanStack\canBus_Com -I ..\boot_source\code_app\service\CanStack\canBus_hongri -I ..\boot_source\code_app\service\Eeprom\inc -I ..\boot_source\code_app\main\inc -I ..\boot_source\code_app\app_boot\inc --diag_suppress 236 -I.\RTE\_hongri_boot -IC:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F10X_CL -DUSE_STDPERIPH_DRIVER -DSTM32F10X_CL -DUSE_STM3210C_EVAL -o .\objects\core_cm3.o --omf_browse .\objects\core_cm3.crf --depend .\objects\core_cm3.d) +I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x599ECD2E) +F (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\src\misc.c)(0x521ED710)(--c99 -c --cpu Cortex-M3 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport -I ..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc -I ..\boot_source\platform\drivers\inc -I ..\boot_source\code_app\startup\inc -I ..\boot_source\code_app\driver\inc -I ..\boot_source\code_app\interface\inc -I ..\boot_source\code_app\service\CanStack\canBus_Com -I ..\boot_source\code_app\service\CanStack\canBus_hongri -I ..\boot_source\code_app\service\Eeprom\inc -I ..\boot_source\code_app\main\inc -I ..\boot_source\code_app\app_boot\inc --diag_suppress 236 -I.\RTE\_hongri_boot -IC:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F10X_CL -DUSE_STDPERIPH_DRIVER -DSTM32F10X_CL -DUSE_STM3210C_EVAL -o .\objects\misc.o --omf_browse .\objects\misc.crf --depend .\objects\misc.d) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\misc.h)(0x521ED710) +I (..\boot_source\code_app\startup\inc\stm32f10x.h)(0x671A25F3) +I (..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport\core_cm3.h)(0x61605444) +I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x599ECD2E) +I (..\boot_source\code_app\startup\inc\system_stm32f10x.h)(0x61605444) +I (..\boot_source\code_app\startup\inc\stm32f10x_libopt.h)(0x67177362) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_can.h)(0x67208686) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_gpio.h)(0x62D28C12) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_iwdg.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_pwr.h)(0x65F3EF70) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_rcc.h)(0x521ED710) +F (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\src\stm32f10x_gpio.c)(0x521ED710)(--c99 -c --cpu Cortex-M3 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport -I ..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc -I ..\boot_source\platform\drivers\inc -I ..\boot_source\code_app\startup\inc -I ..\boot_source\code_app\driver\inc -I ..\boot_source\code_app\interface\inc -I ..\boot_source\code_app\service\CanStack\canBus_Com -I ..\boot_source\code_app\service\CanStack\canBus_hongri -I ..\boot_source\code_app\service\Eeprom\inc -I ..\boot_source\code_app\main\inc -I ..\boot_source\code_app\app_boot\inc --diag_suppress 236 -I.\RTE\_hongri_boot -IC:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F10X_CL -DUSE_STDPERIPH_DRIVER -DSTM32F10X_CL -DUSE_STM3210C_EVAL -o .\objects\stm32f10x_gpio.o --omf_browse .\objects\stm32f10x_gpio.crf --depend .\objects\stm32f10x_gpio.d) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_gpio.h)(0x62D28C12) +I (..\boot_source\code_app\startup\inc\stm32f10x.h)(0x671A25F3) +I (..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport\core_cm3.h)(0x61605444) +I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x599ECD2E) +I (..\boot_source\code_app\startup\inc\system_stm32f10x.h)(0x61605444) +I (..\boot_source\code_app\startup\inc\stm32f10x_libopt.h)(0x67177362) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_can.h)(0x67208686) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_iwdg.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_pwr.h)(0x65F3EF70) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_rcc.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\misc.h)(0x521ED710) +F (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\src\stm32f10x_rcc.c)(0x521ED710)(--c99 -c --cpu Cortex-M3 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport -I ..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc -I ..\boot_source\platform\drivers\inc -I ..\boot_source\code_app\startup\inc -I ..\boot_source\code_app\driver\inc -I ..\boot_source\code_app\interface\inc -I ..\boot_source\code_app\service\CanStack\canBus_Com -I ..\boot_source\code_app\service\CanStack\canBus_hongri -I ..\boot_source\code_app\service\Eeprom\inc -I ..\boot_source\code_app\main\inc -I ..\boot_source\code_app\app_boot\inc --diag_suppress 236 -I.\RTE\_hongri_boot -IC:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F10X_CL -DUSE_STDPERIPH_DRIVER -DSTM32F10X_CL -DUSE_STM3210C_EVAL -o .\objects\stm32f10x_rcc.o --omf_browse .\objects\stm32f10x_rcc.crf --depend .\objects\stm32f10x_rcc.d) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_rcc.h)(0x521ED710) +I (..\boot_source\code_app\startup\inc\stm32f10x.h)(0x671A25F3) +I (..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport\core_cm3.h)(0x61605444) +I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x599ECD2E) +I (..\boot_source\code_app\startup\inc\system_stm32f10x.h)(0x61605444) +I (..\boot_source\code_app\startup\inc\stm32f10x_libopt.h)(0x67177362) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_can.h)(0x67208686) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_gpio.h)(0x62D28C12) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_iwdg.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_pwr.h)(0x65F3EF70) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\misc.h)(0x521ED710) +F (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\src\stm32f10x_can.c)(0x521ED710)(--c99 -c --cpu Cortex-M3 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport -I ..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc -I ..\boot_source\platform\drivers\inc -I ..\boot_source\code_app\startup\inc -I ..\boot_source\code_app\driver\inc -I ..\boot_source\code_app\interface\inc -I ..\boot_source\code_app\service\CanStack\canBus_Com -I ..\boot_source\code_app\service\CanStack\canBus_hongri -I ..\boot_source\code_app\service\Eeprom\inc -I ..\boot_source\code_app\main\inc -I ..\boot_source\code_app\app_boot\inc --diag_suppress 236 -I.\RTE\_hongri_boot -IC:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F10X_CL -DUSE_STDPERIPH_DRIVER -DSTM32F10X_CL -DUSE_STM3210C_EVAL -o .\objects\stm32f10x_can.o --omf_browse .\objects\stm32f10x_can.crf --depend .\objects\stm32f10x_can.d) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_can.h)(0x67208686) +I (..\boot_source\code_app\startup\inc\stm32f10x.h)(0x671A25F3) +I (..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport\core_cm3.h)(0x61605444) +I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x599ECD2E) +I (..\boot_source\code_app\startup\inc\system_stm32f10x.h)(0x61605444) +I (..\boot_source\code_app\startup\inc\stm32f10x_libopt.h)(0x67177362) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_gpio.h)(0x62D28C12) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_iwdg.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_pwr.h)(0x65F3EF70) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_rcc.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\misc.h)(0x521ED710) +F (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\src\stm32f10x_dma.c)(0x521ED710)(--c99 -c --cpu Cortex-M3 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport -I ..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc -I ..\boot_source\platform\drivers\inc -I ..\boot_source\code_app\startup\inc -I ..\boot_source\code_app\driver\inc -I ..\boot_source\code_app\interface\inc -I ..\boot_source\code_app\service\CanStack\canBus_Com -I ..\boot_source\code_app\service\CanStack\canBus_hongri -I ..\boot_source\code_app\service\Eeprom\inc -I ..\boot_source\code_app\main\inc -I ..\boot_source\code_app\app_boot\inc --diag_suppress 236 -I.\RTE\_hongri_boot -IC:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F10X_CL -DUSE_STDPERIPH_DRIVER -DSTM32F10X_CL -DUSE_STM3210C_EVAL -o .\objects\stm32f10x_dma.o --omf_browse .\objects\stm32f10x_dma.crf --depend .\objects\stm32f10x_dma.d) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_dma.h)(0x521ED710) +I (..\boot_source\code_app\startup\inc\stm32f10x.h)(0x671A25F3) +I (..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport\core_cm3.h)(0x61605444) +I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x599ECD2E) +I (..\boot_source\code_app\startup\inc\system_stm32f10x.h)(0x61605444) +I (..\boot_source\code_app\startup\inc\stm32f10x_libopt.h)(0x67177362) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_can.h)(0x67208686) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_gpio.h)(0x62D28C12) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_iwdg.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_pwr.h)(0x65F3EF70) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_rcc.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\misc.h)(0x521ED710) +F (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\src\stm32f10x_flash.c)(0x6118F57E)(--c99 -c --cpu Cortex-M3 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport -I ..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc -I ..\boot_source\platform\drivers\inc -I ..\boot_source\code_app\startup\inc -I ..\boot_source\code_app\driver\inc -I ..\boot_source\code_app\interface\inc -I ..\boot_source\code_app\service\CanStack\canBus_Com -I ..\boot_source\code_app\service\CanStack\canBus_hongri -I ..\boot_source\code_app\service\Eeprom\inc -I ..\boot_source\code_app\main\inc -I ..\boot_source\code_app\app_boot\inc --diag_suppress 236 -I.\RTE\_hongri_boot -IC:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F10X_CL -DUSE_STDPERIPH_DRIVER -DSTM32F10X_CL -DUSE_STM3210C_EVAL -o .\objects\stm32f10x_flash.o --omf_browse .\objects\stm32f10x_flash.crf --depend .\objects\stm32f10x_flash.d) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_flash.h)(0x521ED710) +I (..\boot_source\code_app\startup\inc\stm32f10x.h)(0x671A25F3) +I (..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport\core_cm3.h)(0x61605444) +I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x599ECD2E) +I (..\boot_source\code_app\startup\inc\system_stm32f10x.h)(0x61605444) +I (..\boot_source\code_app\startup\inc\stm32f10x_libopt.h)(0x67177362) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_can.h)(0x67208686) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_gpio.h)(0x62D28C12) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_iwdg.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_pwr.h)(0x65F3EF70) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_rcc.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\misc.h)(0x521ED710) +F (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\src\stm32f10x_iwdg.c)(0x521ED710)(--c99 -c --cpu Cortex-M3 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport -I ..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc -I ..\boot_source\platform\drivers\inc -I ..\boot_source\code_app\startup\inc -I ..\boot_source\code_app\driver\inc -I ..\boot_source\code_app\interface\inc -I ..\boot_source\code_app\service\CanStack\canBus_Com -I ..\boot_source\code_app\service\CanStack\canBus_hongri -I ..\boot_source\code_app\service\Eeprom\inc -I ..\boot_source\code_app\main\inc -I ..\boot_source\code_app\app_boot\inc --diag_suppress 236 -I.\RTE\_hongri_boot -IC:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F10X_CL -DUSE_STDPERIPH_DRIVER -DSTM32F10X_CL -DUSE_STM3210C_EVAL -o .\objects\stm32f10x_iwdg.o --omf_browse .\objects\stm32f10x_iwdg.crf --depend .\objects\stm32f10x_iwdg.d) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_iwdg.h)(0x521ED710) +I (..\boot_source\code_app\startup\inc\stm32f10x.h)(0x671A25F3) +I (..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport\core_cm3.h)(0x61605444) +I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x599ECD2E) +I (..\boot_source\code_app\startup\inc\system_stm32f10x.h)(0x61605444) +I (..\boot_source\code_app\startup\inc\stm32f10x_libopt.h)(0x67177362) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_can.h)(0x67208686) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_gpio.h)(0x62D28C12) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_pwr.h)(0x65F3EF70) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_rcc.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\misc.h)(0x521ED710) +F (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\src\stm32f10x_pwr.c)(0x65F32F30)(--c99 -c --cpu Cortex-M3 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport -I ..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc -I ..\boot_source\platform\drivers\inc -I ..\boot_source\code_app\startup\inc -I ..\boot_source\code_app\driver\inc -I ..\boot_source\code_app\interface\inc -I ..\boot_source\code_app\service\CanStack\canBus_Com -I ..\boot_source\code_app\service\CanStack\canBus_hongri -I ..\boot_source\code_app\service\Eeprom\inc -I ..\boot_source\code_app\main\inc -I ..\boot_source\code_app\app_boot\inc --diag_suppress 236 -I.\RTE\_hongri_boot -IC:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F10X_CL -DUSE_STDPERIPH_DRIVER -DSTM32F10X_CL -DUSE_STM3210C_EVAL -o .\objects\stm32f10x_pwr.o --omf_browse .\objects\stm32f10x_pwr.crf --depend .\objects\stm32f10x_pwr.d) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_pwr.h)(0x65F3EF70) +I (..\boot_source\code_app\startup\inc\stm32f10x.h)(0x671A25F3) +I (..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport\core_cm3.h)(0x61605444) +I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x599ECD2E) +I (..\boot_source\code_app\startup\inc\system_stm32f10x.h)(0x61605444) +I (..\boot_source\code_app\startup\inc\stm32f10x_libopt.h)(0x67177362) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_can.h)(0x67208686) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_gpio.h)(0x62D28C12) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_iwdg.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_rcc.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\misc.h)(0x521ED710) +F (..\boot_source\platform\drivers\src\LED\led.c)(0x671A1AEB)(--c99 -c --cpu Cortex-M3 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport -I ..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc -I ..\boot_source\platform\drivers\inc -I ..\boot_source\code_app\startup\inc -I ..\boot_source\code_app\driver\inc -I ..\boot_source\code_app\interface\inc -I ..\boot_source\code_app\service\CanStack\canBus_Com -I ..\boot_source\code_app\service\CanStack\canBus_hongri -I ..\boot_source\code_app\service\Eeprom\inc -I ..\boot_source\code_app\main\inc -I ..\boot_source\code_app\app_boot\inc --diag_suppress 236 -I.\RTE\_hongri_boot -IC:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F10X_CL -DUSE_STDPERIPH_DRIVER -DSTM32F10X_CL -DUSE_STM3210C_EVAL -o .\objects\led.o --omf_browse .\objects\led.crf --depend .\objects\led.d) +I (..\boot_source\platform\drivers\inc\led.h)(0x67175BF6) +I (..\boot_source\code_app\startup\inc\stm32f10x.h)(0x671A25F3) +I (..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport\core_cm3.h)(0x61605444) +I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x599ECD2E) +I (..\boot_source\code_app\startup\inc\system_stm32f10x.h)(0x61605444) +I (..\boot_source\code_app\startup\inc\stm32f10x_libopt.h)(0x67177362) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_can.h)(0x67208686) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_gpio.h)(0x62D28C12) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_iwdg.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_pwr.h)(0x65F3EF70) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_rcc.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\misc.h)(0x521ED710) +F (..\boot_source\platform\drivers\src\EEROM\24cxx.c)(0x67284208)(--c99 -c --cpu Cortex-M3 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport -I ..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc -I ..\boot_source\platform\drivers\inc -I ..\boot_source\code_app\startup\inc -I ..\boot_source\code_app\driver\inc -I ..\boot_source\code_app\interface\inc -I ..\boot_source\code_app\service\CanStack\canBus_Com -I ..\boot_source\code_app\service\CanStack\canBus_hongri -I ..\boot_source\code_app\service\Eeprom\inc -I ..\boot_source\code_app\main\inc -I ..\boot_source\code_app\app_boot\inc --diag_suppress 236 -I.\RTE\_hongri_boot -IC:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F10X_CL -DUSE_STDPERIPH_DRIVER -DSTM32F10X_CL -DUSE_STM3210C_EVAL -o .\objects\24cxx.o --omf_browse .\objects\24cxx.crf --depend .\objects\24cxx.d) +I (..\boot_source\platform\drivers\inc\24cxx.h)(0x67285B2C) +I (..\boot_source\platform\drivers\inc\platform_type_def.h)(0x672193E6) +I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x599ECD2E) +I (C:\Keil_v5\ARM\ARMCC\include\stdbool.h)(0x599ECD2E) +I (C:\Keil_v5\ARM\ARMCC\include\string.h)(0x599ECD2C) +I (..\boot_source\code_app\startup\inc\stm32f10x.h)(0x671A25F3) +I (..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport\core_cm3.h)(0x61605444) +I (..\boot_source\code_app\startup\inc\system_stm32f10x.h)(0x61605444) +I (..\boot_source\code_app\startup\inc\stm32f10x_libopt.h)(0x67177362) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_can.h)(0x67208686) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_gpio.h)(0x62D28C12) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_iwdg.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_pwr.h)(0x65F3EF70) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_rcc.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\misc.h)(0x521ED710) +I (..\boot_source\platform\drivers\inc\bsp_i2c_gpio.h)(0x5EDA6162) +I (..\boot_source\code_app\driver\inc\dev_config_all.h)(0x671755F9) +I (..\boot_source\code_app\driver\inc\dev_sys.h)(0x6721C8E4) +F (..\boot_source\platform\drivers\src\EEROM\bsp_i2c_gpio.c)(0x67283D3C)(--c99 -c --cpu Cortex-M3 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport -I ..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc -I ..\boot_source\platform\drivers\inc -I ..\boot_source\code_app\startup\inc -I ..\boot_source\code_app\driver\inc -I ..\boot_source\code_app\interface\inc -I ..\boot_source\code_app\service\CanStack\canBus_Com -I ..\boot_source\code_app\service\CanStack\canBus_hongri -I ..\boot_source\code_app\service\Eeprom\inc -I ..\boot_source\code_app\main\inc -I ..\boot_source\code_app\app_boot\inc --diag_suppress 236 -I.\RTE\_hongri_boot -IC:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F10X_CL -DUSE_STDPERIPH_DRIVER -DSTM32F10X_CL -DUSE_STM3210C_EVAL -o .\objects\bsp_i2c_gpio.o --omf_browse .\objects\bsp_i2c_gpio.crf --depend .\objects\bsp_i2c_gpio.d) +I (..\boot_source\code_app\startup\inc\stm32f10x.h)(0x671A25F3) +I (..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport\core_cm3.h)(0x61605444) +I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x599ECD2E) +I (..\boot_source\code_app\startup\inc\system_stm32f10x.h)(0x61605444) +I (..\boot_source\code_app\startup\inc\stm32f10x_libopt.h)(0x67177362) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_can.h)(0x67208686) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_gpio.h)(0x62D28C12) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_iwdg.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_pwr.h)(0x65F3EF70) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_rcc.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\misc.h)(0x521ED710) +I (..\boot_source\platform\drivers\inc\bsp_i2c_gpio.h)(0x5EDA6162) +F (..\boot_source\platform\drivers\src\CAN2\can2.c)(0x67231E54)(--c99 -c --cpu Cortex-M3 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport -I ..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc -I ..\boot_source\platform\drivers\inc -I ..\boot_source\code_app\startup\inc -I ..\boot_source\code_app\driver\inc -I ..\boot_source\code_app\interface\inc -I ..\boot_source\code_app\service\CanStack\canBus_Com -I ..\boot_source\code_app\service\CanStack\canBus_hongri -I ..\boot_source\code_app\service\Eeprom\inc -I ..\boot_source\code_app\main\inc -I ..\boot_source\code_app\app_boot\inc --diag_suppress 236 -I.\RTE\_hongri_boot -IC:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F10X_CL -DUSE_STDPERIPH_DRIVER -DSTM32F10X_CL -DUSE_STM3210C_EVAL -o .\objects\can2.o --omf_browse .\objects\can2.crf --depend .\objects\can2.d) +I (..\boot_source\platform\drivers\inc\can2.h)(0x67205017) +I (..\boot_source\platform\drivers\inc\platform_type_def.h)(0x672193E6) +I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x599ECD2E) +I (C:\Keil_v5\ARM\ARMCC\include\stdbool.h)(0x599ECD2E) +I (C:\Keil_v5\ARM\ARMCC\include\string.h)(0x599ECD2C) +I (..\boot_source\code_app\startup\inc\stm32f10x.h)(0x671A25F3) +I (..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport\core_cm3.h)(0x61605444) +I (..\boot_source\code_app\startup\inc\system_stm32f10x.h)(0x61605444) +I (..\boot_source\code_app\startup\inc\stm32f10x_libopt.h)(0x67177362) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_can.h)(0x67208686) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_gpio.h)(0x62D28C12) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_iwdg.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_pwr.h)(0x65F3EF70) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_rcc.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\misc.h)(0x521ED710) +I (..\boot_source\code_app\driver\inc\dev_sys.h)(0x6721C8E4) +I (..\boot_source\code_app\app_boot\inc\app_can.h)(0x67285BFE) +I (..\boot_source\code_app\service\CanStack\canBus_hongri\CanConfig_C301.h)(0x67243FD1) +I (..\boot_source\code_app\service\CanStack\canBus_Com\can_def.h)(0x67219607) +I (..\boot_source\code_app\app_boot\inc\app_cfg.h)(0x6720B2FA) +F (..\boot_source\platform\drivers\src\flash\ecual_flash.c)(0x67232464)(--c99 -c --cpu Cortex-M3 -D__MICROLIB -g -O3 --apcs=interwork --split_sections -I ..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport -I ..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc -I ..\boot_source\platform\drivers\inc -I ..\boot_source\code_app\startup\inc -I ..\boot_source\code_app\driver\inc -I ..\boot_source\code_app\interface\inc -I ..\boot_source\code_app\service\CanStack\canBus_Com -I ..\boot_source\code_app\service\CanStack\canBus_hongri -I ..\boot_source\code_app\service\Eeprom\inc -I ..\boot_source\code_app\main\inc -I ..\boot_source\code_app\app_boot\inc --diag_suppress 236 -I.\RTE\_hongri_boot -IC:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F10X_CL -DUSE_STDPERIPH_DRIVER -DSTM32F10X_CL -DUSE_STM3210C_EVAL -o .\objects\ecual_flash.o --omf_browse .\objects\ecual_flash.crf --depend .\objects\ecual_flash.d) +I (..\boot_source\code_app\main\inc\config.h)(0x671A0813) +I (..\boot_source\platform\drivers\inc\ecual_flash.h)(0x6720A9AA) +I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x599ECD2E) +I (C:\Keil_v5\ARM\ARMCC\include\stdbool.h)(0x599ECD2E) +F (..\boot_source\code_app\startup\src\stm32f10x_it.c)(0x6718B1A0)(--c99 -c --cpu Cortex-M3 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport -I ..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc -I ..\boot_source\platform\drivers\inc -I ..\boot_source\code_app\startup\inc -I ..\boot_source\code_app\driver\inc -I ..\boot_source\code_app\interface\inc -I ..\boot_source\code_app\service\CanStack\canBus_Com -I ..\boot_source\code_app\service\CanStack\canBus_hongri -I ..\boot_source\code_app\service\Eeprom\inc -I ..\boot_source\code_app\main\inc -I ..\boot_source\code_app\app_boot\inc --diag_suppress 236 -I.\RTE\_hongri_boot -IC:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F10X_CL -DUSE_STDPERIPH_DRIVER -DSTM32F10X_CL -DUSE_STM3210C_EVAL -o .\objects\stm32f10x_it.o --omf_browse .\objects\stm32f10x_it.crf --depend .\objects\stm32f10x_it.d) +I (..\boot_source\code_app\startup\inc\stm32f10x_it.h)(0x61605442) +I (..\boot_source\code_app\startup\inc\stm32f10x.h)(0x671A25F3) +I (..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport\core_cm3.h)(0x61605444) +I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x599ECD2E) +I (..\boot_source\code_app\startup\inc\system_stm32f10x.h)(0x61605444) +I (..\boot_source\code_app\startup\inc\stm32f10x_libopt.h)(0x67177362) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_can.h)(0x67208686) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_gpio.h)(0x62D28C12) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_iwdg.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_pwr.h)(0x65F3EF70) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_rcc.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\misc.h)(0x521ED710) +F (..\boot_source\code_app\startup\src\system_stm32f10x.c)(0x6718B1B1)(--c99 -c --cpu Cortex-M3 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport -I ..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc -I ..\boot_source\platform\drivers\inc -I ..\boot_source\code_app\startup\inc -I ..\boot_source\code_app\driver\inc -I ..\boot_source\code_app\interface\inc -I ..\boot_source\code_app\service\CanStack\canBus_Com -I ..\boot_source\code_app\service\CanStack\canBus_hongri -I ..\boot_source\code_app\service\Eeprom\inc -I ..\boot_source\code_app\main\inc -I ..\boot_source\code_app\app_boot\inc --diag_suppress 236 -I.\RTE\_hongri_boot -IC:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F10X_CL -DUSE_STDPERIPH_DRIVER -DSTM32F10X_CL -DUSE_STM3210C_EVAL -o .\objects\system_stm32f10x.o --omf_browse .\objects\system_stm32f10x.crf --depend .\objects\system_stm32f10x.d) +I (..\boot_source\code_app\startup\inc\stm32f10x.h)(0x671A25F3) +I (..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport\core_cm3.h)(0x61605444) +I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x599ECD2E) +I (..\boot_source\code_app\startup\inc\system_stm32f10x.h)(0x61605444) +I (..\boot_source\code_app\startup\inc\stm32f10x_libopt.h)(0x67177362) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_can.h)(0x67208686) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_gpio.h)(0x62D28C12) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_iwdg.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_pwr.h)(0x65F3EF70) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_rcc.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\misc.h)(0x521ED710) +F (..\boot_source\code_app\driver\src\dev_flashApi.c)(0x67171677)(--c99 -c --cpu Cortex-M3 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport -I ..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc -I ..\boot_source\platform\drivers\inc -I ..\boot_source\code_app\startup\inc -I ..\boot_source\code_app\driver\inc -I ..\boot_source\code_app\interface\inc -I ..\boot_source\code_app\service\CanStack\canBus_Com -I ..\boot_source\code_app\service\CanStack\canBus_hongri -I ..\boot_source\code_app\service\Eeprom\inc -I ..\boot_source\code_app\main\inc -I ..\boot_source\code_app\app_boot\inc --diag_suppress 236 -I.\RTE\_hongri_boot -IC:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F10X_CL -DUSE_STDPERIPH_DRIVER -DSTM32F10X_CL -DUSE_STM3210C_EVAL -o .\objects\dev_flashapi.o --omf_browse .\objects\dev_flashapi.crf --depend .\objects\dev_flashapi.d) +I (..\boot_source\code_app\driver\inc\dev_flashApi.h)(0x67282DED) +I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x599ECD2E) +F (..\boot_source\code_app\driver\src\dev_crc32.c)(0x67173C51)(--c99 -c --cpu Cortex-M3 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport -I ..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc -I ..\boot_source\platform\drivers\inc -I ..\boot_source\code_app\startup\inc -I ..\boot_source\code_app\driver\inc -I ..\boot_source\code_app\interface\inc -I ..\boot_source\code_app\service\CanStack\canBus_Com -I ..\boot_source\code_app\service\CanStack\canBus_hongri -I ..\boot_source\code_app\service\Eeprom\inc -I ..\boot_source\code_app\main\inc -I ..\boot_source\code_app\app_boot\inc --diag_suppress 236 -I.\RTE\_hongri_boot -IC:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F10X_CL -DUSE_STDPERIPH_DRIVER -DSTM32F10X_CL -DUSE_STM3210C_EVAL -o .\objects\dev_crc32.o --omf_browse .\objects\dev_crc32.crf --depend .\objects\dev_crc32.d) +I (..\boot_source\code_app\driver\inc\dev_crc32.h)(0x67184946) +I (..\boot_source\platform\drivers\inc\platform_type_def.h)(0x672193E6) +I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x599ECD2E) +I (C:\Keil_v5\ARM\ARMCC\include\stdbool.h)(0x599ECD2E) +I (C:\Keil_v5\ARM\ARMCC\include\string.h)(0x599ECD2C) +F (..\boot_source\code_app\driver\src\dev_sys.c)(0x67208F33)(--c99 -c --cpu Cortex-M3 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport -I ..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc -I ..\boot_source\platform\drivers\inc -I ..\boot_source\code_app\startup\inc -I ..\boot_source\code_app\driver\inc -I ..\boot_source\code_app\interface\inc -I ..\boot_source\code_app\service\CanStack\canBus_Com -I ..\boot_source\code_app\service\CanStack\canBus_hongri -I ..\boot_source\code_app\service\Eeprom\inc -I ..\boot_source\code_app\main\inc -I ..\boot_source\code_app\app_boot\inc --diag_suppress 236 -I.\RTE\_hongri_boot -IC:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F10X_CL -DUSE_STDPERIPH_DRIVER -DSTM32F10X_CL -DUSE_STM3210C_EVAL -o .\objects\dev_sys.o --omf_browse .\objects\dev_sys.crf --depend .\objects\dev_sys.d) +I (..\boot_source\code_app\driver\inc\dev_sys.h)(0x6721C8E4) +I (..\boot_source\code_app\startup\inc\stm32f10x.h)(0x671A25F3) +I (..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport\core_cm3.h)(0x61605444) +I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x599ECD2E) +I (..\boot_source\code_app\startup\inc\system_stm32f10x.h)(0x61605444) +I (..\boot_source\code_app\startup\inc\stm32f10x_libopt.h)(0x67177362) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_can.h)(0x67208686) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_gpio.h)(0x62D28C12) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_iwdg.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_pwr.h)(0x65F3EF70) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_rcc.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\misc.h)(0x521ED710) +I (..\boot_source\platform\drivers\inc\platform_type_def.h)(0x672193E6) +I (C:\Keil_v5\ARM\ARMCC\include\stdbool.h)(0x599ECD2E) +I (C:\Keil_v5\ARM\ARMCC\include\string.h)(0x599ECD2C) +F (..\boot_source\code_app\driver\src\dev_eerom.c)(0x67286104)(--c99 -c --cpu Cortex-M3 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport -I ..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc -I ..\boot_source\platform\drivers\inc -I ..\boot_source\code_app\startup\inc -I ..\boot_source\code_app\driver\inc -I ..\boot_source\code_app\interface\inc -I ..\boot_source\code_app\service\CanStack\canBus_Com -I ..\boot_source\code_app\service\CanStack\canBus_hongri -I ..\boot_source\code_app\service\Eeprom\inc -I ..\boot_source\code_app\main\inc -I ..\boot_source\code_app\app_boot\inc --diag_suppress 236 -I.\RTE\_hongri_boot -IC:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F10X_CL -DUSE_STDPERIPH_DRIVER -DSTM32F10X_CL -DUSE_STM3210C_EVAL -o .\objects\dev_eerom.o --omf_browse .\objects\dev_eerom.crf --depend .\objects\dev_eerom.d) +F (..\boot_source\code_app\service\CanStack\canBus_Com\UDS.c)(0x6729762E)(--c99 -c --cpu Cortex-M3 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport -I ..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc -I ..\boot_source\platform\drivers\inc -I ..\boot_source\code_app\startup\inc -I ..\boot_source\code_app\driver\inc -I ..\boot_source\code_app\interface\inc -I ..\boot_source\code_app\service\CanStack\canBus_Com -I ..\boot_source\code_app\service\CanStack\canBus_hongri -I ..\boot_source\code_app\service\Eeprom\inc -I ..\boot_source\code_app\main\inc -I ..\boot_source\code_app\app_boot\inc --diag_suppress 236 -I.\RTE\_hongri_boot -IC:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F10X_CL -DUSE_STDPERIPH_DRIVER -DSTM32F10X_CL -DUSE_STM3210C_EVAL -o .\objects\uds.o --omf_browse .\objects\uds.crf --depend .\objects\uds.d) +I (..\boot_source\code_app\service\CanStack\canBus_Com\uds.h)(0x67218E85) +I (..\boot_source\platform\drivers\inc\platform_type_def.h)(0x672193E6) +I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x599ECD2E) +I (C:\Keil_v5\ARM\ARMCC\include\stdbool.h)(0x599ECD2E) +I (C:\Keil_v5\ARM\ARMCC\include\string.h)(0x599ECD2C) +I (..\boot_source\code_app\service\CanStack\canBus_Com\can_def.h)(0x67219607) +I (..\boot_source\code_app\app_boot\inc\app_cfg.h)(0x6720B2FA) +I (..\boot_source\code_app\service\CanStack\canBus_hongri\CanConfig_C301.h)(0x67243FD1) +I (..\boot_source\code_app\app_boot\inc\app_can.h)(0x67285BFE) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_can.h)(0x67208686) +I (..\boot_source\code_app\startup\inc\stm32f10x.h)(0x671A25F3) +I (..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport\core_cm3.h)(0x61605444) +I (..\boot_source\code_app\startup\inc\system_stm32f10x.h)(0x61605444) +I (..\boot_source\code_app\startup\inc\stm32f10x_libopt.h)(0x67177362) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_gpio.h)(0x62D28C12) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_iwdg.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_pwr.h)(0x65F3EF70) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_rcc.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\misc.h)(0x521ED710) +I (..\boot_source\code_app\service\CanStack\canBus_Com\iso15765-2_def.h)(0x67235D8A) +I (..\boot_source\code_app\main\inc\config.h)(0x6721CC37) +I (..\boot_source\code_app\service\CanStack\canBus_hongri\Diag_Appl_C301.h)(0x672977E5) +I (..\boot_source\code_app\service\CanStack\canBus_hongri\CanCtrl_C301.h)(0x67219591) +I (..\boot_source\code_app\service\CanStack\canBus_hongri\Diag_Eeprom_C301.h)(0x6728607A) +F (..\boot_source\code_app\service\CanStack\canBus_Com\iso15765-2.c)(0x67242B88)(--c99 -c --cpu Cortex-M3 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport -I ..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc -I ..\boot_source\platform\drivers\inc -I ..\boot_source\code_app\startup\inc -I ..\boot_source\code_app\driver\inc -I ..\boot_source\code_app\interface\inc -I ..\boot_source\code_app\service\CanStack\canBus_Com -I ..\boot_source\code_app\service\CanStack\canBus_hongri -I ..\boot_source\code_app\service\Eeprom\inc -I ..\boot_source\code_app\main\inc -I ..\boot_source\code_app\app_boot\inc --diag_suppress 236 -I.\RTE\_hongri_boot -IC:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F10X_CL -DUSE_STDPERIPH_DRIVER -DSTM32F10X_CL -DUSE_STM3210C_EVAL -o .\objects\iso15765-2.o --omf_browse .\objects\iso15765-2.crf --depend .\objects\iso15765-2.d) +I (..\boot_source\code_app\service\CanStack\canBus_Com\iso15765-2_def.h)(0x67235D8A) +I (..\boot_source\platform\drivers\inc\platform_type_def.h)(0x672193E6) +I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x599ECD2E) +I (C:\Keil_v5\ARM\ARMCC\include\stdbool.h)(0x599ECD2E) +I (C:\Keil_v5\ARM\ARMCC\include\string.h)(0x599ECD2C) +I (..\boot_source\code_app\service\CanStack\canBus_Com\can_def.h)(0x67219607) +I (..\boot_source\code_app\app_boot\inc\app_cfg.h)(0x6720B2FA) +I (..\boot_source\code_app\app_boot\inc\app_can.h)(0x67285BFE) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_can.h)(0x67208686) +I (..\boot_source\code_app\startup\inc\stm32f10x.h)(0x671A25F3) +I (..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport\core_cm3.h)(0x61605444) +I (..\boot_source\code_app\startup\inc\system_stm32f10x.h)(0x61605444) +I (..\boot_source\code_app\startup\inc\stm32f10x_libopt.h)(0x67177362) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_gpio.h)(0x62D28C12) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_iwdg.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_pwr.h)(0x65F3EF70) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_rcc.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\misc.h)(0x521ED710) +I (..\boot_source\code_app\service\CanStack\canBus_hongri\CanConfig_C301.h)(0x67243FD1) +I (..\boot_source\code_app\service\CanStack\canBus_Com\uds.h)(0x67218E85) +I (..\boot_source\code_app\service\CanStack\canBus_hongri\CanCtrl_C301.h)(0x67219591) +F (..\boot_source\code_app\service\CanStack\canBus_Com\iso15765-2_entry.c)(0x6721ABCB)(--c99 -c --cpu Cortex-M3 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport -I ..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc -I ..\boot_source\platform\drivers\inc -I ..\boot_source\code_app\startup\inc -I ..\boot_source\code_app\driver\inc -I ..\boot_source\code_app\interface\inc -I ..\boot_source\code_app\service\CanStack\canBus_Com -I ..\boot_source\code_app\service\CanStack\canBus_hongri -I ..\boot_source\code_app\service\Eeprom\inc -I ..\boot_source\code_app\main\inc -I ..\boot_source\code_app\app_boot\inc --diag_suppress 236 -I.\RTE\_hongri_boot -IC:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F10X_CL -DUSE_STDPERIPH_DRIVER -DSTM32F10X_CL -DUSE_STM3210C_EVAL -o .\objects\iso15765-2_entry.o --omf_browse .\objects\iso15765-2_entry.crf --depend .\objects\iso15765-2_entry.d) +I (..\boot_source\code_app\service\CanStack\canBus_Com\can_def.h)(0x67219607) +I (..\boot_source\platform\drivers\inc\platform_type_def.h)(0x672193E6) +I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x599ECD2E) +I (C:\Keil_v5\ARM\ARMCC\include\stdbool.h)(0x599ECD2E) +I (C:\Keil_v5\ARM\ARMCC\include\string.h)(0x599ECD2C) +I (..\boot_source\code_app\app_boot\inc\app_cfg.h)(0x6720B2FA) +I (..\boot_source\code_app\service\CanStack\canBus_Com\iso15765-2_def.h)(0x67235D8A) +I (..\boot_source\code_app\service\CanStack\canBus_Com\uds.h)(0x67218E85) +I (..\boot_source\code_app\service\CanStack\canBus_hongri\CanConfig_C301.h)(0x67243FD1) +I (..\boot_source\code_app\app_boot\inc\app_can.h)(0x67285BFE) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_can.h)(0x67208686) +I (..\boot_source\code_app\startup\inc\stm32f10x.h)(0x671A25F3) +I (..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport\core_cm3.h)(0x61605444) +I (..\boot_source\code_app\startup\inc\system_stm32f10x.h)(0x61605444) +I (..\boot_source\code_app\startup\inc\stm32f10x_libopt.h)(0x67177362) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_gpio.h)(0x62D28C12) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_iwdg.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_pwr.h)(0x65F3EF70) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_rcc.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\misc.h)(0x521ED710) +F (..\boot_source\code_app\service\CanStack\canBus_Com\Can_Transceiver.c)(0x67297613)(--c99 -c --cpu Cortex-M3 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport -I ..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc -I ..\boot_source\platform\drivers\inc -I ..\boot_source\code_app\startup\inc -I ..\boot_source\code_app\driver\inc -I ..\boot_source\code_app\interface\inc -I ..\boot_source\code_app\service\CanStack\canBus_Com -I ..\boot_source\code_app\service\CanStack\canBus_hongri -I ..\boot_source\code_app\service\Eeprom\inc -I ..\boot_source\code_app\main\inc -I ..\boot_source\code_app\app_boot\inc --diag_suppress 236 -I.\RTE\_hongri_boot -IC:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F10X_CL -DUSE_STDPERIPH_DRIVER -DSTM32F10X_CL -DUSE_STM3210C_EVAL -o .\objects\can_transceiver.o --omf_browse .\objects\can_transceiver.crf --depend .\objects\can_transceiver.d) +I (..\boot_source\code_app\service\CanStack\canBus_Com\Can_Transceiver.h)(0x67297611) +I (..\boot_source\platform\drivers\inc\platform_type_def.h)(0x672193E6) +I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x599ECD2E) +I (C:\Keil_v5\ARM\ARMCC\include\stdbool.h)(0x599ECD2E) +I (C:\Keil_v5\ARM\ARMCC\include\string.h)(0x599ECD2C) +I (..\boot_source\code_app\service\CanStack\canBus_Com\can_def.h)(0x67219607) +I (..\boot_source\code_app\app_boot\inc\app_cfg.h)(0x6720B2FA) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_gpio.h)(0x62D28C12) +I (..\boot_source\code_app\startup\inc\stm32f10x.h)(0x671A25F3) +I (..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport\core_cm3.h)(0x61605444) +I (..\boot_source\code_app\startup\inc\system_stm32f10x.h)(0x61605444) +I (..\boot_source\code_app\startup\inc\stm32f10x_libopt.h)(0x67177362) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_can.h)(0x67208686) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_iwdg.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_pwr.h)(0x65F3EF70) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_rcc.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\misc.h)(0x521ED710) +I (..\boot_source\code_app\service\CanStack\canBus_hongri\CanConfig_C301.h)(0x67243FD1) +I (..\boot_source\code_app\app_boot\inc\app_can.h)(0x67285BFE) +F (..\boot_source\code_app\service\CanStack\canBus_hongri\Diag_Eeprom_C301.c)(0x672974A7)(--c99 -c --cpu Cortex-M3 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport -I ..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc -I ..\boot_source\platform\drivers\inc -I ..\boot_source\code_app\startup\inc -I ..\boot_source\code_app\driver\inc -I ..\boot_source\code_app\interface\inc -I ..\boot_source\code_app\service\CanStack\canBus_Com -I ..\boot_source\code_app\service\CanStack\canBus_hongri -I ..\boot_source\code_app\service\Eeprom\inc -I ..\boot_source\code_app\main\inc -I ..\boot_source\code_app\app_boot\inc --diag_suppress 236 -I.\RTE\_hongri_boot -IC:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F10X_CL -DUSE_STDPERIPH_DRIVER -DSTM32F10X_CL -DUSE_STM3210C_EVAL -o .\objects\diag_eeprom_c301.o --omf_browse .\objects\diag_eeprom_c301.crf --depend .\objects\diag_eeprom_c301.d) +I (..\boot_source\code_app\service\CanStack\canBus_hongri\Diag_Eeprom_C301.h)(0x6728607A) +I (..\boot_source\code_app\service\CanStack\canBus_Com\can_def.h)(0x67219607) +I (..\boot_source\platform\drivers\inc\platform_type_def.h)(0x672193E6) +I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x599ECD2E) +I (C:\Keil_v5\ARM\ARMCC\include\stdbool.h)(0x599ECD2E) +I (C:\Keil_v5\ARM\ARMCC\include\string.h)(0x599ECD2C) +I (..\boot_source\code_app\app_boot\inc\app_cfg.h)(0x6720B2FA) +I (..\boot_source\code_app\service\CanStack\canBus_hongri\CanConfig_C301.h)(0x67243FD1) +I (..\boot_source\code_app\app_boot\inc\app_can.h)(0x67285BFE) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_can.h)(0x67208686) +I (..\boot_source\code_app\startup\inc\stm32f10x.h)(0x671A25F3) +I (..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport\core_cm3.h)(0x61605444) +I (..\boot_source\code_app\startup\inc\system_stm32f10x.h)(0x61605444) +I (..\boot_source\code_app\startup\inc\stm32f10x_libopt.h)(0x67177362) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_gpio.h)(0x62D28C12) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_iwdg.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_pwr.h)(0x65F3EF70) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_rcc.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\misc.h)(0x521ED710) +I (..\boot_source\code_app\driver\inc\dev_flashApi.h)(0x67282DED) +I (..\boot_source\platform\drivers\inc\ecual_flash.h)(0x67288F56) +I (..\boot_source\code_app\main\inc\config.h)(0x6721CC37) +F (..\boot_source\code_app\service\CanStack\canBus_hongri\CanConfig_C301.c)(0x6724308B)(--c99 -c --cpu Cortex-M3 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport -I ..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc -I ..\boot_source\platform\drivers\inc -I ..\boot_source\code_app\startup\inc -I ..\boot_source\code_app\driver\inc -I ..\boot_source\code_app\interface\inc -I ..\boot_source\code_app\service\CanStack\canBus_Com -I ..\boot_source\code_app\service\CanStack\canBus_hongri -I ..\boot_source\code_app\service\Eeprom\inc -I ..\boot_source\code_app\main\inc -I ..\boot_source\code_app\app_boot\inc --diag_suppress 236 -I.\RTE\_hongri_boot -IC:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F10X_CL -DUSE_STDPERIPH_DRIVER -DSTM32F10X_CL -DUSE_STM3210C_EVAL -o .\objects\canconfig_c301.o --omf_browse .\objects\canconfig_c301.crf --depend .\objects\canconfig_c301.d) +I (..\boot_source\code_app\service\CanStack\canBus_hongri\CanConfig_C301.h)(0x67243FD1) +I (..\boot_source\code_app\service\CanStack\canBus_Com\can_def.h)(0x67219607) +I (..\boot_source\platform\drivers\inc\platform_type_def.h)(0x672193E6) +I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x599ECD2E) +I (C:\Keil_v5\ARM\ARMCC\include\stdbool.h)(0x599ECD2E) +I (C:\Keil_v5\ARM\ARMCC\include\string.h)(0x599ECD2C) +I (..\boot_source\code_app\app_boot\inc\app_cfg.h)(0x6720B2FA) +I (..\boot_source\code_app\app_boot\inc\app_can.h)(0x67285BFE) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_can.h)(0x67208686) +I (..\boot_source\code_app\startup\inc\stm32f10x.h)(0x671A25F3) +I (..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport\core_cm3.h)(0x61605444) +I (..\boot_source\code_app\startup\inc\system_stm32f10x.h)(0x61605444) +I (..\boot_source\code_app\startup\inc\stm32f10x_libopt.h)(0x67177362) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_gpio.h)(0x62D28C12) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_iwdg.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_pwr.h)(0x65F3EF70) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_rcc.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\misc.h)(0x521ED710) +I (..\boot_source\code_app\service\CanStack\canBus_Com\iso15765-2_def.h)(0x67235D8A) +I (..\boot_source\code_app\service\CanStack\canBus_Com\uds.h)(0x67218E85) +F (..\boot_source\code_app\service\CanStack\canBus_hongri\CanCtrl_C301.c)(0x672974D8)(--c99 -c --cpu Cortex-M3 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport -I ..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc -I ..\boot_source\platform\drivers\inc -I ..\boot_source\code_app\startup\inc -I ..\boot_source\code_app\driver\inc -I ..\boot_source\code_app\interface\inc -I ..\boot_source\code_app\service\CanStack\canBus_Com -I ..\boot_source\code_app\service\CanStack\canBus_hongri -I ..\boot_source\code_app\service\Eeprom\inc -I ..\boot_source\code_app\main\inc -I ..\boot_source\code_app\app_boot\inc --diag_suppress 236 -I.\RTE\_hongri_boot -IC:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F10X_CL -DUSE_STDPERIPH_DRIVER -DSTM32F10X_CL -DUSE_STM3210C_EVAL -o .\objects\canctrl_c301.o --omf_browse .\objects\canctrl_c301.crf --depend .\objects\canctrl_c301.d) +I (..\boot_source\code_app\service\CanStack\canBus_hongri\CanCtrl_C301.h)(0x67219591) +I (..\boot_source\code_app\service\CanStack\canBus_Com\can_def.h)(0x67219607) +I (..\boot_source\platform\drivers\inc\platform_type_def.h)(0x672193E6) +I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x599ECD2E) +I (C:\Keil_v5\ARM\ARMCC\include\stdbool.h)(0x599ECD2E) +I (C:\Keil_v5\ARM\ARMCC\include\string.h)(0x599ECD2C) +I (..\boot_source\code_app\app_boot\inc\app_cfg.h)(0x6720B2FA) +I (..\boot_source\code_app\app_boot\inc\app_can.h)(0x67285BFE) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_can.h)(0x67208686) +I (..\boot_source\code_app\startup\inc\stm32f10x.h)(0x671A25F3) +I (..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport\core_cm3.h)(0x61605444) +I (..\boot_source\code_app\startup\inc\system_stm32f10x.h)(0x61605444) +I (..\boot_source\code_app\startup\inc\stm32f10x_libopt.h)(0x67177362) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_gpio.h)(0x62D28C12) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_iwdg.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_pwr.h)(0x65F3EF70) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_rcc.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\misc.h)(0x521ED710) +I (..\boot_source\code_app\service\CanStack\canBus_hongri\CanConfig_C301.h)(0x67243FD1) +F (..\boot_source\code_app\service\CanStack\canBus_hongri\Diag_Appl_C301.c)(0x672975E0)(--c99 -c --cpu Cortex-M3 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport -I ..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc -I ..\boot_source\platform\drivers\inc -I ..\boot_source\code_app\startup\inc -I ..\boot_source\code_app\driver\inc -I ..\boot_source\code_app\interface\inc -I ..\boot_source\code_app\service\CanStack\canBus_Com -I ..\boot_source\code_app\service\CanStack\canBus_hongri -I ..\boot_source\code_app\service\Eeprom\inc -I ..\boot_source\code_app\main\inc -I ..\boot_source\code_app\app_boot\inc --diag_suppress 236 -I.\RTE\_hongri_boot -IC:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F10X_CL -DUSE_STDPERIPH_DRIVER -DSTM32F10X_CL -DUSE_STM3210C_EVAL -o .\objects\diag_appl_c301.o --omf_browse .\objects\diag_appl_c301.crf --depend .\objects\diag_appl_c301.d) +I (..\boot_source\code_app\service\CanStack\canBus_hongri\Diag_Appl_C301.h)(0x672977E5) +I (..\boot_source\code_app\service\CanStack\canBus_Com\can_def.h)(0x67219607) +I (..\boot_source\platform\drivers\inc\platform_type_def.h)(0x672193E6) +I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x599ECD2E) +I (C:\Keil_v5\ARM\ARMCC\include\stdbool.h)(0x599ECD2E) +I (C:\Keil_v5\ARM\ARMCC\include\string.h)(0x599ECD2C) +I (..\boot_source\code_app\app_boot\inc\app_cfg.h)(0x6720B2FA) +I (..\boot_source\code_app\service\CanStack\canBus_hongri\CanConfig_C301.h)(0x67243FD1) +I (..\boot_source\code_app\app_boot\inc\app_can.h)(0x67285BFE) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_can.h)(0x67208686) +I (..\boot_source\code_app\startup\inc\stm32f10x.h)(0x671A25F3) +I (..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport\core_cm3.h)(0x61605444) +I (..\boot_source\code_app\startup\inc\system_stm32f10x.h)(0x61605444) +I (..\boot_source\code_app\startup\inc\stm32f10x_libopt.h)(0x67177362) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_gpio.h)(0x62D28C12) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_iwdg.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_pwr.h)(0x65F3EF70) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_rcc.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\misc.h)(0x521ED710) +I (..\boot_source\code_app\service\CanStack\canBus_Com\uds.h)(0x67218E85) +I (..\boot_source\code_app\service\CanStack\canBus_Com\iso15765-2_def.h)(0x67235D8A) +I (..\boot_source\code_app\main\inc\config.h)(0x6721CC37) +I (..\boot_source\code_app\service\CanStack\canBus_hongri\Diag_Eeprom_C301.h)(0x6728607A) +I (..\boot_source\code_app\service\CanStack\canBus_hongri\CanCtrl_C301.h)(0x67219591) +I (..\boot_source\platform\drivers\inc\ecual_flash.h)(0x67288F56) +I (..\boot_source\code_app\service\CanStack\canBus_hongri\UDS_SA_C301.h)(0x672444AF) +I (..\boot_source\code_app\driver\inc\dev_flashApi.h)(0x67282DED) +I (..\boot_source\code_app\driver\inc\dev_eerom.h)(0x672860FC) +I (..\boot_source\platform\drivers\inc\24cxx.h)(0x67285B2C) +F (..\boot_source\code_app\service\CanStack\canBus_hongri\UDS_SA_C301.c)(0x6725BFB7)(--c99 -c --cpu Cortex-M3 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport -I ..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc -I ..\boot_source\platform\drivers\inc -I ..\boot_source\code_app\startup\inc -I ..\boot_source\code_app\driver\inc -I ..\boot_source\code_app\interface\inc -I ..\boot_source\code_app\service\CanStack\canBus_Com -I ..\boot_source\code_app\service\CanStack\canBus_hongri -I ..\boot_source\code_app\service\Eeprom\inc -I ..\boot_source\code_app\main\inc -I ..\boot_source\code_app\app_boot\inc --diag_suppress 236 -I.\RTE\_hongri_boot -IC:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F10X_CL -DUSE_STDPERIPH_DRIVER -DSTM32F10X_CL -DUSE_STM3210C_EVAL -o .\objects\uds_sa_c301.o --omf_browse .\objects\uds_sa_c301.crf --depend .\objects\uds_sa_c301.d) +I (..\boot_source\code_app\service\CanStack\canBus_hongri\UDS_SA_C301.h)(0x672444AF) +I (..\boot_source\code_app\service\CanStack\canBus_Com\can_def.h)(0x67219607) +I (..\boot_source\platform\drivers\inc\platform_type_def.h)(0x672193E6) +I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x599ECD2E) +I (C:\Keil_v5\ARM\ARMCC\include\stdbool.h)(0x599ECD2E) +I (C:\Keil_v5\ARM\ARMCC\include\string.h)(0x599ECD2C) +I (..\boot_source\code_app\app_boot\inc\app_cfg.h)(0x6720B2FA) +I (..\boot_source\code_app\service\CanStack\canBus_hongri\CanConfig_C301.h)(0x67243FD1) +I (..\boot_source\code_app\app_boot\inc\app_can.h)(0x67285BFE) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_can.h)(0x67208686) +I (..\boot_source\code_app\startup\inc\stm32f10x.h)(0x671A25F3) +I (..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport\core_cm3.h)(0x61605444) +I (..\boot_source\code_app\startup\inc\system_stm32f10x.h)(0x61605444) +I (..\boot_source\code_app\startup\inc\stm32f10x_libopt.h)(0x67177362) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_gpio.h)(0x62D28C12) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_iwdg.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_pwr.h)(0x65F3EF70) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_rcc.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\misc.h)(0x521ED710) +F (..\boot_source\code_app\main\src\main.c)(0x6728AF31)(--c99 -c --cpu Cortex-M3 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport -I ..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc -I ..\boot_source\platform\drivers\inc -I ..\boot_source\code_app\startup\inc -I ..\boot_source\code_app\driver\inc -I ..\boot_source\code_app\interface\inc -I ..\boot_source\code_app\service\CanStack\canBus_Com -I ..\boot_source\code_app\service\CanStack\canBus_hongri -I ..\boot_source\code_app\service\Eeprom\inc -I ..\boot_source\code_app\main\inc -I ..\boot_source\code_app\app_boot\inc --diag_suppress 236 -I.\RTE\_hongri_boot -IC:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F10X_CL -DUSE_STDPERIPH_DRIVER -DSTM32F10X_CL -DUSE_STM3210C_EVAL -o .\objects\main.o --omf_browse .\objects\main.crf --depend .\objects\main.d) +I (..\boot_source\code_app\main\inc\main.h)(0x6718CD0E) +I (..\boot_source\code_app\startup\inc\stm32f10x.h)(0x671A25F3) +I (..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport\core_cm3.h)(0x61605444) +I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x599ECD2E) +I (..\boot_source\code_app\startup\inc\system_stm32f10x.h)(0x61605444) +I (..\boot_source\code_app\startup\inc\stm32f10x_libopt.h)(0x67177362) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_can.h)(0x67208686) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_gpio.h)(0x62D28C12) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_iwdg.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_pwr.h)(0x65F3EF70) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_rcc.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\misc.h)(0x521ED710) +I (..\boot_source\code_app\driver\inc\dev_config_all.h)(0x671755F9) +I (..\boot_source\code_app\driver\inc\dev_sys.h)(0x6721C8E4) +I (..\boot_source\platform\drivers\inc\platform_driver_inc_all.h)(0x67177546) +I (..\boot_source\platform\drivers\inc\led.h)(0x67175BF6) +I (..\boot_source\platform\drivers\inc\24cxx.h)(0x67285B2C) +I (..\boot_source\platform\drivers\inc\platform_type_def.h)(0x672193E6) +I (C:\Keil_v5\ARM\ARMCC\include\stdbool.h)(0x599ECD2E) +I (C:\Keil_v5\ARM\ARMCC\include\string.h)(0x599ECD2C) +I (..\boot_source\platform\drivers\inc\can2.h)(0x67205017) +I (..\boot_source\code_app\app_boot\inc\app_can.h)(0x67285BFE) +I (..\boot_source\code_app\service\CanStack\canBus_hongri\CanConfig_C301.h)(0x67243FD1) +I (..\boot_source\code_app\service\CanStack\canBus_Com\can_def.h)(0x67219607) +I (..\boot_source\code_app\app_boot\inc\app_cfg.h)(0x6720B2FA) +I (..\boot_source\code_app\service\CanStack\canBus_hongri\Service_Canstack_CanBus_hongri_All.h)(0x671F598C) +I (..\boot_source\code_app\service\CanStack\canBus_hongri\Diag_Eeprom_C301.h)(0x6728607A) +I (..\boot_source\code_app\main\inc\config.h)(0x6721CC37) +I (..\boot_source\platform\drivers\inc\ecual_flash.h)(0x67288F56) +F (..\boot_source\code_app\app_boot\src\app_can.c)(0x672975E0)(--c99 -c --cpu Cortex-M3 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport -I ..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc -I ..\boot_source\platform\drivers\inc -I ..\boot_source\code_app\startup\inc -I ..\boot_source\code_app\driver\inc -I ..\boot_source\code_app\interface\inc -I ..\boot_source\code_app\service\CanStack\canBus_Com -I ..\boot_source\code_app\service\CanStack\canBus_hongri -I ..\boot_source\code_app\service\Eeprom\inc -I ..\boot_source\code_app\main\inc -I ..\boot_source\code_app\app_boot\inc --diag_suppress 236 -I.\RTE\_hongri_boot -IC:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="525" -DSTM32F10X_CL -DUSE_STDPERIPH_DRIVER -DSTM32F10X_CL -DUSE_STM3210C_EVAL -o .\objects\app_can.o --omf_browse .\objects\app_can.crf --depend .\objects\app_can.d) +I (..\boot_source\code_app\app_boot\inc\app_can.h)(0x67285BFE) +I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x599ECD2E) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_can.h)(0x67208686) +I (..\boot_source\code_app\startup\inc\stm32f10x.h)(0x671A25F3) +I (..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport\core_cm3.h)(0x61605444) +I (..\boot_source\code_app\startup\inc\system_stm32f10x.h)(0x61605444) +I (..\boot_source\code_app\startup\inc\stm32f10x_libopt.h)(0x67177362) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_gpio.h)(0x62D28C12) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_iwdg.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_pwr.h)(0x65F3EF70) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\stm32f10x_rcc.h)(0x521ED710) +I (..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc\misc.h)(0x521ED710) +I (..\boot_source\code_app\service\CanStack\canBus_hongri\CanConfig_C301.h)(0x67243FD1) +I (..\boot_source\code_app\service\CanStack\canBus_Com\can_def.h)(0x67219607) +I (..\boot_source\platform\drivers\inc\platform_type_def.h)(0x672193E6) +I (C:\Keil_v5\ARM\ARMCC\include\stdbool.h)(0x599ECD2E) +I (C:\Keil_v5\ARM\ARMCC\include\string.h)(0x599ECD2C) +I (..\boot_source\code_app\app_boot\inc\app_cfg.h)(0x6720B2FA) +I (..\boot_source\code_app\service\CanStack\canBus_Com\iso15765-2_def.h)(0x67235D8A) +I (..\boot_source\code_app\service\CanStack\canBus_hongri\CanCtrl_C301.h)(0x67219591) +I (..\boot_source\code_app\service\CanStack\canBus_hongri\Diag_Eeprom_C301.h)(0x6728607A) +I (..\boot_source\code_app\driver\inc\dev_sys.h)(0x6721C8E4) +I (..\boot_source\code_app\service\CanStack\canBus_Com\uds.h)(0x67218E85) +I (..\boot_source\code_app\service\CanStack\canBus_Com\Can_Transceiver.h)(0x67297611) +I (..\boot_source\platform\drivers\inc\can2.h)(0x67205017) diff --git a/boot_project/Objects/if_can.__i b/boot_project/Objects/if_can.__i new file mode 100644 index 0000000..6f859f6 --- /dev/null +++ b/boot_project/Objects/if_can.__i @@ -0,0 +1,6 @@ +--c99 -c --cpu Cortex-M3 -D__MICROLIB -g -O3 --apcs=interwork --split_sections -I ..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport -I ..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc -I ..\boot_source\platform\drivers\inc -I ..\boot_source\code_app\startup\inc -I ..\boot_source\code_app\driver\inc -I ..\boot_source\code_app\interface\inc -I ..\boot_source\code_app\service\CanStack\canBus_Com -I ..\boot_source\code_app\service\CanStack\canBus_hongri -I ..\boot_source\code_app\service\Eeprom\inc -I ..\boot_source\code_app\main\inc -I ..\boot_source\code_app\app_boot\inc --diag_suppress 236 +-I.\RTE\_hongri_boot +-IC:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include +-IC:\Keil_v5\ARM\CMSIS\Include +-D__UVISION_VERSION="525" -DSTM32F10X_CL -DUSE_STDPERIPH_DRIVER -DSTM32F10X_CL -DUSE_STM3210C_EVAL +-o .\objects\if_can.o --omf_browse .\objects\if_can.crf --depend .\objects\if_can.d "..\boot_source\code_app\interface\src\if_can.c" \ No newline at end of file diff --git a/boot_project/Objects/if_gpio.__i b/boot_project/Objects/if_gpio.__i new file mode 100644 index 0000000..a0829ca --- /dev/null +++ b/boot_project/Objects/if_gpio.__i @@ -0,0 +1,6 @@ +--c99 -c --cpu Cortex-M3 -D__MICROLIB -g -O3 --apcs=interwork --split_sections -I ..\boot_source\platform\CMSIS\ST\STM32F10x\CoreSupport -I ..\boot_source\platform\Chip_peripheral_dev\STM32F10x_FWLib\inc -I ..\boot_source\platform\drivers\inc -I ..\boot_source\code_app\startup\inc -I ..\boot_source\code_app\driver\inc -I ..\boot_source\code_app\interface\inc -I ..\boot_source\code_app\service\CanStack\canBus_Com -I ..\boot_source\code_app\service\CanStack\canBus_hongri -I ..\boot_source\code_app\service\Eeprom\inc -I ..\boot_source\code_app\main\inc -I ..\boot_source\code_app\app_boot\inc --diag_suppress 236 +-I.\RTE\_hongri_boot +-IC:\Keil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include +-IC:\Keil_v5\ARM\CMSIS\Include +-D__UVISION_VERSION="525" -DSTM32F10X_CL -DUSE_STDPERIPH_DRIVER -DSTM32F10X_CL -DUSE_STM3210C_EVAL +-o .\objects\if_gpio.o --omf_browse .\objects\if_gpio.crf --depend .\objects\if_gpio.d "..\boot_source\code_app\interface\src\if_gpio.c" \ No newline at end of file diff --git a/boot_project/RTE/_hongri_boot/RTE_Components.h b/boot_project/RTE/_hongri_boot/RTE_Components.h new file mode 100644 index 0000000000000000000000000000000000000000..0a94cd0f287e187d0fe162b98e3acc741a4d49d6 GIT binary patch literal 8192 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 literal 0 HcmV?d00001 diff --git a/boot_project/hongri_boot.uvguix.Administrator b/boot_project/hongri_boot.uvguix.Administrator new file mode 100644 index 0000000000000000000000000000000000000000..f6b794f6053acdbf28b6dc6ca53909750ccd3518 GIT binary patch literal 204800 zcmeF$Lz6HJ4<_oiZQFMD)3$Bfwr$(CZQHhO+nnz#PR;y?H~ZX`x~j5CNR^d@X~j(p zj7=PAiHV6xw=V<`eBuKlzsY&CP0|I~m_yhdk;s*c(fMp19yKVyjkfxId$TGDi zL!?A*Bb&6EI!kYCqrG^*bYG0)^n976DwNL5QE(^?EIeLlUS(k9EDU&!-a$t5Cq@%Vr8qAm~rmlw;GsyIU>`<0n9=U5V0 z_`J}3_W$K2yhf)|OO2$rfkPud5#}rWudi9@XZdl69o19|t)d2N zRRp<`58#AYxC>-YqNx;&Ajqytm+APgW8M14_{9cc!OEXeFHfsS7)H;nB%bk8U@LhU zhzS-TiWlRE#Kl0Vv9QfeI*>s(tBWhAHkV+%Eeg5&yf`54Gm;a`2FM(U^wn2QjVBqb zAb$|&4qyB&8SZr^HX*C9CvM0W7Q~{!Puy_+^GWJ}N7RwmOhkKsn1}$5KkUm>3*kod zK&_69-*7^$|2sc+9Pu;Sc`MbulWnDl@bD~ieq{-BOo~TlW1pS&2%}My! zw^)O`FsmHA&9br3@UU|{k^~IG?s;MX96WD6j{jL~>A$?c{~k9oo;k|FK(NAO3E-Xh z04MU6j?21Y(xLHPZn_h=F9*&bC-jQ#^_9D0`NXzBQ z&7$A=0gt8}Lk(iQ?>V*mN(o?A5O5zai=c}oqXJpC~M*KQN089YmedL#ox4C_#nf=2g82#H| z80O~BYf66J(n-@ELc>!{(J$@Tv=dED%mB z1lEjbH+$<+BR)%blSj*{FLuy>wNJZ^#6z(N_3q?D`4U7|zB437x$l&>j#52;V9TjC z8|*Ou_F05Jh=kKFy7gSN`Cf{oBg*6wKWvQM?wJSSgUN3iL>M$y2Zpp-H7Eac=m*UX zDRj#9Kh^MmK?it_b)dr^Gds!}!PhbpRT&Z)2D4efKgS(-CrO>Z)uW86fYO~9W!s)} z3}}nPC@Qi8>_r8`7M% z{CIeG`>1P8UDnASO|7y!WoNO@u{Q}uxvT~hMo+BhVXI2VCRgz*!BFKX1VNL>`~H`* zm9(6ZS&jE0g_2ahT3zqJX=9_*G&reY7F0>(@8;$1K?RS3%`G>Wj0M&1zd=mqVm0#zC?}T7UMP`z_S;qt1%Ye-if=pyx+4y%hB+&zC(iFe;&W2oVzw}n)C|vO!SE^RcLpyX zmI+jE0B9a!G0_zwe@N^fyS&hI%IvRxO0}TsRIW)%L5`R(yCE3f;yjOcyVP7#ZC)!^$dR zf}gb!T76dXIxVjOA3_y?`MePA2Jfy-2xL{qSog5+?Ce~cg3StQUewz6ezPOMUKtiz zXB&*PBi~~7iwI=%E2Utlpy!9*H^?rc{HnrK} zaV%s>{1wzLujEvCPFt}zkG)`;knWc(wWhLvY9ZN6{etDwiqCq;2tG68SyFbT0c~|= zS(bsgh37Xkz3RuDn&b{hIFv!1cSsnz+U}e1FTsUL$jNnnH=;B&M6JxknI3p(Qx+FO z-feLX5>e$!J8`}V^3F_!Kj8vo1z1Xpr$@tuha)(VOlDMimwzjt7Cu^8lWc|KxOfA< zbqXoxrKwLlMP^M%&EQ3%@+_vde@7^cW2-=D_~p&ASz|l08j$FusjNv`ka^~rdrmh- z0kEbg8SgbK4SxU&FkY7c9A|lT9xVTAab3rF1hj3m^K}1ES&w=c~4Z@s{x6IOl?BOlx z-|c6X@RZ6mX`!?DmU(SY0(e~gqz^VWkN#xDsz zOV&2XnwyDm4$V12SJjk(xHhtC0=2G5%YgPOKBcnj zYSNG5;T1{vco4D$Xf5r+vV*J$1BIv4-=e)K*I&x(%#sVA3woo2o~ESP?j&JRCf(ER zd>4|q>Mq<*oW)P2P7cpyftY%Z=#!pxuZhO616J}AOivX(Iqg#Kp4FR{*um4keuqC_ zs-d$YEFJ)qn2c($$$Yf*)zh}t?3{t{QqcAl94}Na13BxX3u0`!iAjD#*ZIENGAvaa z&zUyv1nU>l;Mm0l4J*e4&p7;SPHvn>t$Qm5o$=08 zA%PHx2x_7@p<__!`1o&57m~43cLn*lpymk<=6U$k)?t|6WNuK>@IwWr3t{XQ`2DUs zI>Z-XL+9K<=@R-DKhq6hUImY^Vw$^#8r;WfP|pPC$BH#CK{jtAvK4AtPP~yBNc_xY z!>x$mv9;3y&I4(x_Ywunnxoaw7LAuXKt?6P$_wZ9_38$mc{hv7qoaFIMA&;&>Bg`K zz|8T{i{kXbQV?J%=vki@%s8IQD+yaLHLI=H#3PIrd2P zLYt-yqTb`##8s86p&(Ft)b12fI^0>w_7L%b;Ja?Y;{;IK1=r)dt+Lw`m#|ZX+2vf_ zWh?00aE3v#Qf?vNmgQH07M_%bF}*0}Pf zpR$WSaKxs0+no-8#Ie8%7j$x-?<-MlF0r?8r9i>3vbiS>85ln02w=O&>5p$JWjS#7 zl3;}RNy=EOC;D$ZE00g*Z{kSbe{Q}>vib3HhNo&Y29Gg|`v9;3_Eo{qj{;t%2pV{i zlOefjR>kTjk_{HKW?JW79$kjtF{f)_p}F)3Uks8J*Q$;Fi=BGm9lvr?0!TP3pn&f% zc}N@MpWK-!6^74NyBGHWnoyrYcpL&hn=8}Z$iHh7{nLf2*;MjQfxxt#;#sX$Dc z5^D#04vk)^ttw@8o6bv5RGXz^|$>jdVemN^!w zHE}_R1t{8d)-#{7SHaH;oK%lY)ta6E99ATR%M)Ox4y`D4Xgh=q+67^%32ol`UE2f) z88OH!FT^8U_>5ZXn%`4rQS21<@|<)iTdj`royzXKtwYKXva@xbydcPSscPZ<(;WH4 zjWu$6a~3=1J_-+@Vt=&^>X$M+O@_({9lP5%1aaWSx~$ zXYx!RU~K%*A)!TwHtDt@-ua*nTv#f_hI`<1j!J&#^ih78AOT#cVy8V+kt$r3aXq-S z1arDO4X;Nt)|&Qg$&ga>ODOM_q3cGEWF@i)d=z^RUI?!D@iq@JDEm?^YgwKu$jcdDw_^dzAO2w(I&^r7Tz*TQ=e&Slq{7n&dYjmwGY&=d&4IcQ^x)X9tF`){oc?y zY6FbcA?kb+W(CMRo4C{KZ@|a0WDdZhW|h!F@wJIVFAkl(VIqYlBlE|ml;*eNQ`%HJ zc8I)RvJL~s+`KjD#({tHO?>Q{@#IB{d3cqy#9Vs_%JWa;$XCCA%F8bw2@E8P;lx*V8m-dTS zHK3$94uyoW_k=PHMC>kXUIx7{6FX|LT0gb(5X_@5m8vo%` z21uU?49_SB^csAAb=m3sVc)*5uMxpECZ*mv_6_Wo3+iZ|wJgr{xp@0b!B?kA3zyyr zV;$^pZf$Vh8FOMo{AU?byGTmR8Xt!Xvi7%v$kUfSd zTyVBV5X3ah@J}!>sIEbWy0tmHsFIw@vG4^5Ln&3x6}wxYAEydU_J{tMDScuML!?h; zQAHzaf0{As;^v8m{YLF>*m?OU-<75%!Y`M1!_fvm{#DbT&d~_=<{L zUuf>*oXgqowaTWNN)tGzG#^xHo*S3o-$qr8m#=>mL1(bnb zmCAsn2g8lr6G4DUQ<-sM2|@teZf};$vn^C&5Ur!7f6*f0%|qI; z)FdP6Y#e;6OJKtaO2g?^t6ZcpvT6UC+l?QK+d%>)gp6 zCnzp{TBbvfKp0`fWNxi=AgYj_W!KS;(Qgtz$*=~z+G!D)I67oZY&`4>H-xYBZVYFo<$f}j*7sAMnbOq-Zk#ieWAK2rowpE1?HzBr;BRke8SZ9lF_PwgMUj1?o zdk+_c0gIs+_4>R3+$CsK=z9#s5G;`0;8vYP%!6HoYLBXd%EBz}Et0R@Rbx0P9+Syu zN&OGe@*M)Cx2@c->*?!D)5tx=Zg*ZS*uMlVJ9P>Q2t05oqQ^a}6Nx5YPNWTD>GQ3+ zjR3B~!#4G_)^Z{>ig@y9M-b}ZUq|%I3ZZf_QufRPls%*+)^6%8b7@{Yp^7uaXJn%v zkvlm$ub+ye2s|!+vw_YOU1*egdv1=%yvz8)0!Wzw=!D~xM%z)&Z;8L4Rt%;y3Fh1WtOtY&$yRgp*wYj zALptoAcvmUdL1ZL|svZA-0~ zc(%A=Nl1oTwN4thv4~5)@Jl5|9HmTUmrJMjJ}>A%EBD&dd4+m#xR`wUwK;U+j2wIT zz1rf3^3|h%V~+7ogsKpvZ+6z7bJ+O15t*mC-{|P4=a4T?KL{)TttpcKBs zj=OItwN@{i9Cvr$B0v0+(~28j|A9Q_EJGr`mTb2jPoNuH$PoLMuSDr#F6q1eGw4_w z7Nf4K%tCzR?H`~SgX(Kt!NE88Ye$EdH#qRS-$Kce*Am%~pc{}kjWHNKStRYW6w&{ z$%-cT7QK?+GCRC#4Khj2m7-t9^hbt{A&gRos=tyRK_=}K;UbwBp|^Z@AMiB|bUEnM z4Z`j`w1CKU7M=>P6gwsCV!Re)TP|l{$0Ie`sjpwu?VcsMQ!LOAYPZ>REEX)&^$4x_ zSeSDMp7lki2+5~c(PoSjqmGDnMoILoWJpw%eBQMqhWXkR|KB+>!1RKWGC|5oVU^mXtofwlrsE1x`d#j8XO4VQT(2 zALvM9ryzvyCwAP|rQsc!o~Z>A^BG*JYqEIYUvCE0w5Ru4;Cv9+qG6E=ALTLS$T1K* zJ#R%7DjUkUGYbCi4)cbk=w&`$ZjB;F?pQ9DPU^zVNkd249+FhW;98sx?;P^7!<+G1 zt<*%Hg4AHd6(^d)mbK;kJ18uS+nAn`fuyq|9KBUl9g5 zwz*4Tq@Pe3b0|NJk3{uvV&x*ISc#aiKOzz`7$lQMlcaYWosX!gR;LZfS?W_qN|GHc zqQBvh$|8)4hG*klSmsx#op!bRovDnS9&#F4~5&zTZ zM^2XCY7c4TfVZ#H_{(85gmasj%ZhTwPUTTliEb7}$jaExX!Qb9{1ql+{!l0c5b!PF zWyrw&CYs!djfLfEnX}?;6Z9Vm#o7q@2UkpB!wr9u##wD1zCn@`jw|VQl%0>2DgyUq z4oW>uZHd7)3Ju_~6WJnqf7t?aM#(iNiC(EXY3))Lfyv3md%Wl(WLbAq#?;O>meOBG^#`@w1+{{C%BD%JcZRmbHojwFEVVgb}qL)F$+{X zmfIaTbeqKFjABzcMG#{*`w!NZ>1?7PJ<}Q$htIw_a1`7mow45L?!5T>Q;Jw}yiS)l z+@Ett<+_(~hWqmW7=Fu{EOf`YHA~q-Z!?4<ojL55#@p=!Z_oz4%vPb2@1h4Vf9L&lReW zQ;Z`0xGul4MGk~rV37#`EI~*82r?tRft5^%H3=BSyx?2#P0CmIR4k-bk~}wnB}cV$ zKuWMlSPb%qpH@K%ZpWV4P&_Gk1WvxwxW)Q(h|CBj!k#{DB2zNB8wd-8v1lm)P!}SS zV@7I22ZcYsP4mD796cNCMs#T&1iJI^N)w+RMza{!qPFVva*c4^I;cI5xnZ2}STVf; zYqte5@x)jYG51S41m+dfl~WLPS$;P3rTTw24-4i5VMis4>uknyN^`9YJ_;c)&2hAZ z-8mTql2IAU8pUBNao1P1|Dc-`w;kJdQEPOc{ACVDa7&9WJy`Uf*Yx^aqViyT6hJ8(wPGPOu{n|c#Jf;+NlC^1W7+HEFo%i*dYJ;444mei-p0cx`OarA(zl2=!=V%rgh5(V~ zK5E3N`HAr#UW!qBTD%_LO(F=~dvzitmO1FHUV%u)a1xVi9Wxq)bfrFy!id6=!tr~( z@(jf5g6zv|?{LI^Jy`4{3w{-%1Zd#t*}V@n+|QpjTAdrswSL=vGgWS8>o%?UhNXM0 zqZr+KzHD_sO(2Qr@;qC07@I3d!0iaEdeYxb7!YBE40T{?NtJ;^cnCE6Knm)MvMpi; z5s`+CmyOZTuf_%rMQ8v@Yh;8+N5t*0JoUF>F_A$0xHvC0wCFHEYXq_jZ!`>k<^P5H ze#EuJ3^3!z%^(~U) zF7M6W4EXF}zi@QVjf&7Cxz9fbe+Ab8ca?9+s?e69yI z%rsVr6&%c~{DlLQhJgS3TQHQ5M-`Nr=$b_5rTsUjS7SiyyW7T6idrbyAp$!dqdp&U zTpL;_*~2&RBu$Xv&J0XEseM%pXs&PaC2Yo((lKMiU;AX_>TMFs+8;Hqlv#<&u0Wa) zWh}Ej!#kT&0jX(7R^Nk3~Y@d4VTei{&21 zim>9Itgsb5=81C&Dc35Fx)O=O9Vl6os2pr1u&}(IzX31B|I#S-yv%M==z%R(Wn00X zaCDK>)(1*olw582#9fOQirYhDF{tEVv-)Wg`s>Z$Om?`e;l#x%6I&i46b&k~=>ZDO zEYtz*Oscb(lTrFMV z&r+NmWHAOvyy--OIkwTUnY07;95g5dJe<~f<|}oHO3x->r>*54nVI#Bobne({kJ9Y z%j@|IGBDB7SdwYauq;+3Q#mcm_9 zWTzKd8p382-qkf}-&Qad3L12?iIf3Fk%4Ib%QAL#Yy5H#=Tqn!g^2=9c`CZNZCMGF z6(Awi3v%B;_UnK4@g67bWo8O+!5VpXqtBau|SZJ)~Vs(i} z<~AX3xH{c8*RIr4qL6PX=wua!k@c~NzAA9#Eadxn(Cc#H?Bcr8`O~NxST40aa0650 zDm9)lj@`ZaY`FT|oO@+d9Qna3nj--96(}%>a)!MPY`*_xj8vm{$mo2pv*y8$8a7x( z2(zWV&^2e-4+wzM_nuyGNb#)^k=%N-m%+lT74DhGG8VOw0sI;|TR;*CW@`;hDx~8Im(L|8@e!hf8+kw)lJ7x`-IWDgoL9r64?@p=Ndw4ZD_whY%g-E=)2lt8t@}Ja(ezl0=?En&9Bo4q4$o_tptpCjgU+$t z{cWZ@4wbkr0B`xB6f+G4g@H7KkLDIF;@jLi*8`JKCQsP^#~g*yBS*7>PThlEC60YZ zRBh`G+L|fz286&rPmR796{FlqSOVn6HK1p>)IL|NclNAN&r%-Lb{~kSQgYHpSL1cO zlpvGPUvq1X$wngI8R$Tvzi^?P(J-FfgjOvjn)EFx*`R%ZHHZ9D4PDTA`zv3{QF>K+ zQg>abds{v5&CSGo)JxGLlZA&W0(QvQgm|%Fnq=kK~w;Z5E^=FZ9H9STs>W^_EQj1wT8;p7FvA{fXBDQzffA+$4z;3+_Hq+h%l*9D)9>6Xg+*$M}(`x*a43oA^d zYEch&;h%~c*S*cS4MAJc(b6vlC9zlE8TR&#!|R>j!(x|e|24im5p=_1Sz?CXxMIawL;cy;DW+=*r?#{!+4Gq01F2wgOLZp zfTw63X4PS$E@BRppu1J2B`w4QUbV={zrR-WfJPk&5|r`=fgS<3>u6-$d04}>8w^o{_S}_c)8j!v+-H?h*B8A3YspT**haSP?p~-QnE6ov{ zWdUZ=oS<@O>`Tq*1HWa-)6Sk17{w>Ya9|S_1Jt6LHeS%$f}Q0H>H-jP1J;KrfMio3=RcesDQlC@D|6`u zH}8Sg!C)5_@NkHo>JJMbA*&iE4rp~9tRhvNIg^-&M2!9V+4xUv#Ga^3aC^(Dz7@G& zPe`!6@P3N@HRbYsq85Dny8nd%I4N1X1(Tl%ny;*@6P96?0vn4W);r!kvU54RW5GoK z-rKdjSh@ZK)1a?=tsFBqmKoQ7--B zFAZ$7?sS|RD4m^)GChggh5B&`z!U+l*+Zd#RNUkBNCpz?;V}VJcDbRw2q3%BDYlx% z_A^)0&)7i%ZRFcHr3<2NI+I8@yK8-xmrRBMHP-h%$DG+`)fM>u^etDJ*7YEeC#0_V z0gGF&eHRxteTz8Y^YvJEl72Fer-A!h#uN)!&3pRjM-EemR`KaB6jkP8FzT9U7fA$N zl;3^+fqqy6OGxz*0#N58KHQLN2(PN@SacQ#vgdY6oUSTXRC=IC=BIk7o?!UY+)8*J z1f`2B{D6#4-q=D+eXVZ+4DZb*2}|5RsS8*o2z->EL{u{6E@;L^3>bXZZ#mocWi*O& zk%H7uP-wOy!U9gUY8D6}&?z~MhHWixDF%1k=P}QUd2pwB@dNxjoBW!Nr`BoE<0gu7 zB#C>ctE1efe6zX-WWZZy_kzol`fbRYu?r+W}N`mIum*|Ig@u0kT zbNQk(u<_N%>^(}19=w7WM+0X`%Tg-*{Obyh{kY~(t(zI}QIY==mpl{FP2D>U9d@td z0053mnTJ=x`)jchlU&m)M_St1HQ%bcG-79#ot!>RE6V>OTK5q~RAdWA#vq`=@D#(w z;jV$JBZG66#`rcA`B=`IhYSyb3fCRGNUoof2w~5b9{8C1aAF-uiPi_<=3kr#mDrbO z2iqe-{hSv>y|LColClVtwXEih7Gz!(PH;b52=>enQ~g#R z(oFi0sMiBndyinuhYRiLU7(=86UDC&b0SFa}gRzD}-r%qou7u)d0a4Z$L%*rfCq>7WgvhooMg`T~W zQEz$EQHO6+OuPhsMS@wsA8p%WP%>>Rwn9wB$w4Vrm`U1S(!S*h>B7FOSt}%A=ZRzW z)PlM<8e2BT(@D1W-#Y38rIFpvwKOvCQkLo}*#@LY<^dZ2Lt6Pph$4lH zMPk!AA#G)CmM(k>%@B3-o;cnw^_F?0usS7My(!AoYe3&!n%itucXR`ZX46d@4(2;G zLshkoucxrO(NsmZ!12nX$X*TIW@90YbE)tNR ztna`R4LC6moP1DJLp|xhzf{?_7&bU0JQWu9MZfjq?&}_P@;70G-b{Luo#%a`|A<$# zXBLGeQIeWmr?@C=*kC|`yHM@Y21636Fx*>1usxz=+R~*b=od2j z1aZR9&=(^6nNX`ed-Q2)4Ong_+8?_vcvhGkgvnmXyuufcwrwRg=4wUy#k@`Op}vb{ z2S~E1img48{OEL%X0|im$7Z)UhIsMG-Hk({0#^M{&oYy6*f1{wF{0hkJLX?6hF_dD zvUaV#BUV=n21s9Ys{&fFI>BWH5Hcz{OdFmX!br0li`PWbY2vL~YhdUB#a(hXN4q5* zI!5KB5-&@ml+fgi;Wx|r%6jYL&nsng=V}Pi@X4F>ClpIe*(6#VT#!7&@_Qkkd+@bv z*`tbau5PsytE$P~;G`t6F_OgAf!wm>vz6fHEs!nl-j7va4rj z{$O?Sgf*?QGzGV;3DLt1L=cvg_QQf(j2?EfuE;bP`P@>#Vn*TRjQ*8tBIL=OzYOcW z1Cfm&Icj-&rebBi@|oTwu-p%lA61CEa40wYfgWjeH86?`NQT6J8c%i8u|0x^r`((} zh1+Bag9<<%fW#5pS+Z&Jx{hL=Ks@{!IVMY5>~-}(#GMF;!)O4ne(l;62T!c(qDsVW z*U1I{?E*G5S1XYnxwvkak zQ7ZCMHren+^Oz)A8hM;XU57sI!WLOmB9kNeO)v8*7H~Tvto9@wOT~}JN|b@fy#L6{*SfX2i;GBPt@br?bGs|bm$-K|6*qQ?@Uz2?=DJJg zA2c~eHR(KGoK-nnwu6-ciZvGr-x^PplS2^AytOwiAUh68Kn6Z3I zVG+M-AkPS2^wWV6AbkX__t5O-se$3Mbc;9B)xY50F=7@m!U?jSHq$csiC@|Zon{0Z zT~wdjw~z>=+|zxsWd9mF@Pa%D+exm`lYFb0du{u5YkZ7xgep>D{IG7TOmZ8W72Wd{ zA5rxQ=VIzOACCg+Vy9f3o6)?tP|m%P+uuF7-Su3jOk7D`qDj>n6Op7eP}6K=kA$E9 zL=4k`Sf;SITD(@aqiU>MYI2+Vp=$BetHQe-0hJl8)%Xg@m^x~!QDj|O0QIGv}5#bJ!Gx<>WON}Xa0Q|m& zqOskg0UtBcxz1gbo{I=3b^DP5zOTjJPzBhoMAskDe^&uN=lO1OHNZxkxw@fY^Fy#e z*RCr!(}(^>KCfQExuG=>(d5bIGNXZr-+Gl>J=eFo&8=X!hLc3o46ZU)3lsQG2RkKC zr_k`)duE7B9-G4@fW8M4IYojxOL|6^sOm?SDTW7OKU8tSc|bm(IcOKZ-*dc<>1JGe zhjSZ?APd(3Nf;FPn_&?1C-o>mXW~m#viz>Omkpk5y2748xC8a9+_cw1habS3TehQd z9=FEA34YNSfw3GFA?o;Hg33ZyDhr$J`-iNwne=rCF$}n858xrAw?PmLO7-tnZ_Z{47K5dv%4#}+^}A#3Lqp;mu7wo&r4cErTwEt* zeVaR~o!j_wu-2s@llp-1m1%|%pI)HkuAV&GLgBc@lO5Fl{Ra?89?y+AvE9qEvXD!- z%x=A?mOos(QhMT0uA#e11zr5DL&cP~7!^Zoyb^cw;#e}^7U?V~%|r}7#UhCU`Md>l z_6s#P9&2*KKHJD;OeDp;4~e8DC9b}SAPC~^;~54yT{VHCPAEA`RJSW(rsO;1M1xp7 zu{Eq3gh^{IQbbLB)GVERoFh@sRV;Rdw?ccciux3zu4AedKdZB`&serG0hK|$X0MDK0R z!N3!>&!nr>pHQ`U0wFGW(7qvU6m+hEtRFc%mtug53CCBBDFa`8*aL%f_R+!}MP&?e zQY0|Fj4%R(MVsO%x8n-kf@|D>G%<6}`tVGJ;j%VGL|c7jr<=L@DWqnBJ@Zm0*`=Zq z>K<`aEcwSLqCa_v8ryZoc5}5frXGfsx(I1$*Ngv9@N3US93-}S;E-rdv_8*K@<>dpT-vArnmYV z3nk|TCF#zGi2y#OsdbRehQp;C6Rmzoe)Bc0-8Ke?Pm=4mT(9wsta3Mb%O9&po}EH5 zAy`+3F%q3UP7;Pfha|j>>3aFvA*)GO*_0O%D67jz&y#U#%|n1-@t$gKiOMlee+6RX zy5+Q5_Q=dHd#KX?&X?q3n=qXJWRn=aF0&?OvuQwSdls5)?nMCB5YJ2QiF&az!n~xA8M_IK=uP5*L%v4 zIcsC(0GYko#K3cWH$$~w+re(HsM3yg~%RFP<-L)UVp(005{*_pz1{C z;oHN-P7fv9SkaLO_xGD(xNcR2#^dw`LTxF4)j>No8}XDZUG}gr(7Ua;Z>yW+pjt-a ze0I+&a_{ytpmsKTcjpZ4JMT%+4KzC(%HfPm;F9{(I)ocf?=ka1(V+9ZKc?TP+#XeVar<(6&n@CQoYgdz&qD-=J# z1~D21puQ+t;}d?6L_WM7NX0DOlF7&LnX0TVMtLf7!SP0*@MU*|q53X~GN3i;Z_ax8 z)AOZ@>ykq~9rp6c_=4sPejaw`31}8PL~fORs^ktMmDD;k4ik!na+0tQ`uwD9%^VBW zt8duF552#cx!voJxxj;ixSb8f^?Pg;?G%xs$@ZFzMlelVriswComl1;rJtmY5pv3( zzV<@VL|{LTyPIPtn>;6N6b9MeE>61VPAISSF4>>?J$wbsAb;!Kjj^76*gGlAIDB~_ z$(@9Z%M#~RhE)`=#@#ueC~dMu_3O6$o}p0$V)v&u|s7vB^3=&N`SNH!gL&8{Y}EJPW{`z8p& zmHSURaLB2{6qHCiCd|T7gn}yEwOp>TlzD4rXqF#iEJ9+Qnb*^G<&f3!1Nel|2B>OK zC`TF}ww=tbFm7D~*!2$t4Qvem;@=if-ja-nFef6o!KfE~U*J06Zvz>0a5=#fDwYW! zM8Z|TOA&@0Q$!d5$U4i*#_lh7*}ZA;6}YQ>aN&D5WiKaHbhxvQ!@SJ*=MxGO2l3Ny zgVNrOO~pOwS(TsEWda23b&8n`%u=ojrsJ9~VxXTaQ z1)R;rLA&c9QQwQQfDgfhfd@NCWEg@8l_y`I=(gR|aL|wK{xOCusNAGU(AoR#p#f*^ zQZy<*qj3XHP;K_MBTwnC4+SeY3~8g@z~VB3S{Ac-bgA{zo|>z_rIc=N>OMcwR-a}Y z@_&D>KIubcZ`291>qT&}@d%9ym4E{L675zK%6f^ORxLb*69GZqdx2YaZ#*5mpX1A0 zL-9O?8Cy{jEChokJBXzRd=;h`d!oX3Tc*-P(cF4Q{mLJm?kRN#3Cf8#I8no$j56DV zOtsX6xkd^E%(|D7Wsb$A5Ll7{DyM;sf~TwnH^P6ZYJt~rpW&Wa{DghVkT3S{*Kgf! zZ!N)dgFxqkq7hiG}IxbE)=j;7Vmas+RD<_Sd9jUNCNBcAeMICm0b%p(5_El0G;* z@oZ3{hRMOdE!;L~VkZC8brc1oP8Lw8izY#*+p>~*NF(BW-!U+&QFiO|cxRprAS%R~ zrM;tc9lZCNM+-PhNoi#}&5}_wkS@tUP_`e7Z0-?P+uxLVSB z)|7e}xoiyXk&4~X*IaZ&KsK)YXnf^0Yw}SvtAS+XR-52 z1Cfg$$n#ar(HWRr5iDA;<-72Z!&aHZTpEVS6$>vgV|^gkd?F|yfzwTCotS4C+k2E; zQiDISL4Pu-FhABt=#&N1$T&#=2Dejbmj&E;`kQe7Gc~Ww)jKoEN8`me6Tcw<r7AMi4-D#nK5hpvg=%S}ZztCsivr$WY1s?sl8#31nBpAufPDI#TS`HXHJIZJcRhB z&o&l~wQr8E%h(8mfDRMfA|Mh<*yYk2mzNt0Yc?vAedr4#-TH^874l6H_Sc`;$fTC# zrK%hZcf0R!SpE^ghh$=TX{wM6aEbmH%~9{%dAE%o)OPVBpOD@r=rt!u7~qwB|UDipWak|jh5EZa{coCZOcGf06gcVWIDiT@8X)>Og43b2Z2PXQmWMrb^1?5IXa!^ zi-Eis3PL3If~@MI_?C^7Fz%LVZt#M#omI7##%X#1l;#)e%#da0rZ3o{aoHVf4gYx4 z^hd-Dg0VD1&l(WY_P-G>Y`hH}n@5LFsKubSZ7s~C{v##gSa%6^A6#@5S41OJgsmBF z2N_)_C}WNQ7m~uxKthWG670|jvDed2VLfP8W@A9l`?iMN`LHNi>g04>+u6=XWEILe zG2vk2wu|VaOvDrF{?H09Y7(E^wu6MB1F*C#y+`SbUb!f3-1G{I9+DuU=!?_E*~j7X z`l81ZO%zKYmbE9HbpPiDTQu*hz%EEc=8kPBNO;G|<_JC{U1(&FdRCee!V>on4?;T` z&Hgn>k>6gWa+5d?<#P`2dKa56}`BoxQDL8ALXUzZro#fzIdN~2nJ#jXf6fEBU zu=stbkQgYTq--VR$QXmke5QZxI6n?OWPmb$hM!KhtSOv!mHCS8YBnOdM>m}-1z&^= z&jnrIp=NCtLz=V+gc4^vGVwWk0sL??tmC3V+Z+A=RjB(rCCR>dFGrZ^lgRfJgX$>( zc~7`Z2$#zbgb&3dGkfFy6Q-tV&?>T2lNE;Vsa#Wy89_m8WIU(&zZ02SnlOh5y5lzt ze-E4ZYAMjDVhu?_iw5`(t}>IuBW`4V^epS$kt})yON6IoPzQg{a7_R>-6+bSyP@HQ za22IEw+Zy;C2Z|zaia8&{U`gRWmK^BF3}?DLIiLv+ett@V&yD{Eg;%j@6l{K%-Ree zvT4+1zZIpj+Nw?B&9ZQs{#LWYyB&Vq1rXJv^^#|-K%7V=_V&Lu%O*Mwusz&WaTSoE zA9O}$)Q!&bSkep}P{VdDOC69REXB7dD4iX@i1bN9Jg$BzJPC!?XV%s%$^JpZt^W=# zPDIZBQ~WOJDg&!{R$h-+)H~XJ+dB0(X>)Lblk{rD^!t0gbC}Gd!4lnh-I|$#Ez7bl z#qA<~8r1Vsc)^-P8V^-YXr#eucd4u6&Lz-unP!2DrQn-sjz!dyf(kz~m*&xS<@<-G zv1>k>yOKv1WwvpD%-K)X*THp)xClCxdD0)?^bCF}zJZjt=I8AB=}I+`%n;ln6!hvs z-3>y}9h8-#2eJpkJX>H)5x8y){|qPNn^Tg;y$Sg00#EBs5MWYUOpyJ>Iq0q@-_Y5K zAkQ^e|9qs`F73q5@Qk+NV9-q zU6;w+;rMlcu5`96=}^7NgS2`U$kM~i)?I9X^5BsMsha!YPnEEcij6R`HPYj!x{E$< z2cY_?(cww=Fa_FBendvV2}{GttIFd-$uR#Yx_Fr#A{avuISOg`32`qHqQWbDCry3I zcQs^pdp=W8twI5{M=7p=98nzap4l63uEClc8LUGfh~|9HU$N!)0bz`~5>)8F82_gB z`5y&K6-%N@Ca*RwPC5Qta$N*oCSVH)T`At_gP{}J$Y3?FPAL*xE3kR84awI{zSaRl zp|SjYZwmsur=yMT6$WTz#$?pF9m!yhy$c;VG|=pKJCl3sj*_u<@gGIIsD&zJfTbrA ztpe}EJ{+JYX zI;$`Klqi{RF9KyE0271LIqmkcB;Z0SEw>gOOK>cYO$e|+2El;Vy*i|2O?}|O59-hA zmnW7jjO2gf45ayBRktvnmw^em?nq=Jn&b^hau(amOCVy(!lG^}M6fyd$S}$CgkwEH zCIh;4u#EAqi#9pJi59Zl{@o%htcR>z9L@O&0K0I35x+A~opunh&p_m!C&;aXe_A6b z=++s0Qu3KWE{jS}0O2;`EO?p0L;nXhuMd`7Q(ca3^F*-BE0gTlh7A4pjN z4Yj$bTqg81-~ii(Dje2ng76OisH6l%lZXcip>J)TBWXq-q1xd(F%E3>Z%^NwFqmGu zSp3D@0L&IbD{9KDs}ol18*4vAcRe>3M|VnzH}aze8^}Qf<6OkOj?+7YB)+d-+xc2v zj(j37*6;caq|IKUT9wq|uV2Tk&9bZN&9{I$57MY9kD-K=I1PjzWKWL2$5XUqC5ac^m&hq6KvAImOHe)AKAirQQk2FQ2U+BMJ|p7a70jk@X-`067^tsM z(*a^p%4J(*FC0I?TgSqutD+nJ^>B~Nr~bQ?j#JEMdOaRoA2KgW7#k9+jp?ZbBsN?* zciW3mo{KnkzcGA4m0uc^#d*|#kK8MD+#TOeFc_3#4N9P(=1~o;tA%2s<|kc-T301p zxQ8Z=v@HMp$wE!c^YPiv4LuAJ%3G70#a&wjC$yP3PW)K1eN(&=#;lsI^m5J;HtZ&P zM1auB;&OcolbL0hb?5i--Sru$GX81H3pUTwNE>!%LsLYpU-S*0f%k&nw~8?j2&|i{ zx5PE+T}1t7N0j;qrr6$&Z<~t1&4Irz=Y?2z(Ek~NG$QtG*m)5MXFH}uQ|d|r?=R;X z#51?uGmHu%t;!mz!|qdB1tS;WNQx}a1!1mn^J*UyXWsj<8Vu+98K`c$EMpmW(h9Qg z*54xgrp_$`-}zlqD~wDw23_v=MHwKQgAM%jFr#eK^9N0)jigus{0x!*Tu^RSs^XRX zi0`EUS70SZ^}?*7=CSrBhSA;Qv^Nu8k`EA@rLJEX=DRqm5VLzqzCp>+8{#$*90_N(h`wROc_QUf?PWG?|dDH(xQ_3!W-AmoC{f+)3MH zHA>|I$Fe-wRm~!bw&Rd99c1FeQ;?u%J0?^6h%b zl&{dxZEu5=L9pY&dTJFmF1LUMYt#B-&k!Ba3(Dfq3A~e{ZO}~2z`#6!n4cKT#z{va z$g6NR!8znoZlM6C>2TY;r&GEVNU22pvHV%Hwp6GI(l^5#6-*sZe-_N4A%)G%WVToj z%Lb;M?9`3Ahz=-=1GYITzEntguROR+dfMh(mN2r5n#CDs?eJ9WDiex#d!zxCk;U7{ z79J$*T}DPGs5CoW8*W1dl8X$y67&l)v0s}z_%NaYWvf;He!jml8Lv)vjENL^=$sF9 zO^>sOmSq^o!^u_;AF)n?IKd262-d9S30z9go+J7K>y{7{y3Nb2wB-bYL+GNSzX4Hv zsxrfM)rE%-b^6OqcGT0N!xF=~c@2n2wM12-?aSqG3?L)vtWmh3!vauL+^FMV?3Elk zJ6eiU(~B9rVId{pShez9RayI0B33s;7$Ae~%R--ko1)TJM0S+J8WIMKvFcczF9{}E z(=IUM`8p>c&mgPjd#vs$DslTD&`|puBBHK`@Z#M0qJ6tdCG%x)t1@E8;3$T>!qyD% z_kBk|@g=FqD6z{pj!L>)f$30&1PhlJ+!;S}EYKzHLpLsGCLH0|#0Up$qXUxjyZ1M0 zjTEoIn!ebhY8^SEYo5o*Z7{Hp14mw%UgBE}yU2Co_c^Tr0w#HKs!hX3_dd&`1VxT_ zC^p$oC`>p?^k3_=QYu9>G~0!Z~ST34qFLKHJZ!GC}v^;SZ1q|SUf{$1V2SfCXdp&%t1 z^RJArwQq)<31N>m0ukP644()36Z!#q<0%g=LCO+M zlFRfO+2n_sTk^t`p}H(&H3kela{F%B^yPo0naC~ZB8 zq_bG!tD{=1qhmij$A_E6{z#D-FwaBolnZI&v>oUtnOwd?$}Xk@S4YA_BuHy>XV+DK z1dc_BDGF{Xv+s~ZB6fSmK4$>9)(l3Ek?5Gt58Eqpn%Tc>;i)Z_j=k$ar-{ne+$zIW&4h8cGfM=0v@R2UZ=oS`E z=umfrIsGV6F&!m8aF3Dut$wSGm{uNk4#c_$n!l4-iz9UcWir14;X63?nhC{hS>U3? zE_s>-M9^j+WB(Jga0_dbVE$CGX#COv|7U!umGfpTusA(AKpI&(m8PHOflnaFu0=V` z$sO{~v0WOaK#)ymAX!Uy!A2C23aR)zYc(i!oTDSgpo5h&4%vU>GtJk4Rp>U6*)PX( zux7i;!Q`lFW-YiLz-`3I9y8N5i zJDfe;qs$Xpq(!kCMFF%N%0yaT9IX^ zUhAWaf!uA&H{fwnR+Ax0YjLvc+hq%!rd|P#DZbwC9yB%&T8oPozN4OD59)LqYr1e@ z4AZ!!HnJCAN~)hgQBYD8A_OB*i^{)W7Z-*9bpEkcX&H4Dg@_)LBG&#`$*td8YkS8D zo4(g=%a%5ody^Inenbi3?}e-qgR3Zj_(atN82+nC%cyt8DQZCz(d0{DXM(s5MTO8| z1JcRY*$C-iK0OwCdrGC0YI860YS9}UNNm}oI@-oX7VcyD*a5^!iCllE=#UAZcqKG| z8k2fO`DrH$O$-PFF*$v_gQ^jAD%3UgW;iPL;1MGCbLSc($BfL6i`(F`e)t*f-HGE3=2l!(wN^wQAxWQ3blZ^=O zubwPjdsx>mCIPF%ypXQo4sqD9ew4vvnH+FJcN7NiaPeP#4cVQ-s27Ct>Hdcim^?i! zaJz_|#G*b7*{m3H-xGU4)ty2Rln{6b+#-nyFad5Px(fMUidhX>{GSQK#IRwc3;Yd< ziUo!dnikJkLk0EH;xU!Q>+6K#>HN&FXT8rEn_e(-!o??420InF!qFj6-veFL7uRLN z&$zWEMn;}W;3Qo{j&z3Yr@8FQfbRV@H}zhE%zz{VMhAKbqJ<~)2{2~7XX~ft`T7ij zI(eJL=mWLAQJs(1KX5yLSzUtM?Eon^Z@B*e=km(oiXanEu!?lsGxDSlN462qhYz){ z2eS}{?j<(B2#i&lWbjqTehS~A7dUTkWG_Y(b*4!Ft#0{qCGPXoeZ#LaO1&--5*p}TYQM`O|@ zO2ivzwALatl$)L*B$QkQK-`>YPHz(!?vNKv=g_vH?KD9wxB4C-xvGjIT;1I=9Bvrm zD$amQ!xGR1Ts<9?g{vLKt@khC#6x8FO)$aGD7>9TM?|MZK57U~e?1^A8!$MKS|Mpd zd(AtBOoJtq1Xwyp1Wjh;zC7SzG7ym_>Mei|!~~l`o|H?lDw{FfDt$ z2a_#QyX;yxy z^}6KwIiwvlThFcaAE~h^`E2m^Q!|oTO3#kmU7M;x)^FcHr zj`zddTSi@}(6@3JAQ1OSO92JjV;sL%0uqf{0oeEKg|fA;a0eFS5^0jDxxT=S7?4p0 z6&vB(7n!Ro*@aBQq7Hu&3f=Yd3~KQLgQ#@8x1WI+a-AVXjXWXqegatmNmA1nNZ8o- z^Z~36Xca@Uv^t7S@T?LpO#1D^=;eCx?)FTrGQIUe)Ib~^f~@3utRiIor3U?A@^M{j zJaO}1y-q6uPyxt?cPhL&wwj zAhZ>^uv&Q7M+!OHLwc;^M5N6#C)xz(ltNX>3@bhBWEs>xJa>RriPbvu1CA`M;{Uyb zf^hxvPYdqlr(bdJMTePgj!CfdKKYYm-)DX(tI>~Iorye-a8Jd@7)+>^v9mCNKVXj( zRo=4XO(BlRdXiW7axhMRFNT$bziiVVqC#buc)KmNO~SI;n7P%H2oj=buzEoRAKPaDD4Q8Z->P2r zX={>iK~i~zxUa9DgMAUExoec0TpD;y!C~tezG43Tbcu96hgo#HjPA|~1`NWOa|tQ= z_BW&3lT&SK>P=B5L7Juwl4$ne?defMV<%RR=_4_JJnm|Gf2doYgD)-wtRDlWb*DGg z(+s=T^akYehcv)b{h9|m-_N?JkT{y(9?mPW_P<4E0UHEdGT=2{MqPS#m%|!=hf94> z2sa}q2Q$gx4^E4@TS_+Wj&M*fGvDIpl4jU8T(%$k z?ofq3SNw)Pw8KG*DZaExN&Y@sL(=gJ<#s;#pdf}?FvMzkl}%9BuWgV+)T3!@WiZa{ z_K!voLiF;(T3J$xgB=P?h9%^H{5j!KM%%Z_HT`yBguLU(l`gLeH{Yz7!l0=-j4P4^ z&g@!Cw_*qLw63Xu3A927rw<0FjSj>`Cn!taoST*DwX084;J-0NrM|H+cW8;!YWdYx zOso*1=Z;8&A;p=xmxb2_ankC{xo(JTQtA%~K_(T(fS;wahv(6RsU`Qgf69Yqx+?st6^cA0+wn!G%i}dD6 z@>`#)Uo)}{kWOp#SxrkzR$!bAc#<=tpxAEXI(U1o&1PG>*m^goxOiX&L;IF*w`ZwH z%z&HXRTq^SsO&3LlCpRcI8f|SnPZ{&mqVT#kwo8W{>S1PDa$dXBxaP(eCg~}*Ej|O zbhBcLc5XyA$x&6@gJ>{X1MH6qi-pY1?rEd2c;$ZkulOj-OC>mx5n+Oql{8Fd)q79o|}*xsUxD%WP4Pqm$h&+#hAL1xRh?o#JNTTZdq`inWLQ*67cJMu&4BE ztIm2L1`*Lt=o2L>wvwW8LZ%Kq3S&M}=YN=nlI1lpR>e{1cH%3*l%(r5wD+(JSUlSu z;x@di;k1pAe4@w(M3Ir*-`EGk0n>1)H~f%ZO5b z9v+{qp97hP)3y>MfO5s9Gv)BZqwM!;il-pNX<|jiU9Qie9Jgm{eA4tkSB;!3P)csL z-Op&UZj`_Jk{*&(jX>5Z2l-LY(A0UKai|nYeQJG#&T`Sba4JV`g=cK)wr4sPQL>;! zx3~4F6yfongEj;nvcOlIE8#*E%+&f*JV;CU9N?0%h)N@u6b>>MPJY*W*RAIn>0M!e zVRUiE{3A8G6t6%X(@4!M*a{ZDshq<|QEpnDmR$@2SWr>f68q1^m0MsFH95lfo;Js1 zBF2J$+04`V6D&j@MhUgUm9AL2Qdx3 zK`|kUV89k)?KoPS@zRMsvN<|bBS=X{jiyy=nxb34_0?xgkRG$D@A5v`s0LN9YsRC3 z?0kG^Z(CqiOfBB(u~js#^VlpxOs-fOxt%*piyL%@QZFL(`r8HKe4u(3`O$G?%}lct zm0oUqOO7i8DnJmxE9xH7x0}Onn0WrH+5njZQL%6GsyBoBjkr0F{sR5cB@!`6TY+GM zce^zU^gK2nA&3 zy?4Y0_0eNHA|*N4-GD#(OPIeIuj#b|CgUGr9@d+z>J!(J{u{K zVlrCc@t0(WEC#J0zK3wyzEMm87ZD|IWOX^Tk)jaXM;S?eKs}-#wNWYsSwj2|w3L-> zd;T0?9wML;u(#AZIAtx20@1UuZwuBO3h@(4&WLWMA2c<(elJ+VPF;wiF82`yoo$RJCE86fs3cq?DG>-c_hU6XugeXIk`iV5|<3 z(r&!*a=Iq`d(wJuw8YyNw-uZ@<_tJO+=O<4KvW$k5h@;LzD|LfuQ5IHrr*@hZ;K|8 z5dHt2J=Q5qhOkXCd{a|+Ef>ezv%ELGka{N4I_!9Pss&?XUxgTu+VI+j9WiVOk1u!a zDNldt3po|;zgIlEA|l06)nO5bQ5M|ff-YvcW`xe5>IOb922`JQ=QY>pk$FfA)&dBr!`D}Ciizb?i@P%#h9GLZ$JT=JX7?K^GBU&XNq(I9?+XeHuETv!I znV6@e{p*`q6rAifOSSWhB|IFoPqmc+52e*{d3l?N(PYU##)Iqwk-0IiHwJK0EAv;z zX~opEI~M1CB;QJo?QT91FkZG!g!>7^2cggGZ4Mu(npl-~6!ZOY8;@TsZ%qG%nsG#6 z#>|~Q=LAD^u}*h)PQiET)QrP?U`R_7ep0YK+7#wgtgIP!9ARG3Q#lhR<1N4jTCO4= zlv;2C2H?LZC~_<65fa`pLf&0t)t>y}BN?ng$wp_kl0qH1@vOvx<@@tAr>QItY$*VdV44ezz_YYV%~2~7UeC^PFBGCVfuG0%4K?ASohWdJP8 zVm5^u#m@kjpori`P_J^~&VIu?&U^7k^oGu+&ryFQA8hujW^exHeQa?X*hWuYnlJ&*S z)u|wqM(E(5|Dl4tX@{4V!iA(;yci5TibTEA{2qHa#NO0SKk?PdklA#ATbBaZ`%n0V zS>jr2*@+}m_dKe1R*PYxlvy~bFuII~HABO>0ZUA;0^fKf-RiU=yp19-6INjFUv$NF zPJHyaUG$%~7-3ss?Hf}iPM?~JF$=Bm6FnE3?F^hsYSq)MOrH*?Fkop)B$l?Br zUMp?rMoLoh4+(HUC;p%h^b7Jpns3QB5a`ewHz{TS;;ILooDlm$m~zOuK#mu^v+vSF zjeckjF!qH&^f!ApHADPimsm)a!!5FFjkS#F$e} zpV0Q7b=fFkjm`q5R5yJFnr5nFkttBq^ByM--#rh zMl1k=f{&2$d8o1^1tO>r!s5Q7t}|NzR^gXx;soIMsDq9$1|ZZwnDpwV^l|?AAvDR6 zs08e7sL-bc0~m<)@gAIhv__)T3fQ>S0igXAC}qX~`xNPDf4_aOz3SEyVfDZ59H&Vl zRi?S5UmvT+l5`X@1`K~LaUs@|AILCex6dU%9j&E7>sf92T>tVyFux3>$Dyh6uZ;aI z39j4dW<@eAhQ}+qWeDFzPp%10<{(_^SI{co;z%|+vfK!}Q$U6BT@p65VrO8~MC9JF z8}s;FdiIqofk=leTaqcc-&XN;?_6O?~u9yne(8bjUc7-xF(v40I z#iJXS4c39WIB`*A+7|<6oh=~rbXq5Qps71*_p-PpG>e8u39_8ZEv3QloM2ue z^Y`;-%}8o$n51&SL>4c>b9h*@oDx2(Swj>@JYs!iUy44&Ox7 zeC()X6PcSZ?MK~eOn&~0$+0qKNoxq(!sW| zeJR=vBbEw+FKh)_ZuP@Tvm*6y&#OrVYoj&R68zfqXo*TuT; zz!$7e`R$R@K?i>}979Oh`|{sXl|cRKGxj1np#h$HAlk&>w(&g!v9=WjqjPF4zQ<4w z4o6MHvarz^`p8UY427}@6D zU%H8p4n9zzgb=oyQiBDyf9GDVJ3H_un6dHin$^sTRP}G;u-k;6yXgXxvxVHYM<%Qk zsIQY1U62Ib?UJtHH$JP@W;=X=(`ybtzV6KNaa5>~Ayk-KSyJxy3FACIllQz-s!RIt zXCEjQf8VE>&wzGAqwO^W=H}nSM0mlm#!M&0d&9f7g%wk=>8o;-X7qrBR7@2})hDJx zawvMuJ$0i~$fNcmiiTW5to|z z9d9+B1Z%@_9Bs80_iz9t(GjFgkpC0PXUsR0fe#g7+Qoe1hVIg#&^K|9t`Xsj_0 zo0VS#0`;A_U|d^(wz{udKVC_c-Gs}^3xVUgS6Q!giE3r(h?`LHq3P+dN7nA6kVd5G z3U)E-B8+qhje{|$0%iV)XInM}5)m;LE<>Nt;PP-gCs@^073`gEY!Zt+z8 z=Cij#Xswz!8#gt;`GW2b3lLb#De{1vZ?k^3bNzt-C6T6@O5>NKTy}cQ!DN07;euD8 z`(P-^JJs$e+(xjO_5OwOpQ8Y1|K-QJlVs5z-OIBPx>J3{0Hg8L*P7JehDnlS-g zrEaHGC2DLwV<$K!B9X@la9(}6SHHxj7QQ*`l|n)czhJo#RXE-^28j_KWjzJcUOOq3 zMe;r3T=Je08W6|)E5jXLG=I(7P|%DW^mL`n8R?z@`xIMV=I0ULMP&Z97%{SSXWr-Y40d*L!#jbfd=@AZ?HGr8M z6Z=(ns!EEU=CWO36x)Mh0g}sdvx4%^)l3_ECp>S)gIvH+nGD6u*r=mfR4eZv=I1Wb zq5kWK;znk&AW={)2gj2At?Fmt_?a;qSRyIN{uh#+K_EIP;&a8WP*x4!V(*xn0bpo8 z+)hjG@g~FY;MvUR+24I%hqE;Z*MM+x_&Q!o19OmAlwx@KG&*O>)yJMJu@X>Sn-Amd zn}ZkK3epbm3^Tl}v!;I}cjz7<5G^8{>qV0155Cj=y1X6l!avfp2&fce0&`L!tp zHK@Ooq^EL76Gcj*OwJ~2Y7tNM@dHAd-H5iRzozyGYK#k?#HBf2{C(?aYYI24c$y3k z$ka`}9R}K2i&v(&Pd8cJisy|toRm&{_y(S};^7lOs?u8pQ)O!HU}(mk^Dq|}FM0(q!x-lTh4{vVRJ|nBau#hDy4I{wPYy$eHw6M8kNYcG z4~3^smP9hnM>8)NwtEEnU81=ibbPNvqrMVcVqGAQ@9Us~hO#>3$U7IgE0mE@pxug} z32(dTLMEVnX;EM6!6Y~6LxUXeUoUg4+aC?-);x~zL=KMR#1+rqhSbuy#|(3J_#q!x z3d*gd%he_-fP$p^wRB9}#{Cur+?qQ?gJotiP2`&FLPb=9M{DU{!5{(pPGj9~Lks1R z0{r1fg`@wlYe2YhQ7-28zp}9VmNP4M$2NZ-j_JV=?faJOH;#AW|J2gn5I!hf@`x9Q z6?sy(WXfmHfvQgKo+fA0A)OrEue6Qt{*2Qet^HtOaEKGSFOINr2f7H;bR=Ysus zY6u3_F>b<#3J1}8)%TUj@wlGjsb?37rFzUD|N1c_oJ633XAm_HtgLY)x?88EhcdjK z;-Pwukg#ZetJ=E4(RG7H>qOBIxk=s3{{XrLaL*cz7C35mmhe#T9_82 z$J23Zjd4UG-NR3}RZ0o^Usw-KK#JEA*Z9uy3ZUn7=V5jy=ge6!wqsqvNq^nPZ(6hs z2H+o~o&fLR>@Zo9*{CP0Mxj=>cAvMc9D}fwL;#F4Z4IXsMC{9e&A1@FJY!eCLBg0e zH3fGL+al;X09omEZ2dnDdlRGRrNRr3?*8b`+8y=yejkvX6=q_>HLx!m6*nn7t23Q$@ubx8tE$I(lRq1H7dRkNfs5h zEZV>2&t(9jy)nr}4&&XHN_l>oiz>xOO%Cf%LUL0dSPqj!ghv6SXq9<5>+K>WrjTTX zwNpRSUN%(<5ml8J@NtEbyy!9V&gp5Nm%d&5GN0N}fpwleN5V4<#nQYRSj9E&!#Ml*9a)wmz~X?yv6z@STTP(8 zjQ>kg!Mv&MTc4tvDLQmL3}le6udWH~;s7{y9(!WNcgaT5qgIK1Pi z>i={-!dN!%2Kg=hzknQnk@R*i=ey`;nJt*UFRu%=Hy7N*YM`KUV@J(%7@k2=hq+9# z7<_uQrQkcwK|d`mJ8iDB5_oMoSHy`|eT<;c*IA5uyquNfk_A7mn@0Oggx59y(R+%H z7WT`ka(N^%I2GyfN6)eC%0gu`6THT_yuA@L`bXF00R^UO zjh+>2;h3!9nk zR{%E(d!Dt^<*2mxV8q38c|MWFo^#~uikB#yQ$n5ch9l4T;vSoQL?GU@1ME3~{ztH| zL)+nP*-@T8Cf-tBOj_D$Q#bLYY{hLW3J6xM4CntKM-lgz_D!%T78yvYQrvrqdHG0z zFHN(Eh+Z{<>gvFL5oI?}MH6`t87Sz}v^~Dwv2!qnJeW1~2)S6LqqlxNW;_~a$CeuL z2`>DT2Y7j9sTn+OsXNlpt;z@HDPiDTW+$jgF1C(5>ks@XIDMa*SihN=_oE#anY zxDPX!Ji=lkT6c#Mhtil{Zym$@X$6N)J!e&J{*O;YJYe^Qt_-pl4$27Z4#SkuiD$r9 zxSnBbv#}&uy$-oaKNxH}JIO+iPNr}_i;kFz;_A&e+>A-3gED{UCjzNEz&Lg5W&ZvJ z4s_=xnP=->!nQ>wmK)I$$p*bwENuqsABB6qFsH*}8`Q7xevog67h}5`6m_(HJRR-V z|6I;r07CRZl=G{6i9E6Tz^BBC z+J~6$iA>pqqOjuf6MBdYGE5s-t6FRw`@HoAOdcgpvG6H1fH~Ju-{z<t-6iw*?aKrRpdBHHd_Aj3pTi2z}kTU=9OVXkOh4 z^&*h70QBMM_r|UJ(rHZ?6t;$4M)$4J_r_+qL6EhTkv3`N`$|Sd@nS5cN>yZ|3{j`Y z!(=ilEIMb{Q|a7mGB^A%cNr-ee)WEOXGAZviJgzt+-b2>-_}Q^J4nDO9<@X5UuoW>!Lb1nJj&_eInTkC?N|mNATrE z^o)n^yc+`h9w7^lk`oM_mhiMm)#sn~q!0OXd=ndpcPBo26(1VR_57HB>Fv#S!c-Om ziA}7_xVkPyXF;x5eC-5AgZ?8BsTouDT%I6-_}K?Jp%Pqh)yAUd0Wa z33?NqKf7=38ApTxZz4MdY!0~V4Nml{PE$rm5a8wJ{Huuo`P2ACTWHsBcRCCNrsf>K@#~BNfB3wNngwbyi+@ zW!nDpfHt)jTOOYjTFAdZucF>jf@CF~ykWT>%DeA0xZl$HF$wg|;cbnLF5MEcO&Yv^AVw$?mkgQ0YdCB>5~YfCLUgz=Qy)( zE|2bA>7i>SMboJ$a^dB21H>Ypk0Y?1qbvHDl~J#^KB}2;$#Lz!!CTh5Y771!Lz!_J z!IZ&^hUiv#NoMc{-j+rRTVibQU&aRZ9D}?&=z4U*{&OKbjP8Aw#PDu1(@C!D-xu1M z-EH5(d-P^5AFc26kSo83hWYW~I5F(pRyw|Pz&eCadDhEQjSW0hT#aSD8(^v+ax!ve z@&>Zhk{b=-or1TVR#dRLPu1I%1NZX5(l7c{80;>6mrClz3uX}NgGQc3&ffIU#TcHw zTnU)89q>*+%k{?mh5T`&e_vcQ~|3$Xdv<2qOTZDmFn64+zRmU_ukfY&0a!GBf|A6ILhB&X4Z}$?$geW^;*qtI1i;!(EHAf6E89|O`1lH z*(@&f%00}1d6V)%DjREuwHA zWf9YhGIj>Ibo}8bW;r7vvUCx+pMvF_mRg#Rpjef?Gba?v@ePz+ul)Yys+{ql#M~=x z^^=%*POM;zn`S<=z)>Z(TwhD^ZB4f2v_~$t9M5G})`3C8h>xuo!>0uwLxRoVOu{V5 zI`Z>CF^z2MSk_08D_a=&9^A-!B9ECHsFE#g)3j7GqIQ5>vg%4GGXRDa#~s-0EaXV8 z^x?3ZB1QyzT!eUl>h4SykqRzk{tm`TVF@mS&G7_#>OIxx@! z3Dt>>?Yg63QbGAcZnuTXYZ1b51*>N(jBO(5$$I&5JkuDQ_bUACb-fnLOp#h9Z=^Wp zi6iONs43?k9i%W%SenUSfA~?f2(rH`9Ilv$oBvCv6`Nz_1r4IkW1q${gsyJ&K6^+} zsM@tFbaRc^u9>KW`08Tbut*g1OuJP9dNo+%|B{umz?sX;X0YARh z*ZlAo-y)S$K;`l}5SV#lf>e|dN_ebMWP)6bsorYgGI=KCPH%D~?{; zE-oEMHi{J5vwP0&0Coo3>XCZi=#-)>#&-(QEL(9hc(gR4Z_q_wKt|n577RDA|HCDz z{4H>D7w~9K{nM34Kn-wQG4pnLv4hb?rOT|wT8!PFkA?0KMODGN|5fF4qR>>~<7CSe zEp_9c`wOAy*+nCyAd?pEIw&6Zvz*7D|Ax->7eTubHXg(xZ&|ef?8zoQ{_;W!x|Iya z3?08vu93JhY3W2WRUh}OeIc4aUwEA_Zlko%I)BBg#E5pV$3>|jbiMIz%`awzlH(Rs z%4$>pxW~{OvLGQfAVlayrB{X!=%5ukGlaV{B`2*SP;@ESfi>glS7d|AIhPskvjVZE z6S~VF4eh%*$nM6SF|qyqdU52K1m3b(ZOfN`J(xT_-6UCvDHv2&}{<~KzKm{ghB~OWQqPI$sidwXU+m_1PCj5|QSJf4)8TOg>d96F<-HmsB26;XO z3~$3H)F8a%W2V9)kacalZSPq++D)NMH?v2Q7arDxp@lCSn!I$2q5=5Lkq!OMlbY`L zQK%RvxU=Ii)QZ4SQVcJ3LRVknQT0xxjhN8Bg;sXLAqWN`d4*Kew~TEW;ay+s?h}<* zl7TSpWhSzYLOm}tjWs*JX#Ky$sH?dp%J(4%p>=E_20$R8gImHBiGuHNq)R;IW$JXE z%y8M1`!e=7wE`C7%r!#H(Rmtkm{NG1ik6_mLwZ~zi$MER?5Fhu`vZ(q06jp$zeGfI z3PZ|;8*A%&XX~r_+oG_x6ReF2WJ)vz}u)23zRPev!wBYP;Q>xeiQaNl8VqrEK9)oPzOd^t`Tk#22R0c9 z;66Pdg;D8JgM#`+bki$m%$MQNHB7``W2+mHxLI4330yguM3WLLTMlE8jJG0Tm8ZGMi6BAdy-WA zi{XU|F-K-^N|I8QM&Qf1#;|ZBZQ>O2Jwx~_ePqP>?<|asUi*o zT))=|U=MDv^O|sOeN>AC{~Ty6SxVGdaQODZNb$0(d!41ZM_h)4BX^tn21#vO+$Pr9 zzfCtBXO27!_?&f$*%wNPjV93Bldfjc0QGEYqd&@+d!=w^WXM0m)ZRrp%}7E z=2mu|4=?5ky%A_J_<-rzmX5rnRr-F5Tp8UvA~D>pSlpzye2<-pf+5kE`ujzDLXoC$ z0;pFqL|?vSp%<$GF7Y-+g+z$JyXA8FGKR3i02#RK9gi zet4RpZ*+;-%LLGbBl!>!gVdcklP6rCOKhtbnK=GU5xD+I>=i_EVB0(P#94kRylFb;g^7O|cxnO`cat z9Cy^$xo72n=BMM>RY>^P6F-3ut=EEieO|#AnmsgZ>M6)je*PV_z^t}nNp}g!Jto+O zSJ&vU2rfcCy1Iz3bd^i6H@bYqBBb8-wSmob@;xT?%S0kLSJiQuBC zKX@yYRR1W#Wi#2l zjn^onSo&C<0esNdO%ft4Z#d=B^%6NR!{-n+wbHpXH5^d0r;2<+z1zAZpnUATT>zlk z*-w8c=)z-GXv6vOF1pO@f2FbrN;o42lEPanEzu~L(}yWMy&TW41#0suiA^o%tPI2C zZU3L0gV2U8)?FOAd#rK&-3=@#bmPqB}amQso7CkbA4#~?HU zkUX2mSYv>)fw5|lwzjE3`0l<{@qZE-)i)%*+%Gy6K(4ks!%U2Y+;%)|>HKe(FjeC7WCG}=9rVQ8ZFYE2w zm-s=v;PamL+elNy;oW}pNV1Bj{Mt#D?6=Bl=U;1?M17;w%Crg5s4~bG`(G-+>kjt9 z%Kp9?1i&q;dlnFRcQY&X;9^KgHka@4!}|`!X}sldzlbDBZN}_=Fc3_5P9U) zC9_u!vhY2eQZeB{PFGb3UASn@VjJn14g5moi&yp1?7gMmw*(`j<7os|C9{AqdNnIp z=&oy@;TAp6*JBn7kom+2i&WHe8)1X?X7;zRUq)1IhfJQdFV$i%VHkL?RH_2FW0ZzR zVD=}xtR^H1$jg=`O&|8GuXcy%vRAAHce@ch)S3V$lBek&$^=1%9Bez1Qp+;bz$J4( zjJL};E_)ZHiO;ggVMRw5#7_Vyw5?)klE$uiQtjM@IKKitHAH+4DgtEHLs|~Kp)9%P z;Ad52fvVTTyQWd(-{t7&I=9Ib)x!a;;(!3x+Gpr3{qDq+KaDZ674$d=$>B|jYfkx< zDJj~7K5{|K*uI?nQTRkDONZ=1KvMJWih)$_s0XzG(QNz8G;^RnN-U-2O0xL1OQ&7g7M6@wI*KWf@8v z&WgPymof|1H}^1i+hN`(SYy@V^4)EuzwKO%gyM$-awnk5bgIhXtzSG6~ZCe=kwY)O!I8fl&*0+64Az>ZE0+1GDD z=CE%Y>T$)A+6B6pHkSTt9CUm=_JRX#z!Nsi(1L{7UHt>NOneAJ%18#^D)F)Swy0%g zZhM)MIHYaxy3}kzl!V+dcP(!COiowoWbDqt-s1v+dGdh|z59vJZ0nXXnK zY9gO(I+1nLnb*m?L-YWYJXYE zb_sf2^MT$&eTEYN^T+d}98ufIQeT+>qO0mYIi^%EnpCvJp135N2*wX{(l$4>KyE+s z_N0DN?U@Pdj5lM{`1;?Zs?B-V3q9xOB~@R*Ydenf#g{x_Ow~0-iEIg`AVL- zxOj2_{*^?>YR?y5Ww-B?z#lCALFW*wt@ki>KXagP(N$q38+SE?f?>zu?E^C(<5v#+ zYo-sIU5lFuJYzPJ^xp9%d&ezMPm9;%{fd39NsI2p6_jc@|6(3&IK$ z()m1bm5oB{S3Wwjm+u|Mz&|SW zKYBOut`B4Vd-58{uW-qB>pE_l0bW=B=QwEDCO0yT*u{nn{?AhO5=Asp;87bcJth4Y z!DWeNuXn%1tf08L#>~$2h!J^3d`3L$6*g@ZOggyL%$5m`GhyOTk0Mi33VT(D?-3N# zU9bY}21n_{eJb8O_R2Zu2$oEJ%-TduF#EJnpxG#y#!d$pCmJGz$M{#z7FbGG9Fb)s z+o;(hdsVS@Z>wSC%iS7CG-$uBNvR1tQNs;xq)KZ%#qeO zJv!rh^5copOP>aP{J&64Es37oL6&p6SWS|*e*d*wMRXN4znRR>WULb%YEwv}rufkA ze~v*$9W3-YjoU2Gx8u*L5Gq8EaM*~AH0#tM30Q&S=3oVQF_W?%i#o{x_ttDvQRrBv zNjLl7zg%xbgv)e03&UhS4&VJsBHO;7cd_&%Q13-C1C|bz zD2TT=Es~wHt08xs>Vkxtun9CX(9amES)1IQV`30JbiB+#&lE(yp|8Nv$=YVSuofeS zIoXQf;t|luE)(2-W(`e#Hmbi1CR)@(pLO0Fa5iLjDN~6eURVsU)#;f!TOs#)c`q`_ z`-AcBTT>P}oc{E*E^6r^Q#Gr*7Hbu_a%4mAHo?C@61^1zCI|wH{VA+OX!o?*c*<5^ z7;U&;j<&eNS=bWsdPbYjkT)HmDG|pEz#Ug>TIUjtW1&{ObcbCENagzrjH$EoltU!H zsoPE1fa=Jct`p{g_ZihQX)U%RZ}cz*T$3lwPsSb<;?^o0foUzg{) zlc<4wHKkM0XNTMqLxyvfS3o&l3ODUYFfG-LMjkQ$Ud6}D@Wnkke0N5J9RQ+IzGdHn zFX*sPshcy)9bR|SSo-YnIR#~eBFhC9is}Kjd+*} za+!Qa4Q;sGb?KyQ9M!TOF!2E217wi-U>Ez^8`F~PBB}VBPvhn_9Uj?pcM(^!x(A0d z%a|IU4}Fh_p<+vQA;umO+z<+T>{^~Q_0em=;ja5LL z6L_F%i|NM~A%}XdUQ4U4YkHlOcHaEtJbyVG-pSZo$T(yU0j@8Yf5Tg&nc9cR!hiY) zmhV~rAgwyLJDwO=Ga)G4q2%wD%mHI$mn$Hyr-p`?4^{NTqjh57AVtIjeIWBu-I5hx z(;B4VhwypI)dELv1+fm}{;fvJ8lnq|fE$&A#c7QTvrTh=h2j8fe1%zJ|Ex>U@JaW+ zzwd2(0^U0oUbFMYgap48y}xtSQzZrmkF_AJ8K2)81lr5>!bv_ls=CpSSS$}+V?wupW|vt4tDJo; z*2?AiVr|WfRH-a>l=+Qa6=T1k-lR(}&G``qULFbqj4()TE9sjAn(M5$tVVQEEh2QN z3Z|dwhFiYHTKVv2U^Dq;?9MFePN8Oys{vp6g=V<83A`e-JT*$1!_aPk(=d)Kh>p*% z$QhyIk?UB*m&oSOAJ^54kf5eHuuSNgpcZ(pOiH;rBK6WX6{`!4;Fe&X-$x_q3Z9AD z=N7oxeLtPsDJ*0@NNUMG5d()~FQ$w@W|rY&Wao*3LSX~B!#+HCqp`0Airn=jhClfp z712_73Ztag`CD;%3et6wdn!4cFq;ittHrNAN0!sMOr1?Cp) z0WFK0mmXaHs`%sW74M})@Sur%4u7EFBs@e`(TsNNA56pufeZ#b%Jtlub7*1Qk zlOlIt{>UYEBUbohP4a>!*(mU5D_J2NtT%`ltRI0^LWH=4+Ku>4DWC zHt!4p0H3{UHArPHG0fpohia;5WstFH>}D^)hzChW%9u=kpVKN^dPzdkSg^mNT6iMi z;wXor2i7H9FXs+VO=3%se~#e}e+n~In6$JRF8+=rGyihgKn#FcLHH*8omT%_mP~7g zqdz@{moOe<@@9$1j530T>;Ti>lug`jSMvmglsZtmDst8~w>e-!%;llJmAMI^7G-pA zA$pMXE1Sh|e_^ywWsR>S)7*a^0aQ(p0Mu3qJ@kWFtY>vYy34`Qfx#kqVDz5d^1xm@Ry+)KL z`6XCC5~7=0&k$;VEqIbCiWg!N417%6HiCjCQO9k z7=_1jQSXLCpru*biB)nsj@q!TgzyxauwyoO8(Whl+VhU<3wyDT? zK=yOC+FC=Iw&;;O7aa_!?;oD>ae#buf;*k-zO_*$dR1pf-8xh=1k6@}o(|&>0n@~W zwzfeV6PAC^eovOZ$BX84z5ln;Gu(jfgw>$;l@3Sv7lk|_8dOkRdpU~_^C0TkRH{qH zo1k1rlKyz4X~cYA&B%pSbUkt=114rp7Q2OYqQjd>8#&}8fmeN3U?G}>xp8vtlmliZ zo(fJZFK;vj5xas$@7oY6jC#xf4|To4uS+%|N{Xgdqq~4c<%>I>n0#kyq`m$}=B+|R z6u+WzKkR4)wJvkd0l%T1Kl4!gGWgSgyU zowZrv83JD)eqm+4>H)4Om24O*O#=L>ZPhM0ZLJufi}RsYW~L!30)94x570V(Bi+M; zCq9E47u}bUB%(qec!sAnKwy}Wftq;5y?>C7Pa}bKG1*^Yz4Ej7fGg4hUUPW|*lkfj z>Kmc>&SWK4JM2y;RT_vAM$S#W5Nveue64?cX5FaW=TEn`YMpor%f@Ex>u9Xl@!-Gk zFOLyV2u%IhYQgzp8KfWBq<+PcJL7DC3rfHR8Up{ZMwN^r(YHDh$`8}pX``E#8aCdR zJEVBDcbW@e7VI_mbZzkji)YZHjncg>Q8mcz{Ezrj%>liAS~ew~ED>Weg;6IAEqWf= z5FN<)(03As!jf81>#aOxRpz+kq>o)jhQ`Y+;5_>W2evU1_Ls*N-c#Ap7Q$p`GisJ< zJf@$$V(`3bNcNW9G(KY%{s)Q(Wtp8svT@mmn_dY3X{^{S0`#YmglKgL*u5@jmr>D( zq^e4TY561Bz0TV;PevescY^LZOX-(*-3Ha%5UWik?M(IRVJFEF7_O21@krZO5Jvv1 zLDVM|+atIp48pG^B6ThBlQ09fGF}iwhl!Gq7~-;|in+4r&`fBolaQN^p;@8_WEIdv zIkFxyYr??KX-0J|56hwT#nf#9>JkD#qQyxYF=bTO6-0gHT{F=Dq*zGBRg*zDrS|HJ zYT`Eu?;^uj`;*Pzxfgvne+tYuS~|7XoL%JG61DvcICke=f)x(kD1L`S074JDK6AM? z*qVzJNC)hOAv!k6KysQQ!({y+xDBOM>JVEbId)Fk^6kh0}mV z`IyypU$dzU2HNh$5&k3Mne^Lb&~0NlI~g*mM__2mNU$pH*Pp*FTKe<5q}FTv^{ZF( zF*EJj zxgpM4Ua)Wqje=-W0pjI&kX3FXiFc<l~`4l1zd$H z55%26ZR#=qIrBA{#r~Os6aUiIAA^~6^@a$F_zH0Nz^Io&f<(o}5@Laoivig=E%t=M z*`s?i5#{3iEtFcr>%Km&O)hjrEsB$zJ=6B)^(c8`@-Qw;tC!69m$IwWT-u1O;IYxO@^qWl}Vn-5-Sla&*;e#OxyT1|U*> zM_E+ngQM}`5kLQ(>#t=}rF1gxw=bm=mV5V~$PiyOtAL-_d~CmnGYbS1(NL@odOVAi zc!UyOK+i_5Yb6@9BKk4&x^A#18f+``)gsMB#bI!a&$=>THI#Hx+V4z@pXS<4+PB56 zP}}s?;^`6@b5pGOe|Y3?4-S`z_!J~*n`^Xqhf(GdMVK1KS&3onmw&*X2a2$ z_YctNnb-{{m@_H^N$B6H;-(lxYFM@$L|?zR8Oc?w)V910z_Q7m(WeB189?tRzfZVa z78V%P?F$=yQ$H0}x3$4zp?6MR65LaWjpno=j~^Boh&eZBjRZW#yIEfQ>Y3c2zrz?g zu|%dkG|Yo_zK0hSXqnamhLpG_G*f4)OPoH}H>EDCig|d$e9QAiz|_?BDb=sujBupW zq*KG+Y7{6!lAWKFpJL-wE{p>`)S}?_wsznlW(#rD` zeUWAJSL+z>(Nclm&;vE5t(S$RH^mkd{BWmU<+md3g*dkd9AxyPh_2ivY^-_a$Rt|* zGezPPd(xNa(6|_hz!t`96wl>xuh&rNc$5+pR0?Sdx1>3+Ft;SeFpF}b6S2sro#y$*t znG&~}r$8_@o{pvQvz6i%i$Va;ufRa1KY1rl9s9yrnMn&ACs5RtOb zTSHAiFWO(dI3#0|zsFHCieIy@Vwm<;S3-`k`+#VoOwT?taWQDBgr+O4)3TnVLGC2Q zg&QuLC)V}U1}2zHA(tL3VjIGKV^!uhyZM7JX!+P*?(){(TbOG4lll&gO9OMse)6ev z1zSjKvur&_l2HJ~(>qy}>mqL~GnHqzf{6uULux+O}dU}c& zODKiS{Cp%-rv}*ST39ipD&N6iH@f=K=i&Js=H*Y2+_hOu?V{PH@qHU9c^IPzvI_I* zm_W+!VoDXmclre7o7fn0kr`#2sG1@Jz(@*-C4zojuu3ooc8mmx-HnqTNdB!=EYxYF zDNH84Ia#hP#I3r6L3?e4pfII1an=9TC{d-@f_vh}0T>c^Xy*bWTJ#byRc7W=m21~* zzxw40Xmawxc=@kaN^voc3LYlB!YIdWNJ+&5FKR0tTx+@uJ<>ldT#I8N^_p3TR|tRK z#D5bJS6B-8NEwOmUP@O;Yk|zPbX&4whpQ!dlc}Wyp1()^| zaR}D;LQSu=d0C~zbo2c3!82hBGSy!Rt$+AIg0B*=T^0m%kX)QvKc1U|)61aEroWmF zRel%sR0La8#hL}p;2i{gx7E7MY^Ck_{pM^;dPvFDHi@6h{tyP}j$y^wj7 z8tNAv03!VwjlO`7G-8Wj-$y%Rh2$ni!h=+=1w71fJPB!*sOX)3EA)w=tp=aF&n*?f6<8jd$jjqVN_at~OOk6oZQE zK2i4{v`sA>2Zv`idkKmySYCxLzc9igUyGssK#hV#RaFm?IjRg+0<_Acw5wbS3?vNv zifO8PEYJTkvzr4y2C)F6wJo_BNQ$~DN{bn7zvf%PLVcsp(5#Xv#H}(rQExBRI{sDd z+$N*r*@l&P&WwIjjB89{X*Srd(9!5iLZJ051ClNY{r={%V6|$o`ns3_<Krd4%n99O9+<}^zQjGF5CSOAjlT_jm zVT~+?-S}hCp2H=PYFq2ukCT>r#MMXU+@k5=WQ3OXFd8J>6NPTc^idI)`J4jE7h`|8 zzd}R2Qbp>+4PkSRzAE*>seup()=OX0d{&g^U*z-~y_OB-IXEiQ&eclh?yXJ!8hRv_ z%d(bts%K`A&>i889eo+!(>TpbHEai1eRVjk1OsG>NqsW$<);>&3^kvA-bCf*bSK{? z^Fv~(Ot9wdIMq%*xMwpB{edIE7B)ew{ngGKk%M}gk@_Om&3XBnL7@KjU`K}KC@_UD z$}-A7ileF_>pYxgiijHgOIvoFE(yX1skOnv;JXSwonsKoFQcuJPn9Xc5uQzS|18Ud zgjgnQZte~rt*C|FD!Bn5<2I(E|3mm1MIJ<)(nL~Fl6i=*fAZ^&zWjTeP| zi!Rx3E?2?omC zT^7!Wokh6w8G;$4L6U)QLEe?ao>B-c4aTFs#3oZj@llck?fTzo_H~?ajb#pO#&b8f z1X0Yf~76d&BQ=gsVh8MYI5U;9mXBfMhrgUhF?YSmABW#UHD2it+~sbg?Fu<%$&c5cOrbD%R|Wm{MWVXC)? z@&ld{8c_z7w0I*U5!$w4c+~$)>XtDTgp}bx<`q@|LWQc>>rrxcqFF03&GZW}eqCQ= zwCKH7ZROH;Y!Rjc!>0Nc_NV(5xPq?4$+a#=3cuC7-3PA9(t&gcrhB3~yXR-YdZ2K3 z9ed6VX#N}O6EpL)wERWl1b}qS)o26R1-RZjUcNa+R0a#m2=*f1VNc)}aLOyTRDlEx z7h^GcX~5T`IM8uv?({()cVAGQCjMlYb|GLQrQF^iqk`}W8V%XNbfLuVw_>^*Aa~L! z&llb0&=t-U$Of#$JYRjyFF4k(SjLNk9v!rTe*4CR?F>gBMc4qzVB4WXc0_=)hoX&iuxbG`vc%9SndF-B> z2^U&*2=$UQ?2X#{t&8GG?zK!#)vkY_5p_R^%d{ShAe^#84ZZ*E%xIgy+>WC?uOKGO zlI7g9;Z5>0g#z_M?F|k7MBDAr#3!>VG8l!Hn8kV9-1ZouFMiRAYctcMr*;YutDWD~ z-onX7hyGztj#s5zw!oI}T6}NTh4)QbHwrMnA$x(fV&{9Va6Xsy&bQG!WNsYsLw*ET z2#Hnr*f!gPY${%cO)ziyO@Bi+@Ix+f-Q)Uk@_d0=xU5k8@>@Q!QqYm z`SHNE7{HU){u%O8m1=|>mD^@i=(!`=;^+GA+zhe9b3lp;#OL;jxa6j`*fg(TN|N} zh^FWAa=C8+tVX$+pEu<UP>b79f{S!q{cq&9Y05~ zR8KI+V)s*z-U5{J4RX5Y9xDWd&*F>i$-^?TGWnY~fF}1G-Ca+48@$FRE(Nile8};B=gQR9_&0Fb%enN*+3b_$ zFFdT+CF$Us^a+TubmlOOivx+1jt zA)iGNumWIAM)2ZPwJwNEf9QUL%;4xYHh}lzOT4TdBB4A7ut(2Uwsas}fO;1e+^Z*!;E59_UL?hJyBIu7!%t;c}t|!>t z8+&5FrPAUFTi{5Sef0B4^opNZS;0`ZJgTxWIjy)2wcXZn`awBZUj{B$2MMhI65&#{ zY(=*v<{D-(d7ORG zr8%2J84tbzNkjZi`D#zd5mN;L-21eP^~u_3R*Za`cmkY^Y#k(A#;cX}vkj3**GwoU zSI6Z?&lYLq&1C>`p^ObIs-#?DK%(^fp#>m7i}i}coMEF%ejryH(D^dkyaF!IGe|Kl zq2f7Nof_uOk>`pkiIpsG`}KL@g7i4oQc4HOoMj0SO{4?ND*3sB;IneM(Uk*WP_^+Sf7@E|~Y8ZRCYyFajGVF$r0&T{W;F-LHvPjS3PaZM@T07IJ@`X+Jw& z#EE?qKm;Z1kVQAEB??PNWh)Wv$10}#A)FT3CxRzsAY8-$sK37!V`-opL?_`(R%$|7i@I zf1OxVrLlyGNuHvqa$8x-VJZIV3_UsmW+8Dy0t&De(XZNohP!$$OBv)5jQK-x0W^vD z=z&JQhHiI-Z0sW7&p(fm8_$W4x?KJ~ueQdMkV=^?!2Fv_b!mr3sUd50?n$@S5q*Sw zZX8B%^C-2b1Oxocbb{Gp^!VbK+mC4p=doL0v8nmS_jG$I)(w!-9b z^O&p~aw~KQ?ov4WnmE>rV6)uMBP#Di)>}q1D~?5K_}pxFHvw8 z#fA{vQI+%hWywHVWIc`D3+Qn(FbgWF6wMtt5zi6=w?$y#v+5-$1Sn;FVgWs8iE`vb zGO*}V;xe&U*!ne^x>?GXGM$U$2LFLfcx5dB)&N5D*|L%CX3yGO=jWpXz<-Py4i}zv zQv~Fjf-5H<^1skR*6~|)Vjd=H=NpYy{PlbAH*)is6sr2X9?tY7S^^3V`e@`BSgLc< z&qFX32svO;(|;*@pIb>qyB0hEkbcE&CvU8Y8pWkxq4lI{#0~hDG#sHsA5}8Ply2>@ za5E%s%WdOZTJ!KlYs1rVZuYFnD1@eN?cs%DJRZ5NRvJo0V<}K^l)>_+0*JYS2at64 z1-3W_QR7k#rTl*UoVc68H_@&Kh8WLa01?t4E>sfZ07LKV@GC~LR0iw(j4YA;4z58PzE~3ioPb&e3 zN!?IB+|12N@}RZXP*HT1XR(=KaaD+hwI%HP0w?MUln}Yx8`&a0@UjI&yKcQ*fH=8= z00jm4?e{^4MayX$X%T?qfA4fcdH{Nvn`*7%Vi4ig0*jFUTW@y_1_-n(+1n!5}0;aUB=Wp`z@qfejme;-Za?1{=if2C;j_b z0&b=4pUQ7Snu~pqu;}N-GuL!d%keYp&X8a7-O=GW&6#Oz(E|k}la^b4`n7ykKwx07 zF*CVmSm^SzR$vEG{ueG<}e zM9M}UVLL}~__&0TJZVy;T2?R_XppWESfw4j66BG{5_4`us%Y@?{rLXbTFN77$ho!4+ zmryQ%#>yNCnI%WrDYa$oq#d9g8jdW}S8H8${f*se#7H=Mq>LJD99NCJl4`2^E!X>Y6-jaZaOp5H24)&QI)9@x?B1r-UW+0Ur}UZNRzjG3ffK)D2n{ zNb3oAK-rwAt@A{ZXd}f{R-iC)c{uf_DX4rWN$woDX`Sdk=!2oAd+|nyonpaNuu{6T6k@49iKN+Cll|JQ1MGo(5%p$f^Qop+l z63+x->fbS-^52#tKy8qfHmzmshSrtlAz)oEK{FW$L7`&r#bGdeSoN$wjmS$O_UOGu zP#;$1kjNNo@LynBh=KR#8b>6eda|^vkC?{pzA3cXhm3yb>TrDmNg0N-8st>@(F4#G z7#96Pd4%}TrPc0IMzlN9^IwW1_eT88=L*Otx<)Sk>m@plK>WOZBF=-Lif$Rci}}xO zYFve1IdqipQad>ep$9{B42wT zFexL>6Da*Z8<6WmN*hXHG&$si=QoN^L&!M&xh zAqlX}U0HX#APoaC*@MQ)YiSq#HwEJns_SO@^ep1ldZeH{^m{`+1KYbm9kM`CQs(>% zHVmwwHn7={UZIOi?|pV9TC0mZO-Fqq6IZ9FkcuBqHY1Hu%)-2EPOVE%+f5LTTQ^X1 z3rRx6OjGdmo@9;O7y9wARH5)do_y|!!qD4G6!k~fNnM-iVph9)MdESPs@lL9R?h zA>U&w)Trr$;Z1XyWY~gGdCqQ_8*Lx(9tx0T-NBS6a-<-@`x1AQwPr*1Xt(X;++=({^*I-t%L`et|4*$*uxWf_n4GlUVD*&(; zGXJ-j!$?(2Pc2ddQsuG7{vw79vy?2wO#ZCQa69qf%opGMs%`nIJW;s zz}4>nxmc?Ym4bm{ds(@a*n>ZajkaD(RuN6zV9a17uE096xI<{p;3}tBZvlcj1jFIg zW0L>o!M%6!GxGMQbKq3XsX|(}+U4^o50F+{n3a-q32%;?@GX~#cA{;aKhw+U4^Wyi ziXSq=@v#KTt(}e*;HR^={#7G?s=VrVHe~~6y3w$rsSI z#dMT}xXcqJ4INOjW7Ii{K=T-udd8sRWZ9R=n(cy^!KWqNhE2X-{fJZ7UFgvnUWd$f z^ioeRfp1=)9*YaCDM?57YAK)7bdxOtnyCG>IO zj$rhg_PzQ6iTub11%6F_*bz=$bXQyyI4#->q_3(MA| z*B7bQ1Wy%x$&{aUa@g4_hTE}>drZjJb|V{h#A$Kv+4csBGvTb(=RIO+)#+_$VKyTr zn*uSU0$$m!`*36`kWX!3=1`4r5ZO3^*N7D=!+^LhftVt>p?Pg0gIs~Bvsu ze*Y?5=3OAs5wfk9b3oXdYZK()ROin9`jhXHLOXBC&}^5)!}uuStR z5o)s|ZL_TdVuB|qwg<2p9z!2?FsEZrUtw%%Vb1bkAuFOta+y7ljjU-;Tao?yU9>xk0n+>S)m zrD;-5RRj63ZNySPSIVYEMUDT#pkm8CUI7Po5VDd9h$74bdkndlwfao+OJ4hH6Zwa& z`*cF8kT@xsJBz*)2{we2r4~t~W1AwC_01?-F-B#3kP+R=KVKNiAod7xo2yf*sILnf zQhfz0VWv4w2K-=+OE`<)wst=jlbC$4*Ynb)`gC_MS@8%Q5l|>F{so-Yjos;MX`n-l zep`Q*;W8anDU!>M(fWA@Z0xWin`+E9N{(ROGyM#!nuKc5Un4z{@*m{7QiR4@<<^v? zmbZoMkx1J%E4~D!n-#*-*&6JRja-?Z_8;gH|DkUX>Zyhek zuL%(v3=L@78m131$9-vxJN}Iv ze{`$Ib>a&8c;4Uu5Nd!d_zdWcexPsyNuX|n5C>-RC}y?-ae=ljeJ`=>KNy5Mv10C< zC3i2P>94}?HawpI6oEe8t%o*-2>j5~pK4~sIh-2$o2h*F09Zy&k(af*XaSt)mLQP6 z7h|lQ+21imBhiFdvkb6;P$UF@IVVneg=^erJYO+-$mk|@Fl{Sir26>mnS!%5$X!9< z2^8@olSg$S(eLHbkQM(cf5y^HPlBcTSag(x8Ise+JDL;8&=Vu03y%~Xpo7|-c>3|t z69wvSr(g$LL}qr&QlUr2zPTwJn|x;FT!GpFec}6W_8JoO7qvBbp2MT(m!2|ba_2fF zvDs|V+M)_qhO^{P0mU&C#k|lMD<%qO;jV+asyCea8^}JG%fkLEaDv#i1vHE@@1)b& ztC$`2BsxxBJ##rggLTYXAH(E>m79V_o&dMBClT9>5wXq9ETzxcevRuGmNN-BN;3*D z@Gtxu-8jBDCr>Zw=mZaPYDvifdD;VE#9$ae#y~!|P;E@&!|P*-SUDmfB0M=%tz0ae zMB)*gBWjs8hEKrJ5*OQ&P**Q)nxO?bbmm&zSHju_GW%n_@;(F}vu3C-k}X}Be#Tm6 z;Sy~Wlr<_?at-46h1`L_9nO0aeqwL%#U#9E*Bf9uLoGLp-zD!Md{FzgBA*Rree-_GAQwBd1La7i5ef3Uf(+D7ZHg!+b%GHWZPY15k zN`8g844I>BUlbnE91Akf_MsMao-U%sdW3sn_56`Y5EB6xQCXat^UyPO(jL`W01-(D z+~Wu5tmS#e0WAwQ^>uamk^(|2bQA8B5FC31Ix+x6ElxZUzE0Y-m&6SC$#ub(vDpW$ ziv^0MLbswMy_#(%`6}z-P1ukpil#9Vpei*XfGb$PiM@PL55v3W4utFUZi+Z*edhik zf510hg4dqfeIHR_-!`@>N}zehe_2+jpl(TqZk1-r`Lji!-aM~O&-M@qzvD9+sK-rs zDqgX-6wio>p2dts{x&0)(B{FCLSw=kh%4MbtvXMo`N{>KvEe{w7j+TM@u&5JcK`=0q-q-D4{DvIG3OKg zw4U6q!-zinV1)3aLO-MLrB+^S05`7q5uIhrd~3YQtSR^q{ir4`9)}p-01&aO#Ak!6 zWMYIFihcZX>E!o}k}Q5hi`ai>ISL@)w_XysO}wp~dW1L%$H_ax+tfOiYOk@VT}7~F}mwWpr~Gb#T0S^#a1nbZeA zupHRQO26FW@tt_S7V0V8>a0kPa6}5{rge1TqnQ|3w-g4*S#2X6Q-$)1&9~b>jkXOH z)|fdG-*cr|{Acc&g>jX=Sn{JJKJ;H<;gOSb*t@i*3f@>27cW6?Lmn>&`_M-Zorpc( zbYXTA4ff1t{Pm~t@2^1*l`>MGH8DkprvFQbZZaQ8qFQ=*t zeHtv9bRfTunoMN0E)^i_Cy+aSW`^G4&UfUpRxHfJ%}H>E+}8Oequ)QvaMvsu%y>51 zNc99u(bXppWJUl%K)%04zUiXrV$9?-$KqDR-o?0GC*SLeBb-3RqAzLksd#tJCQAq@ z23icYHRDfbmFFeuKXlhXWMZ$=C+NwuxX^1Dh@zH>VvmI$(WQIAz+zsMtb=R4(YToR z6KhDpXz<7>-zo(`j%31MSMmy4qo6Tsy-b0s*1*i@^RN=LE}hfBIN4cm2d8aI9nqtg2<*%^>9yi5 z$Y>v8*06w7V_F8|D@?kxrUbY(&^t8N{TM;{v=m(MjEI6cTIwhUH$k6;)9He71)9~G zzk>{$y~1ylbSc@CCUVT3b1Y2jt1qCF3I&d-sT@_N=w6pT0ktR6kKTJEhQ~QDI1}ZI zXy9MXi2Yf$w9UvOg2oB)=WSu6a`xrtV59;~N``3sLNmZa!^nAC*mfY()8-)Hr)N_w zYk+M&62aZQAm&-=h9P0|`ciHD@l+RtCOuV(1{kIKhYM%a8onm_b zCqDj+?DzwUAuCUUQa(zuLRk^oflH;FmU`*XzA#X(MPmFxz^A%r;CC-VL`LO;3-(9R z5evJRe?Ch@i}3r#P)$~8SfB~LaeMpgtKHvoZW#N^v)tLwEgaqAAiNYN^1%>kS;pBW zl|R$=={&Kh07-p?aoAeUi{Ei-IUp7q8le!6aP+*4(&a>9IwTD!$ZB#yJHan^*YHtq zK*fOd_0FOA2!6zNmLOA6>5m6u2^S!lL7i@B3qi|DrAPU{Wrj3V4yx8b*v~MHT#jca z`H!$7x8o(y7U1jSK~+sCewbF$PB-ZT(}Sh%2h*&n);-KdJod}V9vd~2kwf%mM+elN zl2q|}Cb=b|&~_twBv>^`>RHsPXz1vBm{9HX6!lM8%E|CEf3_wTt($`?sLsNo>^~8D z7qJn&uWz;IuCrKTY&uC9{kM_Y(Y88oMf0&&4F&QQcH}W8WJ1yj`XGV=ps1FGkPb3_ z)lZR0K$t=*Sk1LuZ~#5NmJ_5($;qXyEh+3SELXz!A6nV92tTz%gFEevtIBpTDFbqE z?mC`*vEA~|Pk=I??vMJPtRH)M`-3Jmo_&&d=K~#KxTrZocAKR)kwVn5)J2roI@9LG zzUulse~f-i8Iexm4jlhmftg|dAQLn&?mL9Z<{_czIkM`o9%zG_2!u_}t&kjI#G-~O z(uX0C`PmqN76}BO>nFbS$zj&kShb)F7sI|Oe*iq;4y0Osi9gH{&5nnZRjU*C&K|w% zECUUXf2VQNrtc|a7vc!_(pdMrC!nc#`Z07i*2k;&DO)qlRp5kRA;YWqSJg0mm084 z`>kS;GaOYU-=Up&Lu{yC$*v_~-eXc_MtR`Q$c;U}Cf)D9+P2ZY$%;01-ST3Z7wJht{L?sHn~TV!a&9WyEx z16V`$<`(q7Lbl_z^!_rE0<=|<2|THNf!6R19q&}C0&&V}g|ZzUSq5w{%5n1J&lEjg zk+ao-zcA%>ZP+*7g*5AN>LWY>wg*nCuvm9Rlv0I<^SNl@cBj^m z;M@{a(zUVW$LTbcFskRs_t%+cBE4jdqY;L=j-WO|F|{9m23>{pO-K@t%MKMF1Jyui z&L35T+~+F+jRpLQrrB4QLyh z1fG0dg2WC`(R$v=iQH}Ts2I*k5=RX?-O0$0{W_eINA{Vui@thAIoJ>1lR@O_Y%z%= zaGzRol_$&93H|xBvDZ;P;Bh~?^^HKW`zs^jQ8Zx-N8v>ia}PLJK@@o>iLxc~se>-3 zNFwQf3q7?|z}%U!a*Av`0-a9~X2Ybn^Z98hBbD&`uZ8WvJFQX@-@TXw4YR|NC4jUQGub1Y<&E;zPzc0Z~Jk zpxSd960+Xc3F&xmcGHmFmB8y-kMg)09DIKmaWX&OuEd&eHBx3JRtB)%9iH)Fi5RGNT=wVH}6{U*<_RY!IKkb1JK0jzgX-p(b(7F1g zJ+<~ulv^mv!__jdmhkW<%RYIYc7=Vk;h23u2OKz)Vxc;ld!CVkW-K85lmYo~XQ;iH z0|^7HNLIyn{yc`^kZJ|binkq)EIGF8(~(WYabytPDpG71@5g6k@YfxF&p^=D)dI6h zb1)TVo4`fOb?2)!45`)T3|13QhHY4Z{5Kb>x9 z6-;Za?&1>-^2r*F2N%=HEj}hHCSXd*SAw_ST;&9`B&Xg<$0ydnQ#rQM$lnUhvAcoQ zDn~WsLoq9(u0_gzOQZTnGpd19lMkE}$*x3e%~bbZ_)FKK%Hxaqva`1G^X&OswCBc; zt=AfCfG9hfWOjYV`*-z=Z;#d6-iL`I^nDPNGB^^wra4Hy*;tUTa}|Fm3P3jQOss4| zc8MY%+NH}R+)k}slo#RxgD-;ut4sA8&0tCLyBlQ&1VZr0$(YCLP<18a!Ef8j^|AF# zqR((yz0NK7Y}MMvqb}~=gOHsem7)dR#w3t~U!q~O_Hm|i75nt`EiP0NADxaK8LO0l z?3#|AIC~RiPnZRVMH66~gzylUieM)gMGrqSObTk3+`$@qfigNDI6bQNNfAFb7^H*~ zY=GvGx|{_my?57wgm-+FWw#eKwNKH69rNeh>=V}rR{3CEDC!>US2H%zC;?~}PdgGZ z96mpq7!87{sXu^9+3r1sMK10Fj{Mh@aNg(eW&^X{2L3|VqHyxBl9Q~XoWNVYK57^W z7VfV-^exQ(VtMA48AH*_>QCTCTi=w?lyq*&I3;g8JYX0{4>!x!3dOc5aOr=0mnELo z9B@4jUo|9|@WRuE6nBx`?i1?8LDGDwQ3ztG+;<=o$0?qRi_5An?P3T;ObL_Iy49g8 zIr$9&dtTr$qTc6q8X@w!qgG#HJBhyTF8X5F;Ztu3f-D%j{G&a2Q-Z61wTFT}XU(ig z8k|3TrlW)Myf{Xi!VfhvV*6I6DYUK%wRQX1RFkAoe=i-(Y|zv223{49FNHP<%6xrR zWjf(+g#{1v`E?yx z2J<&)a-du$GcL4~QZXzy)YrZ^LwC=F_2=nQXYr)8N6gu1FbG0P7%oT8teQRLUu|?v z#JEJvND~AQ$Q1a!d~-Jw>!3Dr#%1W?!4CLCVl~cX5#6#%V1lr1J-38}ZcT@RXGjDK zitDTH&FdLCg!$UR)!FR@zJI$LE2e&9=6tvhTqx9N`Zz54b6m#XDR*XRZ#M|eViG}i z+u4x%hJD!*&JV#9U8`@mgkz;Y;YX*Craz(b{yryPs1CSDQ%=d_MCjd+^awJeHxHZj zedsjk%oc6@hP;Uq^**Tqz~3{ICJj1H^s!Ydt%;w;Y@mIKrAD>?J)Cf{jBeGX(Ngso zGjCMprjo*_PMg@yX5H2s$=@-#)sPd2Y0TqEH#oC2Ebgdfhd@d_o#3^OMW2v`9z4MSRNg0z7WI-8N4&D_hq;GMgBQ>^b;N}7 zXSIBsA8hb#_Uw4%3&U(`8yP&PT&S{Px6}Eqjumr!~YV|Sj zW$DTWaq%y#*-}TxaVux?BJ1xxJ-88g;jE%CcJtp+o%|3!%EVRBk!;EM*C*;Q(OC`THAAq=fMg2pM9NQ(-T! zqG-a@4BFCgO^Js34~)#Y^^l=LWe{x#@0mw!2VhTE4I!}elEXPogeubD%n8N|X3xaM zH}Rx)uHt}=80GQRWe1s09_+OQs57VkJRh$=p7E?@6bQ}>OBx5FDbz?bHj6@aOPk2A zi}UE|gZN(&&-Z3dE1DTw<%bE)g{jJsT9WP#GRC%?%Y{u-;z!0(;wJAJ5{QO=#@8SN z=@wY~{F6BG@8`KTohW$J$UP(#UzH`#u&a8LHC_svaTU0wmtkmS zOdo3zd^og;TaC3P68cF3WiWPN71w>%o-v)0#Un>SvaXeN)_>=k?GF0w#W})9WG$^# zkk~GB;@Y4GRlh-~jB(utJb*>AbK=R&bac$H3U(i{v!U}dN7M^W=bzvaZW@1aR=W!B zs_Y#VcQ%8aABh_udOV6OX>tlBHQmvc^)#=-%VnNo_TIK#&X^1haC!lXb7AV_pREb{ zMGlV<%A+vH^WdX_j%4OTeOO4xF0uv{LsDwSz`G%lHZh)PqHD54ATOx6!vhuX5B=$? z_am&ZB*iE%9md$$|5I-trnV7L5aazbL7jX6q{8G=9T{_gF9pnM-+O|>w)YQ^F~5}z z_5%7F34Id;(J%RpTd)i{FpksjLX4XK1|+C_^7r&aF^;z5I7t zjQ8u(zr-!C;p&|jAwsx)>YWC1R)y!W=%gb2S)$wU(W`+(ap zfcrUhsGcc`1rV4kNqpv_H~kM-i!%&Kk6G7D@PthpX}#=;^@fcM2AQAy=+PWY=J8&87h%6%7#z=%Ew^NHbM^7-~2xq_@5&a_qt)n00 zmDuFV#m$xYDl~bkG9wB5zcY!B7Yr!YKqPcH%7QC6L*kcvJ8#1j4^G3ls*UWbAoU`B zpW>Y2IllrS7$3Zply~XK3Wo#VQKymw-PB}J#tWZcJm=z{F!_3gf0b!z}V|k*?>dS328=@V zB?k&ksgg+)Upug~1{0{i@6aMLPD8?@Utv^X&G?@=+`sQ2-C zWRl~A9b_(^A?rtG67Z7?HRzjrWUUbt zD}kf`LzbFJD~-FfT(^+-`OT=swXC*t+8)9T=po)l)5gH>QM%2lC@jJ?r14unaZo5f z*a9`pyVog?3H2A2uF9OMnPkTeDrNaBF&9r~cj5mk`RE~UKS@>*3P8L{pyz{e{T4g4 zP)R8BWs5t2^&HO9k?;=4AgYGWfm62+ zcKzL!U@Sf>P@YKFKe(Vu<{lXsskK+~rtbedxm6=L6*(`{J@D&6rOhk3LQ+zlF`r{d z6i6v7fAC+)M)O^;FJJ!yuAD-mO-^k4QiE1w7(aC&h{7xgJ#F&OGf7gMnr_a#$OapG zgxiaJWJ;Wq4pF*+***G|qL&r5YOooe9g`UvEYFsx;w{e6KKpH~W0)^EowddP$dXAl zhZ=__1%>7uPjy#ePvB{{w*K?19o?+AwW@l3)Whnl^<=nT?V3Msg_GOM%R_VA<=rk1 zWFG|n`vnkZ$o`0ytRkg`-Zo6s#tK1dTjzf z57CI8s#uX1>pRWV*&xPao`%2Md`0k)S$Nb}wcZy0^yvW&S4mxVu2*Syd&QGhcibZ|cdt>4K|_R@)1Os-bx$^Tv!09H!jK0f!zP zmQROZ;`xWk`m40tY&3h~8DQc@k`A^iOWK(HDa(lpSR2czRS%gjQt0x?SB*^E<4&vXIA(-wPdMLIW2t<&hX zVM(perQod+#Sm(hpy@YRWa+ltAYp;pEZSU{wea;K~mi&jDG6*TQ12mOQG z(7LVCfWCcREmMA^RrHHIq)My?z=iU1w$EwL3!8;lc|Cm%9zAdSfNBP&0U-G$CNmOs zHwy0F<5NxaJdV{oE#=AQJ_HS=MybH&Xa9?^SrB)(GaWJbct3=zqIi&AG58zu242QaoBr zLt4(QO86n+O4e$;sBqR;PJw-c7LFV=Zs#*XyC_PSS-!0<8!AlQ%eVSOo&h6;qR~|~ zj3T@+Z!KUmd}nAKKI%)wl@Htr2nMf(+(}sLwV9#C8*H#VfzsJ>)*A2?9f!^@j9R&m zta5Jc8d25d9V#ty+b_?!8|mW@?eO^qYQdIwTt>#uNm!$HH%D^YJ)6=JA|IGQ=J(ex zXfq8?*A$5H4`GMsY4SFI5pG}Is{x(aoOHdQ_Ul+Bal~CZhJrE_Y+sbn{>G^BTaPSc z$9ymnUK(_W89!S3B59tbqRhVN6q8S!juEVt;vebF13LWvzeF+fahEfN7;${MqeZ`- zcYt55=t>Mk%f1A@y&QJU0ftW;rA#$ ztpZuu`_1od&^%TAH{ z|41DOIE`br8->Y$jpzh~%7ImqD!eBCpgk#U*eTd>WaTi%JuoED|Xknt-}BZ&9I zZc+$~5b79T&7%fbUV-M1oRV9u>-TTj{$529k)(+1Ul1m_@f2KA zvot*Dytdda`wpH145>$RS=mFh07)(OvxmNn^oqNA+o7 zm@AfCa466}%UpZ>DOywHm)uQ<=>*czNz5*uo~@gVwUZ()CyI^h#{PXa9oCr#!#o7KdlCtR|QTke|T;)x? zr)B)_&&j}toej1o=*<2iOk{?_G4BuLAipgSwS4R4Xi=1Fk-2C#I%O|`Y?kXg(i}5NYU#)Vvy=o|28Q5r zjp)LZ6KF#jN|w%>JohhB?EmEV+O&3fi3X-{=*mi%M@MHaLbdI=3G1yIi}t}^K4h4q zU8<6?{H_G*b#VQlnHO+z1>U+rSwnG&V47UmOX$zYGDD|?vkd4ogx`+}cw&ooGY z%Qi-J4Aj^J0f)6dW3QEYrY%|ALifg6peX_v$eID0l;r*V?uSHr6V&InD$DZfe$N8{ zHf+`-q>IijXt*=N;z%Uj3t;RUC*qZ_ZoQU#l?ea*CG<~{I7G5O|ACVIc;c3*$y_HW zXQ6TMdfEhHz(JH$MB31st`wMqa7H!lat`30M`k(!O@Bym)nWrf4qf~@zUhX< zhYpVo`VHLn-~@(l*se%;lxi_ZvwtLQwQ!D-o~bt`hX6T@$q9bDQ2(FH2l=Tp+Z8<6 zyp%+t8z1VTWS6f89hBbXc7~jmr36UYJnT+?WjwA|NJj$YwNpp1eL!kV@k~%T~rGG@_+@t z(kDJpo^g?qJ(r+SGQH}@Np;c)Uif=lg+!9HYfQ^(Ru12MRkZq zE**#ChpDs7nmNCyNw%;r=A+XV_Rm^$BBs)vPY+_72udL#;+GLw?cmW3MA29ZQZ?H` z`mrT)JKWy69v?mK8GdLPRb)B@!kwkAVQvmUGF1`X77zwiS0D&OXu3I?T?m>Y8KSJNqEoO}?jZ zcgkW414YuKtL(PL5^{9d7$86p_V`u}yn*>(aIDR^KwjQz=L6!%`e1(xi(*YeuLC(Y z)y6UGG_(!33|<~wLu3r6cZF8K=Ns8AT6Qp?4zraw%)xduoC zZ+tdz72EkX%rPY13N;k7`>f5@{j9C3Exf(Brq#MaU$%86JOqt5IuS;x)Ngge-|rFH ztqw_$m%!~} zY87{^z&Xk7)ROQ;QY_a^OUd0A30ZEc{3mJ1`$of$dTw>zcVr>%zI|Qj?sjB-54b($L1Ekk&V)oU zE^{x+56e|s{%DJRpO9dGIPR2up+d-#2x0RRTGNp*rCYf>)S-g>cEZENEH?kiGN)tX zSdAZb#2@U~7yD?~eJf>-oN}vMY7Y*zp3LrHO*zm%ewgVQ*%l5i+i;%+ZS_8;_w-9? zn<0Ard%CH>cloV=uH%LW73NF@%BER>rdRd4OaU^UPj_w>+hifgoAVG8VZ!P3Jem5K zApaBpZB=*@P-qapCe=n5gGgllwpcUHEVS8n_`q<6rP#)`saVREx2h-0+6m&AU4}5A zL~#+0mCBj#cPlv{3xtiQb)tu!H-@$o!=;q)t(v)x&Bel5@^DgGBDtO z-Uu96keD;X>Q2fG2D^l-)0XbCBf&K%H_Xy6MgHHtK2{tFRVv==KC_Szc;7qyOY4VW z@Pyn(MVhVSn>Lp{F7frU`+WYOxdp-DKl5Z#to23)_}VuudKyR2oe4kxB1!}rg<+SP zW{D6JK8k2$X~FT&Wojnt&QJDsGNq`P*wDpz;4I)l2{CFj$)aGN5RP{$RbURaBYMYR+l}051r#VU%>-jZ22sP> z5N4PFs!Kt;RufkPEwbgl?1j*`sz6s}I2w`F+k9{Quxe0;rU6F`9)U^gUTNVp>I`U` zEFPj>fTGff@<`wyi12LgP5D-;n^xG6SZx<4NrLJ~J}`CBhv5^e>nHlx9DW>);$%aM zjU~Lu>KTK)b|;}tl0EfyoIVGfbsL;)ijWA3c7|eKhymwjqSg=lO49) z3Q&gCmU{@zY)&o3QG4I2tB6LdH`ggDP*PzxabH4LBS# z7?oH=TfLBCp4LT{qQ=p9{auD6J`%K}g}P#1&$#AbHXD>g2(g$bTa-qygVU|?WgT?U z=VS@1*mvJ3S@@kj=t4JJ_d6Ywp4ZeE`kEp?l6tnyLquaTJo-~-Zmb) zy@dwW{>!yLmP{3WeeLS&BA4p?gk==33m4f)3N-{<`xH9!nRFJ`fk|wPO#oC}uvs=3 zM&#(C2-A;ryATF(gjlhg23#V6D$Z95l?>M}J zhws8KOFYw)^BSx6&}z{zqLw^;V%A7GUK3+-Jmo9BrQ1}IDw?F?JMfD0ZmrSOL_d^U zs((*rFo4+(j(Jf+W(S! zig+zdY8Om*nEH3!YDsBD$->J(9o1@AnuGjtCll=Bc&8l6t)cIODD%&Tg$<(6EmO%S zdCTC&^t7MNQ%I^qB*>T>zkl<*m%Rl+L;Ypwm}=7!YErf4;b6fN^pc&BYX)ka+D8eAI7G= znZLU<0T?90x399rDreBxKHmv7T`TpLV-ieDN?|NulXtON|F1A3*QiFWL-yJSeVy3%-K}s$|!7eU0Qm&V|A0&5cerUuof=R&S$m>v%S$Bcs5L6%8oJ z+a)(2TE_6)a*9m$Ls=f1795<9$Vs|Ii%E8tE^B+}4wOIBZ?Ago@6ErnoCiqM>{-_9 zXNSCb!@{&}%v~-bf#qy;$6pF6I;&Q2CiJ@o4=0%XBz|)hhPMJ{?@s#OG7tXg>!sg1 zL-&sBSyP@p=5y0AhGUA-7fmKHO?etL(mpS*hA`_8MMq6Z8Kxz4m?F9Y}b06zt4&@Z!qZGRU|(L^o4aHBoivG^5F{8XJ1GoPl`Y%E+_+s{iXIiuVGj-DsQ&@UFRe_vPs%!s3 zFOZM?h_@)-t+TL)Pc?Ud?;CagGPV# z`+spBgFKJm+g;e;?g)m+$vlf)+5nRYsX?U4Y+Pdyp6@s0;8zr30vWY~QY5IRfqU4M zpKIy_b?!;WS8-Wdcp|>xm`}4QFtrHN#a&A#$h5h}*-cnx9O|k>+muYr9V zNDEJqVh2jHy1(JOT;0(nHHOP6R%N(d{8lA;m0=c^gk3|3)t2mGeH21WW+RYxFKw;r zCM{1WW3xORfEvV#2VTEh37XRYB@(K!L};lLaDK>UKYU)nQhR zDsFabhu6Z=ZDJwK=_o-ZXvB67ZmxdUIA!BeQ@IKE7Q?x=4DAm?4#Uu(HsF`MFHinh zR0JdTF54`gpN;XP*wS97Z&CcTEP20B;1TeoPE5t{FHv+HelTo>msPctPp7*r71Gji zV3%LhM%oKA6AY9hv*f>q2!*CrP)*lxmTA%D~Ju@le>0&2c z-0Q*r>YQeU6^ySeKa$fV8d2 z;V6iA&rEU%%LZOeQ>^+lb_#yI^^)y+$F}s&y0$cZ);|sZ&IShR;e_XASC!eIcS)#u zDCxzibO!6x7i&g`yFZg6J#F9tMOMR66b|Er!1w(ra zP6qo40tLTSas=FhS=1Xe)sMbBLahr)UCR75K(JHU1?u6j+mNIz|67}6f1Sqnt|Lq~ zArckS3B_1qwWU_R*n8w+E>7Y7)8h1lJ%hJ{ue4V&KjlzoDC$G2zo?)pJ` zyb6{CyqPiVN$bU{ILc$(vMptgy6Iw%xX1p#;?Lw*#y`@iq!`}qwq-GkD&(C$VeLW# zye43a{s^`Hm$yvO;%%gHJUK&`;|iKTVEhhr|LR1bTP5`V>drYw$RMcR5(6LJLB?JAxEe1le zf6aqs?%SnA7DVdkht?tU(g*cp4=qBjbSAB(;>DGq>ww zO!*jqpJ%vDx9Ya50UueBq?Uz2&PBL-vfG1SvT*$vFX z>(oWJ>Z!%guYw?G&S$FEDi3pYHdS>kqYI9PR-T|B^OWCKw`=S>k#1ciYfomYF6Jlq zqJ4G#J}qJ$mqq_+GTfji&&hKZ)#b<83`MTn@L3tDWK(78^qX?=+hSg-}BBZ88ZR^^U~fY_~b=OMSz% znX=!8+{;g>`V-w>-b@6VFN3&fN}mpZcR)g zWunF+P#YdS1<=3X)Y|+NB-irsqO^RCOB-C599kSY8$%+V^T_$UvZ-BY&F8MWuQmSadRFvA6nUO0mnvIqz&Mye$&^su&cG!fk{jn#VypUo#ox zUZGp?89#ny*6VAKZm!VZY$UQ6V(1PDdRS|zS?cu`N9*2j2tbUng6XQtwKQG(WL+!d zODL-0UFKr zt5Sy(V#JjT5=Z1CtFWPClFOttR2=(l+7su@=_mhs$Fqt$`Ej^9m?|lz5RgpU;|3@s0K zGM3xo8@yv$*&l>gTj72E>SbyRWujuk3IC`60O;CNY*IhhCZ*8>9H>Z`U zzU;crKC-Jq2z_cVM1kcp!$l<*h2FHc4@IQ1?>(a0J*6L>?Eji#)SUiND@dbJPU2R& zTSG2cmh^ZCt{V4s7+G33N?Z*M1D|gW@s;Vd#`mxSwvS0Ky_VdiQ5y7Q8nfk_dJ5=T z`W}-wD)wiv(ioVv@vu%{Ib&fzvzwQ@GiYdv#USbFDpwU=p^#|n)$Mvo^0P2$oNRSU zU>UMY0s%*+ zY5uSWWtQ3XHz0|=fFX$~4WiMyGI~Xz7FZwDKG2g(85B{trY7sQz6(K-#gFF`LAHB| zx0(TM;q=0Q&;m)ozJ`-~ZS{=Mi*pt{i-pi$lwqv7ydgf~Eia6&Gh6Zs&8qNlAw=lJ z^j`JE#%2zU-N!DeWn0)WZ7)osR_5xBpMnIw2V`cA8_$4oBWUS9s_P!T&Q9zE$(yi1 z&^O+Jk0105k?rpxt!hnN*zD-5(9n@qhPUtVE#i_ii$aMn3YMh2ztXQb?L}H*NTGY$ z3G7lbH59dwpBl;=O-wvpA6J z2kgz`6w3&2CBv3Yl;~Wc6w~RK%L5R1ETbJ1Je*-=IHeOBS^o zrWm0w4AvS&`-*-*ygsVX0ueRaYt<&>7yEN!e++Z`3;PbgXJ+8}Cuk&J-Wq|+W zOGf44E(t@Q#KizthU7kpY-WH!O7?_Ce6V*_XC!-@wIsX}u z93p7~o@8J^aj}6oM2^6@zI{ z`GRgv&c|z}%Kh4nYb|Hz4^h!wDK1da)#Rnn>D)|i$tHX3k~m>k79^gRUHeC*C^qEj z`l~z{te;lab9Pl-)Kp`Qat*g&szjLy<2$lRal*!&qZO5ftM61_u>__5w|)cyDS_AD z1>2aUk4dU6kxWXfp`MGit3L(BCBR>vk$q6#@?gU+OjSV#DdbH*E2q=htnMwi% zH;E2kdkzY`1%-7T!T*+6l7V$ELD?ERjSgY6?o%9wtbL><^nvzOGvfiq|Jp&6>2Q8q zH3^fK|JH`z@HIgcu^&=e3?|8Hi%~C{sCNs1mL)HvgP^nx7aO7)Pvt8PpP)lxfsSyb z2$_CrqHoWzq1QLJH)Zbf`?7CEU~LU8dImol=Gd2hwL;JYoX}(=+NSzB8XV6?vZ$YX zk;iebS#;qj%EH?h=pP>(s7J6Y=m|~cUeH2OT;|8Y`wjnaS;ICx^GS1-X(Z=>bfXf^ zq~ivrABuOo_CC7$J%E17>4)`Rso3RnM$2?WqqX@sKT|ACJ1&O2S!RtK_qdILF{jZk z5@Hsy7EWI=_n06I_H3^64#p?nE~o{Sx!iFY;!aG}2mIrnX@kQ^u!CPCWBxXg)(guBj!^{_c;;N4QKcSYbariAbWxH4Jg2 zsXnmpa*W$dYTA!GwTt0Cl-mICnToHJf`*~@LFjXC1O1W!wydY&=YTPF5?Bc-adn|Fx~#8M{8%D_=qkP#b@kfO#J85^Y@P+f4TrWmD=gQ zgw;#;+>7{}a zCj!ukJhVl`m$adU7Y!&D#Yqq2S>n@FLEKqBPyA2?2k-9fm7&miWEk3x-_s~0U*}qt z|JwV}6o(_wY<|Wq|8BvhbOg~V^*E1>)@l{=pOnVLPU!q(BEhAZbnGM_BvUx7B$ZL9 zx=mV{gxS#0yuWNk9=?!#A#Pyvd6z#1VEI11xS}RgC#iI;k=l(x0B5=faK_^a>JD3U zzpEfdjxpaLRL_ZD0$#v3(08hYdrtP4#hZ)zW2<%i09!{kE}zq%lpr|pCy9*_MgeFu zKgsa%3qKNLm=((!k_*I9u!2nU$i1=!C~LGiYDNMOz!~5Ioj9Q)X|u#hIH{=ChX`53 zEGj{TBv1txKG>uOUi@$gm;vWlVG^ibs8uQ$=-8G+HM#a#i?jME>piq)) zWN8iAZo|ZcU(EUxT**%8XJCgR7n6-dmiaN_M6~ukofp3TN6XS4H^w9qmyVP9J*+}y zP1H7&YiQ^u3Y%nck)>I9pSjA;X9kz8w@gpG0n2K5jG`$TTb(!tZ6wu!>*bd1B0f_N z`1X?WLin`xBi2$@>vTGqqzZR=s}5a-h%`foco44qC(@Vrc!f0-gV@IVkp56Q*d~^M z!JF+jK&UqV^Bl@6=2Gsaz}fnr5>CIW)}0o<6pzEO_a%(MXKc6o`uil^4b|HC+cW8j zwj1+@S8&kAFllEH#8}7TECl1zGWA2i>g+%!g~GD6-sCn=WKZSWus7eB^);e(Afk2u zA$XBu32cDcRE_^2^KE3JX~*~*$~uTeM)B%1KA^KCmc3|+W9D2yN9HCwbCWpXh}>er3f6YT4z3U6?)G!mp}&F+SwSl+w_tOu7! zzYy!+g8t$Nyxm17I@>-@ImaElS})}ovfHsiao9SZCBF~WlCmpZD>F0DbMFzD9Y$Nq z#Q3;n-`Xe(6&%zO$~#*=$6WZX^9m)ifj=Eh&=hpZ zI`?4LCvBV%^b57|kd=pDFgo^p*WBm%IxEP7xdd*zk~pB+`WClSW%V?Bz8cp)KTq^z z(byTdSiUwEm&%p9Xmo7lt+8I${wQEIYUU8rR|L8>t34mrFgbf(?K{LMvPN_0(B<;n z%K%R1@Q#l{jhxi(fRqqmODA{8`@pm!qBdoYpl(y`a{9#(?gWk$4iM^^X{++LZ*9M% z7`AOFe?yJT%8!OF+^OZ42)AZe)Cl~l0cgIKbjX8Og_&L=k(-rx!d%Vc=+@lCoSY|b zDyx7pZ4o1&njxQ7ZHf5s)q~i`2Tx>t-jcdZ>;FTJ*Uos=WWER}lVTxZ0M$BTmjqMD z+XvF6LQBF>s81P-YjGs?s?ecglXW?`jki(|m7DX^v#fLk_DJ#y>Xw(K)9lgIY<0>M z7T}ziS}OS>N~An9p)&=-_Ou2 zXVC5STFGbw4>*%~DrDlv0ea7(dVQ1DEI6p~*L2kC`myibXZdG2%_+Y7K&TAKn#BS8 zD7DQhRFqW%|44J%z4n0?T`i)-nx`hua`VsO!((z0NRo{vM=3qv324#u`SE_h{vval$+H%WD-F@4r zDOm>7k!Gv$U9z#Lk@nv0Zf-i`QX3spgA#D9|E;G1)ulB-HSaK#dF3Twvc|qF5j}o3 zy3=9}1sno)AOF5lQaRm{s<-86$9wuL$KRfqU1JYrX^~bLyUI0@>3>(4(Y$XOhX@ox zpu`Xaq6>a)18k&&8?!$qu*Y8g__1cKfKPDIVf(U&2}zjKa|IJ+=~keH++K`v&y6v_ zWt00jymr#2%chAoMJ!6W9vvZ*oBb=E)sQ%g;!b+d#gselHsFBw$0|?XqS9O0uOE

    *QDXs$7mgrQv2bh87K@sl8kq?a4cHweIpQ z^jSy4$4~pcWu+(&pR1!s^6cEN+-IbF56#{mOr>deB1j(?zT4;=iEk&anKZtf`B=Ez zLU8n08zslgRP*8g5(1WTcQ!QCC~mqwG-$t!KE~TyJ8JsbeLm3s@Yu}8nr$E{H8}s7_?q3K|X%MW_@nio$ef7jyx%Z2A9%#24 z`7TAYf7k?i46`&o6+GEXdeP}J?Z?YGL{rb0DI?WR7?$jhkzL%eN-2EkTY|@#VTFM4 zBD1@D+i2NAf7L_*nQeUuj-mGe=weA=avcy?*=HqN9{YB_r5 z0!8+l^yXDz{@x4PE3#6ARFr$6>>3_`e7m_AawG&s*z&Runa}qV*rFRq52PPD>pble zZqph-@(H4lf|*4jO}(F@Mb5K=m`D8qwnAi<$@+C2$=Cbv`_7EL2`2xMx~IZ!58dp> z7kR5l_6!J{;AWy+wxLsnQzinL2(pV(rgZ=_P``c2Q0Qpd*|DLbwUb5~XMD3suc(a< zy`7z{p1h{JFt+4=mc7Oq@$q_y&^Iben~u6fh4r%J&moy&um1o5`6r5T87& zzph13#!UzeRC#Ai48Ka>LS?uxN_2!Yfa7Te^cD9zY%mb|!(LGXttZof_UA<)jDZF( zDhVMeH`8l%Ox!1$wxKzE7@flA03r6u4aL#Y^HV*5bUEfLhij?=dCLo~deJxDO^bf? zl`4t`PTMnF8x?#=6VTXqL2ba?h~`59Oo$Vj%Amcb&AVvK`+$*Sw9I{F_$am`I!N0T z*r+e~J4(EUz|yA(?ScxDHh_fC{f$0KRfe&&+-ZR35~VkZc$-U>6cf#>%iM!sfpD>l z4AS^>c7e!1F!uNa7JCjd!@e0x6h0zdGe$9Uk{$`cu)a)2N~q zaPkVfe(+$ZtYXjFY1@+iBS-g9a4J(ohg;pk;tlLL2$h29EsPcz|2cf{@}xAJLr={* zZ0e{*Wi-Gg+Yi#Ui&oYzVU0~`zXhv2x_ByJ2x~c z{srGjxQfZ-zbOm z$5y#^M@ZhVc&q=WF7>nY)rEd0u@ zP++EFecn5m6698F&(O>1-XNsv4h4G0(v={MnCyDey~MxLT4lt1BIeX}m8#z$v%rmx{QVOz7U+Z( ztmj}ZAkNLco|7nFdDtq#bO7hOsb&~uz55Hdw_*u!^{E}hSb(#U8SoI$`bLdgv&dpX zRwMOV%=90~D!v8BhVcfI_E=ORc7jyW^xR-H%n*P(5gIS+V{Skk0LsI4W)<5h|AZt? zd&TJV!Mg@m<3x=-S00(w6r54jvSO=|wDMI>DFjxoRAZVLPDh^V!#yilU`8&)&UMDP}pt$_6Z|Lc$(L2Xse4ie%A_nj-_;kof zq!Y-@V*Wrq-4ezRU@XM9J0W}O6<(yRsQQ4!@qRA-(M6d*90!M^O2o1Nr;T}2w;tU% z6JO2OvqxkkXn3WXz6(;UTbpUN9h}hPI|89^zgCx(~I%+*tL1_UV%gvCPN3oS7(lQ}86VssDL<=hYQMTUn7!hWv2U?W|(`3dquu4=D zCMwQ|OfG4X^;ucqiVVqfGTr!!!QyLnky6M9#@foa%qFy$S1)`n81{0WCC0Zr8wo_m zjdHLAO{ve%Q`E>h-HWf^Ch%T*%ZPAph&u$d9KVn(X(U8xyb!NAM+&Jvn36yMe4;hO z?8ZDD8A2P?{v>e{z|(t^U(FmZ(kgrs_$dIX>?#yP4xcBzfMuIV-S%0n7f@2fD(pdx z*3-6m`a01*{3U7}N&sz2qI5(H+6($|)HISo-$miQ*Uob}we$U=#ZM;3z^S1cW4D{e&lrWmAJn7Y3S-!wZm>-l3PVawU{?$aecykPs}An;M>YiJKx( z#p9s%l|k8LRrh35)hV9~xTj3yG45ocA=xOm>LL>M}T%cRLMRpCktKV2IK6F26T|->S%~_mDn#Tw7UoWOHqLro*Yu!1VKI2YA+X2_cQY3VTPAtXIu zEy~wmV`&k?12swUc5t8A7|F&M@$#SjuicV8w>0t|d100q<+ROTAHl_GQ}R-qK}lG9 zH0`j(mLx?)WFh6`K#9oyI;3%KWzO|A8Fh<{fkJ*q-<1Jr189Lw?w6i6j^Vmp zon)=8mTp~;W+pkE9&>kCjT)6)j3V`;9YKrq%iWAdTT{#(P(a8b%ms)AQ{x+eFT)$F z9Q!#Xx&$vEtL_@f$Ogr5jfR;*!ksFsTaMo+@s z9MIg?tPA+$6CVjMBne9JbSryj8=<)75trpe_YMJ_?E z?CP6EO5+Rte#}U~&|KFabs_ zJ@L@;CYa9Kv>&o1%?Gb+=)>3QPOb@X9#_Yu?7j@1-X>H_{{r~j!9EhbW zuVpPoE{FS_nVo4Ue!qk8GYc?xQ}8;H6iUsG{_n@UOQw^_&pLsjwR8-F^3m4S#^WxM zCphxGH5e3vu&(kFKA@lNAMF==V?D!00Gf-j!#1;L$F3Z@N=mj#!KJ8|U=wdt>xZ_H z&rd6qMeVce>(m57Yh7#6DFqo#;CYWIWT^j-A5hwO{w6GwR)&6po&lL290&@3|qiB7;D_pwEzm z=vdFT>C*&Qn}dZH)j+pz*EYx>5U#3^4qBg#fmo9lTmLYi)^)o<0mnUce-Lf#?LaO~ zzl9~`^zj9P8WlFTtlpUnd-Jd=y55rGRhn)d3WTN*jTDaUg%a1E#S;2G$SEbmEm4L; z7Gwm=Cf`6`Ci>>4MX)}fHIwtEDww1LPA)Tjs^hey^PyDtHc6cpf|q#fu+6vp{@U>V z%bPQevc6~W3MN-Ck6PG0?J5uvdeXPRKs|=@z~+>0L$66Wn2RBt>A2~AIatMBTwhJU z7Ys<{Ax2eQgt36TzEer51rzsVI8*9Fa@Zir=`FC(e8kLOZOAfercRRXae*wJgntP+ zgh!^0Sfn&Oe>|sX)sm6U%6*{pCuyRU$d4*>4}`XVDzJmoR=&|oWxa*bkCpR|2i;OB zKcOB0cg8u{H(_JPTf!RIthH?PjTWz6@_-ZBN<0E9Ux79l zn)xjDn6IRLmcfLz$z|uj`GfPQg!0pdcxhQ8Q?Ju0uflU^q2uAk%i*VE76s`hflC~k zctkVQpntLGa)(5Tpj;ukVQ5QaPAF_LOB|I+KFaV&HoO^+c{V{#oe^9jM&gUGig2I2 zd)bL={ZDtk3E8mTq~YY_k))oz$G4uK#B5j4MdH7DKjVJ{(ZL;88=a}cw<^}^If%3A zJhqhJ1rJ=J`!G5tEitbypm18yX=@{?k9FE6$+!!=VtjbvuEJp1X{2&5FFjcNDAc%c zJs^#B3~k4Tw9$U#3$5gzX$ZoQ0;*Wc@+IkCQL)!g4R|hU78ge85mtir{b6$E=2W@mfN;9P)y(o4zR{>dts5D2>i5E+U};U|3T6R>NNAIOgIvQKS6>5FSoXy zbNEH2a-IuU?Hh0^x}!@?K;F@xX-|m=h|!zp@#Vg(0zQi5m}qO^20s@--6^+INN)y> zg92?=C7cv#H$P>Bd@P`=Bv@KROZM{V>cSCQqVHi37z;qex-NjS;geQTGg|CGKlOm5 z7=3jZA1F!#Dy26xIWE-T4lFz#2(D9;q1!As4n}AL@O$tH=6XxMI@{q*)GC2Wbet1ZK##VzAI^jg5 zXg`p>$96W0F?~h0 zv{XXM?qXE?T&`tM){FGuo5IN^eO2JEHbgJ@V4LJm6;V)5{jyKwVz;b)q$lSz6%dHE z8#_}YhsAma@Fp)UvFXE?9)D%hXzzpS0+k!LyNN=6y)zZiYD-?;8hn^BRvCFp;TcEe z{iUIbKe_fCKccK4CPhLQ@niEK{6E60GwZJS8T>{ve}wf|^R!v|qp!T)M5LCw-4-zT zLL5<};fm4ny6zh|-KOio+ev|Gx?PAHFxb($PeM3S=Z>&7Dg`eTFmG%3>2q9X+ZtRy z3=i$~nd8K_E70#~3n?Bb2hf|ixr*2FX+a#-@H*N%*QfXBI{d|jl;4K-L3FJ%=t zKLG1A;3HGusB=VF1*JzTw^YEPLNs!#jdnVM}5@9mqqRb&OuebOw@t4mNXX`x-2 zBPtJ(Gqk~2E?Qm;6wUlq3e@Q*h&tgmWayM^ZiYx0qarjp2k5qjF11z#cN|L{uoTJt$kW#@k-JI*rNs-mJ{C%9bq$V``) zu`|cVF<{^ZCO!AiX)d_@! zZ$QR})(V8>2FB{pJfraz0i2z?eT|s=#~}!Bc{ceJ^E-Y8Bve}^dDPXjtcDsEaF!G= zr-|7=k|ntLxd)<`RN!z{BJ6I!=N%*QGi7XL|E$6+tLk*|1{fjX^rRGN_h@0vry@=S=dYudcSEZW(pgM3!0L;Gpi>8f#81MIVC zfM)!c2A^dt;+4cIX4d@V_m1!73t<+_=`*^10W_>oQb*r+tWr!yB&2G37WZyI7T(Tm7pC_>$Tnu2o2iM-^vO0R1 z>%LPUkw&%Vx(i;gcWTox~3r~(c$cx zl0u1IRAn(;d(f_z(o#$pQp$7p0!?~Xl zcifW4L0YVEV3U><%S0!g2?xS*hSu>%!QdjUj3?_+LV~v<=Ww&d%MQbRJpVgvv6m81 zcn~zls{vt|jjj6{U%8N;U0HNb)N;AvWDE z$EeKGIKK*M>WZlHR}1i)-hMHEeJqoqz%l(l982$0FVEhOwK&vK`db4ZfL!WI-=*Q{ z|Jo*txw>2KWN7QSWB(}-h`?0WTa@Qb_p6S?77{du>Escc@-OUa{*I5 zWPUU@ItA2EX$wRm_30}c(g>~S003HE4KN-?j#i5769ebKDBNR)D?J|1_fFtDYl3#9 zoU##$#IG)Yrb{HwbOL~ni*i!ybc<2|5%FkPfVn;$t=l#O0x4;s@liI<%?*sl@Q)d} zg3#?{nPA$po$p#`oE6GTaI}`x%1w3^O>LF2r=5%b(8X>mkWl<2y$4SmX9~#%jrNy+ z$*BpK`1YkeIe%7@6Js|@B!cl-+cuKpV#&9?8GJ?siB$V%2yX(W?wM5;R0^bVx}Gj& zQfg&JYUW&m7~KE+^1)i%KQxEMZH53`BAIXkMVtwC^Z_ED9N)xoeaIEHaF=n}B@rgT z8WZQYFipdy=jRf(lVneRJB;pHt+z!ttR=FM->4MJo)>c``v38Z z5U<8yP^Bm#UIE=Ts`tj7?}Iovmj=YupXAJ#qzZRf2W4i!yAoF-tWxUq*h6&aQM{rBOw<#5wq>`mQOhV~Y zQ;iv*Q-fIpZo@u2PkM#DV_2KJmS@GD)Rzx4H0LxiEiFR?o6J;7YmIDK%r{)BEc0YO z^!t{M_s>u(gtvOMGhe3=p!B0O!;tv+AmcTerrhxl?GdBy-eRY7YmwGru>ikk}i31T8uO~ zb~}fLq`zyfjQY`L;YA!rs3C{NF=^!bQh-j`$ub(0qz zB%(q@LndrNO;2~hzBmW2c6XdkaW4T=9Hx~^g0l77{&tkb1GOsoRm&o3u&XmuhvO*K zxM+=2I&NyKy?7jlg-tr78Cs$0z-)Mx03M76g#)d-8+TGShd?GM^LRW*!+^*u4H;mnTyjqTIB0J)sc$rVk>x)}117RldN3GST!t^DgH23CLucEy*naF} z0P%wh`!3Kmwc||$bc0kYh=ZIYWw(18A)RJ)B3mF-pa-P5Hi~9E+a%MJrr&XLZEQ;z zJLk-;c-P5A0#X725YXtEH?-fQjZkZPoOvkzgpqP`*Hp1f;9_{VM6oO`-Cy-s;lAK6 zuNpvMWm~HX=7~NKx3%8sER=4S(2s_55OJb!vzb#eCwHO%!$3(- zDp}w3w2;`_ZYu}0R8Ubv>i?b{c37_vOipXo0UrtUVl|uhPHzKxS$xbtvSt zMlgm1qYgt>HOrCDW;RoYf))o|`0R{S#|X#IH>`?k@r5}fe`<9~A3y5+5Mo5&x83nR z5J~K&%HOk76_REAg!_?*=_I& z7jiW2*6#I=jbR*3>HmTA-vAZ#J;h=%pmB_R){WgHZ6%tF|GV3E9lmaVaKje@euJ&_ z@s{{gY!;1^2X$mFYJ$Qt&D6@bcPJIoK&q@!t`QV=a@PHT6dvHWdWsz`??IaWz_(^S z1a>`H8!9j*?y~#;LG%Uj^&I#25USf#tNFGrp)75Vi(ud(#O1I#Q6CkHrnm~u4*z8t z4XAPO;GRv}T_!~(UZW97sXhW$3fny+A9?OmxPv2u&B!5Z zpzrGGt;}s%ijG$1XX39AjT``jZW)P6!k%zd))CM+{h0i4DfCVj4g2?z2AI-uht~!DA%cc$e){|g6_as+I=;{+L(@@QkUkjIXOQPV1QEqKSDuuqy(7RQ z|D74*9&RY#r+5?u5~!-qg1y4{YQ*Z}vh~+ai3IB?5>$Xd&Q-fbFXXyiQDtdnXZg!x zDg#lFyS+JA6O|>xtw-<@4ydYgy#&K-QpPtvby-biG?Qdg;c}9A4wDjf9Jyr%NPzhY zwfgI>9f^FG%E-#=!BmI??GUce{;@O<3A|wk7pGBK9sFadV zL+=pT$_{K=aB0Ip18*%Lf~DUAd3_XtRXpVK*QR1kpZB}~$QaIs1p}UrD?R5i?7|g$ zsU772V&JtV&=gO_fFrvFA${zbhm7Y?9+QZjb?*Wt#kLx1E_c)qGy#5FSom-~>eY$r zld0&x%)MaqvqDnZ-zYQUE z4!TYaFLl5uP>dnQ#ZS}O3AYUvI+Zht7qQlILZ{30M8VY5osGq9hk~25`ymRfzQ`Dn z&tF!TCzj8+X3FCNwk#v+KIj$ToUNDfD1C7U&H4E4gtnXrj)bZ*-}_c7^;Ky-`amW` zLaFg&)Oo z-!)=i6sMFFnM|L`CtR?U20Xy;u%aAI3r%UWfWB$G8I)dWN1=8mIN9er15uq}66{GU zdv!`5LVV$iPf{QB;rOM>u@u)WGR|bn8|vtADwNa+(z^5=b5gL~8H4l4YEZbT%tWXO zRG}+z@rW0LsZ%6ON$8XDnD9kN9A#s%6%6{wmi#9rJNmG_EVxpkQRKOE`F*|Ext0^* zcHnN$P9Uo(9*oEq+l`7@Eq7U<*G347!(z)^j4E%`(@XLKXJsCd@}-GgMA`R7M99K# zpnJFH+Urn${o_no{Y+i!dqX3ED z9_2@H?6&EDf%ic6x7M2(E2-%-F@gk`A2|U;L+GMZY0O!Lk!1105uUeJ-x;0b8*%|E zw%*8Yyb2V2WY86<&nVx)s>LVdQoEy5vwgM-nLCaPVv6@aD(*X?PA5^p9WBHC_ZgD> zOpl~=>I6E}R51RTk^M$pF#@>A>)E31axdq0uukBYvUWi0LWeDX@#h4e1#fv|@>zA{ z+u(xFZs?cnOZvmyqBUVE0V%D|T>s&4%Gkga&rTJ{?6Q#d8qMxE0h-X*uj9bTZRS0~ z%~YItq&sN1udm>dF#^T?oORlw6}>e7ORM^xM7JqarWv)UvBo zm7;RJ%#_MM*Du5J>uL{2!K(?J{Ol`*YPmn7Qb;i;YP=9ZWQbD81)5FDX0M(mSp(9~ z+rjhb>)C=aSXGtxpI~mTW!DWps@ndGt+*h2V$`eoi9YlBe^Spg3$c}gtXdyyK>2eF zL`}@SLX2zO*#;a%KC=9aIu0gWaEtFTpV{3$hj>pn+E7`1n~Jt#D>U_jzg9Ah@3B@tapIiqn6l` zE%q7VQ$i*BN(qeHz~T)JJ@>*oNL3JhA95toiY(24&`j(4xobCOpOiIrC0!74s3vta z{m-D_R7+IU{coN59ntK>1!3E_Te@DSCTs_F|Co-iTfaleh7G4^zzS%9N1+3*{^fdR zIu)dsRtR*mXCa4?s@@a`1R^JCvA8r|CtLB_P!3V~=9B%->=L(Gt4N3qS)qdhk?=aX z^Zl%04L?wrztwY_VkFM2vL_f%!GfgNa0b(kIoD8wzx1@{0 zgw#yTD#Uu?CBb+;G`THik^z`sqDUo*j&3<8zqj!F}FP?9TXSDrkUkQLtsW~HA0gk zYxY8pzVrcq?jJ8mmO==750vVR46Ze{S;QrHdIRYl8}ov`Q=wX@UH`Re+%koVp@Ek19b!BmhCN)yMvrOq|Js=vz$7%#JD&YFS~VhN zxzgs*f2${Kr?&;7kY=IHe+AVcJqW~&CD4)e)&QRUxEL{boBMJ4d2yZHZ< zTlS1t659xTV}0<)Y7`4HuOurqUBU~!-aQ~AC&>RXp9kV2Jv{<#khRPQtV=XOvHpf* zwBjcjw>$@)HtM8rgZ~=!qxsfyw~38enpL%PLD2mIK|8w6`{c{MJPm=|J%&cx_Gy?V z#=;22cOhKfeU_5jQsRK+s?qVmt-!T}@tpQS6*DQ58hX^7D~#N@CRkawJTer)q}8u4OLr=+zSM-OM`RuX+YdQg6)HSZ4=9 z?hGoV^b5fa)ZHT_A{$Hk*!3=Bj3zIFCUhl$m-42Hu>1Y*#S8g^N!unXOYK}S?qJgY z4g5~DRPW?}uU5eZO-n0+-le)A6fM$!40ZuA))!h?gM>FA<9*0(#yu|vf}tqF{JVbK zLHDN+Wzm*j>)el>nuj23L(CR=*Io*+d}{OH)ZR0%d#ilpzeIkL2z?^F)wHG3-eX&d zA3f|mIdH+T@klvqr&bKKGjCCPRf<{CfcQKB!H~hnKs2tmx^*EdKn3PtlymaQE=VN- zFejuYNi7-VT;vvj#jv?FcJIQ?-QR?A&k3>}^L|Jj>? zFR{T_NXYHRa#N?9uZ<*A{ErdIQri3P1(xJ<-|0#LNI-KESe@Wm#QcS@AMS74vrD@5 z<}&xVLQg>~JQ{<={6pEVF>qp5p=}32;nYunu6mNOM*^ zkiDibpng=O`i7#_O4d_tH{OSJD5Srkt9Qy#=T52guU13PK9eiE1EiFyD71g(CjWe$ z7QVI7hpfqrUU@O)t#6Q(^AtH1^(#8egJK5{vu604?NNi}ZzAY#^RvR?+B~c4!GTJL z1nx<*q{EqtBjOqMsFP`G%7qE0{J&v6bFWWYrot*_sG@A8vRzUfe@Mt3%=>J z6?3Pt=cZz1O{Ox@8dm5WE>d1mdHki7k=gVksEMK+Gq-@xii%>n?(5h=YqFs+@rQxs zu|LriDt$!}VTlfk2foG)%s+1ssrlrTEw1k+;XxD`sPPdSIfExFr&XD#$AWxlxixa&N~7e% zU~Dz^phRBT#s;A77Jp`k24 z06TAjJFpI#yZJxJLk$pzE!McYgCmg?ok8Yy?=auMe;Q9KEqnJLcSgQ-yG}Y)&xsL1 zyR7a_RjA(nu!oXZI}W16`>P~ckX>rJp)PBYR5)7hsPHwWJ3u-Ou%TM!81d{HmlU0N z)l1vS_N3I9I;I5HL+XTmDpOo%6=zSzSbEXfjH19*$<5d4;zrx7-W<=TAzbhWoNXjZ z=+2f8xuh(bo!cFD%wzfntqWkBGKL>2!n_PTp_RbdE5s&@b9X>hB)jB+5&%>6qdpf? zp!npnZ{Bfj(g|PVDJ@Rx*|V$)lLy@ADnBwIY%wxo9Whc)Gc<~TG-5M#*AkjFQxJP< z!={|`n>zT)_`|xZXq(GP&qv&16CyqvKphn;7k<}FD@(}xTh<^Y-UZTPRi)mnE{PET zQ`{K+3V;h>KbDkcoD2kii67KB2r z+A73$>jhwHE35`W;OmaUt1ib5Y=3pi3Ou&<5yv+fnTljDGNG2GqPIT2HLA(Mf%Mkk z02ojE>=ENEz@cf76F(bw5l&mV$#vdt0=GdPS=OcT`r=fP1NMhIOwdVyMX1Lq_u~-U zQWROhs8*#c1~@efBSi;#MX21LQ&3n%m^}o)lP5j5_yeG+v7N0pCS^4hOEm~JTSmw| zv&f87j+Ce*AuaF zT}2JB84pE1$#NnjQGX!4!Jjveo>q&I?4oLnnj~n`fXoMBkqg?3v5$@w9DH!GR`8r( zw74hhFL_biU5uj$GX3iR&hvoq32^R%txG zwPj`z9L_u-ag}E>3L@10128k#o^c}sdI6=``dD*A|6VM|s3fE8ZZrQeKVI>f>|uAU z{dyo*yybzPU6M_9?oNw=$RzRTWIno;!El_-oopfK(ZXovLzk;+&oNQDi*%pW19e$P zmyvDklnpE7oZE#Qp?B0-t1=MdF0WaGIFCy5Trbe?N0Tt5uEWRpBPYRJMB;0gzk1(n z{xigcqu=e7Vmd*_$br|TGe=^IMI7?Pd574nX+Q1N`bVfo^Pc-c^_p+QME+Nq9o9aH zv53qp98w8Nh=>NnI$;n@kA6bT9l)9v*ga7i2`)||fLj;-%SO4Ar7=nJ3{HvbTK|l) z35iG;9@&;{64SC{WE>So=)_RX$f?2`kkBEG4Sn%SlLl@Ns))rF#v$}~$P?J4*MJG`MppT1=W{Z0u2WbzhNidW* z!G)93;eBuOuQA3PCWYQBvZ&x?#a z>WV>y8hf6Kf=>K}vP5w@jRYC2hy5CKHO@H#mfnHQtLNQk$G8-jIi3}0HCn-r=)^79 zT=g8v$&Du(FZeWX)#@oxlIwt05ILH1w;*f*tvdu6i)OD&aJN2|op zkL?nsb9*}d`>VgS!-BSNXP8`C$!I5F6|k%cV|;r=g85Avf6of#*??DQ;077~OEZ_> z3JU2^XHlP29b|xnG27`X1~l|X{AxcF2HQMPPlVt?mJzI3kFSD3K>tI!=G*PNJ)m<} zk-`3|@UrYC?AuBVL>vz#vZC!ijHiWn;Ic+b5D9ny7FPr|tJE29DZQMiQTvu}->W#V zsByeSw~-CWyh|RpLt{J5wY(UES(j%;0Wf3b#3YIVcW#w5c-Gby zGH~dHG_C!9ReG4WsI;3g0_Cfm>%6Sa)E%pfl5ZK<=?;h({Vw0XWvM}HyF{mLmKs4) zaYT1Q2Dd9{`w)u1N;T>5QIa(H#%N$)>JX%SrnAee2d21*Kn0bhD)<7^i~CZ*a_KIG z2WK7=l?U3b=_)mG;Q2Cr`2B)CG2SdqyVEs&EexiAaZXF^&0Wcgvr`&Zi$}}*U#>oTr>!7?8z2sa;_v<8-mkPJ}L(# z_Qrd1rn`12Kl9PlILP}CCa$dy75W(l%QBd{<@%y4;9U^r5)Q356uM5Qw7IvycmOe^ zNxfm)Q8~WiPxI`tcK*WV5uenS6#M3otdD=A#0_}dQfOiq@yDXl$}mW&1%2e23n}(b zUa)j9lYpLX4FL`j#7gJIu;efvJJ zKt2QI)+@ZhDDm-yA0xSND%e!Hn4QL6+OZ3w(v`wG9Y0y4+OpEcu|EpqU)}Z+ud5Y^ zf0`t0FRVU4UhU*8{Ql7m1u}#+cB7ao4>-sZAg_*9HmBxRpe+`eXW3;6W9W2*Li5Mz zP3?e4eR~{*+!#5s=wufOh(z=7QUvXR>=;hux?mdKxtwXwdezU4mWy8z4IMp~0&AHV zV9^3JlW1d7cWNnuaTbU^f|2)gXLDf^N9O#0jm=NMRvXrJ?qr$DaVJzPrc`8cbF@`T zmhhFZr$2@(vcSXkdte@yq>N_SePjz3BQp)%2Y3LwTUo&W-Csyk zZ}Gh!BtFo^g~AIKOL1nrVN#e=lFBYLOjkXMPruf}`Pm(X-a*q^rsKxd+ z-s8IRzMahAPw&X=Y(G1X1dlUO0=1E2STQscWLdP^fwa|Bj7GC`cHZPDw7Tku&bTu_xLpwup+$t=Az`V|V4!e@E!;sS$GCkBj?(0-QC14dN)oW1p*&8SkF4 zvr_>fcxOEkx4hyE&Jk-iRF+PgMs1v;%;8Wn2zU?-2tN1-hhgE%iuKQ;{pW{;l&4q1 z4nSg3pR)GcO-_05L;|__0pfy20I5R1<`n)M5-7;I-F{S%-r1YMKP`Ht<91=8ycmXcNZDe0+YPLS% z?ac81%JpjYY3VmW5RH*(ZiWoljC8%CAPZNL$!+E5y@Y*UBV{%?jy1s|tts(a#>3D0 zTE+xfu4uRy$n+BJQw%}!W^4M)A&meG4M=FP$t3J=G|xCSIhz*8(VJuFlrkRKAO~X^ zbG#z!zKFo`614N{8M-QEutHf^IY(0+-Ab6JTlh~~uNwIhbpgM21f5Hbk{^qeu=$J! zfI8uwfR-d846!hF97Kmu?IrO0P5>n8_TOzlRrtjk@DW;;kERCd4tOW3JCX~yK~J3kDqM=UNeV?gTyIq(r?Z|`RE9PlZVs*ZIs@q9{Q7%5PDGbqHs(C|iW7~L z*QRqvsbjI=GjkQMzg;P&-&s|H%~&I%u-!yrK7?S(01hbD(vSAfO zcnMYATQ;mdq&JDC5N@{?AR|%Lk_G!E(ZJjL)qyA72Ct_m3xc?0h2$KQkYSWMLxD{qtIp$}^nt2er2CQdCY%gu!m@ zhRj*Xk9+I1Kcs?2Bj}<1o{4bhg!;WWKwExUHVM7#%1Jxsu z19SEH8PCZnH`!M~u%_-J%`CAk)X3=rLHeM3u4K;M6DPvueEtnW7u}pl zoi51_RWcB7K`}&?J0JpqithO%`)auT`O~pAM}tx(yPLAA@L(ZvgE53C{}aXGS~SUg zQ2L>Y-3~eIjfE0%;G&(rY1e+9?@yg7W9qM4pv12QKjt$}_NcG!ZE6BoPza6*nPA}R zG~7?7%F~_x<;bz9ER32-og=QR{$ZYm|542o%(>o@7pj9)u@BJ>Tq<^Ph`@N_1Ftc}n=XwB2xOxbsZ7$UYge|nbF(z($Dd}ho>-YawRP5Di@hJ4F?Qg4O* zEnJyDco~%njxoF>d?8-U7OguyF7HMu+e7&Vm~o2$DG(Bp2V4>z*RG=eE<X5kxk?MoMA*~(vh!}?LUVwS#`A{6#(9Ths}NlJAg z>?}X=Dapl>kj77A9IDZTCdwX8uXy8wU&Di|^At$zGpDqGEzb+f1Q71NpC(ra+jz>K}87yLcFp9v@ecM1D8Ht&x(#-oyBtRWayXM}FH+BqUhF&tmh=bZS zVp2rae67)qf@&UUcu1tPzWZ7diu*$>Ii22Mk5^wuEEQ3N>V($uK)?C-N0;l_1;7$c z#zf%)bUz`*3z>S%M&#F)6`jlMjDh z$e-^0@k{%isXTM4u@9wjd`nw%jQPkASg;S2CkA_T?O0i}5GLgh*?7UJosddv4hp za*W`#SXxV&a53zEvC_ZM&~#7cuN*U#kh8qH8L8;%MVi11kRVToIImR=A zQHY>2*B=m-K5dnw4MjWoPB2X)b}Z0{;ek&FRqKjdSV#bcO^6hCtO*5{X};?=WX^sjxwU9h zU1*oB6$~Dl+h^sltYUF#wTuJG7B-5`qXZIuUaZtUi%*^hf%Uj?@t;hz#NpM@+5rW$ zc*c7+!~i;f?mxse|I(C#e61IbCGPCt@3!>2{HE(4fHeZ>GXgv_RFcX#) z4s|aW>fi`NVjeuI9PMM~adDo%Z}37ZT1?^NBdt-~(dUAUKBSVv^m~WJ3|RQUl2}bV z2TGRbc7hJwwW&h)gt+xebZQGF1jmI?%^M%_xj+Tz^-C1}S=B$_f5X|&7|cGsWsAPN z<%MR8-t57mKy2baaEZ#eZH}wU@m=2LBsnpN@Ajerj*~M)SHeTL=7H17_KfcqsW-^m zBGUHH-l*i^-Lw*jFd81B^FSCk-q0)XW+ z$x@v{UFv;TsMCyL66cQ9ZBnc*FN*nv^elaAf~wS|O)6FN`u)&R*6Q1xqQw9^K*YcA z2ZcwF^DsF>;bnX{qSnJ@=iwLzXo?oNU;TrPLphyx5Vw;<6G@yUo$xMGxHu5;syHEjfg}_Y%Hnpg$Lzc z#w02D(5Kd6CI)u1+_ak)`NOLBdw%JUT`&uPaw=1@*l;qaGEyz)o*4I)*{x7t8<@DF zjY8Z(jrPNm;!kcMx>7T{+I8#u@8KxLFfB2cX;kS|m`8?XaBjvX#WQE44ae|x) z5RJ$FExbJ81}%)UITSw0y*iBu72aKJAd_Ey`ppa6^&TSghTBl4tynlg*LPx!P(7z( zizAdsP#$0bCiESk4jWNUD@RNl4V8nBfc+1(=WcOKZJNSh1q35}W4ndAJiGcs7V6b7~N=W)FnOC^6 z&y4dEeFjY}7KlsoYwsAA0o|0Se4^7ocm@+w%b1F!KRo(Ag2R;Il2+C8?)$gP5$6JI z6v3IW9Ri656qIU5(jKf!Epq-)Pc28IkxdQ+^LUunt3+&lVoegpZNe?6P-}rDS``Bl zW!50LRXY#IWy_ac*uz4p1`ZGLT~zf=8NiyBWw^1s8p+yH5pgNhgQ!;N=(*S%pGAgH&=n(!3rKim4G#__KtJB~zEvOH`$pkf!%f=BMtqxe zy0U+#N?L1Y%^rT!9;&apfs;BV=hH%m^c;p8;h?3`dGGdBT38(LPfmh@O!9HW6a-k% z;_uOex;#WphzqxWw&_o|}j|>N&;uvLYj5^P0)gknRxwSoQz+PGu5TNgp z=##%S8bLHMW7Re7A0sj*92JPb!Y3lenFZr@Y;N>CamV$W{7(S|R2Cd)hwoDm>Q>_@ zSfy~bsg3m7*J%K9a1w%l?aZh6W})T2=u|?7IAd<1;H+))nqek-M5*QX4|$DKEaG z4{$9yV7|(zo+F<;N7vvNHQ+J-L}=eAalV;W5BCjwTU>iYT`2JzJQPU;IocuoA5Zs=8~G00m6f&Q3Ug zXwf(~Z0i-Yvg{8;q=9oE-mS3vRz0B&Qe|by=_q0x=6GCCN7{wUlz1$mw6|P2DdhA> zQ5euL9S2KnNnMId^9YXKel&oH!XB)%X9eQhI=ZM&GZ*yZ4w$XEVZpe;<8WxrSza-f z7LwrlHq34O)_*;L-1!B^Z*-MDh`Q2Guf)8t^K|t}yd`mrhUMY5gQd)=_a$(ck;-61 zZ(Q8tc;RBc*T?Hg_C%jP4d0$s9rCMNhBA2cavjwvk%8MXS<8_i6XG!SyJQxN(0d>2 zrkQr6t;kY&V7otf3ywuLOb;Df%G#53SUR_WE7LT)ahf!yn%H+3O{~8ac%T$7H@HOz z031o&td}-obj;SLC%0HGlvi@CAIk+{Uv(rvG7M?>y65MI_|N>`2d!*|N()j{cFG~6 z=WCTXMzVE8y5AML%dJQL9d*=)4y z!}A5ia)T#ux`{0yDu$e0mj~BkbnX=ZO0eXkYtKcuf@y;BS+49tl(BHd_$v{*6ZX?Bo zVtSqvT?1LY8(^ZJVnbSa&3DohFK6u!z9~DYb~jro6OJT>k9)cdYc(h9146T`5O+cW zLE)P_$j|-I;ksK57U4Yn#wy3stb1(vuCu8=hYD}en|#O*T;g~#0Ie1kxRbKFS^cvm ziu3v(ALpI~+nKy4NowMm8U%>{WcGyfw(EC`JFnFd>`8H_lGFxQk%fA4AD>M>aR>pA z5T=^;0#EGsrAj0@Mna}(qGBZh$cpKSIU_$Kb-w_)NIU~W+sH?k?WsP~dKHC}f5%fR zG;vZi?w?sLb-4{2F|CRy$6voo_%qq49RYa)ZdMAyvt|Ke0wC^H<$CTBlBylRAQflw zS|6fWUuI0{^Ti7I0?CZhjKs#9Q(EA|K~e~f%b_`lAQuJ$cI)+GSg&l15%)$&ZCsT2 z8jlX2f48)ft~hx5KrI!=$4F4kwD!iL9rxMw9?9yiEU*h#c2kD6U`aM66Zbx;Jgpve z&4F(Dvsa@y;x&}FAo)sdGmYyw8(lst{l7PR}u&Oxru$Ctg?gyj0iiU32R3eYQj7gm_@3Y%&{8!qcZO zyH@NUCLkazsBiBt5sJ$hSzog!6NmZxvPj&( zw^;k=eGpa}2l^oOlFjS%`Mh|Wa)2d)(x3R7(H>TgATy~?w$)T2@uZET*j#Vq9t$x` zgS%_7&OqF!t-o?+_cBFv4(-KGI9a(uM30lLl69;?mZn3O^gZ^jLpo`fgiZtVa45>B zEjo-dF_>~!T8#mq|Z#YeCLNQ)4)BF_}7-{(W&d6L1B_8IN& z3*c9FCDPS{=YfS%O7_kWjNuFGkG9j9V~!ljNwm%mkETOGVtRpiMxib%mM?ie;p&=~jWhS$R2(Dhq{sAxLJgO` zH1_fARe|n&7GL;VXt1EXl$@3J62%*B9Hj(+$TN) z78$On291xtz)5sDMNf}1!ohcHK*-xvfrN0`OqzK~7oP%Q>}`$L_f6&u{kbzO)x8wL znP@&^Lbv$6h7vFUqOly`|Yii=O4m5XY!+ z`k$9rKMJCdM>;|xR4@@HoO$9?SKNCq?IIx-A|v<|i6utYxWOYKJgYZszKY^kZA2t$W;WjRCiO!1BN< zfMjU}Bv4AcT-LrRbSba;aw~}zFL7h%&rp~o4*yX;Ul+`>;Xp3Uw5Fv>R$KnDn<;kOH@PV;LO2R%}uqk;&;U1vpf^zYY*e`@ns`Sj&~So z5uCpFIG!6YDuJ2&(FO~A%Z{|?II?gqQcukvbMMzXPB`PlmCx7FK-6>U4i=Q_Nl!Fn z6xQwG7#)7N*vy@kL+?!ddi&w3+oJ*lYkm1?c;MC#0`3-7)K4DN;G6Zhg?WH-T`no*@0f#cZ}UDd)-IjTR$lRUYcMg|paagY?vN25uOAP*D^jP1s^Hs= z>(TY8$G^gpLbJ_WFH~-Vmklz%zMGqaI?GDLZIqRr&kXU72x=v=D)ICoW&mC5He!`6 zsn7_K(1FZqinZlkvtki~P`=xFn=-hw0yH?Lno!cGbbKZ`U1DtUf(dFsQNk;ulWa#Z z$3?GKBbUK_&Gov{N~*(b0lYQs&@?fa^hDr+Bpkq64#sBa;L#RIsMVZwUJJL$z}x`T z4jk`U-IF6GVc=zIugfJIGBN3EDM$$VZ$OQ9K#%xzK*FqYDn)}4wR$5a`*s8({!Q&3@o-HFulX$= zwUw~Rqan*ai-*>$1I zYiZhq0U&Q;qE`|2tWloFk_md|IeSU3`u~7lDF%OyeIdswI{(pY!S~#Q)eryklHh+ICge--}_YMBe_%r!T%D2fU}|o^7Lwj07Yn0)9=G zwojX)ThO1-5rFbydJbK%>n^YmM1IrIHoPKVT?Qh*^iqunLeI5~AB^rS#18H=>`DX_ zcy$=NO9VCO`o%x>Vpbz`+Xtlyx|=vplkAakyYJ+fC)?lt`U&w|gxD z-s|WUSjLx?FP=goIyPMLmuKA0b^9=9YxlJDSx$hDDA;WTw`PRdBu)SBc!KQE8+xL5 zD;sxR(ETRQ!!fsSROuU*rbgHuM?->2Of4Tr`z8ej5kn9AU$;JyG13N94WPNZ`Z zzCq}Sr3m|PHBvapOfFB4mQ-uAz7ZU9m40{)Gwiz%tYu97kUbgE@&t3~*ajyXW0PVv8AMJr87T|6_+%zN1ERfc8p3C?=SC}|6XP+#P|y8L-a+pUF;)cgVZ@7hEfsFP*V zuxs_8*kS=z?2T`rgiOnQTK&JfxW@scV%fzuPSh5c;(J#hRvF`*bkGIK_I#1aWC*zz zjKyaiIN7G1{-7aMr?)3fDfM6yG?-eSRl;=whH>f0mp%IeRwu4!ks8f;(?G>2s8KUv z#iP7tnE^dNJ8{VPGqn{#;fcJUpaeRHY;wjhtX3;C8Lgr14p=N&wN~|}n)jc2g)nZ7 zOrY+;%rq`Z+nX4Ii7ugEwlj(!>|B;SKp^-1Dwt6i^ktvLHQ8$dIyg2IPuJ-2@Iah7 zNiPG-p;E5fnoMA@L`tATA$--4V>4*TwC!$(mhpEdOnqKvL*_z@f5?BPUvk?*)T^Dw zt-~UjORaoq=sO&!4cz={o%+T~*;&6N&UU!8O-!9(bIAa)p#_8MbNe34{KsigQIHDA zx<5l){qyW`q)n=6oM(h3SX<5rO#RZTxVt_e+%O1oJ7AZeD58>IUz;bI`~(AyrhAOn z^z=P(>5uAmKj8TJ54Em;D>&c6Jg*ynrqpq54!j9pk;_*W4*Ps$sv2^=;PFd^4nz(; zI_mT?;Tz!tHtJY#4i6B+3K(C(eD^#iFlPqwc+Z~kRrCAI zl^Wi(LP*Pu$x^nn@AtJ8koE9}od%tb6C!rBWX8ZJBJPUNBLAtJez3-A>OL5%_h<{o zUvpMw6<>lSJ8Dtm+wlobo2+lDP5w6iYHlDq`8I2^kb~pzh3H0k&BCD~sXfQm@<#c& zs%4GFKr&WekW1qMondhj+h%`RKdMl&Cp`8QRXJiqHmrt2Tw3c5i_U&l)yB}|AExz` z30k0VI%U!I1RaEPa6%P4ew@l$a?$<3Tm8j!)#TytTm~ywQm@Acj!5%XztA!{=s`m% zm(fou-Tf3`-Z3n9|1}HR-W2)_}gAt zq&DfHhXDag*gfVC(2BX#KeXQ;`g}eyO<~NzJjf?Nm8Ea1!;(f@>rJ8NnJ97aEWv@Z zN34&hZ7EYv{bkOGQfmRWbRE0;lrQN#v+u2-TK9dY41+;I?J_sWN{w}!ZrF?aM2*6wHKMG;qSgZfzQ+nn|fdXAhybS z5E+0)9*~H7**K@gKtSa88(%5*ge0qM!ep@n^oL>P3}CLS73JRY3kU6m6LoC^=}m>_s~nYurD~iM6AIi3 zFgDVALtKw1Q&@3O_XQPo52^AaOSA;{NeKMS3Lbn}!XjQZ7Ays@W72-Us|fw8QUNc* z`j%dKrB#zYDMwVF@XtP5TxRb6eVR_XwSxqYXWZ5YR4f>IRsfmq>l;gsm0!nO$I&C@ z6Su_-okAyTh(mF=uQJT+Pwrj##QMnwkBtZ@ehH}r^oV)q+zgf4C5Vie`8072Q!xEq zWkndi6Y>vuAlG+%n~$6;gr5dULqKQ04M)uRNyGWc1EHiUD%Rv5zkUtne@Ni)y?q+; zQp!`hwklT_G5dJz2ZZtz$2SnYlEhFPxEf7BB>}!JEb%ZF$!f&R$c(Bg^EVqgu*jBk z>!mk3E=aB~!c6i_JW?{I^hO{$; zcnM2hY~qmeh*}3#s@le0)Kc-PTsf10!V;-C(B`fz<3Ji7_S?EO7RTcF^%UE|1MgJ^ z+)c9zdN`*TIAmAce^tLu{7pJe&^?aJ)Nt!A+)OMO+$DB4yu>IfX2+vgW!XM;XT%u_ zW>Xit`x^{iWa580RAdmOg|pY`?_b*f86T*3e)VnF;jcrx z&vJ}<3frJ5MWMLu=L>~H;qJQ4%D9u_gBE-F4;#`p(($T(6hyE*H{q=`c;KY#qB{lY z7tk5juQ#fbiN&7qW8gX>rPPqdTN$Kvi;^!A39n}UafB8R__g_TsN_O6Gk1(iHsGt) z!G-s?U882BI*;DF5)AdRE%RYOCs&IdDEJNZB?9tjd1ZAYdqOo>vJw8WebwJ#T(gSl zHCf$653peNGQTf+G*W-F;M4zCmxchXt$$- z7OBr5D-~wuxSols?1_gkdq?BU_p5-<((2T81guOl5f1sCGDC?o9dG*#qqo6+i#+RXB&E|5cRebhxQ`b(EE$e(fZ0v+Tsld)Dkp;Y)QKrj{bCI{p+pJr=0wJ z?aO;1v$YFdp5kq@3^4UsI!VmD`KKtGaR ziJLtf-RuHQ+*TGE@gZJgq)eBz(0YE%Y&b?Wkpy2^&x0ti&x982Pas#W4rG+=O3f!6 zGTozi|L;jddc`t%;481{>%#C#tHV>j+m)Hj)W^o8OQJA# zS)1D$^mSwm4#5=N+v(B-{ysz(4%uZfX#@bl5SU9L4;36u6{XsEQd1hvu{ZLI;8|Ip z5F3Q%oJMVeY$Bi14b{#8+;OAmLBj5qJJ(UQwe5xj9sWzPZs;1N3q6FSshQFU$MKlF z!mnS&a&SodkwuZUai}V6^#$bTVuEtXH#O+xM;tB~G;T^7rx;X>C(<#}Xau^vG$@T; zqJ>Ha$tT9)?@rTM3PpJ!m&NBGpmT14aY;Cp34#yyXDDM-B?8KdegNcFRn8%2V9ObQ z|Bf-(6XzPF-TAk|_?~m$z?bEwSD>o1{jDuh;5-9MCK0*$P!lRDw_Sby{02~wXySs{ zk~-^DT&rLskwU5da}PUkknlFbA^yQ5+YKLW7Tn4<<0$wWBEACE2AAN~Bc={+S&BzlpA?gxCFb@%`YSZ*yczwg^hdT#8VVEw&wPubcGl#CDNT zv;ys+yj`(ih97kxYqL%byAc#DZkrIyIAO*B!-3)iOO}fr(q;~XMz`7nx8eLAy6|w7 zi@@3y_1Ykl!vkA5D?6-=NKJr5V{mL=jAWe*qZw%Ee*fO@Q880x!cl)pGk-wI-`Q8b9Dr7?xr$JKImbQM)hH#G1`NAA_8f|8T(GUnx!p(Rq;8hmZXF@E-nBL*F}~@Mc#B5EkNVw zoybo@S>-oqzb^>V%+vOLC8S8G9`u=_xj0mAPF`{!#V*XH_iSHae*J2{o@Bh5y&-0> z&0q|ie;CgsbuzXofCKUy+;HfF&+LwJ8@GwO%I@G+(ZF5$6LehF2TAvF`3cMF&kRANwW*WYG?pU`4%OA$(|L(z=`j zH3k6k2nsm4ax~GocH{MDpWunj2N~;^L9;b`F)Lc}N`vA4eLPbTDYz;VtBuIZ6y~M5 zE%xR&owAxr_v6QkWagzMX1SI@P;l@ukwsP9ml@=Xe0>h#YV>LQ}xv~?xWs1jU$5reD3-X79(^7e*o|(TVwKb{=uP{? zZgO>|5q!>^rhl*DKA91;V~{B+7uR;-Z<}Rk*@RTh{k4B35KnC5z&5o2w?&Z?`OV!& zBxC7YB8aaq0j7eIxL@A8M{XgzQmxy*ESwKo-$mM-X!{9Agfy;f!vO**CL}rx&I5qqS2pBN>G{r(*w8&#O4+ZshXK2s`Zp*nQGA*pxZghA-D9x8>3Wt zwQs)8Mp07<$P_g-*3KtIYU(apvx1g6VV~?5ek(HBZdEg?NWxM{(NR}UPH@CS`2>9s zIsdXx!EQ=Sc@g+{(jEA>()VusIBtR+0QCivN}WEEW)GrdRS}eT+-{aA@#CC;66$*S z{)L;e{<60Ws>AAw@=vZhEDLjNdEU33Qz82=7Z-B~$sX%6Da$fDI8@&%&lFCehu8CoL(Q`}i049<(`iPRkEWlC$vZO5Q*O(%(cAV%T z)e`6bcQA(#TJtFjm8pJN;h*sfGJrP?zc>mrt+0I|IBaUl%FHf8`9jRJlp)WKWo^#5#=#sW5ij7o0A^k1|=qp!BQ-9<+egtI>t{HFA)2ssf>mpG^)m$7Wz%DHQvi1{Ja+G;-Xz{XWg1YnUNVe!uo;%KIKyOB|>DfFF>-x14ZK*W=6b z>!gKi?2rTg3vu(n?ao!C1i4U10n5AJTNNe-Xmzuz|8PWeJu8dzg#8T*y0tVqTE%Ig50T0y34ocjp>B;twK%`3+z}VMB~y zSjujNG=cBJvlPTyMB^koC)qIwxhc5# zsf2T|E8ZA>bVKo%^`87S1KzgLNXWaqjc<~5)WsTACM#yhbnlgJQQE#YdId)(?FW-C zqq?P~k?8~Yv(Kal|NPSKw;f~Va9njhu^tMpRY!LgHr|Fb^T&Nul+dkq00D78QOop%qksZiq_kqyE>rZ!s+=ROTgYV@U*G zoGaSQDRMa#1 zW={rZ)@I@2%(9!#Fg5;)k;VuC0GlE(EBOq)ze&V6NJuAPGMsV~1U?Id5F!~`Ev=Bh~8F6w9B z7=158eZ??gIgD@X3~|UiM{tmN4n5jdw=Sv}#OxW8>4k4beWvA$e++U<(=<(iY{14P zp{)DG=ge7$Grh7#6sBnPA{PgE_hs3UP=5e&LNNnUNIpXm{-yXxla`WtK_+cvJAf)r zG}cVDY@u?5tKZnefbE@)n#AvMT+pP7U91zRNy*o9l#z6tV@XYC?S9xLipE}~uyeH$ zosBb*wsBaW(4^q41mmzVB8zcK@~|mma+=1iX zLiQX0v{HE4V6V8P)68YPtg;1Uy;i-o*|+uF&Huyw)4;`T^B+7`J*32CXmYd+=)imd zzc;m_ORA{fb?)7~cjT-pec^6x%K4&cd{PkNR9feudD74hYQh!r8VL^;L{V0n=f~i^ zav~3Zl+Yf&Aqq?WrG_`gRnLpGq+_n=G0GEtLOGZrPzC8PSpe}TrJH?Py|Bkg^8VtM z%)kIPAU!dU-lmh0i|fE*G;FmE8GilWpcaoW4VRpBl3vF2qQ<&hZy)|1UY67YSj7w0 z`aP7hqg$2GZ%T(KR2QF=y`}KhTmDk*m+EFAF+GKPHK?hA0CJJ~Yx4Y!Efss`BYPom zUb&~Z$sbAQ2UU9wt6db~-7wJe*qR5c83&IQVAXOb<^8^1`LRTL-0g>T@u+0Nm1_6) z;$(W*{`L4I>YzE!XuaJKyBzDpTDL4bd2+wQ)cLfI$|oY}4$Rl(lxx&8!rHilGt8fl z1Zr&)%eRXwI`w~Vz#O;HE3{OmMud2^fkEA|9G1YM^H?dm_ucJV^C^aHvX4CH2I*M1 zDA`cW37G>8Axx(V?I(nLeug3Etu>TkU3_Q;TykBGI=bsW8@33=534KVe~|y8@hI5! zvmM`wq!V^Q9X6BEK(g{u^g;}~lB%@YNcfY500<%V7_+@?oTiX znQ5j$Tq78!M}l7QN2LZ~1mn*vw~-WBr=!{={+N!3XosV(ClGFB7oF%XLH=Y|xJaU> z8|Go;MMA5q(-|pT1y0b8L1ur{tCzj7N!{`loEk0hZVG|;Rc$qH#hKp}mPKQQm(`!D z_p2KQk(QAZbn($Y4m;(o`I<#~KbGXhQ5xZQL_2raciGBSB_Pn)L z>DqD$Rt@AevR@VV;;UtsuvA@VQg_Hwk7A6IhCtGL6uMD_y8t)~JUF`6CxuCpQx5k` z7O`TZ_c7}Y6Mowb4LR|R6q-b1t6QTqH+a1n2Ws|o{OK}@S(AQIcw_su#I`xj!R4R8 zvr-a~M@;8K%i;liqu+up+w5n@f$t(x0h(0B@>r}9)_Pf#s)f)FDkNp@FTI+r;t1Oj zdS_D{_ivMQFmJErww$9^l7uERWRGDZ)o1%xJg50wg5%h>hF9H*qw{vq0KXHYLqsr5 zG42{l-4i1M!LJ-mF47@3+wNMYFIU;%L1wxI}qxJmir53A! zit*+6(Me}P7zg<6H6YoGv=HOsr`KH|!5jc*OX9w*o_ZIg$)@dDc-$x;2MEcfa+?3A z8eFwS)e3|eAku5!lUpu={HFlSuso+!r!9!l4NlBd$HS})q^j(e4U(82N_vkHb0}Ht zeR81{m8`fm)#R;Ms9M;=md+~=%u<(_KRfKo zR;lJ3{Q!{_VX`xaGIU+9XHJ|ZOV>JJHRm|EVR8QF`e^7MegM&^_hX`BTNE{JE#>MdGuw=_ZDu)#jszGCqRF$GLOI(Q zPSPMf9h(%KwZeuq{rog!^K{MVAJVp1vn0Dt-mjn)>r76!zAAlL z6nu~q?$ecC^SItfMS^P`((Hy#O8U3fOQ(D!HX*xjB~oFh=!8NIMX&B6g@v|iF& zxTkD}UN&+XDPRF2(9uuxSM6|bHnPyznmVp7mInEO8+$~q%f(8u&*EDGI}e`ww*W)YZC zU-1fj^%<|B zI=%ni6ky*qMqj3x`974a8rhz%p#&KjRrIRKT6|+YPP#O~&xEz&KyRq=iwF`#LOl{< z@b=1b3H?raw{a;X8QkOg9%KK~W#2iM-KwEiL$xB-QIx=~B?6&ZRf2ip?%DasNXl-A^H}wmN z29mS-*TxYpzvLTT`&UsNF$9d<{I7SI~VBL9!YMY-y7lyn*!nc zCBFs&H(#(;U{iD-PlfMW+R`M5rDXz*lFMz_EnpWZtDUH4$ebVVen!3gv6e9w|goixKJ zBJKCCEcQj{QV4HC670p(@{VOSMczU|?OZj>3cdqJ{jtplG~~>08z2kI64(R^uF`C+sb1dy|8qB)ur0H_ZVI#?bIxD-Z`ym4!jV&NAT~XY?0pV3u!k zLU5N7!JIS|BWN}fE1#b@!^8^2r_2kg@i2HZMH^#uppNBus;!seyGdT(1Zq|MzS5B1 z#}MVeT-P1&+dy{4o9%x|KF3);$Jht1EEO5z%w7B^XfsmS^EeliUQgeBaE045stY|~ z@lDL+zC=!_~Kd)&?4Wj4oT$4HggI|ecW%f`{yRp=Ty<>~d0@^?d4hUt4^ zP{U|O#?jQ2?uC0o1Z>qXIUm^lMsIPUW*f;8A{f^ohlr&_GiV3xG8c-~!-G-E1PuO3qe6v9?jeoSv7m~nwW0+S!{*&$j~%$a zJ3HgvJ3MjdpIlyWz8wv&?ti&yhnLQKa^X_Ne7$4I^){~9^$#0&dQH;Gs*#Q3Vb@h6|^#UXFfIGyB z6nJse0xwTY48G?K^27U5sep?Z;OE6fd9fBRm1nb52#+p7hHhAg}y5b)nVypato9iE3s;8BiVDsbdY9 zWw(1Uh&H9eBu_-w_T|z3(^;BUY8sb@n%VIyWbCV9EtQlk!b;6>_(EY{hkp65$FDTc z?S%N{-6in#O)g$5egs1$4Ng71`%6lbH)AGfX*fqj{Lu#)LHhAj z8-JpJPMdi6^Yr)9@E$A8F=jS)!P(sO2a79}ciRc)-F7&<)f=0t&FSy#3dE8ne;;5U3~R%0><0T4Nx%mTYa?tw<#v6h#DrkksX6$Q2{2pGyynypiVBp=Fbrae4sIxnir>NHb43_5;g^BU= z$Sg*zND9+xALpCy^7x&miW>itMciD#o!8b%HgowECAcvdq6BTlzr z4pfwtEAe~0YQHBpej6D3_P&+6+l ziNAH=H`aEN?YRZWZ@(ANGs3hNHOJ93-zngLmg${F!{7$Da&_0zd^DKVSLpg*!L^3d6U87 zF}z6?aRC5=Xwb~qD9Z#x(Fs}LVi)U5yQIHn!Wp>uzvo^n1I+?J8@KIY7%6%p>2e%o z*}0_!o^Vbllu*A5a-Uw8o7>!5oOo)kzU{2VbZp>YW{;ZJ{O*RkV~AKdDrVC@(P>PU zc_kF4?TojJ{e+UM4OgUmd(O>WOUwrn!>a#A_N+-7+nT)L25S=CH|lNy^{8 z`ge(}djr5WzN#@Q(o0z41~n^h6jVq67g8513`&pz|1ez$XF|bcf_qnB^1(zr1w(gf^}%ew&<#)!NdsK zZr?A%mZ4^Ga2KOY@4{K~iZ+J0LjYiie4+To2-$rgL^V&2qss+S!J@qx*tL<3lmPq{ z)Nw$){4(G<02KCQhG+SsB5;CeH)ZHYjbA{CF41E9gR#ZZRQi#d`;$p8!~wy2tdpH# zkbO8Up)(|-6&~SktOpr-@xDCE2OfumgRNnhQ;4HT%nQUb&8jBh&70CUjo=^~7xz3Q5c~Nb zGc!6`M@lL8h(>8oJ!dluV!d$Bol*BNH6-%R893|PkJnUxe}s@Q3T&#S&f44_&NyM$ zDTCRm#$0dY4VIiQi>D@WzKE873Tqcx=0U?$!dE9e9k9z-;-tpBnAYla0%`2F;yhfZ9h z1YiE3#E5j>saY-5i^~g?60ioZ!-)o{`(J+gan6e^2$TnLZ_kinS#4vXZNl zyE3Y0`Tr$O`}#;D5w~{f9KkBAjciXY z=#gof@>>rW64m`%)!%3?#hVfG;#ZLhmLox)wYEV% zGKa+>qDq@78cdKGe0Eg)g3t*`oXZ-pi(O~Us6%-@$9K~}b9+% zgq?5l-UNrls;{(DWU+^~`ds>x>Y; zyFyD@&{9c+I~cPsDYAnH+rL<{1ydzL%pbRwnjm_1u~?=R3rM>OF$il(7_b)nM0Qxa zi}{`@FTIoti~^S4v4x5f)g!8E%@Idba*bt*T|F+8;SN$#>wPrs$sp;2R^bU=s|2>0 zpOorIOQ$&T_XhroRyic|TUJiWJiIoUZLL1XHA4~%Sn6l-D-IgLuF9Y^Jy*EeT-2LmM$KiD6NvP^mrT8v zf$xxtye<2Y^pBETX9;P9Mk4TE&Ldh3VQA=Lo|C1AOcL0h0$=JM zCNNN0CDqgIL6Xn&D$eQE57-@Eb>o?!Gx@;F1H`-hm=q9@mjFBE`VtJK1h$gXG&`)s z`b6yE3YwNuCxf2eKn|MSQX*k>tv2{jc`*c@PrMG~!=sjq7mLKaRx`uc|5>0ae zVP4(!YtA$Hq<&rDQ|Sb7zsZ-teLitUvib1a^fJPW&VM#oy2`)|E)d=@XJ3?upb0&d z(Vc63i@=8%hKbMABF-HtARw@0n3MjG{gL0OTyEwh+fj5lY|@_slunO>W;Rr;Di)D5 zr!4Gr!FI7n-B~RY?CQ+3^55*kLU_9Q8j^JwM~of_ba7!tu4pB=4~JpvWb3mb-i5V1 z2`^Xpy~{<%%NRA{dDQAJQ zP;paNgnoeAh6MhtE*yMUR9|c%7^*Vu=D!8Rwla5?o5QnGCiBzkU5#+k5v%XVq>UAE zBFRv;DO5=O9Lu7|w^nG3;U^U;t+X z()7t?*O!WoYuJtWu>mgh0(qGH@emDB=GL{JrF|@NP9=hc<%U&WgEf>bx-`(^BcCNU zO1I%qSA_^hw4wQTfLOmi50%oxYqrr*oJJU*X88Lw-HtvQO~`5pH&GRVyR+jkou-*n z-CLpJD)S4_1d4dCk6BM|_BxvvSX0|Wsqd?Jsw3d!Cemur;lmcX%|id{7L?9HdBVeP zGliMq)7192PdWGsWtJy+dt_3b7LH`|;JHGgSwzeq8tNlZ?tIS+T-^X3@AB%1HRi|{ ziBrJYGaHFJ-N!D>Vr{<}jvp&AEL@0%rV&TpPxyh`6slQ<1*o-=E>z78$`EQ_Ft6_{ zGg!6}Avux^Q6ROiTp7S({+#lE-f^bG4l`wgrCa}bN)Qs)siC1}JLl01$R}G0{uf3? zaV3mF6R!&vEJ~iNeJ#+X;Hqw-_)*Vg1zJof2Wnh8hC~q(lSA*+v>fB!xKKdx z=GtvVurqdo1H*Q3(CaTN`>o~Ck!ROKI^70~!4-N2U_97)|HgWavn9>uk;TDK^}0tA zqs;7t8iEAi_xJh>WCckn(+r`8Ahi|bI|YXZ+pON_p1v3URd4QYAyL=SPVSMS5i|x9 zb=F-nu+I8nj3?RF7RI%x12W_OEWuO&ydvd4M_BOeC}}i_Kx9KmTk%NltSuG`o3-q+ z$KFS!3Q>tJoRiuaEYh+OO#oKP+f+OfbMMjT*Ld0n64v#_C3fXH!+QW{`?H#Y~*4B)bQ&= zrL@X#2#ZXLNoYS&v6`18<#(kUNC5DRVg>a1`K*3=1biE+BPF{r+ukVU)$Qet`1V4- zJ=}*zoO4}pDRTFHT}0UJY5#*IeF5BrEUpRA0ku^YneEj2f!y4GC4mI+g3S;=^MhV- zAj5%Pp+*WxR@E1#ei(P?D8$2IV)7An`IOEg!vNGL8puMNy}4~^44$RGPox{y|&UJBSK&?9tuUUi2}iCcX67LZ7=jC*2Doinbio2@yP_oNrmxn8$Mt zVIIJ)D*9kU^Z?ncfZ*?qU{9u|@eR^OdjHe_*u29?`hB?5$IIZ<>DE2%_0}r8dt{kr zc0Ispjax$b$)%)DLbr=<90ayUgY8+G3Wm795nB30;i&~u2$Mu_5fO%o4SQK}F}_Ve zU4EgWh$V?*c~=FuBluJbU~JmPR97#*XEVIn1Kv?{)w#XeaFX_IDX?Y_d-#j)xS~ie zH@z!bqQ(7DTJo3$sb)L5?a9gl`saJmxHdr`A)GUGdDFAkN`AYfcfB)K;a&m=S8&DT z1|7R(w8d+q{O%=d+)%-_6cU%d`Rk)s!4&8pnHfH!=fD4iJ2?aK7w-u%k18Fc)K4%x z*D(ZQyvE>Fsti(U`KNd;=1Yk-m5^h>ha)!sA)caJytiil<5u`7N`irQFhOOUU+23V z>nc0?)W0;B>8WmqCU*afzom;IUR3-4hs}QTNOWq2ca%X_j0hp?FHd}yR=o4bRdyca zhrLgD_I=V#IHvwDE9olbQm08inoRiQTgQ`V7=f~jEqsw^ZW!ITb}{Xrpp0|@1%j1Z zEdp(oP@AfL-?rEF;gv{1==|wc?<^W*qJPv#MfO{$qpM8>2 z+Jv(Zw{XOe0MFd|$ffi6fXrae(cgX)xT@H!e1}^Lf#z-XiHeQDMSare*P)=OeTeSI zada3eRWpcB{g-Y3>%mK}?gOKwBE@9HbmtAGRPLe?zDDf{BWK%(`U%;ZMW5@O7k*q& zktHXM^)i#k9b`HVI9{BvMWN4$Vd8VSK5R?WRzZhsMK?%1JmL`SA=aLykv#|?8$!Sp zfEB(_Yzo_|S$3u!G4mM|3L+44#)fZ7ADa>ROP~*(6`+qQQN+RNhRDh3jA*(Bsoj-o ziuTtq;UWBl+NDqQ^a0Z>jLGkM#>kKOq7`UB)9rr%$-a6>)z$cr=uOTuG^mkcLn)tj z@oYaJwJ!hY;qlsEm15dG`pYFFbSI8=m-)kEFQO4ob!QGr{8R)Ta{UX(h!LX}y|Mp# zTGH+|k=%$z_tYyu&T$k$^|$xyU290Qao|C6V9n#lg%jC-nQ`s;?RtIWjps>toz!H= zl`lo{#omNH4+$QC@c>xl34O=wuy)wnuHU9jCA`v`G|$^IrqNkH;7FkXsC{oflM<}` z+~5!ytSL=<2v`+x+aphCW{zB!PX$vkbk8S!{C5i3%vpjX6F>j7 z*3npKodAJLfi=Co6s1U~;o@o8PC+GnSc+$0TV%8TD1 zgj;|tONbeA=-#tgPux@|SKsBc@=Y%NUxp_@8vgs!h*Dk?40g^L>i*J@YJ{8jL^aP4 z4A<@=y=@p)YNx4)yDT^-0DLSZ`1QF-fD7`9Ot{Wau3}_}kHPA9v27)+21`+7PHMXL zbAZDIj{wkqtTzYAt&-hBiH8@pD7_8dor_}S1@Usv)KPihFI&5n(>3YXV)*xlf^j^h zzC4)iMOUU0uCd`s(`kp1PwE25m)37VNGRYk}0V%4bY1^+-+hY zc-La{Fom8DPG}~2=#cF-LKZ-Z=e!d{~wk7V_-I$|89TG)WFnvr3Sh=+d&91jtv_a}5K=T!)C=Z4E z`UAxox;F>nE!=spck&WGx{$obW$i*|Fee>pW|(l-Tkl60M**=CEdomiXy?()ttayN z^{NWxKus6E;Vj@VgyshpO4Jh+6|v~39p^r@X%1uqlMoy6%4mwxO@gaiu$}9>D)%?T zuGvY!Y~Y;nV=-nP`fHL_@*cN z?G@8jg;-|`S8Ii>h#Lu}${>}>roUv`c*lOj7c_=&bYK+oV)^O*UpQSL8R04dz;QWX z+ao=tyzWbqf60T(}HpbX$LJp2C@L80;CCqUHlRa=`1+Rp1li(2~t=`QkypHFf`48R0Q)I8)@I( zrx$@%#F>k6hbDs^tJ}hJmUp6BS`>5mjl?R;eCuceDiwa7=#)YaXs|!zB0g z{r4Fk7x4-KOj`jE#?(|Pxbw{T0>X;1prw$de$7zNu4`e%Z}OV<8rAn3#TWI!!RPomVG5+5)%KZks<#_nq(tDn|M<&KC{qtD%(oS2gDYYLO6p5{Mf3Y9 z&O5ewGx!@WENwRpEr` zMd6>%RL9q=s|GJ&l2(tiddt)P^g}sNfwkenZ#JH|wqVDyGlCogVS)*wFx8Y$)C~HU zPix&eg!i%Kg@P>97!6wrAUHQs( zg7V`nrCaN~FFZ;D`VJ^$A~hR;8-Yc`cCPrn4UWETRLOcWvr$=%I8Xx|0*q+V`DYb! z`&NQ&QSpriz?shNm!D06bnqwhISWr56b9A%NAHR|4c>r_Ydbj)qp(wrIe97LOsY7Eir%vGx9-uA&$6of z@Q!>5HC*YPxDz!y7DZTZ#SLkT$q{_^|FP=ge$u82zqIq_rubN}XBvbx&u3ZJt16;^ zhy1YX`C2#2z&Get0aGTdytakyuviq-R-VOcz3>iXk8#Gs4RA@{FeCFs|EjGYY?NKV zIg1H0Nb>CgZ^6XakRDd-3q~8LTs4H6zifO>jk_GOsJ_NZJvgFPW|sKEF*fjux)7#r z6MGb!y=Sn7dC&D$HAhR@jft{ht{g_tAe4|_nQztqc^d_xPUL3t@mdum5*9CR)E(|S z$x;*8c$1KGpJ4h3$+IhZ(Hgt-~BZhIg*PS0QyGcpj$6L``#e*sY?~U z;ZE{y*~%0fO203*wOj6C6O+zLrQTeTWGAzaPXr=c-O&nO^MFsiVH81U;EY6h8&R|W z$sv(To^)PChRDa@!&GY}LC}6b{8?ge2`<01|`1i3YX!g6v+<4?A(9eRi@vx{}Ir7XTp4{fEdPk`EBtu@Vu7g zmqIw{9fPx0*0%74LPtPNyaJ^OdtiIg)t!zf3L@eV05n{=FaAN(=^R=jeCSosxT<$;Fv%Cr)#31^t(=I^ zI(jqM;)f$=3N8PXqIzvWzoqJrfZ#Qds@9grE}xozDsws9k*{p9{)^nQRhHBQ17M1f zYd=S9qy1=VE4kWj)k^i(_pHlh3BkRK5D`O8fgd}mCoaOHK;0olk7=&m5nWm z#syASD_9L@mO{J)FncysX)aRDXfDDg3C_VD1SOxC?h_tRSh>!ZDEtZ(L7=!Yq7NIc z+0jksgNBFH1E#a{=1fxRyvn3k*Bb9$It#S2|=O=!E-sZ-qOnSfyz<5INn+T4zO$RdUiqTPNnFl}G zb-?a5bN;Z2LCCMROdY(iTp#y7NDXG{I_fygXhynDg*;mn%?j}BBN4M7;)_@DX9Ha{ zgNR1ik-ovrVO2xBEI4xaEvwhP)L1e<8CP(o%9(59Wg)ZTA0&8~)evBdcI98C+Zn5- z6xFr@hv6?q7!m~D^TgF#UDd?ow?6Jkbi(E5t@Mn?(@hxGpfo@O3PBm5 zCDhim_z3*A?Tc*e6g;a4<*U!`5LZQMsnAIVY4-uZ8=Ca)r%mRO?y*Q_j$4t7#mESk z;^FwWijCb0Foc97P_!T!tr zhxJ}2=CExC8Y2#F|6&PfhmYM4yB0M7!KX0n4faLGI2;ReB*oX7cc6@$5y`}vNxwpF zXGVi{W5I+U77Dl}mTJt5*E_I^F=s#>ieq(Ya*;{t6E(*jw>s(4&r(;D883Nhq(_3H zx^Nru`>vh6!T|Bj3?KmjKuj_JzsRXks66H|(hk8j$~NW|n%(ftCtqf@lVQ~V)vYsI z_fb~qr&KX*w@1A-QINp2ZQOw%9L&%l> zN?uHHgC-mtXvVTT`ZA?@b>xV;?kTg-*%wd;#>_w!h{~h20*cgTn~PZZZ=WFkjrIhM zBa0WywX-0Uxs+KS4x_J-he?Rb-MgdgUdVXpXi-tFlUUK{bbrc%T5Mr{DjrjQtKV{Dy_1r;Px^6`77GT=*Fm&3$av`&lA`_0xFM2~fGunlfp0hSoV{)WBEcDqDzCx?>&xPd@@ty=4t`V)bnF`oS zu@%;k^%!T8|5Os0=kSTmx&DSAqD5(*8{>%ZcQD7xg%U;+$xFuxQ8cGs5-`<#Qg5reO-a^7oOUk;3%j^2l3#bwGVcF#!Yw zG6Uxe^d}E)uvQ^HhM?rqa&`;9h?joDiy*-)Q_a?TT;C&+`+zH*BQ0>sI-cjAJ+LswDnntE6xs73 z`V*P1jz56k-^r0RK1_1dFv0Ib*aI`aQ`mMM%E7%ys#VS`JKCjB<6X$(iND5Ex;yw^ z@lQJ--L;D(Ng=CzXA>5*KnJ4k-Y;lG6J~M zBpkw5W>Fr^7`XIEfSYN4DevN<4SHP#t5z3)RT!X-IDEHW>|;$OzmX$^~8`U`)OfjSFDbOH25hNS4Ig9nK|SstdWj>63cH zg0`8gD{ovML#`Z-qHxuKji71# zgx+1HFH^CFC;KD==B#@Z!EuXJ(cH0Ty}b^q`B<) zVW9C5rPX`*a|VX4o&45l72NvL$3ZgF8COUhvd)h@%ZzR)-YrvxtFLghme}mj2(pla zSZ8B}goMP4%O127I_9xLBiTHMNOvm<-)(^y|E?S0dT#oYew0?$Q9&>CNAXq71=HluUnr)3wz+MHuvQpMWZpn^3jw~K zz$pD0aKXL~p&D-rk#4U$UfoAi^8OYvwHy@-?V+sJtCU&P(nJxCkH-5j!POD)Ihn5Z zsy_p3j&&s>o3p;u;D=1OLs?6+;WJ4Qgjmpps0PT~SuHU9 zSWga-Gez1R%e-Cdd!;BbhmaqNjBx#KPiUVUptXipg#mFSQavA8g)^EN(@Pt+l?#LT%UA&T^h!eCD;fiZ%e{!iTyztf>< zQ?TnQi00eIH^J)sd>j=Wn775IkcWqnZd~Ru3#RRcw?@xk9Df-nBz5a|7966g@Q+m2 zWcQFka^ej1`qbGoCLx&n-~b{-uwHSl&c^z{=ep*YFxggV#c8Lh|D6% z)@&3DH?7QO3yQ?yX(}{i!W_UoEr#DcKr~2B-THUSwQb3QXSK7eI(YUuZRDWo(2ZYV z0hk2GF28e9&(gT0U?tsZcF>g1^uTa{vVM@MK1UfNh>kp8_622wdGn;J_cAl|eS8Cv zlfnWzzR74S5;_)aq}W%{m;S@t$cW?d4U&$6!nN4m@?fM1?~>ee3^J(HCmaO3vVf%N zS6c`}Kdb=>F9-m`@TE~2z+Rr@HrJ&aw%sQ$nB4-@;Yp(f^pB^R&3~xqkZ1gbV2_k} zdX?j;&jbXOBKr0!0)g{!uU^qfF!lgDAd9uJiQ>7A&>EB>g7$pd1cn4giA9G5^@j+@ zTWa9w7!10vB8S~{#1^+!Kh(B4LUSmS*51Hhig#4wfbMM)Kw$zz;`M@SEKEHLGYVeHSw!@f|f;QiXu z2*b&cB=~o-r}Q5iBfW%K0QPaE)#jtK%dBlx?h@fV60 zJZHzR!^W#OLk;*bUM9z4lg;qK0If?3RUJ;zthbY*6a9_JSDp;}_Z61Z6WBPto0~c* z*FmvkkNRvKK^LKR=VI?}G1W)%=iy9yRv%|OgJ+7N5}fOquQgf}Hl(NICJ}aSwA`T5 zSW{u(s@gRlZ9fZ+;lJ4fd3Oa%)MI0Z1@rC#P-lRx3F0^-7YZ83^c{!>JYQ2>#TS7( z6P@fO{(^%W*_1!dT-d^ylVAXDqxyfJZ$rR9qJpe4&hRsH{w(L8zAl3|;kMVP=zzlU zKxezJxw|znBoo5jjWxD*Q|UWF*1p%iUr;t`U$|Cg*-l%DXy; z9l8gsQ1x08&bJ2x+YQk~yG9aV4`T|xiGnHn4E}uU$tv7CT6hW>g_D1@UcefC-{xdZ z_ZR!IN&`f5=TtHEUx}={g8`y_^Ux`(HJkU1_;y;J@a2!aax@uk*fFYJZDSO(CR$Ge zuh7y+9mJJK(}S%Cgbt`3TRcO5IpeIwXmui5c&dLVr@j* z-licG7km?v7h5q;it>1*5YNI^pI~26$4Be}SE6IX%Gt#Uv(BToS~s(@SnlD7B1+@V z28I};Ucb&9eUXHTje0m+sMk>E^r{7sLcRZ5oCsk%FGr zm}JiziNOS1UgGS)-2Lp=+2#b>N@L!ZARemf5cO%}vLTK;h4YlmN?D{jpwO$k-wKCu( za2BSLo{dG;>Z2l+v+3WwlgmL^8d^FWQtxC<`SJTx`66BW=ASdP{jh79f{c5tDt4p- zRd|Ixkw0SMwFXO^lK3qGFQ|W+C#qws(oV#TUQPh`g)Y)Ltn0ptSNnN!t*X_fyN66f zi#7HBFo|+k2U}iHfk2h4_ck(;4EJ_K3zlN`Z@)Qn%V$l#u6ukfK2$uT`gXoMirzEb z+Ghx3oHNsB!C;6`{Y4}3@@0Ii#wWJ92X2ulqVMyUyJgc5epdJAW-|QWi4B;l8}R(5 ze&4OjeSKpr=c0W2ZSrSDXYMpJQO6=r`*P+hBKwg6m*Xb_l$2@h4K`Y5}24II10+Pw(8 z)!q}4E0~L%?woz@O&1D1B^!a7O;{_2%nvYHJ@=6C3b7bhlF{Phff;8hDw1pLv5s@O z<*=&%343Inhy}4 zQH!9U`X)-&L0LJ9$fq9veBfZo|JDn1j4Xce2HdXe?41SPO_QoC zpxA$7fro3RKB+cR8Zyz6ppXWpbhb$K^BbT8l3 zjoQCrieN%4*M;m=P0RS*z@^TJA{T6!;ER1e8a7B5`UVC?*=1BMVkx^-m8myErOu_? zqY>l4D+HHhG^_G2&vYi?fJ9T2&mp`d-CoTXRK1VCX?A*j^It7y#NF4o!c28bn9d!! zcQ}K2c?N_}kGy;i_c(o9r(Dz>^(AIF>Lc-CRh}%P_Z3YBZJe)%{8u}G84b`#iv@mk z8-hE8rFW2AK55yU71YZUhu?CUA6NP_6ew2rw>=P$T-7vPmXHB2*38CQKe)z~34m{l zrQ@2@-Otv6q6hm6cU{K|Q2Dh#fP3 zDr#xclSd7RH0;rm$%ph=_&lXl62V(tD2EsEbX3@QwS1hlHOuts^D# z&~UrHOsMw!i#DFV6@pE=yeqIGQ^f_sja z;HBM+OLJ~VE3mEnH}1NgEx_Qxs!31u&#A4XyveFjR>ux!4^m-u2A0P~pX5$UYa%Zf zpu-W(GC+S&j!2}aasb0VQKA{FH0l3-F0^rWobekD_T29%4s@ZUbPBFhpcE#XtH_5e z8ydQ~mokE5Zh)wOv+Kq@7 zMZCk#!i|r$!mXxzA(w0C_ev$kJa=*etJ6pZnxLk)^TxG+u&ce*AXclM!hArW-TRxB zH{(9mtZMG3pC9yLdG4Hd0#HoRI^G6}N0;w6X_BalOEsOco0)YFugV~aXdrS@qL1$%R{tug4h$Z3k3OL*_|fI+U>!wLcTwyzHK&t-Qzrc;O#uPc{>S}@Q5y@ z8P+vHvMPppCf@9c8KyNJ_~z-=a<73s)D?mFr3~bo1eP>W8vFwLm~Mo z8=c1w_**=vpe;#QaE+`1cdVc>pSv?Q;JYqwhP7n^IN#e-L-L3*W)9j!ToGu!&4RHY z_1@RqzS?S&hqCFg_JB!Sojh683Htd=+ZoeRs%wjZ8Bat3(1-G{{=;Q7=Z4N0JSJNV?V)gc+iMH+hz!H(h8~ zQDZD(nNFk$nzc@zaq|f2jq4r;7C}t&nKeSjkH?yQ$dhnw#cGIJjC7q*1mE;~X@Cew zU||k#;Ek`R2w8;{PSn_hw$nngqKMBx$pGhjRvJs(_b%8miKM{I>QL4aMH+VTqA3v)ttIB-ZnF*LBlx+VPYWl+ zBp{lo*u>`V_Y__*=ByAs>MMR6V*m6|p>6bWm_jKgejMm22y4d_k`|&!J7<;PPa3OB zOg4|74dmVMs^r``KeL1@IR9pu+)kCAw-2GTMC@mFLV=0C0413hQ4B4hG!V*_Kk2(h z49`!esx8+l&|v?NbqXeVkvp(7w3n?K8E5j3VjHfs%bZ4#CJdmV%CqaU-75S_?|DuJ zt~m3nW8R@6fpRe-BtJ7Dit%A(ZF&@rWs-ino(ZPMHqL@aS>zW}3~17}4Ik+m`*Mjn zomYYn4T({o?^!!omlKYA`b1KG;N?M+&yH%qmkJ}$B~GXXVc^E|ve_MtU)o3pBJg8u zXw=g!rGH|#7aOIkVGtudT>qC+0y$5;_@cTJDdvdTr?~(Qh9ucF&hF2EEb#r4g0 zP-(jq*JO#44T?8-ij-#w^7#2 z>YG$J4xCJpU5a%FS|lErH(METP)y*`Ceq=6hlKlqY&f?5e*vikqFg(Mt{SG@d-QJo-2IHB!j?q#SO_ z^Fh6`AE}f$yz-R1NomOf#o_ieK;UQGCU!Y7A+h}wQ?V_P_?Jf9(dcEelY4XmdI>Z9 zX7&|3W&p+aG@Wki*L^-fv2n&h+t5UHD$a7V3W)55hX$$ASWI2)!o?k?iN&|-SDM@> zyx2SghOGrVAS)Kr@pZ4$@=Vf2BgX1yGzLSsLN7ul=JlxpO zW6~cw{OSx{FGRt7AUvboMY8$?wpF>_IecXJ)$`!Y3$zkZKJZ3nq~hL!9)2^Rxvdxz z-rb|t6KHnhNiz@kPfuYeJH}N965&}Y-k+W{65}Mw4o;9JPyz_v!e(Z2hB|Kg7}Sel zzsxy(`5p$lE-hgRXxwZMLB+Q%!O;BU*cBIt9u;*LYE|B2)y&j$o^n`*wqbG;fK`dm zwbHE`X9=PQMT|H>kTgleR9F=r7I~sMhLkeWJvF-%u$q z3~3E^fP&(2uV_frc1YN~Aw91fl1&0z+LGSc$e9jl!ttH*EzKwIjZ+%B27a^rL%HJY zTSs_iKC;=(ec%ZfujBD9wwQi9G0fN+RyRlS9Q-jAb?pjFdZd?+xAAIYGF9b|xK0Ys zV}K%=zs4=bAA{O3cvEW@Tge*#BEv{}ckz8W2g3cTbk%1dgw*}~gj^hjl0(+2NN_;| zK|AEMzOIUV+;)aKMv;7_LtVVBioA67bm%t25X0Kf%NZf;y*DWw+ztiX?8C4LA(8`2 z*!WKIV_5x>h#OZu94e5k!TH*CVQ!P7S1BD}REH7BI}ZF;WMTwhbw9{ob5ATd@DKHv zdA&pI$gA0+2~D}i)*!k#!k{N&VNTe@cT@c$slkz{lGjY}7udK~{!Ci@On|!5SfMtl zcy-o0-H_yi*(-5`pP8`e;wD_5-(T)NR8e*?EGN+N0=4|XjD}i~@;z)v?)q*c zFSwi&ut{Jg{hR2N^y37?$Lx-|{vutpM|$|&K@Utu6Oc!6H7|`3vBAa=wK!XHm=6Zxjr>-L3L2uAbdG}u;3h37R zx+DeZ_IOQ@#ZR*U0u*A{xMUdyp4}EK46{oorze^c}=7 zmqw6H2jA9aUwc1n;{-LVVdxB0S)dDf+HMmCBv1)^SR4t0ZH}vvzs2F^@aVCsUhr72 zQK=6MplrIf6z5~YuTU}_o`=P%@pG~f{ahhfoazhjd88}4;0!+%|500SNl!t6^=RuO zNXo4fxZZ^{vH;_UgIBxxB;M-e^ef;)3n4~<%%vrT1FH-wY&?!p5_6m*Y$M`zxxmEy zWQ(U$f@#6dYxT9_NPAY>ZsAuSswOMhs3@g3zdqF@b~GdwwzvOmQ&_1?cZf*UH#_^W3N#hAq)!g|;QJ0MtN{wHs3$erC?Yhv5_f+s%jI&%V+n;adS`91y0j*@I3E6K?pe|*0 z5;hNEOL)@F-yhK+=#dqmOZvBJm_!T>$PYWwzJvJ%=>xOdc!$_N7%ZAqvKn`3M6(Jj zFI8h8RC&6z!rmzNpAufk=WmtJ^0lKqBVZ!Sz~zZKTRXuunj8O5ik1j=n@gl3_LV=B z6b5mQ%&%_L|jQg}5OLNSl|b&M5u6keZ$zaz-uGwoR4cRP>3MEW z!0r=VdYPgd%K{u$V?4J*Cb4gcKL#;3CS%iC`e%AZqS@1=PC+6t+vf5qegzD1I}VO@ zwAa+M%#A~_JWE_Fq#ZB@L|W`p8YipR)Ik2jPH_VDf%Q=pP}~Ud}-OFg)hR zTTPqYuxZN=hc;Z7%}d+{6$2EI`{j1G!z!s*R2D2`0hlM5-rPP|f|s2ihsCHXyR=mAcbBQC8(7|PG5Qi~=Yn6tHKA%3&_`dt4e=frqIhLOLm=5{x;Q{xh(zKbViXDIcgi;b zq3qq6bB7llSb(vGT%PsLc}$Ti58dIfh_Z}~;hr^(u$iQeg$fF6=&w`^?^$1UV~h3& zF99O@7f+>lwi2pJ1bosJ-d@f4!Hz%lg2zLb*XR63G@LoBcdGS2$4zQ#2%_ug4&V^m zQ0oJln)@#3ut?uIkx3-E3oyY3cw*W2yB~Z88*a`F@K`8e`eGbv8}7X2u`w@v2yRy4 zA!Bp>Ftr^+mXhGz=RUj7slxcnsemz;BP$_TMmbk--s1ZuEab?D7!lcW51e1M+2-^V zZ}6JdX8qQ^=w;!7?jvC`uhg+ujev_;j_SG+_Gl%;!$O26niPGm_TuaPOXfmxjuK%O zg5-YIrT_iQFN&=Rwy55Wt>rQJdJXF!Gbqljot=ny-T%GMptpjxbZ;{ zL)P1cBDNkdZlfLAHm+b2yQ!c5Yeu*{kM*W|aC4CVoySjDb8`l{8KAK@y`J;K%c;~Djs_wZGBv9 zH8}){w>ZkqSyraR1*9-S2nzfm`O!GN%po^Bf=8hpp! zNAdgv(GO~%deOu>vg3! z8Fixc=Qx_Q{hF}oUouWJCNM5p+NXa&>chB~-I<$?0)^&^b*xY+o#7gtye;pEuIZdq z;logYDGVzqg0l@hkq=1Fm0RwVoS+!~Fq!#)@gc6L@VOF9fyJHwrZjXyw&s;-1PUtG zg!ZPxCIpna*)8wfGk<0(i^_1E^AZK&iY~&p`!*xq;KVndhmxH7LAp}!h&lCzXM6?c z4-P%V_7nnJ+E3itAUR9N8JX;VA^+yTxvCEhl(P^D!4RiXBeKX&QyV*&dCCA#$~cS4 zsR)GKofkbv+Tbyj9FLlf6_mX=#pcH#HQO5rjYD~eI8n#5`eaP!qCyTrTbzHXF637K#J%tj zW0?5O=(^+3P4Uc&T3#l?9~1`k*6e;N=;_F#xaKEzRNo3KyW&QB5uyc+&Gy-)?OZs* zuks(lwx|FIGzDMHv|L!m0N@k&HGNkklR0+f?VCcg=nSIAg-Dh=!il7kQX~7g2yHDB<%n=#r4fT6yQ6H!gi;R;O;CZRU>xC?MH0fd&FyB4X?w`=?BSg(|v zj}w+9{1~NOR=Q?m*=D^v2d4!y{92H4@CUix9``%0)t7CeHnf6fz|M{kKPJpNG%z%j zz12?UOFE+CC6_71Kziu%ic19sqs19&eCRHNu&)fOH@wrr6WwWHEyR1;=Wv)%*~}7F zVE#`R!${@kV8gh9K)mE$grK3N2@DE0p4Z0PKcjANU3@zLcVvctDC0x17bq+sKpP3+ zOd8})mZ}*1cm)=A1Kst`$IWDF{}L#QTw120n;Jqe2KG@6?XZDBBeQ|kUc%g07C4g2 zn0kwyjj(SDTb=CvpOsG9j#yOf8r?boM#8>18-Qb$c&J8Dw5-XQbwScO(8E9K_?HR_ zN1-sIf9+`Dy72-i+ynW*sC)C7J^25{vzQpm+6J4s#do%Ns@73oVlcX19T5Cw){GVv z%O2z04Q_G12;u5^%sZfU`Db6fC>UqPY3{z>ZQi-h?lAx86Qf|DXK)d5--RZh}>3>!CqN=5K5a%su9y6X`c@D7@@HmnI z`GWaqT*eK2qefUq?MC0#rG-AgD28=a>mTJcX|(wUpQibkd0`x70qN%=Hs9~Py>tFU zKBGi+Q_wpWJuPar;oiDizE_osKYEwi&^USNy}!I*CLBWxg?`zE!l`<2HP1f4pK4Ib zXF0ZLu#Z)=<%0lL9@YK2uZ967p_ujT`;{wH;51X zH7#Hu*j}J`C&o7zU@f3Hm}0dxrTUoJB^7(OKy_SYCt*nNCR}WyF6JujiF8C=rhK}8 zLD^RY$dovt!l9pshX<_wN=u>w9JLTjE3*6UY$Q;m z%gTRTTd$)M^e+8ygq0Maz1D?v~`2Yr#k(G9mFtx6(IznkCf*Z?|8`0 zxoX9DMy%|?OqLgW0oZi#2k7>=2t>7=$CP1IHbEazjoJUNNbtzWTBXPR;~!4|80s}| zMDqYgK)Am%f@y2UFVoC*nL!%u z&P$7);34Fa^xsy6gg|Hr3?z3XmHF1x*P6-kEjnPc+8#u0x01v%aW0^$NK5#=c%4k_ z6jvYQrjL;yMLmFLKHd!4Dl@edgItgn=w-rs0KToebtPV92yY_%nvztxKLb2I2kuI; z-)P)nybU~PH^A37e+LIWR|3sXeRaQja2jh7R2zP#=^OMeZ6<&(i1_e5er;}VE8;~; z{_uNB5SELl1{unl)tzj-IQPFyfThK|5I2j zV|<%ked1{mEHPabhHe7gG5TQ$f8)DCPeJ=S*_wL49_4o4a73^1$^#iX(m>nDAbMT`c$gYtN+-0Ms zxcS8)mbtye1ZRrM0v24DL&f~}dE-S$!~hK4SJj!-7au}}_5;E`85v?(VPEx)05 zK$;+Yb}Ovk){-RXuGNt5 zI|u=_{=jy0n4nJFod7;6NpSC-@%^PL%}Y`66e3FW$z46dkjf|Nxrf3-zH<_+DipbK z+eS%f_;kQrG@Hz`prYT5?L(`M@f+bYI`KLOIMX=7YQEbUHt-0Iqq5OM4e&s0KP*jf z?`}*Or--uE*14am4jXZ~{th@WHspE zeKC>`9Jdop>~vk_d^^~%*t=s5YQd2Lg?C;|1gN=XTW`NCUN(g zFq=`1fYL#^eQ4?68BTK;>D5L-8@b9^xOUF#q;t-CUt~eYT7IbMW^h% z0BQi>w54MO4#o<&$WPMI$BR^&HNN2FGo!J~t_bZ*8zHT>J?q}P3Eo10;_d=s_5YZY zW!O4Vyt^c_D)eOK$U#m>j8?1WZ4SAFyPvC#O8Hro&hSM0UH7;hgK#QWq@{6dK+7r4 z0>Js@#C^JV@3uT_z&ULm)6s(Kjt?^xs-_3h&PvqYbqdYAJq}J=^n~aeO8xG#U^?2- z?Nju+UM8Kd20W6fdW({6172YXss{J~J3;xR>84jf%#(g~G*%!CfH^@F>TmXW9(ba! znvc?5I-4ml`0~yf@Z(PHS=StidE2Un{Hdio0ykeI$8ko(iy5^rAX9ft{iu<#Ka8Ag z)eFf8>V+2ZiiVBsmUK8qN&cQ1m!P7TWg@7#jHo2jA?e)oEre};5~Q*mEe@uyLXvi# zHsvk&2ZR?K+x=hpmB61WRKUow)OjapQ$sLhxI7c80T1H^n}ZFu>WisNVA8H}V2QqYX$DXZT2+4d z*(1+LoHK+|`KLno6*$7;usV|`uVef*I2P7A4Ge!PyAeU8F2BoRDgn>{du z&bO~c`!A*$BWSKD7ZN-JI@$E9P9w|3q}D215ry@7&mD#Gewy5W&lQSSVvt$c*lARc zx_o@(;AGItul?X=W`)FeVYJR znVBmNW<1-5pgD6}4~9C8{bwviNzC9$+V0R_yk|m24F`j+7FIw;h$k5|^={Ssv?^+z z*fDJ?00Vlehgh;Y3Z(4Dd!TYAyJrBU=Iqpx_&A@DjNPG|;!u)2Y6VB9;Yd0NrlA!k zxa$PSYB9@EAXoqfk8$3Knyw=;Gkt`~@s4 z)Jgwf%}A|{i%T&i@N7u5`Hl90!c{f@vC&eVFI}JH9og434!J$sw@wvgGkVDK`YrwRpSbTcb$|qTmPNVlXS|EO4VcmT9RQE%0?jyu$-rhfqdy<)W>t zBF!xf2N)?qiJDi;8pyDTMwj7`69dOlst8#_4Vl3iq*>1_3I%mpRn-*xv`M4q=n-?= z@q)XAqzpeX(W&67GpYR{FWm>UWd$jJ(SNLa-3wmwliPuFk#8PTJv~*T@zV4z56aQ8 zgZ@5NKDCGF%~uxp-)kfP+g-;p-RY}InyUuLpWX@at|_8ZhYm3`Y|$p8DZ#U_-v4dn z*_&nGBr`$8$mjYssXp#US>oZ{>89kJ+oAzSfw50BBDca?#cFZB0&1m>-A?*;omJ>QNw=c^Pk<`IZP(iMy4|5N^Zk zd9Rwo@Umlle0}hWgaG>p0`sp;LM{Hq|Fz*oPT?!%VTXT!Wur%t^Sj3)Y0=#ZHU4-M ztI0ZRmK2AJT$OOIhB0Ky6=tv!JDL=FAm0>~@TKpsHF9<0{_&GK`5id~EHfa7<@$gB zJS?IxSA(wJ%(dmj9{+!Hpn> zTa6cjBkX5bCG3lQdlErNxEYyNyO7tnk#f)s)r$xLtcsYb$>ji+1?C1SCj_{>i`su zBBJ`6eAk=SF%_!yJ9~Cn^*6-qkCwv08i65&rs{Vg{Gfh09*c7rEW}Yo&zJb`U70$o zWZ~TK+C-QIT5T-~>?r?Rr{jwu5|Dc~IhM2>x!DK@_!}$PH2K@|CRcb0E2e==7*Q{N z|BN;6Kn|-<&q&6IOIvBN%dqgGhu|51hcsrr6w7*2tWPD7@-OH5J9oe20Ym52WYSwV zny;e?ha@6qg%Q@*p+W6~k=BKaer~dLezi4aGEZjkn(=cK&!|=KD=?KbAFr6(M}g-- z-)bQ4!>dq4mF1k0>LJDT#kv+r1Yp)<5eb@-QIqAZ1}A`!T)H%~0cVZm<-d=-{nj?> zaWwVzA~0tUi-KytFO>)~H+vEcK}^VXV(sw=kl%2RNISwb2Q5r)w&pY?PrUUuq9_`i ztU~V3oP+D^?$=1-Ok2j1xlA;OQy>n^I5lQq-e05>_*t*zs4Ah;Xno_A$;0}Pkg)FSaNO^ZzA55*5oy)-yg{SHI)e>94sXTGX>JHWs z5msn!6M15@-Fu;`Fm8>|2b)yerP|b!H4bccXQ#LS=BpP|ad*-h9ihRrrLNRz+5|A5 z8P3MV%;^S_>A5=gAp7tV4CqE!q!3VQx$!n)aXmUPl114lS=*@#Q*9@n$oix~nRyC>*#LN{lKKaL^ zXlI^C=e!Zyo7t7$K;cQXXfhjj^sAWGYKyq=z-vjB?Ma$8(74q5RlxsN$?(7P#%39X zxSkVy19mI9>B{ttwzQi=oNk`N1uVlOj-U}yDY;`pW=6LqZ`6gVf}cts(DkM{+1D3g zsUTK8ce1Ydu5=kQP7fr6_eyKZmAjT9_Am4UsEL1ReWs)#d?O#34x z??$!z4j?mFP_)~sEYHg&4zDSYcb{wkH{eHdEYtSKMXc#jSl}nGD1exw&*)7XhxzyQ zidns{*`kibXNNF%OjB&kl8ZLZm}^=xQVOakw@G$>>}4;usxJ|2Qf1 z_};*x$_~gWSI+hiRP}z|N%xF~Y5|Vz)n2HEn{a)o0ic2`5=;Sz{$4ghc8yC9D99XG zh07Ui0VbN-Zd^vcHNj)KG|@CrJ4)<$>&#wb*c5WB9jglw>OWY*gi%6r)P7L5X&hZgYS&kr(>ABjXxZ611R?7{jD}A3uGi; zi4!Qc?4MnSYIy*pc`Wsd+hTm8`CnZSrLwW_y9pag1cAv-0i3DKU6aRYgpySH`CPNA za4EhM3=U7Q7M@om0h#Y;$c9X}D;hO$r=Y)@qEArTmpy_C;h*}k{_)ZAvH3ey89*B) zDM}y3s`hRmkMXCSY-@@K-4GjJ&u%-IyZrCVX>HE=E*up+@LWC$7@SaGl13E3{D{Wjnw<(ux^q(dkl zC1=kJFQF!CSb>vFZ*9##U&IawA~YwiyN{(u%wE77>h&NfkD2_eGuR^yG5{F)F(E1y zISUSD!R)l0yeZj9X*wigb zyN9ut0uOj<`%pkobJfe`eN93uH;N&P`$qr3rS9yDx*?igpR@|bfkNakp#bD?!Mi8T)PIu< zl{aI3A1|c2aeae>8jrfrx)`f2RT|{r6q;pgux%5hSH1!aHwtJx{cC<}LL|}q`4(wm zYs7mYgV)8LB-hVvw{Sa9p5DO<#B91YfXDdu4BX?lg#RP_?cgJcN1=kCC7p&u&3m95 z_@6dTy!Sf(V!#s0N_2|=aFvQ2+|rvE7S_`W286d6K>b8rMA*89IrbcFl^BGwVza*s z76Gj%?FCe>K7Zr$R7yl^;NC$sd!|1wO|)|3Vg$H1ZP8bx!afF8;?VIp1W6b7qC49w z=#}%KP@27Qc3C3I4Rn)P0Ku-7F^VX}TeJj(QOMhZF0BRr)Z#2uRJQ|O+fPi}!a)GL z%GEoK%3Q%!PM;j%{U@Od{K0yvo_f|q!bto}V8(I*_{jv}U6dD zPa0HJN~f3^FiP!K7LQTjvTs&y(_dZZUoc-YFcgEdTLz+^SU8at4p5dzebWiJrox;{ zPP?xq#w}eCd^J$!9Y9AGtE^NYQB~Er44DzBd@;w32qL3ORPo_=H|_pU=l(Kdy{e}t zXAB1r!^F=j6b+z#_(+hs9z2i;v}4?Nvr_3LC!ZU!{QP*6=}^uZ-&wgZ5R)1~6GuU7 zUqGQfG^96?q@D%gBu^Ycn6fs3ss7Wp!T*Tq@;v|XywSBb`9A%{4{1t(wq|)+S^fs| zIrh>jHy*39?n51nb;5@FDz*{oqwvVrguJ=uD`rhcH#)8-Gp^ujzV-WEMN&hj$YwyQ%wX z3w~4>-o}`@=ZacB;mh|!@0p}!!B{gszSo|v{tuPfhxXbM+Kw*RnI4|V$H=5hNc+^b zw~bi7VKTRS+*D#=hVuW!9?QXi;j^*PTWo;5Z;=yNid&!=$mg6@>90UtXj^ypfl^cY zSjI+#{lt>UDw;&PGjxQSM4-d3$*4AKtBZtUv?6Uf9y$kgL0DUm01MA+&-%tsd(Dar zVjV%Hx;{y>cnzm)Zqr1}(RjRg3{C(d^AAMUN(?q4}4- zfl8#k?V^h&+ebQ1!%+8pidsPSSOQAT-lNVm@_X>;<|w*=_boT*dBL!ijPRWuKcMP5B;rGD$H1j4d z5B)7sDp80if&I}vpo0}=uJFB(wb|=T7;1%#7Kh*wOIReW8=F5}c?K6>hX&=VZZxGv zpC~rOBG&o4E%M@vB4F(%R5&WMS6ERGnHVh2lQtk~U7L$WHbCDwlmE$}1cOO3NB^3#%NA zgjPgMcC9$p(*Q2=Ca?%#5&4VrG3(z~-NO%H{QZ@drRwndAuKno@o=Is?P}DVuf@XcoeZF<-8qDGjUeUTv#1Qp*#7Vm z!<6p6m#^EY$?j}%6^rq_fBd-h*8r`DL#VtyIoMKV1ah_b=Rpx=T@Fb@!4eS;BOE__ zt8Vcu>ABUak^$C7SV*jMb=y{0QW-PYpxfzd^A*Yx>OXZc=H6A1vnN0yh}a;$eO90A%VLJkso z0oCTvxzk}1Chk78Xw~epNOj3MGOGB*%AOUispo?L%^y)`$DNBe-;RxWB}LVg7S=5O zR{4Ih&5yU58-y7c$}mXS&KV;;B<6Q4kwN%C5G?Fm!FQA039s&Dp|L!WrYI6buJS*i zRB*3x^bwGY93A@H1P=P=J0h%Kl)aSS$R@;-u-A^eW?X&@djfvhi!CAh_!}*m)6bQmPTI~y4 zr`(GtWjqud8y^3M@0GL`68|)vnRM;?{jum(p+`fk+9+I1}h1L;Y0TI$A@Det*tF zj|H6>bp`ap!XHSUjzcAbI|N*On6+FQmGA*o;*I|`b z-f3vd$M&tu1A8Oj%`r>H#*KoUx9P{^UxQ$OJ&_{JJ zrS0CK`C1+}%_RQBSOIsGRnDMy*O$xbH1oLeg}{JxqOEmPdm?8lE8bLHv{x||Qg|EM z=Oa$~O=9uSr}dm&w7{PHk3gBidOLRBBO#kX3<*?0kSoUZ{GQ#TzB-_i&~piR#AGhH z(~JnsRwfgwBg-?ME^jY!dsC$X+`4^Sqp>CT=MJZrz2J^^n3^I^=A>b=<9VwmlWRx0 z1W>tkt~aH^$KIm~Lz$WRzF6wY?~3KhFdJ3?C;ilEE_9nI76eVC!Vpt0ST@(y|3!rQ zZS1pLzf(h30rSh{-DXOBqLxe^qUjF_ZsQ>^jZM##GLacO<6N8HWZ|dSirmXKb0DOH z?bIorz5>j{xO9x|!gYskE|j1P9X0XmVmcSObf9UoYw6CR21I#=Rqb%YZD^z`ke3~> zaM|0yqt2KJT<7>pr#!5x?d~GaK_63>%v!8*6Qn2EL{Z9eRxAR=C5xCG371T-Oy|?l zPG^I-Nv8jo4(0pI5|lppM-u6`>$Ss^rmX#g;|)rJrJ#qbhha^MGd(>TY5{s1#|fIi zMG9j52$5yvP2QMQ4=+E8rRY~Tf-lo@zA@Qj#&k<7Zs09aCjJsH&g~|@L}#0&xG5Io ze09aOo;nPG8c(+z#lD%|SML8dc#$AbqywGY(q26nRbuZteUC$i{X;taa4c-n?$zpXf);O;>XN38?xV+nMD zw?SQ}&Yd?#5cs8AvNCNM6Ry+oXW{*8RaTq@&tsXDrQLBYCK>KC=T2ZB(EfR~5`OWH zj?$0IL48n|k57w7R1mZ4Z$*|#>!I-hGJmno>-(v0+=2L@PckCPh27iz5#GI9Yc!@= z!ejbK-*AV6P3uqlEgNP-c9_$%MNNZu=S!V;PGZ7O`&t;T@~3A1H0ZFxwR z)wg$LAB`1=u|D@ts#ppN!og!rM)Tt-9q0>;8C;#zu<&4Tf~hYd8~fjT88Aq|t5mKt z@sLjg_gsRv4J^@Q$AToeL)In`x7)vJ$*&7;VqIG0-!5=XwM85W5$4kzN1Yse_Dc(E z%Hiq~YgSfLlH7%jt#}h?CxJ&>`OQdulTNlswGTeAao+87HW(}o!oDMVLq)1{;i-!1s7Bjk1-V!GgURPhWD>4m?z+lN_Y;$jH(ib0%A{c#H#f%$1x z63FX>^Z=F2An(6tHwRp#tG2wwobRq8w;5Z_;s!P!L zko(&pD%zW%H8?5GcXQ=kQaZiomzmc}jj&wCOFgpxz0yO~>$29<^^73LgL`Y891%xJ z7%I59(8}rFM_&F4sD(PSn5leXamQ5-Hne1U=w;E-N07Ov9IJ9z7vSyGch*GK|7tXX z;xvl|b&5w}LLgivS5h|b_LZBuo)ayr#Dk?6wM;D$gCpCP#6P^v z6W+PaUzWT&T5~C>1_CQO)tc_MSl_X0F<&v^Z|AC~sJA65`X*(RNNunmtcmq@rZdDR zJau0nlL8XV$8vhH^IGqLv%2bz5XGaRk+g#7fW%V0s*Cxhf*<1oMjg>W&!M__w$6!U z(7b2(+H;11z_}WJ3Hl?U z6)~@O7d)Ss4`8!@4SbdjKkyu7|!M3vvh zF8eakmC!VXH7w1g#~>5>Y(T}c#h2R!%*j0_VbJs-%1g`M{P_6=Onz+s+`RUobcXid zJv-_Eb9{w%ImKP@d+@NEbWaPWHuOWfMFsB$d1CwW^e-bKtc&IeHCqZ+zcL?EKU7A|Y(E~SGeZ9bQMGxycjViRh##7zBAf8EZ zX03q6c`aDGAL_4kG2=S4i8PRTxOrjisZ8$^@fe(q)++?Z&!RzaU5=pP`;9 z=%nk`xWHATRWMi;oP&@oft7k4j0D5fTIqbfO%ynChpKYp`|c=8PEK!(f$b1M={YCX z?Ztg~sKOVj3Fat$_|*R?pGh^D zsvHG+p!So@T;6}9*^FgHF!%@h_yTzB@($WE*$R^_8gVC@cYm`iMZeWZrU;(pyKZ!4 zl4Hb{F-7Q~G?qKXK}1TT#R9!r&Hg9*w4Icm*11HG?%$w7YhfaP-(!h8m91gy(H}=# z?s_!%0z2J6ET6c~1Zz!QBgbDB7%j517>5z5ogFUc*#xT6232x$rEtp@(Qw_q_0kM@ zfvrXsyS{@^N_=J2w!5!}q=q}MVpO4zXQu`50an0XEpgePfWspw&**CiaZWzV1zku( z&L^UrJP+eUfJy$*1}-u^B+jn2a=*(yre3Adk)N__t<5<(ZnPJp3swv%zE$jjD$?ey z8b)tlj-QoxY8=8z^iFnL!!}Q_kB0s#ZN(PnxoISMQwvSsnMh=`Y<{!fyR^d{DOKs- zfe|*eGp@367PMR;aQTtM*=%_mXGtPn5GP(7{_ZiyBv$8tp)vE*-lT9}fc;6=Ds~}O zjnS*b)MlXgUu9`8ej%;BsdmTSyfNK^3JsYU^J5#zv<9hSAhqlk#+ineXXN;A5ayDD zl+LuuzZd?aj1_4@IG|PNkUNEz^OJVR7B&S_E?4=Fs314`D$H-QS{mN-;svC3gTW=r z<_vU)=&z>fiQ88Ss(E56toK!BOYiUI@zyb}Lh_}M(U=()NAofwlrG}9soaL+aSPFj z2?n;0*yEPup9aBB5x6TScsx#h#C<1CNz!NaBXeEaU0crvD2+U>u8$#ai~3lm z4q>*ZdUD>0&7MGFN9E<7VH>NZ9ub+w0Tj9NDyfgtxf`tpDJw2d^f| zZl=4c{`0a4BO6r7>5Fb+m_qPZRlfj6>_j*tqBokwi^)fn4Vh zIz!?W4?~}>9D}C=Rp%rq!f`xd*FK!9;Wb{y5>%N`)n}C$by1c({xEAxJ2koyi#+to zDkWPKpR^K}{f%Bz5$({p?ygXYY9k)J+=hV6@IEJBNql&_aRpb`xD@Yy;RX76swn%x ziVgl<3co8Ke(A$p%GQUCb-A<^1{xo^A8_eC_g9g&h><#-nwQ8I#^%^`j+>~OEN}i? zN~KY;Zr|!>s8-xfji zb&CGgWk7sRQeKc8{>>LA&l}=!c4DZL4&KnHREqy4-W97^nkeRbaN@>+B|N1Xp{mSnMtlZ6t6^fDp7hOUv6o5d+pahZ`s`_k)6JTkZ+p~vj*<~ zK0hNC_kuWKIg~Wr9;tI2zcXB-SwsZv*-rU zfaqsjEXkA8ye)+9--%6>M-2n-0VCg&dH8{7i%F+SvMQVnAo&$)>u+@u;Za2 zM9gzCS=RV!%1VXCA?t;rvrMtIJTX-m4xIDCA8vN!>8%XkTYUCOy!wXEi=j3m{r7S2 zs*a1s+$-wX`>UjFi3wyAj#q8`oDz0{ZW)G#XsY{)V=gE6OIgMTiulXd8W0ox$DyB) zy1v0@3_M)Oj`xM=#KX|p5;3bK{3pCB-CP75fiwSK##F6cuGq?hxOU`tApZ^>hd5tqw+ed`(u1 z&_=_P=y6Mno68Rk%F4^F>tz$&tNz6mqr7m@)FWLWrbo)Q{0FhPZM46c4Y2N|15BGh zqWzM=3-02*zjvayMWi$xhbwzA(V_j~gDa?9XI|(?rzZ_rh?$Ax#!~6}|5nJedu@mq z_@2Q89zGPK=oUapdS4vF zYfRL?n*k%AU@Y$Nh*u`W4_F-ArompGBIcGCB~>Br4a-(AV3v*;Nh6gk8Ckaa=`dK2 zVPP391lOLUx zp1;b7YKa72;?`z#qF(XQm~PLbpJw6g`hGVgv^$+6)w@2n$nG;)wiyyB!8WYu=^7A> z?y~w0NfjX`^O?KxuXJCVJG9D-3u40NXmjAi-F{L^s^&Wde4XHEe6d2?>pzKv@oQj&`Hxt8#!qdHn7KiuKsTo~Wcq8pv> zkM!C>pu32SM8L0oWBFq0hqeonHauQCq-4H2`qza<^s@+wHtJCOE-HsOKYM4|Zo+b~QxE7n=mR7v*w?It6$; zF*h-4j7#2F+paM2d=zzuMfHeIFAz?W^?+?iB;MT#R^Gj_lo$1t7ML;u<5!*RVPT}^ z(0y?64e{ZqfsPvJC~%l)HkYL-cB@z*#)k6pmyIOUIIcZTWN?i!nVqexdjJu9pmBR~ z&+oCSl6IuT!x~a-nkr`qg&3$MSQj^laHQ363DTGA=%wkF;uuom8&~hInx1paxZ@qGI>nSn+{Xohx z#*$l`jVlh9wkgPf+S}cFueG2D#k?+wStKRD%A*x$=e8c(u+Q3`lQ+Ra)%RaDKiYok zD{Cb*n>TVBNXznNJX~i>u}y6osLSv*+%|z=n#6OaLFI?Cse*Ud*RJg0A3*WPXGP_A z2Ey~;vJJ&l;`WD{XSj0fcdanD9v-q9xU(aS9MZ<~~)%jn&&~BK_L`0*kfcbUb0|gMHLXmy?6WlYY5+8z5>}l9c)AC#ps5 zh5RkPjV$DR`r2O*%MeR6I2Aa=f2(8&{I^Y(UCc>s#q7L#LKgjs{wa0JHtyGQX%S*3CCBKP{gwp zRvcSBuD+8ZMDZ;m)8boLgm=CHAQV}kC}T*8GR*CZPH*SS%*J9G&Tt}&-CcIWqUL#K z?oTvKbeqK-|Nk%Icv1$MBys!g3>GcRy z>KXq(Lf8=Ct0ak^8_dnrsNHR#QWYhpJVO`A{dDw9U;3Q=|Q(5U~={Dou;$X(K19nYZnuRgbd0el*C} z_@0B!FiHAkio;k!zuPl42TRws7nF}{q%;{C$TLvG5*_9EmB3fwr^QKATM$(0_rrY| zlz77YCogM>=3JkX`tTYoT`nvxt3MfV$ko}7NTD;5^AxZ4*Bi9rOp7Xx=A~Kc^uK-zr1lgFTN*IvVVj2 zm&Mi`OQ3po%x!){xhDrza)?6?>O)fNsBKO)r<{wQ%)rrm(V3h96n4AW{P2s9^-ClE zebvwPa>3MVDngE{`N}w?Wc2i#7uOj^>=Os#zU=THdRnPP>AKTBKtszwMQEvtF(3<% z#}taFzd(V0*4HpVfJf42ji$;GaxB(ylxYvnEBG#q6L!zrA^KneNfuCyb>wp?4WN}E zHS=ye25!<_1hA#tN@}AvBCF}c@+s|9l?)jamOR&|WGY8E-D;^*QB@OK#g~^tZ0n{K zjX5@lM?Zej+{w}vKKnp?A=GiI-BQkY971OM0_CjS^5T`B5ew1bea(-cfV3eA(n%wE zSz~Hq;fCHb5M|jHq<1U_T}Ui9BO>oK#{=-0x{q0SWJt0{p}T`AFAGN+yvmkOi7I7r z%F)Kqw%(r}Rt%{;DNLw$16U@DIIoII4UQ~rj5;FA7+GwA(!!>jYZ};`?bWWQrLWsb zao%6H+PqT+w{!Qxs56nsd3fR1x3=}Iq}FON`O)CiiTo?w@@yNhYsLd8{qt1yF}b5G%O^@FJw=E+&U z9+1IV(wiw1G2ypRK8^G`mX(HP#nxF9-47Qf*CP%9Ulmviid?c9RGE^uz4$>~%Zh}6 znWg~b%E7WOT`zWV4Gy)A%?MM}8|Jy-a=@#y>4u>}6yW8{8!)R_i|AaPCa7)@Lo=S~ zb^ZRDDg&{<)}%qzakjX*?`-QZNu9$n+SEFXaC!uE`IHmlnxx2MLqD5;vkhKQGrye% z3a`-KYrR*_PwLbcueUzko(WBxU#bIJzcf8T3!gcgm-6%71|;L*RJNs4fRF>;^e=5v zsM|%$oJgW5pcg1gWGtbHEIwveV=p&F4L_yG;}5mXvGWdZ-w5b_(6rPiJ;L+Ha*OH5zY--SKWD;Ay|65&aauDGmw)W&**fXX5PO6l6(q zqh5b`x0FN03-95AZni{!VHZR7lxwe%Xs68C+$^+5+eF>;;n8CK)l}^|4^cf}+ES2p zu0)2x{~mR8&vWHh1S1oVy&Gag;G@7{o`T!|LbsV& z+D&WGr?=N@(jV$?dsnm%Xuic)3!t+|h|@c3DV#~2VA6S>d(}V#BYWEqWj#`bPMRys zWuT@m`eM?(o#BA^l!NmRKcBHkfUm$)GAk3F$7v$V@GFND$J*Z-#Tx>7&96oWcn*fG-fBU%9LRNhd80>Brng8} z@TSItq5sC{8l2I-Xz^4ONGD`i%wBZ++QV|Z&!7XavK%_9`NTfW`HP4q$K;J5>@TTV zZ~lnJb&k~w^u(Krb?WQVA{^b@3yq60pJ*ZSPm3hF@8$GWkfq;p=oi}73YIFOT>AkwjEkHksjqUEaIDwHh-&SZ7tl{aIVSmI zHDRSy7CIg-X9Z|mA$yT#elXFS3%vCt zAa~JK`OYl8b2_us7o7R~F&)IqSv0b(o;E6caxmKRSn_czaY@OBGXC~H3}AR&&PD#g!ZR>1uNPVW6$F-Zj8(C4i04y z8uP;=kXoLZ{t+0KsNrF#ZJ)-S7IzaY7$4s=g7-p?1qV?L;CJJ@u&T@py zBStm~E9H^_OhSLz+o*KsgtiOZ0-IC{BJcYQabuT+hL)$VN!M9VW?epxC70aAf*F^( zw}N(umrMP1ypV^Z*m%GEQ%)W4{vbfYnLj|&U~b1#h!Y{e%~GRXJ*C3hYr=amFn}Y- z+C_ZAHX;FWc0NL`4$f7Js>fmX72i)4fYZ4WmU~-f7mKu88zipQ6JB797$^XVzC+Hb z*@qhq7kunIOIJZ`h&TjkGSepM+IMN@3it+MnvU1@N63Eea6(0)Y{wnXtGUNNBseho zyu&O&D=`=UerK{kkTOm7$8RyOaGQxk+d{0Rbs_j1o)NqB6RRd+G%+qOZx`2>t2bi` zlH70@F7KwT1si75S`fNPDAd^NsGhAAt^j^0899Tk>9?{02vJhNLw8lemoo?#|DwVHC zNA>|9&|M7)gbKPb^0R-V2)J@&*E-?e6IOKjr#HxN9Iwj(hWqH)GCXs&2zdkS1?)4n zzYknTq9baO`gjfs|GXUw`u_Q+Rn#WLJY3?{54hRb_iW$tceM5es(2Cm)uZT#Y)BN4ALn?U1E^yjKk$~J4J`O| z>QFyvkP75%Y7(iHG35NBUZ1|xcM>@wQJiA$@EcdQMnfMeSqW6es+Av@Cdxl3i;P73 ztIV-MtrOyYSuQ%83%HDDF;u>vP^0Ea=sBBwiP)%5;iOm?&+KqU>*jbHGo@y-k8+{_ zE>!}09G=e@0%A2s3UxMkAal+y5TzAD!0PW4=eXaP<+Jm{(f^N{N)blp9hkq-m$%xKB*C!K{5 zKMY25@)VwOfvC<)zn-i7B86n^C_qcpe3GJ*d9rIz<1-~|i894#K#|FR*X%XZe^fpM zc`+Mg=H?GX6ZeG?)2%I|KMjn5^}H@}Y7obe1v8y*rD&fLnfyIz0*xT|kw&)?5CLRY zK}}Z#BVKObA}tI3RH>NEXw~4xw}?#ft7FaauW$aHsCsbDVtz;^TY^oUV`GXa{~C<4 zNsH%{cTBU$UHUq-WpEnV#)5|cmUE96pdbvH<075(*GGs<4RW3Ba+?YCOi6%qQ_BgB z%>}6H>z2X!Ey1b`Z&g3YZ`dQZ)~eTI-(zaZ`Op_~l;#Pk2O`15Q|HfL<`y1m)oRF< z0RPk&G0#W;CFF8hNc6z)~)SQx_8+>B%!nQHM8xr<{K zmzy|p2YQX6UA#4$xPGlmXI{*%fqpqb7-+SsI1iQMG^2$g$*;F{QDE~3%~kgbsW!Y* zwzYAsNL17j3UBGsOg-qXgHrI84xv6)mz-XJ2xu3T*^UIn2q^rLuNikHnwp*h8{gfn zWkuG_&<_>==&zhB`j{3ya)tqzrVx7m;3`(ut%gjh^3y{sGw-#&y-9PO?eGi_Ikw56 zZjrzOK=0Dx#>YF=VXmO)nX@vuB6wM-CovftwUf^M>oJabN}zaUDHg+7&;9tlgq0Qb z7^N9i`7OOexwSO5m$z1kTh$J7Nk4=jx+)s>_@Uq5wDSbOY*qjgCRr(7)ww4-tDR7~ zaaocr&MQi$dnTvMVyjJFTXe4_d4C433~Jd|t9vcH@-f2>XWoI98gs}8o*i~C^vV9^ zd%Z^4fu}p|#ZdEi@3S)AJ;V?s^RcnjfAUSd1GC%#Emn&;2_-k>>a0qEoiUgHt{P^k zEX34W*|+Cz{#`2OhH2AGsU`8cY>!qRdicZi5Js3v4DhE2G*>YZW=9S>^NU&e!oZ*@ zSsHVAq%*Vy-ZmA6-x2&@4enGdq#%!hk5xMT(WY|FLe1-{GwkN0QQzJ46d92KSdp0Y?g7shDGfCO!k!qnc6P!Ch8 zvAu&`68~)bvFzvS4^xN0)U_wvV_qeQ8$wP(oAC=?%mW0y&21}+Q-tMf9jTR290Wil zQ8)u-zYp{#2w4CxK+wO*B;LhDZt4Ql>t5JNT8)YG7n)+0U|fekCP5MUkv^j{b6|x z;eB^O$as=gCVFTGEq<)uR$R*R@|*6~1Z;ahpKdYuHE!Ab3V4pDpfaYw=B1F>O>dTW z199~-Ntmpm7N^!2p5{Cf?sHjm2_9JQ2N9eF^%4&|R#;-_&*6^Zm@NWWSAeVMJ^;MQ zFiXr?uFWTPd%S)Yc_D(sGDjyV&;Ajxw-ru#48CZjk~#hvd&+g#aAw*e>;wAzFks!$ zvutLpc{B4;`8!Rlj$wS|BouDI#(Dm32?WzYJD(tOLSs%U@4z$_McP+L`;Ur86W9W& zSs|zfozz-njw0lI3>~GQ0005t<9z8T#HLd*7uC}fg(93*$MC1!@%7nACNEL!8|zoG zu817r?T5i&z>n$kFpw0@6dNJ3%P~d5XWV5ma=mpkazjVGyQ<&L@#wO*R0zCc3eD3S zQPq$$55*hEgDT#^`81GM*uO54C68ie&N{EqeOh~V+3^S_*!;9tmOtuQXD;&!mLrna z(Eqo$=C}Wm`i((ePg3m7~ zkq0Pa7@eKqXP1|$Jp9j(6v0YSp}n*_A#3);q~ne#XbGQTn->?D6fw1N#vtCaToR{A z)iEuvBl)+&+p{1Z$WLZAs`}tIWe3o!LuFY>f1tP&S08N3*wgkEq6QUm!+?O(@=(g& zd=FkPcx7nvLlFxm-d0-QvfU5%;_Ye3mrrZ0T$3iW(8n1-{Es`F3xJPf784GYH$ znwlC7d9ymR>`55YxCte{gseRU^S*`9aN_R^9EA#_OoCYzj&JaC;mY;uU<(Qo2boG8{#ql)k+Tu!z$N#Y1?Vi~!J-9fsWaM(EiM*K>Evjv9 zL6=6^cHJ8oJ*v1E32%afMTlYZT-_t6YD%!dVZ?$2V?555$4Qj~k6UB2WO?(TAVtE+ zVy)@EL=}tJJCRTSFF_A>!csX>zBU{q=1{hrSjQUn+_?H#H?3yb-1$F8_15Oj$7tt_ z6GvYosGr9w-LBck+1c=E9b1L{#)qMN@_K*JU6XZ^fV)JNk=qBo81n#+p>WD!*<(9s z2bP-Wgw^6P+jx#M{9@SICcyVjOGZz{#jGaS=PVwY-LZ4CQ4!}v{tIcK#0 z)Ie6++^=(ZSB3YfR$(3Q_SVw^Uq*V3@h<-eZHk@1AV@Z z60}3H5(b#@KbGG-!nT3bbSmH7I=rpySn;#SHdVc+ZI(J7=cY`L&j#d-a#(lrkp{XS z3jinNdYl`ag=$ifk~U2u$`^slmcUQ|oH`N|WF1LWi?-F8@|r`4$X}0zV8qcHkh^+- zzEa$^7BMAsJK~Jj<$_9i6va_4)S1@fk>q?}psQveM?w36Mx8TqwB_R5L?+~A02_T| zm~|q}Ngp9`(p4J|@DkJ#nE@Ga^6lJQ^-csrnr|BP8ft`)zLUpN*gZ}3de^qcwK^6Y z9mE&5OlkvADjqt~S)=wHqH2x9r;4yEjY;)9P(*<3KU0~W2J{-03^&=f`b=ydPGc|Qr9}>S6qL~LH@*!bw~@B!2-nKPE!kO9QG8;S8lB$Mz< zYbu1n5|_dGQ4S0!H~sBtFUkgjMLt>0s-}VwAFlcKyjvXO%vxW^*eL%Okr9+mQUXo_;Xs2 zZ4?=mjC`^Sl_)0c|pt?MTQpli|t%A^ga;&sst{X_}veSpH0Wy5o-+W|*})af-` zLKunL45;|Am#aq!;9p)nzy#GPv=BhNFDJ(jY2Qq-1*tJft_uxpCLjhL;fO81H#aq{ zq9QzYf_l$jGf|lk9vcX-C3+Y8SGuxGlBMc2%s%iObY;`v?7_#*_jGQWhxfh3XKO+( z?;9Q5ordLW>T?g>u0ToaKcGob&XLSN^UNpB1 zu<>S2cZ*@ATtD$SE_ze$J#%#;sB4v@Xsa-Ozk06QE&o}#KT=gzl&=mVM=|K_60cNG zf{swIAJvcueP=7>whq^z8`O;%^wqZDV5yQHFD$fc9g05dAP?@Z{=3PohU`)Ekcmd! z6*kScETV)m5?qJZ79F87QkE?y5fZ~ITjLwZFwN|O5BI~L7(N4rno^2(oVA-ZDn1pE z?{o#MJ;wm3vj{^cYGcnL#H0{o*OobV*JWrSJgdoEU3ds0dz9cvbT#x@ zFE8VBpBC!{(+)0+Dd(vuH{dD9rm!b`wU2TQK%vqn21%rW*dY#>RCMrg{}Gzg>P78R z-qFk6WO=A>ejLX}Bs5!;bWVfid;x}4a6^EZA0O@Ni_NLt-B9%za>U-ji(NsbyE2v` z#V}~-Y%!pp>CJ`kpVhB?xKVhfr8|Whp`O0rJNYN+oP?xuPEBH#{_+rGRC^wCCnJfZ z0uYJ<=v;8hDPl2$Mu_KkG!TH5%S61dEL4479Edjv^cN)1loQuDB76^cxNXMJi?#4xU~3JR z7Jiz6Sh;}m!6@aX?dMQ#4jCSM`+U*BfaKwqVzWB#IA)cgnOg%qA*4kNXuSRRcdx^J z7-%?dW<%HA^QU=ufFhg+W`W1CTCXI~&V#@2D{MAWn0sKpr8F~wWMlcFi|Xg;5BqiD zWKXWLyr(@KxxtzOn>x&jWd#fG2}&#c!`;r-P%y)hkOf0$@7p4xM&rTnXQ(3^l~$r< z!WFdpMd<6{cF#_u$-V)u zlZGAgI$ryNeYPnyAc1$hJ@X5MQ8pB!x`(POUFs2qe>axpEj+hD_|OU6>>!_g6tSTadI)P4Sp!hVB@TehMad6zt*JRF~oqC0hb3b8bq}vehp1>X)v%GgOHuR z==N4?sN(9of*W(Zs@xXUE%RpOEMmw>_y6AZ%42kHYVmLycdZ1bLK!_6d00ov_o$7; zcChIXSSy-xm~S28w$w9utP{ z1n%KF2%b_f6%s24A%*1Z9fEcXdajokbi&YEkhxep6wVdLkz$o;hp>dax_#4Cr_Jxv zisbg`Cx}HM`7F1(qI+Y?L0LV$jd72}Qa^F3b^7YIW8t)1b-x(Vp;aD?S1n%0a(Url z!Kh1P2XjWUa`J$oR_C zrs3{>{f~8cErgtD5HU*cYv}h$7c91Dj}C$P)CJMKY_}HO&2_=#%J~>$Q6WU~VadKA zFDiwB+#-#=9F~MJRKA|(6>Vc$ewN-q?P6wjY9HDPT~_7axbUn{+XOn9aYRx~n++Pr zQg;6Z4=inw+v>aB`B*0*fFE+-?jZ zjk_%32?^M;X{s`_i=zmK?z3<`oF|GH3h;S9NPh;8rsM$5Sr3w_v~A#~XYd;p98EkF zj|BY#ciLL%iuF7^o;lxeLO&hA$t42kfxTi}sDZiQ`Pj4668|%U5Gjw+)QsA|FhKjEa;DLj~JuIGZ3BK%bga`(@L0 zKo%>zL|o<}kgH0IP$_-5bc1Hdk$Bcr;U>iEcV{Ec=BhJq-JgVI6By; zNXI1J-`RWqzGpu*7SjJS6IE^OP@4SOv$flejAXQ>Q#I+*jx>Yc(B}e$FRmkd(qM@5 zAiWY|%d~#2eD36;Yr@u8YU4IRXt{b_Wdb8HfH3PJVTU%-*kMqkd&YFouo#qeL|!p* zHyC;D@0O?8X&YbY*{Gt(7$wvU(7odRxcd-KR?TckgoZRk2zx~FUE9X@m=0ZL8}N@# z;@DznsQl>!{2tm5s!*UUGeSN@4ERhr-1E45xSNh2JVO3Jrz&qT2oI{^MyORpS z!fu?qd7^ydGIpfk_HdYy=aMxY23?#V0~0AAeaSEN1@+#21A&e#4773A5wK80`t`7h zg5BuB$i%3Fs$OflvPw#n^uz>jE=sI2<5Dk$L+ZfRpLY|5!l2(bIC_JTyUbv=GP9CX z2)}sTcGdC$ATD=LFQ4@dDQ7$cy<1hvb8eMdi5=};dAwH(018>LB@H0UkVyK4-Tmdr zYs01A8zoe}>TbQGH4pZEvXHXGiyffbgoVmRFht)H~_RNN-6HBA1h#$x3ySk#((I{Z!Yp9P=<#1zI zqXZN(u{8Z&`eSA{n$`CR{q=u>a2nWM>^je%ug9T%_M|^VGz+_@V{&G(!w_!+eQb1K zE<|UuXPl16JZEQH2?q=5FsW#Ms@h)+6S`?d2GlP1^4aqku_#~wc|+dtMb&c%iP%1y zt5WbaB3gCoLnx`!r4U>bM3rgJ1yM5&_C?*C;Qv7<>==XS_!o^M=TbO|cF?&DDCa|DXjn)#5e@2j(nsj4^%X%cZvkO@7TbSA+(c7*t zL>W_t%8pT|L2(yKyoj`G#S1n%wG|k)wPtgI_4FKv+cbZ&QX)dzO1JKEXjm?;w05k`m3+HbkK1m*iEJoW;88_R`Yu0T~aF9Il$V-ckQKC^P6=iP8oLu@QH0I z@9Bz8$#1R6x<{D@ZGs+W*(xZOu@dAAsercg1h^r0fKo>7dT7)vC(*)VQcb1>f||Dfs(5 z(_*d28WW(2L4vyw(N999_QixBdq9eiWV3 zv-WrfUEeYLtf6H*0*3`>g88xn1rglxt)`(XdiX`( zl_+|YN{~UhOpEp>SJmy%?XK0mfRI5*J-;ca_uFj{#vhB4RkrWfLPSAu$tQ=%RFo1< zPaJ~0-(?ty5ZcNchhXdCQe^bQNW{gIL^h!7qfQVpeaTqzy#1bG}MfA4|RXH8^&zIQ^T>}o4Aneak5$KwB4;V;|%bs zieA8tnecp`hguR&-xGVp-J~pNMZ)*vFkkw*ov~wUHYIP5gbGmoNZ}4~+K1u>Pem%OGkF`Ed%r&ClE}ay+N%gLH zLlT86H+gFS=8dJBrl@UL9}i%Ly@*SkWQ4~XPk(28S>v*Sh0a7v8VU!s@ln>Vq3ft> z#aaO9vB}tsmAZ|!&X$665tu?i7QOxD^-7_HwqIE)EVUJ60RHjjku+3-)Hy%*pW~`i z$Q9^qddk_nWF|fukTgq`MSnqx&%Fmd#aHhG6sb<+Qms;8OYG|5iZ z?r_6X42XYmCW{XT(lh2h^&!g3a0!TepT#VF1@F4pveBm2FfiT4XL)EI^x+6RF6JO1 zL8BIf2sm6hi2@f32lD6KtgVC83eIzAVc856Oxm~##b{4^LfPi;70z2JRRr(WnAurh z)fU z6zb<|m>Rdc4CW{vF-p4RVH0ky(HhY3Mh6n%cI827duxnL2-oCwNwbx!7YhM_;Iz2D zr{pXjWK_g9Jy%;j$inx~?_2G2g}Ss<*&^l6#rI?+0z5UclR|@}%vc92fVI7Djh2qu zSm_LP(>!>)*eon|=%I;{ud!p96-x2q`12AwfDwV3vhvkB0C1DJerYwe;>RMqA1a~z zk;A|z`DWx)22(T|T455YQ47I+Z=!`{ZIC;~uWY^R3O?q{A>^pHQ=)ORdb`9}GOGw`CN=Xn@_$Inz#jluc4s$r z$VKP1H8w<}HgY@yC@j7m(N0ht#Z=5D#xY*wo{hARc0-`_T;$Tw<YzTWamf>&$wVzQmpBO!RDeG$rV> zK(Ih=v2TU`sNG{#_5T~xL|&4V4_M+m`k5f$f}5yDUao@H_`;BL6D+-Wv@9<0l5DWm>@L^5pbqFYn1s!Uy1SsAwXvU76wfT3Pg=lgK09C~zlaN}$Xk0nN0CZ1R5@}oP(y7XVlv?x z&fo?+c`EaU3LvLrc7np`_H81lF%iPh&2ECM!g*n(@t|Ij0SbLz#7{CH>;gg0 zAJ+_To}$~bJd<$n#P>01g+Y=WuI4U_DyF3XuQnk);l@~nM~sKp(xc&8F`@fjENU-V zx#~TI`05x*4sDUo%YTBgCD^8N=JX11EyJiitaDJyNFiy0l##TXw^q9jwATS1;RJ4y zqepHE&j(+p_p4}?z-|StfbnbK`pe1!NNVPI_mTdSV|enS-a$ZBkvJ09KlqYj4HI4# zex|Q@qfo1hQa}!q!0PJ_C8;a`Q|!DSE#vciy)Ot_*b=W%1~wt+HP@1&_$f!Mmg!HM z_DcPI{5lTh{mgwCWu8K>=3V;JKk3jDE^5N+f6AZgpPi(IiR$h&flnI?FOdsZGL!_( z6j># z3hvm3<8#oqRgPC?jM_$DO_qn5-Uc)WOEwZ=w{`+ZNkC1XC2Dx& z30W1tZ=yu3vZcy!L)p1-Qp}tI;Er9wQxSfX6^-ZW=nPi`kx;MCQ1;^{4 z4YX6`=i-?;{9g#0G;~fj(Cl8t36I6Y_cq%>PM2h)x4Pg~@OUT7+B5E=pt1=1sB7@L z;8#Ndu9~LDu~Drvo%iI*J!)rD{W`}%>o4-Dka(XCn8D(j4yyZw0Pe*`lxuNRKFNeC z3~Lr^pEIeSiMh$+$`i+1vze$4w7LVcaxN)+N1lto%|uhXBbJp?TC3vyLMb@eV-U|A zLe?tO`lw?Orb{LO9dNMoH<^k43nwFl+Yb`j0HkPZyjIc@p=08;rJ<13DH{jX`U$)7Vd%2M#i>?%Ar3~i^;wXF94y5%1b+tJ3XTTQyc9WT zV$ijTYF_Pew}&p{2J&A4o$3+vA>!5=sd_zhs~jyKY=y+LO78QD8-IT`;B4N{Rd*6= zrm?ZLkJSXhiIll}2$RA_vKAy1G8)s8Ky5LmAU9bh)wcoNRtE$rSe3=jcH4a5tX$)I z0(+YTlDCFatO(R}YJwu~Xj_y(oxl8{shA#KRIjuZI|khq zeKq$rKV4ky83UZe4T)` z+er5uGGt$wLB)gVv)`lgQ=Sil+0;8F zgXSGChS{5itC-k%IV2Kg&MvL$Ym;<(3Hhon23?RGAYi+L!-OIcFJbtZ!yn{K)RJo( z5oKrQHIT^G-451bBV!<6^?8@}2|gpjEZw*J>UmUx*AW>X9oio)mvxjqx#f>sP8UVoi$;q7 zO)E@k2ZSSMob;;s#mU7$D)c2szDh;a6*MEXo2M@$)Tj^YIhcU#EJmpqbq-}EFWOp= z^HG9KZbj;lM$jw)q1zuJC~0U|{IWrkN-OGSgPFsx0To0dCXuM0&6|B^|82|?yJlHg zdAj5Vf2xj|T(WVsOOoPC# z5zdVmM;682X#f(Hvqa%Sx-iIRw%uwP#(r|38PytkjmIY&)JzNUG+ z6C6jLDjxiQR!=1Ir1FKk9w)dHxua0oxg@__vSZRBgZX7Iv&#%o{@PRQy3OWoDx}VS z9U8bn>iZ5)GHC$HBY;S?JjTkaR9rPunlyRD^Y_FGhsz+;VbzR;p8j4QWmiqm9%6vvTJ#r@RDltd!$@}S@ z+W*NhW@LCMaU8Nf9$5-gtEc)PY(zpe&D?X98)M{iRR7#})d*n)N%=fK$plHBm=OPI zpet@yZC~~Fuz~_Aq&w=9Vsq zUK@9Gz`^XvlAB$ziFHls3dL!4qkZ3K>Yyrf-s8AX=F4mEy`3N?(p1(vy+`b=;XX7`wCCBSnFCIw*tu>yIMh zUM{m%C*lf`OTPJ~oD~qA{`^mGxJ>1?X#W+}jHoM@{0NXiz{#reO1eCj)B%{o06yhf zPYs)9Tj!0{I>2xl$5{%TRdrRd9ag;3RoS8``fsRG^vd(K^I|i`2t7}W6&&W6Rt}kS z2Bg6!yfhZW_Y$BEogoPgv1q%bxqh`1Np_MM&UqVm+oq4`pWC295Icl$a`+u@*6yxe zd2$Q!O4t@Me~c4@n#tE0nB%XH3AhbfLbyy#h`z2;m6p%RF+H#PVnQogR6|60|1;p2 zAvnS?dq`F{sO|&%lMsZO0Ez%o#Aff{fnpeyYhE8NZ$N9E^oU?4 z+S3#1$IF25h6{La{cOM->O%*5#N(~`8{oWn?hi)u-4_lF`h6HYS<(?5&jqA8#2y^v ztp;;2iD`C(WUix%Vw!=E2>za-d)=7#`Hf|k$}ohy^`cMkvFEAF(F_y(zjFDS^RTNg z*iiUiRnd}sh?S^w-k{1uI1tm_36Ao4DSBcAJh@~~gq_`s#uZ>^ z?Ps$Z7)1sKb@7E>0O>DL!RqR-YjW9JHjheOmxHeBmz&ygRPj%ZU18Fgx5!dQiM6laLmn&wOc)LT(;^ zr9n@A+X8`Kw7YK(`Tmbym8MuuR~@oBu6FWTd3(y{)Oo2;zzn)ZCapg56&takIhL!x~W%_$uXcV~F8!U2Cv^yvx9 zNs6yoh!UkpdRK6yYe2KAvpF(^*Gf`)E7e49ow6AN?zyR$R^5x;Bs+610Y_eZ`T!?( zG$GlW83Ptf5Kv%6>=kwc1n(O?JAPQ=7GB@aO>*zfOQHtC(^c6WGOZqlw9jHX>1{){ z5-qU&H6D6`US~&Y*kAI%ZR)|7yed(7fBSveVvG-GehL)8UEit7gp)2Q%j1sq_+PAM zTPga*_(9`XHBE3JSiViKBBB^h9QA`8nuiGgEP{!;s^FF#_&ousM*C8U@pete&?pJ2&ad>IP!_ZA##^P`oKl2kgms*+KN*2~E%@mQcDEt)mlF~W1PMF|x; zLH`eM!f%W7s)4=zDd9=k&;mVVcPSS5>T2q`Lha3kNtmA|;E8O5O3iww69 zY)3h$k>edSrprZ&)YF&BcyByHcZnJ6Sfp?eRC042?9mb|=EbS%0N}vg>O9hODu1MP z6S6?Xl}(5zHVL&E#E5REBWS37G~3B0YjXUY)0yc zVT{MXxhw6$cI;GJzch~=Zr%KZ+wVmw=qr9mw(|^=?>lHLC$44lL_2cK+tJh3K{EZ0 z{ez-@sbuv_@wqV=N3vK$D=4Nb*gda7z z7j`>6%-P{WxZ9$QWQYWviuLYzwrpJEl_TkNkO;0$>?jgx1Z3>dsrP1_ zv?Dv<(C00*cJHtBQv&VI088z2mks=S89{w* z=&jGvxg$(^Vm7X~Pfa{W@o$@_-HebHHM)3|P}P>I`67PdV=u(9H{|zLFZXcbr1`?h zLv8e6xzF0lQu2_-%a{j2YDfFB1U)@eDV;X{4Mq~RlJRFKN6~p*om#b4g2TT`=4uy_ zE|a>NGZD*nd?S||WxF}Iv7Kl3N_z)tMCGLyFfvnGfqXVqG?%wfv+>F~kIWi=Yl)y5 zn(!9{x&!Fp>^i@q!jEjnZse&Iw}Faeo;6V%C%9TuSZ)PVHRZFuB_NpX=-n&5`3D^> zL|(YkS!;CH`4(Y~T6FlW)CW!Yrx~qP4XHu~Q|`Y7E4%)Hg4L7z{E@Z7h7^29y#J%P z0l+Et^725s`jz8}%tlnS1goFRtc$OVI`uv1;lE5mt!;t!N)01##h-K-+Sp3Y{vtbo z2o>cp8)%wukw>53zZ-1`Z6%w_8ykz&IHExZ2+xgqBh>Xuq+y?SIsn%1Fuv%Mw3XuodUA0F<`?;4x3NuI97hfhrn=;%FZ)MQgRtdVBgzBM{pSONow)!dBQZQmQ z#DOyU;ekEkgACK4Vmtxqo{umyMw-PNmZ;v47>vjEiH?Iecn4WPq_iqB{739xy>c8H zSqL4>SC+IB$9g&#D=h5HJkino8qa`mPvc=yCj{aRi#qGD?MGKYGl4t^gx6~l!83}t3TM8672$GEg%yIk zx|sIsdO-;EU;s^tlGy)e>AE~bLbul4w0v`X#Kn;zHoyQE)4;gjTCTfUaYv<9?W5_< zlUB$ms`qnj%*a6tOs4anFse@s6~vQ@-N6djWYLgg@Z`UP1L&HdD(w!lTwPybPAw+e z#`#G`otXJ3=|fQK^G~f`9Ex~26R{u;Thh}2k%7J_j|Wazo|>V-D>S>Ze*-PO84(Yt zIqre<%rh6C?px>2f^CRzMufQ}7U&wAB zANiN`;Zg$^(EJL--zITOz3ii!hVE66>G>N&G3TT(E(9mE+CUcY(k9-Oq6MzD@U$1(4rJA$H7p@Y}e0c#6AW)&J zk#R4P5a9}%6mlJxWvlL9{c;;`qrJ0J2=$o!xS_G~|y-OnhH_FqlBao0M_vVL_ivEYP}B6Vyk9&XCcr5zyBd(T{X4 zShArf5mJ?{Cw^^IQGclJjjaDB7bn4lolkgT?K)>dRBc)QHP-RN)4k4mEymuYeSci8 zU$%oP0*KK{N&B>n+kvN93!@c3Pv$gF_!tk3S$>R0MX51F0YP7`Ex@#9zArN&R2e*6u^pX-1aYAiFA1v=`{_pYf-Eu{*goW{mjK#WOmqFvaaf=pwokUk30w}+!v5ra zQ`^O39)h70Q%SX<6Q9q9{s!If;3D6iuZek9>sBJcTxbj4;9@T$`QkZ{JK*@?$URdh z<+`%x-=7L6#?^q5bp~zh)ZukBa|Qzzrk2AHtrdO^c{>NYVStb6!nJ?B0|(H<@q0;^CjZO>z&VftMdR$VV) zNWK;&q!YHg1XSYMi@a>{w}tss`L_*YYTFQ%0*=KfOpL@LR_yjq&b} zio}i~jZ31*`~?O4Pi<>kbzHkw4l2*8WAupKhR;BWjjnlhftx`t9RL9Vrh<+ap2{a- ziN4t^Bw>7ccjho+^^(v#)1Qtof+JuHno;5ra=}`c92KiQeLc%hbarxHao%rm0-|>a zYj#*`5=)Dr<`#rz)TLHzG}$uDt!ra72eG>K=ng2;4K3$J-Cuh21{(t)ok+x9*~)W4 zAIl*1&7y*>KFNFvzYP&En6Y9R6agD#9e9s{nQw*)JGw?$TEnztI6uM4=R+ba zeKn;vufv||Hn>haQQvO4<+4(aZr^+-S>bR?9#u_;Tz%Yzmk1JO)*VPBh^aJs04DhwUvGBB;ldehu zhV~lRo6RQ2&|oi3rfp?er2S1aZkJ=awmv&CPiD(!m>^2+SP_nFTR9n*1Y+PAksF&s zUZ%fen2+}Ww4u()c)}X|z;Llyp{=ZNMU%-*rA*;z{rd`~&19pne%igmcf%RjA5uaB zDcI#PKwZqiFxX?Rzv$jXXX!##BE_fl*=F5suwEKgvQiZY);&QB+c%Nm3ZJE6KI$WF z7dTRc*UWTjy5o ze~4&69(qY^6M^MKY1{txw-JgJ6+h#^34O#&rhhW;K)*AhPLz<>>% zka|h@*Sm0ip2}s5tJ*vLqAx*TB{c1 z`s7QP9)|F_8#+NtpAV^_DGz|$vO*=8T{#pXYP6_DOG+vGFGt!2vry(fyRUoSiY|@E z`{RbI#MCvBmzIFb+oo$ZJhz8ht6b{JcgPJ6QP3Z|s|Bm$0aLAbLp99+@_ANx@B)V5)@?#CWZAO2~<_$kNJ9wbN_!46hRo%HS1w%UA78h=hFc)BMOMTH(2ZbSv688!p&;S6KW6BN>%zcB_ORwu~X>~n()RF17T_VPHYL?2czNVbmX(F~N-h@Ve zenFh$$Gx?=pHhs7&A{7eKzRTt8C~^?^JqpknspGdEcMcNooL!7Ct7W@hx~;tPcq`B zAsP1m9?GR@L$++eQ-o9Qy-p^!|H;?RNy(V9z3xye(avp)LB8Nv zp-F+io$oD7mDOE}3Qv(hRb}vidxF-PHv@93)&yUe5hKME%K4NhE0azRy+;#v4l=vp(yOkmoCW7r+L8r3%X80lR~6hx9N z*v&|l>BF5<0Q(C%bpqJa`e?D>jPc5_q1e;wzp8$TY2cP%?(jZ>a8kC@Q;Sn`cebXu zFZy({-+&frDvN#n@LJi9ejf(NShdsE?kr65)9YUJD>k0S0K{pKld5)q(o?MQ4}po2 zrVGej(S6)5zRC*P-$(#IK)}DPEfE9fvKaMWwQ8qdOm>v~rDpMAo5*OdW?f{W>p7t- zVn>dtE&_{jhe_8O^}4TNh8gD#Z$oa=VFB5wzeW-z_R@qSD?XUOh78-+Vg`1J87KXC zt2zlMERRzH*R>GS^4=cz;!@wGMFvNe9S7Vk0{c_NS2kHfCL+Cgo`{pv^jJ`biUyEC z_y_T>%_bhP#oHZ0NeUT?+Le2I7`JP}rJ;w4pHO}%8@b>@9i-(T@5P0&cI~6MJzuQ6 zajxnHK3Tz3rxfSUG>M=TkLMG%+3wrp{&%oEnFsD6#((l-a9U|D4`-);r9vQDAG zUFGFN%D1OWsWZ^fr(KGaHlSqOz#@i!?T^@=&^;y?G9C+%d7&3xP>F7gwLxwTVvG00O9dnK?VJp#d7RC0ZcB**Fi__HT5N+EW|2iy1 z{8(M};jwL)iWx_rH&kNM2J%JiRvJOU+B{;#l-heWh96y8?emhfn{s7`=@)A(M7Sl< z49p7-p@M+DXA1lu@GR#KKk&`>rjY(jMN1a={-x+{Q4-wK$#Z&+py7r~U#^7NLx8&n zvB2%yC=|$Qc@m`&-vBbs;w=SSSV00E$%kIF+~P9m>rq42QCkhTS8>R_lPQ4GjN2p( zP*bh{z-L#pvIOMnVmr)E85cdZdTUC9;VqsOXV^Hc`&eA+q6>%NcLQ4b{Qex+&KV&$ zp`(shhN)$6#fgoT3K(2KqDxN%hH=k@L2(if8jD^Y0n)}@paw7$&&3<=t_zl}l@J|H zat=26g>1qHBkN@vafep{=?W976IIt6yV74sbSVR&qkL=?!R2+Y=TI=EVK8V>Ue;U7 zz!AEWbI?KTWe4%ozbj8L5t|5 z>IYu=2vy@)z1}(W*{c;jM{81_wtW=~By&U|@HV@=>krkohXPgx3_kTi$`7U@6M)`2o0J``}gs zpnzG<9^CzJVa;}N^WhkuCto%qSChMt9!D$&4@bB{WCPg7 zjh#l%AgIc$n0HxIEL^R#xupXI-joD(65pG7pU-_!|hVJTYRc8I#1a=nk(*GYQ| zT27a*G3MAk%j?6U(up8n8ydC=A=i|)+RQL*%*Y>%N8Cg7hb=31V0k|%lFa$Uj1@v_ znkw5x1xb0xmA!`bFn%sl8?Jn^N?_ZNiw+7?;&A-RF=O6j`&E!cz+k?}ly?o4Uel-C zF@#R19UER;@D0uv7sNr5XA zDM$49D~HNXY_M1h;^c2=;#hJB;%^OR4u}DMH@@=hg(0b}De;2MdSw=9hEqa9wzZ`j9q=RH+jrs=|lWetxThbIO1ay4 z^F!iGt@T~(iEZ{ICEF@4f{F3MzZrBY$`Rl50kQ1OuulsMM%RRiJdKSgTd;kO)D&YK zIzh@I=1+3F$PATMCTqU<8A`l1`NU0Q;S6UKohO%4R_X9GXWHQhHHMN5fzBsgf$FI4 zbB3cF+G-q*2Az(*leusy!@t1fMsw6XJ**x3$F|&`p=hGMhSi^2E8B-_Cc&qTX;Y|92TrCbcF z2XrnkLiVRg32S!Uz^nOOBP{7*JeZ$x(K4rKZ8xb>ie%*eH8Y4w;UTj$OVkzY1`=^B zkr5d(Ig<+h{_!<4ey@riHUP=)?%F!Es@)MT%0=dWgI$?lCo54s&?hry;xq&*({3oe z#f(A6eZ0C)l4(|Jz?#TAInd$`t}$mB{`$Fe%5vyVr*LojdL)5p9B|g5QJlXFKZagk z{F!R~nmwmyiq5|#3RJYR0DRM~Win`cUH~f@e3Ydwcx&1h>aCkpnKaaRg3h@F_r7^) zKgBeqI1p{2@bC+9l}H_rr)C$+Wtfh4n>X_>e5^o>m)o8(flAa`9%ASCSUBS_?Qi09 zRhrW@5cc#_qN+M+3D;_+)Wb(+$cB>X&QC+(M$;??DLP*ZO(Br8l~n6T_WKkW9>8^s z*#2b#CdcU1@To9lixQK{NpW;Wi?*LV-L|%lJilrWYS2m{_j!qucBK4hqdzwLY*o;* zS~Q@lB}cv<4dv4qvkP5MZRF-Mu^gotxZDY5gdxc*geW;ck>nQ0ViJKhFXl!8vr&fg;|g|4p#Bbz751a9|GYyv z_wVwW<}&pZLQzN7Cd{Zg^YBsM%oC)Z!J~R6D97MFWzqR9Db!v6wLCVt;W5zJWaH=05Q^O>aIi)lji3$+Mjl?*!U@Cw&9Ad6Bq_Iy4G zOw@12zV~$RMJRKvr6C*M*B2drTrT#uBE{1(2CoJP6rD<9+yq_rsS4KR*7}PnWVJf9sYlP&&tHQ^Sr&;53Qz#IoI5j1jU}Ylk+1k}YZ(ic3ciM$uR>BaykDSy~*`4`7 z*m%)8V%LyPm2+-SQb`-35z;n=>rRq7?p4WfZc}VWdoqk0I41vY`(nQs%MZanj`Jy9AQiwzZPTD!O~Z-nV`mD}BcaL|Bz zFf-RX0Oc8J4f_+T&YeZ)sx5k-?$#8T#b3g;M=f7nuXO`m=r@HB-ezf0@ckn}dQF?_ z8w+&!$5d~UZoGoc2h$cDKTNq`ZaviBsTmz~@<+E}s@3W|%1isVO87YWAFJfsTxoR7 z+L;lVj0o*}_J;{AxWoyilsSiN>5BGzvYr%910Os#e(r)bHR*!2`Emm>0pG9eb7l~` z?q7xqxeS%oMDE|r2B{11Ck$;-D3nw3^;_^NinuPW*Ji{ZdSkVlqjWhEG1uFK4SS9*OkPg;KZ7r^w#9>9pU&kYe=}hYqH^p0)h~r zlbS9aJ7f5q?&oS9UvzAiRYfQM?clTJDydRNB3q_2?~5`Gk>f?)m)h3qK4i%Lfd3`3 zJGS^DLkap-$rR{o=jusGXKzeGiqS6})^{wMmC{A<_^4Ypc-Y%ZV{CEh|2kmR2)d1g zh)c$wF2I0$YQUuWY2J^X{df^sAnjG2`-}mDj&82ItNRP(5eM&1-@p~`kXu$GRf})S zh1a!4!W^^h?Wcb$gr%t0#*`ApQEnhwGIpwP`EzCvpwgay?1edw5zwwg~9aS1QQFDm8B{iQ(e^Ofk22uil zkS)_}sILP!$dx+Y$V-+r)!KdQ|r$=pCTl z`4Eno-u|NsPOmp_&SvuhSU~3{)%l&D?{*_ksS=r&<*hV#=C{;g$_1QG3JgDSrWRHp zJ%c0Khia~+c3FCe<3St3Af1kZ3k!1=v}}KFxk7Gk3ejRJY1XmmRaVcrL;EJ8jy{Bl zu|7rb5E}VKhi0adxeLrRc2=jc^c!!y16*8B zH-#6#JGaoge!IFfCD{`O+(9o4G8>V6c)M}|rd#jG>G9rBE{u_={-E!3m`QLO&okFu zg#V@W%yG+*wob+Fr)wO&r+-SuVq?PpIH^enEKHVde-6Q<3wx$7^4{RoIpof>Uv&?m zw3qZ4XV*=bNt*~xzRLjR43ugO2b162KYkFB6hd(v0%T6Sbx?FLX?!*RSABww?yda4@ogf=`Q?O555s#r*v2PJ^b0nu%aO(#pfsmj|z8w9lf4QLo z_?8FH?ArM!Hs!U>5V_tI@eeu>)I;$j)^95lj5Zx$fOm3>)ARH+n&{$ex;Vnf`e* zrq~x#PC_kfQ{9sLJyan*?b79L4uTzggX?};DUy47Kq4Ern_~r;N+hHlzCGIgd^o=6 z7_iAJNkPMxzKmk}P2Ya&3zF{b>pTiHk#eklc)RNhdrp#fc!&cVPh8BwZ0_y6rsYHu%Hnj2NR~)n; zU8K|-pHr&T83>B0WUIDRtZ{ldBFi zq)CRZx}XW+=Dl00noS{F@8{^Z|HWF4ieo_DJ+u1bMi|Y+7?v9m(ZAVzl$lc_(qiydp`-#iWeMuDI=Q4@!9ql_y%lDW$tL;K{VKe5XqBl9pB! zf34YoSqBcw1vlj-Ba8j~Wkd3TfWXRYFD6%c29G{H`ou@H&f!NRCut-R&1v{#FL)zrn$sPF! z?ESg3!y<5Rg}y>x3;?v)UPgjSC8y3zU$Mg+$_cWf$eUYJs~s{AM?&E8{)b;WxC7~_ z+qfTz^fvc_a4dCKuRQ?eP7KhD&}Y=>mJa7ni<3mu%36<*%pZ^=O9Ls9q>K6jBn`z9 zG7wu|fGD`)PEIO2@c|3_65O3{&DnvHZQEgW3$2%reQ`jo#nZZW^S4oy9KvP=jDspr ztB2pHetA?M_CmB?v3&V!;Xf3h_K5R=L1FzkaF92pTh#>;yu8d%$|5(H7?Z*mPww|z z8RDa)s6|j&h>7s`P|-B4OrB#Bf0%pre;^t=cYG-GXF&=_!%IT$Xu`c(&_*%Z4zjj$ zbn2#;_LvkS&)Jn@hzp9Q{U2Zd{rQ|bS5FiNAEuy7M`v|bQ(EX19LZZ3wovvbpWZ05 z-;5`U&N%yK(a=w@vrXVO!&mCV4Ae93YO~l$R z)ZnPiL+Z`n7?9VIf{4)vYuSG*0DVEXo}Q9IGLeT!Ymk6O{tx0l`*;xMB;y4XxnreF z6O?>!p0~y{J9=s67uzr)P z*@?2PeY>dQ77{b|RKO6{umU1kAnHBWLNMNhUH;c_8qK_s`&5`H;+JAnTkZL4+@itM z7&r;z=xXs@*TJ7d8Lu?osb2w@HOcV7N)gp+t^A##fu%XFGv3ZYixU;kg$Nh55}ZSF zNK>B6m&m(HlNQw3G%Qvy!Ypy2^mf?*U*9!)-Z9L8eFry4irl#0SVI9^f;8yrG5Y079-(5 z+5Le|eWfgO>jCUNY(csf&Aku(sM%)grD%X@w zCtlgEoM{b9wW6k6cm*cd7FWRGC@qcS0{{}wN9Oz-%>kll2iJhk6Zd@B@CYQN9|v3c z74@|t91cB$^4P$6NkEXQJ;eVcnOIjM?s7L4;!<$Jp`)%-MZ2bj8au0DMFSA_X6QCC zr|wJyMrj_4A2|vGVnq+~a49Jr(pbjhO`z5hLk(fw-m{ArzxoGKK)UyxzxZ-3X&g{A zttXRqZya6gH3P2fYgS~LC#wQ$Y~H{Z@Ss!EvGmdKDZIVe+tW-o$5~~~2s4B``J-DC z=SA1^7VYi7$@9elcpCIrswtFsdKW(H{;PS&UM(}x1ILu^_Z>H@YomCF@2FD&!7FD@d4qtzpJVCEEb#GDyO#h` zmjM-qmdA8QB5=fi;p#f6H2YHF9q<#lFb-zfJL$vj%Tv^Ck;SJOwUJ(UHU?2YttZXH z9jwMG6?#L4R=cVLf-MYHpCKuQM|v@mHKdokjx2r#Ub9N@0P@u-=wobu0Az->AkR=i zpZM<9hf$)Vpcu<&^%b=xYU>s98k)58l#A#{_JCgaGxwNc?h7F9Uv|aQrvif8qy3r4 zf1rbVO07;vS5Y5augF;T!TeTnB3LE(d~RL~H;!(td*0Fs5OFMsSgRN)bN{7MN*#DY zpQ77lWdUZp6>X6{8*4?pDXT9^ZlYu7f7xdD+U5{Px`J}H*cBYY$%WDR1S5tI%@kdy zh_L7dBRB2lu{~8zz%7;FywExQP45pVvfMtzEBxOJa$+M69zqE>ef8#HFdjs0OCh}P z`Ajhl-#5LM&=dEbITn8YGyeYZKP=>2DQsO)s7Wq8#TI&`;P~E|$;QHc)Y11P-959; z9-O;lS$Jt?bmD{UdlD8uBq)GKT}Z!2Hd1^3hAVE_0H|dAV7R$|^60`W14Cz-Ox^wU zTs4X9Q7lcGKT4>lV?@y0hW}*nuzpY22+B7Qoc3KI1N7f(#oRifvTd&U&#* z@AtaL{tvLo>t-MObjmAlL3HQ(AHY{hO}IY2Q0p%BRc}DxXU}^J*#T{+RPUC} zlRYy{tswgIVKU6X*bgxD4DJe>&TMhtGIf)%5@H|JZS9*lJX1VXOc$*lho@80I_veN z9-gvbe>g9h09D2hr-%q>=XT8z1W!^biN)gp-tJnXhfHt7m+ke4Qm}$&H&J~qW{`7L zDV>~F_~=Y+Hudt`8S|lu%u8cQ%RhN{2GkX!1rS@hRJy?LbfiRAV2)fQl3IXi0DrnM zb}+&%Z|9W~6IAZ+9J_pU1+r}oXj2pNQg~s<*Pqui1uIB#r4qJ5Rc`E%YRpM30B&yC zd4f?>J97Ush(5oUn8c5}Ij7Idez)ysO0LZDe0-aD$9DB`S)0Gr?kuq~(>@YN)^hWk zGIHiyoGt>nEzydJ=hce+#p)pDl-l=4yP!F_FLyfd?6{x)>j0j2aV7*;^Fv+_+U;@uG&b*I&XRtqCn3@Y-Cu@wmfGwp!BgE@^ zp(++-8?B*cXi_#ut?D;e=05OecTPCDoSw=U-<);yAv}YS2?67)fj+Pkz{|GhF#B*5 zf`Pv5qXq>uvh5bQSG>OW32D;{aunl02?-fO``-aak$LCOm!~` z^d2-gLM46uXj0DG^*#!V_u{_OK1&=uSuLQuT=(0}An9NZ&u{E^Fg?8Xq~ymKZ;wG1 zwhMlsd`qDD1^c|5pOXKO=9*n-Oy|D+V zXku!aIimIlTWM3`_MEq7ob->KU)hG%gt#6dbjhLUby|2vH{8y5xNLFq-{}ca$|g!A zL~>&nQR`k)07DO?*aLu4Gvy1|EscY-tu8RUz*1(M>?5@iIMB+F-yiUPFv4#!ip!&( zAqTbT(H0}q2OIiBCs#K9uJbSqYS3D!)R zpum!(r0H@z0=Vnw{|%t11usJhB}Z-=C@5djThUbl#q~G@q|xN3&~O0E_}>gjmCH4e zxC1sAUvSFo+6`WaG7`>Iuw(i1^J?u-E$QFff#izkyHErjK6IvTwb;rG+PBWiI+Pr5 zXH+CcEFJ@|GM%RL^VWa41mB)Y?eCqwk3%05@+*fqlISx1jTd7AA0D;pdqj5@{*Ljx zrfw8JFat8GO zkYDRf5RM~0?AwdTE3e0;FGYkwAmx11Q23)gIbG)wSNZ8YP-@IFaq}Q`%Cx3W{o92l*)kICYcABj^B`cyvIWQH8hc!`Bg8q{qih%u)KiK`hx= z8^q}(AyWCeykSVHHTE$}cB%{&CqURqg1-iCr3(T&R*jNn&$B?M!T8#|2k(h5jL1_} zsrxlSRtr&doqx^@Rmqf3N~Q2dtWSj@ry1`{8Vp1<1#FDMvP@{OkGYYaZ&C3p3D)OP z+>cQ-*+=g#xKPdR8Nv zDhhlI;Rs;pwnboxa3wk*Dw6Yvn^baU7zAf?a218~Ev@w|(Cwwhook3XPAT@oD{VA? z10bmZB!TE?wyg?}fk1b_*BF`#FP|=Tvf1b&s5>r-w;B#*^?ZmOo~0D*x`+EQ|8-E9 zEYo~`M_dGwk6rPP_zxtcslw;SR)M{fkNG!U`n!Iu#64l#h5pkYATOV$MUtKuYz~`9 z>E-`OPv^UmY(Q9h;iOwM0N!wXPxyu;Zl_oj1OMuNm!8XD?&b0s2T>YV?!eVwGBlsO zZ2rv^&`}AMu$s<&U-`)pjPK^GeFf}AOE(4HP2z@C)WxC(s3!8mmaWnPaqT0BU1VdO zgXnu_vUc{$%U3*yVZQ9;iS5xCe5!D@zSyC+MeQVEQo;NPXxcrO3n*OApbazV7S8ul z_9Hk5?B;tYS&<0V5DeccRA20u>cWy#_`>w6V*zVtt)zCZgOTf2Wee-G?7@aE^gcKV z2%&Ll1iV=DrO8y|ACIx7cr;bsZy~T^ft)mTOtcF-8MorPg&4vR3M&nFGuoNd z!+Q9VUqaE~?_UN#+{@@6O|kpV9D7&J;9)miRrw_@6Mc?guamgVAz3?^{X3fhl{bx0 z6WRS?!nAQS(!|({Hqfw-{dyZP%y8;;0nbJEd@tjk9*1M-@)2sGqZs*&OcMYOjQ6V{ z>6J~Q#OP+u#zJbVvLiyrW&HtTGP=}T{N=m$9`bd*&@~AE-@1tAmnh+{mSQk zFsNUQ!{~}`Df9|=*j5}V$Ch#NQ2 z4+b~V(ECPFWfe83H<&B`CJa{ZC%=w^EZju@q#2p#o=8Od{{p|KlZqOf(Sv_KmNZj{l2Ok%8A1{qE+^MBG_vCWEpSp7FOaTCpr+bOuL238t z;^lNts{s*$T1R32SVz!kGDyt;d5Xx3D4E~A)HCm|0?sQ0>X$y$K-BPNMX1qo$HZiW zEP?~m?%FDQ+OZKiSRamEoo_rQHIfplIp687kD@Cj?8jsXvudc~tad5tZvOQb7Pggt zdfC#*SV^yjBJ?I9k*;B}${DFM2W`p>^r60Hh3)>@ViKxdUn$#lq9&^=H@W33>oFEk zCl)!;P-vprV9}_st|lvUlpz(NWv**2ZF4P?@G3j9??E{b((CQwy)fBv)}f(h_T$xZ zH~XY}v88@lRkzgpN$7`QrT48q#@~xS6G{zQN{MQF7yX=F&+J0%L`@v*znZJRV3Am3 zH{y6;>wk|uXu6+IPvmhw7ib*)q@1W^!;~ekOZ^@Q=MiHwW^r`iW{$(8*8ZvbRSSp) zJvuzkC}|_jHXAHC4l$(IH*WWJZbb5ES(E#`NTRfwO^zpMGWG4PV{3o3u_QC-5BH+5 zG28TP1U*S80FXyjdSuG0mrhVRHR9ProtR^7BcWRYljv-CeR5f~+pnOS-;d5LH&wn@ z<7lm+6{zJ&p+6PPjzs9iYPfD~PgkK@wwBvp*SW26RAsBmpjPv8RZ5n0aTPb31Uq;m zJhTwq=yG#t7Xb>sg)f1P{h!B-Y+O(*UfxxVq=^$g+{nA(ep~)i*x*!U4mIsX_W)4O zIyE5ZDF?tdD|tT4<&H1?7PKFqK%hrsQibMsNT_VI*_iJynUUV_agL3;TFtgf!XHy@ zn^raU^$&!W95tte&k5I#2?T4UUrW|`toD*~ozY#f*mH?at1T?Xo#;oL>siq?6go$W z(+M=c?p^Oeg`$b9gEJQmtPrf*P22CB=M8rVnAaxQ1#znAp@35(e(?~Pq&!8I}O#>aRE2Uc~+FKQX zQ<=?Ta&}e6O?ZAE^#%S%s27itp8H(fnXSH5kMwU<8Z36HDF7%;t zXZgz&kpEuf|Li6F`}Woj!ctTgLJ4Y)WYfTJvz!%^aInTSS(<+HivfsIoV*e#SRP&Q zI}fn#0!_Q%w5PTK?^*j@XyyR=fH-MF4|gz<-!Q=u;ybNod`caOx75~Hv~7%D5>q36 z6n-eA^14{6)EeY#3qQPXfD#XY!9fei*{j2UgM2F_O^Dm*p(L4g6r3piw^2KEIbD(@ z3&%vU`#JvfttgmL;=S<tz=4TukJW4AAqcT zUO%f#T~H)P#Fdky`t{}q?|rG;8a`YGh`$=Un*T(&hWDrDOwr)XFk;6Cuc9F5a?o$s zEIDqlfmQKFVZ+ibtOQV(gQRjU>WlbUN6o+Piz#0k37g&4n_rM1@$99NP*b+#e8lUJ z2V9w9JNH`Ee5@?JVALw`AvWqeEuwyb2pK_GUE;=Od}y&L5x2KaaTBn zvJI}j?+@gw>st?Sf%um+9*>C5OJ{NEn*aRVhj^zx!3lPCrRoD+emtr!{U(tKdQCT( zoip*S4X1rR=m@&0neL{00zF(ZJ($>YKbTSit0NNWS)+|Z#?&l6w&?Oayx23UYRB|?5Qzc- z6S5Fbw-jIFMWI(U%!c;J?iKzoI1waD$e>yn;d*sp_J+()S+vq0>%IuZ>DB_;kohsM zEB&x1ZQo=GX z1HmEN%br)3sWmgIZ&szQw4F-=%@SucUgF7DD(?E}v~gRR2xe>Qu5Jnj{n zGlVjwwzT(v5}I*3Ld`{E!Im4s0qxklFgFtEn`tYwg+L2q6*USi>ubg($Id$7TG&dX zqxjl)&i5yc1PIOPz%;KN*M!i%Yv?X6OtZ4>qIuLmYNoA7#z%HRLw1Dj3MQC0{dsR} zC5td6uZ@DD!JmLA{t~UwingeWs{-rxSgqXG7;tpbXr>9Giy-0l#H| zgCs|REZbgax0JXVmnp!xJ#%|MvkL@C4?3eyn^iX4OCqt@^-)6=;Q1OSfvxld{SMK< zhGFl*yzMmSH)DwXPdfb!bH?!{Fnhoj=jpM52u8~Vb3fr-w=B@rHr14Dz3tUO#b2z3~q&YJVTwB-du_ zuH*a_ld|>b_*V?c;YrLGaka6|uA+(~{x59coP7oClV})7Yq3%f6eU2RYmgtw#H<9S zL-4fJbmf57AOf}!M6CYRr1ItCGg=fJNuhA>XQq%`D>yS?zGnrHCvHMk$d?m>as9Q7mG;X8)Jiwbl-_V z5>lyQJGEdGzwi=WI|koNT-zdGp@xqhwoJFa3Gz5?W~K!tiSV^-RsS1dYd-r_(uCCd zqJR_lYObXn5c)>s8eTwRDHI+SYqp1uO7!P;R1BpV_3{$vLD-Gw2Z+9!&WS%*^3i#w z{8ULwEOCxPPjBg)$t0*;I`a`3kw{WluS)Z|p2>xkNWFW6v;zsIzjgn5I}q{pKOq&e z+U@hRPHL81CZxlo_ms*PJ7X%3XGrSfHbdHerBfiP$u5f`o<@!3yam6dK+D+;aU z`|5pmEQPtNny{hHf`b0|8|6mCJbHIVKoc0)PTlYfmi@7&yH6U9@(8VwCsoIB{mGWVbt`bmiSi8s<*8C+8a#LZ3Pm)!C(7t* zri$80WPU^gDVua6W&LJ}sQU(x-wNkApB%RRDW#F#R)t~O_v9FQlf_T{*E73ZRM~zT zD~}R=Gs>%$I?72f$GEaP?G7*|J~gltE)9mDC{ zW9wv2nT`Z}D-OSU+0)s)gAWo3uzuoK zo!ygWpk{hEiM2rUn1xv>ex`wf4c|vWBN@Z;jgZP`2g2ls3KfE!g%DQdq-xag5;Hvl zcrjisUO|4R07a@3$QMaN%Xih)ePYl`^->UN_lN!6;zsdvr%V=;Cr9XzfW%G33D>HAm#jy+H^~Y1C5a7&nOOYZ-NY49wPd(M z(0_1eFIg6qmX7i1^296oN>RfTv`q#bb!I8C^j23I3!+QCl?Sb@@GQ{qS)CZ8NTFWF zoF>1cnGb$A5r^CxtPthn&;jg6g$BJNa6+~~jak1fQRnTHn7(o-)c44Ilq(Q0GH6ZFF)7qjW`<>=xh4%yKCDhh7D12}_vI^7__WfLcpTh_ zm5N%_5CUTR%X6`#H|;RN&e)>v>`N9qz<5frTUZQf>?8L0cASQ&WrB~Rsi#gWbYK$P zbj6EJoaIe{e9ezs+JkH;{^=IAn9phm{~rdD9AT@BhIsAyo;2w z!@gNslOdca+MkR+=}Su*lJ!o{t+Tcz`hUt>T-@nT_>mA=X3O*GkAugT@ZKq&C$W3R zDyrS&YDa^ylf|&Xxflhx?zLDsq;mNb%_?zsYL`p#G~3~@eDJ~yhcgW^Guka&gK#9FGtw0Y*^7yN6U>pPz| zk=<(u_L;29xC4q(F;t~gY{6-zgZGZGjvzl!OJ2r6tGE$5kwkz6=JKwPZLrfc8cK(& zjP0tgrWPJP=u@$cGHJksk23KZ-2cy30b8DldstovxHlMr_K+I`trevuAtCir4%_O9 z^$r15x(=cQY&Uj4-Se+j^T+iaj6hFT(-07vXba9;ao&@b?}4T3NA4yI-SH7hj}hCe zrb-&c44{!18htgP;1goMFze~EMz|I(00Hjf%ZO8AYTv4ixM4&5Pku`Odq}t?fx$T$ zXLwz$aDQ1QT~zNW0LfyXc>2$g8(_O++u(yvCZM&7kJYMuWxdz=VLLv*KSe<1Bb{_! zVN%K&7Mtx_M3)LQBPxRK!NTxdrsz2Z961gSw8Aq(Ih2w`NEvRl4)1nz53ZCKn}Nr5yo9#8(% z=+NRg!aPd!I>jRv5OMJ zh+Ie(lD*wCJ0+NycOBRj!aqUC~b4TYGcocjhVpOx(9{r3~$!N+Q<;;ZMus+-A-C7)}>XV zJm16SCV#?LL0&)uU?8l_#W~+Umu>vqy2YEfSNS%H?pCFA*hv#V#s)0JC>X$qPFW zt(Cp0_(85RntF~6h(9c-5Jh8v=ePiYMeRThsvMb09UxZ0JP+3Fv0N1|Cm@`dDY9`qQWZ#=shB)sc-q?>@bc9)PfD0(SxJF?asSVBLN(g+Z`48 z94^Ww@CJv&%t4Sz&F+RMem4Gj6;mVq`YE(jQZi9{&w(_)gtqt3tGtqloS8lW-)Dmf z{A^9n@2NIjn=k6CsYZ$GrMBVA(;+#ILLE*(`F7giE+ zB0odx!4xs=1S#wNk8It&>L6+;Pp2=fgNc^AMOh^O9Z{N3f@Fb&>g4c~ig#?>FwYC@ zGbMBw(A}jO{d)8J6R3J);~LlO@65e^5-4vXS|GueqPO^3)f{)@7OYk^7^qFTPi(!w z-L}Z65bPTr@Jl!=DU35-G$ei_?~dA96Eo~H`Tr64!-h%QEy3B^eSH3!Ugp><%y~`i zM25|67Hm2THGp+e35)~3=&p(l2vzZ47MsO=+J|V2Bj@`-tw$&)z)en<7%34b5Ey>$ zo;n9%VJ6}ZI(FU(($WTdy#O3y(_x`U8fC@(`ZzV}aRtqCnwXL;trg{1fH3yf9g0=D z^*Ff-y}UVRgTY)vl1$jQ;ArGi6j|fV=pS8Q%y%us8=;ay^veW^0f@nGPlqmFYWH1W zQFK%4562dxqPL6trVoCOh>#W~Tq&m8Ap3c%0u)tGC=rr|An=9}bT}(!Qa{;%;!4ib;Z=dtl$L=+(MB2B4TN?*= zFLzM&RPh2s_UV_Kh4Qt%*&L)g4?0F*mJhpuH-4+;NdCkC@CSMHRgDIZX8I z_YzE7vkAJ_Wyq=^3m&OCGDaGm!^i0BD$(E;Q7NitcsHWw^B$$1IcP7Td<91-_`1~1 zQ@Y!`5`}vP@^Gudd1sV`M3FP#+zZ9W2~cBb;9i6F=*x1E}=!Z`a^ZX7ijzac@9=e7F?z^j`xl>18t>P(wWHY2M^ zk>U6bz%KQknynLhcJ@~@FF|-a$Yv!eyCehdW<4p%e}L!aGrl;Q8YnD+6O$mntkYh9 z^WX3jf`#@zNN=mLdL{?z0mvEv{9ndE+YjF2_ISyG$|+cn_c3FG0nYmXND=-d1j0H4 z+gVVO;MFp%O9GXFVfveNH7e^N6Jj;7V7YoR8R!TnX;T}b_6_PcMq!S5ri(#!MMaM; z4204btj-nY)-}(KSSN9*lp2Dg67>pZYtDS~5)q{&@iLXBA_;f}{?#V10XVc)f{m}+ zN-cBCw+&EpI7|B$4`G|RNmEghY-Px4E@qy;Q~Q%P^>rSdhCH2kHKT$ppI1Y@~0j=W^s=t^v1Rv2n1IpN|O^ z`@(d0y|EN@n#q!Tjg$erquhaGkb#(Lk?# z&;wsbx78ECV|rd8mBop_`j-4s0!bxzCGCS7+b$yJm(!O|vkI`G`4Gie+3ycYCI$W` z<-WQ2>F9lzc!0{I{t~RJ8@+Fay)((C!YA*nDUd1@5R4O2JOvU1TD_W-Mch*3CH34Z zhs^L(5-$n1l9iBrJp+|f$hesx-oc~PCvfT*36>c~Iv`3)l;tqIAej&ZGhEyqr|0QI{J`8p-q$G2 z>XAN=R^%!lnFEt4!&M(3%B%yTvyEuG>`|Qpk(6Qw094Ksh@-`0H%!?1yQnlAa8t*x z?2&E!d8+@`8v7P@A~3L)wg?nUM%_V^yCxc*^H*<$MX!O3sF{1{zHol73YXOEvz%xf z1z)0F%y-2U*T|H{vS-XCk$+ilyP%ovCDQ5F?tuw=)Pyz@OTZbsYDernSN&CuGu7cy zK77yVdN3I@@^mfZyNu>X8^HN84Wh@3Oh_Tj_}EV){L%v zPMof4MogpD|3k{(IP;R&D0I;_zbR??&A=sCOQj=4<+rPbHC&}7+uRG(MWZ!0LfVzj z2Mz2}(Cdoxlx%ABSqbJVZiDZ6V7LVQJ4M;2qP(aq9H{7*?V!Xo+QJ4Ym}!^Y!I`7T za@hjg_t#c%cQdl!>%WENlVx8eKp+9+LJ{-w5)LT&CS3s;>z|C`(Zwg8CxA;qc3vNp z#1Kz`lbw@}`ebT4x%7Wc!wAnR3w#;I+CHQ#Vf;}<-QeIKc_ z|ILJxN^N#fc9wP*&f&cEkqFpJa=quC8Wn=AWs;~JnO}&XkuDj5yPs8TltmLtUV6gw51o9l3;r~7yt;#bm8`0siAb5aL!*QHhQ~k@1_Bu7$f5p;>506pzF|V_LSxR~ z`rO>3=2OI>GSV|N(|n&@XA}50?<3}1(|C)Lx~h5g@-1<5+3^P&Ctrq#0!VJKA6B?jBzzl^tuNF&utuv z0+3y819U*UwK1l_`KBdZVZ~TR`82y;T(L@%bE303lE6XI`^HiW25>|YHuaBeu9%EG z1Wp967lE;PrBEuh>oQwlt0__5 zw__dwYQR+#qlua~3u?9mLFMSi7o!t!``CBc6TvuB|!d8mr@h2o*sgzFX#?4DiXNfHH)sfQUpP zVRN2SubuiNZ3_%>Xn zz{F);wNwY-LE#p`SQ8lOtORB5=Y%h#~y1#zqHvVLA3pIDLYUx*ky# zOFBlr*qXD%&fj@;oU7r!G@H~;pMK3kjI7L?3|>q(VV|SyMN_Kw106m-0OC*0Xf3Kd z`q#Gp`o;2-3>7XdpyYznR2dkMXE(h<680C&ynwI*}OcHF4% zkWFgFH9DRBhSVvc&G8oW45ZQK%;40-feF!q9wea7M<%+m0+@^U__jO?O(e27ypg$c zS`v=tAXX*?OabU-F>k-)Y;a{QxYDNCE-NjAGQ8;wtU9)xWg!wYwnA^n%2fpLQWyWM zilc0fzC+JCkXn4lb|k@=Aw0?XX# zccn9O3dNDMzY*%VQpM*)uA|j)I%3kv_+jsZM0^-^&nO&_p8Qu7U#kky%G^e7nLJQo zB_$pJAzgK=IE)r?p(tc*gh(}?PD}rdaxt=bdUH-H!7N$VJ25L;>V|BT_}&zq1z64B zJP%~s0Vay~^Eq{yt|LEsxM=^%r0lJQ@17ab2U=ysOyuPf!*_62fAa<7Ymu(bdG-z;8gmg{JpB|?msCOwVJuskrVLf%$&XNebv#2C_&E0>>& z8X*3B!JExLXIu4YKpLrV$z!Acb&xcs48=344K@xP&&K6ZxO-KrSrn0(=rR|$vURc& zw^Ul#*2``d?Y=0&MyAOzHEvys9}a9!H$5`xkwS-Fla9TPp(JFgsfJD$0SXm%%gh3kwBk3^=bXD z@&vm_hGsWei_0u>y)z6FhiWkSq~hvSh7ub=fq?a$MhON=!MJ*7%1xc!e81Dj2_K63pk2 zbc<*b(R^Swq7@w3sfZ>|y-66(86T^sjkrf#OpxHF(fQ^`^K2KuWKj;%v{dt8Yr*m2 z4nL~URf!UP84E;8+HNtqKTTq0_S@$AEx60>7v~tsmLRlzCnqoQ@?v`!~RhUX^pHP9~O_OA!M>qa9ELh>x~6ToDPwu8tKm2RNt=15LfXoL$xF z7zrl#p7J^N#HwI-4A!6Op_ak!@CUb{m5J4G3>Z5bf>{#Ut7Da1#c2sqZm{)wqxHmr zq>3oe8YCqbN)hZ2pwNQ-Y;YjP5U($KaT2Wj;O+^Cu63p%am?}5_OQ-90rGhdkS+tU zsazABa5*uE#wjig&~l^`*3+`xo0~6tdg>)G1}|hqFRr_!Vsr=fz9|sTA9)J-E3;{^I#< zm`4NUe*-Ka&PHc0pG!IuFz3Ws{(+wqCCn4E3(T$edaPIZ_%|}k|EF2 zz(KuQeCrL03yQIhB?X%|*P*@aFK%3-?4my*N~jx-8rw9_o(Ue=#>BUD+G!!3R~<6; zt^9oD8T6jBU%hLI_0b9QB)ghB9QNr>2S8yecoRAt+|`rwpO#j>E05Jgz$OU?tI|?Y zWQ+%?6D0DOpoTZ??>vvyp@KYS(^8rKg69jrDf_hy%44IDaM*mP7*&y> z9B^&!h=7!02xEG&PmXAgRfAuf#>sK+;F#J1%zyaQm6qs5XFT9lj*-K{H-1ao0{;P& zlId&yk;~}l{nWt0S7fYg@no7ccd(cd)*|!bZG1E|IhvVEhLd?zb;wAQ;7gXDI{4IZK=G{ zA4F{|kg+zC%*3Azg+?vmwJ&Gfjsv}o6_T1pgWV>oW=o43<`e;`%|L=lVlSaD5(1O) z6XaFtH{%V(k4ygI`3|4&)i_~r6(*}`2|Ru?*2l{At-2ZX@Tz|w?J(Ze7w#3^wg$WQ zh7LPI{p4j5cbp0Zkl{55U$&}Qh>_x`^?LiGe97Cil0TBtxA9(9e7pyyjQsXFLk?J- zv}-!VJ9^0Ur2goTv_lke4C>jEd!(Wu^vJGk>Ze?u@$t=jYehGiKukRvWGt`a0dP>q ziTWOlo0I{IoM5}9&$HEY&r7@EB6D|DlXo<_8Dz_Vf+HUl$IV+Wo3_kb|-Q8tN1IK|f%+@<_7Hd6Tn*Jw+rop4oz$%V`=m$@? z-+OO)C9ZEKIw>PXh(5&6Y%C?PY)w+}4Zuqe@a1u^h#!wktdg};7W7jzaRp~;5F}cxw5#Z;*-xtQQq|N75eb6#l-u|XQzVY ze}UWyR!B9smg(;RrrFERu;!wDz0?yhrooM9bz~Up;8uz^Iu#YHx7iW@VP7#xAF$5| z?Rsnv4G^n-(Vw7QPckSNQo_cmg?6frmLoM!pL5ZqWN)nHJM8NKi!}c#pq~rT?R-{) z1NOYFV57RG$z${e;nGrsCQ6_wEB@9-4;;1m3o3m+BY}Kd ziNE&FWE;vUO%$e3qYPx97x$Z4Emd6HMf~3R60;U>k0o28_G{LIJIL;wr_el-Y2Cka z^5C>N9_ohJivhlo6cD<5y#V{n=Sp3A@(?krh^SxJIY1eR?mNBF)quGEkOkIuEIV4( zi>YzT(nZ|AQ=!-n1IiKOku|(?C&a?iWFFC$2)Sp2lO;Y!mZAgF^=8=p>qKVMtTVx$ z;J99%@xo@27x@1);ft`3^yq50-_8Bo!KfWIk{A+JSgAv{QLn|b1!U$w@zPXuK#VPa z@KV&&LJj!>L$OSWP2`1pWcXq(^Sk!uiVEv#TxYK!?w$SH>1IVDqvRz| zGKt4+K~~4H9Z!6 zJZho+AO2C|s!*I8r2H(lQC&gFa$=DhCz2a@v&@HXt|>+0s|*Q>c!=dDi*c_YR!p1H z{AeB4ok14LQbxuSdDOc@Lets%oU|5}8YvNY3IZl+0WVbEqIaIZ*Gi>Lb>j zHY61BR<%gL;nSgu#lCQ#ul8{SY=}jbcF`xVdSRe_H({=}_Mu19==1mv`|o5`Jk1Q! zXYXOlpRt}q&ov#xoPgwB0~G3q3&52BVt=Z6D=x}a^28K(!j84mGF|ctm-8C{F10nO z%rK&fxLTAb(@+<`22N zwy1Iq9Y$~y(4W@ZQ;U%kg2Na#i^!9WCoGc_*96>=0J9Y0{L@Rm32E|?GKjAUdr;Zc zZXBnhzOm{A0jE`_%6x9jpq~(YWm>C(b|3va7146ajoqcvql+Ne)VH5ukq)jG%$URP zl=BLyT*dOU;{Bf*?GeAa*dzR!uxIUiddodRe5NX0drVEy!e@X}9II7pfGy~qMLGQK z{Ge>U%wBo6>qk5v3u4r{e*&fit;j$viW1C0Uy&SkgaK=NXQ{{KUfn~E^zZAGZ{+1A z=o*~$!h&)SKpaw~P(o9gc*ucB24T~>F&{dM&kR8&oBF2`@ADhX(P*+(hoV98C59$8 zYSve!p=zl)C4mU~o->IZ8L?M+GPI_MZR|+-XGq`1O0_2f4qC87W>E7#hRGp#(waMs zz77of{HXc$&QDA>ler?9*Ud~UvW!y*|DCP8YcJaqpCqmIGm8N;zzcS65g56+DSpF) zr;14MAjBG}BXoh1aFz?m(y_|Q$afQ$<6Un`8nVBcTe6RZ5%_|;oX-7#@xA1*YjAUg z^G{CuF#?D!-x~F1(is@y7@Yw52%HLaFv2ML zFiv3mrzHxKLmqbrV8py#Xm?#TI>TO!lI033p(IJf^|fLs5St7fvx0?o!5lR4Y)Tjf z>TB_2ef`ISMnXg!1#tG&`o}{Q(lN(vJ_HluQ?`dR?>4)P6|GDcn;s=?P+#gXZCPXX zHy4j*f-kq~RBIWb={-NZ0>O7&%pfctoNn2*EhfPQXxOy3*`xSGxu!=K<%Q@4SBv=g z!`dhZKhV$sZh`R$xgrdM7)P03z^K+JORmAojC6XG*J{%4QzHoN0mG`wt#M-gRx27)MeYJ56UE%i@UF`3c6dW3o@E@!@yKc;09RqiVD?@ zm#;wsWUF~CA?+KEGi{n6^1q~ml4;x@sRw^f=`w<0u5pudG)3Ym5)Gok@snBe1WkeL zs0z>JzcM;#dE9)2M2`v|yXy3`mE;J@a#Qcwaie z5sf{pJReU=vXv{Z%4wb!=-W`P!pxMfa6cRJGYa?2Dg5yg(p6>OFk-a#ln#I-zPfkd zonK-eADh}EclV{)r~s+l=Ohf~ZTWKvAoKYLr1%}T-;f=zRg`rUEJ&esLkc2vOp~VQI$s{ILfn@SGIhV$q7zzL**3`Zc{^!=xIi zmEEX1>W?-@CNc0+4x4UK?gm$37gR^W$#QdpwuC<|&I^Ql(kn(Dw6t{rd`S)f0-SBR zsxyj!C%j3bf!_gOT#8(XL{odgI%eQCGlEu@QvXz@apEz61O6vlQV{P-11yq8;FuX8 z0{S_vQ-4oj&3?0|8D#$G{KsP1J0UL6VjttKMZ6w|sx*tRAv((?!>7h<@SCor_=t3OX}nK{*)}n_ zS!uLCf2MW88!zUOxFDHcUC&?r|DEnrZr6!)=#}ktl%bXI z&B476B{OJi$B2%XJF)Qs{}MBWAqMhw<&dI*K9e+1RlQD1own#0ZowWH;rjBSVj^AU zFz_H4kX=>C;?Xv~c2Q#S3nY@M(M}*@Q%ZhN5eJdZDT@pMJXDj=w3hB00#GFdD|rak zx73BTX*NJ)lCV+KsCu-F^w4x+%~D-VKkl4qGFP>gNear0u`Q*rS{Qhu72FS&F>{wG zYChU|WY2ef(@|IUM?$p9*{=cj7YlIxRUGBNp@wqLlPZlQvy3oE1|YkxMgU>S;W0njBdSR_Vw0o%o8t`4X%2sW3;BucP?U{!A2Z ztgLIOa^R^s&J-=9z0o*0-;PSq$J$qz5}bD)a4v}gx4XubGjp=zUiGZ|uVDU3`DhwP zlpk4Id_a&ytEMliyozjOYUvU4Iq=(The3^97C#tB1g8LiW<44bk)(&If)I#{ zIbE5jJsy^Gj^Lke?F5U+ae{f8yAZ<_Vsjr1^it)-mf$<*buVYgs@E@EbjU0^3+)$| zsFhrNu`TIu=kal)wbus$H_}|lJr1GD>2l;!A1D!LH~Gl9W~&Xmid8#Mar@p&eb9kZ zkGw3+&1X|n%^dzfi|VP&j(6~R5!LkI{E+*8zzNt{FOPd6^O*y~?62w-T9%>QbQO*X z>7yWg4jp|oSKj_HT8t0J=I47IT&7pIdwf)N(p{Us=vx55M@e39luvV(0(&=Kx7Z5K zc_yMb4!Kb%r<_ye$zb`R%51t6YB8qXuD!xt0xTGz%d-3cs1iHPjYIXqC=*eBNO1@M zz`x{`aRqxeZS9lU_^|{V-A@mk$g^GV^uy}`XT&Il15Q<3E8M4vsMZ(u4WMb8I*=d# zJpKIhu!d@+e20AH<$I(-V@(jhd036*@S@&wLUO=MiYx~~9|G%6Kwsz=Fky+7^A5*Dba+x47lz&h&4@-d-D zZ?lAqvShWlc#hi~qoU@-=WEv_D4>XFqq#)0C5BFz$Y~|q^gyO`0M=hYSuW{WAQv9j2OO*(D5)n!Up6@-Hq zsEHBfwrvYqhq!%c4PhGJ=`RLEFb9J;ktTS4bT*e^jbOCD8KIz^lULaxKxy^f-ISvuqB zDeMU99RK=`xL@E^9`HPeZxyWkuI(Rhz2DWyWERPgkdq~nj9s1@;Z1GmL30Xw zZ$V9-mymQ=>u>GLaDqBR&(-K#c?_=k3{DuL!F1F;SKMX%-ed*HNaA+#Vb>P#ffV}u zU8FQuTtT=67+jzzK)qT9Ocg8yb=)PAnhuIp^|ZrCyQv5~FzFKLd*bgoHAGk&u2P)< z6JdyAxR;UGz@rX1tQ6leBixq5ijqZGkIFUAsC!Q?6k5h4Yhz)*`%$1osT~ke-I7Ir@?4l1YqXTSG+ z#>ruv6GN2+IENXl`~M+S!a3>q&6Kbl+`E1($f%6Waw#I`{tC zngW!N(hRRgp4&KPCarQZH+?eVq!w^3wau_PB*sGNn! z!rPz{wgQzdQO#r?xO=Z-eN`HxNoB%}^^!}Fy*zFOt9Ya60A!enZ@AlS%{C7>X9{C& zRBh%0uLlqA*-}(Hc1C<}B5mgrA{Gfoe-Y5YjT@J+=jA$lvetb)*!|iV|A(AArU89o z9Xd&w8Hm^oIOmpYGNXgnnn1`mSbKZLX!@3|Ay-FK&IzQ`TD#jn#fcC|OueC`(e;Gr z)V55O51unGQ+QkD0aXpj*l8(-z&y*hnzwIstQ+di;TFquoup(Kh&lzG;)QkICi_Pl zXeatYAp8Sc4ZAd3TTUvF5yCP%?G65iRTYzq%@j*BAOhCkZ(SQV2}q>B+$V0T>5(Ul`v+uFJ(rvCraL0y__! zqSzx(eq-x>7{LpSqIfMm8vNc^TopmDZKEg%^(u6kS?+->7ps$gZkBu21X~)Z##j`Y zqct&*Ef3$#2FI!)9y93lERsR@A_Qc#Ai1}7YDm2TF*fN!CDd5D; zr9RJ_^~mFCyW1Evnnyul#w)}BNM)C;W#hg7np=Xo)h1yxfz2bttNfc0{RbsDqz007b?2`M~^$s%r6=DrZ*9W3LG18r&yD-)(gKnpjm!w79(+wZz~KJ0==HoA&ksb`X^y5C!QgyN zQOPFUaqz1GOB=G`GUCP(^{(9ugsxg-QTJuT{%@;|R>@KM0mRXgU-pYePgiSu##@k^1FzIkDQGPu$Z6N|t! z?#Zn!A1`#M8SK-Ld`tdFeIVe8_q)YW#`GWevMPB8N_Y&eVl=&bhnRAkH&K(qKR>3b z6{X3{N|^4(HA1-<4nnHbL|ApugUM$OAbiU)f7f9?yi~Sm>0?Ad`mHV0hfauYTre@p z^NwD9{V;}hC@>?D3>4~YbJ%*MG1&a^_2QbfdL1f{Q!q)m_x^%X-x-EMRQ%$kLi|GH zUp>L)l4P6!r>hIwatA z3+cX|Ow95n9i2D#Wv6396r?IlEKM1NNnNcWvlp&RWx^uu5KLm;zg>_Av-$Lw*Gp7N zkg?xgee7E*6Pm8jG8bo-2pQ zWR%Bh4ocik=UfX98^U!CI^`p_Dc=#<`68}GVDG50?UB#Yic5(h;4pld69h?ImU{|skrAS$ z^AYl^My7=l+;v*@Z@UKCs#+(Gxay-QF^?+<(y$I;(0Hbk{Q*|`6fPa1hoT-*J&W5> zO8L{)ZZ398t@d=~yF+s+NWxthAnk>Icg8gWO)IH;F4g+}V_nthuaR+5YlDArK-+VU z1VI#;*w6p=JuFYgrvMTz)s9{G<5!8hxh&`+b;9n59$y=vfb>83g$XTmBK$EBNB`z_ z&RZhNYyW?L=lZ*t(XxW-e)HJa`)Ti>-nA6kVN!X4M_k~W8ocK>DvD_p1R>_~9;gJ# zFRZZVk&QYg7U_YoOxOzU(S13ix2Z~;LSho7howNf3i#ZAZXPr$CQGrkZ5G?wxE|(p z{EN$@zXg{@EHBw5!H)qSwYsP)GsW<5@+`m9GGnNK8s3g6>^fxB*gaXj3h@vy0+d2g%&BDD+~2dZD4!AeC)(5Wx=Z+nl$z zg4Fm2T~Ct7a{-C9j5SP9^wiz7SNbbmPc}nr5yvCe;_5w2ut zpc0p!kkZSlAxRpOOF{H*ZOHHg00bF4tl464wRn%aY+B_npAa0tx5ZYus1%Tfh(e3b zG%^r2tJ%b0^(Q&v+PJ{b)1yv85$o_q4csx5*d$$NGOj}Sj<9HN&3TyB8(Ty0pQ6(O zyb!wwg4z3C+HHMAt!kpQXJHc^BM~ott?|$ySUaHDZOn{lE|GpldM})e6iB>Y#_|{N z>>8GbZ~Y@v%w}qdz8-g9%$J2IaQeOQlt6kx{L37$lY7Y%U@l=iaTj<5bi778tsZ`5 zbvB8X5rg4~>iV37(Hr&?3kTf)S)kLM>xF$OI*)}cVmxN~oaNb%KTF&n>MBH_9PvmT z48@RSi@dK?T50iFerI70!l&!>g7+z)1MkPpEEVtyxV+z&;+KM61aGG&rsORJD~Bd( z75>ITLXMU3Ss@|CLm@X{R(0fcYswrRYcA=M%Sl?X#DgXNfOor==~(R6S5ZYqOjrDIG%1V*qrV`fs`U9>ZUVlYAR>`YRYv}m=e+=%M2lr) z=IzEPi}hCC&2G~^Y+>f|uSji&Zw23j5&W9`*rG1JNc#1X&Zlsecy5fh>4UaX~7=kub9opX}0kM3rlASP6^tnT$AR!@g>Yy?g8;;CpwzJnBh(V=%Tlb>QPK` z5qtLfnz&+^Hp3-$kR@6BMHV*~Z9^by;51+y!!ILiTJwc2#rhdKsG43kEVcn2myRJP zu8Z0ZKNiS!J80^f7&<6~D~vw<%)RbvBvEE6CGBIQ5a)u#fIx3UoxUFcf`@13Z+&~a zT1d5L!>7HPD^iJ4kkEZ^M?e*ZgXxH+1x<1(RrUi-^46v5UAjdpwkkq0J|)QmOwB!f z!@XkBnM~l}PKag{x@S!&+_UopBIAmLz(FjCkmx(H6o!}`%k;Z|dN1{boVn6pj(Za| z0bH<$^fs>x4j2cD;J9^KoDxZ{k2Ijm*)(af;JLV7FUVoMk&|yJz^U>dK?smD{#q|> zMgVWT8LIW0snl++5@^L#H!%p7OAsds?lg9K7MzxkJ7t-|EL>MzV2yyhU}``jnd8y~ z4c+t9*@%S&hwYaI*OL4(s?$XWg$aW|(v~b1JFep_2WLMT*;j<_lw=uo8TEHQ@x_@0 zmdTg9xvJ_T#}>5<6rk9*h-c+8SpYTlWDAt1t94p+LUlkc^9A^Ypc06&coM6V)D^ zA=Er2&32*qL!Cl<;9Wna<2wk?O&OYLvuFQuMB2up~!}H(G2~+ zQA*@pbQ=aS+9Q;S5AP}r{yS4zh%aO`Xyw36T#1p;wGLtv!BR}oCJo&lEfMWLz2oCm z6x3TQHJx(vkWVhP;JvZJ-N5n}ZfYRd_kayAcSE_SS&E7bjtqCS5&y~soSaTuaM0c= zUHhQz@;r8SH$Wc~yKnpIG{@*8Z_pTMJWdfvZdSU(_UpAUKb}{MX3RbncDm^xuNN?B za*#%ZocP9k#!*g<3t7i}fizX|j}%)k{QRp#QjSvEGHhNEY*f`d@wakdpzF+8x>JT| z74vO<0b^m>0#G8eDR`U_wQ=My8zj2squ zl=Z!X05tSn(&4^NbjjL&`G}ado~>722ps1$Unpm*DZO=O6XmZrroeIUeM@637Ha0> z#~TPq4s5`CT63bL6Xu|fWIutEq%m#=QS?)d$qlTbduG+00Mri>z*SIBl`D?b8)Y`E z>a~YDw{}aLfpVd`vt|g?s4=YQ*@|`**^Wo&$H?d-bt&~@jGn*`)~~-w!E^$RznLywEx%DdXxSZdIn{2cv#0WM(*XqLedqC2T6gQpHV|HJGk#jRM|1 zO&w*Kiv8|N12_5#t_Ph|8ct^{Zy-wKe2IOt_6K=hFiX&8)A8LJZ``0RfgvQuh@=dR z+`mBg>J*Hfi&j(K)q5^ngP@&7yVc{2f?@rhlUOyy$!IZgID!n<9m#eg2i(l5n-}x;Dz>xQ%Cr=!R0W-u}|r% z&t4GpVIsJWJ0E^0`w(TqwskT3V|)Ybl3Zb#pfmZv%LBx_{FoFFke2{`Py=0}gQA*i zuSD;i7v}ajpr;(P&E$8710dPpi#bK7JpuAU^oEwrhowf@bi_X!P9V?mIr=NBC!9;Z)2F+ zEpn=mb*`TO#+$l}P?lwc85< zoRt)zUsxgDn;#*;`k8a&T?iCv8qg*+ zNlM{n!$#S2R15D49@p2CjPi+-f5jxr?DJcnFj{H3k*B0&_p*3-=yCV$_ct9LS3&M1 zHq4jkTD|$@Kdw#kE9(6rFxxiibdh>)gTeNScLcP1bU8j!O%ggR&n$?BMiH*Q`Nf z?Q0Gi0#9y4jCzMI^wLL1ZbTQSX2qQYp;BDzBoodY!%LBma+50LRHuh`&3r&I!Rnp> zZU~)>)Y1z*j80!xaHyBpScXI@I!Im-Er34^-P*KfOE~DNX22&ZqRq4lAEj~)cu8Qac8YkkaNg?`2-j>H5KuZmeXx+-wz7L z=x=W*d3;T}SA>yPhvree&0ru_WTnXk0 zS{@~a&YNWs%8qX1wctoCQCq_?Dz;D?A90v$eU@1Wsbg^VcZ!aM$iItMd;c>@g5So) ziMRYk?@P}zJK6#&SM}cw5_BfLCOQG<;A$uq;xxY?RGd>ZY7ca&MrY_EabkM8`$enH z!@WR1?^+-6Nz~kW27RL0+Oc!o5w=gAvsO^gp!UEr$M$ZhbtB3NC z`>?KvKs?#1X|nl|?03OgH%q1tSnw65-fQ`}BX96p)Md)~Wxbzn*N;v5g-0d&MZ}#3 zR}qp~^##MVe4Lu@3E2Kn+JxkZa&J`gFNXIhz(lNl@)rBHgs#|z1h6R_^+Eu_7x+|b zgxd0tINBj%!7)Z+%Bt%|B>gbU{+VsQTMDESAHm=N^6uxjUV8{59u1gtgu}oiA0B8ot>ncBEMwbdv0P*W>mpH4Uji#5XE5 znUc2uw%TCgj592fB|ODu0p;;P`i zxZe+or@5_lFaM$`c-WDhthZ@*dk{WYKb!wT*UxOuqehbriedmxXmsi?n0yy9_rUz9 z_%Bb+Z(kD=YDy9Rc*STk0e{JxTd2~+hJiMscQkZ_JmQIho!W&v9ijh!TG~0;xA5wz zWOFD3P|Uy3H)yYvj#Nsnvlb*_NQx1O%`Z=6E^Dg4$VJ0FM2s_g^ua>XWPVt@*4a-$ zl<59a!wO#y4Y3Vxsh`WM!A3Diu+COd1yFGE2gXoQxUc{lUnmy%wI$FxR;7VL!qGU& zg)g!l*nAgS@!F(Tq>*T?Rz>in)12_opBvAcx8sBR&a_XCMCO;OK!3E36l$qD;@D7G zrmiPd)?=ki!F17oX~1C2BfTozrWUU!HPoV@9}+Eb4y!evM-hOO%(jNgntihawigku zmfGv%M1r(9P|!?5S`~HQmezCCZ&9s15ubzZ{hbjd^X#J`xdL4^IrqFrU@8An{&I61 zLMbD~jYj({NEzV%8z*_Xt9#=E$CQ=u%tP8%na~HRfE7UnY%@r|wbFX%r@CHbJKNDH z8-PSd1>>Rrm~N!vKIctItF#TDXL@yZeSjz@JqCh}jX3oALKHMWlk?O15!{GZ|hKEXf_k{x;mm}rY?vGTqAHjJ<<3P-^`|B3$ z06#U;%T_c#T-2_(8V~Ha$IX1ej~09-!bPKi{OP91BlQ&EIiFtV@WVVviq*o2rO1*3!AI|6^ ziw=+k_&xprJ=+B!#cBK)rc14Hf!Svh&AB$t3MPQ@Z6L{8_h41mxq~D<0)CO6fdC&T zL5O@%jzb-p-R-VLDzy!H3Wlva2c<2UREO!1P%aLks+SCPLJapyJ8Kd>e}m4;<^yt2 zW;Em^Utv76OX}ry=&rF)_)R{-rKS2~aoXo7NtmzvoC6p_tR;xMOY5n&kkfxgKX#}rpUWP~E*Zjq<^Ymj zvLJ+BgboKGo7?#wNyVqHp*8wJ8@E0|IN9%7GTB1XGs=cIh$;sTc8w3 z`U(TN+I8yG0iX_=xi2IyaY!o+r#@tVe?j$0$slI19^C5P?q!)Qu2R-iV)7BQgLEKS z8X{d!v=dFMIwSNEd5*Ua@mwa{r!VaLT4c>Q=CNyr%XQM)kSZsaEZ{zLGJ3KQ*)^6R ziX$Pmo*a3zMsdc@WU_dhCh1guQL{mP8sGj#PJW`LNHGZW>kgOq?2-}f``CviTOR2En7(5!B&62I*De>XcI%JNE^y;IS1 zrXlPzW^!sdiw}@!@kEMOEA7-_w%j|(dzk^nzqCYGQ)KxUiLqid{hV$frN(BiZpg}(WUwf_qM3J{k5nfP`!XWtmF5xoA zdaQQHBB>h7Oq|;#ub18S{Mj$}y|BwJ>-C_MzRfSR9uJc!YNFY7$D~B)&T*_fS zlind5&%|DjXcaQo&3%yTC6ijVGvWlfo`2#nhl+ZI#!mMllg|9Bl0i3539B>)waUZ+wApNgrjDhU3!ZoGl~$KpQ&M$zGB~* zDS+-)F+>D1)ar3kOnrKJl`M}Reel?kSpNeB<)}mfGY}IkIAO}$)m~y<*(aQq2iRkT zCs6li9dgjUcpJ!Rr9yd{Z*dI$#_BjO9R^pk-~@crR`;}1oT@2bw=GwhO@_VLJ3OE` z<;O2te+_QYG%FLU4%m3WZ)mL@fp>>2P9<+=*J=m~UPRQRC@AFl)jr80c&kT@W$yazgNwuz7+tR(r zvqE!Gv?UL9ziGH*M>tuR`%<(b(q5xc^;Sccx8^aed;}Q1pd$( zjvgt<5!u3{tud_#~ylQ-}x&K!aII2sPE_aAD-=2q9L zb5&`$9CI@^40f$)yhii7IaQYssb@)1S>&#McCOEZpwwX4_3;yJPjcy8m-b7~p39t9 zygd578Ch4^_J7ga1f@BJXW&j#)+L}i$;_}Tg{xWRRIg+Gax^(}W%7UCDGTQ+7<+Nx ztSEEr9`)bQTUYsFc^B<8jJjmGAlB;Y(($JxHl>h=(3PB^bB2pWaT3&>HoWHxD46F=5%a$D_m;x+176WkIF^wxrY@~H***ku0 zuul7UXTBr*UbL4FtVM4ub!NyXymJL@>q&|>Y9@$hM23uup|R{GuXyrXsQ}nk)RJSq zF8$>kX<9X|tiinj9YR`F^%I+h--;dV-@$nsdU7sXdHo1ASvyJ9z zAN!8MdvJ!$WUnjvr^^55j@4~atS&E#`Gxc>eQSboAf_IL1cdu^s^p1pXI0Jnk1;g> z^h1o4FC{N?NHaQFc!Ky`%l0K!k`$@~a1P=XfX0q)!+@1(g7P9zR|7(l3iJNXsFNV-%X0 z3|~?%{PG%rbt{E!vdVUzq%AHI=|em8c{u=IXV%?BnN}i1CH=?}{)SQB-d+oCB7vC+ z#G}6Y`2>_tMGuIuNHimYMC>PAk!FZ|jJr8^1aJjI2?&yYyO3mpue`lxzYk&wpjDSH zvmt$PItKf}R; z4;~7;*$M2wI}uYdtj`-Jf#U@aNz#e)X%8rYY<4~|*?_Z5q3|KI#G2)3O!E<3hl;5* zrD{Sz>hu#ISfw=gZhko3~_aApMS{4m2U9^YO|P@+baDqY50C<)2!6HvE^m(9N0VNKw?yfrvS2N3kFg@_frC9&y~JWn8UMzSjTM# zKp;DnW7X`0*V(-#-jQie7$#}>qG~{NSIEw;>|=vhy2g|SWM$BDfCc#MheV|#lbz#j zL-xG^n1oDZa8Y3}cGRJA@8(YtpiHEJw~~;pcmcBX#?6)7;&wZR3Bc}&MsEc^L`Qa~*EDX?~YK3;Ry5V|*a{ioH;M3a5?+xE$ zyy*9PGnOaq0y%FE$om2nJ{m?oW-ztQgkkpMx1y@E63d8d&|h_m+OW|dHy519;;jb! zIr-OhPi;4nvA3bft}8eupw;AGFtO2>Fa&j%SP6_$h-b0B}RxkF>t^n&@ejC z@pgc{-*8M9MOp>IGU0bSFV|iaNEr!;`>E6|r`jU{if% z;1iOZv z|A3X?LDWkUu?JAJ57{Y-dukzahkp>qMT7$ghtK7|MVC_lWC|cbDvN_Oj`eY~Wd_Ue zj$Oeh9kzUYVeu2`J6>p^iOkS+f1s~UHt+10(~#I+_6g?Q_v9Ua^2xyBlLyYzeWgk_yaA|Bpz*wsn0>(8&10y3 zjE45wv`tBcJevxVYyJib?;C002{%KZHr^jlsib*N0(jUlM}6)o&H6;hRy??UcEdc#JD?;zZG%z(-^y)7gC3TpD zHALQ3Gk7k47YFVNAC1NX&1}a;InsPF91&VW4r z4~&)hF|MC|>9m%0SGW}Crnf?VskX+&nq*fGq$8QQp}P1zW+IQx%oNPb30HAI|44i$ zHIk&WrY+|q>Lv7Jpe}}*uSg<3>kR!_Kf#WjBte)LZ)e6T$rWDhiMmlAZ(?s>5ER(7Gw=QJTtOX@+rgy^AL`n zyziB_dIfTxsiW`;(2@eq#gMZ`DXRKaSubL=f(a!-PCyJQD;X$GsP<&?&N$qNQElL` z8c))H;c+JvD1suRO*@PIwo5`6PpT9JGd|yQ8~nxa`A_Dr@`%PGjEaWu0sX%N|J1%! z#cyLcJv*jLYC%{sgLcq=BcBS3N@*mrP4O}Ht;>CmM${jtIEN@R*pz38PfrQ6vSTkY z<_u@x8wsX(MgvMUdBUx7phb!UJ@#jci_r&6eXIP8t<`Y9X=ss;$Kykh_YYF)%)!L( z0z~m$(k)046X{4Z!W*yQKZPbDA%kSfx07d{XHB~)qUN;dqE)leGP{@rN*+L_*+#p7 z;%Ma1k5lHq^yqMO*g0Hii8b0~?);#1>p1Th&flp@ds1Z=@5g8vqt_>fGbH z#MIZ$RWw+B;Tci9j_Wt%)mwpf_Ah#l0$~aRK)Zp;hVzI5hUW*uY>ka@>UK|J)ZWIK zO~af{d#oZg?t4%2hGzO0faVuF=Bk?MSh#-8o27C9@v6Y7!HK8$*i3=syX}=PeJN>^?r>l`{$T%zC_=a5%%C?nNfy z`mj-!cp`V|{2oGKBUiiHGLEDCmMMj7awNnlt^!IPX&D~v$A6!Qo z85xVlBXI>6kcGy*uNg5e41{l@a1$&%NX3T#of z(8t=v1>74wkrZKEsu~uL&q+`yYYDdl-Ob9(+xw7D3tWYJBy}^GKEQDVmvKPoE9AmJ zhQ&)g?h&YYj)7-VgF$dSAuzABZ+ha^n-bfR$S8EUaz=FfN-7(^xnAdp8p142>6QJ*zH6)U6p_KtXdjrx|$@15TCFenj zR;Lcy>wjaJLq;Iqn)Ofgnerf$oMXyK1F?$9^We0wk}P;q>|o)95R4x$cq5CxM%OqC z7Z+9YUoTIGD9VJEX=QpMlAmPD%o)-@?E+Rcm*{ifNkleCdzzDYL*s8^}-`O&0`IE0*iY> zP}0At*BmitZA7MYNov8g+@2l% z)Mz@j3sWPYtE}~xDb{N;ZyfHqRzLTpTQ!bK2cjn=AvNO*-%fU93ZV_QjwZkZ!d>v1 ze&!qvtYhp~T1{lTo=)2Ja05H0uyNvLv6-Zb>O-W2iSo&zM{F6CUSjRs~ z56F&Oda=dlIG!P$*^N2MGG$RV1PTCDK@NtUaS01HKC2KbO$gP7WQ?b*a?ZFiXY1IS z>_?5aLAhHkH`{`SOsia8bn`p#*SsNZwc0>b`et7uXWwW9`gIqySzbSgVr~oHz5+qn zx{bNW66vg28?%5FkDtz88T3_vm+-9ssW)c)eexrQfWDu@9!8TOg`|haYd;_+z5k}o zf*2~#bUwQEt+;1=!@8ga_Dsm6TTk3QT``<5y!K3n5O<^tP%k09*jADL5~=QzQ0)e2VmxWwPXFuh~GQ>uF2S8%`V zHYNj~G{npyu4P)PZ1lMNpBTT2XL&LbfPY?VS{>|=E9-M>ChEp+mPC<94Q&YzF0g(Y zU=AQnE4oq=CdZgyC}_Vw)Br^;6;hMz2OwooI9V3!VTU&2?@_2`NDe8%V}GzOy5%+wy+JxH+^>tuDu=lS9oZ1b7B zO{4A)?Q3jCHh{+cKAst}kn-}?1!W?2kKgA4W^JBxe6#w_wlgE%fKFl!N*aj6N zuLvROB(C2@dfQ)B!U=xH?;VwgTCXjqpE_CpTp^W$^@wPmB^bZNf(n%3!9#FIBy3V* zyv)ghL9EnUJA>K34oVnX zy>}~?E5|0h21T2D)VuxNL6k=8CbH>X59mgRTWghzTJ|5F^tym^&ejBmr(A_StH3aN z3-NruM;2@n!7Y_&RzE`dIXj#&0Y%e8#+!uCI;&5mSz&#~9KyO|zRg=?njOSiwWH~Z z1h8Txu85R})G_=$UZI&t6Qrq0ael(8dg);hDT-u1s1Ygyq8eQYRDYKVdl~bOd5qpd z2O*$~Tidbb%4DI)B1)&o=dE@l(;pv$iK@6Lf7QJ4RwFvB{!^EHvef604@(89Vch2$1#cxRu%@<;mPmwfLV+W``X`wx@vse_5ezCye zn{Mx~H?r4077wufliIRFrV{k=mJcjb9EqQ{eSq=P3W6wgo(Sj-Ly=e5re$fqWdyoWMC$(u(>>DRt-MVUoT7mgQzl8>fbWR-_iR`dPf$UIp zlMO6t>le2RPbRF`g*3scG-_Np>RRb^GJHcw^ zB4M*%YFZ)s*JUeWmnkZI111b>4Jxr&1V zQq~6&VBYppIUfU_-P@BC_5e`BWf+$iWE^tj`n6lcyuSCI^$F-575P0MBiUuYYh^zw zBc(;ou1D5WT_O!?JY#1tDw@WWW-J5U8X$qWi!=q=9Mqf(sXEu5ZF2$S-a!@t~XWVcc>3E;d$d4DRKLE_CH`+mdw!p<;@%NN+ z43}L4szSj#)@Q`#cvVE+Ip2&3 z*$R=>xhTYB_By@S9Gagyj-9_qJdBMj{BZgN9|vVgrIDYihZOc{HKC7q?>%~AR@GW? z04h-xlQWp=NGjD>yLyv<$pVcHj@myjG33+SoEe6Z@Ks$4j4+%0B=OHY z3E63X#$Myfl6L-1haNPevh-LYllJoD4H>>k+_55Di;OXu>=Y$^EV*aEu7(0K;iU@P z0`(75;QtmtEi>V>3$Mk+XzXEGbd;%Fk7qzf#ic#Q^7Fyg)_r%&D@aNVW=9{>VNwTB zBEvZ_<}&R2`+GV;<4YwDqL+hQA4u6&1ZwycPH&N=9K2BA1jK_bRcJ$5e)kE^) z<#$-tb7G?+q#1wq{zye|6o zYVv(NiPhxE)11SH@K|ydH-Oijw1=&a>_+pP(udZ507YdQ4f-OW!fuVYB<&z+#%ce} z1vjH@VSB}Jx!FML8{%(-gxFjlkeaMGy7;Vik^FAPCo@Ku{Uo7rYAzn0lrF1AN=m4@ zUuZ}Xm=X4){_#%1m~A-=>!<~9HTLRD!T|^AxnTrCME<%!^mUh&Li07ikgIBLUhPbO z{TWd+8MJz~udYqTv&UM_o+T%y&X!E#_rD9e+p9qq95N@g^u>&jI4kUax;v-@K1A*+ zrrGEnTEsn$q_@umZpt8dG|)#Ah^Q8-{~>wj!&}w=h#q&9pFjF8;#lxf&n}u5kYE^C zHa?KM7>B2Z&Ts%w3?xZeo3aIGPF8wKl3or)fUQD`k^7u!O6VORB&mPk*!BG5D?9XjqD$O`l! z0FJaEkS64!ilGOi9WnzQK|s*EEcn1UR>xW`Pw-dXSniL=D`T~VAxloEiUnl|7LAu! z2puzbxc2ndgF9Fvsx*bzc7ThQbl^JfhV)dI$yx8TQ*0<5hvU&0<4q3$O&^aiPP2@1 zYc8x$TIVN?vaVv({y_3vvj;ut#$|UepgaIzx%+wtrq59iV#he&vaY|JAwb+f=={nM zA;>=xqy|Kfm`%CRgZsAMyHr?ol!`SkQ$cQwr8U-6K#tE{Ap!pwAsH$R0vkVa|NE~K zcXQ9c_9?HtIUuK~`{%9gS!a(bk~M{9Q!_O_eD#H%Y<4v9Q->z+PB2O1s( zUZgeNI`5G$zUZd8YigYZxbyRu@nY)E1?Mm8^B4Op4Am)LkC$wPBP~@N(2ueaD-|b+ zJY0(6->eR{iXUepo0*#Um%cy&)EjEoac&e>4oX2drC6+tctsiCGsOr4^hS9UXSwK5 zA@&f?#CN<+aZ4jgummHtL+}ZRj>b``aUVl%l*p_3dzM8eAU_Jm>mK)5a$zarQ6j#} z2XuI-g3*C~93Tt78a;Gifn6fzkewq(5$5*KwTcM?+sGkw@euI|8~e={H<-eLFH)Nv z{r|O=Ut~m9@owp69)2V@gG#-hYQiae$C2|c-f}X=f&6+y=OU*YjBmu7_~7tZj$ayh__T-n2$>Izf)OEP%{#LaQFFR`j5K$b?IF8W*RQG>Eu)dvb@AP(5+hoX!pR$Zx zyvL9ud7~<{#s`|Z9zY$Os1e|{uaKFT`etub?Do}T1lh?hd_=Oy%Vmq|WKG3|UzN|; z?YnjF7z0}>cp-S7ga|Sq6Y2fem5zxG8em)ze9`VXcyq}7fL>nD3RE%k?7>Mp4qxra zloa1YRlPw)mFRl4hkBTEK3>bu4DkCbzdVBQbSTEB_e&^=*U6B(?SuOEZ@;}t&>*fcTVIx`IR-tT8u?kg5?*!Qn;%*}u3PLZ)7oy&Qo zFk(s+FhpLkO7WyDf^vx1#o_+Ovk%vYA{x<;q7qt<3FgbOcC}#gzIt)9>}pMLv>9&3} z|K*pXe8dFmU&S8_B_rw`9xsWr> z1VIKC#D;IW&x1yA%C0gEud=Q(tu8}QgX-aVF)Z2m?7&_M(^BnqmE*!noj@a?x6VVS z%_$j-th)mk0AW3AS z(b;_A7JF)LSc^of!cbmcrJN@*|EK`Row5S;+WiN^vd$7~lFy%x6udodMeNJo55IY! zI7_ytf9mMrmPpz2{Eh=wq_uPOJw{Jp3H!n6-DOKh&WFgK^B1l6og= zEi70)_%^ycx?0_hW0fUFwmeX`PVskJu(DUCsVz&g{xStU5o{mlSu)PNJ{Ls66p2o~ zMIUv2z5JTkA}5882&XP}Euv9{qW#tH&g`T0#7-u*MtjIwBY8V_XJ`* z7il7E>|c1HnJ2hdfgBETWHOyHl9seil%?g@ZAm4w_p$?-7>YpU%yg|G+k=gc6{9f2 zfq^kQkl{hgmNWA9WcdFiwuqh`^ca1hbHUqY~KMf_`E_sm&JirpL$YHM#`I2-R#Ipq~@zd8|F7(Ff1o*|g{ z5^)f_SsDJ{?)TN1F!3~H`BnM?Qwh>D(XqpGE7(fcSWJHTA~1)+#s211IKk3QQ$r%u$HCa^l*d;W+p~&g>%;=Hk>q{B#HBFAELVCL>Xxh0>EXi$WxpQporE<`At5_`1n0fbqO7!L=b4?^TBA>Y`sG9eQpCb6Sn*nBxBx!#52YUY%7!&%}FGtIPP6% z{>SLzmerQkv5Dy{LFNr6oX6avlep$Ow5Pw};vuQCfhQzz@TxJsy1E_nJe2_ zXEf`SpTW4CG@z7vgU`0=!k)7FLK^d_IBZpvg8`3>p`wb8&X8#;5ke#~6rLfs zjYeXIo>&p-_aQcN|2)#VzD7_P@Y5u(f!k2d%jBlfUM7*Pg@si8rT|$g71x(Qy#;$j zYza@ngZUs|zIWD*e?Zhs)e`72P#E;BAukHuC7yjO>MEl#hHF9ouPb-m>mWhTIb03i zHM_wwWv1vn@j{J8wxNKq*F##A!v40in$MI4U4%W?5+!-Vj>`EUdUNJyD z`aS@*Ks0jl_}n{dc)xohO!ePOR>p~P9~ zr8{kiR6puK`RrIE{>W7_t%857a4k4Kx;ySzt zq(0KGv4Z)j^F8P%&Lc0Xrd8jL+DF_~TRcN<6Q_6F-61s5)E? zyOxr_T`j#@F&d6)YJJ3`ANC zP_RRl&gN&z0_p9TEn$3$@FZQJlq^JMC~|-u$#8uEL%cLXxFI`iryf;^tkHAN>Kh+? z60i(KD2c{GOM7pKUVsO1b8YfLh`-86SC|_`eFoj1L`GF)=##*)(99KCRZ2}%08?Cv zqVvI;x`sGf*s^7hN{qTO`G340fUt+TLtkQ7GY6p9hBrW6CI5cD=F@ywCZ5MjO5bXn zu8jVI9Ot*+dW`&fz>E1^upvaS?*g)Cty()-p<0K7NvfKMK_@*-Pv@ZwCY~`P=DV(bd+|`{`4!DZE2WD zcr8m_l_9uY`E4*y+Z_3=>Vjyr5R>ojZwLCt*(6(Z+>_zJJcF!Z2$7xX_PVPg(V1AI z$bNV!#`Y(FTv*dzsdn_9EXQAn7>vg%@4cNEdNXZh92w4V4i;mAck~9IJL-lcvftgR zHMAHLnt;-FYS4ro;u%*?E0Q>>?CzJ=#O?orP)#U`Ecxp%#$j%yl8cglW?ejMyLXPq z$;TyGV;me`C61h}bw6~+AI_KiZO%k{`;ZZhwZO)(&CKDyU<#igO7 zf#-EIEdqgc&e7RH*H(k4R^)N^3g z1F9lfjB^>zb0cn)rVV+N3VQro#P+z{L!f*nkO&P!p{pxKnenGwemdpZ0oDCjj?{-u zE~t&UI^?rAAQSGY6BZF#HK{R(?owMKYt()n9S=c2Kd8NSMQ!H0Ior|yBeZ(EXf&tz zDP{>P{2cH0p2@hz1ON|LKpXvUs4=Ub6?)#+1U)@j~eeJ!X}u`OvRaz>N16 zyHNW;xZ&paGUL1=RW%rY5WuSb>}UPMol`lchUukB0tMD%t^_@e;B^aG8j6r_?dimt z)BPZ%!j$BXwowZY^gV5&LE{@zTLgb19uk7wKG>G2_D>NzPBI(~Uz1lN6}|5QdPuv- zA*F~?q3N&1QoMnoScm};MNRXl1@2tt@&qS2v_>FK<>Me$0g1#lP{x4-`$kuTMGd3J zd>jt2s2XdK?Qm-l#n`3vB=2z(lEN#7*+nqM zJjE<658*eilz9j*C(G7d0c8mez|uTOgQV`T9JvMHG8FdLfv^rwj2>|s_jX~?E%=@w zdIuz7H5!kypOt43we_2pvDw!{;%w#-WqmkuS8fjz?(W|5csJxwG1rG{&ON$U)j^61 z`GJxVeaMLyK!wd>V*fwr1~5a<7vWp@-tiEfAwFup$&sK`p7L6|`!}n50$xP!?KsPc zYUDit@>>Ku@rYOr{3|Qm^W0LV>o|&odB?Mnfz{nVISGmks!{He*?Ce#y~+tocRLE-6gQYt)Z~bt2x{b`x>= z-n<5ni_EZN01@iOhg$~C=+G;9f9UajX>lDPhQbzVQ?I^N5Cy=VY+nQ%g7+T3VY5BU z`f*z!ci1P>4wTz&7P6Why2o+>cf?y%n>%QH}r^LK4Gk7oIJQ#56)n0?ge{$#*`8p>R7Bef{&BZl?p*8nG zWDWqFKjYGR_%5M}(F7GUf8pTip-++;vyjGSjiI zU6`^Lc_;?;R|f4iZ%y*XE3L!fm9}m_eVgl;?6@{>9dcv1UO~}&?MHYFl0DgdQV1a; z?8w+S@9Eo+y_Zu~vDJ*7%i7%Z>fv12;2L<_>6kJH806RzAAezAL3JtVI}!tyZ_qD@ zo3z4b4{JEN$5S>;RR`{4dM-&o@Y5CsSqy z^)^z?BeC#oF^so6Nnss&1Y1CdT!Z#*2J_2C=`vFujv1l}xjR{X(UgXvR?b zX1IwB3hmj2%nn@2LpGMFX^Rpj=c&3p9I0o2;jbb*Z{m~YVudE`=?Nk0`cF>C`t?CS}>Km;3N!N`H^5B?Q){k5tcPFq3I{hcx*^%QPFT)-HO*OUG; zyV#Wvcd`7daPCz3Qf=-p8GJY5fC0du9x z1;{_t1c&YN`v*f+4qJcn zG7sty&1cx+H<9A3CUV@GuDMx}uFP<}IW3aKrj$9!&VdSeJe4J%bT@onL)^e@7q40? zAlt!gL0lP4_QJGx-@CxO@%%$T=O`S_!s` zzRWy@Uc9Fvf=A&Ys<=GXui4?uvA1#{m30$VlYWoiE8ucPN$#d z&%RX{y=?9Q2|`bu`&CUtWbeU^ibzD9#S$=}=mx-7sDs@9s@D7M))bQpbf*|s@f2_x zPZwXL&PPMFsTU10m6(lXl33Tu9q!>7f8H-M={*oD$(bFnN5TB=cy-P|yoyp$Fs|6c zGpEJ|L`r}#Lwo1TPqX~_4geOql>7N_#ge4iBV&PfE=tf6zY_ZPhZVL)(t;53Kr+l( zDF@vkanvtlfacFB7C6jD3`>vAupu91MsuI`R)=#v2KK1JW1NJPVU+0?f@p^s2_ zM+BeYPhmCjN;Qd8m;fmUtEI;A9K@G+*?l_~Q)yf69%@F`RdnT$6Wd{ z7++Qn$Xp=<-_OT4FjBV2Y%}E3Ly2`VZ~@ZYY3xmpF(v>6v0(6it_Q0kgV~ze2G~!q z*x9C()9x~xN*lj*t{=bYKw`(trnS3+D9{^66r4_@#8m%DwT+&Wq148pVqJ}YbmX1} zXyHo#AhrX?p~e_ZDZ@gpSnr^McfYev0?$lI0qtzxEs_mi?L-tlhG%JA`=Fm!-)r`Y zWvZ>|Ym>KMq=;BvXIt;-LgEb=T^L2-@(v5rx4fi!I8^PbWMuux=}*l3Fk|1xO%tiT zMrKJYup<*e(VVJ3WVz?{NJnx5o!5SB2fCjmwMrcqZY8cmH2VmfVN=IL?0G(St%Bj% z3(I9DuN$Mf+$aB8U`@hk7)nd=;J#9z@6mqgo>B2P>ArQv4aF|It!Cj_Yhl)x19RPSw+lPbml zj#-c1)RqQaW1$_HNm=(pw7*l|u zx<*jXwp>EiqJ6!c#rj(#9Q=@~=$M}t*)i*ppi-F5Ncb^&tY}#9XOJ3uJgWY+6C={i}*s03?3wNy(9Ad`w5FD?xwTYe|P<~wQrj}9Clo7Eners&YJ!;s5dD5|qHz{&* znivUn|A2f)uV>t_qEz|FB#CrYRqqjVl{wgzd;)B!QKPNl+}00tI|p^op=JjnOI^hL zS^pj*oiSzv*!D2G%=HWbJs|-WG~cg~y;BU52U*F?mybs=6+Y8S;@%^ODj)1hQ6?Na zUy3m`{ixW^`rRw$)g9xG(tiiWsM|fW2AA!}WZ+>D<4(r7m^O5} zc3ZYpcyQ&?+7Gm0Xtkd#HaGs6|La~LmKDcD|3oKRAB|R;i|kFoN{nA zvM{5R{nMerfwU1ZGoY`QZUyFbdE(8P4VqI|^L1`f6c5?vrdsZGq9+7XuUuis=uyh^ zuDBd!@pSO>(jrrtH5H@ZbMYPE2P#r{Zck~XE*(LBcN786b6KpdGvLjrTuzRe-K5*T zA_Ah%lu39QHXnk}2Iy}-a6xTe_E?Pzju*d-rXP|fdD8cfyWPoff1MhH!f@nbOY4&# z7^BhPoB`Ve!vIU4WGYytX^-Y0#6~7&QBQcn;Muh6%7n!m1e*>T#1J<|sHQYJ|8zX{l*w2N;$1npbL4 zigwq^8%qUKV4w8;EO$>>jp}`E#`;3S&6dZX0I_PZcbjJIgqgWl+A<|O5+p=|IPXR* zQPqGq&W*f%YHgWXVc1Q(3UC3N;Q~nCCER+JA))q#`g-bbW>4IV6-x7{<;-gRwS@1b zFuZyJb&|4a>+FTP@zQ}eBJxuPg?uOT zE1|Wtgq|%XOAyA-or(<(3a3mvtuS|Y%r2)s=2BKb2PTd6otoby+iwx1v zAO2&nl$Xih%vMcrnu4biucd&K5xTqnj)BC6dLEHv*?h65SRP)gVi9R^!DXsg!87Ia zj(J4?Lc`cIl;nZ6Y>Dj(H_RJ@JJl-uorZ)FyFp~if&Oy2E#*kW_epxQJ(|L=$kc`l zIJsh?1dw-AYWyxn zaCo)a7Aa{IZy<+~*Tvl{e1Q7&h6(#8tMhPMr9o60;ei=l6r8(tdtYOkxtBSjq!UaW zQ(8gfnh=Xa)^LQ-$fTYn^2ZzC_Jh#~K518AWy(FE*-7jBwRo(kU1xmJSRjbf*B!6` z{;^})^1F7cD4MIlJN`(-8C9lnE<=yCNAb=f1_yDmhUh1*P4i0=+uq;S9SfuG9Avo8 zgJ+Q4(0XrWBcF&SE(|vT;n0vwuV_$U*o7TcomyNot#9jKUzMyOygz+5(%Ai0b;rCi zkW{S8=qu68L$DaHeui;NMck= zqFkEKK4dV+Ny(TOVqC-#$1@VsvEJ^gwNSz47oOEejlbG6_&_mRXzJj>UN6}8NvdqD zZuFafM-R<20xijUlyiYG;zBo76_T*f&+1e;vW}2yC~hG1d8nu;bLiSl5Y_)KLd0NR zG&Pv66&U@5Mwg-^S%&E9>iI}WDbJv9FiZjt-Dv;K2j2y2Xf$dMbh)nO0o=LVi+Ykh z^e>1uh?Clz>GU?y|4F2^rw{)V=2=hX2FW&3_WQ~?_qjSF>Yrj(=?w^2rd?trwSgoa zFTs9o%)+HAaxvH(^jY0~0#ika6|&qS`hP`93BX zshqJNh;P1{3xqgGBpM1DD{|i019vwkJ0dc}N$SY`=Aa|P@_S4Wy^6ydx>NXIA|M|1 z!+pt0!Xs2KrcnpC6qy@*=x*^_j=gnSyFFREY89e_u!V)__;bFYd}g(?$Ny4JQuccB zYq%&8l}$PTRWEEiLn}D_I`P+-Xt$BRN{gDsQ|&5}WJyqNiF|2VM=ia9gx&YWu(jPp z+tWr88smEXWBQU51^bx_3aPlU!G`4_BYQV|_;2yM_mraT;=jL9)KN z-&RTe_E^<*vI-ZH&BphF%`$ou!@f_N1qi?tuxrxRSaycNb=iB1oiPKOAghtnjU{eG z_#)cc2nlUxx_8h7uaP9BGh1CZ!vE4Juqzk@R9!NSdzh|IFgaI^X@*Bi?X`5y0sl!L z1w@4NNp->5DowC1LnT=b|M1p@-Jo}upAaKnoFfRI^DblfH}y~BzblPkd3Z?y6R+}F z%>J!#_m!5?S4*LM$OvWEf}Uw_5)zO0nqIZ-`{xU=s~O!F7#r5ClkJv(Q3}LQDcrsD z*#msAyt3?DwLP!7AuCveQW^$Xn*FVyf+{j%W86vLeA~@C@Mljo49_5lPmZu)QDz&m#iU>}!VWsEjkvDkU5X?c*GGZFtX zb@rfyA325~=56o__K8)g{cAEMKAqFU5d~$AxItkT{wZWEce*KGm&ibIn>>L>WpG=t#8hJ0$B!@7S;$y!`g*b{4trR~~vmuvP;? z=46vEXCdP?7sH2}0<9KhoVhmY@+fCk(m3jw`jXDJvhx{sKik$U$HN5wj19d?MWH~o zVz@!iz2k0}D4o`gzeSv2{Y61U(GYcjf>Cm2p_}n1w7vOi=G#BR#ZT5+;8Lzi1|9|` zhJiDF3kOa&?$Kvad7rqIreqzhcuR3V4@TQ1-zJ-l1xcC)BhU;7DgL}|T+Y>pp0|SUGOuK| zB(-PaW30yjqvdEH;Y>|a_w3VOo_s2$I){)XrVF&2ok*nHVUPRE33ogZa;kYf`9g?h ziLIr}5&gjdom(eENSp4+W+l8MZxf|~o250My0{eZ3Kx0=rQJ#z(Y`{mD4Jq(X{sdP zmRh-ukN$t0sd&9zX92K*8gK?$A|6m$T=LkDo+Q;I(T0btA^gB-UJ7m4Q#x?1okfCi z0vz?zMvYljOuvIR2yxlx?L*Cnb2jmmW!fnOUv$-OGh5+RP-CMHXa|WTc}1f^h}_U; zVVH9W2~rqQI}8G{b~uOJ(-Tk(_NplU14*5%1Kx=c5B%5MG>T0XdPkxp;K{dp#y`KO zUU>LQp*4-It{fGK=0CEIrr7i!+2h7u0ByHPyOQjfU-R} zSJ;t(P|~^WBSaBA{@vB^2R~XHJIzUW??}U-sF#bh?`R0jhU-aTE@Vx^IY*Gb(RR!zqAnpG3w*zk)2<;BEdK5i)BM-D3tIwNt8w#N0 zDY+VMV*^)C@nYi3pun~+O|8#9@+ZkLod!B0J zf=n!|JaH8aW;{z$nT2C!s z<4;4?|09H0?jVA2&M%ti^<54vZvN##j0n+*v>?Ljnjy5{}893FG)0`@ixkrsg z^J=%@32mKVUQaegw3V#C?j%V`#BRp$lh8$mHK-phNf-98B|NeGzEvdA#oX~at=+Ty zgQtnUj!jmx6pu|Lh^O$pOdy~y2h5>p)1-)rZTPO=J;jYCK> z_$||)J^M34qTGfqs!;gWI7R$C7S?4iia!pWYqK3lzBq}g=_P%;wfbeax3Q0A^9+@! zYb!KoA)VLRxi>ne2b*@pJ@$c*C*LF~H!H>vp7#1aOi$kA2{0DK_s0$^IW>}2zk(h8 z;3H-V_Ac-VD%VRdVX_XanB&D(sT?qwH6v?3jbTTjsitc7;E=+8?S4^Lh(-lpkX0Ni z>lgVEVK0GuM@f3jo5vSIeoY8C;jfYfDwT-VG#FAq_ydD;b9&`cGpWI=UjJ(%ua9ns zZcjQn8h`yup?q4eUEB%t!Sm*P7_q$=OK3P&sl%&_nL~n$^LMHxiAYWm?;zAha(Iy&QYD(R8BNaXcP#wH z)2GI{s{5|S^Kg%nI~#<##}qUgQ@7ignGz}XPdA%oLj&+SXW>ch(zp=R-RQ3h5CrvG zfyhxLGKC)NeXWOKyHvURIW9|RWhC+-t_~e$D_|}l6uCuKsh{5;rsHhL``B6{2I&BZ zDtXarixJA!Sr7&CGKY`BK0T|x8~4X1^&d?;4X+SzcC>tePWV+m<8`k4k9^s3fj%iM z19`R<6@=s*BUYzkEghJD{nT=+srA5%XK|v;GKQh0`)@<$mzwyM#U4bD2Zl!Q=YDdz{ zb^eM<8Cg8?qn?r<@e3gYrq3ZlPpoYCU#jR8}1_w$dvf;5lxw`t0CfIRow4l zSAL0bYxVoTCbA%6U=Z4OqKn$N;Akp{z0ishkaviGgSwudxE)4K5wnchnT8J#?!!$& z#7;)X>oGl)4%JAd_1xe~DBx!*y8ibsP#-PAAE7S&d=EUC@J1bn{eFIeS*j-8&{fhV zG)hpc5YNM`GNs%E*ogGEIw&%aMQL@te=GT(Eh68`&BsFAA4 z)Y%7CFQs*o1#JFHNdj{3#HL_PS17jX&2UBv)NYeZCoQ-PDQlCj;u|jbQmwQTfS+_2zc8^b6>X2Hm7$MX)$qtk)S!>|)dI2c>*3qQ$ctM1 z6@tu&<1PkIA9R%t%#6bXREg-Y%#7}pWsRXGeM^3w!qbD|w&7qvW-ZjclASDpRfPM@ zlb~pnNMf33XzMIJAMoL9d5Ga88@3YMFD2X6Wg4Us!5cLEcc*za{9;d!rvN^Ks``EH zcSqs6RePeUnSqif7NA}(3R0Dfprc zynRwgD)&hCbm$B%6%ND@Osw`dzc~M*?&bq5g>jT&1tBi_Ow5z9 zU37f(?=*_1E)qQa^7wI6;v5K+6v3AJ0(%c=vV67&%|L5TvN4#|dlLSnH5Me!iYZAN zn_i9R7xM9Kd05ZSOiF2Y$-0C=UZO(4smrM)D&AqkUk@g!=mbF4j`EMcc3768OMJvA za{^70zu z&-`hEfDqC$Ng9#rwS>pzp_EM9T6@*<(QN;2DReGPLcef)EB7`lu#oZv5`p(MxGI^S zCfpBYEAK9?bHw_txLMH7@5nd*{4a{JG=l>t11bs^?T2`;^_@b9iZ=MZLD=O|;T8-g z`vLFKcLMhdf1^xfLCBz_+lE4(o(_Efdxp21Nh{4N*iw5nqzcGTD<=V6ZqI)oRHQ`6 zN2sRq&lEeN>Tj`Rm$Rf zRSHTYZ6$xgy57EV8W$Nj6en@iaIx%cPl8px@PM9FsNAIZ35AqcxuP{)qWrI5Qi+nD zUTvag!n<`W;;i_IrM?q^Npp@R&RA*p*OL&cn$_{fyKiT}5A4zhJtWjGrP=eGw1?_Q zAdjEDhrJV?5zQHgDk64pHqzrANY|E>gOz3a5_7XPegQ~!ZZHebx5}IlxT{gjF~B<% zdWxh-y!Ke`m&$Qk?K!GmAvayiB_vwtv1h3f zCdo)FXLZ?K&zBJL2sw+ERMB$LF#3ry?om^G72Zf4WW!kj%JHP?y#;TzoT%2X6bU8G zB>0#Od+EHx$$V^IJGrx$C}ON2me478eI?A{nscSm@tzsR69`Nm%vsFVaUS?d5|Acb@>c)NSkpFJWaQgO?8yJI-#?jw6B&{U03J9OSrgi84bQPhv*@jPnC$hd<<&yn=K>K8+=HxUCEKy5UTaoj!jP`thkDdOXQ-ZC3k_XCvY}Wc-T=eK;Ty&^9nQ z6o7_3z4#chUOW&FcxpS_U6}~epTG>~hf0*p~l{x5jz}@>zildr`R7v@!fWRou zzGjT5Pb!fTkhYNY))l(FFrQXg{_t(CDfpDfOyt7AQVy*x>5lu6$r(ZK2mDeMPxmV+ z>D&%7)YL3-=SE^NPfa%=G3%mF_k8p$Fq4rtVtS08;Xeu zjx7oLjvfrf{RxFl7v!b1rJ|bbIuf=PY|anx=*oi#yP=hxp%d!kxs>;cIhYdzZv?lx z4}5)zPr=sL3NBX)b)7Pr(vs|4;y6TBI9)oF4Kx7jlDj=b`6v3*ZC0sPNjy6%*8H1^ z#Pe8@qcW~0+N@dC{nb#VK?Fr8bMHo*i#ka~VD7nfkb$}@=96kZev?(26;A;osYi*5yl43CAFxxV5yR89QtIz)_LLNW8}}WJp0cE UcY-XC5`t^W!=KM*QQ`CJsj&@$TL1t6 literal 0 HcmV?d00001 diff --git a/boot_project/hongri_boot.uvprojx b/boot_project/hongri_boot.uvprojx new file mode 100644 index 0000000000000000000000000000000000000000..93e72cc6e73dba604c70b9fc8f0d89a2b2a27361 GIT binary patch literal 32768 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 W72Wo9sY}9o!IG~=(ou`Z(fUi_l7# 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%0Dt@O-&&OLhr^%@VHVZmOO@` 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�M@t)1tXa6PR8ih5i>Ux?2g|vZ`Fo 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 JN|Yq literal 0 HcmV?d00001 diff --git a/boot_source/code_app/app_boot/inc/app_can.h b/boot_source/code_app/app_boot/inc/app_can.h new file mode 100644 index 0000000000000000000000000000000000000000..397d16ee14db988764d17540775a29e73473f0ad GIT binary patch literal 12288 zcmeI&Lw6-ivDV~2ZQHhOcGNLD=-9Sx+Z{XiyQ6!5MAv9f>Rq*-wFkRu z6{V_*7^9S#k*S$8BRM%arC$1ANJ{z*Y8@*~!oZ6=87K$@NFd1nEg=w45W@26gUc2W z5Xovq5SLut$4Mp|uc`Z?3!lDEYcTJx%fg*jOmiMC90$Q~(SoQ@>-9<>v=sN{o1kh&inSV^Rz6Zum@;K2r8oA!eFoMlFFt)s*8g|nf7L&Me**sm z{t5gO_$TmB;Ge)hfqw%31pW#96Zj{9xKz1L#7yvqIufDBN6dBfx{8%WqYtb(pO;;H zuvYQU0^3C99MD`~NTUB#GxQyo{v_p-5(R4d!Ef|!EK&BFP0CYAd|Q2*c}Q}IM^84{ z&?u{7<`N9Ek5$=i={;nJRAH?e#)*xur_p=s+07eCx8*joZMa(AGz^)aCGZw)L5l65 zOg{qN`Xk_2;k?>yGV$QcG%n}40b}b#YKQ3~2AHj=DXllo-57&=LxeKsc}h})>-%Yp zr9b7u={YBbL=0xu(n`N6Z@ibRwu!PjPeF&M$!M9baR&I61(v{o!0%y51E;IOSz(Qo z{K)+4sFUMwlQ9SK9r~3~tDaodcqHk1waq3(e#1me&y4Y2%fup7J$rEv$v_Z#7}ipr zg#4FU+P;amPd|2vAy?rU_-^Etqt~1x)rBdvI7@z-u0j%Nt@sY*N~f=hW7uu?2pX)q znni`K&B0O~->V?7&e1(v$F#P`tVf~^OIJpbY9u|I5=P}c#^p>8C`UNIj-CKqKEo3 z9*Y)Qf&NC>Pn=SRT+2h0l1;?ug^~&2j)Z8EvKvsa%MkDe*B#Xmqk%Y55Pk9-vsKt` z&V06;?3^1lfJ|y|=;}ocNU&z^KVwJCX#$?zepQc-?w3kjvtzs~5NVxvdb%h5r8gyK zbFeSh(;oTEi5e-;YlPoi;pnb$jZ{tfd1lD`q9=bxT+>6KKjqa|YUz!>xk(c9%Hx;G z_Rk*knu&aj*f(E$SML=X8o8!yru)Js+Z^22W(oclDCv*dYe@E9!8mgiLDenU;eeVXWa|lwY0^NrSSkWTB3*i_09oGD$d38^iF~);hGEp!U@H%TjX}un>xJeU znQ2vq6v?eWf*_s@9^Y!xMjmhs?j<_*LgzRy1OHux=#rW`Y|{Z4+2ND#F_khj80nK zj7?DBzW#e&XL$uF9=kb2Mouf+KHYUVakCO;KBA*U9@Maa++gcM&P2;>z_X$0aDkVSlNdm_BP1HsU8r>F$xUKu?7 zq$V_INh~8sJY{HF0~}cwcxWoLQIw5Qcv;%3xHp+SgjdNNJl#x z!ht_Fr+Nn@dZUq-)v$n|*oaLJX?Q6h5nT`{8t=XiIA@Ve(Q~EL0 zust;hB%TY|$<>~#B)%==zt3MO@SPqrxwEVAOr?|+>}ekBdB50GVH}g>8`nCg?T$x| znbisy4!pt9G~r{cdvjw6p^g%6GCCq}&wa%dszc6aC#xEDWeCfE9Y6K1){I%uJm$)I z3ergIN=zsbvTBFEtnU19v%SA3VnX0R>mv8qGDfSvBWb(X-Wcpjpl9}tq(x9R40UA7 z37(1x#V7ad{>G$G;Z)trSBlN7lfNbvqcn}D0K&-rc?g>UXWWEha@-8HeBO4ZCp?0N z==1Nr$cBmAj*1=SBzwUWFbo+TVVyx19(|QjQ1?z`RfF!J3no2K)GWf68suNMy0OAt zKVK*HvoN6Mbd(^T?l&;f30Ar=(_n|bnq|WEb{k9#C=D{T8={~0{(1On{c)0f<=hk7 z$_3lggPWVE;)T>1exO1A#-PY++Bx zOMaRR2Wc3bf!qbe#zf{w7CL|Y?nq0W`DH5`sgkAjdKac&9y?B5a_7a-{`b9YVw264 z>vnQbBTO?DW#n%{XOy|U4oIZ}zg;N(o`k!<%t(VvPnJS_fRzE@zBldpY$35&559&I zy%5o?f-h2DU$sJt(lAcp!zj>;wrgGA(ht!u`}I}o0B<-5TUr{exP7d3Fa3oi*`01GNe1B4+d=JBF1aS<@Q4e zV14tI1^k}FhvK{UL(g!aETh_L?l{oRzU-%8$Y_;p24k{>clg`67l?HDRrw(t=@o^2 z7oY$X1HkYXudBm+0bZDI4WeCmdUZXLV|+TIWG`<>hc*s5lB@Y1=?#G!wp*r=!2^@1 z#EV^3>tk(c8(7Un%(Rvj&pfzS*w8TLf@Oz1nd;02+A?5*x1jWe`#gffyoEw;b6d znE00%jSHTGkqR~QWRfVBVZFX!ho@LjbnR?121g|G-h?Y6#(`CfaWsnryBL-GCFB_& z54OW@sA)w?G3)EPyGJi7I@6aTDra67G=q5SCY#tQBmYl=0B7tF5U0dX^$5Y;6b9{0O$Nz&+oDZky>9 z9%n)6?wa}$u5m2AAw-&3zyk3kF&IWK0uMqGIj|IlQD1?&0@;yTU>qm?zU(Cu38X#9 zA!t%h$J+62_;n}uX;?jF=DP*Y`TCvXPBOCnc=-uT*}rChz8r6gv+&7r(QMl0m{$ej zy~)%Vxl^nYIzXoOM#+L$@^wUDr$K_Y@~|PSl>f&J#?5j?Mns7b?N(eHFRZ;Ymw$$X zxynr8^jfvw0}VHKk_!II)p_sdQR1FcD1m>hih6CxNnQ7R?7o4eoGse&jj<(sJ*X{> za4Gs9{s%myyA;=+!g$=m%y*R4kkFlUZDMSd1H74Um3Y`dLBC+ECWt0?y=++3j|wN48KYXw zNP?(9iL)wt-al}`Pnj8mUj#N^u(hX*sg)xFTa8p;4wh3WkTex3cVi| zL0dXZ1E8MagsvEMVB;BH0%4Rj8<7nxV)H}}_4XL0ZL-vXi~)T6;>1Fc!t*s!5v2@;?&A< zJNg|;(m!or-{AS@_Bfb>`G&!1cH^P>Ma_k*Gf|J6SS5R^EX@mQrw3DHCHL&#^qUy zg#VkHD61Y=Zu2!#ef1Hgr|HAd?n`ck7->yPtFR5Ge)oQ4%#CT-`0)r`bXa1M@q<7t z=+hh@`gUU!f#jDfEwj#Z0;p`Y8?TYywXCr1@z3fQ_f!FUhuAE{?~}HPhrPJ`TA88z z+1ulowN0|{$mhQ7!q-33bgQYyU@s}ak;aOA7w(q!FhW(ZCPy5YHQQ6B18giU*s=8y zj*$@4=fnutQ=je5e)F9IM2s9T#&Kf}-$huH>K>L&n(1Q8QaSId>)7A^?x`nm7Yuys zl_XmTmysf)jyIxym z;FL_4j%S!7IdWb>QNT)EH{_EVE`)GXP3X}YaBsrZO%%GKfMZL}3f08!IT3 z&P#`Huj8$VB3uI0EdurOK7LeN$Lkh3rgSSeY zl|ZqqxiIg>R+EvOQ>fIhoc@5#X;ac7Vs~91#kp(F>(!eASA9Axif3vS6iG85Gk{_p zF?vq0Sp3v+qQ{|Yh3?@akr1NY@E8IbzarKwXRZub=9594CMq@J>L$WYLKI9466F${ zz#V_a&K3VKh+gR-kh+fP>;B5W$F|I=l-k;~<&7z@)vIr3f53$w-1HK1x2YM&i`YsgY)|7a75@1hMx6?jDS4hnQ?7m%F|al9K8yKlb(}wFrA^5uNHH zn2OhRT(}+V=3Po$MvD@Bqhaqu+oEbIRnEt?WXUMJ}F2P~=lry~7@i3uJ8FGG<+U+*L&;k^-}XHWs&Y17n8e*&G2G2@ZwtyIh-6j@z^f5~<51fJ5rS zBo6T~%}^y1nYwE4W&x5VSWQF80&Ion0Ydg60{&fd!C%d;^!B7k_r_omqNE#rlBEmJ zfC~^j3udJ@n5KX)^-Dv;?hAe3Q@KKt98a~1)<^p(%bHX*D-DHGdnUZ`>~o6d_ZF`! zbu79I7?UG0DU5;dOc=2ihvZKmP3Mf@&aL~=Q7Y_tu7*hxiZ!?I+&T|W`DQt8UOvL< zLXeg^`c1|h1CA_Gf9Her^;nLP8LM4)(u&~asPEkz?o@|1?Gg!Yp0KiKu3H~!Y#IXH z5kq?ZjO$pJpbM}zepq~vGiVW$&!{EO{~m8v(IZY4w#8%hd1pZrbMv!Iza5W^3e)F2 zHj5L6=q#X9s>M%u$jtojpZ8K)lTT}pnydW-L%v7IxvBO`S4(t&#QwP*LM_?rtERf=H6llF$tcNv| zd)U3m2OYo-GJ{2v8tlAB5GDMXF2R`s=vD29_NN4{mD4ikpei+q8AFoVn0LgAH%PAHG?b#aS!3lWmXY=e8Ip;-T+0^I9Jie$39%MgCpKMiY- zIT$fDIlZ3!r~*D(JJ=Eoc?wzi!Wq{s)WzFu0e_wxnu5e89PKtircEOHi4PC%a?NBD z`*Btb06SY9X@AlmS!iGdjM+AV=BLKV*y&>ph{FD87Tj+R;yqJJ4pr6b8OY%aTo8-A znuXuhvcLgbDv1;AQ1BFC>&9ow&4pIa$K=j8!Qn?TmrW;^lt8dP6@`0pKVYlv8l$?= zn=58;k`;5Md66IS$OMm(-1Vi1d@nlSjbhi9wE*`^qmXC7PTzMEH70iT;YV(tLG-4X zMgcUgLzd+{KaN(mZV}ZQh@hlZ0b_l1z3Gmw5Tb`wGP8X)f8!+6r z2IF3}!SE3>9jBKBWxi+621|_kA$k?9<{0m6C92R}J_<9bhHeOlO&eh)%|Gy{w>R^jV^pAQ11VM* z?bkmDum{iShzC%4nHAnu)}GVcbsUYd2Ge%<~_woegtK|=?j6?!NtC0 zl4f^@4ulw3cGpb8w955J`NITv)%T*9eKlsj8|Z-E#EW&V5(Kz?HOosQ6_b)2T$?{d zs9f8EBK@uSuR(WYq(OQ^hRi`CY%bPmAJ5{T0xBWN_NAY}KYW%sMTw$)+k5I!`_`*& znj9+|vU8Ak_ZukELFx*)W;WS&6+9uk#87Q7W@X}CAm>F+9$K94ZUkow!O2`r?h3>$ zOV@ES7i<8e2sLdAPv=^a5NP@1i8d`MJ@i5j(TLs>`nmtIj{Q0Sj&ak}xJa}I-4lvT{{#MTYyaeALn4z2QrA=y3sk3h@K)xh&0mg}G zh0_QyR0xV6ZHLaJ?1#d|f<_(-oW{gd>W36v*;IVoM-~&+FP3r69##E-kqH4Oo8BFc zDzcPY>_eCO`_9*4)IxEfu=KX~$sXr@M7 zhW=*?ts7$`Lh3bNgWZAyhb*HTlj~)Exi8mOQ47o`yCd+MdJwy-N;dWCojIt4{QLfV}LoS?7g zZ$89SEJ`tBp|cgNi8gMl#g*}y_m9?qxWXhuK{NR&XS%-}3Vo?e7#BDL{((OY0G8R` zV=ZnlRalB&l6f+-{0(`gtfMHncfJGE(BH#o8XhsX4mwO8<931_VaY~9XnAdXb7SV# z5?~-Y<2e`xF{A*ae5TG(63X1lVJmNWY1rfDrKy>QMA+8fmVCV-4}2Tkt2!ad>Rt~nh+*yiqLC|bQcB+q6Lt{fvWug2Cam820^ zcYSUcr>#e@mRW8cm|O$u5g|kbv)h#^!K^z%B}6*Ad&C#0k0we43kP{T)~DWf9C2O| z+kTmCrFl*Xd|t{xOv_=3O+r`Uf~OxMcru;w`D7^GnR<)hPdTCw|J{`r4CmPYUR5$d z6rM*dblR}(9FNNZ4{hny=40AVN1i2|(~NDOHH0^#>|P0>=>yS&T)#rt$el5#UN-MAZ1Pr%=i3^X!X2kx$#gT1{K4D1U)d+kKEr4gC#Q|dsubK38C|ziN zZjQ`Agdna_3{ql7Cn898XBI?`*V5);l!}Xtv*aCR*A`)q%Ia46v0m_}V7y=~;U8jn zx5)=97Hcb(AZA+Zp<+rw9WiN7sN`j&u$x^mVE{XiCpJwz;7QWMqd^B(HY6s>DA%3~{?l9p1v{3c)Z#HIi zcNj0vI?E*w;)M0|c~+jKh5l}{*pZs^do$0~p4PL>^dGxU_U&GjJx)@i>q{C$@u(I{+ZD#b zDIt%^!A$3qsc3;Hf?mDCo%7?+p~u&4P#|&r7;|EbfXzx@ov1Z!yJj;v*1kgqM&-|g zltVYgIpQ)^ns}@_lZq#5u>zJ-7;edK_!Twaz=dTid}tQ_ddp@JjI}t#Mo{(NNNX>n z@yS8F@l$<{F?DbL`#CktD{Lp4@Zr&d2i=M~i(wC1Wzm&3I0lLK`gV>TS<5$pS5Mo) z{I#EcVfa+h1+TQ@@g}gZF>;a}t1>FxA)E=$`rmB#2K=CD6a+mQx|oKRXAU24UN z&;pr&&lgxW@G8X@t3gRG%)U2NZcYi}y>>BND@T~2!OcIk6!$GiGBB8mlY=S=U34oa zv!gIzw!s_Y-n@@YJMFlvt7uuuHdlwmz%~pp8y8y(c8!m0Q;hbn=3Q0H5mV`Jmm^O$ zL8p=J>Bpsf-=l&#;y=E)4u7B`+j7(foa5~)3W*Yk{6srY-rPj|_N$nV3NMl=9&Z@SSmDt%kX6B;2dYVwZ>7ILTA$24 z@Tq@3{G*Pqu5OnvRMR56U7kHUR_PXMGtMkh9|5LiqLIK&}(hu;^Md+Q!I%NC9T79u81 zcWv)eF#R4Juqb>A1Z6gzgiav%F@P(Ozn=Wzm)=#xqIo^>ek~iASQJcIxTG0hs&J58 H&%OIU0xU%_ literal 0 HcmV?d00001 diff --git a/boot_source/code_app/app_boot/inc/app_cfg.h b/boot_source/code_app/app_boot/inc/app_cfg.h new file mode 100644 index 0000000000000000000000000000000000000000..b1c120f25b335e28de1a4675aebc717f367c84fa GIT binary patch literal 8192 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 ULrNUhhhv)RKcBAI@}&6w53==y761SM literal 0 HcmV?d00001 diff --git a/boot_source/code_app/app_boot/src/app_can.c b/boot_source/code_app/app_boot/src/app_can.c new file mode 100644 index 0000000000000000000000000000000000000000..b354f72d1ac27432cbce785ec82433f872dd4fe0 GIT binary patch literal 28672 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 VjN};S1^Iv%dMv?Uxk~N#{|DsARt^9F literal 0 HcmV?d00001 diff --git a/boot_source/code_app/driver/inc/dev_eerom.h b/boot_source/code_app/driver/inc/dev_eerom.h new file mode 100644 index 0000000000000000000000000000000000000000..84ea224a845122768e09415671ab01f09a8817c6 GIT binary patch literal 8192 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 U{|tpGAyG%-!f*5WGCr680RbLVSpWb4 literal 0 HcmV?d00001 diff --git a/boot_source/code_app/driver/inc/dev_sys.h b/boot_source/code_app/driver/inc/dev_sys.h new file mode 100644 index 0000000000000000000000000000000000000000..9d1a8339e6c882fabdc980995c7925238dc1d7e8 GIT binary patch literal 16384 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

    WieN(lh&8+XMUc@h8vQ}=o9ygjg?~;53u=R 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 U5-hK6zg4Qj)l9z9X?Okk52>MD&Hw-a literal 0 HcmV?d00001 diff --git a/boot_source/code_app/driver/src/dev_eerom.c b/boot_source/code_app/driver/src/dev_eerom.c new file mode 100644 index 0000000..e69de29 diff --git a/boot_source/code_app/driver/src/dev_flashApi.c b/boot_source/code_app/driver/src/dev_flashApi.c new file mode 100644 index 0000000000000000000000000000000000000000..74fb658e21e2753282754a289cdd1baa46008d85 GIT binary patch literal 8192 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 I6?^M{0M`pHb^rhX literal 0 HcmV?d00001 diff --git a/boot_source/code_app/main/inc/main.h b/boot_source/code_app/main/inc/main.h new file mode 100644 index 0000000000000000000000000000000000000000..25fe7f3faf243a3791ce7f9cc46baa14bdc3405a GIT binary patch literal 8192 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 literal 0 HcmV?d00001 diff --git a/boot_source/code_app/service/CanStack/canBus_Com/Can_Transceiver.c b/boot_source/code_app/service/CanStack/canBus_Com/Can_Transceiver.c new file mode 100644 index 0000000000000000000000000000000000000000..4fd10a0c9f8ab51f88f012e0a517554d3541b410 GIT binary patch literal 16384 zcmeI$Lw7D*6DHu;w(aD^wr$(CZQC|Zj3>5j+qRPvqrV>#9MmRphEF zqJJdKj7-g(|B#ZBlDDKF21cddA=fiQB@Df}lK=yO0R;m6zY+uj2HNkQQ@U;g0&X)jHCs{W8BmHzrOE^zc(@xA4vc2$N#$T4R(-DIwK&a&bp zil4A$5Zp%e#ja?(H&fefo%!_vN0`^+8od*^4i?k_7+=?h1KCZRemYOs95vuT#h*VS z;WR*khPOMQ$0uM58#?D=aae8>j)!F5Vx>=rb&0Xn04F*WFN8qu6wAA;(M;14jNtd4 z&}puJsBW*Z5Am8oZzS{xEBN=KwcgO<1{g_pOBO~(oE%fP+FAZz7D3(Mae!VgGCfKp zJ$vdh#|IHG$W9@9P-**kZ>@%CXB4#1(Y>~)csRX3UIhCih4XndK;rykMhWVJw`IMu zUO}a|B-J$CLN7_xxv|)|JDrbLqsm%6$4&Vr@SL!$Gu?tBR6mO+XK|1+*2iH9+urLb z;JH!F!IqclW6TQ(^Kk^{(h{gYpAuKF#$r=HU1hb90idpNE=|=K4ZDbG@I?kOQ(;HJS3Bdl8rGH|PaM(0^kHQ;B~v=m)x& zPo0*qa5K5hTyI0Zmt`y?$VT^Uqp$si1i6^Qp}$$t$dqS(wL#v4`Q?T(<7c_j@ZpbW zGzTF=mUG!x97_FmG{j{$Q-K&91XT~tKN^N`-l3;&3z(=+9V$u##0qWy!KWzJjoeF8l6Rx4*SWTo7}j?BYyax8Py<|!>PpvF^!NqE_t5&J2ulAZe@G!) zo3dC1w7VE+2C|Gztn>T4b7X$xP*4e6ydISKzxg?!s1YLegI#TB;p@CEFS;)RM;7sk zKSO7qcyFY=#ZTOmiBW-o^C(AHEP+g~!eG^ywi3+*!umFD{xi~VEA?o`LOC2O;`{|E zP1@4`z-1n86EumkB4dWED{_sQLd^F8{*sjlFE<~5fr4Me-M}vEzZ^Mjy|#Zvm)-~- z4*flAToy^z@j5-GT80Nn+Y9&qP>3ClTRDXbMMxDd<+g@(M?oU zlCw1q$d4FNfrcGl2WpwAU!n7uQU`tGzEJAI+kipXg*wnV7i6w{G z2glrsRy8&GnE5hrz!7d1X{G3dV)GhkU$&NMe0sA%ajWtoUZPB$D6H5sXFY`=r1Nn; z!+!px=SvBRi{HCawod>QS?h+|kyLp^=?!O15DNr2*X-9OcA6~GST?Upb-ait)gJh3 zT4+!?>K*`lr@2u^?@Ix%0E8#XdJyPG5Uotc^LI>;Qi-)G9L%bHZDaZiEjktd$JJ<) zIIoJ#z+IPN2E_3L)+yemnM3@FNcL~|SUbwP7GvQM`p7`sMnCgsLm6r5^CyeBViXTTFboR@iq(4WiHZq1i9H(_`UjT>2%%U+-z zbO>|KXu$`Fv7j!Mx&yhXuyc6YtsiN*m)+5(H}&l1XsTNl@FiDesxCMA*T!~g)4JT7z{6OXS!xO&izt%57%Ib%K2OQQ zz~tF>tm#q(Y`AV~50=dAyd6dl9cyQo<4+7P{tmkgP@C90pDEovY+jTfJ?bGP?jft$ z1VMZiB~=|+?TB^K4w4JLC=jz|#!PrO`0kEnZVbN&mC}^2aoU3wON)iKJw*J2K=~OT zZkA1U`-2WSP}CNkAAWa0y6Y^>fKWJ3s18|kd%Wpg>!sK_cep}0ZZ858&_)t&_ms?X zWi&~hr9MpaI*LgK{hX;IyZ*^Ff+U-kQ0=@V)1inzQ!T6H`cvZo*f7t->!Ac69K&vY z!d6GR#Q2r4m-rtMb`htS6%B(<&U3*o2|-NDgktQ|c6qnIS0P<kC6>9ACwU>hB0MDYOE`JV%_O$ zsEjJ}YawAeo4P&?ZD?|I(Uqc#cp!_VH_oE!C`-afgOau~xNZk6gtZqB%}q7b!mOa_ z(8^2K@v2Kb`;AIv1W__!ko{rL{l`~yp4-Pxf3=JG?G*bMpx1nmjmS8fow)c-s9Ehq zzj4@hpCHv;AL$X< zZS|406Ege&w;D%E6FDZLX|3I+F#AM16`=gR!zV0_w%~Q5NK@6?>Vzw+7N5wB_QOrK z3P@8G{EkfVa*X*B3Tux;_f z*|1jv(@J%C0{BN;61eEp2pP6qZ_ZcqcTOWXOJ)AzImg?zRLVFAPFL7!GIzjy{3Ag` zZp*(68gbc&Aj-Mp|76mk^>4s3PA~C4Ndhz=q~uhUe5qx3aOTY1#J(oOA_xlSvo$CL zqb-Zj5VV7gDW?jw!i_aTqHqwfQ+hH(l`akoBx7o*cnEw_iT3;7CopWRe#b;mla7DQ zRpH~ErBG2zsh~e*w-=0Ll0>qVuygvi13{66=c_Ixef85~wn<1;7~t*$>PF%*M>FRJ za|kA?Du1i-!@`sNOH3WG?FQc>Hnq)_wLc~#CO8#>oeAKg zSI67V4-F-Hpd1Z;KKvNp;(l!?GzDf43G85uqjH1OdYIkk?CDO~EzplGFnAiIJO{}} zB352VyhbS1eQdxy1AvOaqp-44-u|KBk2)r%8AJO9Hyexf=YyX>wC!hI!zBLx;v_Zf zwmMIDMN%BtO(t{a4(Agg(q^{|zG0vX%#o0E-KqR;Md+A6QJsKWw}JWvCtTKk3^bzI zMHND40iLlU&cIZN!S4u;C*e0G2&F7kh{r3&SLU8;lBXzA3PM_yVlXG}7ohGk0e{yD z*yEz#1B9DOYh1B*3r~LFB@-_~bJ9;RxB7ixvt7mo?*!1~N5X0I=ukatj&~aekSJn> zNDeVey z_IJseiKuARakZY5oHeH6tJjH+m8Q!o%ToMoqlTsD8YJ6%qO~Im74r54xS(a!!-tOs z%qQ8$E;QFo(v$^Q77Bf}p{`<&FcAuE4)@0NZ#!Fw`GuT*)-l@xb>Yn$7zA5IW8=lD=8 zH$A~jlA2#Zd>lIr&~gSUcS~9V`z4rxZ<8GX{l(VIU(doC4>hJ{qjunbbqRS*&KOW} zL2qybmA-|)7i{!yH2fTO>{15%q47z7dXG*-N!#EX4U5#_-NW<&CcxDIxj%_5bO&3wvdY>NcULkiJ%-;zYPyU-E0E#(;eK?#x!hh25Ie3`_04&V0z(21EP#`mwOloskfW0qVX2g4;?#+N5@RlrO5mppSB6Pv5240=t0XgW zH3M`cT)CK~IOAL!p`FqpwL5zlmsQuMUYOUp4lk*iaWn2UTRhs3dFGe#HXlp9Jm2~n z$aiE=u#uL)9i2}cK2Boa;JRAEv$1G?_hr7CEc%7H&fn`S2j#qc-?Y!m=icgORz{%& z+H`L$zUj1$6W`h32Y``5i{TmTirQBG@--XBag8(Ju3#!oO|)tXy!#?Y@>O6rAv;7up~@CtgNq7K6{_ z^wSF`>(r1o{|3|jpk@qXGAFFp^CYz#iNvxMlWF%5Kc+5J<^q^ia+lrpA|Zj{Qhqng z!OS##S|z;6P$n8=2=k^=q!!?vm}@^_QAflnZzuqeG&fzlj&MdkC&AAp1_}&lVYXI;g|8%y0|=6> zZ$6E$K>MV|s%Z))KE*eD{8&u(5EgPUFmm_f!sm`{T=%{UU>sdlne>tG*$}jDad&y2 z3R`h`tR?bwNH!r;zx+p=WABq(Sy!8Ip?uC|C{^92Fv~Z zUZtTI0qEW&YEME7XK9 z>GYiS3gX&oZK^j(rg!2jNj;kX6~H~?F;7 zksSKj`S_PvVOaNb`+h<3$WmC!9dpg}6i9Lo5AcFF8kGkG?3_$0y)sVx93`CKVQA*y zh^pRYDeC2podPno&&=4n*~Nq(Ay412GmzP8YH4%48Ud)e*=R$a;eJ6rA_O)G&SLExn3cH`GMD}2&2q)#`m`UkmXJ`xMXLkBvbQ(^&P!^ z3d8pxZZt{PvNHQm9n^%*2VGOM5mGvRRqAdKd&-)YXZ&wFvLl=x@FOQUH{fbRN6`_? z1w5ZoTpRG8Z0d)GKFWX!FUIY(&Dct=SWHeGb|E5n|0>W()?aJ=#T7F-MhrgZ-%-WYAXjNX*4wcDM{HkQ>n})LQc)D|-4oIF#KGkma<*6xlh2 zf#0m5fQHWY+`%cFi!=%?A~jChL3ag-8omC|tq|Q zS~dQ+De&tbz-gr+n9ktL|JTy{a7kB!m51ui!4nXxINLc)v)Vd^sADW%5igK7%vo() zip0Ge-L+ZR@Dlpyh3Sf{6TcdZ&v3^x4?yzJ-q?+Gg;dbIn+i05LOA#+=2$dk6FiA#Rou8TyI_I@6jJjZ3<$rp__1ypK)QLbcW(wG8b4@r&75E2h^H z#;IdZP!}<~XsU|qS(-gey|1=L+ju#MmeUvxmoqjSD#Jj@mIZo2ixgHNF9*hv4PkJH z)gR)hJd$P=q1Q)Oj0MR8(a&USHl5hy^5#!;q;p)@VjLP6oaOgTFl5R3-VbZ}HP~}e zMoEjUt@^GyYCR z+Utw{<3>hng6d1gzIScTN1P|#N?8NPe~OUkm@fA;uZhy+p`6_+>mM0H9Kbm08pY}; zDRJ^3!}gl;cL>(ld-303`W~OFDo!rs(`{{vF@1en)z(pCYL*z^ZmD&DDdM;V)ipc^OOF)p>Fb6Td4P>G{(?a^=ykvQhv2h9WZSVocdp*lRo#rMowP&d zo&C9_Y100p_B1~|J$Cs78*^i5@dd>hqFVJ~NF(nW@asBs0bs-AC`Nub0}oC8#I?Mg z`zcm>SDt^s;CAU@Fz>pdmqbUAi9RQ0y?6KSJSSnxdVCg9EyDMNQqbw8v}wYea-0~G zBs=FUJ-D-&!<(y^K7#at3c+L-Qpz&j9Zz$}5R?8GvT@!5jDIU8SD@`ShjE=X_UmQW`7Bk6g{{XL2UrR++}U zJ>7=M-AI4sw?wD+Cn|T+6I?>wjnwf-S|s zY?0fEffPWB(lrE(*4F$@Xl#6qp@>&u@rMA!;L zNyBVpjB5WRz%mHxL(x5NG8~b$(@ez@+7L!VsfNXL%0zp-4E@?Yz<7#?tX?q!D65_3 z)rv-t$Z+HtS=I3@1;a2ot0c z{pZBVtk1%orPQhqtR7qQ$bSe(lk}2=mp)lbfg$OvHwVeKmE_f*s$ZAYEJ4U^;}=;%i=;DiykFyOn!|GT*fHZDcsOX`JkwnuLJwPKVXxMT^@cYKl|ov+ zDn<2u>Qq*BHn%AOamGCuShml1+1L~neyeygYwz*G3{7$|kmzd^A$9T$I|_@cGhAvs zJ`GZGBpUk6Nz@cPNb^5#YP|1&sY?2#9ab6htbtmBV44%91)Y3JrnwVv(EAs@a56Ng zMUgyDWTjE1=57>w3h9C>x?EASOCRju2l%nSiCT!A0!y5<_qjKUP0Osyf5!bB}&5dLnwL*Qb=mhkJM z-N13M$w#Tn9qHa*u%Z{xSO4_$7M44&t;En;FlYbS7b+XLH!yev1Zn{j2S*Qg0G#7< zeR4}=S5<@b7r5FX`2p-kD!%7r9evjp98VBke)d1S&&YQHih1B*t>6mJ+!_x%J4+lf z&>@;@>rlbuX`P;R)Q$${e^OsZHN(oOvEQ5?T`U^33REw!`&GZEivEO8$?CgfyV_=t zr{CG&1dWzxZ+8zy3vG^xB=9?(`rqn2^HGbz9(0c_Zi>25ws0c|wybq*h}1m;UH5Cs zVY+XNBz*|})pr!G-POnF(lKUFNOqb(?@(fMj=zm6*F0$@$jqg}PJtXiG_AD-b z3o8V-V*yf=)nuFohIR~4QNUG@S~u}_<OWoK(8N88ED;v=tbjHgbg0|Cg^`-V$2Z{1FQjW-o1pO#!(gtKrjO{~}Zm~;C zw#@o8N2T5EN`SMd;^>VO`=xg>B81q1^o4klfNDEuuXm|M6v=h5fg5}bHzj)b7Gb%5 z`o?#g&3cMm-~14S(O>zowl{sJnf0)HD8UUG&touXBSkd|erWk%KRrkZ?Ba{-UGKvF z>1RnCs>pu<$VitWEecw8QzPrRI1kerLYV@uhG!|9RbXP?(3^`U^#>Ek!rCA8n`80+4mtu zvDLhAQ?Cf@<-T20&P9;QPfMCYOUWbj*Iu^St=rP{b+{St`|QH{6hgYj(jtD@D2-}c zhh~Cnz7^Z)#Bx1@IJ)br^>RRJ)&ZUI>Q@>;kRRJaNUY%BE$~|->Z$E7^ddb~VXaFD zgA!E6E8nprT~01ln+Gv0ZtDpv)h(&{Z21#+?F??OHCr(sKnlV^)ZshnUsi67*Cz&n zp3MD|xY(B9v=+m$rqrFPWVB9CoK)eUMzE0UpxhN7`|+r(-dJxiUg&cEuIpzMZVQw& zD2EA5$ws+{7{u8_+%Du1C}^K-y-Dk62ax=;xQW*qX$H=R2ZBw>BY##?+@P%>U9p;_ zj#N0{BXmCRN}F1g1Ak40Z3DMe|j+4Grv{Om0t4{DcY7;xjRfburG(Vh4_F%fRsEpcsX2u|RH?$(2Nk?2n#i|hm zh>9y42BD(N4CWJCWbAvh7@Pz@^0Za4=b&U{+d`2BO@9#>1GAW=G~n>}U)r`9KN;pQ zry#!kbn06u%5o)hbWPUNZ8R@-Efx)VbL9?)ES(Q}Gj^D*djvl3``^vl#QYpY0-M{X zD6|Rd@JIyi5gsvyDHQx;EJ3nUpnGIq!IyyljkRa?7+}=7T{OoalbI_NL>Zo$SU$&b zfA2PBD`!n6U89G=D{7Bb`^OL6Alpy=sGJ%I_0#BK_D^Az6+V*4z)b}c`Mk;Lrn|~p z@cE*Z)eYZ=sPUnNwH%Y{XPEed&_~V>fKapKkG4y08aml9IDx{s4ws&2jMH^u*c~V* z0_YnC9YO@$Xmh5W^u=$)!LGF~1}ns@twRgLXc3>yA81L5rXoR*#~<-~RCyO-Q%9e5 zVt^tc;CteYaXov8ZBw7C4g(Qvo;!dn#StuOFWGoz!D?|y9&%M`S+HeLBPh;Y?I2yC zC$bx>?MgLz{pB;l<>KF8fk@ppFs*EkI^`NTtUbfVe$oq9x{y;bp>rDZ_coGl*fKaY zks8rRo;YsKdBNG8WjHvkAk$6OZQW=mQ~cboal;sOj7>3BQ`oMg#8P)?qNz@bm_JX> zjYR2NFc(to(hOSY@P~_MZFMsJJpFNUA5{nR`+^zrgzSl?Me_S!I76Fu}Rf!BD(Zy|7kaplrhul?I|MD&e)EJ@91y*Q#whBwUEtN;T z>tNX7W1S@@ijECxU{!Prbb)z$pd_zBkNk-rcx2%u(3-c&a+>=Vsxe;ewRk0{SL4$@ zR=mGEyE7Bh8|s`eP}Q#;r)1u3|CCYRz+kE0I0auGqV;klK!l$&9HLX+Tzq?yt}q%Q2CrY~^w0!) z+sRm!5IyMcp3lKqsN-J;D#dMvu6(fv2q4=ay1d~PG*J;<3*z&<2zT@rz+uPG!^X#^ zQuibbV-T?VYbBh#B7zl+3ymj-(cVO44`<@9ic7V3Enx zv%c&xgQu4H_?Fiec5mCTqrF-DAqmcWLCj!(Z$ub~vgRn++fx#w5Vk&#l8jG&2a9)B zy)njG?=FMC(YV-|%iv+dZj8|OHvUb-;*hRYt$dWi3gT)Dnt;7LzoD1Wbx}@TuR67# zKU9C)0J%t#hF;LS?%R^QI^N(ZtDCDdxR|TWW+zv!ZFxLQMp_Sr;eONHB37UKBPYG( zTDA(C1UdO~GVl!&FJ3Ww*Nr4E(3>JOq5r7q!hcMoQe7HGQV7@9z#*o^6D_S^Y{cI* z{DdWWUH4W|2?~t4Z>IAUz5(-?o(lSK9qUN9`UUU~dKi59%IkR9EPO!`BWiXiCT$oa zbG*l)S%JybW%p?Jx|xM-V5>jq!T0S*i>p1Z(cO@^xb08HP8R)8@=z4MXupS%h68z5 ze8#+zb+;?w{hB^Y!Z|DTKG`kd{73i(h7*lRH9bejAIpz;Lx8dGT`FV@Ocsz zjxZ8*)c9Ze#Y3=PJV?8OwS}-mA7ouu24(4(&J~r#r!5O0uI$@~FNRtRj>k*9kX~u{FP9u|9 z;4&!59lalp0Zk6k1K*`6=C62v^d)<-=1Q;M@Zo`ff+AE%g$YaLVEwpYT@>!nyP$;2 z8zfXzk+Q0K&66Q?$Cx3=BzdfRVZ;9hrh?%73d0q*`h;w@-j&EUC7gu5%XHO25} zfNl%Bt6uwsWo}sSu56cQ5p(xeZ>S4wl_R8UJ+>sSd7(5NiA#{#D?wbO2-zb^P$n?`aF5kaOF+9sALjI79O)gN0Lsn}hT@cRDy8@CgskjQjr0K~ zHmj!5z`T3B{Pd=qa!BHD!8K8MpXpT5K#_k6fhXE}}m>&}vAU=pRxtq#=U zwUOwLBxsOE3e{hjbLC+nBIJKj*l<7DhT?yZJeN;L$w?WI2GQBUE~2##>+&kKWXGlo z$Rdy8DuY6l!B|qgM2Os*^n$u;Fa+t0wvF{GLz=W;@(IEXd(-`Y700!PbY$R05 z9$Q#lhQyV(4HvWN5cDQ&1O45Hy&?{^TW^xQ%)I!JYCAniNIisklBgT`0|B_At5k?u zA1#BY#loq5JzmQe*9Na+N_~We|<|6xnmC$HhcptWz<&#G5y2p#~ ziZf%fm}uL$x;S{T@w-h>w}Ph9XR)`6QDkh?YA{Af67q$iI;Yi;7cQr8+egMR7IeY) zPOgZAdyWmK!1u96og?Q?E#AJti%eVm=r@S#t33D?w5K86AG;GGywzbuGMfavO>N#r z!_CbR?i0DzxNy!pH#SxFn2lq z1x-Oz<6v#1=?7|E&zI)b8=zI9VQK+KiWX3;0fswZ-~zYTrcT3YAb6=PeHi3K)t`Z+ zE<(t(4$HlY?wr5`WcHGg%BIbp8jLR9B$Pvs$<4XV7)WbqAvBOv0~4r*QlciWAvPr^ zC~7-Yk8OYe|B)$-fsU@X!qz6{QXw&Bcn&S_k%*9v=At}VT#K|QYDi#U_yh6>D>Pk_ zdNp3l0~g(4qSkQC+B2EJz`dKe^={hUXpsJHBPG}P@+dUQkLs6nl3XH zD`2<;phHfA-wmAn0?@%<62C|z+gc!`vi3z|2>tfU7((3(&f_~OE68-=c1_|l3z5c# zmj|5ptp6E7w0wwWKZbQ&AdOPQ0L^>53!K$86Zvn2ySm#!BnXmn-_2IagSo6`a|Jtd zJ)P(C_oXmuzy=B{e7|OISJX$PC_cCfNx$$Zt00}bH6}QR_cJVCfU%nBc8lQLKjzBl zq*SarV0`c9yUtpXJQwS85{rNrk<&sMvKx-ph-WvnR%bqrR&rP!zMI=A&1UY)XW6pg zfvh%2_ErP0RD2E0SWD-p$ji>)ug47V;a7R7TH za-?F7i13dNUT4`#rdMc1q#%J=_$FPh-j8-d8{lSkFF)b>`N&*I`^t&ijFMY`(Z?wY zp`yZ8Du(?IZ*B#ur#4Nt-J?NO+zJiFJjf?{eyM%m%$G9a7c#KUZko48J_8F9}F&5B@`=w%*MAYQJiB z8JlPeGiGa1o2i;dsG$#ckt)f~9tZQ+8Sw z4F+8^H7^A&UpGKUc9@hCtXCq=JIwGWU>%>F0~u`~V})zOdT%VLL?^l6TiT^FPs=(C zSY8F5b{uSrNOQL~BkX;Xi&dcc7D|F>nvp1FmRFNK8!jg<6j@6vA4uX7^z4{_LOm?4A_XZ~sLIm7l`tQSrR5KVCB% zsYuq+-Xs$^85G$2*5HBeJ$iTEnU_AYP)L$t;R|Ey73fmgtcEN0q z-XhCLG%FkT;hH?sPeKEC`)kx@Rdjmw)qSRkzw&qoZ{$uZ0oru)B<+1*TBL2qrORY2 z!mz1mMFVLwqiAR$?gWLGYC^4w9qVRc@%`vlPt`EF2wt?H&iKlQL&CFvjGDY1T*{j$ zGF6?S+5GTuAvV#6ecW9)%Y5jw>3;9(;Cmq?!)94bXCLgdjoJAy@3R~Mn<%U34F{_< zi#Ui`5qwRrcg%T(tU~puP$@q`7G35+qL&9iHTw4}1|$R)68Ji4CIYJ>)dNZ|5Q}C6 zq7(Zhy1e`yXYy|+b7`ZqjHn|`@L=hylK4hwCt^`~UlQf9dvj3@LZlYyJ+^`rCii)H(VOVMX{boX`HX?(cD`|J{O$QNd-bBe&|3HEbmpj zpI&=JSl6s32uyy8CzvB{`Jfmb`}-*}5psp!bm;2a#j6u5vhi@@Y(UcZK;p(9SypegW zWh;;5Fx<0a{H#qN1FR41KNP7+kF6-3 zp^O?bF0R{-OK3=aJ>k`WrNPoDjmh@A8s^zmLw+9$3a-jn7<35`F!BgdWX!#e% z$rKQFU4s~YI8qBHuRMBmgz#Kn^}w@6?MuBpWlP!yi$W@}8w32)-~VH0JU@ zrq|hRg2?V3HqEJe?rgoF7_E z#zSc5<8jKkIlj=&_cJ{D%Zt{qDoI*%o!&@5=+0i-Gsj>|;GxWR&B?O>JRL8J;wd=C zh92yc=*E)#cU_oA&Z>>>Sg)&AZh4w2ty}nu`&hmE;xtUZ(uqNHK2uO;#3o2{&*tW_5`P!q&uE%-VBzuY+uZ6QOP%JX zF6{CPU1Gr)nc`-pq*zg9pA!^$>kzq@VY5pEQ3;ndm|bcir~4iD`(c+$JZb3Da-C{T zm6_w63va{G6Crz0hv_TX6SchjhhKMA#R7Hxznp|!*TJ%SKpNM%?i}bg^foiuq?6G> zcx)~YJnk6V@#ER8e#I@V&ay^=WjvJl&Pl2P-rl&z=%Ne>f5rO-us{{Q0UcYgaDPmQ zV4R1Y?~$oXbItFHtzsPwa+~au=OS_qamdY)a36kwEcYUs^zAo%U+6U|p3<@)?>kxe zJ>cC9p(hlt>F6^nZ8)02V}z_;o%e$&a@8K%9rgg$kNS*j^h{cw)}<{kt`mMby}yRW zPZXW7Fet#n%UuTa1h$31WDUAXF&hFZcX9jjU6)VPq4 zk1WfnBgggaT>pF+JPKroOQgdA_7XvQq7mtYSs4KUNts{13GvG4Jo4qe zi@H{uAvoXXFAIARL%;m249%1b%94jqf6VKSh{(&~h9YQ2Pu1|7giOTl`A@8|Wr@3{ zn_)MW>C2kx7$K8V%mRXeyH<^k@?Vg-}>}!$(0-DbB0?X(i~! zbi#yYLlACWjkM26t&s+x@qonws^i zQ=3G1yU8nN_%%aitA?m&QJW(Xb4;1PopPmvtq?+}qX}*pj|n#L7ISysCApbn5j93Z zgDvubbHodJfm^J`tCd`I&p%5Sw!W`n%{?IsWghCR({^#@;+RFNPsCtEp8!AE`UUO)C30FtawsB7jYd;uhYhl$O8LM0H4tpB*b@z|O<7U1q z#Ke^YF4PV&* z+`K{?!RenD#fS2Q$?4f8vT4MrB(dMZ+7(~^n4NjUuB95-1^fQ0PKo%O)|*^K_}xu~ z@RVaSz_{#|r=qud%VQ>d19$Z8R?V<;y&aUe=iiqJj(<&7&0US=FGOTF#MTMbZEJg~ z!FA4ZvWY?WSn$(*?u8vWAWCHBBH~DjRvl9A!CX8^=gU)w7o`go+Q+vGf(RPf6 ze>;C)P2FH!stRF%a0~4?Uh(7YxQ1;Fr6q!o9yX$-(Mj-1UcdW))mqifV!k0>K3V}E zoFDxj2=wri`bDjf0QOOiYwakbvGGiy?nrc~W+g?Q-oF@@DOx_#NgvI!RkA2J2bZ zV|wAC1ad~(35QO{XhjprbHvwA3%_HAgh5m{n6g?8_5)-}46Izocl2&b0}PtdPDYsa z7B<6Q;mmbdeVgg!U%do>4R$xT;Z#nH>`b|{c5<8C8MAUb`fCJN?l@Fm0O7Y)* z-hS)&;GsQVYqB`w0fjy;LCWBw1r4kpL)KC)EIK^$dq1n)NDV*%pQY$kwo2S3Zv&DM zI`t!mYSspTx43N~F%>3~;#hVmt*n@Q4_IeWTFZ?OI<64wpqG7x)MX*+F*MJrfi7ba z0pG34x5Bd1<#j{p>y6&{sOBq?&Z~5+qL1*z>K8$&tgaMag6$(*)Sa|4y(sxh(+(h$ z=L+>~(&pj3wLblw*P7DhYbG;x2wJ)tnUK+!O(g?q`mZq@&XnDOUxa(YeZ)?t#D_k; zGBoe-YwG5Y|FdiOV}dJ~UnTa_xAR_F-w41+_UNOdaiLUn%Ws+Rx4Vvd#{5Y zlv6(j>n#l6U$1eh6;hh$BRS@GU7c!Q&#b!D1@N`duK!GViId^f}b6oGZpdf>HXMDm2WE5{~?wBGG5KTQTZ|aef(ae zoPcgcwswuarclxv0O=6l);Hdz z?x;_yPY#pi^XRk;th^l^hhJK*d9*ys0eQF84TP`|W9e@(rdSz+m9lBmKW0)4`1JNQ zr=b4M7D4JKfZQOCH`kriL+N2p_Z1j^FzU#0egD`BPVTQ{5?$TZjrJUM?grq%^mwDa z+54W=3z!kjJgXe%jR@AlF2>TrA9d=$;5ym-5W&JXLSb)PZxkQ7iP>AXb!RNffjp7{ zaJ}%-T^6Ta1jDG)#h6B!ze3pxG`)Y-Z{b}7m_{ZdB2gYxVLb*eLWadZuX4V7VX7-UN>!Wp`MHBE{+g5uTr0YWWf<)Cc01_6p139RAmm;J6+P!} zbvTeVtg6XS1mnf(8DzR~FCI*kC*O@e%!q*v2JR}dbk?iX%9qO2nP(&V3vpE%v3gZ@ZQ_Zli6J*S-O#p7b{7-WMGgKEh`ppk_nyrRa4(wEJF7;pvwYKXkBuaWW~h z#u>T)CWNQ|J$ZSi&dNXvHLdke(D+#PMC1Sl_>XCOc7ZYcm&~dU z*>&qXRHz=FUv@LHQJ13C1pEUxr0NuM(ly(7#@RROp~RNoE;2EnqZMOLOX|r}%=f2Q zL~lgS)EBrh0*tgExMJJEJ~6O2zp!l8uK|hv>Y7h&)_>+Up_Mvs^_xeO`GLtEYLgL} z`ar&e(nmo`IGjegXGdH`?!vzdvK?6kMATO%{#l_{PEG;Fkpm&*vrC+3+|^N9@F+;n z=8LgQ5i#w9f6aD;W-SgIu@m=>OfNR2U(1=A5|pWi?zA*R+?;rkGL%hbH25qMJKCNT zC8Gg4V6nf3D1CaZ!(aDRfKAxfu+Zt-_{%%0N*pAVEWCqyEud7U(UWoAe>XLxd@irn z++O0IgKPYh;w6fWw;I%|zAS7FJI{(i%9O&ongaT;2m4fsQ`J!$c=Es-79anPUiLVG zlENmt+%2Z=2DyTQa{}kOn9}dVe^pXCJxbVi_K@YNeR~i8lM6HW+Ln|Vy{TDw#aNeKcJ*TxgO@EQqmQViSBD!n1B28*snm6G*3fi78`BUfKzosAF z)f~oT&#)H>Gss=-!V?7Q>{^R+9@QHMl}7@66)aeHbEAh)rH`?4V^5&%w{~R$i^KEj z4)dcgHe`FnKYS{V9c~%{f*|Gsyw z*$eMQ%A1;LPbH3tk71CQ&VOi^^Sl{di5LFD^J2^DMpG*daAR{~xe|fg({XSyTXmXi zC8#di>ddRVa{bnU&}U|Y5EJ{BM4;|xt?sqTJ3}mVw_SILS-ns?{Ei9$vt(m^TWTC2 z2|RpCH;V~xCgBSW)+#zCNEiHk#)2sd7ub3yN***C8ygQlO*s<{|*^(}sSl?1*-uygyx>`1cP;@8sIDE&W{XYiv2Y$-{|r z+QmNz61|@Flb5>nGoL?V0_zapCMXkskN)WfKX{=NKEikgQ37d_)xNB2FNJEn&mqA$ zL@qSG-peoFI>RY=*_J8Hrga(ITaD109na|(o6ZqpAitrEEf{HJxK2-OwwO+1>(zp} zIIwJ4bU+j13p-Ky<$bq2KdfAEl;u+Lr?6=`TqbsuZrpb literal 0 HcmV?d00001 diff --git a/boot_source/code_app/service/CanStack/canBus_Com/UDS.c b/boot_source/code_app/service/CanStack/canBus_Com/UDS.c new file mode 100644 index 0000000000000000000000000000000000000000..792816df6bc00577d162b12f98c6df1e5ec302d5 GIT binary patch literal 69632 zcmeF&!?G|u7behS+qP}nw)Gy{wr$(CZQHhO8~yjF`y#%KGRae^HArgjR7h2nMQ9~V z42(@2X^Dx6No5YgC-2hk5bK#B;)dQ`i2wmW0Q>>|-w*%*1WQK-3f9v1{LiFx_fV}_Tj{lqeC-9%Ze**sr{3r0A zz<&b&3H&GUpTK_t{|Wpj@Si|#J}5%7Cj));goa?9dY^G;Ls5;2F~N4m0yzOH0+LA2 zm~4A4JB7IlYb~&@iVCr8LqQPLFyn^LE$Ruq zsh&Hwdkrp6EJXzAkX}AU1x|e}f*vIs^Al!+QOHd`5r=c8F9^;r>1;I0vgYcpHxK3|kC~R4tQTyvn;7tFljcp>!GzI7=+Q-MtU60Q6!p7b_ z8zF|Z+I1b6R3D{H!XUc&;(=>=Rhk+n&ggMS5OK#pi0!lHs~Q7|2Om>*_MRn2nz1`} z%KMd!YF*J0;z*O4_*!ipa$LYY@gt)m-*N2F{o*4}&H}zU@f6Xz79w%D<5g6{Vr?-Ap`x0rmd7`n`)u1ZUX>H3FYxgaxo;VVZfhU2>~XS>y|>JM->;ssoH` z@#cn63rYh`#4?hyzEN({-%p3Gy^ zG0KRK#}1`F&{abWA&BlC&qLZqscZK0?yb}O4T0n}+XE+gr{VgpWgYT4v|N7&W)Szz zE4RcK;6+5eWl$mDam97Hclzb0>6N`#r99Meu5fCZnh})>tkvtC&L3r{z4X!?cY~CU z0ptunU+Pd+jGVLMAGlVuc%w~u4%`=`sVAh z6uN*syw4ZwSPkgs@n-yTkLZ31nHf3PnBr>tO@nfqXAd|mj-lDWGAWk8C1sNVxKy+) z2I+c`c1=n?mQL+bK<#XgN=3n1TgzTX0mev*HYU(}n?OlNvUY&e#}=DbQ*ff(&=4~! zc0z6>A+;%jvLulmYASA%Cs2qFa=F~F^t z-V1H3ju}h>PxD>2cV*L%M)><7@5~_%KhWHFcPTh;0z_2Lut05mtE4FRDjia-zkDeU ze4MSa6Qc59rDd>(DZnQ{AL!(3Y6YAGVG{qW$x0+-F7DlJEo09V)QR}9BPOxw{2Y>E zx9y?RMkKn70xcf`*k4WTD~YQB-m@rJm~aLM&k8=EXmXebDSoBHT+18y$pmqLJKWm+ zjdN*-B6YJ~wZuvV&fA+_b35TFL~S+JtZVU=EM-@jUDMN=W5E!V@rboV7X zCR{8DL%yCU)pp|&z6s0bHn9JE?Tr$0`WBZozvLSK$*$e^UjvAU_&wYI!HRlMM2P$= z5zTtW#wRjCNrdthyTb=+DPZ~}P4uEOEM`CMwJ5wD3CzbEB;3V>qo;>*_pg>-*gZ^I z_#P^X4-oZO5}p*c5s&&xZ^F7u(ycK+1+SsGmF}HEf~rZe{+yUA-D2_s=d=)dVuSwK z1PxMleG&lBRgCdd-X8n>=dBu>f2or4v*!j@g!2i@ScDGJ^n_A}@uO#ldXd3_T&|G~ zg4%X@|LEmv`@9+(&v7Kl@RX>-@7orW1J!1Sor+KGR@yK^92U~iAjs7Tewazou5Ym= zuw%ag#iLo^UHv!iCvIfK>nWoP((e>Ce zB`L*@xn(zGwClJeW3t?>es9|nz}oxeGeop4wa|_|K)s8j_kp2x$26d{;qO^gIzIo< z5@$?hO!+;R(U?PJ<>y=2A%ji|qnac7 zH-kriloL_ZBTwfsF|+26aO-GL4-w+ zpd++jRjpfV0$4?tZW|~s_(44i2!5Od78@5s_ z)BECdq^1*Ci1Vp78+Qx+$N|I9p*Hd-+BAxBe22Hx)X^UrkztbscCNsajwh3jDP623 z>iySCAmJY|8eIE#lTz^O5yOl0uDY9c_mLhYt8Y&rx~Tj*OboSF;hW)Re+9>HYt69?p8;yT+)eMz^4E88G3?MsoiTO24RZ4m+`gCLm`(C z{*~I*M-xs2OA$sbd4c}Qb47m2d7)HS0L^W4e@ogWBJ|SH-gnrycDu(4nYM0~mz)rU zC!YW|Pw(8+NC+wxF2u@8SqT`jn&q{}m0v0OD!8Leq}hUkJuDgN5Z#W`v`3^?xU&jOQT}YpR3Sps9uEa$ z++IUMi($J}#D0N?-LOCirvD3+Fx??MuypYmX%`5Af9=ls^2xj(a9_#4am=W_f&LZ6_wEYyt{(`$6{ZKszD`ZBZE`>4 zl~Sqq*|#4#jZ}FlLg+;ix17Y2kk1VXv*hb2N3wcK(+nSn{9-Wi$PEJb)|<3P9E5>Z zjmZ;AFR5%)49O;6z1`^=QYtHrkEp-xZLts~Zo==*O! zO#lhWsE)XaGG!!WUC7SQaD#IrMv9V5=?dMk?zTW27?$MEt!bPZTq7vgh+ZCC<>F0_ z_iEAQG4daO0B6ceq@)JfLNvMP{VnsekDR;d|3CDBGwQ^Fpdao#iK1*Wx2VyVe%4 z(;4U|Fu{w9qGfEVk@_*obYdO_0!;nLeLm^KsUh!mPgMb|TR0Xmr-_7Q= zmPz`N*0j7$pZb*;>cng5Fcji{wv)#_YxwOLO zm8%uP`{iTmB3PmAn0;)`GW;ndbBjBqQFM1M)L07Gl5HO68*#4yKw__^a;PS4aL=x4 z4&!p-+|aykbWhj(31VoWpU!JA4fN^WAu)7$BSdS89(sjHGl5}go0=0IYr#)Dyo%R0 z$eX|4AgtV)OL7Ng1h}7JeSp)`Raf_Nr?};RjVL@!gT4U}XhI=H(h2U@>~wa_;R( zjhU5UZz>#gN2hPo)Xan}+D;7QsK?dIQVlshqrzZ0YcN)i2Ak`+K@T^X7RXsQ)13sqHvTZNcO^?4 z_W+-0ex*fIvuVqeW00G5CNNC{aYCwT(oXA@6JKw3jm_$ZXOe5($uY7)$>W3ZL_?!$q$MzJ@U(`n;Hho}|{d^6apraBSNE5YctEJ8$`lfGY`&RDJt|$fub@t#J(gHi>c866Ul9q}CdaP9kgXd8a;J8fkDP8dFv5HQduv2_D-SYoec(CiL3z5b=w zyN|M43)k>SD|}m&ZHfW>HFZR$P_TpTu=>iP63`L}+wyLb;uoX9Y~xha9a?9xp7)3B zG=c`@Z+Hna|HPBM>`pQvUKjks)pVCD6%{^ao(m9jCRFwN=%#vwb5@d(`bB(HjbS&< zkU;Iicc4jGk&CvsjaPDa<<|Pq)3VC6`bw06;A4POm&FD-I?NwnovU=|asx!ROQQD) zOLt7c?1Cgv6H-+mor+kW9RZ%@oIaqdntR-;;yqobE!xa_RXR&&WHz`Eq3KN%7@Y7E zew7Sh&xW>|qYnjsfQwXPu>sd?3ap>3ljBh%gnvxdiL@1FnqyaE_?-y2H1{uepg04Y zX$o+!--(j>-m&9teC?tidK&X6abI^Qu-^zR9#R{%(q7lTLK-@&WU;v}sO(zj=CZRh ziIp>Xc5_O-?u^DHdOU<+ftPT1;b1jYLGAB$zvVc+w4#{vt~OO6#{AJ$RywI|!BWeZ zZY)X2GV{mN1HlhtN#0+$?6s+Ixzs{#>q{&n4?4#+(TqDp7W<;DF)pXeBu!0>5KZV} zCLhJFoi5BR8#xd3_#S3jHIw&=Rc!j5Y4iJl+B|oq^$0odZrRxD9dHgwOrCh(@WDkE zRoe6o66nC$P|+iW4hXHqBz-e)a$tkXKB?Y=<<$>iICZ=3TPwP!w59E)T|;fM1QkivSoD@JR zHiM^z^wYT&C*Zx@mlX#nept5`>U<=FYCDH-`Hqt%Dsxa42Nmw@vleYS^t=h@Sdv8T zIukLB&9t6*?yd&Gzo{s(2W{9Q`+VQ!8s=y1Z&RjFR>8X=Jvb(^Z5n!8p8&<>__*B< zSTF3r$^B<3AabD+UgC2q8nnpY3_L2n! z#UgsjO@V_mpudWpz?rP!`%J^XG#g?O&Pg0Dk+wuspX+J z1&J)l?Ae7c+wJCgpOU)v5o5cE6MZtd=Ycoij+q#e&FB1e_rVKnQc9TDsAUua(croK zC$V4zjyW!-+a?vo&VyAT@UQm)hbrt`WnjH}tEf(KSo=e2o8h69`UMlmREHatZR(kk zQ#WWf5P_fX`V1%jIR92V6%4cv#FO%366OT8UQ9_{i%MP?8{U>rY4EPvt-B(yUgn6- zh1F6GPsd!RCb^n}UvN&!42Xq>9xO2ZW?q{r-vj`yU`BF-|yc=ZB}Cis5+$}TLc0>*#jxjwv8wXm|}IEJy%0t%k8p~mv4qqU68a&-X__P9oWPOMyZUr#dv(TmJ6g-jGL-j*hvoP>lEz}(QLOE-n zU3s{k+Jk%HC;yc+@(~Jkooz?XQ2gskx<;Jm3E#|@V=$AHh9d(K;C7-qXr1n&?(4R^ z4FxZ0Kd8PgsI|0ao6+tya0!y9X||BTJ0-d(E-#S>$Y z7BO5s{^_28KnAK73-t5n)IZh5EJ(7M2K2W9OkXZP4RK>A&|=aLG>EBQB0GyK1^LDV z!*s@$DixD5=R&bpRU=P)mV@+Y|>hV-DAQpGFU{HZbeIdmF_?xqo~6PC&W$5K}!HI1XN|k79V`TQEH9 zdxd;_Lm=5NbinyZ+z}nG*>K`ORUL`CCC^O2q6@OBM`8M(%yV(ViQO~=nUxe%)S)X} z@veh;dP^nR#eyq`VOuY$5LP0wR*qV5Ho}ISzt{wTfkx=wd%cd{bs5v{ha=}ih1WN2Lk-N8 z*$+?C9>G7{`TYO&Z%7Nkox|XfSPGxHFZJKEVsgv6eHbMH29_GlA6pjEX$;&$36mLN zVl82cCQ_5oofTSF-=NWh^V_K>ZE=P!7&?BlSkoqNcQsP zSDV5=prBlb=E`y@50~Zs?C!ivDZ3zq^9m}=HT|$oNIUySNOAy$cRbmel3-`VVu?k? z2=SRC`N5uvDjYJ6BscCjVkSLGRq#Zi0cta5Q^$dzB4?%+9WcuiflPK_#$c_LwgvJ{Ou zwWxTZ2U~LeL;6cK8C4s(09N53YYx}wh2e~=sRpPZ zdmw=n19t!i*8O0%s_A>nsET5{feLYX>YW10Q;jX;s$|NXd2gls)W%iX33859y7gKD zi~`6CnoBqvHL2*&p$R=a|FV)Bqu-q>9DA;dM5h(eHI@U04xvqj?$V>G|8Z$&I)7p2 z*eQMC72uQ#;`B05*oaXH=!VRJ0f7*P5KB^zWpP`uk)Cb7n}_QO8SlL&)4G3op7_=8 z4s-bd&tTtBkQ%3+{gAz%a}Eb17K4aO>bB4QmOzIcS!$COS9+@VycJ=~&0RIiJ=~`d z=n4vZ@$cv7N4v_5ICA7X^oR&dc}({)jwP}HpTB5e$0Mm(7mF&4@N<#sXRdjVH(beB zCt!7~5$?L3r@~ZFZY*}GfMJ(Ml?_XRoXr&vnR}dm%v0tCOpFX&XVO0@8(XNTfp!`^ zmGY9{cD;YAzq~;E@+noWj4B93wpg7p?f7zNZYEM)P&fFkg^V*KJrClH0tNoKfzE`c zJCKp_?+C(43Oo9D-4-DyEYGU0FD6Yo7{-2Yuf&RyrKKEX@c=SO&2U{VE^Gt3fT#Lp z!i6hEmN|R}o^XyDU8GO>-W;G#yL8WC7#_n*=_KY~t3V=?X&U5~o3{R>=w{u?-Pw6{ti;;^h#onQ$^ z+Cm`8IMB}T`wK;x?li+7qN`;=3Y+XAyoNEGfL$%Qr1vA}ih4QmG`_Mx2EdC*ezjwe zAS~1z(CIb9-C%~(+sWj{$!3UvjWM3deIU*EIT5Bt8bIi~T7EW)49qfKfP}SM!~lAA zT(8ocONE-$e6|lwLyjgeD15l}+Ms&s76s5L9Pv<)Ze!aK-ho%$#W+oMu)F=49358n zNNt|zBEJcd+_7^kp- ztg^eE&XgSYj}QNNwJ#x>DhmaQ;_D0C*LLh1v`g6)FY&J z3r*!>*h%=--OBJjep)Ulq){rAm@QlF6J=h&S04rzQndXwiSQ>OP=j>xqGFf_%|a|K zFmhVv=ezMJib!T4HT@-;zM%H)1C3_DAqM|$ymqA;TTl;i8A9Ds>!v|+B@f*m|K4j< z2lF;7O!5yYpNM$2i(GFM~OH|0HVN<*`} zT!JF1EC+!7$BIUg7I2Coz9jsNH`3i%W0aN~#y!e9E5-?>z{bLQ5@f(I=74t#@;simoSplv?c@<$1aG#5vOOul%B=o#V0XalyuN9q^-=Yyc=s=c`HR7KD|#~ZhjMT{f=I2%A~6xPKN?tn z$MWW#Uv?PQ8&f%818QDnkwO$DNwF|s*xwz~jH+4)6Qqw`ol{WU%4F2gZL0|$IiP=l zo~gq+4J&=Gdb393o4h?8e5X3-*~2D~u-ndmRTjq#!zx>~WM6)G51>~p7m11f#v7#2 zuhuJEdeUxKO#!Wn=t@ULul)LtSYas)pl6ABF@V8#TY(R3CHqrYbNY#(=6W?{Kbp`P z*8m;{!siaKLzB|%WW)nh-v1vKWYhxzwV?A;o$cRhY$s!XxgpYk>jp+G*3erriHyhm zoAGH5yuI4DBaknJs9lzBMlxe@B67nw{!L(3`55BP!EkZ`c$$10CIj^QBh!$Bs{$;Q z96sdDdmZvfO+F8&eGN`{_O#-p->#zVv#*BYa0*P9q6r;kQ$+in_A`2ec(7g~l1$P7 zlRW$I46#JLUp1OV5`?Ti*GQMaTFdE&5E5_D8wa9bB!Z4GL(NsvSp-AMD{qescMN)Z z;finy?Zmr*uhO%Rd6tzHgmFsA^?*Fm4UW!-bt6D>7Q=Wn`SBGdl<}lnY+wD`&-D9+ zMIIdCAc3qY#cK&-`?geMS=RA4NI(mKN1t{Kb^k&H*q2`om)EA8)NGS$L@gEMK(?(J zx(l-yk6{7=PQJo9&5Cda_p~M!1Q++2QFu!~9=w#B>a&ALX2idLicrYx-Gph06nF~N z;tp=GD8lu}w#)v+3H+VgFQeAtX?cxyy_}};ja%sdJBXi% z+)0=rloqN*(YIe!yYg}y;&V=Qlq6Rft@tVylmvx5duIfCh>iVW<;?l7^FBH{ya5n!n3P}HvB3SqPT5H(FIpP)p5;ZNA8QqJE-#4 zyN_qdYoc2iT)_Eo%ugACr5PViyyqNgq=op%d;Eiwu1f5TST3b=)JB4?FJJLu5nLlE zXo0qd)l%G4D|}~dBn_jCXx`Sm>QZ%vba2v^G3aVJA#OFO128(1DP8lG4QbIta!)mt zxi9|^&DhsB9Zq$Qw-(k-6yrIy{Z=ihriu64NEQ-I^Z$DEvaBr|1f3Xnsfyj43^5I9 zz%;=%&dTSz9tK|bvq%|V5>|_=X-)&^*ZuHr0(UMdM&yO!It&H}2>c zTm%e}Zwdaw`MzM+@6RG0#``pc&#bFiNO9^^;lRK`WVINvtQtRw3Z*;SDSXOV1HlUv zQ*k>;!GV42=Zn@&ku++&iRQ~|lpY}rD!717>>z$hZZ5|)C!VRH&_s-0r|4Zm$iIpGR=u z313D@R57d7@*y|UTMVEGYEl1)VYW9Y-;jj*0WtW2Bsa^zBj+;>EZ_fpEk`r-A6kDM zMB{YZ)gQczsBOc1eN8z~sne)Nb_<+kxX$Onc-!d0@bXRgm~3W687p(n;Ya3-QxY&L zAT+5n22|7)s8K?ih;dv_hmpe1$(%_T=gD@jCyGsoy!y+z&+>&k6e{`Og;YSO*^`wf z%(>boSSd!0e%_A_(ETgosU3l)~f%n8z|g5vUteYAuM zR&FiS9C=(|X!~6mF+4*N^b64O1?WfN-(C1*8of*rTd(Xbc`)-yU*p>J=ojF-i2&a8pLsCU@G>QM}AQ{H$` zSnOF72e1f6dtC={-0N&K zTC)QzbNGv$O8LEZjs(sOBuBHV_L!ON=xfpO+GMnZ&yW4(SpbT zId6uhkb8(&8+R?XG;8pExuG^EBF1cW$&t+aa~*M^=?5ncsfY*i442u*OCh2;DaiAS z-Da3%hiOw3*_9EL^ouP+ZQ)f|gRjkIZu7Z|Gn~43q`XJ&yG)=}95+s7JRfqLhHK?8 zZ_5LtM>kwr4#-(WSYe%}5sc}ZXW$1>Gg)~C*>v8~W>vR6is)^(RSeWSkm;&hP^Ri< zS9{DUTb+8L04jpwP>+)~S2HBu0s_(cL+y7@682@UDgEQ|H?bTD`wmP#7SFVXaTAtt zlcf>E7He@}pm(lhg?AAyXyh3sh&a}(d`jz;vZlMFomsm)9C_B5GC+@oj}G94rtG22 zZ)iwlj&)b+I}any&c_}dDiG+VweE_D(Lv2mp@KABXiUZ>(bI82#VlQxCy3tjcGOWX zeDm9ORiv3UfEp`k`gh-O3Pl3GOsMh(Hx}HFU;m_n(L%0U=8jykP}>kTts|Oy>Udo_ zQcjE|EZV4K4MXpbKr+6%HKhx5@GJ3rlxw&@FU6NUw4aOL>LZhma|Z$xF1w_>6G*^* zv1kg**r<;u`^61VF(7p-N?LP**zFg$eX8oOE2Z`X@c})hIm|F4wi>f%ZPE(daxt^j z<(SC=B+kmLcd50GzLoHH<;rGz#V}jFv z6G%TH)??SKtEcxVB;J(`J$M@cyLJ?Ml0;C`|A`Kqh2p-Fq*hG#q}<}Zdp=7j3Q)D5 zNww&0$YSk3R-Fw6{RJ`gKn5T(NGfRSM{`cGy$_bSZ%Vz_*Ejjd_P?&h8Ae4^M>6gq z>Cy&Zjl`*YG5qb1$UfJ%`8mF>Sl`Sod-HP#3nss0SBJLtEXFi3{2dHclCPHBRc3!A zwz=&tEil7%A+-6Ld$}#xn}{EzOod9RlR0CD(-1yLYse%f4#o=NS*WWXQ6;BY2Dx$zRDeJgUhqM_FPKT_o? zqrPwDwDdV}(hF|@2tO!wr1clRo6$F=^ppl<&JCaVh$Xq1mF9B{y9s4hv*OAfm3Gl8 zx53Che6~;>hNwS5RHVb;>V%Ot+~y#~dEI;OPQQ->A*uHu%~UB5S@oc;>NK*85&H_`ysHKr!6UH$uA0qS(6dk{vQa*lVsuX~-ufUQ) zC{fdKV{;$f>rdF3nQ~Z%=)V<2ZWA2!iOk2JBMYc|P-dAWxH=|}YDwY;a48k=eQ4KK zXVr;}y@(h&(0$6_9R)9u`6?K+E%3LZ4c$kS5MSfr%ov5?NI2gk46PmqLf-ADy8CZP zsDi))B)1uwLPcu19TRugL3xA6@K}TWi?i!YyBC37MvZCCpplBfswMN&t)U zkbaFjp#o2~Z;>zFKD>Vc$qbFdA`Vm4tabIlIWW;l++vcVXJTrtbP2g4eLCD@!a66c z@W|kz!fs{oYz4F+V3{x$NZa=5NzMQKLq@VULHZ}i5~tzLS{umyrB7o(KFaK1GP7R* z^Hwank2zLEi(#eMLTw`)#mHsa zsg__H$y4;CgeFz#^9a4j$g)kwZrMR`{YW=3*)8i>NZy@phQqRy!c}i!$!i!rS?QCi zSyP_saH{eo`hU{Hq9A|S?l1K&>f_?v@K}jK zS&7LO9{(i&clP3;L8)Wu12x+jtf;~O#B1oPKBH(xNL#zScVLK5hY_`HFIJM5LkD9) z-Vl##8Z8mt4o1`)IJ^cjV+Mr^s`-S(SEMA_3?GJ4M*U@BANJ$xP%@Dg9f=UZ$jf&# zi%!A%%aZvuNXA+3R@DfIhgKf*EcO9i1jiJ|Doin1F8G*mz`P#8oj+$?`+8=u11A!S zbx4(E5dGibDRf)A9q80Rlo@GO#IYY>ZhShkB7uttrop)lt3|nu&~!Eb3av z$OsrIL~!hdS|3zzc-@S|!;*6(6OCO1gN(@}$*^ndiAy55OgxB8!l}qN%qt3F+Q(E_ z*wxxnrn+&!kKH-B#J+$~!*Dqqsw;H6vuu`YR_TpG&490AlG4~QFJ97abh@ie6qI(g zy?NJr48W40Z?;54>#cQXHEFj|J$U?)sN8GAx(GvcLx^UMEH5JExr9)MprMK7mVwUU z|3|r%J5Y)2cp>bj*pTJ+gn0vKE0Ia=JspwT#L>RVv^}3Cs0MrYS2h3dvy++;+aP~` z%)0GswGDOAxnGaxmhok=W$JFl&VBrpPcKlx$>&xGbMs_IW zKwJsV;4BU#WXvA!ja~;+6W!7CWH&dN&PU=FV9gnY3)h0?~#9RM#d<3h)a^JEKB5_dD&5S&L?i^ zTI>e2)FA%elxhy-9h-dr;zkrOi!pCvBi8O2sR7T@+fit-;z|J83kQ8w5P)OA=tece z=p^UpXC1JF?2_Kk>>*I$L%+)tW?D=4D$v-& z)OEk!VA`9}@UQAo(s;fw87G!5x0Y7vh9OS>a@eoPwLVA_nyHFHukU!kQQTcROr$2n zp%V}6$9Id%67<<05PN5SE)*C!52r&5nq}s zMUOwH5!z{fmrm`NN@paSfTD_-7d&SFbEuOMahhrFoMamARJx^S0te(O9kEBBXVF`T zXorp<{Xuob58RzaRb`G<$60`MN#+NJ4LrBZ|##*ZI(Fn_oV40i{`(BBB!A-LT0 zv+c4vzarANd_Ga}n0?0bKAs&`PRY|2$UX=?x)h!ujvzM6>F`M*x`Xyp67+llR8yQK$+{7kr4Iw;O?$8 zmV>D>Op zH!^#!gIl=nCd1|2uKU+N(xmz<_;NH^S@&39JfQf%h(8wg$<#k z5RH*>?b?-~Lj)xGC>!TA280G#;Xro`)t6ar7TmsencqmT(=`R&di`T)3jiWHvwC-Q zSAPl^f%#3a5Sb2uO1d+TZKbi9rGm9FR(~g^11r;OanR)xD>z14+Y~W-)(j1w+Xsa| zLdf4I#cM|m{9ayhSimPKN0q%?TGh$*@eXZiL4#|Vmevmd@E@VDYRN$=4taZ!e~dy2 z$phqwaRr=dt2p-+iBEosM^01&1?-Q$zd;&aGe)?3>OqMHxqeYYuvyNhW zqR5@nQ@fuZzJ$zd93;6|L$h_XvY9}bK6_@qzPH9rU{wpv2am6#jldfq)KNIDy+GY# zRkE_H|61ANPGJ!JmeT~b%lZUasbO4jxKB=`j#Fyp2aK_Q-2a3+w=ng!5one|gRIOW zHHr=moWIp>J!zF@jBGA`mFW3?wh80x1rTDDGxH9!463LdorD*{R`yuO-o>tdwBz(T zbWw>g9D9EPpC@@!`M{*RGs#(rCQNj;EyOUDL z2bxMlUh}iklPN3aq0ZKDkfac`n!DxH8G_@kO9lkmEoawoX@P*DN%Z#X_VL#v!IpHs zl11x@ZboZu?^UM~qu9ni8+Z@lByoS~E>kasz?KHtl(rptYX(tdF?tW^8X){5*Ee08 z)a)`J{VX@PM z-Y>t0OTH8kU@($W$3Sx05Wkui`%QI*SLv-Sui9+XYmZ3a_1RSAquTcyvX+B0Xski0 z$=-r|8~v$?uWlTgj^3hX?qPri^%X;b`JOaG)#ZT00-g^!k|(A~`B$u8P9) zOLc@;X4i@=QpFAsw&jj~77lJt`Ro|Nj(&NF0C~{lg1L`r&JRBYfZOUeg%(KW`1;54 zzh}W)aw!>meNr-}67l#7Qj@_zj|cFYZ>ycXoO5hg7Hb1<5i@2WKORrLc`vM)7UDBf z)A2;XrK4*^%hfxEg!#>~h+TJ$IO#mK`fJuT6;LS9LXE_r<9sY*koqF1Rg-R6PV@#G z;E4jShyGyYdoIV`nRfkIRo6f0MJgZX_kszkI*%hMmff;jNlymuW;=81MIX%Ikp8$6 z*^#tvfp~zp^lMUBWa^vcS2w*LqSG+*;zNEP_|Vl&|KmJ%A=(&ubHUITk`@hTmAz98dDm3rb@6|%SEdq`VcDx z&Ry72ci9~8YhMfaATu>~AeWj{Ni9RfYUK0O{Gk910h1CjMz?K15U}YszMz?*_h~g-v7Jc# zu`w)Q7bgd>$&}}W2PvaSRUju1f61GW$SuF3-@i!Nc;p;ith|)-C(i2b2x_UKvbtwG z?zG5Qi8ez3+C6UFz;+Uixws!}qyPO;kzHlV&7G>o0x^f3G+gUKFvVv!i~gr3dtMVe z7hx_GT3lHL=O<4wmQv$)&Fv9&ld^yJ1lSoxW5hb_Y@i&yCfG=X^6xQtq|y2WhS zWIt||9^W^0u}K@OD;LeUaTc0dUR%2EF4*EI;NCvc>`Zd3DVW+iRDm+Bv;gmTFYcLP z>rI>VSy##uvARFGx<@~A{mYc)3}`N9tVVf{ibtdcVa+TRIwR6jC5p&MT%JoBGrKIY zM-+)|;%t3rN}eZ&9#G5mSnQa0^OrC!h3MDZZiK}7bo(xsW8p)TGNCJ)c*Pu&_09Pb38Z2!Dp7#bxn>p^-t3F_*w>GNB-7cH zdruOCj#MwjRO*!<+wNfm%pGqz zA(M$4pKbNL$jCi`go=J9+(WF2@E<+fK5(M@J6Izo)h$8Z;E_lv=IhOg&YlCoTu&@< zHjY>{hfxq$u`8JLOO(V{EPlS3DA9q)Rk!gNPG@hPz)~oZhxp1w4md@ur1NxCv`W2$ z8-#6~j~b6!=7iB1Gw)8aDJ`PFP`DO;L>L~HgP+6K83hSU(`FzPCr5k`vEv`#E3YufoQSs^8<6mj+oNjI|!i|PUaQg)6KXP zd)Y@6Z&>Yu>)6x!!*}}NoXc_ktbD#2D~Mk8-7H+|ZxjA3V)o;J)a-m{z;3wSRLdiR zqB6C+OG{BYA9D+kQA{yy{qYn>@O6pZ&uEn>TjL9ew*pj4J0^@lFg$$dhP@28ZA^(7 zkZx!shd44@-_aVRYKNhw*Y7j^D@z+dVF=nJ8!lT-5oNs)5a%1@J_!}P!&IysYWV-E zX%2Cm#NvDJR*6p~b(l4KvX1#xnjY!9h3^?h(cSaVUZ#*WoO<-eADeH}m@_25zv9GV zU5-cS-H{V-x_65E+ad02-kzp4*XXw(VHzNnwEnCrnXXzhF@=~`n3aE|dJHcQ4<}%YgQ9KJ{dml?xSqMNPNdvcqlE*^hu#PGEHD%T=Ft+(ErL#M9$L%1E3QNL zDz(=0Hh~Z zK+V57FS==%*a4Iao3x#%zsL^~YClXiJCjyd%dQp143|y-B6bHL%nn^xuPRyN8f=~q zHc8H;px#Zac;70A+Hr`Ybu3gQ9N@=%^im_?ys6#OzUSPwupR^DhL@0_z^9ME zn{0W!&|A4v%(oy)AlNvFL9gK^G9@5`-Y;Zw*xu!O>uNW6Gv?b`kJ^nkr1y0^ugPVC zts0M*p1G{{HaYp%XJ8^@AbDAp#4Gk2h$wLKI-?}V>~D}wSFW}yKX-JBx8TEEN){f$uB_r+5ulAh0smZ&poVzde}j7UX_hAEIj5A9Fy zd+N&o6TXlPa3p}@$Urv~q*}Ez!_LT8NG%N_gz;1|g6K%raOZqz35&w#ZPKS>CPaVE z8MiV;pZ(Oa7($5V?b?=397l;|o?NIfMLi0Uk-|WP9I*2-ODzc5cANf@&-XwigJuB4K zJqbsbz|5kJ30G$ zy!N_mpzdWMN5;VZ^HGS*@luwR6L&<2QWT}CL6g!e6^79#JK$~i?0}$cGZm>rH;JA< zPU}af8lfJA)N2?pz5Rfttt@vff5r!6qQWS;d6#36qw<`Qkt+=Zc;eKLSX2LjsE4!K z4>7{s;0nI zgHxqmqvpYw(cfo+$mcr_8f-#YSjm~Q1m*FGYAOzBckhb)A2=5c!b*iNY(1Lwxm}MC z%EDY=d4QArc)x)1fKj+aDUyLV7LKM#^Slpkf3PRUQN7N2vcTfrydZlxBws-yt;LtJ zPrsGrI657xp9F6@Rc{IhUlMsljM2mRE~;{z<_DIt?BwSI`io*3)5Ef_Ca#kJljR60_x$Mv2Xn8(U~ zHL{hNsAMSN6|wHu&}8kI*G$ysr2AytlX+aj=*qWBg!w*X?3h$H(3HW!9JZy9R^vX( zaF%YXW)^QPse+Y7X&?VO?SnR%L^12aFO6O-LlNKzwv-JiB@BDmwACzjjxe zGyGC1-=3GdjFiP1rayF`PA91uNGLqu#FxknwbckkjE5V##KtBL;Kw;T8Dw6ht0zJ9 ztr>p#0f-pj8B!-*H<#0F?3Bp)I7JG#%Js@?^s+3*5T=4MqI7~A&*yJPR*y^bCzHwC z663-Wrep-Ib3^=_!y))-l}_#~oM zYdJZji%h@Qz(eWY*v^lf^$QeO)^Uo`d@$A(&qH^leJr=Db!I*U+9zqHxE_KO@B`Y$ zXT+ycTC#`TOpFEnLuE^=#)3;Y#m|qD+02p9^n?QowPD4sPT<(@-0eWY2C~ods0MCC0>+RgGHt}^-UzCnH zkP>G;?0)!U0JdMxgFZ|l#KY|O*~{(1|J^@|y@E%6HmFuUT+M$MpG)doT;bnb+wntF z%WTnOJV*y`{Z6GL}eyjdu-T<>Qa9)gqnYW}kTi;!Zum1TNGN zZMGwh3C6d9=7>e!+2D#}Y@9;Zh>N0W91A7>cAZyrH$MjfGF(FXJVg$;Ni>iOei+y4Slw9|HnU68S@S6aux-B?6YK&{1pCes-tHxH@P$l7~i za(q>jW$%(KS#euW-J14uWL^x4{rXU4b05hjNSby_JX32!0PH@1o)|;Q3f0Nj>pcFc z$f~RvZ*KpheheAA3JB$1Y`WH8jYBsYcA5Q(hsSQ{I-}gtQ6@OY3K`Qe=@>MSF$PnT z7Xb8S2fWJ+sT+_Xs{pxe;}p{}+wEXl8D!q#+P`Dsz6G!g|#(j3n)zdxx&2Kr&z zl8P=34H2(b)um(TMSf|y=R7Q0JshQnQk2rXl{3?OD1a-PaLfbeqT23#aF&Z~$ zsM~3ufYa0Z9q3*bZ_U&ld7h(!eK(b5_r$|2wQEMLl=I)7E&0~#dk$CUveu}nHB1=; zY(SZx%^`wtQ@CCgy-V>%`Q9(AOB(zf(;*Nl)g~BE+5_E`t4B5%C)04)4v`~dEj?QW zJ%v=z=lxKy#+^Pu>3G%C1_pG>q6WU43Zpr-yevXZkp&F0HYFo4*GNoS#)T08BF~W+ zdkO(P=@0;ju}IpJhvmfXj>|jR7fC$%|D&;HNqia%2SAu;UDlQS!gFz0_2XQY#xmH+5&gEH45bDZdzZK;YoP&nw zZGUq0jcyJJ_vDMZ+k(&X+7S+_sP}OJHN88qkbU@CCfb+3K(S6D>*6Cr%jFWpKFQc~ z;exuqB!1IV$>gM0X_~W4CROLh2%hbX+gJ+4fC|s^-na+tneXi+znipC$AL^8prOw| zZ!aeY_=q|{Gjw<1p8BS$WTb6X;h=`*dJ+l&iRmTR^KNaMcQBjm!9M>m$v{`o+n%k< zTb{oEC6{~Y@5FR&xJ=)zo9P~gr;n~wqj|H}Yr#x;EzOIpb<8x1oqy&oW(OGbw@34g zctd28KhOvyiopXmub0z0X+OgjO&CJAStDbhWyu3J2SC1nB)dyX__-qVd;(Cf!neOiTPml;3`h8wA)lS609 zx|i8J{vX=%UqV(_9|pf`4nO|d()8*ZB878hf|Q40 zpp&p*u}IqDyq+LW39C5;Uw1yxQPdhG;jXE$zVep~#hx|!BM37rwUfQv%$1QO`Zl3* zz{mlCA6&x-D(6V4@j*Z;fGnKPAgHlervm89z!aGYEd&&^+)|mNC>X1zwTh(7(-H#? zeHx~BZ_-k0RQqr#7@B=f%aX%!6rutq>(eet$^$>dY9bvy%Q?KZAl?-L&I~Qh5hH=k z1ItdH?UCL5L2GWC5CSkZ@Q=4f24s6iR4d7&v}az=`AN-~beL2fLVp0WUfYrw@KQ$T zln4_s#kx3&B4t8)1<{`ro}$k4D?sih8(cy>t6jC0Vt2MQD4RrqvcK@V3!cx}_*qZ& zb4Kcraw4*y4#j$hMfx~huv+dDDsAr%Z8Q)%$Yx@SQ@Y~;0l9@=gAPi6HbPGq1AbiS z_c0226aXogw|q7+HS%IEXjfO>SPV`EI^#-*{Pp^rz3mb4IcjsxTVvpn0c$n|2*0l zc_&%7CK#Keklo1X7e-{ZKDN7myT(+c*YME)KH|QNu(>|!@xnYC0&&az zE-&}0OusuV@g)nPuY&t%-h1J7B+y|A7xv=}TiEph0O{Z^8n{%;_`WknE;tBs? zvfPOCdt@_^fKB9d&6!LoPL;DD%Bi^><$1#zk$R zqqFdy61=#dJ{|4@r8RfpcclvwcHDNQf!9^EtS_77cGsnk8VfloGh?SmFx5G3uzE zJF-=a{+}aW}$9F8VhX;#H9j%HG;6 z-K$&pf}Ee!#=kFdUJHChDD@+6l{wVMV@&o~uYcxBmkiH!3i>k-Z%dhp5U5!di^jMu zL10-3A$)W#CqMHGjcgCK?DgxzW`&LYj^@rulNH)2V6;>sg_i?AZJX(fO$|$Hkvs+b zt0qu%*u`D-cId6}^T1JU0W~E4BtxbS`%EE2 za|l>v62Fb5PttFew2Ko0NdS^4Z-k^bojA^KQYG`voi9w~4LWKr^+d<6o$P?u-6aBV zOsf8o@2Dc)Fl+KNjUg-C1Pru|YdS!n-7xS+s=#Im{sRSqw-XqG&hKw~!N{Y9_#>ar zP`+ystww!aXkdAJc5m0*jBV1Cc72@Vy*eRWdJYvk8K8$!u`dctHijxk%p(X;#2o(m zHAu&uoRXQh`cShSimUw!?3S(96xx{+;Q=7bx+pkv@9l`=>XPxo1ggRBgnp05DxVrH z2R)x2VR0B(B(Ie(u1AjwibRRj1}z8Y!utw#qliYoQTy?#{*h$}F`IzQTWeM}ZzU%= zITOhK#j=MEZ+^k7mA5hAI?v^U7JEo z>lIY9$PAHvg$gqxF0BsPw+UtSXxPym6{bG7rY8I>25mo|v7x=w^{b)qRHhMf(%_X% zkBM`sPGowo35v8iX7o{ClKRS@??gU@R?pt<6Bf)Tz`?#gPphR+ADiw2z}{z%D9Ce2 z^a@x+?Duv8x_H@F>|28(IsIyp_%oAeFad?o&gSG^D-|i5R41}tbols2N_hteW|hzi zA6k4sjC}Fjs0SOr?VmoqrTA9);!`TIuN zSb08q`K{~s2w$I5`9NF8cF{A6?#;k*5l)MKZJrZavcF<5M|vRVh4PebsU}AELY+dV z6`4%sPUVhEyhw_C{=+aMC6Mo$?63*=icQACjXaTm<}pe`hi3uW2>m4r5vO#87{|*R zxjNWIOPXhyYlk?S!nVz#KglR=Y{U zHmU9gq$H-n8b9MSx;(<)_wC$v+$@-^`4-RqH0!X67ReTiu6~X<{IxWNq2wPQ zbErrAMkK%(u15d}(gVDIfih;a*$1y$_`LZ#L*OJgWLYr?QM|Mny@$HNXS><9e|dAR zecI-E^cx%g6QIqFXlO>`(p^}4L8XpQ^j#HBtsr5I-#ZNMp~6*I6)SMsx3)j=0rK>~ zuazZKE*FnTtjtr2vU-=X2)U6kNEMi(3Q?QZKVo*m@D%iYy8lZFR~fMPN7%1|V;jW+ zYyV@-L}8h;R0=ny+y6wNkSRC}q8z=&iAtVwcoSz46kKoVt{5y_P$l#wWM|*x{vS9T z>uOkz$7Cdz_Eb*yN0T!?VUN_lnz!%k+++NNF)%I;zZSn8nTm+kz<%-;4W?K#T!!%M zE}3HyR3vR=pDVUzxPTS%_BgCU0ll}-knm|@a2^h2vs0y++R-J5lkIjDgAr)ex`{Le z%|(}WG>)1bU`?+G7=Y!ObBrVbO|`!daW~%qQGI+~%|8dk%Jq zgHJ*Mm(QrepkrjTn(6?6`a)fFD6XcSQs(6 zHAY_U;$@kKJJZSwnK*VQq;3zpaWXrfMHv-LsQ71wAhUaL%+()pRE1Q1djy<4(?y1V zu_|qDxQ@m4{)SWgl-#=%^w5Aj0vE9Z{|=BwAuZImk2HVfidk=L%(KNi4#_2N7Y0WB z{fdmf_0xS6?wH^}OxVav)+pz#qPazwSMampR3Hen>@svKMF zxB>FPHaSUabTK%JJ9FdBv*Icx{Bs#`8QiZ5C941#uSJOjCBwQ+&e=6h0r6UDTUjYy zSPgZ)TFoui8ypeqBKuiPqN|qx);A7(`8hY#o*Z?2YTi!Ntouc%PV6DqHKD*!q_{uO z_&M{Q*S5_Z=wHcJT6ZP0#1jgM7(ch*DY9n!TAysI5T+#BcuZFAauVeUKQ7S3D)5i3 zM+T#$F9`(z7-iDUW_|o%B!mXBoosx<`iEw?%Mek08#0rpO1WuIL!{6JLd%j$U#i=N z^k|HG^?^vJ8(OzdE2SXS5@U7|=w^=c>NW&V@se_@{AZ35Z-LOPR(=Ztr_`F9c&*q^ zr;!k%sxRV2JA|@nPdM!|DB@^rmN;tT>kQuM!KJNv-ioZ}8EHTH9Fu8)6}{qs5eWas zP)JzzjVpeT{(eB$yM(jxz5IH|hty+_HZ0gv6qf$_CsIe5K?0Pgh>WwNv9gColx83R zE&=dM?(Elv{{H=`lXZ17IaoB@yx>>$U**CRxVUzMl9V#*%zTC@`rh$d+3liNy?L zKlrg|zS6@w!QKx{%O_p)+q`duU^|U|2ysiMKzrMk?&l;K7Z_qWAZmGqncV0TP{j~4 z^4;l$xUc|FO(Eu-p-1<6YIT2Nxz4^}-kAe5`}yN*0w()5dc|zRnwDVB-ZR6dL%Fsd zVh@F8)p7W^O&w;-H`g?}Ry&SAY6KFU;jrJzl~LMOlsEt;9~W^2Y8;);MniAOePYAc0my& zznNM~k@4#7)Y5KO0S>+s@D-*~dt@4=ph7?U+Y!))VwC%2HvupwU^!gEUU}W1w-1<> z5Iya(+PmLjkL1-Gp#yH%UX;q^!Z!=RkxRTAZaHXy&^iY6ZUu6pUW7tvOj)0tSyj)~e8 z3A@A)x(vj&C*w0AV+?HSgPB*t)NB{b5?(%`tzmUZgxmm!Q{mZK$t=Evroe_q+nW5h zMIO+DXIVbBNu0Wra{RK+X}SV21}PvS&ex;QnI{;HjGRnjMA*4z8;Gfk?^z@LLcj3oQE04*|~PhU4< z2l}S+C__#R0JM~8FwpyCOwe~wCyAfd`J&nI#4aA-7OnY~$Nt5wBe+>Pmt{Iw`%jCFrZewL6=@A~>h4odE>0$&I}627nGcrOQCE z#s!=VBc5a!HF`qAL_7hU`BJJO^z>n@wBeQ202s86RbwEZI0qb^G&UQ~Z*~b|*pcOE z=Q-V3NAIHwxad{DNTV`#h*JF9F$Z;JX7VT1~*n1@5oA8&dzaSKCtxWDX1ZI)mozM|(U3wWZ0hub$8l*eK>Dco|z_clZm`nQnv z`1OE8fkBhMPJlt7*Ypb6AXuUz@76uV>6+G@EKmDT-so_%*8uj&1?;to&a5+4 zeQ=EUX!%GBl1>rLnTsxAeni~wzeJ1Qjr~H%VjcEbe0=kBSjM0@bbmEnTqZiDbm7)P z%c5gPbbx6ZZ-^-j4L4VlC;a4}G_tA277LPqHOM9#=Z0X{Z#h;ltqQ@PH)S1(FtR(k z!qe(F{B+1sXly*(Td^cnqjcg>96{L{`z&47E#B@&eDDy?k)9CKzk0El+4k|x<^0{KS#zmshzN(lC1T9d}!Gv@(O0((xy{NBi^2)R8`8@)U zzFVed2!PK_AAf7o`4}X!iXqT<7(-ID8v4mDMjBtU(Z|@9hd97DyVL<%r zr*v%A-t+0b&{2}=1`IA|PJ3NUf?M;d+<9qz{&{+f4ghvDo0}xD@aEahLCYwE(PxMd zqepDh&CqY1xI;Fq-;+^z?xvR2n^Yqkl0oEb;5NCUAgK9xY$)&}ND!UuU>|JMp%?sh zlE^(N0P)L3_4{&R!)m>sOt(`@HYx+Rm=37vB*Vl+A*a^DU$U$tpbX^`?#pan!x3|3 zgBv~+l2?(S0;!y!)fE}+vv*nzra);cUZ*6>Cs{LyPeu9#!Z*>uitM=A!(lb>9TFEz z`M_b6r|rB^<@)5_X}R4ag%ekC%$&uS&cGmW$`d3$^A@p1_-(NjB{5j*xIhK>aa(KO z|4%J}M*$+!Rpw$RnZhXfj&Na_%$wX|H-_W!F_B@ug=9OTk( zWS?NkMyhbjX<29IZ0_3ElEV*UP&wZF%0;s`zU;3s|C+yNcQ6#p4J#=ZG@FFa97w${ z=1dO{1_(aDz)&bRk_D#iR%5@5XKjAs$?2|Bl$X*W4gX8;jE#PD)mZv{nN@j4X5arP zaZ*ay6j;at*7k)360neT6+|L!Uz9y6++at0&>v6w^+{rvKGF62|vuw zDxcS2gWBsei7IVUg=!VJqa5!%Nf5tpV!ZHXZO9GXX@=6@2)<`!| zlt%r~Re;PX3iEwbE|2-tSsOV>Uzo1=y)K8^1b26A=|N`JgZWAqBRm$`d_KdW5HYYl zw}(#)LmEy#tPDaktbxbE!3s(NJTMKpkAWNvY<|jh4OJ|>lbxf^Tu24MlUq2U2sG1( zI5}FC^tgCLkr8mZZPd(!a(@`A3zd-(&p8vW5Wp^6Ag$3oZ82o}(v(Xu%MgSnae-2M zNxg=JnpW(b)l@dd%dh<6+rd(8m@|>RxQjOT(V8gqxju|M44E{(~IYwM_hbw^^stfP(B~Z=O&Mi_14SRenGy%34wW5 zx{!WLWrx}2oqO`kXtKKgimVV0zx~2xt*;D>zOOP}*-S>om4{JeS%Ww;uVkt_6sQ-Y zM!WY?qEOe8E00%bB*pRwQk0F%;OZ=ZAjIsyCf;!z+SA9bq@Wc1{!#R^L~6H^D&V#F zeW0eLEL1~&G8_Y==y|Z;94zXL#hl*y{K(l~Km4z+dDOO-5ytjFQ?zN3O>dTvj?MU6 zVeM)cLm>ExxBPLLWHCRv5a93Bfb&Fi0%mpzNl=*NUz3op%TEZR#UIy?yV)MpkZp5H zk8ZF4`xk+~hq@%1|M}Qs`}2JO9`?EXWkz@Mab03pt+v=pl($dxp>j*zV8}u->_(qD6 z53h{r8BdzaRmslbMk^u{iDS^gBsl*1qjI)q1FO7}S(vl&a=SGK z%M2PfWfd!GLXRKiUc3jt@KB}R=harM!P80fdl(k9Q2C(J_^Mw+8e{C%-ym#yB9)V6 zDY^qsQjs?RP6IR*j?K{aL;7!p_55hpQkv5DiGQ+6Pe3kT=YE}u`~ocm@bo+rE%+wS zKMm7?*{@3&kt1AE`1;|pPveuh@C2RLB~>EcST1%cC6^-PYz2i@0%nkg4_8D4(kXa1cKrm6%j`nx zavsm9{tmTNLr*el<0aaBdTuIKy`z-y&~mUu-a!e>IVn+C``lPMu<5~O`X~ZJ!q&2V zf=6Z{%0~Y%wtQkgBV+h%pA-#ezC%bVY@q}5HyvH`pM9p{5JGr|-4zd0oLdMHNh$L%r;=z|v-v3`wZ3|6cnlunfGfF=PjO8ZP6NfVSLtBl*Kx|xw5l*^iC=gbkSG#36=hIOD55f_x(L>0FHDPy$_?89@5W*@JM4r@9+_cZ-{e$sn&A z+MSpQbE>7{4#$Mmz9N-~LKkH4Zjf`G4n20BWa6v=>F!Ea?&4fE|9OtTIq`f+3;qTQ zt*_+ZEQn77{6tjQ7LI+|6Xib-O+=Q3>{ysK6J&tJ-aXt4b_V}+hXUY?=5e#MKKZ1- zQxL*9q>-2O^P&L@4d3%JN4v*JTON=Mx;A~IPR-~yd~mG^0l3p{c$}JACa4n;Z>u!tD^Vj(ENm$^;QEqV{~vS4 zvI!%$K{{!Uric`-tv$D1m*H+3aDVjEQ6kVjnqBW}ikb?mEV^g##*LV@{#i>g8d1+M zCyLJE=QmcLQZ0eG&m_4u?akL*raVT(apyFM@m3K6h`g@!kM@T@oGXa845c0;Dj$Oe z0(6C+x;OKt60|Zg-|D!V(?ZHtux!Mi3~pEEuC6Ah)OYS~{nnbHb#GC;w*6Vid~Ayv zc{uk9NlrQ!!h5ZLDY?&=mH4fjMXB(u zt(!hi%s{DJui(Zi*1JQY=XBOR!#phZD6o8%p~c6vCSLa*SrlZhnKNbxiF{fC$uBwa zYvFHKP`Kt3-7_m$jsO>{{zFzANw0WUW@ZTA?eGJU`p=3R!yx!1;@F2$$Zj9zJKpTw z`TJ_$>7lvNt3%52l`q}E0H@u@3f{x`minr&1H@Nm1qyAc^PSkwkRv7aDI}WrA{~Z< zo5O$Y3o}dY5m9DQtkNff3fmblVP{E&Hemy4qs?YZaushYWT{v8XR&{>g?f*RL;1~m zI+vGrsU)EyaqOUFh(k|x|A@aqZKOYygM%J}lnfS6DTG6L)si1r1wttFPD;Drj0X`+ zB3CVXH>!|BE-W)Qckn(`cZ`N)lL%IH-j?XLD>s(2qKSg~`jR=5H}80(k)#hg{xNMb zl*u?e!R7!;j2KG_vl%*45gdnBG*nj7(8H8QT!X4&5=pteO6{akE^1WJ?jk#0>h;Jy z1ABuU*CThnzyhkQ1J0+m$$#768~q+&I0RfZY;=6P3WcEm>>X{~N|A`@^l#Iy{m@ zylCMu1HR+$s*IZ0oY-_%DR-Ivyiae<`SNr_+slc(-QqM71{)ttyX|7Vq=cr_g zbxS`%UW~nqA2#xV%butr-&=>Uib8?sz6Qi`+}di9#h^Jo26|Tgu^+>Zh5%(zVF9}Dg^|WLT-KWi!eDodfUIY|9nTc#e*WSP^MkHk0i+QDU zdy-6=-TuHdlwDZ_(;D*(L;L+$TYkRHhLzVC=jaRO{ih6HE{eHmAn#FqkRKvAc^<0K z$hTq=f9m?f0_S`5tEGVS_a>yhL+qtt4`g2(3?KiYKR-vsb(O%fqf`gdzYzcNhQEhc zr#-qk`k9Y5pd%E6fqD~%J@?WvAg@F_N=Zj_*r7YEpJDolXJx9Ji|KEW;pXX$BV9n} z0HG>LdftSDGU_LYWoTft5X0Y-Sb4W5uJ*_iw4M8v#3Pa~H{z{64~T7y~&OYPygF|&fDG88#Qz0?6yNeG(x@HANm5K2c$v2-|Uy-U5f za{8?@ZP#`I`~H#L|tTyX!sLg*Fv$I7)g4}gq*+G?wgnLd- zdoO+*;=X-b%h(ltt6y(9n4Yrk+KP?2n)49O+(c&jWrI=+N-rv23Kpaesa7R0vcRfc zrWMwk>~s#Vf;uZ~NB9ogoyd>ZIEhh;HUoM_qCNs$@#s=Fc8;HGT@s8#W~l2qQ+&5~ z9rVYlzmr)AzdlgE^zHRQt!TT9xK6&w(ubi^<KxX48A&tiko5@)lKHf!E1 zz0@RpASu?P^5v1x+k0W%cw{{5~YILe}j9Q{w?Fj(fh-`Q?!0j6CBY=Kg56g zZZ`gLyM+(%X5{-e^IRnavEwvHvw3qjHIMK3`@TbQ?%*;4RrrP&GJM@~^3?fa8pXx& z+2(tR-XprD9;6`ZNopQO`K+(bTjC1e+a4D-SE$n5LJ|DmyUTLWHE8VUTWTKGY9YS! zA}LtVe!o2^Tr<}dEy1JMWrGI_%>Ta-^yXcJ8_v0X9>8-ohNOO0iNL4txYk!cs~iIw zzcX`{!`BX|aq-u?HK@S}CHu>=cg@!cZzF~%1d6-|$`0VXpt;i04@XEFcWg%0;p@EC z7*dEC0j|;S;BOI%#c%D|Rh+7;t~^A|wSX3B$bJHjg|A$5dp>!u^Pz&>euaFwhakx( zU$8$vKenVOJ0`M!tMNREhbL6zlxa{l-9CFUUia8cofS5HIyy!e_8;!Ne*v8|5kG-J z@{fcazc-DAqW5lR8EbqPCr`UWtG{^(^*NUs<#DKN3)BI)A` zn>f9*#qhTDbtdr~_=SUu!XSxl22f78(z$8D-o9@%f!` zGT&}_eEsPH8<9$!Lr@bTPVm5YL*u#Ol&$XQqx9QKNxhyMYpw%xxHXO=8>)Qf1`9-* zo@k}r`V=Y=|Kasu$!vehK4@ilmW^$+XXS?S|- zp!cfGjp$+Z_XLwV)EqwNr z%SyeLIp?y-{q7Q~Go{#P0m~iHkqo1h#9K>vy-MXQulnX-(a}4LP<4F^6iMtywnh|* zYR6z)#EP~DWGs}^@Y66_9(SMuLgzqTJsMs z+lSFBANFk?(DFt93vcZN(o7{amR;qLOJS?fv)X>_1_re(s^mb=N{k%Cl4!ejR2fM& z%$i5R!E6fUeDgipS}NJ(yCwm+`$w;SI?nMS-ELW~mqg$3h+hQs8M{9#sOyaVL5n&4 z%FmCW59UcWZovHKu7(hSMboxMKYP+30LHFA@4uciXUwb(=(45)!MPm&(Q@KR+>9ZH z1r2@#DRSW53!_xMm(kL94eYi+pHpbB0PNRb)^jD;{E7E;}NHZm7C8PFtu0v&s&(@+L|c6iCi1^Bf= z3Uetprej1%oTk)CqX|$M+NfaJXJjRPXe6+pO zJD=l(;^XY*5XD3D080#zSpA5UF zskwuCwdYo6Iz?|JBLB9G?^Xot+NJR+Mc-WZ8~clP#c*^`tgmec_B7R2c8udyOB=!L zUFc4&heVyDA33nhaOD5%O>L;B0#z+^RYJ}L%L`skTG0ih9dT|my09vk0#!9$g3P;I(;E_Srj-CiGj7U_5SOh8@^z3D2qN}mz(KTb)e+`f9ow^RR?edsA++049syiJqWD-V13+%Ee_nm4L@7d*{rYlw&ca z*I zv8rDNZ6)k7dr2keYdrGN!Ur5aJrv*j19@7W1!UD0&hJ-(?iIpHh?h#;|Iik(gY$3iLDoHXJN+JU21&tbB5q=s)<9g$! z<>Wj{FvGILMC(L-P_N(jHcqiXm~~0Xw}0-fbXJa(#jn40`?ml~6FlGkAa@T3 zmfv+#@iu*6h!UxGuxX|rQdQeKR;I7?<>5EO%R7l?0bAiVWc>V!sq3K1vEN-k zOHj9;*m4TkmKiR~jcM8rR(Hlvmt4BZSmXtl)0q3uVzIY~Y-D=(i;cK$+juPPv{bQy zrYa^NF?u$S4P|m_Cx4=Z>&w1dhv{(?2G88x-N$6YgsJ!cKa;e;D>l?HVSCAH{1c{ zaAkiS0cHTiJ_r;lH{0@NJ?sJf+x8|pvqX49VBIFotCA@XDrUI^1WG59#LdL%2=3Wk z*$9i`+8L_=hRi!s+H7%CJqj<fHRmj7fZw zXp=oFXa+Ge`*qE^Hlq;Yl`7CwAe{v$nlkO^U_kLBjW31!1cA8xIQ0aG|5&w*4`zrG zq>HJ*2(j*;_(BLlXIx>2aLK``@|)ubFG4DY!!paQcyD%b8WH1dns7^1W?pGMJAOVo z%5Vzl(L(JI2aLg2P`oBFf9zrF^6!#3kf?(j#reI1UWrAh1Nw&R-fLeBomWG3obe!) zDsNT#QCwY@SYXtI%VJj(`fmMm$sQQGsZBT>wnYlW)HX#sk8A=zubSq+ntW z$$ll#B(S;0!FvU_H?ACaajz;l>Z&$2mqIi2ve76+07PKdw!+O)id7;5eS&iy=L zoQO$H2G)*q7F|XikjH!78aXR~?;|FIvVR!cEM81BN^|QhSnLra|HoMKT}zNz=Ht7k ziH{+Ds}Z%pmXrBPVP$}*ubd%l2zeM@+-YR&`oa*E+^xuClh)p6dJT%$N2iy%m zGehiwNK2uAF9TQysy@X~Z))aNKn7KPQnKHOdtBEY+&R6# zwHR;@&YwxYw7;eGo7GAzKg7^MC(stZAA_>7kar6^pu7Qpz_oC!0Bnj^bSL3VOIOA- zt1UUA@da^{;u+8YsX5t*sw+)RwyK4;95mkeof^tpY=ch&*5(PjkCDv-4incbWhdix zi2(2hc*VOXO%R*kh0G#-Pz+iZG5mjNRV#q57H$pRZLoNVnSkhe0MvO@`?iy?f-eL- zb61f`zw8iC7mqz~wUftod7M*aip>#5I!S1F`mCCb6P%`2Z%hSmnGsF>2(ZYlHYhEL zPXlE^aW$Q%{-zQ8WCk#$Z5LWj;V5Umy*cMVRX1lT&aaJzVt6vHEdFIQWEhsbl!r{$1djdht!yj}Fb_=@CMS7>uKb5RSOrAeD>s}$h zx0dL`3IIw#wZH3o%5)5LMhZ?z>>L_H=CphS=lY>74UIwDehO4!?n=n>q7XHcJ+fMeCtqqV{R4S^(j@A8^xoax)x8BC z4Jk?T0WoU=?$JbkxFXbD<-e_QF_{)BG~;d3)V4Kix&G8$q!VaI3#MwU^2(z z-<2Z2F9IloYatdmkE#f=@szl*G?zCw#vEjA*-4NZRCm^yJEsALSb6>>`(bZIVwxkd z71q-g@WbK^4;0BF$+ElQrh$qyDHImvd?FwfBg>G#w?G`u7O|>^wJcP(ZJazIJ@i#b zD&EqD)E{gRH@7OJvgi&l@EwZYIjrq6urJ3m4)54E3Z_q-f5k`Ju~+mdB|2+%pdyUS zkbeMAVXtopCBi#;O8!%$XX6)eur&J|tz=vo)RTjmWTg!t6H= z11)0sl=ya1SVAZJs^*hHGb{dr{x215PNk<4uz$1;mrd>&(oy<&Z-51N>+w?=YDj#+ zogc=QVs{7mG0-qJJHREU#yj;dQ%skiR z&Rrv0!ME~co9{sX>UeF z4sKNg-2gAWa$M!L)bCXnYLIX*y&n!N)kYPVZAuh_|~+cpz$Fvk}8f!E;{%3lfuyKEavKKb(R30vIcfvQ-&Qx;&JvY zoLBRhXdgJa_}iq-W!;mj)&GjV!> zu^H>b`QhVco5i6zl&xeyo6hCvN$Oqz86!d$OemwkrjdBEBN6s=2JcUP5ybV+*@&EE zTH(S^_nuuxgv}it+sm8PhBCj7*z2Pn&y80wzYKYAamGJBuQ>(TAqGEOcT>;9^e^uqn}J~a6+8tvE!I@j8nQyECRgMJOUIj_6l zbLRBzEC?2ra?82iApO;i)V%JAc^k+8-|QY;CCY{~Q~nQp_ovRvJim*eEXKnF8xmxz?+V|tO*-kh!OOWDG5C=2^1m2>4oN_)_11)c|dUV z=!qXD$>1v7tRggdl&X^evc`jq627X2!G;w(uO!8mIbjZfOkZ?~&e2_JS2FX+?fZu3 zUxo&>B*e-vUMvv`P!s`t@LLxM{o+wcvZKEcViCz}U?~=K`C^Bn&>>i2v+<(XAL(92 z;x8vf$1!4mL@W8#qF1p#G}~H&4niidK|f9Hp{f%HLJHrKX`bQYlD_mA~yf9VWcfyT(%y zZ^H&a+cV6}cwR?#)utzV4RHG2Wb6Y8UXUZI`w;{_5h|W_A4D!)f_?DbcjIgW16&V| z3|uX2xZ-WM&~10+M7lIkn80y-I+w&4b2VE)lrAnz9{W*j1LY~pjWP-sHh#P-IhkNC zcb6Ru{Sa-V^`d(9$(3JG9Evc9rGt@NEXieK_{A*2RikA~+5;`woya$l#=s_v6P&nsX{_gD-lJ6Thl-&gfvo|+Jj|Brla#V<{bOtv!O_?l zUI_@cH|iDM6=1c!jg|90)5Mk03volCBbvQsloJ2$of}}+$@6Od-p-_?D)oz+G>f6_ z+=SbGg7m7Y@^%G0De}3Doc6-wXP~EDb3kJOkC`Szuybw8_${l$Tj&>fV6v~{pMJ6a zc@_1eD)`@F)E4H2JEO}j&@5aE)~eFkmvBlAUza!n4CfHpj{>jBDT;tTAGDQ1>y(T5NEp@)>dD6wsY_o# zU21CJRjs+axMh<nNSSpbt1Nqjy=aGEoJO z+9Z*|;A7=OkH(%;Lb$|}3DFa`n*xYDMi3H6oNA#ewtdwarF|fG(~uuWvyzkS)bq32 zZ2Rlq8F{EeE0K3pj&V5E^Z_Fx+P2_&<;Wg3HEM$E(-09Z0!UAmb~yW#s#!F0n7mSb zx$o5byj>b_y|Q3|vW+cfWibX3cDeV-B^m5v4a0-sRQwR_hZ|YP<33Q$j84OTRuZ$l zqj{X5RRWaaQ9-%1NzM#q+I84!P%vHPWZQ9`jnr5@YX1=}C}e+?lJ@^5{{+`E<;|FZ z7>{t^4{Xl25>48CAPg$&M^>`_j}4Ykwofsk>NnDSxc7ueZk9U@ z@ZG0*4>NW~C+WK{&6+7*ARkknaJBDOYJmQo9Z0cydpoobK-6nG3h}G4z9%=CBdU%X zx{+C2+1L$@85N6?wCDVDIOdM7QgXpO9nDLaC?Rd^#CQBUV(Ls3+9BvcULgzHoc?6kH&eg{YrclkeRGQIsNfT2 zhki6AS~*X81JC<4YrsAr(-N^T1=Oxm+qW&p7kXFE*OALXE#o-7?v_2BRs=iu3Td4< z)DFeg|7GxOERvwhnl;bYclVo?##-(%t$xD;fD%!?bU3+Lrp(`V!G=iCT>fBbOr(;; zdRFk4x|_`SM@HQxch%k?6yeVRtlYwnAq~9$&S#-dkh!osWbHJMNAygV?&(FV#S#<( z;O06p&)EmobP;D=StDw0S_X!e*-1Ubhs@B7lG81njyCh<7XZ+9s1({cTbhz}skP zaZX}tMl|6E3Z=&Z?b4&Fn?ehIR<4L6xR{RpY4&K*4%fj#dx@5Al4-M~?=+c)qp|c= zr2k^t(gjYh?o>;FFBNjlVF3&`lcHGZMgND@1;xF&@&&QG*v4BgdGIW{OzVXH!5A;3 zrd7sKt$kRA)b}vme=*ap4UiRvrOo-PdgpB@?oqgSL{~__|IOsW5jR851X~6({y)rW z`vK)@Ksz21VAll#xrtY7A!5yHT`Pwb$(HfWRaz$s)a)XE<{xCr`m1_kf?hYDp9cWP z*#Uk)hun-h|N;ysQJktt@<@ z?n-+wS?EihmxdtS4sQlR}Nw;YvBv2`oELeoUU}I*|1V|u- zwpJCadiFvWsTVI=!_?qQo1Kxn{^4T9&s@E~UnO_y@USv3h%u9KrO=t-*t!=pe6XHk z2p6@UCX1HYra$MqzK3r~(KV{6H^;FD9Rk>Q^uE7Qu|koFMr|Jn$;)!l0q$s!1Cfc} zG9X&o@+^o~=Vy9E1F`3bB_Sq7vb;jS;mskF|7WKtn~(9CuC&D#Id4xR<16U;#i?9( zwmLG*Y1sEv6Q|pRDxv#!wgHi~8#IbZA?j!3gLhf?u_DP7EqML$6JU)H393;y4fntM%bo+0nwq=4Z3<-$t|Mo(Mh)} zJrnAPu^ws8A^|V{aAs6jiW1O1y4l33(7n07NWAz{3Y_;s zk#Pj)I&)+56@)^8%;N9n&+P?W7L5>?w$%?qgYg>%9Buj;6ebJu>cLfEp*xzmiv+u{$f2LL6L8db4ZM$X9V+sv%q?+sMKYCmWC$d7OQ>iek8k{kh>E-EQ!NN)! zIAl$vlhn#EK=Jq?->h|?yCBdjKc`HrL3U|@X)RdizSfV`%EHP&d2Pq<65!a2(>%fC zMUJ0W$sJVJB*Pcb z9{xXcsq7%4u%JFD@Mdx#U#aS^UE^0ZzsPUcv$dzN0fPs?UAh*laNdMzPsavfUkGPR z-M^DYbzHwjTepQgGH0a|64i7ME*>h4&E3A~&WA!lcU6?o&Xbwu~gdjB}>C1rV>9tt7a#kb6KZWwa{5DXIk+EY_dxr2L)A3Gz3_N zm~97-V!GnA_&adDfo{@bi0<>urSDFDq@C_YP1J4>LqV@Y6#;^u+`wFT)(5)=7V1E? zBHPesl~z^sbgn>ikk&_A-0p~fGFN^$!VJ82*dy|D|6>JDfbwx(vYY~ebPh7p2#PF* z>!cLz@E-M%8_y*wPrr?y4K$8M^2^YjO2~~MnuQvnGBw;nhN$h+Tp;?Cm+XP|Z3#Wa zzZ6VKh@-DxCvLu`Y5@iNfoD_j zb&*;!Z>(liVZpLPArN(&d|e{84SmlwgYwa+^Z)gapzvzoZ!f$hfPFp)6cO%9ghyP| zA-yvaHP`X}8MiP&As=Q@+UAOo%Tu5b9y;$Vt85Hh`=xjZbgJfg++X4DZI@rKXr63i zS6L|Mw9>rS_`i$?lx;2%cP|Ol%Sw!iwQr;Pc9a zx|173qxw}dqZlLL9kv25%W|~+0Xv+oOp4PQ_pqNZbYL1E^@WZ(CvfjI#4^pWO2p>r ziM7*We}JmgcZGOAS4|yOjUN9x`0C*vTP&db5_<=@IyCIm9_KGWk7`AFVmWl$hBJnI z9{+w~1d$9j!O|m5%HI-Qv!GSX`}f;V*!9Ed6HsC`WsH;FRDEi^nSs!Il& zgfwnx9`xa^3xBG=oqIc-ccPYXziv|;@u6ll=3Q|eLxHt?RD9#*LE8l-A@kXLh#wPF z0P)VSdRh~-{&(~XG`$oaPy89OyEf5-w0C)pfUA?igmpC}Z%bXfz1tsstHCF=>6wQX zy3a>$FUQVzHgE}Ewt!Mkt2h&%laJb|U6^NZfcETj>o8>PVasH%yWRg)iATC|LY*E- zZ()_9uajUmi5~q5Uur-_L21WXg;&N0gj}K?@de6blwg}t`w7%zh*pnsIS3yP}pp!kq98Tk$y8AD)XkqmBiW8K%b37qA+PnsyCnzj{76Y68y%Ll$Wc zI9dq!T-uCx33Zi9Y5e07LA18k@IVGyV{Oe_ZXT}va^88OqcXqCq=x(1yk%d%^|!99IM60FxD^#Fk&1d)0Ji3M!jdkR*v z$|IR)Soex=&*8LB_n&Y5kL9QsGYv`OgX*=fF+^DY_c*CD32B(|T#M)m(oy(<@^YTU zvQ)M~^N8p_9NNxtdSnmRS1e!BEc+3v_>KV9LlgMUzK?w@IQ;XIoMp5B&Ne6NX>-1W>VZG}lHZ>!(HS7~BEKZvQj@y3gkm_Eru%%Zc;O9`Lz zM_h0|*e5IQP;PNrax9}=GFR(za6l(0zvG^c9vf_nkW8%S_qSBhGK#q@(}}@1j+`^4 z5N8x4B0f7rZZAf`tcNa~@zlp!_P@Ku{qUUYCH4RY*F^PNpP(NM)!vm17@cqzF@)i} zYXM~bXaKR<`(alTO4>6c4g?=Pb9{zosv8ixK>~)Y1kUDTg^&`~h(}c~r0VjX_3*2C z83_)Emc}FvOk=W90?gU*hHAgZTCF2gdfYDh=O$zqT25Cj={b|@)cZ1^)t|T1kDsg% z@^+>w(~H>tOtl+^WnV5kOmOcNYm%ZMwj%9)`Nd6y6{=<2wZgV_F`%ZfO?GS+*CJIy zD9ke-Ox*r2PH%WmDa!gC6B1XTs{5~Im}}ZA4we6njpkv7z*SAXql}tJxnOs?2yRpO z+($ZmGHwuVY7&~0zbV>iGjM1AIF++$^I{6rYCI;N>9XA{Il(!y2$r=nfrPaKDAdk| z0KeW-T~3aMo|2MTC()|iG|z`5-|WET;;`yRGXxeJJ}Mp@EObA$ykq;=E+A+W@H5Sfk5}&p*aHO`%zeXSj1YukY_yrpU;dp;c@GDc>YpY+J}3{tkLR)~6e z&>C;((cQO|YT&hC(-wxm7Cm}Spf{vw5d$j?7CntVxCsx()9cp}PD0;8GSv!|d>cR3 zbC@p2LS|QR(Qt67Y3YRvj{~bylge0vCTn*RN8HxU72nm*@R7ULU?U9ZX+`xcn5|DG@cDQXeqk3o(KHdgyAl!QFkTUM4}`Xbd6XbQH5d z*6ctEI_!(bbukI%bX6JcnJX~ZFwCD26sYF5(mqX-ng-Uc=KX9KnoLs?U_J#0*B>4z zz!LrWRnNOqi(kny`F8d)M7LX(3^>xC6i-zBXJ@!$_zkBK(i}nhzd)$kSn4-1jhJoLa>gy>S|9%n!X#>BShp^M!zU7+A9(f!MaF&z-1K0zqd-=T6h(?AK6~B8I$e zvL52F!r3!jRw(Htf-6v<;6-;@bR>NGUCxAA{GEBjZeg@SM0cuSj;@$y2SCcpn68-z z{8Cy(>pXiAhEN@SS1xi8*@X8uWU9Sqmgp0fbIkjCtxVVn<?sEriz21ABgjLW> zC)fX=kf6lr$I+@Fx(AV-E3#49&QLrvb#cxL#D$%n=I5-R2wAm_kz5x4G5dVZCu`(A z#0B!5l!wz?jn0(mx}+)nl02=+!AhVtc*~PSnQz|=v?y)dDE<;ZyGWCZgjZ$lv1=^cVgs4$&5!* z9@Mu)Yni@mYRL}wY!Ydz`c=1>r&!pm3TU}OQ|g{b!y9u!PWC6w$8d*gUr}{$wTY~U z*wYgmGxIRBW0O@>8>t|g?tS|bb#4aH@i&Xii%~t-PS{fIyal*E9k`lgGvGXbI!^$~HOT8k$SpqWh1@JY&@NcOw| zUh}?dnF(v~@ukGV6ab>ClkGluUjq~#ihQhmY&W(6e*|P1GP%yL4bkQK+o%MT zscVi&braDJ{gB&n%SNNEnkb>je-GUrFW{bAq~NUh^9%h_vc5GP0w zm8-x^m^P%G;prXL5S=>?J$}LcXDinq%#iW1m49KoS5~v-=&psv?mJ^jV!v_9Q8Y!wYMQf7c zcH(FZF`ERwH`t5M@^6oOku(6hqJXeqe>zOkPtQV6b`~|jkDq9`up3};Rp@5P+Poq7 zCpFCI)tIsk#n6w|CO5SClQSK9r5}i2L}*D>#;VN#qWQt2C1xj)NE($+Dk^2bZXtiY zj@e#_%mTff#Z>m!URA-96KF58(@R_)S=NX1`kA@QktQ|o>>RDbh!4R}rg>R7M*;!o z6#IN*bTZZk&92Eg^y-yqZRpfdc&`qe%&^zIgbIVysih(~4Dd(VB=%lTD9g;YJ**H? z_8v9e%xhocovFJ*TZUgBmCYV93~ST^1?=!Zp0Md_1ccVp`jL3-O&^x z!%yZZ*s9O{i12v%gVN6PTX~U3Cq-<1!tNoThVY9!0W|bHp9StrKA4k&>o?L<^9$cr z%_-1fg&;M{LYkfu=_^z#r_h*plbUhN+tf{9dZT(BB^cTZ4EBYT1{>+d8dNmvkml(e z-c-TpY8=N#wFd+%XdFLE&sg)Fost9T_gU2ujxKaF3EzjArCTasQ2n%yVxO0i0oQ1p zh)C+lAUDJ5!FdLfl-y^Mn}|Wax}-bZ?l|wrI*bTGu!CFGq03my;RpSrd9xxO^Cy9hE^BH(Ld?T zG#CFaZryM#t^4invO|UHO^oF@N5o-F%@Mm{L>Pc!b(0y2K(+<|i#h7}i>8r#YpWud z>;<T@p3)qccX{43k7aE~+YtZz495i8S@hV=&LYcruk4oGC=MeDP;11XFnqXFv=JbR zwnf|n4trl*g?NAZ$mDfxw%X->puPJ&E1kV7XTF36uw57LlgF>J{3eZ7jpzDCF z)dETcMloO#sNu@KBu3PM9C7NM%%JNNxtmF`Qyvl{+So;PH+v)AB9pQ4o@l+5TRXR& zyIB`}x^obeVKjse!k9jT!*Y?nXbel8O72&lOfx?Rnv{T(eZH#^deN(fP)<;NaiTq0 zpNug#VZT5jwKB=(IUcB9osD_DjX|@>%4fzrLOviskkvM^up)cZH613pDEuoYDJ9cT zUDD10V2{rqoH!Y7O{vo9GQS*Ubq!l<_%zzc$DWUwDar4=(`j93P2vqmGLj<5fL*en zh?u;=h5?kl;6?5^i5Kcp&cr%&=GEx@h5D8M-OVvpjZBiDt_YceQIm7OBI-@ZO^^3J zHTsyTG#*mj-TE|*Wulh&=xiBEnJWbmO}<7Ghy}9gRl^nGhXcc`Rncz}LLhrH<+`mx zkkLr9)KEZb!JRqV%SsG!T%6jTpzi@tctur+Zq>Q~MkQFFJJdh|-le~%haoA7_ms~F zV`xdSx~U4|Y=Fsr)~*3~=ea$OuMrMYNwMQK0-0bZNXTq^j#8_8@@U)q*Y*cmZ1EJ; z+SncM-`|O0kf47DpRGG5m;gdVd22~k_67v!wNLJyMY1AFhPNn~M;u}nK9@fom|ZCv zU;dLjpf)Lwx8oN7UFRCZf1Y@=AGceF*GFz?w ziY%Fzl;mWJ0W^}d^1&QBu6950^>|oHy8@DX#d;hE1UC`%B?=th9B&SkoWt!$NZl5u zpo#@e`S*a!f#@YGS;)zk4XNuls+_cOHfJ>Ozl`^kUPmm&wK$$Ht)JlomRs@YN0@RK zDVNv_pyd6gD0w-@2~6G`(}<8EGA{uNpY_Tw#5S(2n9j^lbhAMAJtw8Y z7tHGu1xoC17`8T8tCH$hi2*Io6$!pID`iNpWCse?_zz<)x)Z?87aR*6Uo6vgL%9u^ zLndT5g^y27?Y;+=HOsR}ysWtu-B3b)W7xcB8p0MdEHZ#OR@60TOvn3uA>#^NB~fj3 z8o~A^PN9NW5z-GLD$x|!pN9;R97q*-9`9q6RL$GAJ;yctl2|G&R*DO$-r?3dTQ<0< z98;M*dMc`Z$@xk%r9pZf=8vbaMo+4}56bi>kQ)=UQdYoiKUR@=StA2+?4f7@w5y3t z_}r%H(|onH5EDvA`cdB{&wKssVD$o{uFFo$VU&_X*U=lA@@jpwl~LFu@@F*GTWO^@ zB1$a_<;6CSUD78-jJ6ax*`*pR>TD4Lp#cs8=b0zTk37+? z`kj%Fa<#qj{&HjRYSVznx>-7qS9s3KRWO*kb_KpG78g<+bFZ@vSb_xS2{P#j#ZeKQ z_va-r9K48sahk>iopjz-k2tIZq(yBL^`r46;A)K^1lTnvxG*#0%ZIBr;wGcnf#Ma< zM+G~shIslzet^HAG>J{=(0AW?1)Z`_Pck|tvJYDd4Le0+N)>Z!Kj;v(qiHtMOT}Hx zl=8H%1*GOjCUPg*GhE-~fO%0>x|(?X9#cD$2>WY;ms&(UNZ#$hnRHy73Bfu&NjCN>nA|{}6pw5_J z7)bY&rtEFY3v6%R1TOjhD{~JPt4J?d*F_C_Up2B``a%(Cxc!4qf}&{b{ZhC*v+Ro5 zqXcG&rGmH@yeYDX**1XNE=~Q4QjGYuXmhEn2v|PAh2$Z754XcIPx6^sNas$vq=u%m z|MBCVQ#@is`If56^lU!K7pz`x!D#@UH8HpHGN61mr>MJ1hJD)_R?3NsN6OUItdj^` z^aTp;LXm7*p@V0%kXnwbbqC+KgU!z^3Zq~~DydM)8mL&lFU8aZ^}C6nLN_lpR$%b6 z+qAz&0y|EWx+yZn1-Sm8I=c6v75On=S(R@)9{YC0@e4@x4!Vmf1*BXzw zI#@OM%(GSSM|fbT@}oUP_MC>p>2~?5BlrEZ^{1hMc@{Eg%{`aim%MLvHHGPKj_yE zB_1fNBCVpY`E}=SKgk^~xyh6)uG0k%oL~B?*T--zS39(Pn@n6iy@>E^27j^fXQ%WY zap`9Io?r4z+Es8OBgfVeLcX=gUucAj(Sz9m!Z)>dCFCKj5pKlOgITajbE!7$Eth)#mm3wWbn{bOwK#5DgKMP2- z0P>2!L`nT&30-ND5({$_MV3@aB`m$X8`C*dSRif~{@ zKfUmY#}F+Co&d0LLmMdN`XAjT79;tpW@2APf`O?Bk*2Mnf<8kQTvr_{Q7zlt+6Bo(a^Yck!;&7%J$lg>^*c4XH?2+Ooc|dOJOVW^xLI5ki&;$&>%^rTCXjYPxW8 z=a1d7qSK^eCbo%9d|WuX6K=){_jy7AUb5acB2P3wmEoIf0V`Ic9l27VJV)HR2IOvj zFWj)YGvF58vq8GCb8#e|J=|G_i|y{p`$VRGq9jZ>xYd`a;KUF$ygCsBdOp%(#O@em zK7Q1^G5_Dy=-;c_PK)}p5zatru)a_*;tqe-8DR)zO_YDAH$$>a^3dbPC`0~Ls>f5+ znKq%0pl@_iIwtxxhd6Y;7(EOPpb8B>g5u9?as`vyaF&ymMu<2~ggy`H^YOJX&j|xt zuwgzk*z9+uVJcIYXG5C|1^drDdD}+h7h{&Ra4AytRakzb({4aqFfT}NZCB>J$w4C# z3d)5g^PMM@GO`&X_QU%2bc%GCgqB9Euj7`TN2Za4b_2-FKU;IH8qr811&1(T39#j z?u@u6e>b8#CR5w0o0Ml&l9X$O>f9Z!|A zl$o80uBI}ii#Y{@N~tZkGPD~%G#S&wWr>a?18yQ5Q(`T!lJxcX8z-cEjp6o=xM|Hy zm`Ueb@nLwHIc~szAkBW#c@@xf)P|jlhz(rroc-vnORPi)?3q$np9K+#6d|AW9|?ln zHR<%Q#?)Fet4!?Fc zl!^SbCRbt@D0MP4X(tEBL4?pR@82swRp2#wS9{4AD~I<6=P=4PN%1pjY3PqOzr+;B zFlU=_t{|6A3<+TP(V3<|FKOn zXPraYC6*GQy%MNk)%K552EUGXr^leVIX6qthVcyp%;;FY$nPCg;XQD?+W^WEXVA{e zeSV@c5iEQ=ufsk22IK>~Qph5L3#z84IpUCxf0PW!{s<|vL>fG|-G9Rdty%<%fFI@p z%cg;uNz^XH)sk|)I)KC35>O`qv0p?-s2d3V+?ucbI`J%fid6s$fXE6Sw*sB-PARP? z!Z_m_A|~EJ9A&@fPgw9nNM;>U)`(b_cJqD_o@17?WG!sps&so5PV$=k7ZEt;3(I1o z-D~cZ6ohagaL%58H-EuXtkzh5D|Tc};Z&N^CG1bYA(`Pmy{7xZ59)E+LTnIAfWS)8~Wq zBS;NJPS$_lBeknX@!0Pa(3H(cznqJ*2su4{0M@Ro;ooz>Wm=7wrUUa;QubRJ`W8!4 z4-WObb8SU!oC96q^>~wjz40)uYk6$QS~4iX0C3Q8b!`BE_^Q}@k?7k@dJ?}61LwX{ znrl1OFdv)huSeY!fTe{Q!*#1E51MSpo6HM2M zi=i)&N=*QoR_LOJ=T361R}})m)J^pfC@S@OewP64fIcQ!m)r*i&2@Hlv*BMwOa*fd z{FUaCA&jQYgY|~F8504uVFCUXZ>@v03u8}Zoq-7h3sj5x4^>)?VOKl#%jA7XF=N`X za4~-Z2{k#x>ldL7PX<)4X)kz~E5iMZFBHh{&Cz2Yu!pL$OR8e-m!J+vaQVzFYv+B8>{h<6>*$aowfD$CsewrvFU5mv zZ)@7t>dkv8GDQlbCWUDMOhrj?_1VHkQW|tAsllu$A%p7$>5uhdpai=sZz_1l;GQ8a zuatGM}J9JL}JNzma z1?0K;e)i{kxY8*)eOg_e z3`d8h43M5V3DDN0+FFzV|A)*pM@P~|g5JMsx8TH-Vy>}!AMjT=PnCu%6Bp>y9$iku zthAf%CoJZ;PjNj%`{2lt4tx?wo~*44pfX$WPV_se=fp6FYz=s&(+A9$V%AKt(QEPZ@Th*@1}8A5wI9 z%v*vy2YZdDkyIb=^OdhbW;F98 z?De5;IPiAfDGawN|iP087SjJD+hIE*wZ) zYB>N@me)My@Ex;BYvtRg;eA<0K_s6T=tPu{PO<4Da(MyV{Q!;2v~feu~Y{Z6!9ID`{5E#w*{piUur zxr-oIWG#PqbJO2~{9vtgg6T-qxUnS|G+Bqvy-q$=vhKxBD9%?Ku7~5nL)kTw;Ah`M zrS_O*?*j=SL_D?&VPjH~tfDzM;VDgM2cJ=8y9Ais+-B>rYRStVbNwkS*u3pq&8H^B zJV(qNYDLBwjd!S`>t(<=I7m;xo*Oyorenfm4e@oGV$ULA&NROz`aw)}V3NdA_P)$# z?Z&PKbxq8dU!FAaQilAW%-S}B<`3^~TcaT*tM4}};Oa_0=(Hlae*71+7MSU!sRXe7l8iyVEhn zM4q{vY6%0`W>ErDg)0nqX1{_yb;wYrlgFKfEbJoL?MbWf=nHysUNmOpN(a5geJTKzylowNh zWEgu|k!2foIwuO(F(KL*3rNRLs9E@MXPgErQ@nS4{V8`PYOtZQfQ)&8=ET!T>3h9F z)C1cbPG`Ob=OlB`^aVF11R5exeu9e*jiGewQ($ByG{K7re!BJ1C-=YE95{~~ezbiI zT?J*UTM64qr11-B*vLs0|uyJ{v1aLL8yH&VwI7Y@? znN+WKMdzobV*wxDTE6sVgec$h&bib&YPeR2P7xo5&RJ&+t#=IwpDwQ zvrg0h^La3r55C*Z%`yk>0Bb|tyGmlJ924&=FGGwj41=^tc~P;#0Q*P8vli>t zvWxxuXsz?h_IoR9x*p&ZB=0WB=>Q^NtNUEiBYUejN6PQZF9f;%_bu#yqZl4F1Ci8< zDsyDhrKsRGAyX046+#HZ2p6(L87!9Uq6Fa}=rJY&dKvPz1db=W$41TEQ7CXwcZ<8s zBvHY-G&`Y!otxD2Yp#wgg9puvS74}|qF)5|54laRsK#A8me|Z&0hHTyU5O(A-vGq^ z*O%tyfwn`QmY6C4o#tFUK%xE-O0u)+O{>f-m>2igykps`QRaiOG~Bf0iQ+^f&cnov ze|B9tr0cMaDSD~Aq#Vk)`iZ+6;j55FwJk>GV*Hqy& zftj?r@@=HFa;6~FaQ>o%?{@8azZ-herN+$4*Rd2vaV7JZCEqxmoXF9bR?kc}WsKjg zTS1H=(h8qR|WNf@m^)jrHHuy9)K6V}^`~KvxYkm1Ae7KIn z2w=r_PefIihzbM$hL;w7E=mj#T7ol@Fx6Nyoj`b{`a=wRZ323C(Fz{sHSCY9TseXeMk02f!;PtjOL!fr=XRLlAs z#hP+F%j8vT?ks7+OQvhJa8V#XfF4zo6|FMT^;Vaj0{?gr8&n#6OV39yp=+O`y?0rP zdU=3^NOf;A@rwQG22Im%V?b3UJgxMf44}2sF10GZ?WA>^jrEUff(5R9eS-@%`)wG9 zpfy|U!y{ow)%|&0CGtKa=8|7vFBVtwh!$R)V8w6@6DpTVMOp4Bx7JjD2X1s_=plzq z$lc>?B3W8l`r;?43Yx2N8qdCZA0?VsZUQRqoBB{fv6&1FVg0*)s5*FIRT2=f_P8~& zPdRq8_~25_Hj%AK9b2SpBu~lu*RB=~*%yU5aaoTP4K`v|d(cV2;~TFAkVa@CKx@W9 z3DXvje96HUn!23hS;YGCq(_cSEf0YY+^n<9SY$aq)$QVRu>D0e)9V%B0;w*W%a-Ju zU9`B0nnpSj<;F~ZW&3zB3z%eTkEn-2BH}36>7AC`TuAxiPZ-hITEz=}=~BDR5c zyv0;EW4T*W8-=6S20u_Q#_4xNPA{>)(EA6+s^SnCY9xK*C8$xZ%X6|JQJS&K@N-Kb z-gfXJ7obQR%Cz?&MQX|=>jlV}0FAFx7O4s)=A_$#*V3)AH$omjfK)$Si~r-lf^eeK ztz@HuXs`0!Vw|Q?_nJu{#!~5&J#Z!<-;xMa#7SR#jlCI{>+chEdRv6azT5rnA z_|kgg4J`7fD(OhH(8imRvNvGuR9ERpIpulPj^sH;k|ao(-7ctEvyD;RFoZ+NTHitq zGu|h&OhD_GsZL5>w|&CFwfu08;s0tBOyJ=wA9rwCyteuqH8Yy~LU12sMHvn{p-JH( zqmV4ic{A-@f?1VnrWdUYN^BIdd6xpZk^p1LhKb>s^%jCHh zrE?xlX11ddWN2^r!|@wB?{IyMs>kT!%U(F^VqWg-WV+&8$I@jGxn^M|4pB3=2}qG~ zZZ~a68ysAju3aCeYuLz}j5L<+bQ73##U z0ym^aK)l!BonrNXxUKf%IL4ynM78kotBRThYs1KM`6%}!szgm_fpExP5zS>&M-XV^ zSsj|=uIUx)qN~F1nvZ^GDt$k+36I&Zj(d7;$jI`Dd?3L4xpHoQ+g59h6r{kj{5|M& ze5m~$76O|~13q+ED0PUBFXuANaV^RU+mcmM9nYr(cM6@O0yiq+_L*rQUsgt2UnfYQ zQs$wCWhA=rj?Ytwge?W7X$hJP8d@#06oAF=Cp&okjOTJKDnlmx9tBJ++e0>?dAUrjOOn@uh~`lyfrvhYpe~0YN~%zxaLahRWGHLbS)` zz((6rvX&v8o#Gw3Xz!=100mJ$kNTcC#)Oa}Qt-BwBCd?!Dw)xhJ`kEyAG_r%)e)S4 zeEFDoXW^0_b+}i%#ZY8{+r=$@LTuDtEgnhh$+;Q($8U2htG}zJNx*qFC-@fTf1q`I zZ_F~#D(z)4e{I@urMZ+o2-^~|lsW4tbfPUPRgiJ9cO|rIVHPH%rgl~^Ow#$?2pJ(4 zL~ySu0ysxWg@^z|7Tide)_1!AKO{kRJWw}wJ?YQ}5WDjHGc7o;r03>?c3ux$g(aS4 zGbfzV6t4l)aURKC&R*|VYi4{>%AVFC?3kMXo08s@q_Ah+_avCB-kZf3fny3JYZVYu z$nO_ecU+_)DTm9wv%nqY&P<;+5*_wqiiYxLMs;^WfRsstrH-f9X2TSMlM-ZnHSg@I zX>*fS2G#0hLK%EU+xyoCdUEG&wEx5%!pg(e=~DB#iQUv#*tLL$97J$PHw(qaZ2|f- z^m$Bsx$?t3a&@5>61j}$zWQ#Bzb6tEjDJY;qT>B1!;@^m;gq(+;fX_W zYovduJZS4Mnt@Zq_$jN#K0+XqqL=pr%fJWY=!?4dc&F*>4n6IokkpD~JH!-`pLcQ0 zYV%U~wR#Am7J)vLjW}`t=}1cs!PHEzY6OQ=(I1yn!x2LaSSAOCQ>s>}z?7;M19w4A zyAWqxWOgyN0GEDaRz;UAu?ocTAcf4REKg>V+hRCn!YRt@_PuH=D5R+l*=2T6{WPGmRS74!=5KT-Q&H|u?3v|~oOdygTL&q~* z3f~{wZa^#B)6Pif8^JPp$>54T!T5!d;?GfIlU@J|rMw=)Nvo!VsznayvMIJ|!pZ|M z>tgSL$t^|5GwT7MmOt=8Cc1{|Y?ltho4l{4ek1&=eLmpKTla0im>+zJDdp+dKRe74 zXGx8stmEtqN1bDbkF;qcC){tLu;BJ1JfNhZmc(d|&!XRPg>-5yYe{(4Q89Vw0%~BS zB5E;FK%3nr(?V)03C^F9c1bp(*?GpqGhQf03p#9t+)uQqoUh6Uh|qF2xGt#%vaK;= z7bhBv2zOKHIb++~AG=3%Y!ao&?lr1Q%0?)+ns?Vl&<;oL_Rc8vd;ZIM0EQ3z%8_FP z(8SUwtlXj;!3yBQq3EgSrQ-ON_IE;4EOARS#-rd4>fcafGf0|wtwf=3ARUAbr2FH4 zTE;ge8UJi|4t{%xr}DF)OT05D$HYbns}~IfVRe~K7v-lL1TwcHdjs8XXO}jg&{5GY zSs;FB>LeP?@k#buKB<^R+J#FUjEZkGU5?R5DChVJJpD0i&*IjB>*P|9!bY~G1xOeH z%{^!EkanlxS}_vL9JuQ9vg8d?6_1N%fK-RaNdE^evvyiXRcQmipjwHx8$F z&Q1)cuL<~sFz-wfYyEI6kH#tIFOOvlDJc=ctl4fyrdS2=Z?sUwu-tyBw0S?IDs!in z7Y{fA-VI}%fkIIfdG?mcSjU@_BL|zN0a}hoyvwKtA!UHqio7cNB`Z?Ks>kR=uD$h{ z^&@DV>z1Bb-$?2S-9bM$6~NFt;wS`olF9p*F9!`!Vpft*-}6*r|FZtc3*`b?1ixPB z%>;VmMebVj0@5l!{@z= z_r*j=wr-!g9qkoJ+Y7lR%$6=)`{9McCj9iFt8eOcVR(Oz?US1;8% zN;;`&*;)^-1N_WKE&H>~a#^okp{Z77D5YilYKj%9@CF`!F^O4pU)1BjM2!X*F2@kX5Zf>Xzj;*-NdkP>7uG1c`syC)-!u$N?7ZIUG`8rk#(duwCWi=w zuLHnAU;qX>p1!{1-aeRctc$EJG9}G@nGo;q4uX%yXoOuPF#Fi2(#xr_ApQ@@hGZAZ zPgx5yiMwgDILk?V;AcTit1Y8_Yhg0^zt1ZL%N?1V^}} zLEVbzBWX;lXj3~dS1HowdaE9HIhzhQPnB^i60e%oQ2uN_!Nrxhklm@q(_;I0N#hpf z(blbuL5sMkEsEG@)KBb?He5W5q&9*zGP~NK5epBEZbM8?B&k7W3lLBhaL%_OlOoA0 zN>QCoiMk=ZgHOHT$Pr)NX37QJC;Q5uVeVJKu%0s>8r0V`k9kY}Jib08%3_QAt=$kZ zfIG{>=yC-pKls~IxH>-Gs9f@(Z17%k9f>4)NXu6Tm$|lecn%tVQv~)RrA_k{a4O{n zN86z688)&r3>CC}7cX(iwZ40)iZo2CIoW$K>ZOdr>Ud;YoHpzDNMT}eIf?NnuTmYomZF+&R$PtCdYiH6 z!utc?sp+kdS|hIN6-k-*z*L|7(r7=_Uhg@5dYGjNY)`QszSs4&)d{GNAcT~KCS+Ze z)0oKI;U2WzeEl>Xm` z7xV!qrBuJ*2{DN`&zoe%_zQ|pZa=Y^R5Z-!%I|&w^L3-Ah6B!2gx}PL{AaWM-&7SV z^gj%29$Cur1&7g^T(DM;b?}hbRblxVL1?;#wxNeC zElxr+y1{6t2@@o?D;q%Ep_&?EMH0)wIwt&Ns=LwMmfE#Vy$-;nN23yLiu&bS^z+AD zGj8cHe+Zsyq-4DYeB3|xyG--~0r=4X{NqbB)i`eEHPZms68(Y5gofHdnv<4QNeZ-a zk|umi!$r2)4xZ4Rg1THd(L`DbJ z;{-Lk_OA5I_AM`_uLiNW#gWevF68{LwawM89V_$dj!1r0*ii5GUi%QQNlNP33WX_j zz6LFt4hVo>A$3SJH-2(9BU~?t)DI_CZiCqPJQF7nL+YFyr~_s+(j2*FoZ~x{Zrlt5 zFN_h^?tINid;{uos^kFZ;@{Qi)00f<2B;Cf*GkS9W-)ol-eoS+K2-n4?f=mi{WcH< zboXVOs8sWLOD?1|s$qIG>h>Zl5s9hH!0A&t(eks>eTp`M9528oOKQtHre3~#@NL{U zkEVTsZjKRTv4pmWDDA|B?9pTZX1noZ<{gHTO6B z3mbXYAP=){fHS$fj(0-(5|wN@18l2+>Tp`Dw;ut$I4f}6Ht*lMl$qQOL>fbHO9_n=bP$Ia3vSd!inLF;wT}jSDUxa>}faQ+A#%5Nw8! zyBmPR2NQmClOmu3<9t2C3dXRG98ugTFOFH9QdiGjYPw!co*=GD)r1%4_u7R?BZCH<6r(Kygg#ILCBls|d%YZJ@sJA5X5BfEM?-zgRFcPDT z1gw&Ifx~XV6yWXAq)4q&_oBG2D>j#ojPUZ@V!F?!sn5=NEdJ(0Sq39h>*K`@xrLgL z=95=1!UY7%fPhs?QNQck#L?VUfK1g9$lX(ko{8$B%Sl20D(9hlRo}Du`6tPU;ea4d zL4!(v)Ax#&8l47lz00@?pLLg`c6kB|l~OH} zsL1KfHR5S!Zq9{&{Q4oBUjoZM9@cWv-Ym)LpA*v*N_KFQc75h;hBemIgYmiIW)gpH ztx@4^n2+4U;Ax~o-50;Hzp=>aqF1nZnB9Pq^ z`WLqo)4{gH*~Q_E%Z09Ry1gwqF0_6b*(MAyDwK%qf@i>uRlQUWdPaMJ98VaAAr<4| z=6xAkj{K19Mh)D|0?*y5)f_EN!5Cs|>GJ5iRfHa~hcMk!9d2e{rWI*?$DP$bZ8k}uwt=luO=#)60vfeY&3qaI%Y z$WkvbExBQo8gisHY+=PPKau7{8@&pVkDy$!Jce$j-|Kg-6C1O}pYg@SQ=a@F@u zQ+A(h*Hr$H|0UwGD~HPNtGxld_#F(`JxKGoQCbqFmBPzwXY*_{WnYi0dBz0!Gw7oh zm*k~cVhvwQm1`Q#pc>(H2r+^`U0jM;uIGNeOSqB6#kj#{VGxxMALV)J{6tOVUGp-d z=a4Ce@!J)x_tGK1hi@?k89_R}2Y?Df1J%u+F$Va}Znbm2ibo$^NElXDv*$*l8P;(_ z(E9w<;U%}eu>}^4c~X36NCpj68kNLEWvls*8L)^f9_iC{PfuEF^9iR{2XFla$D7Ga z!f|20>~4smN~;O3El(FL(yD5`IoZOofG)trLc*Xt)Hcc0Er}XeL!JW>2Sov{@=U(= z3M^i(s>_BCzltP6ReiJ<@5zru{0XoTRkaOc{5tU84Oc}lQh@In@rO+D8Q}n3vgt|@ zi(+(=f|Bo!bL7Q+KUjPhTH6b*!@4u@sc&}O!PlPE;vD?~N(?p@Xg<1)1Da0-Yg#24 zN1?|8*=d+z*3Nyg)V(f9-C+Na3W;Pk-@suLo`?svvJM?I?-b~=CKmmt#SUa(9Nk?n zs`4MNb{-Yx<-9u;sl5N6S#Nh;TbgSj0dt8EC-JjXhTMgN0z`eRmEOhOS=ZA)%#uzA z)Eb0W0v^Dtvrx`$4QmpzU7rfHCjxKf*(klQ#eJrO@tzPB`W^)c$=2zlfxl#F^B_ni z97nl?mX!5Jk3V_#-!ocG7f(_)m^N|`u`Op1(6YT zZ_4(75h~tWgy3NPvYx6wb|S-I4oib34NSIrjHdnpP`lbQeo-)*6#?FG%|juO*(v-- z5-%&~c5vtpwL`1;9mPfw+E#|gDZcqI1CC7?C>Dj91i#N5#V7VNao&UfHOGsYCMhS) zQ=nQK1A1Z}WN#WSD3DQstS8Zn1V(=NrEs~kRrV{WLH$Y_Pc|DfjLK#_eN?dKGUwfg zrqztvV-!TVYZX~2G(x?_rv3{X@^J3;g#|F$2#t8Hd%&{Pl2E&cP{dQ!)nG;%4zv%a z@9G)6xuq7z?tw5xQAzbG*OX%gHncs1xJMJqYM@&NY|4=ts+a5X__TF($v@NY*8(k2}uwdg%m#?;w+0bcJ%NQ5B)Hy z4j|6E0sNnLG>~J@07uetMG4u!&vy!rqXK;y=U#u9gx>mx zzVzH7qs;BY2sc*jT$7Ip#hk}n)W&`?u1vtI^vFnj2}euy-18fa2LQL&E33>p>QUMp z0yuYm%$G(Gl+LXs#elj(VA1!3W~KIQBksr0afEAS$7$ln-P|k+j7KnOE)-RvVw%Kf zKQ0`gZxj2t93K+ZqJ;vpUw2}ZdM+C>&`mqyewJufl*fVd|6L5x$ZEAI)TI{3lgkmD ze|*A)0k|QP2s=p2iw=8I6_6QCm+YUs+M$M5>uGLFaeY-n^AZwu;R0ZHdjL;adU1Wf zeif6_Lt{cD|6Y?+U5!P1hJ#vMZO}%jobRs^H%2;FSXCUtwJwFczj;4ui~;4x*)=%* zdwv-y(z{GFsd%}&RL0K)cc{FB&lL&7p(Z%+Iv3xJ;oh#`5cOW&88OS-)OX4kOSR3_ zWi{r>Q8q3>T{qRx-4Xg5wG$Ca!(FM0_~WgpLRgT-3!F5}L(~vm-UWimJ0*dGe6sx1 za7X16LU9_vPy9i9pF`|iPG~~R-j4?)o(ya+-Ae^C5fbX=Y3H_`nT1!*OIvP7iUVmR}F%VY^J3*0b6bx0;x)wQ3Y<MVcC^-2SoTmh#Kj_C&v(Qi2t zSunEo$mK2&BlB?lKh#z~1fyXj+lngIHVRW`ny*+4%X9|F0Fo{`fypliPgeN@n zxI-D4n)MA7)F9FY35P7G*zvLyx8=#^uHRPHz+RH{I56zP_Tr-ody#_C&^)&j(X`#2 z!|IcSmgwg~%>evk%GXpgLL9Vl?itSAK9_^V3bu)HjSoQm5%c6E^^3IF;$}aN;CyY#h?+ zT#})b3$bR<+8u%%Z=#sVuLo;)s{|2F&npcL>!f~+r$3l$LB52tXem*SD_N*!QDAP6 zgErL|Q>9{1XuAXHWQIP>mz`%<^d6b}&qFbPN{F`MIqhunq*i~?I_gqGs-BsEM!}`soh_Bv zi8z(1@vKnm${PeXs)E670mI)sgc3HbnTiRuSodSWQ9~DAe2G7JmoM`|FF?2#L&SW0 zZD^R}&*u?kj$j2H7xXQCCFEYK-4XDY2JAwi%GRy2Z?Fi|!Y$jj3C9d*tY-HGKHjKD zS>KoZ_sdkW3>YF+V-6xiqM{UJ{efS8*6XiYT%^m+Xr5Yf_&pt_0+ezgtM@ud-`7c0 z!wL8f-8U)#*r^!kAk?_)8cWe+{{YsoTn4;|&Ef8m(UQ-?c$dSJgXoI0r7dG5b_U%- z8F1l=FowP&yd8Gr+))fjf&M973J+hH6SC;s+**V%;V_j@t?Dq+4=M?OHWK#Q;C&B( zhc{fs#9#0uPrDUzoKU-OkTcddUsb=iU@@ugD?4qV8y9_wqBIe_ByU`?AbXHm+9}uo zUOlD7m$@bsio2L+fc1N_nlYmoPs>yT!#om* zzG12WBYPP1D8RVhby{x}EF*v|X|Z6VQ7yWCCFO}LOOo{$cD~+{aKYLB(1Ys0+U^2| zak+RL`0x+b`s!ztvbWOlSx3-g!mh8AjKb_R3h(Rlg!e9W)u5QZdAvK_AjH#7I}d#8 zDnI&0qH^A*o>J_7=T!f-k+)=fe~c-8pPoC+S@+fmD$gGEdy6e}9wM_itJ&xN+G}6f znSQ@&Y9^9r`S>p_aO6{0(8FP?=H8HwcMXy4?f8gZn70rWIwEVS+R32saVN{tn3YI} z+sl%je-@RFYvoyK$NuVF#=SWuRTW$q=(w}_XDTfvonv>#D#9-hKfmT4IUpy+XaZcs zth1I8<0i^)QJvb2k@XptpB?KU;OuDq2fgCV9&Y&&2z1TG=rsuM528Y)4vRUnw)Jbi zNNS32J(~1aC{wpS0!w~=V(@QH6R;Wz0z0m*Ck#lCm-F5eYydg7?>a!w>LZBp4c(632>XC>ru)Enj}=3aF)*JTGbcm2ze4^{o2HJOJ|OhxAKr>B4_{QK=LeTxP)5k?A23Cq^4Eqi0?md3Ex$p z0Xv8c-?Z`E(q2Pk^7`LEThEnJp%t*!7q}4Tk6s^4z7Um!PUK}(~{~KO}WcL_I z8PmSw3m}{sdB8ynCh@6PY)uO4;+B@w$t&^z5@NKI#3@|(!~Tppd~uc4qb}f4Ck;l6 z3}3K6GZUo%d}YxUL^R?k=7>t$+lFNIGLXWkqBl4T=Fh00LR`q^=ZVugQgA` zec9DC{w6&s$u(_ExM-lS;Mm7ly0OJRILx5zlvy$M<8alGJ2*i(%zxBAQ^xDydu>K1 zL0uoUM_v6IA&HZ51z5w*A$lQ(0iH@=T}ZXpe9xJa`sLdnC>mK_^;|_R??0JNhKLBE zhy_eP_Q>z(RrbJomJ~<-=BU{0*`m5MT2`x!R+ODb;Uf9C<>p^`_94<^rq+~V`_*Jb zWtgRZVX};n)NO9*&No5+tLL3&z7!wvMARWa&7(@Po5wE5C};&~YrkDJ2(|16!`A=# z%~XfyH3ZQDA%36*L)G8fHI3nour3L9a2R`Jol_rumPHOhYId+p?F<`W)-LxW1LHMR zS(#Wqd3C|6jZ&2IbupxgYRSW)np5vr*ko*&l1YETz*wZSI0?TnU_gC>qa?wul;PU6 z+d(sqaq^eyRm4BGuFgPq7{3P+d-h6?oYlDy`wuxww?$bAKP%Mat;4k?1PZ>J2VD|4 z@D|6sL3rt~_Yw>Qs=yGve%TygLrU`5cp{~nzA?4o$I(w4o&_(giDhO>97QDJeMAM* zB5dt=yD#8kATJoh`qG-T!cjWS+J~WK8U-h+c*xdZWhW{+W%lGo+ z`Wf$-r%I#~{d%#gU^`0oIzf0Vym5FvJ)|W({nJ?@Bbx+V4itM))A=An?-DXRz&8rl zx{1A@r;F<4mk(4!LVlA#h@I2O-gFz262V~qt5{E$XbRUj!v3>HIj$j{wt<$eV#dl7 zTi<+^^6Fz)I+A26so$~iFDRfR)2Mf{N>BOcbC*qulJfvS;_{4T0+ zGSau88=d7Uz;7m~pt0??jOLMhfo3RDpR{AwP9V{h8>^k(Wo64%XBuokAUd<6J1Rmq zi`6n1fjitH+=H9SPLH0)VM&tm?NQkz9D?E~7(rU^QBV_}=^N1o)g)MO$9#j`=d>rQ zEh3robbg%!SK1mvdLT?Op77C0%x$GvDmd8#ti$fOCcE}D?lbjxMHNHFFVxZ-v^_4Cg2O#74N3MRVr<-B6He~5S>i_vr|6HNwve^mZ zu@OjhhP{&2O6^IODUS%sv<}LBhh=GRyvL0*1*C!OWGX1tV!c#dn~$)69KwU{a?821 zl@WKyF=bi(h+&1KLH|1Q5OhF5U>=N@0Q0Ateu}%*vpUqdKfp{Q`YBrUVd-av;vK*2lBG8{(=&>*8NHhTJS^o%$kNh1yg6^rZf(2f>6}(h^P(6EP<=7z zdiASY-RON%-_v|TG5haGm(thNnC1BGGNdkhAG>yc9*i!koPkVSdwS;;sz+sQ=1zEJ z7)SPcTRPAGY)M$M&-Zi$q`n$BT-*GHz~mq#Gm@Lb5dlf>)&4P{8}KT!D}E;VfX#vt zSc#Z&-mtz#$r&!F(UK#A9cPGlm6#3!jB|y5=Vp%8_D9+Y<3}eVC3$nG!Y@;gnlv^FXu|?52>YkB3-nQEWHLO>}#Lh~oGy~ihJYTwN;Ik?+Zd911r$pw)6njZ$5bk-i zwv^m|YPLImCbe33poZJd8*&}s?d>l$>*tU_q%colZP5pU2EMV$g&HPECs}(6_P>bv zX%FV|ms;Z%x6x6K)P7IwCE@9|VosZ--Dd%o0Ji!BkGEL7b9?W<~%S@={Vj4 zEY2?8jP!?9z+JPsq+}mu)*U|i-A6`<4i6{SwQ?>$I$i=Uadu%R2L`?S*S4g`1Mgejm(8Df)A(c95TXfLtuQS(Fy{r1E#bax{;O?bkp6W-PEZCF4v$;c$30+mvLH|Bkyzm7sFA4$n5+9>GK`jsZZVJ3qyA z=yw=cv7-Yrk<9Ql+M|~c)e8E?gd>j0V1~?%9fBxa1#}h_uu0B&;V{WvYVF*nZyFGZ z4>cq@zF@!2ObSxvE-+ z4t=?iunXBz_u70hB#g^{ zJV3G4ti6x5yN*yz!qU&N^t3(`$0QE3ER+DCav^Rrzaux>)P|!b?r9*06T8~{RGM;) zElk2Es`#iJ?Ph{FvKm%OL9gLu(`i9#HY!*Q>g1gDNh!=LsL(SI@*pQNcv?H%M=3s| zCSdr1VSy;SBY%}FkQtK_0n~njj3V>NEJN+??8(yvaCEB4hm>l`RS@CjB+9ImiwU_O z)oPxv@b+p0yeej_`BbI=KWn`@4st)>Z?YMHXK7yT(ejKR}3 zr$|F&GQTmn9sWmoxV#VmL*(x%;{fp%9Lnvl&m5$edyxs?=HI~1$6Jxu9l)pYe%ZZ&rX2_n0Jcg-r)mRo2aFjeJ{*}1^v}q2c~09y zTyRln^iZzSHSxHDaC;#Y%zIT=-GbQaIny&yFxP(%<1aMTGH>OT(TeU*uhq5;QcGr| zhFY@b%ucB($0&uYpe*UxSfe1wd1hY*l`&$&Ccz)p#~?dOK-RCVhkQ)=KLFD78^G`2 z`ojdC)3j4>cBMoQp*y0$3~4L_B{a{oG``9JM9Mt2h;Fp}b$3eNyA@JHn$r#(!_hne zjIF7QOdbq}hNzEe4Xbdp`7wRH_%5pYzOke+-w&EH=s&n2k(JUuF|9*(enh*A8X<#s z6a4v!P?p7dN+Ov*qVhat5wZsff?3 z)|cW#?q??-J7njf)YVP{kN_fmxaig1krG)e=}oLV9LgZY8=RoB!T( z9c>(eROD6HbufF1$!_8v&1h2JWlfSM{m^Cm8Sa5#RwVVSzn z-yXS2BB5-ig3tsbCY1S79n&s~AOUpBOs%~}#yrv^=~pknw`oX;f88t)au<&n7oHbQ zji0Ol2ML zLCP^C6oA-oe#!2jqBdFJqbKgb${3FB^>EU2WQwEM-`Tw54f!;`0~IUK?B2*k+fO+bqianz=IYHG*X6{h zSh)xZt&s5ig6D>>Og9!XhfwkRg-FPnKDHZ?cunl@taa4A2rh##zyd}cmn9^Va+hOS z1@N-Rnd85*II{W z<8Alguh=Z}jw;kFhKqk>KN3m<*N&S_p1|l~ldp~3mS1!D|0Isd_if!<6>LM6nITJI z-o%g19>d1bB9n~nS(ZqcU}n2>{ja+|wlNrA?OeUy+a3^$=bwM6;WD-IgTb_aBs#l% zzcZEh@yucBCb%WR1}3MYBz zZKQndz}Ua7i1@h&b|SuPcoA-{EN~071f7-j+zVO7I?$Z>r+sI$+^NFUfdnR&AfZ%VJbT zib8gcY&Z4c*l$ zNLFk@)_qa7Qs>dINgd^ae(r!J?exBqj=}XmJNk?3hSJ}i%H{|sB>0;spCG*7l8+qpAyTg=yB0bJZgdi=kG9J+%swxk{Leh%1 z&JCGZvrP@*Y9KrP#gS@Sm*yQAuLtG0^O5z7rn4j}6U{zB*_q@V|7S|^ZXXu8E)t|9{+#$PPEBg57gW%!8s+bt+u!%ZDJzu;>#c16hk;Ph6gku@$cZ=$W}{Pv+~=^uIrA;+Y`fC@Y4yZf=NP zlaSafTZYX%Mxsr_Z?A5L!q)pc-;bqu`bNQxCfI4oT^e1WQ-1ZAp?^;&%JH`}y{J{j zuinGYdZ=ljzJ;|iQ4Ip}Gvvum*Q5!upa`Lf7f~DtWP0I?_1dv2i z`#g+`A&Kbt>FxVOhS>$4J~ZF)d+XYb<@V)gh+RAa5x z$w6Ht!}XY&c%UR}&;2|)pQ+pk(dVj6=-6m+Lai^E1(02yy5j&J zJ6w49SB_5ceu^L1h533USotI_je*q{pXKG)MH&?b{(r*wTEl0G7R<5B(^6bBy6V;S z4!}@GrS!?fMuh-yF?}yWT@Ul}VBq(B36Os+8o7qYpT<4Rg9URek~hcg)J?LBgLxI} zf&r4CXZyS}3Z^U}a8SAb<^>3RW$h&@pq9t6RDK+luA{hag7`fT{ZN$RF3>J~I`Nj( zxQ2MmE&tJCB$<}^rZdB|Z>Unxk#aOYhs52@u@@i^(T%6!6J zhP=`UVexYuI=b*54yI?7K*kheosQ-9aN=}H+PL(ZD9x=4{d9?3<4+VWX4?A{50gPd zh)W*RaVt_+Uaiv79SH@5jqIs4ZVCvqaDoo(6HSzW@FE)W3gz`&_#h$3LI!*(Z!F|1 zOYFERSN(zY6o3~H5i+;*vQRba{<$?xPFrCANV;D!nz}lz&!>y*n`&*gpmmg^4ZZ$Z zR`Q3$#AgFcG&zaL+3IY5&Au-o=!4k&f5W6|`jI#$pJf5uk)5IM}$|pUMi!L!52q%{>l1a3Asd3vjj!LFK>?$ zJ1s|qlb8}Lw7_{cvwiBhsRVO$*5dlDk9ysVcpG2MRAK;mKU?=%QFW5L%|TGIsBH^~ zHPh$z^Z%D^F|xP5qjOtARwv(+k2+aT9#n?ohM4yz8Z-BTBdUfM`**UMsv%;zK?(RG z{I}r9sAFUKSR#Mx#R_X>M71B)I`hD|#F`|z8h@`)flVYL+T_DsK5Xob=bBV>OzBT2 zK@)HeDVKf=FB-sT8=WZNT&HXV4AKn}7hTAe=Q!jVrC}9rrP){G=lZ!V41pE*d9Obf zY#~G2!!5=+Wf3X)F=15lhLUZ%+A0JWDWFy&0;fH1Wgeh}|9Da}j_s$MQ)}_Xs*^KQ zOeeaJpHYvu9dizBW`OMof~&v#Tkh+5SIWNn3;ug1`jqs7lBtc_JhH%mI$L8SlV#+) zhluO*jen6rLw(wvWuU~_Z@uCj4ut^Mnj~-&)2shWIiZak#z?|tFXH^#FB+*UQ?3zA zxzq-9Z;)f^w7oDf3>3@g@?1_H>#pcN{95Pl44~Nyen{wmk0d3MxJlyPUUk}2g)=}681u8*$R|!jy+C15c2*aGsX-aRr zl_M#Ubuhg)pimp8ytKVD(cd*c4m((&wGWC7z>SOelb03-D*Z36*nwq*^I?E*fudMp$x9&aY}f zRu=nI1K?gxc~F7S7p)qZ<>y|xr+tTF%u{En-mDYF!w*C`{9YF&dQC)VvAfJE@*j1OyQ|6))3?%dqdWN`ou4D`!7sEVC2srg#i;NTxKD`o#z(yWwyrx|wa!oEea zC-^HJV6%74bv93YVc#CFp;Hp`{4PHRY=};x^BGh;%er-^+xO`EpErHukA-+z0wP41 z=4~5gC{#CKni>g5_O&O0E2r6n_+njt4!FOTnw_wvbJ7W3=5rVDamSeEK6B?8C-K;b z!C*yaih*3`XIj=tcexQ+{kTTuR=?WF!mx{sx_OIK^EN2V(mhxSnfhh^Pe-TO29P$EH$o)1YfkDs`7KKmpw++^o8rw(?-erO;aBXs~;9% zpJju6?RFm?o-BaV!b_+MMeEi$cD=7ndgLF?SV3wr+m5~Gh(!)C0e-vof(3VhJ;I*I z!L8}FGY`ZhOZ328vz#B3XAdHb_Bk6GTf=GQl6tI;lk_8pATVsAQN9WQ`G*hB#*%^R z1!DY;+Z_Lip7=x?i{j%|CpKPbCD3w#Jm_!W4>SXC1PRNb1$bQ+)w9G2GWfy|{`mO{ z!#tUfr-X@dQ5IhxS|u6i8a#RZs>F~sH+*ghRer*-cNJu6C{6XPT+gg;EkmPBto7Bx zbl0GkB#+l)1d$z<07&qdCb#YL(Jb7`?OZ=~C8TUU_xT_CW(~;C4ewUx?iusl*xhf@ zqxN-CPO&t^zC^h0KBsK478?t)we#c9QfU<~XW9gtSrZXxVJ-R(fTCTA5YloZu@wNd zcYr=s2rX8p%~n| zZI?$-qw64zh^~EuohsW=F@SMZOZrDvo87IP3;b6NApEww&I=+?Sdf>z0^X|p z6#ZfK+eBY4g6H5RF>1Mi9!pH7ML?7om<>H2N@=nH% z#LY$LMN&EkoyVK<%MnbUM`4#ZXle%x)YTZOoIXcA#6Q?^D=_);>`fPUfVkQ!+~x*i zsbrai%TzGim_)}Q>T_~qpaO0W=SO74{j~+-&tbzh8@D-v z_(|>B`y=<yD z8e&1jB>%l7)FMHv+uUxvBLPO130esRU%m-t=(&;Ew2OqVr|D<&%Bpk}<&6+M+ z?w#6q>|}VI{Pg)}$ZT%5sMns68zz{cNfR`de)VI)w>k|TH0wuYW2By$edX4XWU ze5sMno_ae;#Ub1Qp$F!&%PsPEzQmfz-{hZ0W)~tnX?x~yn=b=E z!*9dyNOQE&(+M}}F4sd?`0vZAJRIKi02B=f(XCcuGUANJ^YJLb^?CwYD;Xc^0UYnH zqD617Kq7tzyhs{6@dAw${>0 zBpcS+OU1<0K{c%;p)Ag4arv~MwJjYF(Wzf4#njrO7KKKLY65 z8-;li3-OMcs}!m-BnuaRu`+&K$B%MlEloXIGBYDmb1`d1&FMQ7*YnoSaa+% z4Dges=pK}x7Au}gX*mhw4EV&Hiy~mMcV~j8Cb$Z-mG{;E?L0Im@ceZuhA|>kae5gM zUj@cf#V$u*mY3hG0!TAk+$IEAIc{kO6$ zSH+W%iJ%jmNJh}UObuvvbrtS7y)N6o(Cp0JZUF`$yl`x9Pt@FWg}^;)5U1mIkq3e` z$kdk7MNu+Ura{QkOPNffr_nh2vX}!{tLj_}2el644#84q-IoMPtxzfrLi-g0#M{Jp{bRqzS^A7QiSG zY-zD)%_GocKkJif@nbFyEjYb6ea$63Q|BusLd1i9b;CURuhs2t zHv`e2e@3?sJatWU2?y1eD4`csUVgRlUs#0~DLOu)g8&EjFiwn*_y zk8gsRM_tfk^-vcl=^)Xc5?*j6x}xG;d&J=4z$|dZulk}U?g_mEe|n|7+QMgGygG1# z+mMj7eYp2%{@c=&iC$z`ZXt)59$v&eey} zRuQv|{lxr+q+~~F{nbRu1Qh$R@l<%fP{+;B=Bxsy92r0-4m?)=!5mZ+GbO}9$5mRR zS7ND*p(R-h17Isf6Uf$K?xxK$Max56N8&x z#?M}8GUF%p)gh&3PHP)+g`qG?big2{5l5ylCezB>(^b literal 0 HcmV?d00001 diff --git a/boot_source/code_app/service/CanStack/canBus_Com/UDS.h b/boot_source/code_app/service/CanStack/canBus_Com/UDS.h new file mode 100644 index 0000000000000000000000000000000000000000..074a3d2d9fd43b4920042bbf111b38c555273e44 GIT binary patch literal 16384 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 XS^#nRk*`RtXc)O&5tldoo$CJpMrJ5s literal 0 HcmV?d00001 diff --git a/boot_source/code_app/service/CanStack/canBus_Com/can_type.h b/boot_source/code_app/service/CanStack/canBus_Com/can_type.h new file mode 100644 index 0000000000000000000000000000000000000000..70ebd357bbd3623595032f175a0abfe5c9be24c1 GIT binary patch literal 8192 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 MMZ+9_8Fi!y!uPef&;S4c literal 0 HcmV?d00001 diff --git a/boot_source/code_app/service/CanStack/canBus_Com/iso15765-2_def.h b/boot_source/code_app/service/CanStack/canBus_Com/iso15765-2_def.h new file mode 100644 index 0000000000000000000000000000000000000000..06a1106d712eca3be3b45120a94217cd62feb3ad GIT binary patch literal 12288 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 V0rJ|o7{ot@@y z5D?;)DiCDVi%yk}jZtD#Ij&Nt)_`<%0ki6!j8MJ=`x?LH?a;-&ShKx#V_9r$p8Bmq zvR;YEVV!~8Q&BM(l^T=+bl^<-aKWz#RHF~VGAA)6mTQsKRNB7(*L#v;`mdK6vJ7uu zlW4LX8vO8IZ^Bp>^M88{WW8{oxjIv^r=o{>LRQEB?aitqSxKFW0RHddf73sKe**sm z{t5gO_$TmB;Ge)hfqw%31pW#96Zj{<0MHIXDMAl0Iyb;}VlM~cPv?As;;?OMvFvhogW zRw2&mta>o#RkI?}>@u}_Q_Zum6;;9DbRCCWmEmt1b`l9FnQWtA+7{baPY*(T1$Ju~ zkU8Il*6gc9jXv;HPm)(DT{lv^my)B3Jdpw-=!iZ%oO%-w+D(}zUQwlJwkkM7hjzC~ zrfVgI^XQYM{SJ$h;T|RU1Ly-q*MRBm#{gSJ3dqcBNSHn{DvKQ=39491y_zUUF8%1P zvek)n4(@ow9~*LpM?N>kunDRs9W0OOSqRRjzSxZT}$34DEys7RY)Z3f5)hNs>@#1m3UH0dFq^Sbek`=a@S>6~yoyYh}mhME# zE%h(at%t%&R3D7vp6STG{La9_xK35f`Wx4f-R9=Ypy|~dtJ7XM(J!3_#2`YvZGvJ> zCzVV5e2Rjw%y3}&4x_{#9}Y0w-=HYsXKd)k(l_@e+2&0UG?n+OCQxe5H5sM157iFM zRg0Y_j{GctL=4Ujxf<*B_JvPGuCPBETq{H~Bm$fWGt8x%Ctm!XQlSmzZez&^iQx&y;Y|=Ma~EX>@! zh8W8W@J$bfHfl)GP4ZfKc6*Wn=}3dCv6myNZR-X^wzCg32>=t%rkR%_bby+r# z#8j(OFJ?>-cKN-$D$mu{Dh)_e#E;9ZYwnJU^j5U0(ILvZ9b&5>JUkF;a*$|HGQQyL z#P;27$AT4Fa7mTfG8_~x%Bsm!@Lhx(;O)rCFZ>0D^2t(h1Rr??IWGgH7z7$vD`zuy?opW@t|Kb=-EGnGm(AC)jVa-F8`O2Q+JTv>Z6AECBn=5$ zY=_9{r$S1s5u&I5UE}4nZ`7jW6867azp?46Qj=D$rVCb0?kXVVocz#LEg4?sqLqAl z%Xpf`uWzL9ti=dq_=_WJSWR;-HVP4EGW*$eNBJoK@%>M*>rA1Rbo6V^ zF=5_FG6ESTyL`CI(7ZwssoXu2x>B+BM6RvYD*RMZ{Q}nvWN#I;1d8u2`i(^Y+^<@3 zRz&7%mxM4_!!$j;wlB@prxk^WGDU%EX%!szt@|@$-}Y|GTl+8dcLWMmTW99(6o6kO z=u9@wzm2z1&*Apd6~T{phF)NYv?G4RElp54PdD4L%Cvy^%)~lpUDY$dan%F={(+$&Wbf#QlE*pHP_NRbHQ%J+W_iyQm z@#V=(BXV{2ufv5!S~Lr60ga$ZGbi*%4nep0G<9%gxkRZZG=Q-+(*wEXMiy79dh`uE z)k(`vLx~xPE{}%(Ct+#jMupt&+u3n=3oNg^;o9 z-%ZBPU2epJcT|+^f4_oyxs|_~+dt}Gq7iVZAxPN*YXaI;4_rZ<{(m;H`M%Ee*v@78 zo4tgk)V=&QdHHIE_iKQZlaLi`j~i^jh143OM!iJ`=Ari94Qs!%p*e{Z;0PG98?;a@ z&3aDz-ZyjMB=RcZ$&XPU!s1gBVZqKZkr!hA*^f}EtpLG1?K%Y)t1Ior0K(}))Bhd% zaugY`jpnEa3k$hkG|G%1B?UT-%2{8pLk&9oi!@a27XU{PxrMx$iDtaRNb9hi--o{h zUHx9^B`;hwhQ}apN3Po)P9va)LP?OwHK|p|QSd{PR|oDY8;_>X;)w`T>H9!fe06u) zqcv-Q6+~N&dr^b*_Om2nOsD1DT0|>%29#P1j*2G2usy1*V#kdZIs`olpQ>^yCxccO zB?;asKfUB>1o*QZRWphR=~HD`Uuu~a@5>j{<|2ty!{#)-O^cUgqU~OmHK9dB5ejD` z!OSz(T9A1Rid!oYr@oW4C&3{@Q~ao`g=riQ^d^7)UN<^zgzN zEwBO>O8|T+sKME*TXm5Y5I?qF7EIF+8T1TGAZ&=jEbV)cma=088~{aRA?b$Oxy41U&aR3PoriWn8IhK^CDGX+$ zx1;+TB7L>`NqyRu5ZJU2QXl0D7Ex4ATgKcp8^xN$JZ*$vM)=DF0+Mr@wAy&IZ4%3y* z*@Wa%XmW$T)cJLahc`MdW#W{uRoZkS=lQD%n@Pbp$mfXc6eTB6d`)}yJd$6Vi)ir| zd5F}yQi9lA(c7J1djWbQG~NJ73CulRH;AQE3Rs$Wah+&GMz0LQ<(N_&ttLaHEm#Pp zp~1@bf>>48S-u9LsK$M;PQHJ2pMAyJU0huzb%?{1uarFRaRs$}4+C@^px5t>lI5fP z^AK`aks5CHXC2^7Rp(D+2Z-1P-lX_^FVsmtw~SucIQfa3TKCY%4>p&Bz_dor%3-~u z$D}BO+%A)c<6yJ0O%Kf(o#7*QTd`80>*$wp_m;m@M{OjGgZ4R-SqtOu(Js8{96Tau zc1cgPH4Kvs;JX0!(=>%SB?-VRA02Pr|Ac$srktx*j?+&`emVn4za21rC;+oK#>?WNExmmG-+Dxo1CcB-|Ko`erYoIe6goY8!)%S@8E!79RTqx+zH^sfvZ0(00^I z&+a{de%C_~p@?I$%%>~k(>y5nn4<$D-wlR{3j3PGgUOW8_m-u}PO~TfqA38&?spX` zr%{fQ0u{6Mo4AZxtbEnfGSNhP;Gt}}7%yqF=5Z80ZmVRJ^i^ik=e@2|$oa9TO)XHS z01e{F6Uj|D7&f+6#3mkqnwid9gj~EFC7ctVJ5rQ*?0o>oqr}3*qi%sieW$niOxas^*)e8Kg)CnCR=G%V8_JB-%0_Z%_S-YbK z2PWw4yBX{C0wzAT6yZ=PgB@%zn0-Om8YK8Z80564gCb~x^!xhng!0@s)uy)OhfJat z`|Av3ts7_;ma#IJ16y?wJ4gS!+pKOB+}bB5J}D6r1dgtaNeK45&`@>0<2qFd`w7hS zONxVBAP0Jf=n&kPx@f9S>f5{YcH5saG@oZl{ch-dO!}BW?BfI4&;k|seE5w%ekV7ITEX1He>xrl|<-%M7h0AHDQHR3pd({|{J=lcZy-cKy znM9*P2myR;@(~Q2P{^i5(*l?{H-g*~g%C%H+HD6zCv$rMP9i`fD(?4{cjGLt=JEF*LqpIn=NUqEUmvLn?t36e|mEl18$X7wd^s5-sjiXyh zYiTLy{;(=N77I2GQ#*+M`l2%a2ex_^WMwgy_a&B44h#}mDWlS&sD3eq`J-=cPzJZT zqmrjbcWqRepfoq-xrVc^=w*;uF)=ur%JUA|*g!WBxsE03YWry@HeiRL0D`4Zd`(Ghu#O(*BoGx)@%n4L2n;D~1w9bmS zok8eHfta4r^CfWzT zUb&Gy(SUC?6qye18ES|>6m29i**7WQEGCpI8d}pkgjv!l;UGs2-(=s9NRwz;kuV+Q zr#UboWT}IZxzJr{D+4^UdL*%gd~z`Vy^HyQ3t9)8eEHNIXmck=@#(szogC5(G8J90 zQ*)xkU?L-fMJvT)aVd$DKYMjceH(GuZuQLMjv;-zR-6m9*@Kdp1SHUo>+{HT;UZBC z-YeTNuCqEP?$?m-y;Nu-SpLu-a#H6^0F6+9_lln+n6zf@r;v5h58(|86qkkB8ErG~ zVMQU=ax5|dY34AG>fVa9^on8{6Omva@NDrdsQ48@XG}N#4wL5#pBA3?!*bGsg`hR; z5@o{&yExOr3PKclbg~qU6^vS8AaR1nxrB7tAGaTVuzAIqZ|B#~G&{e9(~?7OFHjoT zTE_*WX`y1metzq}8$zZXYbQ5$2i1yL#M~qerpm?7$yB{KxpGKii^${f_9a=kDd{`6 znc)|WH48xv{m^6%;AaN-S{@Uv?veL|3U8WZZZgJ}Ej44nwm#VUpmgDWXS5%ImC?-S zgiKC%EW;rzg}w!NT*#J>UmN-W;-SWyu6i1w9%&81KRV_eVq2G7 zhcdOpChy&O1Lka2_jEV8#uaAkm&*^|3fbn+oSpl|x5~Mi`UI~V0mqiUicn3sMjdI1 zMq%R98$jDDcDkQQA8s2cS~71=WW2m&Od18UOXlat3z-FD@SD~kVKaREM$7+xAf3eN zPjBiHAFL3Qk;pKPALnDJ?;xs(lab4}db-8JB}1eySiV8u_nAkQ6xY(C&~SGlkEpL* zx;Q2CQ`KsV-E`W7CmYIENh3XyEbG|GpncUmC=5prJA4MRQEp7`7nJU7mGe~G?!%TQ zm+z)xp9=-(lSWQ{hV8>b?zTw$QARI=WhUu|@M3z;-Xv}W_P9iWgxR5P*^>0QTq?@H zWdR9Dhhk%iQ$9Nte}h8r8>Y2VDbxtA{f5fBK2-;V7G@Y6Qx~)QIz%VUPvGu44+i(W z`$QmL?Pxla4|>0L@E~?f0SKC>+zQpNA*pKC0}mxn$8#+XowADc@_zBofw22>SCVvF zem#_+ZGWH^Sr*^L&}k|Qbjic_kGI9!y=A_A8R77Z>zk}}Nrx+pF-c}*>}H-MRcc|_ z%QfI24{f4(*!i;WrAezEp*nbye?%nq_4x>5+0O&9P;9%AZLvedl&`{(&#;7ceuZc! z^rPHhJnxhQqzW3xmBxgTv7q^Rb7shCDS4L8J#%>3;(fP=yw^2gjB0n65voyx_?^WW zq8)28k|8zdHRn~>TA<8GM^xEVXN>FlqN5(0?gJ#opdy`v3ZW>~if1cfijjKFbzV&{ zsF(u&Ud?!~Q`>vjaD+Hv(rQ5?q@$U4TK06_%jK5nBI>}b!UVAo>Q?NbC(-G^fL&%& z)xYodUhK0Ca-lb3*dXcoAw=PS-C#1JD3K}0>_7TFi}`^0*6&$tN?&0OY>u(bK`TtU z8>_nfiH9Yp4~mUz6$URV+=oj@XG;=9g$d)C7MmMj@~W|m)LEw+38i3d{nySTw5g&# zYzf)JPpRVS_r>5ck^3IMospAEX8fBIc-Ha03aR8&sphmG?7fbLNIDP^);PzY1QoiU6sjVYnZ@M`+uwE#9=>kjCd|a- z8Hpc~qavoD6M(y>Tsx9GO(GH|569HT5ewjz)@Emrfv_9ho z&FeRW(8n)oAaK*yaI>~`Lc#2AaKT$K98A~2HI2%K&v}Q$f0%ok{mpjuU`Id(d36aT zsK^O1prjKQqY>b|(A;aEz=R2-xHG1&{R);6>!o?B-^23J-^9LrMk$9NW+RBF(LpH6 zkDdOpe!I6xUu-eE<-tAJE5~rs6JFK|atn^N@!?nan)6HTv6d`#Uw_+Km$?;DYrwS3 zN>Q_@72P4hN`-OWi31(1M9|cLn+Xve^zpq!H5?M-w8+WR=nXF7ZZBI@+D-qvDs)wn zE2s224kmV?_d@^{1NCrU3bSB9F@B3U4~mmvsY!QX5FJw502Vd|EkTg8XWxH?~TXjum$`jy|Y# zAOwfF*TiB*aPQ(A4_9Vbw_X(iAzmJts63x-=Waw|Rj*eYp4m6~#nW~z>w$Y)S{X4> z-r;K^^r)Z^?A5~?xIO*Ink0I)-gk6}F?vAKi%>RBi`=xxBF3PUh@+jRrF?jSG0-->a}~W{R1QjdCCdWAaD>5g(#!RZHceDhPTv4 z+8a$DURl-V$yFCzkP5lgNMnN1tK5}Y?Alxi zl{lY53&p}3*GKepiZ5E25n~=M$wRj*jsD<<&^f%6!6M2fn6oCp>`n_>UsgR!md}IK zFxulC!Vr2;&-|fVD%RI!3fB0gul6v}r-z(FAC_oy$^dS4enA_sQi!U|F7f622njoO z*rVs-AUKOWrdK9{gSyx42}DjY>$=z2rCE`O&LQj}11U4b7-+p_U_Y}!nIAyRVd@R7 z#{Nq|zFsEf%Z2((qF7bHmGFs0@S;SzMGFy$j{91c{4iE|x@kwEET z8_W85Dz2^F*UNQf!L1qT-nuiKG0sCFLg zJU2Aeie$6H#Qf6SQ*-TP@dNte%KIqGxKFmGY}|(n=oTC!2iL9%*LCjhqr0Wp{&iW1 zf)o#@98Md%36v%ZnjQ)d$q+;s9Ca;8J^?&tTnDoDtRTmXjOj6b%*rjnj-wmR zciLY%-!M!VwCj_5^ui1vZ*p_Cx05Nr(np;P7yTcyJ2|L{(@_%9la`0f|va_+d1$Q7t2ck(UaQpVwqf z)>Eo3lDwb1VPc=KtY-^zf4P;oY62#Y%E{J@bHraoON?;fH#R$1Jqz-%xTTK?Ra$pA zKCN_b_2IkM1Bw*j=>YA@r{3k$xh$vFNTGUFc_HsJ6EA1J?7G3VOC-CUk4Mt6@l>X{ zg4${`9ffYwmYTV4?CRb~aAO%i1w3o}@us}-QF+#bIaxPGe(;UQ1N%%>gU`Z`RD>wG z6LFs82_OhsKwdlintbSAFXIDAn`p9vzgg&yo1rJTS{ZNS;Uo;f#?(Vv<5}rPYh^2h z*)JIqNT?T{1Wzn0PWkY`=j)PO(V0YLJDEHL2m%Z6Pa|M-5L77CzOptwCx%~s+IIp4 zq~g~&wF+z{ACL0b-=5bmQ~)E1EUn{l8-)fT$O2!o*ERberTytCFlis22t}36i@k*~ z`Dpq1rXX__IH&f$MlCp^#HW6 zb51S{D)%#bev$ykU<1AFG+TEOHOiy)ZO^D&{wxORaQ(oozIBtJ@s9K*Zj@5{*~0PL zxkHqzp+URegxER=nVzYCT;o|aE3f01=;$DP_W1Bc4Vd)52m(m!{ zIC-g!S4UQ3J!HMrZeMVmPv8t%HFAPiK++t<;^CrstGz~-R++=p)racX+wesPKcXdDEd2+lcW})2H_|vA-w;;FxxI`pYL51*$Fd;`y zP@zYCU`gfX^`^4zd4$t5zQ6^{SD+9b5TF@IdGFlCFisNF_VqKmX^kc&cMz(L-+?wZ z+}Qu466}=Fy0_=}M!WqL`Va0(XbhY7bbc^?i6A5hj+O(8=yyH@IGZ1I_s7jueGz(A6<9D8A4DXY#601BHnwGh>lE|V5Nk&qI zQ48ZzpdtJ(Dz?09piKEjZ+6K5ug0x%LodYC0{xtu&S|Jvj~UgP<^hs5$tl$r#Ur& zQCN|i7;Z(jtfQ7*A>a1GQy+<4Xq^%rNqJ5Ljng&lu7noro8=RBcZhQs-DpMmL%Kx> zzmFfOp+aAZTk5;TDi$zJ%Y~62i zk{~wR?d$AbQmGA^`kvtT?V947w0syU!!M=i1yS}~^xGVEv`5rxv2vVwn_|YOcbzvt zw=qm{Zz{lG8%d|xB9sX39l`H#2p>CpV29B%?;&0!YFmK? z__dN_6yf{FObM}(I;UrCh%sB_9UX2*Gdc@nEy6B-Vh|{}4lHF0j zy|n5tZ||Z|OFgYE4u3pu3_;V-zE@wKG^3*rI9q0fl9z_RA}br(w2*N5 zkq$3;&4b?3MR#+HR1Ve+VqIHuZiK-%!D0HZZQu6bNup54^(uQv;=@J+nTRYWYRXJY z>e%)3`I*5GVayGa=pPkL61BW|0~an?*lX{5D4eG3aZrt}4{`+avx G^8Wzts7%EG literal 0 HcmV?d00001 diff --git a/boot_source/code_app/service/CanStack/canBus_hongri/CanConfig_C301.h b/boot_source/code_app/service/CanStack/canBus_hongri/CanConfig_C301.h new file mode 100644 index 0000000000000000000000000000000000000000..0a417b5993bdcbdec55c25f5b71eb72d3766cd83 GIT binary patch literal 12288 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 F`42+RbejMG literal 0 HcmV?d00001 diff --git a/boot_source/code_app/service/CanStack/canBus_hongri/CanCtrl_C301.c b/boot_source/code_app/service/CanStack/canBus_hongri/CanCtrl_C301.c new file mode 100644 index 0000000000000000000000000000000000000000..1391f3edc31697919b3f00c8d5ecb87a7b218d00 GIT binary patch literal 12288 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 F{{VA|H30ws literal 0 HcmV?d00001 diff --git a/boot_source/code_app/service/CanStack/canBus_hongri/CanCtrl_C301.h b/boot_source/code_app/service/CanStack/canBus_hongri/CanCtrl_C301.h new file mode 100644 index 0000000000000000000000000000000000000000..de350458b94ffb2c51dcb3cdb749e162431e97a2 GIT binary patch literal 8192 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 SH@`1`%a#`kempg=JN^eA!fqx2 literal 0 HcmV?d00001 diff --git a/boot_source/code_app/service/CanStack/canBus_hongri/Diag_Appl_C301.c b/boot_source/code_app/service/CanStack/canBus_hongri/Diag_Appl_C301.c new file mode 100644 index 0000000000000000000000000000000000000000..5cca40f5ad10a1413c1c55480994faa78a0cab61 GIT binary patch literal 81920 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 literal 0 HcmV?d00001 diff --git a/boot_source/code_app/service/CanStack/canBus_hongri/Diag_Appl_C301.h b/boot_source/code_app/service/CanStack/canBus_hongri/Diag_Appl_C301.h new file mode 100644 index 0000000000000000000000000000000000000000..42199ae8d7cd9ae38b2c0d1157863f0b17382c2d GIT binary patch literal 20480 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 F{y%TURI>m8 literal 0 HcmV?d00001 diff --git a/boot_source/code_app/service/CanStack/canBus_hongri/Service_Canstack_CanBus_hongri_All.h b/boot_source/code_app/service/CanStack/canBus_hongri/Service_Canstack_CanBus_hongri_All.h new file mode 100644 index 0000000000000000000000000000000000000000..fae51c2ac89ac4f661daaaad6a1192c8c076d5fb GIT binary patch literal 8192 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 X^@&{q|4&bg?vo*M)F`U=>dXHD3A%3p literal 0 HcmV?d00001 diff --git a/boot_source/code_app/service/CanStack/canBus_hongri/UDS_SA_C301.c b/boot_source/code_app/service/CanStack/canBus_hongri/UDS_SA_C301.c new file mode 100644 index 0000000000000000000000000000000000000000..2ea5ff0c76400eb9d3aab2d25110ef963d5cc59d GIT binary patch literal 20480 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 literal 0 HcmV?d00001 diff --git a/boot_source/code_app/service/CanStack/canBus_hongri/UDS_SA_C301.h b/boot_source/code_app/service/CanStack/canBus_hongri/UDS_SA_C301.h new file mode 100644 index 0000000000000000000000000000000000000000..59f4ae143aa857d3ecbb0fe80e051dacb99ed4fc GIT binary patch literal 8192 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 UGTC76TOqoV{Imoag9JVP2Wxv)>i_@% literal 0 HcmV?d00001 diff --git a/boot_source/code_app/startup/inc/stm32f10x.h b/boot_source/code_app/startup/inc/stm32f10x.h new file mode 100644 index 0000000000000000000000000000000000000000..a33e14f39363d0e39c9d5a5fad5d65eec35788c1 GIT binary patch literal 638976 zcmeF&Lz6IE4<_KYZQHhO+qP}nwr$(CZQK2{?fGUk^CRA~%I4gax>l)5g;YgZgjT}T z(8SbN)Wav4MVpQ(XqX0uTTMAOPV1JplkffDE|X`G4&I0Qjm30G=vj zXJS~}b&bQ3+I~ePZ@vtkZju?ogv_5u=~|x}Tl(_@F<@{nLokQx@ITR11HuBB7RXoQ zsvr^o9^VnQxUg5&Mf=CHQf1gMbS;eO83_^2-*o?9-e-=%|MG+g_GK^9+hjGi4vZ&b z!0=v%(*JK>Hr0SGsImp_=eTNo>o7Oi|Naqc;Y;`x#k~E$j{mFv6ZlWyKY{-Q{uB65 z;6H)?1pX8FPvAd+{{;RM_)h>sUBP(A@mdf}HOzt@oMpQ=i#zveP<+aeJzC;bisRR3 zVBfsmI`ExG^LO^aHx)v`E&o%+$E)~_3H^b^q10VMx(Owu=V-S+3{~MVoceLyia_K3 zTvY{Q_tP;!LP>$VdpaW&Pmg7fpI2vtnFGPxwd)3t8O|sVibo^m6|p3sAz-NK>oUTW zdwLo*$thB{48<^3dg5Wu=iyJ~vRJ)Ps_FJTN>(9L?hC8{K+$(MO!9pcKoJYfd^u7> zNr2||t&RZywF>=xJK-j%)#iTqHs%RHr4D5X!Kdrc%HCfQ=ABiZI>A9 z@22%TM;Z<%E#yv=+HwL$-C~?1^k)}5DAu*5C;?j*CAe7yeLXkcOTcmw0Rtm>a#?eB zY7eth1-Mx#p8_pog#~uHrwfQli6mGawl>fijUKbpsW5`T+L!Ll8_vAYW6-McVsg>d zY~S?ykYNT}uE!vtdl0$^J>1tP{3SzwhOuT|sgKm#uID7eZDOj*+2h3i^YeF!qo#4) z5p9!Bh9UD5a9D{6;Z?Eof~^%RZ+Go{ja+cooSl21LP}n;1@1Ov!7$r5iVO|5$CpXr zxg!n6@p*%k9>YYU-F3l6lt?HD@K8vhh+{ZxUNG29Yh_95oP27uscOfpj(ff6iPGRV zb=870B|B89QgWTM`Dr#}H2oDY5cD4yN#td%5>!%=#febgu&6WfyYN`%3g@~xnnd%Z zFyZ+do^$|P6I)uVq;F-wQlnGj2}^TgPXDzeu*_a_nj!F}rB?*Ht%qKo%V&IOtvN(l zmH@*Lc*X$7AjK$ierd!CNdA%apbmV^ad{tKBr_8xAFS;+HP9)CoE;J!B8V@v7^4D&Lie$&R78OakTm#Y}WE= zzXdm41iQN)pfrath+K4;@gbE64mx?X1>aS{9!Bi*jr-&5tnXab_>~IZ%K%OIBX4qo zdWZns2ln6Q9UPO!5727%fN9cf7;9QyBE_p~&|vp))2<4Po{V~4OT+MDa{1TuLG4uE zdF6cEksIS2YGy_o)Fd!GrRwC9G~T>S;5t1@sd=I|PE*a@emPJ{@4)H-Rqtm)pxHYc zR2TXl#M;&zs(eEpQLsWl2wA0W#%H71H}6S%>JYQ_oq#O1{n2qnTx6I7Vxf0IYWAoV*n(8%uJ&w9<6<| z-T;NO-_RFw)Pqq3`#(n*r0%gwSZq<(KCaIRgWxH@NudFNuZos$ptb=uJj5iJ$$BlM znp}%=JSfY;_qJlFx!5qYko2^6b99^{?F!a^s!Rl5H>R>|8)*US1X&_7a=VAQCsxi%htqIe~(<~$kgK#+IQ z2L83wbd2SVn~G2j;jYDPqLlLdU;@D-rMMoCsbqId9G=xNOMEO&8TWm8;nHi=i4WJ~ z6;vcalz$H$Ga!~QfQU+UjY?kYB;oK^Mq2T4f*AO)_7_bPdLl*HaQ_3)5|+ji#b@weOC1D<^HB}nPlI1@wb3O9H+XU02&^@>tXItQC5Trk4p2!$sfCc z1?H|4p54wj1BUDwFM_0zs+NF(XZ^I&7b!5{WA*zpIUywK=Nz2Y$<`ZOlEy>@r$~h- zS`6x!KKv33j~U!j%-Mw?kc?~Z8FSymWCH&K&3eflSwep(`u zn{rk>v+X{_(KR6X<5o%7X{^-*l`ts(!qnlIdZ=bSFQz*zc1&B+X&)Bs{8?5vQM##q zN~ic;tz(!3-5KV;7>k%x+KyBJbFJ!C-V3o#icqx25Czl()&hb;e^QsdORKGVVGwnKyo44nXmY{S1( zCKl4nzEEq<^5tgE@5dk*Ve`pD+M<z<%c+;t^1cWgtcmfr=8Fn0{y)Z#65lj}2i)hB%@ZFT0f_6PR|68;s9z0j)QMPltd zcJ~3NJuImQ3Cw3A8;BVdCNd*MHjEk6pZt+xBh9)>=mX_%Y;B^cPdrZxz!p32RzTIX zsVO9xby8-XgW5;++t~e?^vSGmY${(7+bS|c^y6tas`da=eO;^x?+y%}R%FU8&9s}Z zx>~`7KZxv}RFJ<^)3U0be+kB#?w1FwIr0l|S*Y&ZqfYnIp1eU2*+s)oRFvsM$~R{XLOFl?si)i|PzSX)SI4`C8( zSR+`Kr^Pk;XMnWX;;lpV!!OjyFV$xgL0eqxx5G}|)i6|v9`bsCPH-yro(6hdf=zOO zg~JNmzvT3ow(3V3TRx2>q^W|P0Tr&!p0FVbbSk(++@2}i+Bj;0$5ZU{%Px-?JfX9B z9ba|tL#5xCaLrK53)pPJHMekSOnky580=kh|2ZD!GVY_1)0kbc)A;QO4tkB_444O1 zB>^vq}cUg2I+7Fjq@UOy9oPf&_C8^<}M^Hh2MvV{sqcOc&TBh zrjD()JqXbDuVIPq=T<+w;)4~yk!<0|nJETGb%4AD+6VP%=!l+NgXc^5EL5SOG+y_> zf5-yPf~V%pz_@i?1FDJQ0*3}d?9i4qV>FxG_GBG1TuF3niYH&gpQA2el|FKP?QnDwY(72b`QFI9z7xTV87 zOiN%K{UPLUR0GJis^c)ov;$8=(iiXJXsGf!-6b+vjPDe_G3(JjpQz4mJCx!!OEo)J ztK7BU^ioH|Ough7cviWYco1%>sNM!zd6O;@Mf>|hC(m}ft{WdmGmv4yC(7SaC{rqJ z;JVKfmbqS?b~?&6nF)phzLSb~Jci4VfO+S#CQWskuXbH8ELCAuH+u!rUIc&(Al!!c zYw|In&g8XKw7MWu6EFh~K8MCrbO{Cd1qM(T-hWXy%?UHpS@PcULmBj}*nyCr;-Igs zW~5J4q`wCew`_ro-3z_NhEM*%mYppzKxBTt_dt>OJSCE z+R#;-5FU=+^6aAo6Q9u~QWD3<=ZYqKykR|se~ERoMAGVw?biH?f7Hhb&z`=&ehdR& z%p88ix6)eH#w8oX$w8O6XiQ$kW!$m|}xMGcrsy&=HVtwS>!- z@n&(@%=YGlmy5cSGLAN%tR{aBbETEfb68g7)1vz#VNCJ!5{p+qzD<1@X4@GSwt8{r z(0%Ge`Qsil-3ZBty!vt$zw=0_bL3TsltgtZT2qGw2t^ws4P+Mb831B22dfCoN>PX0 zA|(8z^=AFZczS|(zNBk$1un8$F^vy+lmE)ZZHb7%qVpQ-HYG1pJ=iR@Csur+Z*o#@ zqmcBnmnyqx$G|d$w|v^(Ug|jh+29&JgiGM?bKLvcO z-c?pvv<07a>H{NAG?(p$g4`(eB`uWC;w-^%2)!eSGnZ<%v(YG%O-&-WOTwN+4x3D+LZFC3~>NVAtm-A-5s4ghpX+wf6> zjagH3O;M09ZOgQwtlEQ=2iKRRj=)cdf9-XUI3BKX4~5i%|{1UdB2YdA;?l2?~{*!8CjIl(OPJ)D9*L+BjX zy~Me@?bS2g3lm!zcp^-vVf{w>lTKHxV=3_ZikIFQEKr>tX0uZ)1FiZ-KknCLOp%v; zbirc!`#N8Fd6CI{)!3=!IX>BlzR;CXM;LI0y{2wpLQbUPElY|fESZ#rXmv17;qph9 z!GJLFYy)8qshc`!)4H`6s*MS+cbdU{rR^;#4d=`F)kG>-^(h(B`Dr2&&p!f>INaNW zt`NSI$KhYxv?kQht+SD`$GN!6L7YT78ud7T`4dS|Gh&i8mKB*lBBX%9{0_MRmcJ}K zpQIHjD3!z-`-8JVB=q}s58&&JCl^%S^wcAghOv!R9LpEP)y(77BLvH}eyBj;IJ!3S zB_$~qgF;%1DNRN+oevPeKkzF;QfrMpqYvU@@gTzh8ZX;U+gk>&t+CMV5Cq%-2|u(m56ZYL5ASz{xs)uNKhfwe_R5Bjf{qB4q<%x#JK3_5 zXmwFTxPkG@SYl$~jN}$5UwOGl2Yz~m zG@Tr}7R)ym(HrIu9>PohA*M(Q-I+)n@U-klo)jV@iXI_xm^GW&M-J(EA)}H!mcGdF z((<+(NGK1T`l-`9#`Fc&m%iz6t5wc};=$@n`Ug{ESeRa8Oi5#D-dT4XhkrKo9gvMC zcNF=iDmR6yA5R^#Lq<+LU#`u)gSSS-Lzr;XZX06RRv?moLFi#vBUx zmPPUD8>|4vFo*OcUDbT_8%IGIAwofgDa<9}f@D;Cts`;#dwTw*SUIeCkFMXC#%;xG zQVwnL9yt>-TG83;e2Q=Klzm4AXI)#UV>}0Z4HTQhZ7tHRwK>^+b<3*Bji~r>@6^OY zJA^QbDM22c#1%^n5c_>6B-i<|lCeqm)mH@WpGaHy)Ln1#qqcgM^8Jjom)bv*Xu%hq z=LXH_i&F7#jsU!;)SIa_O7de{2)5|ireFBexOEp}Psu}FI3+Y9!TKK>j{44)LO#D3 zU7&|Xbxw&-Fld_W#yG?wzzJ=0O?CC!50N25nuK>`3{V6!FLp1%e(#LwiBI&*Dr%Kb zXbmNw8J4Bz5LW(#0USaNEUw_Z0J2ieKyS6+K?Lea5}HRc#UAP}r%1h&i7f${;ZyU; z?{A2f;n9u{B?pOTt~s2aVsL8wcFRQ`F-XX0KVAbNeX7C75!p${in z`6ZFedEk99Y_gyW76;{wIT(<252}e&1Nc9@&7Ud7B9hq1HlgtL!SbhF|ZIS231bu}&r9d;=fYG+vM*<)raC)!#sc1cK4s)u! zlE=QV=chz5!c}#mtuoM1QV~HgVD>$Zp2Flg{CU>lbXT9o92&b8PJqb@6b8qvEE&lfm4Ve;N|GBI-BD-$jpq;yWg`(yTW#+q6_Aknh`wa20O zeO@zZjK?E9`@V03@xLd$$hw$g0HHL0T8-=n;%USZC7>ODK=_5leD97LKJK=m(8?Gy zFG9RpVh4~>>7(KWmfqjEBJZOxz-e#tcIfL%7C-Us8B zLc$#HRkVp=-5ZB1mOLJK~-w@aLG=7v0tc}J_d0%L~Tb+1mAl!qx z<8fuidP3?Vy+gW?CHAguCE3t1;CT>Gdbzt)v`K=T+Y`G3POUxDHYfX>RSlwE6=k~( zvJL9w%Yd0{Ezj{7$nt0xwIc1bA>YMKrE~qEZd@sd26j{B+$pkQUs~j4_J$Cb#rZdqV18gtfZrw*HCd3VF zPv?%u$-MqGVgjWbx;~ob#s2SBX=xmCI!W|E%xG#+4xZNr_l`UL@%-tPe#D&!vLeq; z|GDXI4x}TOaQz&B(RT9T2R_r%39dYkAIp7K4<Ser&~?ZtpH1^AKD!ZV{tTDJF6)z;+&{a(gSaRc2q>RA-!~~K(t!>T zUx8D9fr39pFajW%8o)NtpU}`UAhX!XJUlf}j2lNjQe;ep2$H0JZh$&*>xX35wuAw9 z(UdK)8Z6Z;=$Ak5Qo?Mjyg(Mb3^r5DlV_a!8mH-eA_*{+4CuQ@&*t7aqa#9xPNjFl zSc}=bf33nM!0|bwTn9cQ^2{m^0R$LX+0QZMXT`gW=q7r^J59Tr=RrJj1h1IR^ooPt zw)rgpxoM##F45@K>>G6FnO5bdNO+4b;~N!3X3{N~qS)3IQQrhZh}aRPpFt?f}JjyQAN#8n22- z*u{NC$)yufJl~G(wqm+tj4T|`nP*d&LW?rsqr=FBmIFYHGJW^(wUvQC>XbWOZn|^> zwQTI7bhev_whtjuUAF8-nN=x^c&4eJJ1r2eQ%Z7}B=%|)&E9;-Ct&r=hLN6OFgO4V zb{TK0>NC{o9sDiACiTUhUJS(@;fn@5_H-^$lzcK^!{1UPq4;KI`*+><_jEx?HZbeL zkH19eDHK5A`b0@jvzpSE6Ug3QEf+owlIUV6QdNuDTjicTdi2sfd){o+xTv{?zNb(y zMYe7?1CxAZJ-B1|=qGnPpm92X8jYLct((R3!OIv$RX_SovvOEvocb)BC{cCiVyB0H zZZ%p7l+7>-I*v6v>g28XPrc@>f@(+A#>sT_nu6QC2M}4OT0#^DM{k-N4HCgefdtdq zGSCK#?Q3D)TQRX#eqCU}*n+tuZ=Fd7t4cgkGjPU9P?eo zjqgn*d<3TnGE$0n5B?ga+i{Ubkl2yIx?6s_)7>O0{EZ)pXE9oP>?0N=PR(a=H5NL9 zlYl?EYSu{u2d=t&gMNX;`h&lXLME#`ze}( z+lI(T;#{$B%RKc0%yA2yOqh~~N(jUl&bkoUo83D{Sc=tcD7h5R04tbV`a=`#2}RLT z({dDdu(O>bs?%aam<_hOdg%P-b{Av}PJF=L?jPogb7u;KdWDgaRJ$PvRWmNMSLQDA zLu{#_{t=ap5R;uUttx;Nt1x->Tlz|iB0yCQBrfT?w~$VJNIJTN3`Fx#ogLsfs{c_J4`W9c@*@PCNv)gL+bk<%kWp+yexNY?X<1P zD7qr)7ia>tnNVk&6;84(pHeQ=8g@dy$}961&AX*7RHmTr!2mK4OTWXNCq))-12!y6 zXu+{A24Y56KuJd3BZ|_ZhB{OvkNHB;%b9d4kk(xqIYa4m@)O#M7NicXFchiga8jqz`kA;7C%>n6?aVlM+Il;w0 z=_~Y2X+exGFWyD2AeYCTk!l64t&9J4C#gzEo~XI7`2(qBoW0ZJQLlY z;$w5>JRrF|??tRY#KOQpf~n`{^}ock;{-^{iNV>KX0U#Hs8GW}l*rA9rRLxiQ2G<* zrh58E%e1PSJ2vyUh5ELCb>CI-(KM#YByOea+zHS;{aeSSR>$Ng1n|sA> zqylp`G=a$8P78Z;Djmn@mL4`+?yG;M+C|Mu=%>AfWTxX?=mzqKH0yWfCk7p96#o8# zLw=NU2 z5J1hEmAdlCk{0xeq%M$3q5foCDEKWOC}wctL}EhaYLL=9T@dr55Gcn#Ime}ne?0Ye-#fe4d7@l#K;H|f$sOy(yZq& zE?*YO@lmYGXNn)_bhzd~uo##7v?`JBjp*LV8kJ~M@io`wbidXwe6TNN

    MmYc%Xh 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 z%0D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�iYhJ!s9Riz(B!ECGqvHLIQDzZH!Mzyu@f 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%0D{$n?hq_n(+00rJ7tLMLOY^F=)$4Qp9dk^gX9w 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

    Ky2!7Mx3(2`Kq04f$UWG5oaIrMyUs?s-i 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ò%*IQbC4_Yx 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%0D%YjB2S-QeDUAZOukT4SvpCReDG^628p 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%0DrqWDXcfM6{0Fg0P;OVNxav%Yt3A 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%0DsM5f;Fe_#@ zm|}LWFea+bM$rXxjWA2wp~?$KgK&d30j!anbt~~1gy4I3JF7A*S`-^OI;Gpm0uM5p z1utk}$Tx~#W+G9~;9+xhyi4Fd%l6Y+*)QrCgm4ogswfQgrr_?&_#B8s{NVJtpSawV z`&)U?429LT*$z9)-deD2n!I4Rp@{(+4wJ`1BcpG6KxC__{j;s^Y(&4lXb4-Kbq&c? z@zJmQscX$v0gc|&caly@rVt1EYgqoO&CO(MZN_UZbA(TC#eRSNs9CpVO0y{4Sd!)F zG!NwJu;T_N3j(d#)Ad!bGPPVucD?VIGFXHi*W#4~{wRqNHYL{5!9=+OSs?Cl!cj=l zfP{23EOWneAz<$p`+U~j3!Npks4%z?KU>10 z<0PJx*%&0wJ3%>T)VuHHJt(*HK|XRMGr!lO8)2e;Tn3B3`0z_=Mq*|``d7Ppv*$Kq zXR}qwXQgJ}9gj#DU)(z>U#R`kLP=0C*9%GF*{T8TuTYwADU(I}%RQ|F^%^g1o!KWa zisKe^rrD)cxX-dqv|=N_;*WAVtA=3VMDIspD|L!6?>05}{ZCN1l1&`;;5+E>2sgV& z)BVuL5m|ZiL7M6fl%|~bAOJnPJhXi_0jY`3O{+LMkmiBya#l&D$rCcFpQxfx_VhD* zp)y$cS?fmSBGYHfXefkU?Xi)~he{M8MO()1)md$DQwbgNN|8>Lz49Uel=Zso1$Y9A zaYA-TSs(hihO)GnpTbtEh`W!g1spNFGr((>D@j7{LZ--TlY3SbY8Aw z|GG(`5LZ^VF@h6ai8fwv9eAONd}9|_TjY!0UPrxjPp2HO=u`8_^&+lfzIc%&JoyhQ zjL*0h!<0ra=i;vNzM^6gnE?SR(E4A|k~{qX_+)G$sRnid4`OoDiA%%`E_V zwb$<>`ob4ZRKKhKs0=meIe~v^4I@|H$FB6ch&=MY^;obD@5psCJgh(D8z667~#Sa+avRV1z)*CiP!WvJEN85lm%x~0b0niH{ zOnRu4u#Bz>q7^j)H)+{~v5|ygbp>9HOP4Mwh4x>Lh>@b9`#FR@#Mb)pCDmP zAw#(~^RRwtcj~hV01I|7t zk|to7bC=}7?Wnc)-4;=N38K=^ zM*oJr>6GklTc?A=n^Tl(?m1e7Yx2*?VDL0|W;@)VS0gO;hFYIxazFRC8{BcL8HSJ} zhd-)|aU8EHwd?$-5>A)M3pt1Iu`-EQA83|rwG<#eaE?%E4S(PWV_s3B+=QUfvnMCM zz;z){r}HQC`WA9^bZlFY)~%kvq-YF%{BNvhZOKQC4XiHtJE0|%5y$o^tKDjQ!sL5m zCS2V_qKl!E5MNo5N)Bct1A_VibmsW30?%}^G@2vC*70>0+vUTk!FnS5a zH~Dm|5eZDZ(4&>ZczLJ+W-}*q0hI{vsK32=<>Kt7s@?z3?{TrbxAOJ-^y0z9n@d-@Rm7vg`q##!aeZxB|YnIi+ZLI zZDhciTRg+Uc&a{J`9+UCFsn%s99SkK3?^j2imw z(OTjU6FGhogbD$30Cu1PCmIwIbvr^7*Mi)6MXg0zWLzOH7_|pJ{E7GZ*yl~VZ#W&j ztTi*@Gh+3W&(Q=K>@naKd~H4I^MnV4a+)CnF{-Yzo#5|JM$i{e+o5ddClEZ$lglOVB8OsQzM zqOGW&=hgw%DreA(pG%FAX0XPw+>UbRY{D9R0+g~H-)Ay|F?>%oWq2zDPw3b-P5mL7 z=vbb^QE*X&&Hy<;#=nd;(Oj%f`5*Jmh9z8$>{RZ`p#`ydYOMFTe1!=AKjzabH!8sG z>G+G#l695$nVFpszi^aQ{W=isNSt9n^U*PXKa7=yLU*|9r0~cxR0Ja5i|9MNP-3+Q zI~@g(?M{lhJn}sEU3ZCDFF-vW#k}L;sEPhD^)CmrvN7MeHSNt~@Kd9>KidcRfMMkH z+}!uQxagODky-_L;dFqB&PD|)J~dNK0&OL8)_Z^?%-U{ndA;k7NnwP>s+oOV-!VAZ z6_6}~h0p0DAfZA9mOPfyxd*Ma<{EjW0I7 zWh4}6do!3!R&ZS-(`Lq7MhbK>LMP{LaTXw5K@ut&T0j;B`nRIrz$&It5GViRi9&W* z!Bh>Dc4-(hFao|a#g=MfXvceY2|st@G(5RxCRsIJLj^Q}QrG4#Izp;6sOV}VlfU1@ ztsJEU)=}PM>9eZa?STlz+TkM=4&1{+h7r$KAxZCF{V9oN{4)GR)|s%;mDL(V3@#57 z1M98+9LJ6kaRV`n1ekC8F0uT3sYD)<4tKBFyW#k3(ETw z`g%X}C7sK(EJ8jjsRYZscdEV($EDO$Ji3PjUHapp7aSZAJS-M*NFRoLti%c=9$3G)>vA1k z+?Q3fHD*gZ^fZ|NhMHur!}d)(Q`Cv0psz7$NyPx#LY6c0z50jQgIb_xL+KIK(gv&udp3gLYcQSlxw zt5}KLaZ{l3!-0_lfg6G+w|7;w*ZlZi(_ruxaU%Nocd$|-aH6&zUhZazqA`DZ?eN`4 zGE0ckmjEI|bPJWgA%Z1BBxrrrVS!H@^5Cy)2s70ALMqQ$3k~O<%tSM{R)#!Z)S-)d zaH;+=3v5AoKA%OQjccZQum8qzBo^uLsf-j=DkZTv%xuW5ntxonc?_(3v%L=e5#=L^WOA#p+!|8rZIR_lqz z^9DS1JeT-j5i(l%X5n39&x9+J_NG!tD!2|RzS6t|N0Q4w4i?S4g&`k)N|M3hPOfts z7+;G6l8l%$8-f@V9(>-826#FZLz&!-2aT%55rNW1gO|)zrpGaVx}#d8@UjvB{Zq7+ zQuaR*fd-nxE>&0~z{#yp>MgqVcQ~^s7{!L{^>EU%P z=YpPt$C!k1@x|?|&&pGQYXz?fmIZ{Vh)yQSUKEOOS;(u(t0)yZbt!^cL2ja*z9cf)SwlL;6!w1ox=ZlVxsE zC#26qs3gLF?FO+{pLuRa0l+3J)l0%R-;;f}H_cNIn36=w_W^SO46u?zvA_@fLS~9* zuIJbdjAAx-N$F7A>zoL*eyL`Ur4~1egho0DAXu5Hd*DMBy_?BeF7U3*h}k$qB7S;l&RRWO8XK3? z$r>gFFYEO-|NXMQ?Snm>FE_cg7U&HP!VY3YPJI}xl-41OW83VHK&HRLf0XrWG@jf= zudKoVvj+-95?MTFp0$_LU@(c8y-oj|1V6>GwM&E7W5uwVa28ZJ1Nxd>JFJ26q(pFT z4p=aTxqnxAjMxQ4Ir+^28-UK;jPKVhhC)h{Kj!TkR53T^>)fx9$c7(*J4+l;$0ivf#az5i#fsdRP+4gxg6Y_P1J0}KLM%;6%rD5Ni}7miTG9dM!3k+q zkuJzcoO2D7#P-SInDe_`OI%jkI&!vcakDN$n0?A8UAAay?hbjpQ+R4(!dX^1qH1^R zi=4K6VnNccZc#n%KD9Be!5F`4P7;=2WvcU7x5Kfgx$Ap;MTHiio5x>c8{Q;Q>xk(8@piWKK%o5Ye z^W%jfxl#Tc5&rS}2kXJ9F!wJ%r5R`)nuU{5=k*X*_A7VgHAKHi%`pVc=Y0+k6c-UP zz-aW2YZ0F2_D)+r*_I`{xn{FJqi1m($q1}sB%GbJOpUzIV&OB5y^PZK=)j1r4Q+H5 z7zE;|c9Qwko+J)S$U5^l#@ry51g}(RKzB6Hq_8*ryJ9fdz(;5`ip;xfSJ<1>4Dh56!7)Q z2G(OVg9sLDoAg1@lm}#Ug`F93Oq=wfJbM$vQHCWBnl#Rz@w2QZ=!nH-jn`Q`H~K9g z&Ut-V@3;ye7X%shd1;P0fu*s`Gn91zPr{i@l>6 zju62~(xBL-ipZ*vGCfj0-%Mu(da#1Tpspn$u~?;Uk+5Ev4EF)!$sm;JSw?$v@fltV z+eXYwebwNk)WMo6Z}k*B_@UD4tCYCFyrWt&nek5=9>hp%1S=nAMod${1mh~7Koj+B z%Yqfao!e47l%#21r6X*WVz_d`#KPnp6ROb3awS-S9aT%mHIh|;k)ea*YP0jYa=5Q6 z@mSb{2}U0yI+MDt!tUH2W_;;rJs4Dr4g1voug|)iN5;q-R{84O1|qgVJ6rFQP%A2z zzJ@3J9lj@ld673#DqiDLr-g4?=P zOq|(AB>uF27V{AsGr0$LdJU zdhC~1I0)*HVa!eSJ{hj5o*Ra^|DG*VZyz3f5;H_D=GDS^5yh~IW~MjCL1QuNR7=y1 z#D`MJJA&x+CZFc$Y^sbr>6@?BXx#I#OXIYX@2dXL#S+dQI3g;F{+e>ild^3)HoDT% z#i0yW?lcsS4FUlhNIT%y?p#70{(r2xGBtw~@|+c!g7m!J% zMYmXfH$KyY*%?vG#b0-PSINB9>z8;vDphmDx)PWhp< zUE{4q2zYM`*kXAMrAlzQBfa1&?kis9%tkCqtAGjCt)LSK<1VYP8sxk@m@wl2Q8|TE zC1q&%qcBbhN69=^#$=1hmjajUFgD51JiWv*BT~e!iXx)z(1h-w(5`OELTMKYd!pYT zDvsaIeD&fxF`*ZD8TQUP{%ODgQOANf8%%FggXlw5tlnb0tXiUMgte}I16za{OsScB zbH3y{$9f^B*}+&_)M$tVoMjEC!&8VbKm%241Z=Q7GU}+Q>3dP@DaYfu?z`en14bU4o7OxQ_)CC8n9; zkH*HJqzp;5bH>r`XZ4$u)}7(*Qkw;42X`g(Dvo5t2(8VFTy*`xb}Yi_dcEAk;Z8a; zNMh)dL`O`A-!SU+{dS1%!x`|9UUQ;QW=AxYIkj7g%srjm+3n}A;EyNirWo3PELZ0k zHODsp9m#Y={lGl{wa>9Ui27NnN6y}QsPU0(T#FNPO`#rs!deRVpL{+U_-cjE_=3$t z$e#zxKWAYyPJ8V=xbe2M7Mz@nBQs$N*%?wiO1OnEgxf1QI{I!j-K!0{Y`1~AV8AQm zFbKj*vV8f(0?#Dv2^ApEdrs=8X%<`5|fO$uBlx~oO|<9Ip-=u zrf#E@g|GAGU~Zn3>r$xBaH*x7CQnDh)F?oy9h_i!MafpzQyW4ed*W(pQP2gzvJ-uG zU%VC_z#XmC_a-SiqYw++U*M*BsTRVK&=viJ-S7DPzh-I(Eid*=>WCl9gMm<2v~dSr zZU?_^9vSa>!ALKjOpvxcnIbdFB3Yhp_D+eEK`f^~rfC)&t^5lplQ{JzH_#Me;MT#Z zH~q*i4z>?j@Ho_p4kJ~d^Fh?T@NLp_V%iq`rG}0mK|%YkCeX5dG)o_;(JXc&2AwCk zs*oGx=yX@ekW$we2SDQMetWAL>`}fV88zbSGd31AV-AOxyS^h{dXOnZ&*I}Jz05+1 zS~^HCjdmKB2X(86fxPXW#cRFIYSZ8SQuiQN^@$Ih)G`7+ZUnXE@@$OGR{~qSSqB%h zvbZ-Lv4|EFywV%#itH(bx9FAw+~k(ig@#`Fs-5H@#!R>F95r6QrYFyJC$EiYTfg|a z#%`;VlS1fCBwnW#u$G+)gon^y_PTL(FHWO-qPxv~)m{o$gD{1vB1qD7sT$RLU2%hB zm=ep%=q+<8!X`mj{WoR;+_po;s=dYgu!T`YYSy~hd#@O??DLjY4WS*a~$t^~A`{PwCBda<`QTJBkJm#4~ zM;#bkmfL{bbe6okq?F=ms%|W$rN`0Wd!B-@T=f$f2J7nHNN*AVSr=@_WjX~5XFYWL z?9|MNv~1Do&s___CiE5~A|hjE z?v;6)X>zIm3ghF48C=6#5Z9Z)SR9Ai3(1w*sD4oTpSTa`1eAz^^tncn)nAIQBw(*q z^kmD}7YlF-R6Ab4$eHW{>7yHjs%DA-Uf$bCrmQ(%9uvE=xW*%6=HUU?hXkYb%qR zPz$_apxJAuXa?DayPWa8`i}^s{Ezt1He)@9NXzwNRRXo|LC#l-;oJ8RwWVVW1^Zv^ z{R5l!htc-n3lmS$d)``I%QgZ;Wkv*)C`NsAhPTvY?w12|N6>Oy8v@&`*|mpdlucW zrmg^ERi08KCyr znhSRmsBr)XYRFWaD0^hE>Wn)Nv&pA?WLwXBP!@~672S#KI?@2~`jWHCI2w)HGK$b) zp`Mff^w=@KQcqBwxHVT+MJ8QtaNZ}ve^NoM1@SQ=?7^{+G%9|BjQBk&F{%@a4OOK{_3ByC+Qmun* zI^L0y9X_$2cb9TTNnee{7eZ(}o$1Xysfh&{Ww2~PP!`9AA>gerR&8vPNTnkgS<4eE zHV1v;&y=lh?3CFvGITSm|*d841t6iF5GDWf>MspEGhz20*!|N31w$5S!T@01B|5mC_ln{1;k% z`j0F#z4MGy^Ec+*^;8AX#Q_=lhS}otI8?Pv%j}3o77;U*CYy9Ivsa9+|J?~m373pF zDPnF0#f97);>sO=Nsaj$DuBTp(u%vRMC&ZfK)Kfl!~R7+TX4JV*nv7$%PycKBV8UzvxJbaYA%nbgN1 z>&X|elA!lE;ZdN!7-(xiDLX)0)qzSnM#Dtdrk5Ej*uWwhrTwFJHXZX0(;&+<$f_ax zSHy}#zdyEJ9vV^2G8YEuU?dY~>|2JVGZvy1DaXKyYZ<+q2xoG{PiL7++|sPISl~Pe zJ?CTH*7B4bpI9|}Jy?ZU(wN22pL1X{%cx!OEZH1JXSG6Q>JXs6Zt~BX*qBw^mN5r< zlHC)EiQV(Mtq()ex3T{P>QG+kWEPADRYP+K7>rm}_4UTx93YSa&|tT;lxPTsOv72C zHPyhsk7qOW^beZ^gC(@S5M>z!8n#IL!FTws&&7mh??X15O6ajJ!(z0-qVQoZ4T|_O zUTIq@nUbbp>PwIJ`=!p^(8TJO!TlwX1=WUyUNY6tCYauJ~sNC>_1C%%yl$K{bI>t(*J29oamR=s7i9zHiDtmoL4@d8KvXkb`!5ECst~=0N+d$d6Bup$+c_w!gO)Eobz{gM zT?Du484HY%s+ACdBk{l|&=m1vGi3MdBFZhx*<7pHQz&||_I;c{V7jrQ5QWH1k5@l? zu~D$+KTmLrwx{@liF3rHsQYZyNlG-}&E3|#a3X|8o|QjTuW0Vl1n^7;PEuM8quR z&F3No1?a{^_tSdl8$E#sD%Vs-ET&8ToV6$grIUJO$i$x#1Uny>?#Rk!Ck_GP{wzl& zP3@WEJFfhzvyzr2Q_IxM{=(%pIHxxo!HM46rPOG~1pnzn7ZPQxQe}EqIn!Nu1f)m* zjrn<*Ka)yR5H}(X>H+e6QC(IeyPlTHq58%Y2by|3RvTcd;HyeO89pTUYV#R%x=Qzt z&^`7LAq_w>P|l_TLF1;vi?_W0ZqQ(9gZ$)pyAskkLa>3~7qTE_sN(r(-XFUm(-JQ+ zizH!)C6Mh#HOjcWka3=Vd+8w)+0HhPt1H_}9?=oY*!Q`eDKf`!rRKg()TF*GXuTz2 zp=Ml>L!+)9J;OE=hGgQfhz4yyNAM+4J$;qeIreJgGOC5hRidKo!eLjQV_*960ih70 z>85=z8Kh|$M>=2e%5Lc_i+2i}+Nvx)sg-KOo1o4V(=TOlD_!sJrThV(z(7dWr;VfGn3?^&=s* zO|}qTo6vmKbLa99DzvhVTb@OF4a<7sj_f{`6d49sJ(j^&@kFcLm~`C`%b(SAQu3ohXAIZ8!*|ncc6X7eA!g zTb7g2o1YW-6SlnY8;K45uBRGgl6@so&bg5AiGD~_!C5?{!$X{>=*3WJi0^ZqpnWyaYz^c5{z|>-Zn^7n%q}{f zUDDQEe55oRfMb_#whcsvXi4dKnc{1o^XFPru((<&L+OZ&dJ&QDjImb)+_hr z2=v~&=};O1Sd~bwQeNllgiiN=Km6xe6g9jP_Yb_6z2vR)ugNuNrj<8sw~SC57>wc; z3is@}hZY?vVn+jG^2*ibrDdx09RXvkD&UTpgVeJ|YzD}pH&1@)Bxz%AU-LL7486zc zjFZFw1f7;ll^8C}dP-_}cAmQ3(diS@{Z7vnmk8{P<}17f@FphMGmMXt+#{5Dl^5?s8K@tl)4jLng7Q zmcxs2vseNZg4T8-b^`LY0$9UJ=f?45-}s@=;j^I>A>J8kUeguIvCK(HiNtD?i9<4I z-#{WDvFE+e@+9KpNz!vbfcz`JC-WrL?;q{Zai2dpeY zB!8<|8dudwk!*=5`exvivg`){PC9vJZN#j!|+JSG$(3ywP3$(yl%BM4Y zGcQ-^^z}Us=T)Wr&UpxgAZs1xc@#j}_a9J0c%uZ+->RUl9b+j%IkNR6aG6KStKKWx zJmc}8e3)Qxqi~tBYJTBMB7VV z?U_YT`TvxFA7TK-G`TBQ@9`VWDmIF0USB7xC^5Nx-AEIGcRoQ;06TATvpeze5lSV@ zb=f#lY=SBPE4%!!(r6m__SngG?&JrblHO#4z1dhPGx=!-f!y!mVeIfcQa|YmL&iKe z8cId!WMQB=Pa_GP;o+F;H|WjEANamkrK=1`y>|fCKR7{C-#6iMTh8l@p7JRv8vV*E zwqjV>-Oogh^wO>Jz($1LjI}gSp`MR;he)-w^7SPx@E;S^ak<-|uh@ zs5Mei<%?QB4m?o;MC~&ernE_^UxkAXUSr-m$&^9aXhHFBz&{C?`L$Lb5E5d+=P`IA zemfp0@>`|K)Xla2;CKe+T^3BY4;?*jjNudlK4l z9N`H;A{g4Ys4hXsQY4*t1^Wc08dV_Wc6>|n7Oxou_qMyoEIUFMNxv{lc6O3Fc>Nd(Dj%C*mT9a1cm zz+QUnZ`IC8yGnp)yO%Q{l9DnfZ}Dw-(hK>3A;zUaabo* zQX;Xur#(orDPG{H`b*BS>1z#t!}KIb%4@ghmfFhER;dLgRvS`AyQ)!3s2y(*;kE~+ zB(9M@OHXZG>atfi-vSvR()F{R6IgeVWj*U}^B8dQuw#szJiD;af?~#&oR53?0yqk3 zak=N}tgVB5sBOK@fZpC{7b>-fiB$J9R2UGRut3H9?LC8$FHO#Qvr2VdLkXm!y)HI7 zXRUv0+mWCyWybk?%Iyw>^D%$%9`b{DQQ&SL{H0N6bLgv0qwk_z| zi`j8$Jai)De>_&I@>j5d)I9AIyJR*V$G0X$e@S>jryzxLtl zR8|$dpWdkWb>5Q3m&?Q}V-;wH%c8o6?h@~wYPYrrD@Op0D-tIU`vzyMK?Ony5Cqc?cFgyG*N?mL2numX~M4&h=}Tml1v4?s73q;)EXxuPb=hqdn>lk+M~wT-8U z_lAoo9RF8BBIAas$UxYuR(|A}q6 z@N9a8s5Tr@wVZZ^k(Q)nkt8?G0B%okfdX1HWcWI&wg<$ZB>vY4NvrLq02jBLrPT2o)vxxMX6Z5 znqkO5|6y1ST#WZ~QVwwhwFtudyWT%xR258LP*^kk1@!Q{U=lKPZ6S=}+o@-#8lHc~ zLuCDyqW5vPZqq&;_+Ih6=-WF^oF5^_3j~%hoPOK*-;*ljAFeYbQn2UchDj8|CR%$5 zY1_qZ^t|X|q<{t_fdea?mOT;a15Qph=9s?6bT`30tB&P%2R3CBGW-Ii`&ru;g#Dwy zA+%egrSR+xX|q-Dcs{?GiYB&ra+xNG&(KHZx-|rc?5bM{>t2@_W-cOUUIqY@c~!gf z`_evmCPpLvC0nN12C8dJ`-w_*x9XbKA7yD2ImnMy4b*(06XfTqAp}Wu>@m9!9cSeL zbFvJ9q?!DeWNRU4RP?bb;YvMX#6dnw^7!06bbO76Lrv!dJKiIGAIp z#;q~ZT=OOsK|C0?!=WZ+x~I2dbeINPF5nV8>IiU&9Zmwb)a@*LnIGd$;gxPwBS#`S z;XuP8aEC zx`{e-6d*J=pkkL{sHlP+#e1fbTv@-p{Rzs6^#53@emx;pTjIyikyv-(=c4G+cq27a zE2j@;u_J`8m*7hpo{a7&$J*0Sry+Oi-C^YBYW82HZ@ob3K06wS&6hIh)HEe&y6be$ z`$)$8h%f7`A;uJP4+?+o;RppsOR$DTdN)&#w@21l+$2O!5G>;&V$kfqnDTfSazHL+ zO9u*36vTn&NoH!B=T9XbOL^!sZt<37;CW>ztdkgGhNYqi4v8fEK8yhH26B_=k3Ver zs+B3fn8VaLZ~CQ|U8akOYL?j!8E$%#?U3ibJk9W)sUlh#P8yZoT-O%g7>2?Ua6}a0 zWB{M8Wvd!D-W=RlPXMU=$}bsGtv_a!S%&m_I!09{+M~ z-q&9&Q4Lk52y;|VYdn&ovLVxH4ybP<7uqlD#X^QnH#~XAG>-tGGVF|gF({El0+aW| z^^mOn6HyMSmad9VMoet(fwy>y#~GZW1PzL-&VZOvhe?z9uV(OBGn*nW$lUxsQIy>N zQH!Xo7kktT*ozGWTWc+TVo_9ylyza2dN=odGt)1!gGr*m(%D@J27Nyt_7$&eIULxa zd(pZFK+2Gt2y(+;&42M2+ICIM$Z<*ETM`Um@;Sh8XY7bI#p3n)lV|LpIcH#o&)553 zt5hOpElC}QLm29ESMo21;>jDR!b^HW4KUTFwE3MLA>7^Uwr>|J5ROW4Q#D7IWoy|_ z1bRX4vq^R7m0+4y_f!G>m!Rp2r*kgAz+HDk})bNJN<_PhYd#-m?q3Di$y@-rO#N;@{s zFa@}!BQ9winSlqT3oo_b zH5PL6q9aSj)_Ra1_L7VwJIpNIcUX9L%;^%__D8~k(IAr%x1Z$VBqVV)b7Dp#FwEhv zqU)Fc2hD8umxoLuB?$=-RZSDLL6%G-YY0||{iZtqSG*Yc?VLu&S!m^72L*MgvfvvI zYoF|gPbgR(!D!KR!S?Vqag$-$RkCWCFt>QexrNOL?L3dNC`^nM0LbH{D}cM#Aa2t6h{TPCjnzCD{-r>)QW00+T5K3NKqCrB!ra?%tmfBb?%XDTwzjNaQGO)5v9Whm9(fJ-`K zhS`$m*!1swEPi-eMox2lf zuR1yWB^ncgDASw|AaFq=i~7`*#y9WiZ{BrtY5WdVdHZz={k(Lh;{&M*xGuRSbE)b1 z4FaAR&0IJCQUpTG+A}p?QvIPQNdKpdQ}TDdagMA#o(F%_lSlMsoLh>esNky+tIQ;K z0`KvL|9l9nBdx3jvF0oEj1F6zKm5WpcvMJnNQ>1Du|HHrY#CtT7T7r)V7D7iiilb8 zf3z2VKVM3(&XPKQMwUESdb!-*Y|pi@$OydKq553ju&2c9Za}q>toUN_uhZ`&#2TTY2vPQB=xFTsCc1x-8W4_KLDEaHWlpi0iQUABz@d&+OQ& zZJ?QG<%Hx1|CTk#7smLxVY7UWN5yM!WJP^I9;#>>b-Jz*HeTb6w>TnfF%d)5wyN;-S`9Qb zWPE^RrYv3Xekh#9j~!a{le-dz*hcv9UUp0;(l`RnHVx}t-_IWe?#q!F>qY@yOSCn* z>|RYmT2zD`^@uSC_mwl| zu-ov2%;!=p26s7L=KEtSVeI49J3qa71~FDu;_Y;6+rFFbSlvOdDIZr0(vEslJ{6cH zk-dBNif}Y~c`WP<9M{LS7R(37%mlI+Yo&eC5l52T(i!Z1lpV8Ijp9hBX$!MP$WT$z zIV7~XMZh9Xugn8hkTZoCmxs5jdFT{LjYAq3mAj(zDJm4H^2BkNi%hiclgpXd*>Cfs zH+avUrBeG^`8B!W?$a~y!o<>2+FG|AMwE!(#CpkEto3H+IR^KO7km-yWh{1A@!NT` z=~W7FU#|w;<_{wB`Ju^@5K*{}lBuQ2whs3J6RNSy`}dqL+~@#SYp^%~g*qiiPZkV# z<*10ghN4TdamRRj|0@stl58*vBBT~*`shCxoQdZ!+%2esaWN0zjoacDE*C0FF#7KI z%D{4AUkPe@q%ct`S4Nu%Ezhe9BPJ2;0ed>Yt*fJUyFwyQP~5P%6-ZF7Z_nnrz6gfz=vIzwNR3v;VtYtmk7 z3S>gfmzOA*Ff1~w6AmMmwU{z zf^cdamK_>FU$5tR%9^r0XjjyzyK9V{N-2jdK>RZ&!ek%%P!j+coew_3Gd!NJWCn^YZz08PqmjF zroj%PP3hDlQfkxvt9Q9mIyq&8fl%#@xRzF(eyTEkVcg z^GHaNJ1;wQt>(a2mQCZrql8&x7hDk zevwBc&Hu-@+hBt!kWGWGyZo6S9$JwBMXm?ft)$V04(PyfxYS->G&U!I`t2NU#8x(g zN;yZZ6L@b%`&dh5KtjS})#4L~(2g9y>AYiyV%vChZ&TwrWH&5&YX*U*S;`zPv?k9+ zFw#(OBB8hG+%)QrB^M@Tg2|D=k7AXrqQOR*42ZhE8`vB6Ddt>y<(LO%K5ywP-ZbLl z=B$@&WG7G0ZCE#AKWXz{GKML9`@Qo_-;_z`Ee7#2pJZL4mCpD@bqu$}6*95&!GKDp zx>%drG&KP={*tLM8;VZ|e`t}8_+1^uNh<2A-D;$^46SBsMi;@6~-1nN|&^Xc%@T%s{ zE8~T<4v8`N5RWOh#n7@hf0hI|Xfw9FP?~20l8li*Ai#6e6bkWo0t!e%4_f%YHAw8p zrZdD28NmAEXy{8bt-p$ok~`hx&5&s$y0;g;8{o+Mym6zKy?`}I^@Av%VW$;Ft7IjnzJ!m ze1eG}@&9d(&dJkuHcvs+q!85OdZNvB$kUo=K^4d z&=PSlpUvUwf4zwYMcc)K%KxgM86_9P+>!>5#gKYiu%pT_?LdG@|J3Q=cf|Pa_|v<> z^o?yy%?LWny%dEql*<-i83Z$r%WRY7e{125RQZ;Kb;l6~OTsuJOr$gD0L+@QjCt;( zz*zhGFGkl_(9AS2+*nT~8hiiHjZ8Cwf3(N?+Q7vKfYbqYV(@HhjJdMKbkzgP_v1=+ z9@C1;-*>Co;({D`23||!ijngPw4!lpA6ub}DDy*sr)hUi`>7zsEtIj6=!5-Lhy9yP zfqeHsp)tMOE*wfB+BGlOPZSiH`Hu@0nRaZ0@xd@Jf&{Md{&O zrSM{{Y!vuFx;B)FjDJg`&pSUCC$1+X@O(JD`$?$4rf)-qLt^k*p0^YY{0GS71l~cs zO?g^4fz}hf#!mLZ%0LVl*T=t%>_wb!Tp_XqKbeZ%>x`xx<$tDpzsuXEbVG%*p@TB; zQu0O(ND(%Vd#V9jz4@UDwKqu8x}7-Hbj)RD0&S{TWC+%ax5@$4f#;{Q5qbxcHv}zq zw_yC~XSPr*i7WmgTb5G372i5Y5!iTA_M!KO#d8l6>fIHb)S~uKMYruKA3YuO)MB5~@D+y@2nS|+M8LF^@&i4^N+Oz(RW z{5Q9H*Cp696Gak;0+xL;VS4mC6&Ix0X_j+dP8*DmS$~nqx|@y?L$9K~w2ZcpHE>u& z>v$sGHuD@8r3RVP_porKmvc0~U#LcdchHrn~@2E3WET#a&)Za+%Tm(6~2CVSo{2-{zXe z*z0|3(LmrXastIij5dY|kIX9hXm~X4U&`@rJAwm94~U*i?UB@Y59?n%n^iN><=Xt? z{oC8e7GBC5jcO?)qGSNGaAcnh%C`&7p`Ej;=({PY!)CCi_8O^|UW> zLipe+==9??lt`@*24>L%Z9?vYYWq)f#gXAO%50WGI{x#__1ry_14(h2lwx3=0NMQw&erg``maKuF1!wSM}n6pmn~5a|+RKiUAJK-e zgjtlbUYG?2X@H2XCp^pKq+Sb8MZRV)aQx z8JiYNp}zs{)6Hluhwp@KO0R0j5~33VT=gLu9NC?;wOpC3vA(xLLMv?1toMHk&1=PC z127o}uQW&uSMK>%IbQ*LI=f77=d!-^tUOxx9ec;+Fr;~^+VT#uebQ=6CxP$s5ly#{ zrAXP$kEd>J(kW_EaT@wTUvwMayr(!?V3gBh{ads8q|Q6U(9j9eVJXCgp1%DuSTSpo z1OwlS9`!}W_;#|eNo|D_ERh*4PI-)BmQB3cc{|5y;Oe#y3V;`yCt{kHVr}j0o=)+> z7F>tTEg>5w3ysPOdo}WINfC|93~EJc>ca^Pwn_~7H$j{iTO^G(lzINRlA9m35WIEp zWnrG~!Riv!N3nQy;LOD#s%WFCDp4YzF&dpMFWVpn!?(Ar*03#WC8Q*isjt}99VJO( zYj{IC{eRkLO9YCpBpco%oSy$q$KzxhoiB18VCcHh?jXqI=*}O9m~cW??Ca~nzgyL* z+%ovcofu$2$y+TU*Dh0ORCWlcUYQTCx_d64BmX`d$BxPvI@v8qfY@3#!c!h6yp~>h z?@?Yyv0}HvsV%3Baar8Gup(;fikvcEAr$rxh-IfXaSgjat^evN8~RY`+o0^!ct1}v z-kY~;a`2^Jwv{B~a7_M0JM84%Po8?fq*#~^&!?PuOj9B6sq=6PzhjUQdaPI%-T^N5 zRvI}qZFfKo;|K73sWv&!COxx(T5-ji&kIkS1AnH8lhz-vIZI6H=y=Yxj zzSnF&`3Za6N5N4po5L5WDp8cw)(o45cY&7p{MVcoa&at*hP0MoB#6VJa#dQ{m%!PWBv#2Drdj;5^j<1A!gQG z;rPw`QWHz_x62SeKKM2{B{C6N&R+BX#!Bdt@@EE%s?sNGLc!`6}#qS7>!oM~q73imG1o>_D~xFhip za4B7(QY1NI8I->)y~hao%cT=rN`_C(W+;IYX`R$PG366u8H@pyxeraGna(OkP$o#& z@NwRY?lgX=m~9Cw*_&jAYGr58?0*H)s>xpH2P$gFf*Qz;BvzDK+J_QeRy(01)GH@v z`~)J`KDurmBCH{BlBU_=6;R9#)7k_hC^|Y@qRhdi%l-alqMKjS(|x)UDhbOPQ}#i& zD+Dd?5Ku8KAP{Um;#P?Z<2BXqxW;O5#x}AO+j81(CgA>g_j1Zlv|d6Lz$Bj2hsR&( zwlIMCDD+z#Jl+JcO<{b$F3{wfW0rF8qN#&SrWRDn&}DtkD)c~Ul}Ku=M{P{SQ#pBr zo21vl7xnYC?{=W3U-x8e{*if44I|F^U(|MkWM7ST)iv2=(47dB+~D7|#Dw|7;nUez z9uJ<8pnyvcJP7E^4fR&`{faGPw=8ukaQi)aF6DG1u*1`-s6&1qU#;xVfJPle;A0D9 z3p&9JWO{s~xBT{#zCRC!UVM50LReA9Bb}P91V3C6wQY6IRRV`Uv;8&-9hN$PgkH`< z)smk!1kx#z8tUmbZQ?)7vjeG7dRa)%7vZMFP#ofs#a*Ad#$eb%aZcIvgC^&}s*yO( zF(8*yoiHN^r5wTq|Hg8^*ErO91jTpWiE^T()5Sp=cc<@UT3j~>^v~fpOw}d)X3_tt z+^E=Yzw;in1g7zNGV9KfUYCiN!RmT>QH}}NwuT3BEuhsD4XB^}LJ3K-k&yDixq=Wy zZx~_BPI4nZ@Ts(ah&>XII5a{RBQ~maKE}+uM}~&DI3B!iv5kzc@#-5n9eJf|M4KnR zpLdHm2I2$htD;fEy>;Tysd2_>5&Y#t=Is|3-`aVHpoOdc=mS9JOU@X*pQl4%&**}V zNeqbJNWmjqJtse{0YB658vBZz>%`O8P%2H$*kh~2Qtc%V6RsyXf+Vqx=yt&t*t`HM zH6(cvDR5Gq7uMvd{=8)5EGJYB2+kSvU;CHngLo_ZtQ(;A>YZ_7Pv-9J^n>!F3gHR;_dKNNWrIO(pMIiVC+_!1s&Lf|wy<1)b%Su7DV2Lc^++CjUpMKV<-s~B$z}nPPCtw>^*zal zYPu|th9XJtPqG2a4Y>Wl7rQ8R9B)KVWTWm}YjG0bWbuhuGXsjf;4hXe@z&y>fOBNV+FL!^~nZZOYB&?dqphLx616@s@+@c*(5ZZ~jg&173d;bFh zis8q_Qzc7l^0(_|VV^7%^1MSmTMq-_M|Mo#A}rm$(Tce;=r(Z;a}evU$kTyc>~i)CQHy1;rAW!IN&!mY== z7ODNAVQgjzijqP$7FJ}*@S8x@ZfNQZ?PZJPVFv%PEWIEFNt* zge36g#j}U6z{IBV8~jNYF*I8Hp-zKOvHO)3g-7g@*8rL)630c3GmN7iE7o(wbAQS6 zgrc*wGCoS$H$_g#oN?{ZMgw!HP5R@1=*;7z?-K;}SQ|+4s2^Ue_gB}~5MlWAYOSiH z_h(amg;+EbD*O$^Qe*P->?YYL$Uwl)l}gZ(X1}tB2hq+DyP0?$E!1-D=3Kj=wF~~L zI%aUg*{m=%PJi437*y&bsbmD5PNG09~g>27)f8oQ-P)Q19ST5`Zji=Y|TAs<`~lt{OHi> z5^4)B%;V1&r4aAXQ?v9=Q_v+Uj#D(gSq!q!jUcE_li^$-#H-+<3i|o3%2=;2h$1PX z7126F$iQ)E=;qZzucn?BqEM7g8I#l9cBy3Y3x=?{azzH;ld#sA)sg|_#&JxZ1gW!xff)D zJrKqr`k~>Av)yEi%7!+2t_O{lUv(7%ie6i}K=$3VSD6Pb+4KFqtcUid{T75LdVjeM zl0+8fg2c1DMP1orFtG>3d8EaGMfO%s#L#COe~=eIb!;h9WU^&Z+*|{@y)PX1a>a=L zVbHH3l<}5>@>cgI1>Kc+Zndl|F=$iYDMr#Wbc0BGPf+VT+$d(v`NK{5HVNTk!JJPKPqR9N8-)v2V94l6b+jc8KD~tF$Y#I zW?Dt`7#Yricg}fTZN;JEMBR;!OBGW6=JtHvIX$LPAoMvce_OV08r^Oqf|*e$aa`8~ zsxx>oHZ&_s`)(ODpFKu{eefeh6bAYA-6`+bw=(J81TrG@4l$M%5~gptWiJPre$ODN zE}$#sJAkt5hJ&pd4;mXHTkJ@mc3~p5G)bbXx5U+uy$W_)XZX%kw;49BUK4~4(xa1M z{ANdona#2MJg=@?_FLXDy*+cVCaRwX-)T@8!(O5V;3%G6{pts&AfO0AHrG0ki%uII zUe39U@TuR1{upREu8zxFU=1;}UzVEMZX{#jxlE>tBInA6ies95R4YXE{$8pN4qdhp zX6|D|;Dy{a*V(bV9Q$w<3YI2?85A?Gg1Ng>QE+(M*Q&S-8XPlY^5F&&;S+flx@30l z-0)9r(ASj);WX^HaVt77P$lT%B>;hY*zE>RK=+BdIT z661qlqAIJBytJ&T#Sl=>p<)I4i^iox8}8`UX)x^~>w;=7g!C_354Oe(dd9JgzM7ME zIeH5q?AuODU!Y04r^r9cWD96ugo*Q*=XiK*ja#|o#c^3nK;Vrnnaq3XTBUBOtV3{F zCO1+n@-+U^(LAM<8i#p=!n7|4pnq~aU}tUcT9T{KQ7AGto|~bOCgb;tnTi|pe|dJL zR$cD$;!&TKW5E&XMS`P9P~JhEnQG?e3wPTI5>=(9llrvVOxetkroAJ#+zF0J4>(Xumn3{l6HTxJB0$=oxdet)eL94K z=kNA|BAz^*I3*tFAU}zASF#I{(L^tTok`58UoNEAwxp$ ziN@fzeV1sy37uGVTXb@CQ1KY#>QEaVv@wb0sH@zTRN?fKThJG@$ymQH%8^Bk?~Z0ZW(NRY8g`C%vBgKia7Ui~lOV``B&;IK7E6(1lq{(j{y* zNmBnChtg`E6;1-N+H6243P-du`za77U4x=(4w|;5{O>lC#e(@@{15)2gbZQka$ZF; z(q}o2<7$;$n-39K!azd`dwg4ej#YK$^|Gjv{xD`Z3wGmkWb^3fLN9PY3oqF=6x?mr znqBy>F~x?z_AiLFq)Ku0Q@Nd(@-1bpP8P|Wy2?$u_T(=3aUcfe!ZDp@D5E_B9}u8U z&rLz{sy*7T1XZais1jB5leiBlso3hz-n^lT(u=59k|k{a(@58#=^f364N_*m?HAepGY>-G`&io{ ziW9YH$%g&e(Uh5z(R)J?#qbc#$dts^4k@E?J%T|KK`S+Gy`vh3*99~RXx!~l6B3yAs!er4& z2emuW^Sl-knA>N`M4+BA0#?&SYoIz}3!&U^jcZ%H2tm}cUJYGp^Nq)IU~o!xb!HcV z)hFnNtj=O|$b9O715t?bxt9T&o^mu6_3+;5LDRSJD{tDpeV(n7nEvGNEa7%^K;dEz z_BBj3?4RChEgmIJF^0eswI<-3a{lTbM5FTXYE=8-INJOm9YJJrD$ap)56i8dh@&#d>S3Pld{ zs31=<$Ra3Z<^2l}@Fa>5sl7TG`|^=kf`Wsfp3>YSZh|>)$*Vo*6uCx$Pc!1KpgYNy z2FT~AupZlrU%FTU^79|a+yME>eeL^n(_htTBPVkPcCx(aaiEN_k1M*<$0vVZFM3q( z{dCyed08%2ayFSeKU2;&Px&a971 zN@Q}!rq)G+Ma*1Odk=yuqUMUb|0u>GuRWUr4NtmsCfw|;2G$5)K8ODZ%0)e$qPMt? zpvzaKJw=)TNt3A(6b(wWgvf`e*uH&v`E+Hgi8{qU@i=-RegQRI!EPBWqcr)3M4A17 zVDv-kjLpv5Y{hFVQ588B@!{5+Tc{yH=!Jc`ukNWWiU}`tB`k(cj&9l6=wUoyZV;@= zcZYfUSTsxUeiuN_BZxWN_Uhw7Djztp@t;r--{CYs0XJ0y-VJLLeCg?UK=4v*^Y$>Sjwa6p9Q^KkhD?UnBEk`F3a(RfM_0-0 z>Fp9@?_?%5U)6PEHxFWW3;<+!6?4$VP(oRECC15ZLV?9G_c!@lfxOQGN~mk23f`8( zlyv9Da0~#uN@<5TuJ&lKV**X&8s(UVvs9a(7?-tpE&>eD?RH|+B75*(Ix$EYp5?V!KxH@&16Xcznz-}m)J5#bV^5@vnxpiDm z6fREBKBEp1eR5oz#Li=1n{Kh7)~z|DSfZ(JO4&@wQcLDtlH*)s`-fw%D!CSqM6uM0 z=P+4gmkW+wO(olx_jw16lkRsC@o`Td%4dE6eK5(Gj8J;(!S8`ucIx)|(itJl0G&Yj zJ7uqaf*Hz`&5u|`j<3V~0lp&vZ(p%NlF}#wXk@hgrLyRdkoFWJOJ-q>fklXMVkn#E zMTf_|&JQT<&c;M2f*0tEt$HQU=h_KWK;5F}B;2>VDV^o`EQ!`ynudj5yphN>KIw4_ zJ8n?lDj~BafbZBORc6Kvsr=_|eigPRhv#H}C{RqFEV$YZ&(<315mVx_d&6XE)jYsi!SnkzmM z)LtH$by~_f@SeIgnOi4efLpqHEE*ylZFfZDYm0fWKCmyHdCh z-O>DqvhYWahFQ9xH37?f8i6e?hb#|AfgU%&c549JIhzIy3f~oxD1=%T;*DZG#?mDO zePN8C7LzI&oe{;ncG^2jyZ8K3yM<>JOohx-EEyx(=Z6`0s|_<9F?3nrlfbciF2{^- z0wNJ>P@udGv>;g3@wV1^y7HiM2hL%Co_0!oeTjLK{G3OOiSY={az^A9bzTVI2@NX^ zD!fO7+;(_4Ms%q5Cc-cYb_?Z{FMr?LVYq(BJal{Q?{`cqZ%d70D^0_);~kXhFd>-h zE`#f1y|mA4|8%y3HSI7W;>z^!U=yy@;)C1R#Y+wx4O`sZkxLxCUb(2ee}OSCTW+RK zE{Z|cDC{U_5a$7}5BiXL%jCO+BpDNh_PIYSOrGq8n*+Mim&o5U5Me{NWoY;8OCwY& zt=kRmKEzcn(yp!7dXA{UpQ&1M|0of1U{M9*VdvU2D1s8RaEv|eFzedd=T@`?xOQfD zzzC4*iv7w7bEG9_N7h*`pwJfXSc=lgH( zlH;Hgf?rU!GyK^K)3DAC`x+z78R`n{_k4AByf-SevP&dP2R6Q)Y5Cf3)^6C>Wt6?6 zGu0Y`(Idgsii=|Poy)K`(L2`o9612mAD$aJC=BcYNK$2V0AkUtg|*>D(K?uH145)s z2ph|L-G+H3024H=7@^=*5zJi|9n(I7sjS98B0t@5h|RqKwK*j7X;33HaDm`%<=>!x zJM>+HX4=0*v)50`ahR4^nP`Hj5Sqf}y1R9iHPpRK?oGHp;GUlA$HU>s4c6RdPM*w9 z;Tl51!VSPB$NK1Jkuj93i|DH}d&1)vb#`zK??1f@#D+izRRaF0jTf`O>KN`s(|<<7s0oDNG;s3Y(JGWUQA{7RM?%GQ!z<7r`(oi9ugO zuhlyAY11JkWoK}9)7T+YyD7gmx0xQxtXWfOw9+3LiB>hV*yAqS^=2i$IgPaK@vVGB>-In#=Y$h`!c6GWST1lLoHJHF#xB}iyH>iP z9?>;z^rVgND!ys@oyxfjAryi{mwWPdWycvNLt;^r5Zb)tTs*wAc^z}0 za{?yR^5`^mfjo%f5_a7+I7C>swNejn0#llIk{-fN>!`q80DY@Unpx&5nJj0r5cGXA znd}>94Pk%>MP`ZacsWRo7Cr!6s(u`!?dLmoHL|RCmSj*H3CW+$c0LzeN7+pMYg~xl zEPi&BHqC3qu0>BFB`f1k5hgaeY4Z ze6OCi@*@k+U=-JQSA}3?EFrBFx3gyE#!1Y!NYhdvM$vy~rYXt#q%gpE*FRF(4cUi3 zNe{9=o4dpt;@Hx8f1@U~vrKlV~dHgtCt zy#Gj0*R`l371VWt8NMo>8EPPdluHN6?bgNE=pdbiG6u+FucH%W-iIf!Ij>+4LAG)H z6yfL;`*x6*uh;(h(7)Iz9?o=CwPxEm)e?r|z(ruF4YW@{f?D4H0iV+cxSn}HJk~3; zD;f*|*RQjMo4>tpzZMep1D~BH)#1U-+tzUX?Uzh>_d}F}c&3o=iAMqQ#RA=8CXZ1F?;kl-J_4K&cMIo`#L-T&i|NT$8@sPRsP)1hc$~5Lw|@K`GSo` zF=Y*qHZ9c3j00#;;WXmQ;}fKe4aRktYm;g1VMC|O4biYnB2GjUht1~Z&?Xsb_yIXZ zc|+~V&Ar59P=F9QpY!HZ3N2!3jkGx2sTMRta5RPUA1BxTQt}T;^GhnoAUT+4oE}}j zbqgo?00%Sfh$r{Fq-e0g8!tF2AZ{wY3TjXsLKAu>$*6CRNyzrR%aWZb$3RnR9|ri$ z38|~DJkf18r;|oDu^I|b3x3B|T;8`tKs2+dpFN{x=x8^5t5+Row<{jo$!IZ)nSf|F zOqXG`L?^!Je1DdgMxuTl6ZY-pblcW$DbWf>yHF%eBz05Ns*k{LO`IRat9;)>$L-~) zw^K^Qm@@&De8XcWoQL#9nQrVz|LmlQ#dx_=z35aC(0D&Ty_7vn57%ltLCMP~wd1#m z>V|Z@HM=%XPHPa!R z73zX}H;-_Rt)=^yN2=xT9KDweS-`UJSw(C%?dTQR2$W^NZFfq8U+PHfHsLJ^*x%Tf z{RaZ0-pN(IQ59@jmZ=U1^eBQ8%4f%|`#a@0@JehD3|tl@1xu#qla#|*Zq>*@dHH2q zSf&$o6YT8Qsij*_HK9sO8X@O0UvsS5qeTSgznQW*tPlm#hxpSw`$4_c^T!wT5J*s9 zwjyO%7mW^42rlyg;qCJO#N5gSSu8eT)t3jLBvs^3k> zMIHl`)gKJZDX*>g9C`zkj89q2Y0U3&)>NCFroC0ekeQ}gjiN-J5fh=byVEvG zBo-~k2T5batW;8mhF2E&Ma?)7MlhYy;M~y(RdlOyP z<)5*X$sNWCFo#)w9pyvB^hjXaf@)7czh!v4|D2!Z0KP0dTGq)7{iSQc2wg;OXRV`z z7D$CIDBxk@TLk?h&IYewPZH8+NOyRCp;FLhgpBTR8IqX5Qo~nQlva0JL>0dhU9*#) zAuHRO1Z!6n-Uv-KQJPUQyc?=an`VN+mixZ)`k<5esv2?_ED`G$rR4TEJcRso#lLSHyXrNG4+^r+#5Mf$NIrE2fg7J30)mg7EyJ@UUsv{Ywb&c8xPn{ z0H}?@ST}jM&4%oA9coi;<5&~EQ-AKXzP5wgS?+ssK z9RfKKUtH>o2e`)Er3ZE~XzlD}@Ywe?#tv2aiMBUZ-|$PE^LvKxf#q3DEbyq=7F+4E z@8Uwob~y(MfUyG%_yuEQfEbNgE=5p;;?SzbXCu7yLcLF~Q*t3}1Yo1%OOxeWLc<4M zj)mOUyW<4$9LeUsHEgs1@l94nlkR;Ygi<9ztLFsnXyKWG@G62r@=bH7*@-Y8~z*DeV4 z1oDXzy;eB#J;31w2;%PN#OFboi6c5RD@k}wgQ>N&XC?wN(*JP8QEl{v79TK8w+-}9-1 zA(>FOG4o?MzQPHpJV*<#|96K<8zgx>FPp+)KakE0a+ipvZY7(GU8$7dS9jDtmL-k@ zV~Y3Ym->vYUPx!yhmf8L%x!B$70)x0ZzhqPw~mMo2~5Td z6vS|+=*3Z(!dW6?=7(A376c{pQ_WYD5F97Stef1vnp&Fdisvyv^UzF-OrG5`M#ve@iG z0;dSBL+yLLZLr1AD}+TVM__+nHp7%dh6)o(m=b_kXqnrOEVNK9Os2p_@*Np!?x`Ik zuL$&0>=NFNu$7duICpsy*kbT!HKCr>DSyh;+o-uJT#bR?2qC91|Ef#ql0l0}_^*Ad zMr<$l;+Zf|-cX*hlV?yny^Rd^@o?13CE(7$=Nnuyx;3epV{zy0^E}m>*qz7U5BvGl z6+`W&NC!v99h5s4Ux+<@E{>ZpI{$6alMGQZAqvvujR`uKra5Bv3h{6e1GFuoYG7E; z2DckvTbS&A*JTVN7J9>=#m)8RYK5Qatl{TYE7s@g>gItg_XH_Nb}))qdT#c0G0>Ny zoei>y|Cy)mf7CjJOGo*bJwPCN)BUcCR9M~D*u{Nlj1OPa6S{Z{E^|*lv1->A==T1u zs)f-2FQAzAO2FLtM^>gzwo!`Ai*E862>pcqs|@Dg*Ytnjl|B-TbLgnr9#bkSAH_3=?> zn?9uVvda~3ebZnc{04T)?VsXt0awUYq2~+Yuy4HM0*b`!Wt(!fq9Uf{7kjQBIB_v{ z{G|*?@AC~QWH#Y2UAu!@Loc3QQ5b^^Nx^R|+9heaqeDh|JJDQXJ~RjQo@=S$$`2PP+Pk3yxW#wCp$B9x*t@ z#Z=YCyDN9h)q7+@Jdj<7egCQG?*G8<84Q21aZlPu;%s zqmp!~iWij?k2X{8yq^*OQ)@w#zN`qfc&#-J`a)6;F>46Oe?w{PzNhZ-;z%iH8 zztJP0Cnz!L`-V2(X=JS#@!gy?=*0r$0_b5I7#~;AwH2Fr$2m=QxVmyfTZB~X0NKXm z;r{oK`Bz0TbZ13fBl0_dx|8xDwZ4v@E$e`13CSH*Tp70Wrj)%@;Gme%GfA--F9eu_ zEQP6JYp{%1iZ<FP7W2j?2%EsxZzXgzPlLI3|dc8oU=FltWU%0SpB+=9ze@!(V1aHw?`2 z{sIkV-#Qe$^EcM{c5?E(^3zD@7WSL7#>|~1*G?$A3CRAS}Zp5-E`oui{ z;=SD_B!O`73lyR7ps+w0Lj&`)T_2i;7k{1#C6tKIf3w#Wc#(ECCCu?hz;*KhX_Pbe z00+B)SznXPL#@^HCdGLyX0e#~v9UsuRTGyk5e0*kx4+xr8^adl8G`b@JUmv&pH|H= zrq;NPK*cNE=}8eyyZIPKzxeT*?wpJu*#;zgUA!9-SO8AH;wvEe&0%_x>fF!2CUBjn z45Fz8A0(P=Y*FB6JkoB&y^wl&D_8&{84b9&_o93=qAKfb=6&A@+7U47+CK$a^N^lMmS+mfmy&llS6|gl!gJ5nW zyU$)#=u23q+^WGS6{J8?017)sur8Trn+4KCfhA_6MjXExT98$CZl4dl*Jz|WWk(Gi z-m%&HHssoRyA)oOkd$-b5jlmFWI%-o!q$?kX9#fQ6*A=p8TuzFBp_>O{inUM$Tc}? zS}FZbRUy5zbF6$rZ?)kgBNj=;p7DXVyv+gt<0 zMs3DN#`O|A)>yj4OGJ=!^NTHM#sPDCbX{@k>Z)QIr<`ci=8CBy%G`MJJJ2a>$lya? zn)g2zZqz6tGG8vKb*0_kCwq<4(da<5eV9zI^Dr5>5+lnY1!;gwuuL%?Z^#c)Wk9-i z*O=0padP9-EdRY5S)sVm57=H0`UixvQeefkkd<*IQ|rC!a6i;W0!AIkx4{V}838j< zOcxpO_)h96UNs3TN~C5_{Jp8g=a0mRpSFFF!1wIr;~X7%=iiE3LJ|YF3SzODS^~R^ zubyaoaj6pDU6*5VDKs=%p96%A$SM?C!C&}i($ajQc8uEBFM!EfBS*t0Om^_G5nFW| z&5U-)gb1=$H|E*}4UjO|S$({x=Fn1D+!AG$Ti!%Kbxs6q3oU!*|2l**-e6G~^=()G zS#1m})axR%MaRBZpjDnHaDgc`8r+pRIQmW@oO`eoSc=k6`Mtf%1${F%)Re+)z7du~ z+DlP293@r42(C@`0ag&!uT{v@bWClQ6DW^fp#_#I5}Av$dEYwaQ|FD6aSwZtH=tX|UT z9IP+y@?nz@>cnzS-_-zehL$o#)M`{mYL{u4Bja0?SU&{3!h=1N1kjWIB|NlvOMsx z6df`BloJz3{N^??kz0ILN(RZG+AKfOC^0t7f_rR$vUk~)1}xI|GewrDa4CqJC4tj{ z0_=t!Xpyg#AuTb`9^@ucPc6|v{|_$RF%;gNs0J?k7%CU?F1KfT>+ak5^2B6;qRxIV z*Qhf8-GBd7(PrFq;FF87Je>O~)KGhiliY!o+Yy4pX(}`yFPTJL%i zVNSMwnxRzR(3n8brvkfFQ%;Fh`lQz@6pIUy6`9s){gN{?WsQ{Qz^H*Y~rk>r*bY%*+2ft78Qn}NIQCG#QwtP<0|Di!WG`Vp#SjgH4Wm&N#>Eprv z1@S$5=8*roK*E|5FgX!m;pA2GEY1%hY6n^@;qOTpdM3VOR$pShs1_Vorg&J)tdfr? zn@l?AeE+zabXp?Ahtsa4ybykeq-^-Ik?pox zt+`$t74Q_N)Tp2!cM;T$U<|z@JybqyNPCiZc0)>A^T!x%)G_l5b9a`03$&akOB+&c5TQ-qjU^FNu8XxZP6l2cJfx`SOo zn4VHhW|XS*u1CTJEf!f(HPkYL+9_f_dUMFy*k{QR>}~gAcQ)*7Dpq)bFg|%pmILoM zzm%~}5YPQCXO;Ab&!t_qoFwYBrcmebY3QRemFmAh$3jXI*2Cz$ z&-V*0Mf8=gcr|Vp_kE_HtN13W*rSACMg0nF^?~#icBjz546N#{A;G^JI<0ufdvhnp z*}SVX{=yt6>od@*fVPIzR053^qS>unK%tiG(`dMpYa+>?yFYu?$*bgR1?DFU@pr-v zNX990I5JXePTH$_nXSv30kw@HfzYekM`~3Fn;7F43}l?)8oM8?K`Xd<1*}ws>gz8T zSW<=iB8B52O$=GiM-tTRv->QN`q+mp|DiHT^ns%TI~TCI%Gx`UFS{|WmHK|wX}jrN|Qykq={(Fg- zs-RKP>FVxMUAY~Jg#475-Hev{jZKnnPxi+FC=v-J6@QUvKiWHo`lx$h%e;h??@PcS zWX@IU=O;1|&sQ&(bRevwE{E;7`qltEw}4&y2}lf|*`Yv`FQ3Q)lLIwIg|wV83j!+3g6xQp)^!+oq#*A ze}+-XMQdjRCmC`2Cc3`LK8!ujgmMyv6W2tZ)$Pdu&LwDG^=M`j-x($h5YlNbpd-{U z=*y$F#vPsQ7Zs|hzJt@sYk75Ox5v^hZqC&yY0vY*TUQjW2gE(?i#GfGR~Rp1j1AT% zSnY}4*j?Uh?XOzY=~oT9d%XXeaB%MK-Mw;6y_z1=Y-kX)C4sp2%52u%$AysiX|g#7 zF@CYi-v8y7Y$vA;I8oLg7UHNFNpcF<3{0a&!PZ11mR+=KYn(gBVL-8eRpVYJqW1kW zkmv@B^UQ3cy(;)4Rd9OKO+qs`-F3ny@jE$HP4_F^|s z9DE=hk2jyxw><3X{?b(5|4jvTsoulTH{NE$N}e+l$+KHKN|ZFi8v1FnIi;SGZ*Fyj zf>jRbiB#0|ebX%I6_?o`8XUUH>dD07qPE~<_=N8QM#%ynL;?k(1Fs0cmCMLP1?Du< zCT00->1#T=JYC5+dMsU2Ye$E=Ca2wA2VWiQN*oZI?AEw3ZzC#C%ZK3Wb_^#;LkGO_ zF$RH}0?ha?*reX;2Zg@a#|&ol3KU(edj12PytkB-QpL;~f1jz-#$pYk)R-ZKa)d-z z&9X^x-`ZE+D)0-zbc$9W^$0@p*! z(-|r2@0)DYewEA~oo&U9k<4Lcgd@0M#fr9<;x$!x5$7U}h*O$9H5367xCg=C=>vK`-O2I^!rx0Rj9PBn0cp=x#gj}qG-9#^nO^``H}f1 zj|F;Ui{t=9E@Eyqf%`*ShM8MXS~B|uL+$|_tlWmSO&9NNQ`HbAD-JdFS9sbv@p%NK ze#^o`{Sl3lOw6ejwn8Y+pucd}6;`+FjIz4JJslhe^%F;w0l#(ug(rI0Z>jbxppf<{ zMA3#NYHT9ujuHu+DS^XT_D1DB>N;~+cEu^^C!ZS98)hQC zFkapOL-{bH{wc3=wdq8*k+w(CPt9-aQ2J)j?KkxU?@?WPBef*p+egLL3SVdkQ^AIX z&Gt!U{(@bh&;@09o733`O2sK(Fs+lu>PhWhn&;9=e7OsmCV{&NMVmz65=<=y}K z`+q0^R~j#{DI{wzzy*o4UH2Og^M|!*#Z%qS_L(GF__nWjb`2;Q$FiPgYw#- zh)fXjONbS{Xh2NcQRMtv92_&Y#u-;MVmwjLHZE3TIg|8ICKOx~-db`p(2R2I?0PW_ zHUvf1?1Wr4n+gFh6-^!TEk{K^wBrYzQMUTm_F zs_Q zm(Igy_Z|1Tc;!I2-pkym_o~n^Hrwe)u6>*_(1Rj`vYv6$c==xWel*Sp2RFIroO%6MahCc!(*m-) zbsq4#T#(Zs0^1+tsGtzzc7N@Y0B5SEWA4k$lP8z=s+d}b+%=b81~L|>1WySDe9I7v zh&#m~zZrcUnJ&E35q^hZxTo<$I_(ajMA3QPp^t$Z0}E`i-ISzMjaYFu_^eI}LBf|h zNzos!HSNTC2xs@D+OSv9heaIX!?w%)HUJn%eJ`C@d3CYo3|9x1ZL`Z;bi$qJ`bA@* zjFXx0KrQX2Yp7R3Giob7`ufR~-9eeN>!!T2w15;oYr8a-GlfW{=09wQBp z2>RUbBqU4QcLh**ET{1>mPzVEdlMY!Hw78}{7cgeT@fPESr&IQXxbibsRGFlpExOi zxjjlwY+jVPydc)<^K!44bNDArE_A4K;9+XILBk$u(G#X^wZla}XaP?@`h3%l`zVpO z!TM};5)k_zO6f7qd)ZYsVY99}JIcmEDF-n_VLTa(lY|@4Gm?VR>wn4rUGY4lARk@) zfQFw5p038WnW81c&Y?Ivl9Di;Y0!Jx=77))e3P5QpyZ@f|!X=Al)i)4+5;bYR* zw$h~OTa&0TLREVM#5NI0iAL>|0Hn(tA(j#4zue@$KVRDGeQDNhK<*uzdN|J9W`4Aw~kdBb~#qj+rk(qkc3DZg0f8wNga2nA+x@+3{lp62Z$kE-s+j%+tk zd`Xw)N&S;qv$~<{B*O@3)~U6N@$Y{!aEZ%0yHMUE$2H3Bh>23A@F~TW-de)8UB@|y zX@oq+k(P+i_ZddX#P>ndFemQ=Sm^+xWl^Hga@=E*B0A!PZ9To=dPNI&v?rpj;A$?_F9moN(gY|UpD8S$@wD1Fqc{Qq zc`-#fVlOwJmW7Y#jJiJg?*BrY40Q2M3hOh%ZzkOXunXYj3=IGqgAAH_N9-b06I@b# zO{_6AD+O<~L6`!X8F*Td_U~*V%GBpN_hzVutDh$&SLQ-{acawdLh@eo(3!Ia+RBd$ z;ryV~Lf#_rH~oPtEW#yG{Yfy!i6j9^7IJwj<00`bl*rUlU7l~u0_<(@g|kVoye$&c z_OXy~f!T^=zE!drJ;=Ahy^C#Zn0=bUg@lk+u=VusF6u@eBR-tOmrKoqy}((C^Ho63 zM2hs$Ha1c)0W4USae7&~J`CFtc8buJ)&z|?IH4bE3RDZj&q1mNh%$mdmFi5a(H%12 znhvtisy%_2C38OZzcVt+%1F3q%whn~VVAWMA?*%J{9GWZExJR~*>I!jsZl&Cm0ool zefpEunZZm%2^pxI8sg z9f(h9BLN#H?(f|Vbjt)g=$)XvEKADyI}F(EZol49G);r0rY1uSnEj5X=%(zmxswgI zq##$(ae)m=+*A(FbvDKhm<5RI9%Ct;vSew|AdE>{>`eQi^Cvf;>= zNMv7ZM&encZ!D%|FqAJ+ZZkg+X7G%Yo&sn4&H_Y;G5#;e& zcBRN4?0YURAoBEl!$lWWv8m4RfEPjsIaYQXEUGhS)VM~_lWk#KUZ-C56HoNWaZJCbrP)(A#x_kC}t-{CLfvv&((AM!SQIKtuPm| zHClso__Wf|O+r3P2ZVoU2E;Bu$in>sC_Kr2XK#sqcEX!`*`plq_@wV>ZugkrVb&~7 z>in6oIl6zAPmyQ;!a*B}po0D9HR*F>#ABy%X8^*sI(9Ms+RyCq(o?XRibPyFUKqWt zE+-vC&&KNJ6zmvY5~lb`n9i*pew^K|*7@Y_TgzmI0;4fCQatwTBTlS6okc;``cs?6 z4f5Qy(OWfTwXL^zn!Rtmhh}7Z;!`G4_dY?xIVV`7MY8U+-DoiaQCct7X#WGJoEcFRGd1FZMqo*bT1#^ZWop9LqjiLWKL zP|UBnrAdWs>n?qOIxI$c$Q5?nYYxI8FMB*Yq>XaXG3G(YZ@E#$RGQu5JpM6bIXNE9 z^@SSXK%nuRisJRc_=EvEDeM)qSg8dJY9+86IE7{_MDE_j_wjFqI}4-YitO%n{W8jK zb`yVh(k&BJ%8@#9P{bn)uJqH_H+4-k(=&*Jb(2&b0vf$Zj8Ad)^9J#}3U`}+5L@c* z#XH&4bn&C#nmc^phsy~VJBt>w-v*jXEyN_!RDecWW~t=Y8Z5akd^X+@1w_u|6$?nY zqdFDpDN;3q4jjEIFyUqFJMU+z=*&bhC`5ZW^~Lv;JMZ zOtV0_l4S3i6dyxlr^9oM+I&S~8_WWV``rt|%#!#KEs6=1%DJHMmMW+Q6tK!)yEQU9 zLJ;#FA_8p*$T%JZRk_I;c%ieE_Y<7}egSv{h8+5F2>pGu*M2=f_bkhjQSH%JABqur)ZY?#60`I; z>HK0X+-6w=E)9p`^E|$$@{*w3X z%m`xO-_#0Qy-C^n3a^E)`2gu6E>}*Bj*9%;BkW=I5UIGlwc4X!R{@k!o^0dj(|_s< zA5h4gvmnx7P;J#7fc+SEPK@N{L(+Skq!y>PjM6nuJIIj;YAZ|qfQy8zbQiqVZU1&s z0?a?+MUr&DYk~cWr+b2l5_v+tL zd4_N)&QefeyHbt-DcV=MwUT2)s=zfF_Wc0y0OL`N~Gs%U@6i6^`Tfu3d(!e&)-n9k}O@6yP*0dm*;2dQ$zQ$ z1Sx0%*GS~nLtCLJCzuo*IXB-^lz1R3I#lIeP`QKt4fPX}7w{2DfNNwTQJ8ti6 zcijYD+t8I6%jS@aR1tt+OuFiZyA$l5(Tup?zvX#VOIfNCh7{k7N>OkSereO? zt{BACaC?2meXdtH6LkqqI`{_(%u_ty6MTC?P}C)O#9ROjV#uo~4UrsZVD)Ym4;;<5 z_-5wG@v!~=|1E#bxg#%~~gb4k~iW#uQ$+`qe>L4+~e800h|Ew`X zptVR9emU;xFM^-vc*bAsw-h=k640aM(a2z;VM1Ezic;JCM(iM9u^2vEL0KBqc@2!v zR3l2LT#kg@?IE;9;rcJv8nx}H9)Om;I@WZaT7|CZQ(mF{O7;pH_NE*$NK$zA%z$76 z6BM!1Pu0gT#I&+|UA`Ygs>XGy0O}g~;_v7`Fvz@7vnLadlBm ze3}#dpxz@#{RUDxuMv5eIX=W*mJiJE`uc{y;DFL!Q)j9L*v=n4yfvM6G})7zdaH}+ zo7o8Xb>Q76o@Dldh2k<*?Z2e?JGZ;e97jw>t?z6F)Msh_V(7hr@gnY9E$$dQecAz_ zEQ;ZAk^K@n(fs**HFD_y-Sd-7Kn%%`5K^t z(4`@mXZe#?O_y_CsEFs2R91P3OyafS2VVVn`$E>x!e}&l9#?{-jOp|UAFKp6iF?9@?#mhh4-X;(BU<(WjKz#a#sN} zAKFJhbKcO^_SxA6!oofaZ<33jWHC znv=HOTHYHNJ&n7sCVKXrB%WmFUP;;gyC57T`8$}BF*YI;JNuZcplhb75-y@K9%O>* z;Y$2_GVi}-hl`3m8A5wr)^ubiRt-Y<@PhTR3C+hA^l=S|s|0^k7fp=rW5lzT?shZO zKdZv2?X-GL48X|H0PZG92-qhvAjDLu|MDnTaIaUfF5OsX=tV$X?4Z5O$PoOfL0;Vw zqcH|Cx91U;brE_dyrH#rHg5jN(RVN(-glT=RfYBx=hVpyf(r6JfZ7bEj1_cvi)jxn z+tXB#o}eh)uz~!HqM6iYw*0wWNndp<9XbbP*d`qVKSeefeE)=}`bIB_@wHEY&M2KT(fG-ui7QN0f&8e}P4D!4=`@i#F`9j4~RR5!9%M-qw}$F-hp@zfk} zL8ttrw73SK`Bm%0X6m!mF|f_y^u;Wv5o%Uo6jsLokuOykN$3ECXCIPjk!ij(e12?` zbxhxPWN`D0SugUO9YKY|D89iHOk+k@c}rxtVT=^^7yswYkRm<)%WDd#Fv9-$R}Ouz z)X;>UXT_3c9+I}sFeRRKd_l7w>vZt6ecF~xPle}nTJFdPO%A67a7B7ayTFD~B?rs*?Ez$HMPK3!0X0G4<*OsA zEmQ5=7vcm#;sWHh2hFfk_MQopP*t;yfz{ajP4;g&U-AkeT+@PLX?xuM!eO^@ZXoM} z;HTz1zeRxNwo08&QW0qWy0OVxa8|hqs;e`!bs;DnHU1<(1RR^8`eMBPxF3a~LFCh& z&uMk33Ag!s_N~lx)_=ZOG`Qy`#_RHq9@9BEjW+_J>$}zxyFdRgYw$iQG9F6Mub8vsdg;yL=yqW`*tf_Vp=m`#^=CY5bgzhC1$7NC%!c~?wg_<^RQcm)poq6NX9TzAvV0g9QV~hgv=z;a#7)m~@r46o#+tV&zB*Tyg5R zv7u~ffY~#ZN)p7T>#at>fpEV#+%&KfkV<#;XssG3hi>#jU)k-yV0;mvzPa((a5nI6 zR`+^C7_;%!;WQdpHr*?modW8&WG+KDqC7#hLu_r9$RJo*K~@92TJy6=x;J@j{w6Q( zLG|y(Sy>x$B(~=wh)_n+?WMH5bGeS~1kWLs(;|QhqS=G8wHv4YHNLNJlK{wfWEgW?b za6a?;7xgJ zi^)KF1r>-1MsIlV<`SffI3PJ|Cg0mhJdaWU79{Y=gA-_VeK6p&yyy@31@v)AaZI7xraDSt(&V#wx7~SQ5i3kN#l+gTA892m>r}?u-QSiv=OuVz^p-a=Fazuv zu*)P>^Ue$z@x$6nz1?slwwuFm-dXu?^QWjX6i(^$RZKXk3kn0$uMHJYmhy8C)NiYZ z{U3sVpPiHl5#+5p9!vGQEZ|xun~d8!B++zo0cwn+@;}(9%agVt?DDOENSN&^?lp`- zzyj!RY?9FCh5E0J4upO65G18;z-!;EtRyFk=wz6@6FI+`TuS&ktAn4)m{v+Tp zi9Z?%RENp*&0pJG;lm#JbP{WL0Lcb*-Deh?fTMB2LNSwt&r4GMhppDn%7X?!f`DF~ zOI82O()tw+UlX#FoOG@;tl#SwJVWcl-2f$i8STyCLA}N6?@!Tk=62pAs*VDmn zSx)u_t<~Cr`s$wCHw;csTp*u*C%&3F%%E-lw<5+DNjN=9PbMF7x*yymn6)WNXWcb_Z0EE2nRd*RL z2<+IobQ=3I&)TFj`USH=gY?cy@RTALOp5Y^pyv z-_z_jwrRdnJ#zy(SmBpS7!DQN_=PmV$~O76E{l>fO|mJLFZK71xn&j{<&hj`0++Jf z-5r(q+zQUZIJrM(!tg5y?uLM66Vn(+~6Cy8)L}?(q^!9XDeu6H5MZ&Y? zNt2%ss>B`K**1hl;X*UW>omu=i}7aZldT{oTOB@y*HpYKk&cXk%jM*K+yQt)wY~xf zUU#0~`-rhG3zmH;c_ud|`rl!A%=Kk~z*|>#KX&0%pHa`ej5aRf*11oM>de;w+|@Nm)0wxc8E}!&F*jG zN}}SB@AW26vY^*dBpl&<(JmnEdJa9MF?pXlg3Xrw7}Oj;TI&4#TD{u-lh9<(dJ#_m z8|)sAZc?K`M|Wwdmk>?ft}PEdOqI%B9~?hEbM>6hToua)i1ezf$WyfyJBctfT0Nhxx{lst)w*E>zFhZ7eb0Mc0N~( z9}{}$F$%7XfMHh52wOGWyDTi`PD#m#7H65J-%z|M+HJlB+~t>-c>W1038=DIq z=6K|cQLo==%eUJ0K>o{b`vuvtnNb*fwhQa~V_v@jl8`mnDl`RJfzli*FR~O%G2^il z2Pp4ZRu0O|gZW9v-wZ(GAD$!T@L(croM^?dfafa@oY7D8L`-oD;;(24V&-{gvQh+A zfyVtT3Cmrl7=YNqZl;j%T9?{0@Qj5V$Y69z z%)DN)M-pb!3-EVSPhN_V+~>5#|IrpOlYdXxT2RKgsniBG1~4ill{*gS@Kx1txm88; z37%zXeDx--G{jR`5qtX)j8y${lq2O&{~HPyKUkdT96kOMk34yd?our9x1d)PF_)e? zj#W(9*3y)Lyn-Ak2-`lx-8qmNlIW_7OU#d_nrzzl_P>$&8zpviK7kUrV^Gb7Vx(P! zMVd!{n4#Jvr2eOHFdk?^tW2JrqQTku4~K%#_Nh0j{E#|5cSyFzy1h~q^;2SfbSL$? z8uolJi4r~Q)=_A`9HVxKHdr)bi9a!>DWvmZuvwQ{ZN|~;?=>iF4kEtg$r!W-mErrv zmqQ{PAS0lSu&>p;{qBW)pvLfVMj+rTzzD3>1+?b`tyQHuZn>$**#bjRQiF+wI8v(@ zf9VLU=d=J{`j-Zj5s?ec(e)Io9@R&fRK#B-rhX>#7$!4|JgLYtQsuzLEI(M%ufx8m zHW|FU?u@mf<#$RP^Q58Z02NYWrf`L)8smVFv38?;z3fQa))!FDw#kzjKqWPpo2qXl zy_!e2cJx#Y^qZ6qc1oYmP1&AgzXxk$Wm#Am8sJx$qsZ@SW}2<9wTdYfl)eT&mUBj5 zniFs;FPMX!LWPWJMbG5F5>lo-`R&ByzXVojq2T=g%x2Sd>i-JfW&9LoJu%_V7XWHR Y$xJ-S#ufovUxzoiU0rr literal 0 HcmV?d00001 diff --git a/boot_source/code_app/startup/inc/stm32f10x_it.h b/boot_source/code_app/startup/inc/stm32f10x_it.h new file mode 100644 index 0000000..cb075d7 --- /dev/null +++ b/boot_source/code_app/startup/inc/stm32f10x_it.h @@ -0,0 +1,52 @@ +/** + ****************************************************************************** + * @file Project/STM32F10x_StdPeriph_Template/stm32f10x_it.h + * @author MCD Application Team + * @version V3.6.0 + * @date 20-September-2021 + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + * Copyright (c) 2011 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 __STM32F10x_IT_H +#define __STM32F10x_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f10x.h" + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F10x_IT_H */ + diff --git a/boot_source/code_app/startup/inc/stm32f10x_libopt.h b/boot_source/code_app/startup/inc/stm32f10x_libopt.h new file mode 100644 index 0000000000000000000000000000000000000000..b91011ac1870e9bace92615f7a1d02d25fb75863 GIT binary patch literal 8192 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 RoEt^SJpIfnXG2GO{|AY5Ux)wz literal 0 HcmV?d00001 diff --git a/boot_source/code_app/startup/src/system_stm32f10x.c b/boot_source/code_app/startup/src/system_stm32f10x.c new file mode 100644 index 0000000000000000000000000000000000000000..93989214ef592d406bbc3ca619f7df03e3c48fba GIT binary patch literal 40960 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 literal 0 HcmV?d00001 diff --git a/boot_source/platform/CMSIS/ST/STM32F10x/CoreSupport/core_cm3.c b/boot_source/platform/CMSIS/ST/STM32F10x/CoreSupport/core_cm3.c new file mode 100644 index 0000000..fcff0d1 --- /dev/null +++ b/boot_source/platform/CMSIS/ST/STM32F10x/CoreSupport/core_cm3.c @@ -0,0 +1,784 @@ +/**************************************************************************//** + * @file core_cm3.c + * @brief CMSIS Cortex-M3 Core Peripheral Access Layer Source File + * @version V1.30 + * @date 30. October 2009 + * + * @note + * Copyright (C) 2009 ARM Limited. All rights reserved. + * + * @par + * ARM Limited (ARM) is supplying this software for use with Cortex-M + * processor based microcontrollers. This file can be freely distributed + * within development tools that are supporting such ARM based processors. + * + * @par + * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED + * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. + * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR + * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. + * + ******************************************************************************/ + +#include + +/* define compiler specific symbols */ +#if defined ( __CC_ARM ) + #define __ASM __asm /*!< asm keyword for ARM Compiler */ + #define __INLINE __inline /*!< inline keyword for ARM Compiler */ + +#elif defined ( __ICCARM__ ) + #define __ASM __asm /*!< asm keyword for IAR Compiler */ + #define __INLINE inline /*!< inline keyword for IAR Compiler. Only avaiable in High optimization mode! */ + +#elif defined ( __GNUC__ ) + #define __ASM __asm /*!< asm keyword for GNU Compiler */ + #define __INLINE inline /*!< inline keyword for GNU Compiler */ + +#elif defined ( __TASKING__ ) + #define __ASM __asm /*!< asm keyword for TASKING Compiler */ + #define __INLINE inline /*!< inline keyword for TASKING Compiler */ + +#endif + + +/* ################### Compiler specific Intrinsics ########################### */ + +#if defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/ +/* ARM armcc specific functions */ + +/** + * @brief Return the Process Stack Pointer + * + * @return ProcessStackPointer + * + * Return the actual process stack pointer + */ +__ASM uint32_t __get_PSP(void) +{ + mrs r0, psp + bx lr +} + +/** + * @brief Set the Process Stack Pointer + * + * @param topOfProcStack Process Stack Pointer + * + * Assign the value ProcessStackPointer to the MSP + * (process stack pointer) Cortex processor register + */ +__ASM void __set_PSP(uint32_t topOfProcStack) +{ + msr psp, r0 + bx lr +} + +/** + * @brief Return the Main Stack Pointer + * + * @return Main Stack Pointer + * + * Return the current value of the MSP (main stack pointer) + * Cortex processor register + */ +__ASM uint32_t __get_MSP(void) +{ + mrs r0, msp + bx lr +} + +/** + * @brief Set the Main Stack Pointer + * + * @param topOfMainStack Main Stack Pointer + * + * Assign the value mainStackPointer to the MSP + * (main stack pointer) Cortex processor register + */ +__ASM void __set_MSP(uint32_t mainStackPointer) +{ + msr msp, r0 + bx lr +} + +/** + * @brief Reverse byte order in unsigned short value + * + * @param value value to reverse + * @return reversed value + * + * Reverse byte order in unsigned short value + */ +__ASM uint32_t __REV16(uint16_t value) +{ + rev16 r0, r0 + bx lr +} + +/** + * @brief Reverse byte order in signed short value with sign extension to integer + * + * @param value value to reverse + * @return reversed value + * + * Reverse byte order in signed short value with sign extension to integer + */ +__ASM int32_t __REVSH(int16_t value) +{ + revsh r0, r0 + bx lr +} + + +#if (__ARMCC_VERSION < 400000) + +/** + * @brief Remove the exclusive lock created by ldrex + * + * Removes the exclusive lock which is created by ldrex. + */ +__ASM void __CLREX(void) +{ + clrex +} + +/** + * @brief Return the Base Priority value + * + * @return BasePriority + * + * Return the content of the base priority register + */ +__ASM uint32_t __get_BASEPRI(void) +{ + mrs r0, basepri + bx lr +} + +/** + * @brief Set the Base Priority value + * + * @param basePri BasePriority + * + * Set the base priority register + */ +__ASM void __set_BASEPRI(uint32_t basePri) +{ + msr basepri, r0 + bx lr +} + +/** + * @brief Return the Priority Mask value + * + * @return PriMask + * + * Return state of the priority mask bit from the priority mask register + */ +__ASM uint32_t __get_PRIMASK(void) +{ + mrs r0, primask + bx lr +} + +/** + * @brief Set the Priority Mask value + * + * @param priMask PriMask + * + * Set the priority mask bit in the priority mask register + */ +__ASM void __set_PRIMASK(uint32_t priMask) +{ + msr primask, r0 + bx lr +} + +/** + * @brief Return the Fault Mask value + * + * @return FaultMask + * + * Return the content of the fault mask register + */ +__ASM uint32_t __get_FAULTMASK(void) +{ + mrs r0, faultmask + bx lr +} + +/** + * @brief Set the Fault Mask value + * + * @param faultMask faultMask value + * + * Set the fault mask register + */ +__ASM void __set_FAULTMASK(uint32_t faultMask) +{ + msr faultmask, r0 + bx lr +} + +/** + * @brief Return the Control Register value + * + * @return Control value + * + * Return the content of the control register + */ +__ASM uint32_t __get_CONTROL(void) +{ + mrs r0, control + bx lr +} + +/** + * @brief Set the Control Register value + * + * @param control Control value + * + * Set the control register + */ +__ASM void __set_CONTROL(uint32_t control) +{ + msr control, r0 + bx lr +} + +#endif /* __ARMCC_VERSION */ + + + +#elif (defined (__ICCARM__)) /*------------------ ICC Compiler -------------------*/ +/* IAR iccarm specific functions */ +#pragma diag_suppress=Pe940 + +/** + * @brief Return the Process Stack Pointer + * + * @return ProcessStackPointer + * + * Return the actual process stack pointer + */ +uint32_t __get_PSP(void) +{ + __ASM("mrs r0, psp"); + __ASM("bx lr"); +} + +/** + * @brief Set the Process Stack Pointer + * + * @param topOfProcStack Process Stack Pointer + * + * Assign the value ProcessStackPointer to the MSP + * (process stack pointer) Cortex processor register + */ +void __set_PSP(uint32_t topOfProcStack) +{ + __ASM("msr psp, r0"); + __ASM("bx lr"); +} + +/** + * @brief Return the Main Stack Pointer + * + * @return Main Stack Pointer + * + * Return the current value of the MSP (main stack pointer) + * Cortex processor register + */ +uint32_t __get_MSP(void) +{ + __ASM("mrs r0, msp"); + __ASM("bx lr"); +} + +/** + * @brief Set the Main Stack Pointer + * + * @param topOfMainStack Main Stack Pointer + * + * Assign the value mainStackPointer to the MSP + * (main stack pointer) Cortex processor register + */ +void __set_MSP(uint32_t topOfMainStack) +{ + __ASM("msr msp, r0"); + __ASM("bx lr"); +} + +/** + * @brief Reverse byte order in unsigned short value + * + * @param value value to reverse + * @return reversed value + * + * Reverse byte order in unsigned short value + */ +uint32_t __REV16(uint16_t value) +{ + __ASM("rev16 r0, r0"); + __ASM("bx lr"); +} + +/** + * @brief Reverse bit order of value + * + * @param value value to reverse + * @return reversed value + * + * Reverse bit order of value + */ +uint32_t __RBIT(uint32_t value) +{ + __ASM("rbit r0, r0"); + __ASM("bx lr"); +} + +/** + * @brief LDR Exclusive (8 bit) + * + * @param *addr address pointer + * @return value of (*address) + * + * Exclusive LDR command for 8 bit values) + */ +uint8_t __LDREXB(uint8_t *addr) +{ + __ASM("ldrexb r0, [r0]"); + __ASM("bx lr"); +} + +/** + * @brief LDR Exclusive (16 bit) + * + * @param *addr address pointer + * @return value of (*address) + * + * Exclusive LDR command for 16 bit values + */ +uint16_t __LDREXH(uint16_t *addr) +{ + __ASM("ldrexh r0, [r0]"); + __ASM("bx lr"); +} + +/** + * @brief LDR Exclusive (32 bit) + * + * @param *addr address pointer + * @return value of (*address) + * + * Exclusive LDR command for 32 bit values + */ +uint32_t __LDREXW(uint32_t *addr) +{ + __ASM("ldrex r0, [r0]"); + __ASM("bx lr"); +} + +/** + * @brief STR Exclusive (8 bit) + * + * @param value value to store + * @param *addr address pointer + * @return successful / failed + * + * Exclusive STR command for 8 bit values + */ +uint32_t __STREXB(uint8_t value, uint8_t *addr) +{ + __ASM("strexb r0, r0, [r1]"); + __ASM("bx lr"); +} + +/** + * @brief STR Exclusive (16 bit) + * + * @param value value to store + * @param *addr address pointer + * @return successful / failed + * + * Exclusive STR command for 16 bit values + */ +uint32_t __STREXH(uint16_t value, uint16_t *addr) +{ + __ASM("strexh r0, r0, [r1]"); + __ASM("bx lr"); +} + +/** + * @brief STR Exclusive (32 bit) + * + * @param value value to store + * @param *addr address pointer + * @return successful / failed + * + * Exclusive STR command for 32 bit values + */ +uint32_t __STREXW(uint32_t value, uint32_t *addr) +{ + __ASM("strex r0, r0, [r1]"); + __ASM("bx lr"); +} + +#pragma diag_default=Pe940 + + +#elif (defined (__GNUC__)) /*------------------ GNU Compiler ---------------------*/ +/* GNU gcc specific functions */ + +/** + * @brief Return the Process Stack Pointer + * + * @return ProcessStackPointer + * + * Return the actual process stack pointer + */ +uint32_t __get_PSP(void) __attribute__( ( naked ) ); +uint32_t __get_PSP(void) +{ + uint32_t result=0; + + __ASM volatile ("MRS %0, psp\n\t" + "MOV r0, %0 \n\t" + "BX lr \n\t" : "=r" (result) ); + return(result); +} + +/** + * @brief Set the Process Stack Pointer + * + * @param topOfProcStack Process Stack Pointer + * + * Assign the value ProcessStackPointer to the MSP + * (process stack pointer) Cortex processor register + */ +void __set_PSP(uint32_t topOfProcStack) __attribute__( ( naked ) ); +void __set_PSP(uint32_t topOfProcStack) +{ + __ASM volatile ("MSR psp, %0\n\t" + "BX lr \n\t" : : "r" (topOfProcStack) ); +} + +/** + * @brief Return the Main Stack Pointer + * + * @return Main Stack Pointer + * + * Return the current value of the MSP (main stack pointer) + * Cortex processor register + */ +uint32_t __get_MSP(void) __attribute__( ( naked ) ); +uint32_t __get_MSP(void) +{ + uint32_t result=0; + + __ASM volatile ("MRS %0, msp\n\t" + "MOV r0, %0 \n\t" + "BX lr \n\t" : "=r" (result) ); + return(result); +} + +/** + * @brief Set the Main Stack Pointer + * + * @param topOfMainStack Main Stack Pointer + * + * Assign the value mainStackPointer to the MSP + * (main stack pointer) Cortex processor register + */ +void __set_MSP(uint32_t topOfMainStack) __attribute__( ( naked ) ); +void __set_MSP(uint32_t topOfMainStack) +{ + __ASM volatile ("MSR msp, %0\n\t" + "BX lr \n\t" : : "r" (topOfMainStack) ); +} + +/** + * @brief Return the Base Priority value + * + * @return BasePriority + * + * Return the content of the base priority register + */ +uint32_t __get_BASEPRI(void) +{ + uint32_t result=0; + + __ASM volatile ("MRS %0, basepri_max" : "=r" (result) ); + return(result); +} + +/** + * @brief Set the Base Priority value + * + * @param basePri BasePriority + * + * Set the base priority register + */ +void __set_BASEPRI(uint32_t value) +{ + __ASM volatile ("MSR basepri, %0" : : "r" (value) ); +} + +/** + * @brief Return the Priority Mask value + * + * @return PriMask + * + * Return state of the priority mask bit from the priority mask register + */ +uint32_t __get_PRIMASK(void) +{ + uint32_t result=0; + + __ASM volatile ("MRS %0, primask" : "=r" (result) ); + return(result); +} + +/** + * @brief Set the Priority Mask value + * + * @param priMask PriMask + * + * Set the priority mask bit in the priority mask register + */ +void __set_PRIMASK(uint32_t priMask) +{ + __ASM volatile ("MSR primask, %0" : : "r" (priMask) ); +} + +/** + * @brief Return the Fault Mask value + * + * @return FaultMask + * + * Return the content of the fault mask register + */ +uint32_t __get_FAULTMASK(void) +{ + uint32_t result=0; + + __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); + return(result); +} + +/** + * @brief Set the Fault Mask value + * + * @param faultMask faultMask value + * + * Set the fault mask register + */ +void __set_FAULTMASK(uint32_t faultMask) +{ + __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) ); +} + +/** + * @brief Return the Control Register value +* +* @return Control value + * + * Return the content of the control register + */ +uint32_t __get_CONTROL(void) +{ + uint32_t result=0; + + __ASM volatile ("MRS %0, control" : "=r" (result) ); + return(result); +} + +/** + * @brief Set the Control Register value + * + * @param control Control value + * + * Set the control register + */ +void __set_CONTROL(uint32_t control) +{ + __ASM volatile ("MSR control, %0" : : "r" (control) ); +} + + +/** + * @brief Reverse byte order in integer value + * + * @param value value to reverse + * @return reversed value + * + * Reverse byte order in integer value + */ +uint32_t __REV(uint32_t value) +{ + uint32_t result=0; + + __ASM volatile ("rev %0, %1" : "=r" (result) : "r" (value) ); + return(result); +} + +/** + * @brief Reverse byte order in unsigned short value + * + * @param value value to reverse + * @return reversed value + * + * Reverse byte order in unsigned short value + */ +uint32_t __REV16(uint16_t value) +{ + uint32_t result=0; + + __ASM volatile ("rev16 %0, %1" : "=r" (result) : "r" (value) ); + return(result); +} + +/** + * @brief Reverse byte order in signed short value with sign extension to integer + * + * @param value value to reverse + * @return reversed value + * + * Reverse byte order in signed short value with sign extension to integer + */ +int32_t __REVSH(int16_t value) +{ + uint32_t result=0; + + __ASM volatile ("revsh %0, %1" : "=r" (result) : "r" (value) ); + return(result); +} + +/** + * @brief Reverse bit order of value + * + * @param value value to reverse + * @return reversed value + * + * Reverse bit order of value + */ +uint32_t __RBIT(uint32_t value) +{ + uint32_t result=0; + + __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) ); + return(result); +} + +/** + * @brief LDR Exclusive (8 bit) + * + * @param *addr address pointer + * @return value of (*address) + * + * Exclusive LDR command for 8 bit value + */ +uint8_t __LDREXB(uint8_t *addr) +{ + uint8_t result=0; + + __ASM volatile ("ldrexb %0, [%1]" : "=r" (result) : "r" (addr) ); + return(result); +} + +/** + * @brief LDR Exclusive (16 bit) + * + * @param *addr address pointer + * @return value of (*address) + * + * Exclusive LDR command for 16 bit values + */ +uint16_t __LDREXH(uint16_t *addr) +{ + uint16_t result=0; + + __ASM volatile ("ldrexh %0, [%1]" : "=r" (result) : "r" (addr) ); + return(result); +} + +/** + * @brief LDR Exclusive (32 bit) + * + * @param *addr address pointer + * @return value of (*address) + * + * Exclusive LDR command for 32 bit values + */ +uint32_t __LDREXW(uint32_t *addr) +{ + uint32_t result=0; + + __ASM volatile ("ldrex %0, [%1]" : "=r" (result) : "r" (addr) ); + return(result); +} + +/** + * @brief STR Exclusive (8 bit) + * + * @param value value to store + * @param *addr address pointer + * @return successful / failed + * + * Exclusive STR command for 8 bit values + */ +uint32_t __STREXB(uint8_t value, uint8_t *addr) +{ + uint32_t result=0; + + __ASM volatile ("strexb %0, %2, [%1]" : "=r" (result) : "r" (addr), "r" (value) ); + return(result); +} + +/** + * @brief STR Exclusive (16 bit) + * + * @param value value to store + * @param *addr address pointer + * @return successful / failed + * + * Exclusive STR command for 16 bit values + */ +uint32_t __STREXH(uint16_t value, uint16_t *addr) +{ + uint32_t result=0; + + __ASM volatile ("strexh %0, %2, [%1]" : "=r" (result) : "r" (addr), "r" (value) ); + return(result); +} + +/** + * @brief STR Exclusive (32 bit) + * + * @param value value to store + * @param *addr address pointer + * @return successful / failed + * + * Exclusive STR command for 32 bit values + */ +uint32_t __STREXW(uint32_t value, uint32_t *addr) +{ + uint32_t result=0; + + __ASM volatile ("strex %0, %2, [%1]" : "=r" (result) : "r" (addr), "r" (value) ); + return(result); +} + + +#elif (defined (__TASKING__)) /*------------------ TASKING Compiler ---------------------*/ +/* TASKING carm specific functions */ + +/* + * The CMSIS functions have been implemented as intrinsics in the compiler. + * Please use "carm -?i" to get an up to date list of all instrinsics, + * Including the CMSIS ones. + */ + +#endif diff --git a/boot_source/platform/CMSIS/ST/STM32F10x/CoreSupport/core_cm3.h b/boot_source/platform/CMSIS/ST/STM32F10x/CoreSupport/core_cm3.h new file mode 100644 index 0000000..7ab7b4b --- /dev/null +++ b/boot_source/platform/CMSIS/ST/STM32F10x/CoreSupport/core_cm3.h @@ -0,0 +1,1818 @@ +/**************************************************************************//** + * @file core_cm3.h + * @brief CMSIS Cortex-M3 Core Peripheral Access Layer Header File + * @version V1.30 + * @date 30. October 2009 + * + * @note + * Copyright (C) 2009 ARM Limited. All rights reserved. + * + * @par + * ARM Limited (ARM) is supplying this software for use with Cortex-M + * processor based microcontrollers. This file can be freely distributed + * within development tools that are supporting such ARM based processors. + * + * @par + * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED + * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. + * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR + * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. + * + ******************************************************************************/ + +#ifndef __CM3_CORE_H__ +#define __CM3_CORE_H__ + +/** @addtogroup CMSIS_CM3_core_LintCinfiguration CMSIS CM3 Core Lint Configuration + * + * List of Lint messages which will be suppressed and not shown: + * - Error 10: \n + * register uint32_t __regBasePri __asm("basepri"); \n + * Error 10: Expecting ';' + * . + * - Error 530: \n + * return(__regBasePri); \n + * Warning 530: Symbol '__regBasePri' (line 264) not initialized + * . + * - Error 550: \n + * __regBasePri = (basePri & 0x1ff); \n + * Warning 550: Symbol '__regBasePri' (line 271) not accessed + * . + * - Error 754: \n + * uint32_t RESERVED0[24]; \n + * Info 754: local structure member '' (line 109, file ./cm3_core.h) not referenced + * . + * - Error 750: \n + * #define __CM3_CORE_H__ \n + * Info 750: local macro '__CM3_CORE_H__' (line 43, file./cm3_core.h) not referenced + * . + * - Error 528: \n + * static __INLINE void NVIC_DisableIRQ(uint32_t IRQn) \n + * Warning 528: Symbol 'NVIC_DisableIRQ(unsigned int)' (line 419, file ./cm3_core.h) not referenced + * . + * - Error 751: \n + * } InterruptType_Type; \n + * Info 751: local typedef 'InterruptType_Type' (line 170, file ./cm3_core.h) not referenced + * . + * Note: To re-enable a Message, insert a space before 'lint' * + * + */ + +/*lint -save */ +/*lint -e10 */ +/*lint -e530 */ +/*lint -e550 */ +/*lint -e754 */ +/*lint -e750 */ +/*lint -e528 */ +/*lint -e751 */ + + +/** @addtogroup CMSIS_CM3_core_definitions CM3 Core Definitions + This file defines all structures and symbols for CMSIS core: + - CMSIS version number + - Cortex-M core registers and bitfields + - Cortex-M core peripheral base address + @{ + */ + +#ifdef __cplusplus + extern "C" { +#endif + +#define __CM3_CMSIS_VERSION_MAIN (0x01) /*!< [31:16] CMSIS HAL main version */ +#define __CM3_CMSIS_VERSION_SUB (0x30) /*!< [15:0] CMSIS HAL sub version */ +#define __CM3_CMSIS_VERSION ((__CM3_CMSIS_VERSION_MAIN << 16) | __CM3_CMSIS_VERSION_SUB) /*!< CMSIS HAL version number */ + +#define __CORTEX_M (0x03) /*!< Cortex core */ + +#include /* Include standard types */ + +#if defined (__ICCARM__) + #include /* IAR Intrinsics */ +#endif + + +#ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 4 /*!< standard definition for NVIC Priority Bits */ +#endif + + + + +/** + * IO definitions + * + * define access restrictions to peripheral registers + */ + +#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 */ + + + +/******************************************************************************* + * Register Abstraction + ******************************************************************************/ +/** @addtogroup CMSIS_CM3_core_register CMSIS CM3 Core Register + @{ +*/ + + +/** @addtogroup CMSIS_CM3_NVIC CMSIS CM3 NVIC + memory mapped structure for Nested Vectored Interrupt Controller (NVIC) + @{ + */ +typedef struct +{ + __IO uint32_t ISER[8]; /*!< Offset: 0x000 Interrupt Set Enable Register */ + uint32_t RESERVED0[24]; + __IO uint32_t ICER[8]; /*!< Offset: 0x080 Interrupt Clear Enable Register */ + uint32_t RSERVED1[24]; + __IO uint32_t ISPR[8]; /*!< Offset: 0x100 Interrupt Set Pending Register */ + uint32_t RESERVED2[24]; + __IO uint32_t ICPR[8]; /*!< Offset: 0x180 Interrupt Clear Pending Register */ + uint32_t RESERVED3[24]; + __IO uint32_t IABR[8]; /*!< Offset: 0x200 Interrupt Active bit Register */ + uint32_t RESERVED4[56]; + __IO uint8_t IP[240]; /*!< Offset: 0x300 Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED5[644]; + __O uint32_t STIR; /*!< Offset: 0xE00 Software Trigger Interrupt Register */ +} NVIC_Type; +/*@}*/ /* end of group CMSIS_CM3_NVIC */ + + +/** @addtogroup CMSIS_CM3_SCB CMSIS CM3 SCB + memory mapped structure for System Control Block (SCB) + @{ + */ +typedef struct +{ + __I uint32_t CPUID; /*!< Offset: 0x00 CPU ID Base Register */ + __IO uint32_t ICSR; /*!< Offset: 0x04 Interrupt Control State Register */ + __IO uint32_t VTOR; /*!< Offset: 0x08 Vector Table Offset Register */ + __IO uint32_t AIRCR; /*!< Offset: 0x0C Application Interrupt / Reset Control Register */ + __IO uint32_t SCR; /*!< Offset: 0x10 System Control Register */ + __IO uint32_t CCR; /*!< Offset: 0x14 Configuration Control Register */ + __IO uint8_t SHP[12]; /*!< Offset: 0x18 System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IO uint32_t SHCSR; /*!< Offset: 0x24 System Handler Control and State Register */ + __IO uint32_t CFSR; /*!< Offset: 0x28 Configurable Fault Status Register */ + __IO uint32_t HFSR; /*!< Offset: 0x2C Hard Fault Status Register */ + __IO uint32_t DFSR; /*!< Offset: 0x30 Debug Fault Status Register */ + __IO uint32_t MMFAR; /*!< Offset: 0x34 Mem Manage Address Register */ + __IO uint32_t BFAR; /*!< Offset: 0x38 Bus Fault Address Register */ + __IO uint32_t AFSR; /*!< Offset: 0x3C Auxiliary Fault Status Register */ + __I uint32_t PFR[2]; /*!< Offset: 0x40 Processor Feature Register */ + __I uint32_t DFR; /*!< Offset: 0x48 Debug Feature Register */ + __I uint32_t ADR; /*!< Offset: 0x4C Auxiliary Feature Register */ + __I uint32_t MMFR[4]; /*!< Offset: 0x50 Memory Model Feature Register */ + __I uint32_t ISAR[5]; /*!< Offset: 0x60 ISA Feature Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24 /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFul << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20 /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFul << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_PARTNO_Pos 4 /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFul << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0 /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFul << SCB_CPUID_REVISION_Pos) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31 /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1ul << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28 /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1ul << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27 /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1ul << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26 /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1ul << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25 /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1ul << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23 /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1ul << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22 /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1ul << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12 /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFul << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11 /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1ul << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0 /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFul << SCB_ICSR_VECTACTIVE_Pos) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_VTOR_TBLBASE_Pos 29 /*!< SCB VTOR: TBLBASE Position */ +#define SCB_VTOR_TBLBASE_Msk (0x1FFul << SCB_VTOR_TBLBASE_Pos) /*!< SCB VTOR: TBLBASE Mask */ + +#define SCB_VTOR_TBLOFF_Pos 7 /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x3FFFFFul << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16 /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFul << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16 /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFul << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15 /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1ul << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8 /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7ul << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2 /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1ul << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1 /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1ul << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +#define SCB_AIRCR_VECTRESET_Pos 0 /*!< SCB AIRCR: VECTRESET Position */ +#define SCB_AIRCR_VECTRESET_Msk (1ul << SCB_AIRCR_VECTRESET_Pos) /*!< SCB AIRCR: VECTRESET Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4 /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1ul << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2 /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1ul << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1 /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1ul << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9 /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1ul << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8 /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1ul << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4 /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1ul << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3 /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1ul << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1 /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1ul << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +#define SCB_CCR_NONBASETHRDENA_Pos 0 /*!< SCB CCR: NONBASETHRDENA Position */ +#define SCB_CCR_NONBASETHRDENA_Msk (1ul << SCB_CCR_NONBASETHRDENA_Pos) /*!< SCB CCR: NONBASETHRDENA Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_USGFAULTENA_Pos 18 /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1ul << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17 /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1ul << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16 /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1ul << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15 /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1ul << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14 /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1ul << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13 /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1ul << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12 /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1ul << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11 /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1ul << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10 /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1ul << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8 /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1ul << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7 /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1ul << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3 /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1ul << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1 /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1ul << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0 /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1ul << SCB_SHCSR_MEMFAULTACT_Pos) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/* SCB Configurable Fault Status Registers Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16 /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFul << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8 /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFul << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0 /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFul << SCB_CFSR_MEMFAULTSR_Pos) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/* SCB Hard Fault Status Registers Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31 /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1ul << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30 /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1ul << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1 /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1ul << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/* SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_EXTERNAL_Pos 4 /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1ul << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3 /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1ul << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2 /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1ul << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1 /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1ul << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0 /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1ul << SCB_DFSR_HALTED_Pos) /*!< SCB DFSR: HALTED Mask */ +/*@}*/ /* end of group CMSIS_CM3_SCB */ + + +/** @addtogroup CMSIS_CM3_SysTick CMSIS CM3 SysTick + memory mapped structure for SysTick + @{ + */ +typedef struct +{ + __IO uint32_t CTRL; /*!< Offset: 0x00 SysTick Control and Status Register */ + __IO uint32_t LOAD; /*!< Offset: 0x04 SysTick Reload Value Register */ + __IO uint32_t VAL; /*!< Offset: 0x08 SysTick Current Value Register */ + __I uint32_t CALIB; /*!< Offset: 0x0C SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16 /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1ul << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2 /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1ul << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1 /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1ul << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0 /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1ul << SysTick_CTRL_ENABLE_Pos) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0 /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFul << SysTick_LOAD_RELOAD_Pos) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0 /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFul << SysTick_VAL_CURRENT_Pos) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31 /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1ul << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30 /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1ul << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0 /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFul << SysTick_VAL_CURRENT_Pos) /*!< SysTick CALIB: TENMS Mask */ +/*@}*/ /* end of group CMSIS_CM3_SysTick */ + + +/** @addtogroup CMSIS_CM3_ITM CMSIS CM3 ITM + memory mapped structure for Instrumentation Trace Macrocell (ITM) + @{ + */ +typedef struct +{ + __O union + { + __O uint8_t u8; /*!< Offset: ITM Stimulus Port 8-bit */ + __O uint16_t u16; /*!< Offset: ITM Stimulus Port 16-bit */ + __O uint32_t u32; /*!< Offset: ITM Stimulus Port 32-bit */ + } PORT [32]; /*!< Offset: 0x00 ITM Stimulus Port Registers */ + uint32_t RESERVED0[864]; + __IO uint32_t TER; /*!< Offset: ITM Trace Enable Register */ + uint32_t RESERVED1[15]; + __IO uint32_t TPR; /*!< Offset: ITM Trace Privilege Register */ + uint32_t RESERVED2[15]; + __IO uint32_t TCR; /*!< Offset: ITM Trace Control Register */ + uint32_t RESERVED3[29]; + __IO uint32_t IWR; /*!< Offset: ITM Integration Write Register */ + __IO uint32_t IRR; /*!< Offset: ITM Integration Read Register */ + __IO uint32_t IMCR; /*!< Offset: ITM Integration Mode Control Register */ + uint32_t RESERVED4[43]; + __IO uint32_t LAR; /*!< Offset: ITM Lock Access Register */ + __IO uint32_t LSR; /*!< Offset: ITM Lock Status Register */ + uint32_t RESERVED5[6]; + __I uint32_t PID4; /*!< Offset: ITM Peripheral Identification Register #4 */ + __I uint32_t PID5; /*!< Offset: ITM Peripheral Identification Register #5 */ + __I uint32_t PID6; /*!< Offset: ITM Peripheral Identification Register #6 */ + __I uint32_t PID7; /*!< Offset: ITM Peripheral Identification Register #7 */ + __I uint32_t PID0; /*!< Offset: ITM Peripheral Identification Register #0 */ + __I uint32_t PID1; /*!< Offset: ITM Peripheral Identification Register #1 */ + __I uint32_t PID2; /*!< Offset: ITM Peripheral Identification Register #2 */ + __I uint32_t PID3; /*!< Offset: ITM Peripheral Identification Register #3 */ + __I uint32_t CID0; /*!< Offset: ITM Component Identification Register #0 */ + __I uint32_t CID1; /*!< Offset: ITM Component Identification Register #1 */ + __I uint32_t CID2; /*!< Offset: ITM Component Identification Register #2 */ + __I uint32_t CID3; /*!< Offset: ITM Component Identification Register #3 */ +} ITM_Type; + +/* ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0 /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFul << ITM_TPR_PRIVMASK_Pos) /*!< ITM TPR: PRIVMASK Mask */ + +/* ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23 /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1ul << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_ATBID_Pos 16 /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_ATBID_Msk (0x7Ful << ITM_TCR_ATBID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_TSPrescale_Pos 8 /*!< ITM TCR: TSPrescale Position */ +#define ITM_TCR_TSPrescale_Msk (3ul << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */ + +#define ITM_TCR_SWOENA_Pos 4 /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1ul << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3 /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1ul << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2 /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1ul << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1 /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1ul << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0 /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1ul << ITM_TCR_ITMENA_Pos) /*!< ITM TCR: ITM Enable bit Mask */ + +/* ITM Integration Write Register Definitions */ +#define ITM_IWR_ATVALIDM_Pos 0 /*!< ITM IWR: ATVALIDM Position */ +#define ITM_IWR_ATVALIDM_Msk (1ul << ITM_IWR_ATVALIDM_Pos) /*!< ITM IWR: ATVALIDM Mask */ + +/* ITM Integration Read Register Definitions */ +#define ITM_IRR_ATREADYM_Pos 0 /*!< ITM IRR: ATREADYM Position */ +#define ITM_IRR_ATREADYM_Msk (1ul << ITM_IRR_ATREADYM_Pos) /*!< ITM IRR: ATREADYM Mask */ + +/* ITM Integration Mode Control Register Definitions */ +#define ITM_IMCR_INTEGRATION_Pos 0 /*!< ITM IMCR: INTEGRATION Position */ +#define ITM_IMCR_INTEGRATION_Msk (1ul << ITM_IMCR_INTEGRATION_Pos) /*!< ITM IMCR: INTEGRATION Mask */ + +/* ITM Lock Status Register Definitions */ +#define ITM_LSR_ByteAcc_Pos 2 /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_ByteAcc_Msk (1ul << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_Access_Pos 1 /*!< ITM LSR: Access Position */ +#define ITM_LSR_Access_Msk (1ul << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_Present_Pos 0 /*!< ITM LSR: Present Position */ +#define ITM_LSR_Present_Msk (1ul << ITM_LSR_Present_Pos) /*!< ITM LSR: Present Mask */ +/*@}*/ /* end of group CMSIS_CM3_ITM */ + + +/** @addtogroup CMSIS_CM3_InterruptType CMSIS CM3 Interrupt Type + memory mapped structure for Interrupt Type + @{ + */ +typedef struct +{ + uint32_t RESERVED0; + __I uint32_t ICTR; /*!< Offset: 0x04 Interrupt Control Type Register */ +#if ((defined __CM3_REV) && (__CM3_REV >= 0x200)) + __IO uint32_t ACTLR; /*!< Offset: 0x08 Auxiliary Control Register */ +#else + uint32_t RESERVED1; +#endif +} InterruptType_Type; + +/* Interrupt Controller Type Register Definitions */ +#define InterruptType_ICTR_INTLINESNUM_Pos 0 /*!< InterruptType ICTR: INTLINESNUM Position */ +#define InterruptType_ICTR_INTLINESNUM_Msk (0x1Ful << InterruptType_ICTR_INTLINESNUM_Pos) /*!< InterruptType ICTR: INTLINESNUM Mask */ + +/* Auxiliary Control Register Definitions */ +#define InterruptType_ACTLR_DISFOLD_Pos 2 /*!< InterruptType ACTLR: DISFOLD Position */ +#define InterruptType_ACTLR_DISFOLD_Msk (1ul << InterruptType_ACTLR_DISFOLD_Pos) /*!< InterruptType ACTLR: DISFOLD Mask */ + +#define InterruptType_ACTLR_DISDEFWBUF_Pos 1 /*!< InterruptType ACTLR: DISDEFWBUF Position */ +#define InterruptType_ACTLR_DISDEFWBUF_Msk (1ul << InterruptType_ACTLR_DISDEFWBUF_Pos) /*!< InterruptType ACTLR: DISDEFWBUF Mask */ + +#define InterruptType_ACTLR_DISMCYCINT_Pos 0 /*!< InterruptType ACTLR: DISMCYCINT Position */ +#define InterruptType_ACTLR_DISMCYCINT_Msk (1ul << InterruptType_ACTLR_DISMCYCINT_Pos) /*!< InterruptType ACTLR: DISMCYCINT Mask */ +/*@}*/ /* end of group CMSIS_CM3_InterruptType */ + + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1) +/** @addtogroup CMSIS_CM3_MPU CMSIS CM3 MPU + memory mapped structure for Memory Protection Unit (MPU) + @{ + */ +typedef struct +{ + __I uint32_t TYPE; /*!< Offset: 0x00 MPU Type Register */ + __IO uint32_t CTRL; /*!< Offset: 0x04 MPU Control Register */ + __IO uint32_t RNR; /*!< Offset: 0x08 MPU Region RNRber Register */ + __IO uint32_t RBAR; /*!< Offset: 0x0C MPU Region Base Address Register */ + __IO uint32_t RASR; /*!< Offset: 0x10 MPU Region Attribute and Size Register */ + __IO uint32_t RBAR_A1; /*!< Offset: 0x14 MPU Alias 1 Region Base Address Register */ + __IO uint32_t RASR_A1; /*!< Offset: 0x18 MPU Alias 1 Region Attribute and Size Register */ + __IO uint32_t RBAR_A2; /*!< Offset: 0x1C MPU Alias 2 Region Base Address Register */ + __IO uint32_t RASR_A2; /*!< Offset: 0x20 MPU Alias 2 Region Attribute and Size Register */ + __IO uint32_t RBAR_A3; /*!< Offset: 0x24 MPU Alias 3 Region Base Address Register */ + __IO uint32_t RASR_A3; /*!< Offset: 0x28 MPU Alias 3 Region Attribute and Size Register */ +} MPU_Type; + +/* MPU Type Register */ +#define MPU_TYPE_IREGION_Pos 16 /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFul << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8 /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFul << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0 /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1ul << MPU_TYPE_SEPARATE_Pos) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register */ +#define MPU_CTRL_PRIVDEFENA_Pos 2 /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1ul << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1 /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1ul << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0 /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1ul << MPU_CTRL_ENABLE_Pos) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register */ +#define MPU_RNR_REGION_Pos 0 /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFul << MPU_RNR_REGION_Pos) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register */ +#define MPU_RBAR_ADDR_Pos 5 /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0x7FFFFFFul << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4 /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1ul << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0 /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFul << MPU_RBAR_REGION_Pos) /*!< MPU RBAR: REGION Mask */ + +/* MPU Region Attribute and Size Register */ +#define MPU_RASR_XN_Pos 28 /*!< MPU RASR: XN Position */ +#define MPU_RASR_XN_Msk (1ul << MPU_RASR_XN_Pos) /*!< MPU RASR: XN Mask */ + +#define MPU_RASR_AP_Pos 24 /*!< MPU RASR: AP Position */ +#define MPU_RASR_AP_Msk (7ul << MPU_RASR_AP_Pos) /*!< MPU RASR: AP Mask */ + +#define MPU_RASR_TEX_Pos 19 /*!< MPU RASR: TEX Position */ +#define MPU_RASR_TEX_Msk (7ul << MPU_RASR_TEX_Pos) /*!< MPU RASR: TEX Mask */ + +#define MPU_RASR_S_Pos 18 /*!< MPU RASR: Shareable bit Position */ +#define MPU_RASR_S_Msk (1ul << MPU_RASR_S_Pos) /*!< MPU RASR: Shareable bit Mask */ + +#define MPU_RASR_C_Pos 17 /*!< MPU RASR: Cacheable bit Position */ +#define MPU_RASR_C_Msk (1ul << MPU_RASR_C_Pos) /*!< MPU RASR: Cacheable bit Mask */ + +#define MPU_RASR_B_Pos 16 /*!< MPU RASR: Bufferable bit Position */ +#define MPU_RASR_B_Msk (1ul << MPU_RASR_B_Pos) /*!< MPU RASR: Bufferable bit Mask */ + +#define MPU_RASR_SRD_Pos 8 /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFul << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1 /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1Ful << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENA_Pos 0 /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENA_Msk (0x1Ful << MPU_RASR_ENA_Pos) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@}*/ /* end of group CMSIS_CM3_MPU */ +#endif + + +/** @addtogroup CMSIS_CM3_CoreDebug CMSIS CM3 Core Debug + memory mapped structure for Core Debug Register + @{ + */ +typedef struct +{ + __IO uint32_t DHCSR; /*!< Offset: 0x00 Debug Halting Control and Status Register */ + __O uint32_t DCRSR; /*!< Offset: 0x04 Debug Core Register Selector Register */ + __IO uint32_t DCRDR; /*!< Offset: 0x08 Debug Core Register Data Register */ + __IO uint32_t DEMCR; /*!< Offset: 0x0C Debug Exception and Monitor Control Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16 /*!< CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFul << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25 /*!< CoreDebug DHCSR: S_RESET_ST Position */ +#define CoreDebug_DHCSR_S_RESET_ST_Msk (1ul << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24 /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1ul << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ + +#define CoreDebug_DHCSR_S_LOCKUP_Pos 19 /*!< CoreDebug DHCSR: S_LOCKUP Position */ +#define CoreDebug_DHCSR_S_LOCKUP_Msk (1ul << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ + +#define CoreDebug_DHCSR_S_SLEEP_Pos 18 /*!< CoreDebug DHCSR: S_SLEEP Position */ +#define CoreDebug_DHCSR_S_SLEEP_Msk (1ul << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ + +#define CoreDebug_DHCSR_S_HALT_Pos 17 /*!< CoreDebug DHCSR: S_HALT Position */ +#define CoreDebug_DHCSR_S_HALT_Msk (1ul << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ + +#define CoreDebug_DHCSR_S_REGRDY_Pos 16 /*!< CoreDebug DHCSR: S_REGRDY Position */ +#define CoreDebug_DHCSR_S_REGRDY_Msk (1ul << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5 /*!< CoreDebug DHCSR: C_SNAPSTALL Position */ +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1ul << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */ + +#define CoreDebug_DHCSR_C_MASKINTS_Pos 3 /*!< CoreDebug DHCSR: C_MASKINTS Position */ +#define CoreDebug_DHCSR_C_MASKINTS_Msk (1ul << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ + +#define CoreDebug_DHCSR_C_STEP_Pos 2 /*!< CoreDebug DHCSR: C_STEP Position */ +#define CoreDebug_DHCSR_C_STEP_Msk (1ul << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ + +#define CoreDebug_DHCSR_C_HALT_Pos 1 /*!< CoreDebug DHCSR: C_HALT Position */ +#define CoreDebug_DHCSR_C_HALT_Msk (1ul << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0 /*!< CoreDebug DHCSR: C_DEBUGEN Position */ +#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1ul << CoreDebug_DHCSR_C_DEBUGEN_Pos) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ + +/* Debug Core Register Selector Register */ +#define CoreDebug_DCRSR_REGWnR_Pos 16 /*!< CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1ul << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0 /*!< CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1Ful << CoreDebug_DCRSR_REGSEL_Pos) /*!< CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register */ +#define CoreDebug_DEMCR_TRCENA_Pos 24 /*!< CoreDebug DEMCR: TRCENA Position */ +#define CoreDebug_DEMCR_TRCENA_Msk (1ul << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ + +#define CoreDebug_DEMCR_MON_REQ_Pos 19 /*!< CoreDebug DEMCR: MON_REQ Position */ +#define CoreDebug_DEMCR_MON_REQ_Msk (1ul << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */ + +#define CoreDebug_DEMCR_MON_STEP_Pos 18 /*!< CoreDebug DEMCR: MON_STEP Position */ +#define CoreDebug_DEMCR_MON_STEP_Msk (1ul << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */ + +#define CoreDebug_DEMCR_MON_PEND_Pos 17 /*!< CoreDebug DEMCR: MON_PEND Position */ +#define CoreDebug_DEMCR_MON_PEND_Msk (1ul << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */ + +#define CoreDebug_DEMCR_MON_EN_Pos 16 /*!< CoreDebug DEMCR: MON_EN Position */ +#define CoreDebug_DEMCR_MON_EN_Msk (1ul << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */ + +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10 /*!< CoreDebug DEMCR: VC_HARDERR Position */ +#define CoreDebug_DEMCR_VC_HARDERR_Msk (1ul << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ + +#define CoreDebug_DEMCR_VC_INTERR_Pos 9 /*!< CoreDebug DEMCR: VC_INTERR Position */ +#define CoreDebug_DEMCR_VC_INTERR_Msk (1ul << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */ + +#define CoreDebug_DEMCR_VC_BUSERR_Pos 8 /*!< CoreDebug DEMCR: VC_BUSERR Position */ +#define CoreDebug_DEMCR_VC_BUSERR_Msk (1ul << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */ + +#define CoreDebug_DEMCR_VC_STATERR_Pos 7 /*!< CoreDebug DEMCR: VC_STATERR Position */ +#define CoreDebug_DEMCR_VC_STATERR_Msk (1ul << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */ + +#define CoreDebug_DEMCR_VC_CHKERR_Pos 6 /*!< CoreDebug DEMCR: VC_CHKERR Position */ +#define CoreDebug_DEMCR_VC_CHKERR_Msk (1ul << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */ + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5 /*!< CoreDebug DEMCR: VC_NOCPERR Position */ +#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1ul << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */ + +#define CoreDebug_DEMCR_VC_MMERR_Pos 4 /*!< CoreDebug DEMCR: VC_MMERR Position */ +#define CoreDebug_DEMCR_VC_MMERR_Msk (1ul << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */ + +#define CoreDebug_DEMCR_VC_CORERESET_Pos 0 /*!< CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1ul << CoreDebug_DEMCR_VC_CORERESET_Pos) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ +/*@}*/ /* end of group CMSIS_CM3_CoreDebug */ + + +/* Memory mapping of Cortex-M3 Hardware */ +#define SCS_BASE (0xE000E000) /*!< System Control Space Base Address */ +#define ITM_BASE (0xE0000000) /*!< ITM Base Address */ +#define CoreDebug_BASE (0xE000EDF0) /*!< Core Debug Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00) /*!< System Control Block Base Address */ + +#define InterruptType ((InterruptType_Type *) SCS_BASE) /*!< Interrupt Type Register */ +#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 CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1) + #define MPU_BASE (SCS_BASE + 0x0D90) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type*) MPU_BASE) /*!< Memory Protection Unit */ +#endif + +/*@}*/ /* end of group CMSIS_CM3_core_register */ + + +/******************************************************************************* + * Hardware Abstraction Layer + ******************************************************************************/ + +#if defined ( __CC_ARM ) + #define __ASM __asm /*!< asm keyword for ARM Compiler */ + #define __INLINE __inline /*!< inline keyword for ARM Compiler */ + +#elif defined ( __ICCARM__ ) + #define __ASM __asm /*!< asm keyword for IAR Compiler */ + #define __INLINE inline /*!< inline keyword for IAR Compiler. Only avaiable in High optimization mode! */ + +#elif defined ( __GNUC__ ) + #define __ASM __asm /*!< asm keyword for GNU Compiler */ + #define __INLINE inline /*!< inline keyword for GNU Compiler */ + +#elif defined ( __TASKING__ ) + #define __ASM __asm /*!< asm keyword for TASKING Compiler */ + #define __INLINE inline /*!< inline keyword for TASKING Compiler */ + +#endif + + +/* ################### Compiler specific Intrinsics ########################### */ + +#if defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/ +/* ARM armcc specific functions */ + +#define __enable_fault_irq __enable_fiq +#define __disable_fault_irq __disable_fiq + +#define __NOP __nop +#define __WFI __wfi +#define __WFE __wfe +#define __SEV __sev +#define __ISB() __isb(0) +#define __DSB() __dsb(0) +#define __DMB() __dmb(0) +#define __REV __rev +#define __RBIT __rbit +#define __LDREXB(ptr) ((unsigned char ) __ldrex(ptr)) +#define __LDREXH(ptr) ((unsigned short) __ldrex(ptr)) +#define __LDREXW(ptr) ((unsigned int ) __ldrex(ptr)) +#define __STREXB(value, ptr) __strex(value, ptr) +#define __STREXH(value, ptr) __strex(value, ptr) +#define __STREXW(value, ptr) __strex(value, ptr) + + +/* intrinsic unsigned long long __ldrexd(volatile void *ptr) */ +/* intrinsic int __strexd(unsigned long long val, volatile void *ptr) */ +/* intrinsic void __enable_irq(); */ +/* intrinsic void __disable_irq(); */ + + +/** + * @brief Return the Process Stack Pointer + * + * @return ProcessStackPointer + * + * Return the actual process stack pointer + */ +extern uint32_t __get_PSP(void); + +/** + * @brief Set the Process Stack Pointer + * + * @param topOfProcStack Process Stack Pointer + * + * Assign the value ProcessStackPointer to the MSP + * (process stack pointer) Cortex processor register + */ +extern void __set_PSP(uint32_t topOfProcStack); + +/** + * @brief Return the Main Stack Pointer + * + * @return Main Stack Pointer + * + * Return the current value of the MSP (main stack pointer) + * Cortex processor register + */ +extern uint32_t __get_MSP(void); + +/** + * @brief Set the Main Stack Pointer + * + * @param topOfMainStack Main Stack Pointer + * + * Assign the value mainStackPointer to the MSP + * (main stack pointer) Cortex processor register + */ +extern void __set_MSP(uint32_t topOfMainStack); + +/** + * @brief Reverse byte order in unsigned short value + * + * @param value value to reverse + * @return reversed value + * + * Reverse byte order in unsigned short value + */ +extern uint32_t __REV16(uint16_t value); + +/** + * @brief Reverse byte order in signed short value with sign extension to integer + * + * @param value value to reverse + * @return reversed value + * + * Reverse byte order in signed short value with sign extension to integer + */ +extern int32_t __REVSH(int16_t value); + + +#if (__ARMCC_VERSION < 400000) + +/** + * @brief Remove the exclusive lock created by ldrex + * + * Removes the exclusive lock which is created by ldrex. + */ +extern void __CLREX(void); + +/** + * @brief Return the Base Priority value + * + * @return BasePriority + * + * Return the content of the base priority register + */ +extern uint32_t __get_BASEPRI(void); + +/** + * @brief Set the Base Priority value + * + * @param basePri BasePriority + * + * Set the base priority register + */ +extern void __set_BASEPRI(uint32_t basePri); + +/** + * @brief Return the Priority Mask value + * + * @return PriMask + * + * Return state of the priority mask bit from the priority mask register + */ +extern uint32_t __get_PRIMASK(void); + +/** + * @brief Set the Priority Mask value + * + * @param priMask PriMask + * + * Set the priority mask bit in the priority mask register + */ +extern void __set_PRIMASK(uint32_t priMask); + +/** + * @brief Return the Fault Mask value + * + * @return FaultMask + * + * Return the content of the fault mask register + */ +extern uint32_t __get_FAULTMASK(void); + +/** + * @brief Set the Fault Mask value + * + * @param faultMask faultMask value + * + * Set the fault mask register + */ +extern void __set_FAULTMASK(uint32_t faultMask); + +/** + * @brief Return the Control Register value + * + * @return Control value + * + * Return the content of the control register + */ +extern uint32_t __get_CONTROL(void); + +/** + * @brief Set the Control Register value + * + * @param control Control value + * + * Set the control register + */ +extern void __set_CONTROL(uint32_t control); + +#else /* (__ARMCC_VERSION >= 400000) */ + +/** + * @brief Remove the exclusive lock created by ldrex + * + * Removes the exclusive lock which is created by ldrex. + */ +#define __CLREX __clrex + +/** + * @brief Return the Base Priority value + * + * @return BasePriority + * + * Return the content of the base priority register + */ +static __INLINE uint32_t __get_BASEPRI(void) +{ + register uint32_t __regBasePri __ASM("basepri"); + return(__regBasePri); +} + +/** + * @brief Set the Base Priority value + * + * @param basePri BasePriority + * + * Set the base priority register + */ +static __INLINE void __set_BASEPRI(uint32_t basePri) +{ + register uint32_t __regBasePri __ASM("basepri"); + __regBasePri = (basePri & 0xff); +} + +/** + * @brief Return the Priority Mask value + * + * @return PriMask + * + * Return state of the priority mask bit from the priority mask register + */ +static __INLINE uint32_t __get_PRIMASK(void) +{ + register uint32_t __regPriMask __ASM("primask"); + return(__regPriMask); +} + +/** + * @brief Set the Priority Mask value + * + * @param priMask PriMask + * + * Set the priority mask bit in the priority mask register + */ +static __INLINE void __set_PRIMASK(uint32_t priMask) +{ + register uint32_t __regPriMask __ASM("primask"); + __regPriMask = (priMask); +} + +/** + * @brief Return the Fault Mask value + * + * @return FaultMask + * + * Return the content of the fault mask register + */ +static __INLINE uint32_t __get_FAULTMASK(void) +{ + register uint32_t __regFaultMask __ASM("faultmask"); + return(__regFaultMask); +} + +/** + * @brief Set the Fault Mask value + * + * @param faultMask faultMask value + * + * Set the fault mask register + */ +static __INLINE void __set_FAULTMASK(uint32_t faultMask) +{ + register uint32_t __regFaultMask __ASM("faultmask"); + __regFaultMask = (faultMask & 1); +} + +/** + * @brief Return the Control Register value + * + * @return Control value + * + * Return the content of the control register + */ +static __INLINE uint32_t __get_CONTROL(void) +{ + register uint32_t __regControl __ASM("control"); + return(__regControl); +} + +/** + * @brief Set the Control Register value + * + * @param control Control value + * + * Set the control register + */ +static __INLINE void __set_CONTROL(uint32_t control) +{ + register uint32_t __regControl __ASM("control"); + __regControl = control; +} + +#endif /* __ARMCC_VERSION */ + + + +#elif (defined (__ICCARM__)) /*------------------ ICC Compiler -------------------*/ +/* IAR iccarm specific functions */ + +#define __enable_irq __enable_interrupt /*!< global Interrupt enable */ +#define __disable_irq __disable_interrupt /*!< global Interrupt disable */ + +static __INLINE void __enable_fault_irq() { __ASM ("cpsie f"); } +static __INLINE void __disable_fault_irq() { __ASM ("cpsid f"); } + +#define __NOP __no_operation /*!< no operation intrinsic in IAR Compiler */ +static __INLINE void __WFI() { __ASM ("wfi"); } +static __INLINE void __WFE() { __ASM ("wfe"); } +static __INLINE void __SEV() { __ASM ("sev"); } +static __INLINE void __CLREX() { __ASM ("clrex"); } + +/* intrinsic void __ISB(void) */ +/* intrinsic void __DSB(void) */ +/* intrinsic void __DMB(void) */ +/* intrinsic void __set_PRIMASK(); */ +/* intrinsic void __get_PRIMASK(); */ +/* intrinsic void __set_FAULTMASK(); */ +/* intrinsic void __get_FAULTMASK(); */ +/* intrinsic uint32_t __REV(uint32_t value); */ +/* intrinsic uint32_t __REVSH(uint32_t value); */ +/* intrinsic unsigned long __STREX(unsigned long, unsigned long); */ +/* intrinsic unsigned long __LDREX(unsigned long *); */ + + +/** + * @brief Return the Process Stack Pointer + * + * @return ProcessStackPointer + * + * Return the actual process stack pointer + */ +extern uint32_t __get_PSP(void); + +/** + * @brief Set the Process Stack Pointer + * + * @param topOfProcStack Process Stack Pointer + * + * Assign the value ProcessStackPointer to the MSP + * (process stack pointer) Cortex processor register + */ +extern void __set_PSP(uint32_t topOfProcStack); + +/** + * @brief Return the Main Stack Pointer + * + * @return Main Stack Pointer + * + * Return the current value of the MSP (main stack pointer) + * Cortex processor register + */ +extern uint32_t __get_MSP(void); + +/** + * @brief Set the Main Stack Pointer + * + * @param topOfMainStack Main Stack Pointer + * + * Assign the value mainStackPointer to the MSP + * (main stack pointer) Cortex processor register + */ +extern void __set_MSP(uint32_t topOfMainStack); + +/** + * @brief Reverse byte order in unsigned short value + * + * @param value value to reverse + * @return reversed value + * + * Reverse byte order in unsigned short value + */ +extern uint32_t __REV16(uint16_t value); + +/** + * @brief Reverse bit order of value + * + * @param value value to reverse + * @return reversed value + * + * Reverse bit order of value + */ +extern uint32_t __RBIT(uint32_t value); + +/** + * @brief LDR Exclusive (8 bit) + * + * @param *addr address pointer + * @return value of (*address) + * + * Exclusive LDR command for 8 bit values) + */ +extern uint8_t __LDREXB(uint8_t *addr); + +/** + * @brief LDR Exclusive (16 bit) + * + * @param *addr address pointer + * @return value of (*address) + * + * Exclusive LDR command for 16 bit values + */ +extern uint16_t __LDREXH(uint16_t *addr); + +/** + * @brief LDR Exclusive (32 bit) + * + * @param *addr address pointer + * @return value of (*address) + * + * Exclusive LDR command for 32 bit values + */ +extern uint32_t __LDREXW(uint32_t *addr); + +/** + * @brief STR Exclusive (8 bit) + * + * @param value value to store + * @param *addr address pointer + * @return successful / failed + * + * Exclusive STR command for 8 bit values + */ +extern uint32_t __STREXB(uint8_t value, uint8_t *addr); + +/** + * @brief STR Exclusive (16 bit) + * + * @param value value to store + * @param *addr address pointer + * @return successful / failed + * + * Exclusive STR command for 16 bit values + */ +extern uint32_t __STREXH(uint16_t value, uint16_t *addr); + +/** + * @brief STR Exclusive (32 bit) + * + * @param value value to store + * @param *addr address pointer + * @return successful / failed + * + * Exclusive STR command for 32 bit values + */ +extern uint32_t __STREXW(uint32_t value, uint32_t *addr); + + + +#elif (defined (__GNUC__)) /*------------------ GNU Compiler ---------------------*/ +/* GNU gcc specific functions */ + +static __INLINE void __enable_irq() { __ASM volatile ("cpsie i"); } +static __INLINE void __disable_irq() { __ASM volatile ("cpsid i"); } + +static __INLINE void __enable_fault_irq() { __ASM volatile ("cpsie f"); } +static __INLINE void __disable_fault_irq() { __ASM volatile ("cpsid f"); } + +static __INLINE void __NOP() { __ASM volatile ("nop"); } +static __INLINE void __WFI() { __ASM volatile ("wfi"); } +static __INLINE void __WFE() { __ASM volatile ("wfe"); } +static __INLINE void __SEV() { __ASM volatile ("sev"); } +static __INLINE void __ISB() { __ASM volatile ("isb"); } +static __INLINE void __DSB() { __ASM volatile ("dsb"); } +static __INLINE void __DMB() { __ASM volatile ("dmb"); } +static __INLINE void __CLREX() { __ASM volatile ("clrex"); } + + +/** + * @brief Return the Process Stack Pointer + * + * @return ProcessStackPointer + * + * Return the actual process stack pointer + */ +extern uint32_t __get_PSP(void); + +/** + * @brief Set the Process Stack Pointer + * + * @param topOfProcStack Process Stack Pointer + * + * Assign the value ProcessStackPointer to the MSP + * (process stack pointer) Cortex processor register + */ +extern void __set_PSP(uint32_t topOfProcStack); + +/** + * @brief Return the Main Stack Pointer + * + * @return Main Stack Pointer + * + * Return the current value of the MSP (main stack pointer) + * Cortex processor register + */ +extern uint32_t __get_MSP(void); + +/** + * @brief Set the Main Stack Pointer + * + * @param topOfMainStack Main Stack Pointer + * + * Assign the value mainStackPointer to the MSP + * (main stack pointer) Cortex processor register + */ +extern void __set_MSP(uint32_t topOfMainStack); + +/** + * @brief Return the Base Priority value + * + * @return BasePriority + * + * Return the content of the base priority register + */ +extern uint32_t __get_BASEPRI(void); + +/** + * @brief Set the Base Priority value + * + * @param basePri BasePriority + * + * Set the base priority register + */ +extern void __set_BASEPRI(uint32_t basePri); + +/** + * @brief Return the Priority Mask value + * + * @return PriMask + * + * Return state of the priority mask bit from the priority mask register + */ +extern uint32_t __get_PRIMASK(void); + +/** + * @brief Set the Priority Mask value + * + * @param priMask PriMask + * + * Set the priority mask bit in the priority mask register + */ +extern void __set_PRIMASK(uint32_t priMask); + +/** + * @brief Return the Fault Mask value + * + * @return FaultMask + * + * Return the content of the fault mask register + */ +extern uint32_t __get_FAULTMASK(void); + +/** + * @brief Set the Fault Mask value + * + * @param faultMask faultMask value + * + * Set the fault mask register + */ +extern void __set_FAULTMASK(uint32_t faultMask); + +/** + * @brief Return the Control Register value +* +* @return Control value + * + * Return the content of the control register + */ +extern uint32_t __get_CONTROL(void); + +/** + * @brief Set the Control Register value + * + * @param control Control value + * + * Set the control register + */ +extern void __set_CONTROL(uint32_t control); + +/** + * @brief Reverse byte order in integer value + * + * @param value value to reverse + * @return reversed value + * + * Reverse byte order in integer value + */ +extern uint32_t __REV(uint32_t value); + +/** + * @brief Reverse byte order in unsigned short value + * + * @param value value to reverse + * @return reversed value + * + * Reverse byte order in unsigned short value + */ +extern uint32_t __REV16(uint16_t value); + +/** + * @brief Reverse byte order in signed short value with sign extension to integer + * + * @param value value to reverse + * @return reversed value + * + * Reverse byte order in signed short value with sign extension to integer + */ +extern int32_t __REVSH(int16_t value); + +/** + * @brief Reverse bit order of value + * + * @param value value to reverse + * @return reversed value + * + * Reverse bit order of value + */ +extern uint32_t __RBIT(uint32_t value); + +/** + * @brief LDR Exclusive (8 bit) + * + * @param *addr address pointer + * @return value of (*address) + * + * Exclusive LDR command for 8 bit value + */ +extern uint8_t __LDREXB(uint8_t *addr); + +/** + * @brief LDR Exclusive (16 bit) + * + * @param *addr address pointer + * @return value of (*address) + * + * Exclusive LDR command for 16 bit values + */ +extern uint16_t __LDREXH(uint16_t *addr); + +/** + * @brief LDR Exclusive (32 bit) + * + * @param *addr address pointer + * @return value of (*address) + * + * Exclusive LDR command for 32 bit values + */ +extern uint32_t __LDREXW(uint32_t *addr); + +/** + * @brief STR Exclusive (8 bit) + * + * @param value value to store + * @param *addr address pointer + * @return successful / failed + * + * Exclusive STR command for 8 bit values + */ +extern uint32_t __STREXB(uint8_t value, uint8_t *addr); + +/** + * @brief STR Exclusive (16 bit) + * + * @param value value to store + * @param *addr address pointer + * @return successful / failed + * + * Exclusive STR command for 16 bit values + */ +extern uint32_t __STREXH(uint16_t value, uint16_t *addr); + +/** + * @brief STR Exclusive (32 bit) + * + * @param value value to store + * @param *addr address pointer + * @return successful / failed + * + * Exclusive STR command for 32 bit values + */ +extern uint32_t __STREXW(uint32_t value, uint32_t *addr); + + +#elif (defined (__TASKING__)) /*------------------ TASKING Compiler ---------------------*/ +/* TASKING carm specific functions */ + +/* + * The CMSIS functions have been implemented as intrinsics in the compiler. + * Please use "carm -?i" to get an up to date list of all instrinsics, + * Including the CMSIS ones. + */ + +#endif + + +/** @addtogroup CMSIS_CM3_Core_FunctionInterface CMSIS CM3 Core Function Interface + Core Function Interface containing: + - Core NVIC Functions + - Core SysTick Functions + - Core Reset Functions +*/ +/*@{*/ + +/* ########################## NVIC functions #################################### */ + +/** + * @brief Set the Priority Grouping in NVIC Interrupt Controller + * + * @param PriorityGroup is priority grouping field + * + * Set the priority grouping field using the required unlock sequence. + * The parameter priority_grouping 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. + */ +static __INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk); /* clear bits to change */ + reg_value = (reg_value | + (0x5FA << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << 8)); /* Insert write key and priorty group */ + SCB->AIRCR = reg_value; +} + +/** + * @brief Get the Priority Grouping from NVIC Interrupt Controller + * + * @return priority grouping field + * + * Get the priority grouping from NVIC Interrupt Controller. + * priority grouping is SCB->AIRCR [10:8] PRIGROUP field. + */ +static __INLINE uint32_t NVIC_GetPriorityGrouping(void) +{ + return ((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos); /* read priority grouping field */ +} + +/** + * @brief Enable Interrupt in NVIC Interrupt Controller + * + * @param IRQn The positive number of the external interrupt to enable + * + * Enable a device specific interupt in the NVIC interrupt controller. + * The interrupt number cannot be a negative value. + */ +static __INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) +{ + NVIC->ISER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* enable interrupt */ +} + +/** + * @brief Disable the interrupt line for external interrupt specified + * + * @param IRQn The positive number of the external interrupt to disable + * + * Disable a device specific interupt in the NVIC interrupt controller. + * The interrupt number cannot be a negative value. + */ +static __INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) +{ + NVIC->ICER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* disable interrupt */ +} + +/** + * @brief Read the interrupt pending bit for a device specific interrupt source + * + * @param IRQn The number of the device specifc interrupt + * @return 1 = interrupt pending, 0 = interrupt not pending + * + * Read the pending register in NVIC and return 1 if its status is pending, + * otherwise it returns 0 + */ +static __INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + return((uint32_t) ((NVIC->ISPR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); /* Return 1 if pending else 0 */ +} + +/** + * @brief Set the pending bit for an external interrupt + * + * @param IRQn The number of the interrupt for set pending + * + * Set the pending bit for the specified interrupt. + * The interrupt number cannot be a negative value. + */ +static __INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ISPR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* set interrupt pending */ +} + +/** + * @brief Clear the pending bit for an external interrupt + * + * @param IRQn The number of the interrupt for clear pending + * + * Clear the pending bit for the specified interrupt. + * The interrupt number cannot be a negative value. + */ +static __INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ICPR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* Clear pending interrupt */ +} + +/** + * @brief Read the active bit for an external interrupt + * + * @param IRQn The number of the interrupt for read active bit + * @return 1 = interrupt active, 0 = interrupt not active + * + * Read the active register in NVIC and returns 1 if its status is active, + * otherwise it returns 0. + */ +static __INLINE uint32_t NVIC_GetActive(IRQn_Type IRQn) +{ + return((uint32_t)((NVIC->IABR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); /* Return 1 if active else 0 */ +} + +/** + * @brief Set the priority for an interrupt + * + * @param IRQn The number of the interrupt for set priority + * @param priority The priority to set + * + * Set the priority for the specified interrupt. The interrupt + * number can be positive to specify an external (device specific) + * interrupt, or negative to specify an internal (core) interrupt. + * + * Note: The priority cannot be set for every core interrupt. + */ +static __INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if(IRQn < 0) { + SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for Cortex-M3 System Interrupts */ + else { + NVIC->IP[(uint32_t)(IRQn)] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for device specific Interrupts */ +} + +/** + * @brief Read the priority for an interrupt + * + * @param IRQn The number of the interrupt for get priority + * @return The priority for the interrupt + * + * Read the priority for the specified interrupt. The interrupt + * number can be positive to specify an external (device specific) + * interrupt, or negative to specify an internal (core) interrupt. + * + * The returned priority value is automatically aligned to the implemented + * priority bits of the microcontroller. + * + * Note: The priority cannot be set for every core interrupt. + */ +static __INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) +{ + + if(IRQn < 0) { + return((uint32_t)(SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for Cortex-M3 system interrupts */ + else { + return((uint32_t)(NVIC->IP[(uint32_t)(IRQn)] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for device specific interrupts */ +} + + +/** + * @brief Encode the priority for an interrupt + * + * @param PriorityGroup The used priority group + * @param PreemptPriority The preemptive priority value (starting from 0) + * @param SubPriority The sub priority value (starting from 0) + * @return The encoded priority for the interrupt + * + * Encode the priority for an interrupt with the given priority group, + * preemptive priority value and sub priority value. + * In case of a conflict between priority grouping and available + * priority bits (__NVIC_PRIO_BITS) the samllest possible priority group is set. + * + * The returned priority value can be used for NVIC_SetPriority(...) function + */ +static __INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp; + SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS; + + return ( + ((PreemptPriority & ((1 << (PreemptPriorityBits)) - 1)) << SubPriorityBits) | + ((SubPriority & ((1 << (SubPriorityBits )) - 1))) + ); +} + + +/** + * @brief Decode the priority of an interrupt + * + * @param Priority The priority for the interrupt + * @param PriorityGroup The used priority group + * @param pPreemptPriority The preemptive priority value (starting from 0) + * @param pSubPriority The sub priority value (starting from 0) + * + * Decode an interrupt priority value with the given priority group to + * preemptive priority value and sub priority value. + * In case of a conflict between priority grouping and available + * priority bits (__NVIC_PRIO_BITS) the samllest possible priority group is set. + * + * The priority value can be retrieved with NVIC_GetPriority(...) function + */ +static __INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* pPreemptPriority, uint32_t* pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp; + SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS; + + *pPreemptPriority = (Priority >> SubPriorityBits) & ((1 << (PreemptPriorityBits)) - 1); + *pSubPriority = (Priority ) & ((1 << (SubPriorityBits )) - 1); +} + + + +/* ################################## SysTick function ############################################ */ + +#if (!defined (__Vendor_SysTickConfig)) || (__Vendor_SysTickConfig == 0) + +/** + * @brief Initialize and start the SysTick counter and its interrupt. + * + * @param ticks number of ticks between two interrupts + * @return 1 = failed, 0 = successful + * + * Initialise the system tick timer and its interrupt and start the + * system tick timer / counter in free running mode to generate + * periodical interrupts. + */ +static __INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if (ticks > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */ + + SysTick->LOAD = (ticks & SysTick_LOAD_RELOAD_Msk) - 1; /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Cortex-M0 System Interrupts */ + SysTick->VAL = 0; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0); /* Function successful */ +} + +#endif + + + + +/* ################################## Reset function ############################################ */ + +/** + * @brief Initiate a system reset request. + * + * Initiate a system reset request to reset the MCU + */ +static __INLINE void NVIC_SystemReset(void) +{ + SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + while(1); /* wait until reset */ +} + +/*@}*/ /* end of group CMSIS_CM3_Core_FunctionInterface */ + + + +/* ##################################### Debug In/Output function ########################################### */ + +/** @addtogroup CMSIS_CM3_CoreDebugInterface CMSIS CM3 Core Debug Interface + Core Debug Interface containing: + - Core Debug Receive / Transmit Functions + - Core Debug Defines + - Core Debug Variables +*/ +/*@{*/ + +extern volatile int ITM_RxBuffer; /*!< variable to receive characters */ +#define ITM_RXBUFFER_EMPTY 0x5AA55AA5 /*!< value identifying ITM_RxBuffer is ready for next character */ + + +/** + * @brief Outputs a character via the ITM channel 0 + * + * @param ch character to output + * @return character to output + * + * The function outputs a character via the ITM channel 0. + * The function returns when no debugger is connected that has booked the output. + * It is blocking when a debugger is connected, but the previous character send is not transmitted. + */ +static __INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if ((CoreDebug->DEMCR & CoreDebug_DEMCR_TRCENA_Msk) && /* Trace enabled */ + (ITM->TCR & ITM_TCR_ITMENA_Msk) && /* ITM enabled */ + (ITM->TER & (1ul << 0) ) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0].u32 == 0); + ITM->PORT[0].u8 = (uint8_t) ch; + } + return (ch); +} + + +/** + * @brief Inputs a character via variable ITM_RxBuffer + * + * @return received character, -1 = no character received + * + * The function inputs a character via variable ITM_RxBuffer. + * The function returns when no debugger is connected that has booked the output. + * It is blocking when a debugger is connected, but the previous character send is not transmitted. + */ +static __INLINE int ITM_ReceiveChar (void) { + int 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 Check if a character via variable ITM_RxBuffer is available + * + * @return 1 = character available, 0 = no character available + * + * The function checks variable ITM_RxBuffer whether a character is available or not. + * The function returns '1' if a character is available and '0' if no character is available. + */ +static __INLINE int ITM_CheckChar (void) { + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) { + return (0); /* no character available */ + } else { + return (1); /* character available */ + } +} + +/*@}*/ /* end of group CMSIS_CM3_core_DebugInterface */ + + +#ifdef __cplusplus +} +#endif + +/*@}*/ /* end of group CMSIS_CM3_core_definitions */ + +#endif /* __CM3_CORE_H__ */ + +/*lint -restore */ diff --git a/boot_source/platform/CMSIS/ST/STM32F10x/Source/TrueSTUDIO/startup_stm32f10x_cl.s b/boot_source/platform/CMSIS/ST/STM32F10x/Source/TrueSTUDIO/startup_stm32f10x_cl.s new file mode 100644 index 0000000..9299f48 --- /dev/null +++ b/boot_source/platform/CMSIS/ST/STM32F10x/Source/TrueSTUDIO/startup_stm32f10x_cl.s @@ -0,0 +1,471 @@ +/** + ****************************************************************************** + * @file startup_stm32f10x_cl.s + * @author MCD Application Team + * @version V3.5.1 + * @date 08-September-2021 + * @brief STM32F10x Connectivity line Devices vector table for Atollic + * toolchain. + * This module performs: + * - Set the initial SP + * - Set the initial PC == Reset_Handler, + * - Set the vector table entries with the exceptions ISR + * address. + * - Configure the clock system + * - Branches to main in the C library (which eventually + * calls main()). + * After Reset the Cortex-M3 processor is in Thread mode, + * priority is Privileged, and the Stack is set to Main. + ****************************************************************************** + * @attention + * + * Copyright (c) 2011 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-m3 + .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 + +.equ BootRAM, 0xF1E0F85F +/** + * @brief This is the code that gets called when the processor first + * starts execution following a reset event. Only the absolutely + * necessary set is performed, after which the application + * supplied main() routine is called. + * @param None + * @retval : None +*/ + + .section .text.Reset_Handler + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss + +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2], #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call the clock system intitialization function.*/ + bl SystemInit +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + bx lr +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler + +/****************************************************************************** +* +* The minimal vector table for a Cortex M3. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word MemManage_Handler + .word BusFault_Handler + .word UsageFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word DebugMon_Handler + .word 0 + .word PendSV_Handler + .word SysTick_Handler + .word WWDG_IRQHandler + .word PVD_IRQHandler + .word TAMPER_IRQHandler + .word RTC_IRQHandler + .word FLASH_IRQHandler + .word RCC_IRQHandler + .word EXTI0_IRQHandler + .word EXTI1_IRQHandler + .word EXTI2_IRQHandler + .word EXTI3_IRQHandler + .word EXTI4_IRQHandler + .word DMA1_Channel1_IRQHandler + .word DMA1_Channel2_IRQHandler + .word DMA1_Channel3_IRQHandler + .word DMA1_Channel4_IRQHandler + .word DMA1_Channel5_IRQHandler + .word DMA1_Channel6_IRQHandler + .word DMA1_Channel7_IRQHandler + .word ADC1_2_IRQHandler + .word CAN1_TX_IRQHandler + .word CAN1_RX0_IRQHandler + .word CAN1_RX1_IRQHandler + .word CAN1_SCE_IRQHandler + .word EXTI9_5_IRQHandler + .word TIM1_BRK_IRQHandler + .word TIM1_UP_IRQHandler + .word TIM1_TRG_COM_IRQHandler + .word TIM1_CC_IRQHandler + .word TIM2_IRQHandler + .word TIM3_IRQHandler + .word TIM4_IRQHandler + .word I2C1_EV_IRQHandler + .word I2C1_ER_IRQHandler + .word I2C2_EV_IRQHandler + .word I2C2_ER_IRQHandler + .word SPI1_IRQHandler + .word SPI2_IRQHandler + .word USART1_IRQHandler + .word USART2_IRQHandler + .word USART3_IRQHandler + .word EXTI15_10_IRQHandler + .word RTCAlarm_IRQHandler + .word OTG_FS_WKUP_IRQHandler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word TIM5_IRQHandler + .word SPI3_IRQHandler + .word UART4_IRQHandler + .word UART5_IRQHandler + .word TIM6_IRQHandler + .word TIM7_IRQHandler + .word DMA2_Channel1_IRQHandler + .word DMA2_Channel2_IRQHandler + .word DMA2_Channel3_IRQHandler + .word DMA2_Channel4_IRQHandler + .word DMA2_Channel5_IRQHandler + .word ETH_IRQHandler + .word ETH_WKUP_IRQHandler + .word CAN2_TX_IRQHandler + .word CAN2_RX0_IRQHandler + .word CAN2_RX1_IRQHandler + .word CAN2_SCE_IRQHandler + .word OTG_FS_IRQHandler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word BootRAM /* @0x1E0. This is for boot in RAM mode for + STM32F10x Connectivity line Devices. */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak MemManage_Handler + .thumb_set MemManage_Handler,Default_Handler + + .weak BusFault_Handler + .thumb_set BusFault_Handler,Default_Handler + + .weak UsageFault_Handler + .thumb_set UsageFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak DebugMon_Handler + .thumb_set DebugMon_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak WWDG_IRQHandler + .thumb_set WWDG_IRQHandler,Default_Handler + + .weak PVD_IRQHandler + .thumb_set PVD_IRQHandler,Default_Handler + + .weak TAMPER_IRQHandler + .thumb_set TAMPER_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_IRQHandler + .thumb_set EXTI0_IRQHandler,Default_Handler + + .weak EXTI1_IRQHandler + .thumb_set EXTI1_IRQHandler,Default_Handler + + .weak EXTI2_IRQHandler + .thumb_set EXTI2_IRQHandler,Default_Handler + + .weak EXTI3_IRQHandler + .thumb_set EXTI3_IRQHandler,Default_Handler + + .weak EXTI4_IRQHandler + .thumb_set EXTI4_IRQHandler,Default_Handler + + .weak DMA1_Channel1_IRQHandler + .thumb_set DMA1_Channel1_IRQHandler,Default_Handler + + .weak DMA1_Channel2_IRQHandler + .thumb_set DMA1_Channel2_IRQHandler,Default_Handler + + .weak DMA1_Channel3_IRQHandler + .thumb_set DMA1_Channel3_IRQHandler,Default_Handler + + .weak DMA1_Channel4_IRQHandler + .thumb_set DMA1_Channel4_IRQHandler,Default_Handler + + .weak DMA1_Channel5_IRQHandler + .thumb_set DMA1_Channel5_IRQHandler,Default_Handler + + .weak DMA1_Channel6_IRQHandler + .thumb_set DMA1_Channel6_IRQHandler,Default_Handler + + .weak DMA1_Channel7_IRQHandler + .thumb_set DMA1_Channel7_IRQHandler,Default_Handler + + .weak ADC1_2_IRQHandler + .thumb_set ADC1_2_IRQHandler,Default_Handler + + .weak CAN1_TX_IRQHandler + .thumb_set CAN1_TX_IRQHandler,Default_Handler + + .weak CAN1_RX0_IRQHandler + .thumb_set CAN1_RX0_IRQHandler,Default_Handler + + .weak CAN1_RX1_IRQHandler + .thumb_set CAN1_RX1_IRQHandler,Default_Handler + + .weak CAN1_SCE_IRQHandler + .thumb_set CAN1_SCE_IRQHandler,Default_Handler + + .weak EXTI9_5_IRQHandler + .thumb_set EXTI9_5_IRQHandler,Default_Handler + + .weak TIM1_BRK_IRQHandler + .thumb_set TIM1_BRK_IRQHandler,Default_Handler + + .weak TIM1_UP_IRQHandler + .thumb_set TIM1_UP_IRQHandler,Default_Handler + + .weak TIM1_TRG_COM_IRQHandler + .thumb_set TIM1_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 TIM4_IRQHandler + .thumb_set TIM4_IRQHandler,Default_Handler + + .weak I2C1_EV_IRQHandler + .thumb_set I2C1_EV_IRQHandler,Default_Handler + + .weak I2C1_ER_IRQHandler + .thumb_set I2C1_ER_IRQHandler,Default_Handler + + .weak I2C2_EV_IRQHandler + .thumb_set I2C2_EV_IRQHandler,Default_Handler + + .weak I2C2_ER_IRQHandler + .thumb_set I2C2_ER_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak USART1_IRQHandler + .thumb_set USART1_IRQHandler,Default_Handler + + .weak USART2_IRQHandler + .thumb_set USART2_IRQHandler,Default_Handler + + .weak USART3_IRQHandler + .thumb_set USART3_IRQHandler,Default_Handler + + .weak EXTI15_10_IRQHandler + .thumb_set EXTI15_10_IRQHandler,Default_Handler + + .weak RTCAlarm_IRQHandler + .thumb_set RTCAlarm_IRQHandler,Default_Handler + + .weak OTG_FS_WKUP_IRQHandler + .thumb_set OTG_FS_WKUP_IRQHandler,Default_Handler + + .weak TIM5_IRQHandler + .thumb_set TIM5_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak TIM6_IRQHandler + .thumb_set TIM6_IRQHandler,Default_Handler + + .weak TIM7_IRQHandler + .thumb_set TIM7_IRQHandler,Default_Handler + + .weak DMA2_Channel1_IRQHandler + .thumb_set DMA2_Channel1_IRQHandler,Default_Handler + + .weak DMA2_Channel2_IRQHandler + .thumb_set DMA2_Channel2_IRQHandler,Default_Handler + + .weak DMA2_Channel3_IRQHandler + .thumb_set DMA2_Channel3_IRQHandler,Default_Handler + + .weak DMA2_Channel4_IRQHandler + .thumb_set DMA2_Channel4_IRQHandler,Default_Handler + + .weak DMA2_Channel5_IRQHandler + .thumb_set DMA2_Channel5_IRQHandler,Default_Handler + + .weak ETH_IRQHandler + .thumb_set ETH_IRQHandler,Default_Handler + + .weak ETH_WKUP_IRQHandler + .thumb_set ETH_WKUP_IRQHandler,Default_Handler + + .weak CAN2_TX_IRQHandler + .thumb_set CAN2_TX_IRQHandler,Default_Handler + + .weak CAN2_RX0_IRQHandler + .thumb_set CAN2_RX0_IRQHandler,Default_Handler + + .weak CAN2_RX1_IRQHandler + .thumb_set CAN2_RX1_IRQHandler,Default_Handler + + .weak CAN2_SCE_IRQHandler + .thumb_set CAN2_SCE_IRQHandler,Default_Handler + + .weak OTG_FS_IRQHandler + .thumb_set OTG_FS_IRQHandler ,Default_Handler + diff --git a/boot_source/platform/CMSIS/ST/STM32F10x/Source/TrueSTUDIO/startup_stm32f10x_hd.s b/boot_source/platform/CMSIS/ST/STM32F10x/Source/TrueSTUDIO/startup_stm32f10x_hd.s new file mode 100644 index 0000000..bd3aa14 --- /dev/null +++ b/boot_source/platform/CMSIS/ST/STM32F10x/Source/TrueSTUDIO/startup_stm32f10x_hd.s @@ -0,0 +1,467 @@ +/** + ****************************************************************************** + * @file startup_stm32f10x_hd.s + * @author MCD Application Team + * @version V3.5.1 + * @date 08-September-2021 + * @brief STM32F10x High Density Devices vector table for Atollic toolchain. + * This module performs: + * - Set the initial SP + * - Set the initial PC == Reset_Handler, + * - Set the vector table entries with the exceptions ISR address, + * - Configure the clock system + * - Configure external SRAM mounted on STM3210E-EVAL board + * to be used as data memory (optional, to be enabled by user) + * - Branches to main in the C library (which eventually + * calls main()). + * After Reset the Cortex-M3 processor is in Thread mode, + * priority is Privileged, and the Stack is set to Main. + ****************************************************************************** + * @attention + * + * Copyright (c) 2011 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-m3 + .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 + +.equ BootRAM, 0xF1E0F85F +/** + * @brief This is the code that gets called when the processor first + * starts execution following a reset event. Only the absolutely + * necessary set is performed, after which the application + * supplied main() routine is called. + * @param None + * @retval : None +*/ + + .section .text.Reset_Handler + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2], #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call the clock system intitialization function.*/ + bl SystemInit +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + bx lr +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M3. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word MemManage_Handler + .word BusFault_Handler + .word UsageFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word DebugMon_Handler + .word 0 + .word PendSV_Handler + .word SysTick_Handler + .word WWDG_IRQHandler + .word PVD_IRQHandler + .word TAMPER_IRQHandler + .word RTC_IRQHandler + .word FLASH_IRQHandler + .word RCC_IRQHandler + .word EXTI0_IRQHandler + .word EXTI1_IRQHandler + .word EXTI2_IRQHandler + .word EXTI3_IRQHandler + .word EXTI4_IRQHandler + .word DMA1_Channel1_IRQHandler + .word DMA1_Channel2_IRQHandler + .word DMA1_Channel3_IRQHandler + .word DMA1_Channel4_IRQHandler + .word DMA1_Channel5_IRQHandler + .word DMA1_Channel6_IRQHandler + .word DMA1_Channel7_IRQHandler + .word ADC1_2_IRQHandler + .word USB_HP_CAN1_TX_IRQHandler + .word USB_LP_CAN1_RX0_IRQHandler + .word CAN1_RX1_IRQHandler + .word CAN1_SCE_IRQHandler + .word EXTI9_5_IRQHandler + .word TIM1_BRK_IRQHandler + .word TIM1_UP_IRQHandler + .word TIM1_TRG_COM_IRQHandler + .word TIM1_CC_IRQHandler + .word TIM2_IRQHandler + .word TIM3_IRQHandler + .word TIM4_IRQHandler + .word I2C1_EV_IRQHandler + .word I2C1_ER_IRQHandler + .word I2C2_EV_IRQHandler + .word I2C2_ER_IRQHandler + .word SPI1_IRQHandler + .word SPI2_IRQHandler + .word USART1_IRQHandler + .word USART2_IRQHandler + .word USART3_IRQHandler + .word EXTI15_10_IRQHandler + .word RTCAlarm_IRQHandler + .word USBWakeUp_IRQHandler + .word TIM8_BRK_IRQHandler + .word TIM8_UP_IRQHandler + .word TIM8_TRG_COM_IRQHandler + .word TIM8_CC_IRQHandler + .word ADC3_IRQHandler + .word FSMC_IRQHandler + .word SDIO_IRQHandler + .word TIM5_IRQHandler + .word SPI3_IRQHandler + .word UART4_IRQHandler + .word UART5_IRQHandler + .word TIM6_IRQHandler + .word TIM7_IRQHandler + .word DMA2_Channel1_IRQHandler + .word DMA2_Channel2_IRQHandler + .word DMA2_Channel3_IRQHandler + .word DMA2_Channel4_5_IRQHandler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word BootRAM /* @0x1E0. This is for boot in RAM mode for + STM32F10x High Density devices. */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak MemManage_Handler + .thumb_set MemManage_Handler,Default_Handler + + .weak BusFault_Handler + .thumb_set BusFault_Handler,Default_Handler + + .weak UsageFault_Handler + .thumb_set UsageFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak DebugMon_Handler + .thumb_set DebugMon_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak WWDG_IRQHandler + .thumb_set WWDG_IRQHandler,Default_Handler + + .weak PVD_IRQHandler + .thumb_set PVD_IRQHandler,Default_Handler + + .weak TAMPER_IRQHandler + .thumb_set TAMPER_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_IRQHandler + .thumb_set EXTI0_IRQHandler,Default_Handler + + .weak EXTI1_IRQHandler + .thumb_set EXTI1_IRQHandler,Default_Handler + + .weak EXTI2_IRQHandler + .thumb_set EXTI2_IRQHandler,Default_Handler + + .weak EXTI3_IRQHandler + .thumb_set EXTI3_IRQHandler,Default_Handler + + .weak EXTI4_IRQHandler + .thumb_set EXTI4_IRQHandler,Default_Handler + + .weak DMA1_Channel1_IRQHandler + .thumb_set DMA1_Channel1_IRQHandler,Default_Handler + + .weak DMA1_Channel2_IRQHandler + .thumb_set DMA1_Channel2_IRQHandler,Default_Handler + + .weak DMA1_Channel3_IRQHandler + .thumb_set DMA1_Channel3_IRQHandler,Default_Handler + + .weak DMA1_Channel4_IRQHandler + .thumb_set DMA1_Channel4_IRQHandler,Default_Handler + + .weak DMA1_Channel5_IRQHandler + .thumb_set DMA1_Channel5_IRQHandler,Default_Handler + + .weak DMA1_Channel6_IRQHandler + .thumb_set DMA1_Channel6_IRQHandler,Default_Handler + + .weak DMA1_Channel7_IRQHandler + .thumb_set DMA1_Channel7_IRQHandler,Default_Handler + + .weak ADC1_2_IRQHandler + .thumb_set ADC1_2_IRQHandler,Default_Handler + + .weak USB_HP_CAN1_TX_IRQHandler + .thumb_set USB_HP_CAN1_TX_IRQHandler,Default_Handler + + .weak USB_LP_CAN1_RX0_IRQHandler + .thumb_set USB_LP_CAN1_RX0_IRQHandler,Default_Handler + + .weak CAN1_RX1_IRQHandler + .thumb_set CAN1_RX1_IRQHandler,Default_Handler + + .weak CAN1_SCE_IRQHandler + .thumb_set CAN1_SCE_IRQHandler,Default_Handler + + .weak EXTI9_5_IRQHandler + .thumb_set EXTI9_5_IRQHandler,Default_Handler + + .weak TIM1_BRK_IRQHandler + .thumb_set TIM1_BRK_IRQHandler,Default_Handler + + .weak TIM1_UP_IRQHandler + .thumb_set TIM1_UP_IRQHandler,Default_Handler + + .weak TIM1_TRG_COM_IRQHandler + .thumb_set TIM1_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 TIM4_IRQHandler + .thumb_set TIM4_IRQHandler,Default_Handler + + .weak I2C1_EV_IRQHandler + .thumb_set I2C1_EV_IRQHandler,Default_Handler + + .weak I2C1_ER_IRQHandler + .thumb_set I2C1_ER_IRQHandler,Default_Handler + + .weak I2C2_EV_IRQHandler + .thumb_set I2C2_EV_IRQHandler,Default_Handler + + .weak I2C2_ER_IRQHandler + .thumb_set I2C2_ER_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak USART1_IRQHandler + .thumb_set USART1_IRQHandler,Default_Handler + + .weak USART2_IRQHandler + .thumb_set USART2_IRQHandler,Default_Handler + + .weak USART3_IRQHandler + .thumb_set USART3_IRQHandler,Default_Handler + + .weak EXTI15_10_IRQHandler + .thumb_set EXTI15_10_IRQHandler,Default_Handler + + .weak RTCAlarm_IRQHandler + .thumb_set RTCAlarm_IRQHandler,Default_Handler + + .weak USBWakeUp_IRQHandler + .thumb_set USBWakeUp_IRQHandler,Default_Handler + + .weak TIM8_BRK_IRQHandler + .thumb_set TIM8_BRK_IRQHandler,Default_Handler + + .weak TIM8_UP_IRQHandler + .thumb_set TIM8_UP_IRQHandler,Default_Handler + + .weak TIM8_TRG_COM_IRQHandler + .thumb_set TIM8_TRG_COM_IRQHandler,Default_Handler + + .weak TIM8_CC_IRQHandler + .thumb_set TIM8_CC_IRQHandler,Default_Handler + + .weak ADC3_IRQHandler + .thumb_set ADC3_IRQHandler,Default_Handler + + .weak FSMC_IRQHandler + .thumb_set FSMC_IRQHandler,Default_Handler + + .weak SDIO_IRQHandler + .thumb_set SDIO_IRQHandler,Default_Handler + + .weak TIM5_IRQHandler + .thumb_set TIM5_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak TIM6_IRQHandler + .thumb_set TIM6_IRQHandler,Default_Handler + + .weak TIM7_IRQHandler + .thumb_set TIM7_IRQHandler,Default_Handler + + .weak DMA2_Channel1_IRQHandler + .thumb_set DMA2_Channel1_IRQHandler,Default_Handler + + .weak DMA2_Channel2_IRQHandler + .thumb_set DMA2_Channel2_IRQHandler,Default_Handler + + .weak DMA2_Channel3_IRQHandler + .thumb_set DMA2_Channel3_IRQHandler,Default_Handler + + .weak DMA2_Channel4_5_IRQHandler + .thumb_set DMA2_Channel4_5_IRQHandler,Default_Handler + diff --git a/boot_source/platform/CMSIS/ST/STM32F10x/Source/TrueSTUDIO/startup_stm32f10x_hd_vl.s b/boot_source/platform/CMSIS/ST/STM32F10x/Source/TrueSTUDIO/startup_stm32f10x_hd_vl.s new file mode 100644 index 0000000..8e10ee1 --- /dev/null +++ b/boot_source/platform/CMSIS/ST/STM32F10x/Source/TrueSTUDIO/startup_stm32f10x_hd_vl.s @@ -0,0 +1,449 @@ +/** + ****************************************************************************** + * @file startup_stm32f10x_hd_vl.s + * @author MCD Application Team + * @version V3.5.1 + * @date 08-September-2021 + * @brief STM32F10x High Density Value Line Devices vector table for Atollic + * toolchain. + * This module performs: + * - Set the initial SP + * - Set the initial PC == Reset_Handler, + * - Set the vector table entries with the exceptions ISR address + * - Configure the clock system + * - Configure external SRAM mounted on STM32100E-EVAL board + * to be used as data memory (optional, to be enabled by user) + * - Branches to main in the C library (which eventually + * calls main()). + * After Reset the Cortex-M3 processor is in Thread mode, + * priority is Privileged, and the Stack is set to Main. + ****************************************************************************** + * @attention + * + * Copyright (c) 2011 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-m3 + .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 + +.equ BootRAM, 0xF108F85F +/** + * @brief This is the code that gets called when the processor first + * starts execution following a reset event. Only the absolutely + * necessary set is performed, after which the application + * supplied main() routine is called. + * @param None + * @retval : None +*/ + + .section .text.Reset_Handler + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2], #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call the clock system intitialization function.*/ + bl SystemInit +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + bx lr +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M3. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word MemManage_Handler + .word BusFault_Handler + .word UsageFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word DebugMon_Handler + .word 0 + .word PendSV_Handler + .word SysTick_Handler + .word WWDG_IRQHandler + .word PVD_IRQHandler + .word TAMPER_IRQHandler + .word RTC_IRQHandler + .word FLASH_IRQHandler + .word RCC_IRQHandler + .word EXTI0_IRQHandler + .word EXTI1_IRQHandler + .word EXTI2_IRQHandler + .word EXTI3_IRQHandler + .word EXTI4_IRQHandler + .word DMA1_Channel1_IRQHandler + .word DMA1_Channel2_IRQHandler + .word DMA1_Channel3_IRQHandler + .word DMA1_Channel4_IRQHandler + .word DMA1_Channel5_IRQHandler + .word DMA1_Channel6_IRQHandler + .word DMA1_Channel7_IRQHandler + .word ADC1_IRQHandler + .word 0 + .word 0 + .word 0 + .word 0 + .word EXTI9_5_IRQHandler + .word TIM1_BRK_TIM15_IRQHandler + .word TIM1_UP_TIM16_IRQHandler + .word TIM1_TRG_COM_TIM17_IRQHandler + .word TIM1_CC_IRQHandler + .word TIM2_IRQHandler + .word TIM3_IRQHandler + .word TIM4_IRQHandler + .word I2C1_EV_IRQHandler + .word I2C1_ER_IRQHandler + .word I2C2_EV_IRQHandler + .word I2C2_ER_IRQHandler + .word SPI1_IRQHandler + .word SPI2_IRQHandler + .word USART1_IRQHandler + .word USART2_IRQHandler + .word USART3_IRQHandler + .word EXTI15_10_IRQHandler + .word RTCAlarm_IRQHandler + .word CEC_IRQHandler + .word TIM12_IRQHandler + .word TIM13_IRQHandler + .word TIM14_IRQHandler + .word 0 + .word 0 + .word 0 + .word 0 + .word TIM5_IRQHandler + .word SPI3_IRQHandler + .word UART4_IRQHandler + .word UART5_IRQHandler + .word TIM6_DAC_IRQHandler + .word TIM7_IRQHandler + .word DMA2_Channel1_IRQHandler + .word DMA2_Channel2_IRQHandler + .word DMA2_Channel3_IRQHandler + .word DMA2_Channel4_5_IRQHandler + .word DMA2_Channel5_IRQHandler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word BootRAM /* @0x1E0. This is for boot in RAM mode for + STM32F10x High Density Value line devices. */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak MemManage_Handler + .thumb_set MemManage_Handler,Default_Handler + + .weak BusFault_Handler + .thumb_set BusFault_Handler,Default_Handler + + .weak UsageFault_Handler + .thumb_set UsageFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak DebugMon_Handler + .thumb_set DebugMon_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak WWDG_IRQHandler + .thumb_set WWDG_IRQHandler,Default_Handler + + .weak PVD_IRQHandler + .thumb_set PVD_IRQHandler,Default_Handler + + .weak TAMPER_IRQHandler + .thumb_set TAMPER_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_IRQHandler + .thumb_set EXTI0_IRQHandler,Default_Handler + + .weak EXTI1_IRQHandler + .thumb_set EXTI1_IRQHandler,Default_Handler + + .weak EXTI2_IRQHandler + .thumb_set EXTI2_IRQHandler,Default_Handler + + .weak EXTI3_IRQHandler + .thumb_set EXTI3_IRQHandler,Default_Handler + + .weak EXTI4_IRQHandler + .thumb_set EXTI4_IRQHandler,Default_Handler + + .weak DMA1_Channel1_IRQHandler + .thumb_set DMA1_Channel1_IRQHandler,Default_Handler + + .weak DMA1_Channel2_IRQHandler + .thumb_set DMA1_Channel2_IRQHandler,Default_Handler + + .weak DMA1_Channel3_IRQHandler + .thumb_set DMA1_Channel3_IRQHandler,Default_Handler + + .weak DMA1_Channel4_IRQHandler + .thumb_set DMA1_Channel4_IRQHandler,Default_Handler + + .weak DMA1_Channel5_IRQHandler + .thumb_set DMA1_Channel5_IRQHandler,Default_Handler + + .weak DMA1_Channel6_IRQHandler + .thumb_set DMA1_Channel6_IRQHandler,Default_Handler + + .weak DMA1_Channel7_IRQHandler + .thumb_set DMA1_Channel7_IRQHandler,Default_Handler + + .weak ADC1_IRQHandler + .thumb_set ADC1_IRQHandler,Default_Handler + + .weak EXTI9_5_IRQHandler + .thumb_set EXTI9_5_IRQHandler,Default_Handler + + .weak TIM1_BRK_TIM15_IRQHandler + .thumb_set TIM1_BRK_TIM15_IRQHandler,Default_Handler + + .weak TIM1_UP_TIM16_IRQHandler + .thumb_set TIM1_UP_TIM16_IRQHandler,Default_Handler + + .weak TIM1_TRG_COM_TIM17_IRQHandler + .thumb_set TIM1_TRG_COM_TIM17_IRQHandler,Default_Handler + + .weak TIM1_CC_IRQHandler + .thumb_set TIM1_CC_IRQHandler,Default_Handler + + .weak TIM2_IRQHandler + .thumb_set TIM2_IRQHandler,Default_Handler + + .weak TIM3_IRQHandler + .thumb_set TIM3_IRQHandler,Default_Handler + + .weak TIM4_IRQHandler + .thumb_set TIM4_IRQHandler,Default_Handler + + .weak I2C1_EV_IRQHandler + .thumb_set I2C1_EV_IRQHandler,Default_Handler + + .weak I2C1_ER_IRQHandler + .thumb_set I2C1_ER_IRQHandler,Default_Handler + + .weak I2C2_EV_IRQHandler + .thumb_set I2C2_EV_IRQHandler,Default_Handler + + .weak I2C2_ER_IRQHandler + .thumb_set I2C2_ER_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak USART1_IRQHandler + .thumb_set USART1_IRQHandler,Default_Handler + + .weak USART2_IRQHandler + .thumb_set USART2_IRQHandler,Default_Handler + + .weak USART3_IRQHandler + .thumb_set USART3_IRQHandler,Default_Handler + + .weak EXTI15_10_IRQHandler + .thumb_set EXTI15_10_IRQHandler,Default_Handler + + .weak RTCAlarm_IRQHandler + .thumb_set RTCAlarm_IRQHandler,Default_Handler + + .weak CEC_IRQHandler + .thumb_set CEC_IRQHandler,Default_Handler + + .weak TIM12_IRQHandler + .thumb_set TIM12_IRQHandler,Default_Handler + + .weak TIM13_IRQHandler + .thumb_set TIM13_IRQHandler,Default_Handler + + .weak TIM14_IRQHandler + .thumb_set TIM14_IRQHandler,Default_Handler + + .weak TIM5_IRQHandler + .thumb_set TIM5_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak TIM6_DAC_IRQHandler + .thumb_set TIM6_DAC_IRQHandler,Default_Handler + + .weak TIM7_IRQHandler + .thumb_set TIM7_IRQHandler,Default_Handler + + .weak DMA2_Channel1_IRQHandler + .thumb_set DMA2_Channel1_IRQHandler,Default_Handler + + .weak DMA2_Channel2_IRQHandler + .thumb_set DMA2_Channel2_IRQHandler,Default_Handler + + .weak DMA2_Channel3_IRQHandler + .thumb_set DMA2_Channel3_IRQHandler,Default_Handler + + .weak DMA2_Channel4_5_IRQHandler + .thumb_set DMA2_Channel4_5_IRQHandler,Default_Handler + + .weak DMA2_Channel5_IRQHandler + .thumb_set DMA2_Channel5_IRQHandler,Default_Handler + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/boot_source/platform/CMSIS/ST/STM32F10x/Source/TrueSTUDIO/startup_stm32f10x_ld.s b/boot_source/platform/CMSIS/ST/STM32F10x/Source/TrueSTUDIO/startup_stm32f10x_ld.s new file mode 100644 index 0000000..df6d7b9 --- /dev/null +++ b/boot_source/platform/CMSIS/ST/STM32F10x/Source/TrueSTUDIO/startup_stm32f10x_ld.s @@ -0,0 +1,345 @@ +/** + ****************************************************************************** + * @file startup_stm32f10x_ld.s + * @author MCD Application Team + * @version V3.5.1 + * @date 08-September-2021 + * @brief STM32F10x Low Density Devices vector table for Atollic toolchain. + * This module performs: + * - Set the initial SP + * - Set the initial PC == Reset_Handler, + * - Set the vector table entries with the exceptions ISR address. + * - Configure the clock system + * - Branches to main in the C library (which eventually + * calls main()). + * After Reset the Cortex-M3 processor is in Thread mode, + * priority is Privileged, and the Stack is set to Main. + ****************************************************************************** + * @attention + * + * Copyright (c) 2011 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-m3 + .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 + +.equ BootRAM, 0xF108F85F +/** + * @brief This is the code that gets called when the processor first + * starts execution following a reset event. Only the absolutely + * necessary set is performed, after which the application + * supplied main() routine is called. + * @param None + * @retval : None +*/ + + .section .text.Reset_Handler + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2], #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call the clock system intitialization function.*/ + bl SystemInit +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + bx lr +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M3. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word MemManage_Handler + .word BusFault_Handler + .word UsageFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word DebugMon_Handler + .word 0 + .word PendSV_Handler + .word SysTick_Handler + .word WWDG_IRQHandler + .word PVD_IRQHandler + .word TAMPER_IRQHandler + .word RTC_IRQHandler + .word FLASH_IRQHandler + .word RCC_IRQHandler + .word EXTI0_IRQHandler + .word EXTI1_IRQHandler + .word EXTI2_IRQHandler + .word EXTI3_IRQHandler + .word EXTI4_IRQHandler + .word DMA1_Channel1_IRQHandler + .word DMA1_Channel2_IRQHandler + .word DMA1_Channel3_IRQHandler + .word DMA1_Channel4_IRQHandler + .word DMA1_Channel5_IRQHandler + .word DMA1_Channel6_IRQHandler + .word DMA1_Channel7_IRQHandler + .word ADC1_2_IRQHandler + .word USB_HP_CAN1_TX_IRQHandler + .word USB_LP_CAN1_RX0_IRQHandler + .word CAN1_RX1_IRQHandler + .word CAN1_SCE_IRQHandler + .word EXTI9_5_IRQHandler + .word TIM1_BRK_IRQHandler + .word TIM1_UP_IRQHandler + .word TIM1_TRG_COM_IRQHandler + .word TIM1_CC_IRQHandler + .word TIM2_IRQHandler + .word TIM3_IRQHandler + .word 0 + .word I2C1_EV_IRQHandler + .word I2C1_ER_IRQHandler + .word 0 + .word 0 + .word SPI1_IRQHandler + .word 0 + .word USART1_IRQHandler + .word USART2_IRQHandler + .word 0 + .word EXTI15_10_IRQHandler + .word RTCAlarm_IRQHandler + .word USBWakeUp_IRQHandler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word BootRAM /* @0x108. This is for boot in RAM mode for + STM32F10x Low Density devices.*/ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak MemManage_Handler + .thumb_set MemManage_Handler,Default_Handler + + .weak BusFault_Handler + .thumb_set BusFault_Handler,Default_Handler + + .weak UsageFault_Handler + .thumb_set UsageFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak DebugMon_Handler + .thumb_set DebugMon_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak WWDG_IRQHandler + .thumb_set WWDG_IRQHandler,Default_Handler + + .weak PVD_IRQHandler + .thumb_set PVD_IRQHandler,Default_Handler + + .weak TAMPER_IRQHandler + .thumb_set TAMPER_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_IRQHandler + .thumb_set EXTI0_IRQHandler,Default_Handler + + .weak EXTI1_IRQHandler + .thumb_set EXTI1_IRQHandler,Default_Handler + + .weak EXTI2_IRQHandler + .thumb_set EXTI2_IRQHandler,Default_Handler + + .weak EXTI3_IRQHandler + .thumb_set EXTI3_IRQHandler,Default_Handler + + .weak EXTI4_IRQHandler + .thumb_set EXTI4_IRQHandler,Default_Handler + + .weak DMA1_Channel1_IRQHandler + .thumb_set DMA1_Channel1_IRQHandler,Default_Handler + + .weak DMA1_Channel2_IRQHandler + .thumb_set DMA1_Channel2_IRQHandler,Default_Handler + + .weak DMA1_Channel3_IRQHandler + .thumb_set DMA1_Channel3_IRQHandler,Default_Handler + + .weak DMA1_Channel4_IRQHandler + .thumb_set DMA1_Channel4_IRQHandler,Default_Handler + + .weak DMA1_Channel5_IRQHandler + .thumb_set DMA1_Channel5_IRQHandler,Default_Handler + + .weak DMA1_Channel6_IRQHandler + .thumb_set DMA1_Channel6_IRQHandler,Default_Handler + + .weak DMA1_Channel7_IRQHandler + .thumb_set DMA1_Channel7_IRQHandler,Default_Handler + + .weak ADC1_2_IRQHandler + .thumb_set ADC1_2_IRQHandler,Default_Handler + + .weak USB_HP_CAN1_TX_IRQHandler + .thumb_set USB_HP_CAN1_TX_IRQHandler,Default_Handler + + .weak USB_LP_CAN1_RX0_IRQHandler + .thumb_set USB_LP_CAN1_RX0_IRQHandler,Default_Handler + + .weak CAN1_RX1_IRQHandler + .thumb_set CAN1_RX1_IRQHandler,Default_Handler + + .weak CAN1_SCE_IRQHandler + .thumb_set CAN1_SCE_IRQHandler,Default_Handler + + .weak EXTI9_5_IRQHandler + .thumb_set EXTI9_5_IRQHandler,Default_Handler + + .weak TIM1_BRK_IRQHandler + .thumb_set TIM1_BRK_IRQHandler,Default_Handler + + .weak TIM1_UP_IRQHandler + .thumb_set TIM1_UP_IRQHandler,Default_Handler + + .weak TIM1_TRG_COM_IRQHandler + .thumb_set TIM1_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 I2C1_EV_IRQHandler + .thumb_set I2C1_EV_IRQHandler,Default_Handler + + .weak I2C1_ER_IRQHandler + .thumb_set I2C1_ER_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak USART1_IRQHandler + .thumb_set USART1_IRQHandler,Default_Handler + + .weak USART2_IRQHandler + .thumb_set USART2_IRQHandler,Default_Handler + + .weak EXTI15_10_IRQHandler + .thumb_set EXTI15_10_IRQHandler,Default_Handler + + .weak RTCAlarm_IRQHandler + .thumb_set RTCAlarm_IRQHandler,Default_Handler + + .weak USBWakeUp_IRQHandler + .thumb_set USBWakeUp_IRQHandler,Default_Handler + diff --git a/boot_source/platform/CMSIS/ST/STM32F10x/Source/TrueSTUDIO/startup_stm32f10x_ld_vl.s b/boot_source/platform/CMSIS/ST/STM32F10x/Source/TrueSTUDIO/startup_stm32f10x_ld_vl.s new file mode 100644 index 0000000..ef699f4 --- /dev/null +++ b/boot_source/platform/CMSIS/ST/STM32F10x/Source/TrueSTUDIO/startup_stm32f10x_ld_vl.s @@ -0,0 +1,390 @@ +/** + ****************************************************************************** + * @file startup_stm32f10x_ld_vl.s + * @author MCD Application Team + * @version V3.5.1 + * @date 08-September-2021 + * @brief STM32F10x Low Density Value Line Devices vector table for Atollic toolchain. + * This module performs: + * - Set the initial SP + * - Set the initial PC == Reset_Handler, + * - Set the vector table entries with the exceptions ISR address + * - Configure the clock system + * - Branches to main in the C library (which eventually + * calls main()). + * After Reset the Cortex-M3 processor is in Thread mode, + * priority is Privileged, and the Stack is set to Main. + ****************************************************************************** + * @attention + * + * Copyright (c) 2011 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-m3 + .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 + +.equ BootRAM, 0xF108F85F +/** + * @brief This is the code that gets called when the processor first + * starts execution following a reset event. Only the absolutely + * necessary set is performed, after which the application + * supplied main() routine is called. + * @param None + * @retval : None +*/ + + .section .text.Reset_Handler + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2], #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call the clock system intitialization function.*/ + bl SystemInit +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + bx lr +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M3. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word MemManage_Handler + .word BusFault_Handler + .word UsageFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word DebugMon_Handler + .word 0 + .word PendSV_Handler + .word SysTick_Handler + .word WWDG_IRQHandler + .word PVD_IRQHandler + .word TAMPER_IRQHandler + .word RTC_IRQHandler + .word FLASH_IRQHandler + .word RCC_IRQHandler + .word EXTI0_IRQHandler + .word EXTI1_IRQHandler + .word EXTI2_IRQHandler + .word EXTI3_IRQHandler + .word EXTI4_IRQHandler + .word DMA1_Channel1_IRQHandler + .word DMA1_Channel2_IRQHandler + .word DMA1_Channel3_IRQHandler + .word DMA1_Channel4_IRQHandler + .word DMA1_Channel5_IRQHandler + .word DMA1_Channel6_IRQHandler + .word DMA1_Channel7_IRQHandler + .word ADC1_IRQHandler + .word 0 + .word 0 + .word 0 + .word 0 + .word EXTI9_5_IRQHandler + .word TIM1_BRK_TIM15_IRQHandler + .word TIM1_UP_TIM16_IRQHandler + .word TIM1_TRG_COM_TIM17_IRQHandler + .word TIM1_CC_IRQHandler + .word TIM2_IRQHandler + .word TIM3_IRQHandler + .word 0 + .word I2C1_EV_IRQHandler + .word I2C1_ER_IRQHandler + .word 0 + .word 0 + .word SPI1_IRQHandler + .word 0 + .word USART1_IRQHandler + .word USART2_IRQHandler + .word 0 + .word EXTI15_10_IRQHandler + .word RTCAlarm_IRQHandler + .word CEC_IRQHandler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word TIM6_DAC_IRQHandler + .word TIM7_IRQHandler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word BootRAM /* @0x01CC. This is for boot in RAM mode for + STM32F10x Medium Value Line Density devices. */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak MemManage_Handler + .thumb_set MemManage_Handler,Default_Handler + + .weak BusFault_Handler + .thumb_set BusFault_Handler,Default_Handler + + .weak UsageFault_Handler + .thumb_set UsageFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak DebugMon_Handler + .thumb_set DebugMon_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak WWDG_IRQHandler + .thumb_set WWDG_IRQHandler,Default_Handler + + .weak PVD_IRQHandler + .thumb_set PVD_IRQHandler,Default_Handler + + .weak TAMPER_IRQHandler + .thumb_set TAMPER_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_IRQHandler + .thumb_set EXTI0_IRQHandler,Default_Handler + + .weak EXTI1_IRQHandler + .thumb_set EXTI1_IRQHandler,Default_Handler + + .weak EXTI2_IRQHandler + .thumb_set EXTI2_IRQHandler,Default_Handler + + .weak EXTI3_IRQHandler + .thumb_set EXTI3_IRQHandler,Default_Handler + + .weak EXTI4_IRQHandler + .thumb_set EXTI4_IRQHandler,Default_Handler + + .weak DMA1_Channel1_IRQHandler + .thumb_set DMA1_Channel1_IRQHandler,Default_Handler + + .weak DMA1_Channel2_IRQHandler + .thumb_set DMA1_Channel2_IRQHandler,Default_Handler + + .weak DMA1_Channel3_IRQHandler + .thumb_set DMA1_Channel3_IRQHandler,Default_Handler + + .weak DMA1_Channel4_IRQHandler + .thumb_set DMA1_Channel4_IRQHandler,Default_Handler + + .weak DMA1_Channel5_IRQHandler + .thumb_set DMA1_Channel5_IRQHandler,Default_Handler + + .weak DMA1_Channel6_IRQHandler + .thumb_set DMA1_Channel6_IRQHandler,Default_Handler + + .weak DMA1_Channel7_IRQHandler + .thumb_set DMA1_Channel7_IRQHandler,Default_Handler + + .weak ADC1_IRQHandler + .thumb_set ADC1_IRQHandler,Default_Handler + + .weak EXTI9_5_IRQHandler + .thumb_set EXTI9_5_IRQHandler,Default_Handler + + .weak TIM1_BRK_TIM15_IRQHandler + .thumb_set TIM1_BRK_TIM15_IRQHandler,Default_Handler + + .weak TIM1_UP_TIM16_IRQHandler + .thumb_set TIM1_UP_TIM16_IRQHandler,Default_Handler + + .weak TIM1_TRG_COM_TIM17_IRQHandler + .thumb_set TIM1_TRG_COM_TIM17_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 I2C1_EV_IRQHandler + .thumb_set I2C1_EV_IRQHandler,Default_Handler + + .weak I2C1_ER_IRQHandler + .thumb_set I2C1_ER_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak USART1_IRQHandler + .thumb_set USART1_IRQHandler,Default_Handler + + .weak USART2_IRQHandler + .thumb_set USART2_IRQHandler,Default_Handler + + .weak EXTI15_10_IRQHandler + .thumb_set EXTI15_10_IRQHandler,Default_Handler + + .weak RTCAlarm_IRQHandler + .thumb_set RTCAlarm_IRQHandler,Default_Handler + + .weak CEC_IRQHandler + .thumb_set CEC_IRQHandler,Default_Handler + + .weak TIM6_DAC_IRQHandler + .thumb_set TIM6_DAC_IRQHandler,Default_Handler + + .weak TIM7_IRQHandler + .thumb_set TIM7_IRQHandler,Default_Handler + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/boot_source/platform/CMSIS/ST/STM32F10x/Source/TrueSTUDIO/startup_stm32f10x_md.s b/boot_source/platform/CMSIS/ST/STM32F10x/Source/TrueSTUDIO/startup_stm32f10x_md.s new file mode 100644 index 0000000..5ba98c5 --- /dev/null +++ b/boot_source/platform/CMSIS/ST/STM32F10x/Source/TrueSTUDIO/startup_stm32f10x_md.s @@ -0,0 +1,361 @@ +/** + ****************************************************************************** + * @file startup_stm32f10x_md.s + * @author MCD Application Team + * @version V3.5.1 + * @date 08-September-2021 + * @brief STM32F10x Medium Density Devices vector table for Atollic toolchain. + * This module performs: + * - Set the initial SP + * - Set the initial PC == Reset_Handler, + * - Set the vector table entries with the exceptions ISR address + * - Configure the clock system + * - Branches to main in the C library (which eventually + * calls main()). + * After Reset the Cortex-M3 processor is in Thread mode, + * priority is Privileged, and the Stack is set to Main. + ****************************************************************************** + * @attention + * + * Copyright (c) 2011 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-m3 + .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 + +.equ BootRAM, 0xF108F85F +/** + * @brief This is the code that gets called when the processor first + * starts execution following a reset event. Only the absolutely + * necessary set is performed, after which the application + * supplied main() routine is called. + * @param None + * @retval : None +*/ + + .section .text.Reset_Handler + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2], #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call the clock system intitialization function.*/ + bl SystemInit +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + bx lr +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M3. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word MemManage_Handler + .word BusFault_Handler + .word UsageFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word DebugMon_Handler + .word 0 + .word PendSV_Handler + .word SysTick_Handler + .word WWDG_IRQHandler + .word PVD_IRQHandler + .word TAMPER_IRQHandler + .word RTC_IRQHandler + .word FLASH_IRQHandler + .word RCC_IRQHandler + .word EXTI0_IRQHandler + .word EXTI1_IRQHandler + .word EXTI2_IRQHandler + .word EXTI3_IRQHandler + .word EXTI4_IRQHandler + .word DMA1_Channel1_IRQHandler + .word DMA1_Channel2_IRQHandler + .word DMA1_Channel3_IRQHandler + .word DMA1_Channel4_IRQHandler + .word DMA1_Channel5_IRQHandler + .word DMA1_Channel6_IRQHandler + .word DMA1_Channel7_IRQHandler + .word ADC1_2_IRQHandler + .word USB_HP_CAN1_TX_IRQHandler + .word USB_LP_CAN1_RX0_IRQHandler + .word CAN1_RX1_IRQHandler + .word CAN1_SCE_IRQHandler + .word EXTI9_5_IRQHandler + .word TIM1_BRK_IRQHandler + .word TIM1_UP_IRQHandler + .word TIM1_TRG_COM_IRQHandler + .word TIM1_CC_IRQHandler + .word TIM2_IRQHandler + .word TIM3_IRQHandler + .word TIM4_IRQHandler + .word I2C1_EV_IRQHandler + .word I2C1_ER_IRQHandler + .word I2C2_EV_IRQHandler + .word I2C2_ER_IRQHandler + .word SPI1_IRQHandler + .word SPI2_IRQHandler + .word USART1_IRQHandler + .word USART2_IRQHandler + .word USART3_IRQHandler + .word EXTI15_10_IRQHandler + .word RTCAlarm_IRQHandler + .word USBWakeUp_IRQHandler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word BootRAM /* @0x108. This is for boot in RAM mode for + STM32F10x Medium Density devices. */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak MemManage_Handler + .thumb_set MemManage_Handler,Default_Handler + + .weak BusFault_Handler + .thumb_set BusFault_Handler,Default_Handler + + .weak UsageFault_Handler + .thumb_set UsageFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak DebugMon_Handler + .thumb_set DebugMon_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak WWDG_IRQHandler + .thumb_set WWDG_IRQHandler,Default_Handler + + .weak PVD_IRQHandler + .thumb_set PVD_IRQHandler,Default_Handler + + .weak TAMPER_IRQHandler + .thumb_set TAMPER_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_IRQHandler + .thumb_set EXTI0_IRQHandler,Default_Handler + + .weak EXTI1_IRQHandler + .thumb_set EXTI1_IRQHandler,Default_Handler + + .weak EXTI2_IRQHandler + .thumb_set EXTI2_IRQHandler,Default_Handler + + .weak EXTI3_IRQHandler + .thumb_set EXTI3_IRQHandler,Default_Handler + + .weak EXTI4_IRQHandler + .thumb_set EXTI4_IRQHandler,Default_Handler + + .weak DMA1_Channel1_IRQHandler + .thumb_set DMA1_Channel1_IRQHandler,Default_Handler + + .weak DMA1_Channel2_IRQHandler + .thumb_set DMA1_Channel2_IRQHandler,Default_Handler + + .weak DMA1_Channel3_IRQHandler + .thumb_set DMA1_Channel3_IRQHandler,Default_Handler + + .weak DMA1_Channel4_IRQHandler + .thumb_set DMA1_Channel4_IRQHandler,Default_Handler + + .weak DMA1_Channel5_IRQHandler + .thumb_set DMA1_Channel5_IRQHandler,Default_Handler + + .weak DMA1_Channel6_IRQHandler + .thumb_set DMA1_Channel6_IRQHandler,Default_Handler + + .weak DMA1_Channel7_IRQHandler + .thumb_set DMA1_Channel7_IRQHandler,Default_Handler + + .weak ADC1_2_IRQHandler + .thumb_set ADC1_2_IRQHandler,Default_Handler + + .weak USB_HP_CAN1_TX_IRQHandler + .thumb_set USB_HP_CAN1_TX_IRQHandler,Default_Handler + + .weak USB_LP_CAN1_RX0_IRQHandler + .thumb_set USB_LP_CAN1_RX0_IRQHandler,Default_Handler + + .weak CAN1_RX1_IRQHandler + .thumb_set CAN1_RX1_IRQHandler,Default_Handler + + .weak CAN1_SCE_IRQHandler + .thumb_set CAN1_SCE_IRQHandler,Default_Handler + + .weak EXTI9_5_IRQHandler + .thumb_set EXTI9_5_IRQHandler,Default_Handler + + .weak TIM1_BRK_IRQHandler + .thumb_set TIM1_BRK_IRQHandler,Default_Handler + + .weak TIM1_UP_IRQHandler + .thumb_set TIM1_UP_IRQHandler,Default_Handler + + .weak TIM1_TRG_COM_IRQHandler + .thumb_set TIM1_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 TIM4_IRQHandler + .thumb_set TIM4_IRQHandler,Default_Handler + + .weak I2C1_EV_IRQHandler + .thumb_set I2C1_EV_IRQHandler,Default_Handler + + .weak I2C1_ER_IRQHandler + .thumb_set I2C1_ER_IRQHandler,Default_Handler + + .weak I2C2_EV_IRQHandler + .thumb_set I2C2_EV_IRQHandler,Default_Handler + + .weak I2C2_ER_IRQHandler + .thumb_set I2C2_ER_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak USART1_IRQHandler + .thumb_set USART1_IRQHandler,Default_Handler + + .weak USART2_IRQHandler + .thumb_set USART2_IRQHandler,Default_Handler + + .weak USART3_IRQHandler + .thumb_set USART3_IRQHandler,Default_Handler + + .weak EXTI15_10_IRQHandler + .thumb_set EXTI15_10_IRQHandler,Default_Handler + + .weak RTCAlarm_IRQHandler + .thumb_set RTCAlarm_IRQHandler,Default_Handler + + .weak USBWakeUp_IRQHandler + .thumb_set USBWakeUp_IRQHandler,Default_Handler + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/boot_source/platform/CMSIS/ST/STM32F10x/Source/TrueSTUDIO/startup_stm32f10x_md_vl.s b/boot_source/platform/CMSIS/ST/STM32F10x/Source/TrueSTUDIO/startup_stm32f10x_md_vl.s new file mode 100644 index 0000000..c0ccce7 --- /dev/null +++ b/boot_source/platform/CMSIS/ST/STM32F10x/Source/TrueSTUDIO/startup_stm32f10x_md_vl.s @@ -0,0 +1,406 @@ +/** + ****************************************************************************** + * @file startup_stm32f10x_md_vl.s + * @author MCD Application Team + * @version V3.5.1 + * @date 08-September-2021 + * @brief STM32F10x Medium Density Value Line Devices vector table for Atollic + * toolchain. + * This module performs: + * - Set the initial SP + * - Set the initial PC == Reset_Handler, + * - Set the vector table entries with the exceptions ISR address + * - Configure the clock system + * - Branches to main in the C library (which eventually + * calls main()). + * After Reset the Cortex-M3 processor is in Thread mode, + * priority is Privileged, and the Stack is set to Main. + ****************************************************************************** + * @attention + * + * Copyright (c) 2011 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-m3 + .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 + +.equ BootRAM, 0xF108F85F +/** + * @brief This is the code that gets called when the processor first + * starts execution following a reset event. Only the absolutely + * necessary set is performed, after which the application + * supplied main() routine is called. + * @param None + * @retval : None +*/ + + .section .text.Reset_Handler + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2], #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call the clock system intitialization function.*/ + bl SystemInit +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + bx lr +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M3. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word MemManage_Handler + .word BusFault_Handler + .word UsageFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word DebugMon_Handler + .word 0 + .word PendSV_Handler + .word SysTick_Handler + .word WWDG_IRQHandler + .word PVD_IRQHandler + .word TAMPER_IRQHandler + .word RTC_IRQHandler + .word FLASH_IRQHandler + .word RCC_IRQHandler + .word EXTI0_IRQHandler + .word EXTI1_IRQHandler + .word EXTI2_IRQHandler + .word EXTI3_IRQHandler + .word EXTI4_IRQHandler + .word DMA1_Channel1_IRQHandler + .word DMA1_Channel2_IRQHandler + .word DMA1_Channel3_IRQHandler + .word DMA1_Channel4_IRQHandler + .word DMA1_Channel5_IRQHandler + .word DMA1_Channel6_IRQHandler + .word DMA1_Channel7_IRQHandler + .word ADC1_IRQHandler + .word 0 + .word 0 + .word 0 + .word 0 + .word EXTI9_5_IRQHandler + .word TIM1_BRK_TIM15_IRQHandler + .word TIM1_UP_TIM16_IRQHandler + .word TIM1_TRG_COM_TIM17_IRQHandler + .word TIM1_CC_IRQHandler + .word TIM2_IRQHandler + .word TIM3_IRQHandler + .word TIM4_IRQHandler + .word I2C1_EV_IRQHandler + .word I2C1_ER_IRQHandler + .word I2C2_EV_IRQHandler + .word I2C2_ER_IRQHandler + .word SPI1_IRQHandler + .word SPI2_IRQHandler + .word USART1_IRQHandler + .word USART2_IRQHandler + .word USART3_IRQHandler + .word EXTI15_10_IRQHandler + .word RTCAlarm_IRQHandler + .word CEC_IRQHandler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word TIM6_DAC_IRQHandler + .word TIM7_IRQHandler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word BootRAM /* @0x01CC. This is for boot in RAM mode for + STM32F10x Medium Value Line Density devices. */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak MemManage_Handler + .thumb_set MemManage_Handler,Default_Handler + + .weak BusFault_Handler + .thumb_set BusFault_Handler,Default_Handler + + .weak UsageFault_Handler + .thumb_set UsageFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak DebugMon_Handler + .thumb_set DebugMon_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak WWDG_IRQHandler + .thumb_set WWDG_IRQHandler,Default_Handler + + .weak PVD_IRQHandler + .thumb_set PVD_IRQHandler,Default_Handler + + .weak TAMPER_IRQHandler + .thumb_set TAMPER_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_IRQHandler + .thumb_set EXTI0_IRQHandler,Default_Handler + + .weak EXTI1_IRQHandler + .thumb_set EXTI1_IRQHandler,Default_Handler + + .weak EXTI2_IRQHandler + .thumb_set EXTI2_IRQHandler,Default_Handler + + .weak EXTI3_IRQHandler + .thumb_set EXTI3_IRQHandler,Default_Handler + + .weak EXTI4_IRQHandler + .thumb_set EXTI4_IRQHandler,Default_Handler + + .weak DMA1_Channel1_IRQHandler + .thumb_set DMA1_Channel1_IRQHandler,Default_Handler + + .weak DMA1_Channel2_IRQHandler + .thumb_set DMA1_Channel2_IRQHandler,Default_Handler + + .weak DMA1_Channel3_IRQHandler + .thumb_set DMA1_Channel3_IRQHandler,Default_Handler + + .weak DMA1_Channel4_IRQHandler + .thumb_set DMA1_Channel4_IRQHandler,Default_Handler + + .weak DMA1_Channel5_IRQHandler + .thumb_set DMA1_Channel5_IRQHandler,Default_Handler + + .weak DMA1_Channel6_IRQHandler + .thumb_set DMA1_Channel6_IRQHandler,Default_Handler + + .weak DMA1_Channel7_IRQHandler + .thumb_set DMA1_Channel7_IRQHandler,Default_Handler + + .weak ADC1_IRQHandler + .thumb_set ADC1_IRQHandler,Default_Handler + + .weak EXTI9_5_IRQHandler + .thumb_set EXTI9_5_IRQHandler,Default_Handler + + .weak TIM1_BRK_TIM15_IRQHandler + .thumb_set TIM1_BRK_TIM15_IRQHandler,Default_Handler + + .weak TIM1_UP_TIM16_IRQHandler + .thumb_set TIM1_UP_TIM16_IRQHandler,Default_Handler + + .weak TIM1_TRG_COM_TIM17_IRQHandler + .thumb_set TIM1_TRG_COM_TIM17_IRQHandler,Default_Handler + + .weak TIM1_CC_IRQHandler + .thumb_set TIM1_CC_IRQHandler,Default_Handler + + .weak TIM2_IRQHandler + .thumb_set TIM2_IRQHandler,Default_Handler + + .weak TIM3_IRQHandler + .thumb_set TIM3_IRQHandler,Default_Handler + + .weak TIM4_IRQHandler + .thumb_set TIM4_IRQHandler,Default_Handler + + .weak I2C1_EV_IRQHandler + .thumb_set I2C1_EV_IRQHandler,Default_Handler + + .weak I2C1_ER_IRQHandler + .thumb_set I2C1_ER_IRQHandler,Default_Handler + + .weak I2C2_EV_IRQHandler + .thumb_set I2C2_EV_IRQHandler,Default_Handler + + .weak I2C2_ER_IRQHandler + .thumb_set I2C2_ER_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak USART1_IRQHandler + .thumb_set USART1_IRQHandler,Default_Handler + + .weak USART2_IRQHandler + .thumb_set USART2_IRQHandler,Default_Handler + + .weak USART3_IRQHandler + .thumb_set USART3_IRQHandler,Default_Handler + + .weak EXTI15_10_IRQHandler + .thumb_set EXTI15_10_IRQHandler,Default_Handler + + .weak RTCAlarm_IRQHandler + .thumb_set RTCAlarm_IRQHandler,Default_Handler + + .weak CEC_IRQHandler + .thumb_set CEC_IRQHandler,Default_Handler + + .weak TIM6_DAC_IRQHandler + .thumb_set TIM6_DAC_IRQHandler,Default_Handler + + .weak TIM7_IRQHandler + .thumb_set TIM7_IRQHandler,Default_Handler + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/boot_source/platform/CMSIS/ST/STM32F10x/Source/TrueSTUDIO/startup_stm32f10x_xl.s b/boot_source/platform/CMSIS/ST/STM32F10x/Source/TrueSTUDIO/startup_stm32f10x_xl.s new file mode 100644 index 0000000..4080cf5 --- /dev/null +++ b/boot_source/platform/CMSIS/ST/STM32F10x/Source/TrueSTUDIO/startup_stm32f10x_xl.s @@ -0,0 +1,465 @@ +/** + ****************************************************************************** + * @file startup_stm32f10x_xl.s + * @author MCD Application Team + * @version V3.5.1 + * @date 08-September-2021 + * @brief STM32F10x XL-Density Devices vector table for TrueSTUDIO toolchain. + * This module performs: + * - Set the initial SP + * - Set the initial PC == Reset_Handler, + * - Set the vector table entries with the exceptions ISR address + * - Configure the clock system and the external SRAM mounted on + * STM3210E-EVAL board to be used as data memory (optional, + * to be enabled by user) + * - Branches to main in the C library (which eventually + * calls main()). + * After Reset the Cortex-M3 processor is in Thread mode, + * priority is Privileged, and the Stack is set to Main. + ****************************************************************************** + * @attention + * + * Copyright (c) 2011 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-m3 + .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 + +.equ BootRAM, 0xF1E0F85F +/** + * @brief This is the code that gets called when the processor first + * starts execution following a reset event. Only the absolutely + * necessary set is performed, after which the application + * supplied main() routine is called. + * @param None + * @retval : None +*/ + + .section .text.Reset_Handler + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2], #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call the clock system intitialization function.*/ + bl SystemInit +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + bx lr +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * @param None + * @retval None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M3. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +*******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word MemManage_Handler + .word BusFault_Handler + .word UsageFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word DebugMon_Handler + .word 0 + .word PendSV_Handler + .word SysTick_Handler + .word WWDG_IRQHandler + .word PVD_IRQHandler + .word TAMPER_IRQHandler + .word RTC_IRQHandler + .word FLASH_IRQHandler + .word RCC_IRQHandler + .word EXTI0_IRQHandler + .word EXTI1_IRQHandler + .word EXTI2_IRQHandler + .word EXTI3_IRQHandler + .word EXTI4_IRQHandler + .word DMA1_Channel1_IRQHandler + .word DMA1_Channel2_IRQHandler + .word DMA1_Channel3_IRQHandler + .word DMA1_Channel4_IRQHandler + .word DMA1_Channel5_IRQHandler + .word DMA1_Channel6_IRQHandler + .word DMA1_Channel7_IRQHandler + .word ADC1_2_IRQHandler + .word USB_HP_CAN1_TX_IRQHandler + .word USB_LP_CAN1_RX0_IRQHandler + .word CAN1_RX1_IRQHandler + .word CAN1_SCE_IRQHandler + .word EXTI9_5_IRQHandler + .word TIM1_BRK_TIM9_IRQHandler + .word TIM1_UP_TIM10_IRQHandler + .word TIM1_TRG_COM_TIM11_IRQHandler + .word TIM1_CC_IRQHandler + .word TIM2_IRQHandler + .word TIM3_IRQHandler + .word TIM4_IRQHandler + .word I2C1_EV_IRQHandler + .word I2C1_ER_IRQHandler + .word I2C2_EV_IRQHandler + .word I2C2_ER_IRQHandler + .word SPI1_IRQHandler + .word SPI2_IRQHandler + .word USART1_IRQHandler + .word USART2_IRQHandler + .word USART3_IRQHandler + .word EXTI15_10_IRQHandler + .word RTCAlarm_IRQHandler + .word USBWakeUp_IRQHandler + .word TIM8_BRK_TIM12_IRQHandler + .word TIM8_UP_TIM13_IRQHandler + .word TIM8_TRG_COM_TIM14_IRQHandler + .word TIM8_CC_IRQHandler + .word ADC3_IRQHandler + .word FSMC_IRQHandler + .word SDIO_IRQHandler + .word TIM5_IRQHandler + .word SPI3_IRQHandler + .word UART4_IRQHandler + .word UART5_IRQHandler + .word TIM6_IRQHandler + .word TIM7_IRQHandler + .word DMA2_Channel1_IRQHandler + .word DMA2_Channel2_IRQHandler + .word DMA2_Channel3_IRQHandler + .word DMA2_Channel4_5_IRQHandler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word BootRAM /* @0x1E0. This is for boot in RAM mode for + STM32F10x XL-Density devices. */ +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak MemManage_Handler + .thumb_set MemManage_Handler,Default_Handler + + .weak BusFault_Handler + .thumb_set BusFault_Handler,Default_Handler + + .weak UsageFault_Handler + .thumb_set UsageFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak DebugMon_Handler + .thumb_set DebugMon_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak WWDG_IRQHandler + .thumb_set WWDG_IRQHandler,Default_Handler + + .weak PVD_IRQHandler + .thumb_set PVD_IRQHandler,Default_Handler + + .weak TAMPER_IRQHandler + .thumb_set TAMPER_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_IRQHandler + .thumb_set EXTI0_IRQHandler,Default_Handler + + .weak EXTI1_IRQHandler + .thumb_set EXTI1_IRQHandler,Default_Handler + + .weak EXTI2_IRQHandler + .thumb_set EXTI2_IRQHandler,Default_Handler + + .weak EXTI3_IRQHandler + .thumb_set EXTI3_IRQHandler,Default_Handler + + .weak EXTI4_IRQHandler + .thumb_set EXTI4_IRQHandler,Default_Handler + + .weak DMA1_Channel1_IRQHandler + .thumb_set DMA1_Channel1_IRQHandler,Default_Handler + + .weak DMA1_Channel2_IRQHandler + .thumb_set DMA1_Channel2_IRQHandler,Default_Handler + + .weak DMA1_Channel3_IRQHandler + .thumb_set DMA1_Channel3_IRQHandler,Default_Handler + + .weak DMA1_Channel4_IRQHandler + .thumb_set DMA1_Channel4_IRQHandler,Default_Handler + + .weak DMA1_Channel5_IRQHandler + .thumb_set DMA1_Channel5_IRQHandler,Default_Handler + + .weak DMA1_Channel6_IRQHandler + .thumb_set DMA1_Channel6_IRQHandler,Default_Handler + + .weak DMA1_Channel7_IRQHandler + .thumb_set DMA1_Channel7_IRQHandler,Default_Handler + + .weak ADC1_2_IRQHandler + .thumb_set ADC1_2_IRQHandler,Default_Handler + + .weak USB_HP_CAN1_TX_IRQHandler + .thumb_set USB_HP_CAN1_TX_IRQHandler,Default_Handler + + .weak USB_LP_CAN1_RX0_IRQHandler + .thumb_set USB_LP_CAN1_RX0_IRQHandler,Default_Handler + + .weak CAN1_RX1_IRQHandler + .thumb_set CAN1_RX1_IRQHandler,Default_Handler + + .weak CAN1_SCE_IRQHandler + .thumb_set CAN1_SCE_IRQHandler,Default_Handler + + .weak EXTI9_5_IRQHandler + .thumb_set EXTI9_5_IRQHandler,Default_Handler + + .weak TIM1_BRK_TIM9_IRQHandler + .thumb_set TIM1_BRK_TIM9_IRQHandler,Default_Handler + + .weak TIM1_UP_TIM10_IRQHandler + .thumb_set TIM1_UP_TIM10_IRQHandler,Default_Handler + + .weak TIM1_TRG_COM_TIM11_IRQHandler + .thumb_set TIM1_TRG_COM_TIM11_IRQHandler,Default_Handler + + .weak TIM1_CC_IRQHandler + .thumb_set TIM1_CC_IRQHandler,Default_Handler + + .weak TIM2_IRQHandler + .thumb_set TIM2_IRQHandler,Default_Handler + + .weak TIM3_IRQHandler + .thumb_set TIM3_IRQHandler,Default_Handler + + .weak TIM4_IRQHandler + .thumb_set TIM4_IRQHandler,Default_Handler + + .weak I2C1_EV_IRQHandler + .thumb_set I2C1_EV_IRQHandler,Default_Handler + + .weak I2C1_ER_IRQHandler + .thumb_set I2C1_ER_IRQHandler,Default_Handler + + .weak I2C2_EV_IRQHandler + .thumb_set I2C2_EV_IRQHandler,Default_Handler + + .weak I2C2_ER_IRQHandler + .thumb_set I2C2_ER_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak USART1_IRQHandler + .thumb_set USART1_IRQHandler,Default_Handler + + .weak USART2_IRQHandler + .thumb_set USART2_IRQHandler,Default_Handler + + .weak USART3_IRQHandler + .thumb_set USART3_IRQHandler,Default_Handler + + .weak EXTI15_10_IRQHandler + .thumb_set EXTI15_10_IRQHandler,Default_Handler + + .weak RTCAlarm_IRQHandler + .thumb_set RTCAlarm_IRQHandler,Default_Handler + + .weak USBWakeUp_IRQHandler + .thumb_set USBWakeUp_IRQHandler,Default_Handler + + .weak TIM8_BRK_TIM12_IRQHandler + .thumb_set TIM8_BRK_TIM12_IRQHandler,Default_Handler + + .weak TIM8_UP_TIM13_IRQHandler + .thumb_set TIM8_UP_TIM13_IRQHandler,Default_Handler + + .weak TIM8_TRG_COM_TIM14_IRQHandler + .thumb_set TIM8_TRG_COM_TIM14_IRQHandler,Default_Handler + + .weak TIM8_CC_IRQHandler + .thumb_set TIM8_CC_IRQHandler,Default_Handler + + .weak ADC3_IRQHandler + .thumb_set ADC3_IRQHandler,Default_Handler + + .weak FSMC_IRQHandler + .thumb_set FSMC_IRQHandler,Default_Handler + + .weak SDIO_IRQHandler + .thumb_set SDIO_IRQHandler,Default_Handler + + .weak TIM5_IRQHandler + .thumb_set TIM5_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak TIM6_IRQHandler + .thumb_set TIM6_IRQHandler,Default_Handler + + .weak TIM7_IRQHandler + .thumb_set TIM7_IRQHandler,Default_Handler + + .weak DMA2_Channel1_IRQHandler + .thumb_set DMA2_Channel1_IRQHandler,Default_Handler + + .weak DMA2_Channel2_IRQHandler + .thumb_set DMA2_Channel2_IRQHandler,Default_Handler + + .weak DMA2_Channel3_IRQHandler + .thumb_set DMA2_Channel3_IRQHandler,Default_Handler + + .weak DMA2_Channel4_5_IRQHandler + .thumb_set DMA2_Channel4_5_IRQHandler,Default_Handler + diff --git a/boot_source/platform/CMSIS/ST/STM32F10x/Source/arm/startup_stm32f10x_cl.s b/boot_source/platform/CMSIS/ST/STM32F10x/Source/arm/startup_stm32f10x_cl.s new file mode 100644 index 0000000..7dd5487 --- /dev/null +++ b/boot_source/platform/CMSIS/ST/STM32F10x/Source/arm/startup_stm32f10x_cl.s @@ -0,0 +1,370 @@ +;******************** (C) COPYRIGHT 2011 STMicroelectronics ******************** +;* File Name : startup_stm32f10x_cl.s +;* Author : MCD Application Team +;* Version : V3.5.1 +;* Date : 08-September-2021 +;* Description : STM32F10x Connectivity line devices vector table for MDK-ARM +;* toolchain. +;* This module performs: +;* - Set the initial SP +;* - Set the initial PC == Reset_Handler +;* - Set the vector table entries with the exceptions ISR address +;* - Configure the clock system +;* - Branches to __main in the C library (which eventually +;* calls main()). +;* After Reset the CortexM3 processor is in Thread mode, +;* priority is Privileged, and the Stack is set to Main. +;* <<< Use Configuration Wizard in Context Menu >>> +;******************************************************************************* +;* +;* Copyright (c) 2011 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. +; +;******************************************************************************* + +; Amount of memory (in bytes) allocated for Stack +; Tailor this value to your application needs +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000800 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000200 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD MemManage_Handler ; MPU Fault Handler + DCD BusFault_Handler ; Bus Fault Handler + DCD UsageFault_Handler ; Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD DebugMon_Handler ; Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD WWDG_IRQHandler ; Window Watchdog + DCD PVD_IRQHandler ; PVD through EXTI Line detect + DCD TAMPER_IRQHandler ; Tamper + DCD RTC_IRQHandler ; RTC + DCD FLASH_IRQHandler ; Flash + DCD RCC_IRQHandler ; RCC + DCD EXTI0_IRQHandler ; EXTI Line 0 + DCD EXTI1_IRQHandler ; EXTI Line 1 + DCD EXTI2_IRQHandler ; EXTI Line 2 + DCD EXTI3_IRQHandler ; EXTI Line 3 + DCD EXTI4_IRQHandler ; EXTI Line 4 + DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1 + DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2 + DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3 + DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4 + DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5 + DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6 + DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7 + DCD ADC1_2_IRQHandler ; ADC1 and ADC2 + DCD CAN1_TX_IRQHandler ; CAN1 TX + DCD CAN1_RX0_IRQHandler ; CAN1 RX0 + DCD CAN1_RX1_IRQHandler ; CAN1 RX1 + DCD CAN1_SCE_IRQHandler ; CAN1 SCE + DCD EXTI9_5_IRQHandler ; EXTI Line 9..5 + DCD TIM1_BRK_IRQHandler ; TIM1 Break + DCD TIM1_UP_IRQHandler ; TIM1 Update + DCD TIM1_TRG_COM_IRQHandler ; TIM1 Trigger and Commutation + DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare + DCD TIM2_IRQHandler ; TIM2 + DCD TIM3_IRQHandler ; TIM3 + DCD TIM4_IRQHandler ; TIM4 + DCD I2C1_EV_IRQHandler ; I2C1 Event + DCD I2C1_ER_IRQHandler ; I2C1 Error + DCD I2C2_EV_IRQHandler ; I2C2 Event + DCD I2C2_ER_IRQHandler ; I2C1 Error + DCD SPI1_IRQHandler ; SPI1 + DCD SPI2_IRQHandler ; SPI2 + DCD USART1_IRQHandler ; USART1 + DCD USART2_IRQHandler ; USART2 + DCD USART3_IRQHandler ; USART3 + DCD EXTI15_10_IRQHandler ; EXTI Line 15..10 + DCD RTCAlarm_IRQHandler ; RTC alarm through EXTI line + DCD OTG_FS_WKUP_IRQHandler ; USB OTG FS Wakeup through EXTI line + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD TIM5_IRQHandler ; TIM5 + DCD SPI3_IRQHandler ; SPI3 + DCD UART4_IRQHandler ; UART4 + DCD UART5_IRQHandler ; UART5 + DCD TIM6_IRQHandler ; TIM6 + DCD TIM7_IRQHandler ; TIM7 + DCD DMA2_Channel1_IRQHandler ; DMA2 Channel1 + DCD DMA2_Channel2_IRQHandler ; DMA2 Channel2 + DCD DMA2_Channel3_IRQHandler ; DMA2 Channel3 + DCD DMA2_Channel4_IRQHandler ; DMA2 Channel4 + DCD DMA2_Channel5_IRQHandler ; DMA2 Channel5 + DCD ETH_IRQHandler ; Ethernet + DCD ETH_WKUP_IRQHandler ; Ethernet Wakeup through EXTI line + DCD CAN2_TX_IRQHandler ; CAN2 TX + DCD CAN2_RX0_IRQHandler ; CAN2 RX0 + DCD CAN2_RX1_IRQHandler ; CAN2 RX1 + DCD CAN2_SCE_IRQHandler ; CAN2 SCE + DCD OTG_FS_IRQHandler ; USB OTG FS +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + AREA |.text|, CODE, READONLY + +; Reset handler +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +MemManage_Handler\ + PROC + EXPORT MemManage_Handler [WEAK] + B . + ENDP +BusFault_Handler\ + PROC + EXPORT BusFault_Handler [WEAK] + B . + ENDP +UsageFault_Handler\ + PROC + EXPORT UsageFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +DebugMon_Handler\ + PROC + EXPORT DebugMon_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT WWDG_IRQHandler [WEAK] + EXPORT PVD_IRQHandler [WEAK] + EXPORT TAMPER_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT RCC_IRQHandler [WEAK] + EXPORT EXTI0_IRQHandler [WEAK] + EXPORT EXTI1_IRQHandler [WEAK] + EXPORT EXTI2_IRQHandler [WEAK] + EXPORT EXTI3_IRQHandler [WEAK] + EXPORT EXTI4_IRQHandler [WEAK] + EXPORT DMA1_Channel1_IRQHandler [WEAK] + EXPORT DMA1_Channel2_IRQHandler [WEAK] + EXPORT DMA1_Channel3_IRQHandler [WEAK] + EXPORT DMA1_Channel4_IRQHandler [WEAK] + EXPORT DMA1_Channel5_IRQHandler [WEAK] + EXPORT DMA1_Channel6_IRQHandler [WEAK] + EXPORT DMA1_Channel7_IRQHandler [WEAK] + EXPORT ADC1_2_IRQHandler [WEAK] + EXPORT CAN1_TX_IRQHandler [WEAK] + EXPORT CAN1_RX0_IRQHandler [WEAK] + EXPORT CAN1_RX1_IRQHandler [WEAK] + EXPORT CAN1_SCE_IRQHandler [WEAK] + EXPORT EXTI9_5_IRQHandler [WEAK] + EXPORT TIM1_BRK_IRQHandler [WEAK] + EXPORT TIM1_UP_IRQHandler [WEAK] + EXPORT TIM1_TRG_COM_IRQHandler [WEAK] + EXPORT TIM1_CC_IRQHandler [WEAK] + EXPORT TIM2_IRQHandler [WEAK] + EXPORT TIM3_IRQHandler [WEAK] + EXPORT TIM4_IRQHandler [WEAK] + EXPORT I2C1_EV_IRQHandler [WEAK] + EXPORT I2C1_ER_IRQHandler [WEAK] + EXPORT I2C2_EV_IRQHandler [WEAK] + EXPORT I2C2_ER_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT USART1_IRQHandler [WEAK] + EXPORT USART2_IRQHandler [WEAK] + EXPORT USART3_IRQHandler [WEAK] + EXPORT EXTI15_10_IRQHandler [WEAK] + EXPORT RTCAlarm_IRQHandler [WEAK] + EXPORT OTG_FS_WKUP_IRQHandler [WEAK] + EXPORT TIM5_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT TIM6_IRQHandler [WEAK] + EXPORT TIM7_IRQHandler [WEAK] + EXPORT DMA2_Channel1_IRQHandler [WEAK] + EXPORT DMA2_Channel2_IRQHandler [WEAK] + EXPORT DMA2_Channel3_IRQHandler [WEAK] + EXPORT DMA2_Channel4_IRQHandler [WEAK] + EXPORT DMA2_Channel5_IRQHandler [WEAK] + EXPORT ETH_IRQHandler [WEAK] + EXPORT ETH_WKUP_IRQHandler [WEAK] + EXPORT CAN2_TX_IRQHandler [WEAK] + EXPORT CAN2_RX0_IRQHandler [WEAK] + EXPORT CAN2_RX1_IRQHandler [WEAK] + EXPORT CAN2_SCE_IRQHandler [WEAK] + EXPORT OTG_FS_IRQHandler [WEAK] + +WWDG_IRQHandler +PVD_IRQHandler +TAMPER_IRQHandler +RTC_IRQHandler +FLASH_IRQHandler +RCC_IRQHandler +EXTI0_IRQHandler +EXTI1_IRQHandler +EXTI2_IRQHandler +EXTI3_IRQHandler +EXTI4_IRQHandler +DMA1_Channel1_IRQHandler +DMA1_Channel2_IRQHandler +DMA1_Channel3_IRQHandler +DMA1_Channel4_IRQHandler +DMA1_Channel5_IRQHandler +DMA1_Channel6_IRQHandler +DMA1_Channel7_IRQHandler +ADC1_2_IRQHandler +CAN1_TX_IRQHandler +CAN1_RX0_IRQHandler +CAN1_RX1_IRQHandler +CAN1_SCE_IRQHandler +EXTI9_5_IRQHandler +TIM1_BRK_IRQHandler +TIM1_UP_IRQHandler +TIM1_TRG_COM_IRQHandler +TIM1_CC_IRQHandler +TIM2_IRQHandler +TIM3_IRQHandler +TIM4_IRQHandler +I2C1_EV_IRQHandler +I2C1_ER_IRQHandler +I2C2_EV_IRQHandler +I2C2_ER_IRQHandler +SPI1_IRQHandler +SPI2_IRQHandler +USART1_IRQHandler +USART2_IRQHandler +USART3_IRQHandler +EXTI15_10_IRQHandler +RTCAlarm_IRQHandler +OTG_FS_WKUP_IRQHandler +TIM5_IRQHandler +SPI3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +TIM6_IRQHandler +TIM7_IRQHandler +DMA2_Channel1_IRQHandler +DMA2_Channel2_IRQHandler +DMA2_Channel3_IRQHandler +DMA2_Channel4_IRQHandler +DMA2_Channel5_IRQHandler +ETH_IRQHandler +ETH_WKUP_IRQHandler +CAN2_TX_IRQHandler +CAN2_RX0_IRQHandler +CAN2_RX1_IRQHandler +CAN2_SCE_IRQHandler +OTG_FS_IRQHandler + + B . + + ENDP + + ALIGN + +;******************************************************************************* +; User Stack and Heap initialization +;******************************************************************************* + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap + + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + + ALIGN + + ENDIF + + END + +;******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE***** diff --git a/boot_source/platform/CMSIS/ST/STM32F10x/Source/arm/startup_stm32f10x_hd.s b/boot_source/platform/CMSIS/ST/STM32F10x/Source/arm/startup_stm32f10x_hd.s new file mode 100644 index 0000000..1efbb07 --- /dev/null +++ b/boot_source/platform/CMSIS/ST/STM32F10x/Source/arm/startup_stm32f10x_hd.s @@ -0,0 +1,359 @@ +;******************** (C) COPYRIGHT 2011 STMicroelectronics ******************** +;* File Name : startup_stm32f10x_hd.s +;* Author : MCD Application Team +;* Version : V3.5.1 +;* Date : 08-September-2021 +;* Description : STM32F10x High Density Devices vector table for MDK-ARM +;* toolchain. +;* This module performs: +;* - Set the initial SP +;* - Set the initial PC == Reset_Handler +;* - Set the vector table entries with the exceptions ISR address +;* - Configure the clock system and also configure the external +;* SRAM mounted on STM3210E-EVAL board to be used as data +;* memory (optional, to be enabled by user) +;* - Branches to __main in the C library (which eventually +;* calls main()). +;* After Reset the CortexM3 processor is in Thread mode, +;* priority is Privileged, and the Stack is set to Main. +;* <<< Use Configuration Wizard in Context Menu >>> +;******************************************************************************* +;* +;* Copyright (c) 2011 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. +; +;******************************************************************************* + +; Amount of memory (in bytes) allocated for Stack +; Tailor this value to your application needs +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000200 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD MemManage_Handler ; MPU Fault Handler + DCD BusFault_Handler ; Bus Fault Handler + DCD UsageFault_Handler ; Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD DebugMon_Handler ; Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD WWDG_IRQHandler ; Window Watchdog + DCD PVD_IRQHandler ; PVD through EXTI Line detect + DCD TAMPER_IRQHandler ; Tamper + DCD RTC_IRQHandler ; RTC + DCD FLASH_IRQHandler ; Flash + DCD RCC_IRQHandler ; RCC + DCD EXTI0_IRQHandler ; EXTI Line 0 + DCD EXTI1_IRQHandler ; EXTI Line 1 + DCD EXTI2_IRQHandler ; EXTI Line 2 + DCD EXTI3_IRQHandler ; EXTI Line 3 + DCD EXTI4_IRQHandler ; EXTI Line 4 + DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1 + DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2 + DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3 + DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4 + DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5 + DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6 + DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7 + DCD ADC1_2_IRQHandler ; ADC1 & ADC2 + DCD USB_HP_CAN1_TX_IRQHandler ; USB High Priority or CAN1 TX + DCD USB_LP_CAN1_RX0_IRQHandler ; USB Low Priority or CAN1 RX0 + DCD CAN1_RX1_IRQHandler ; CAN1 RX1 + DCD CAN1_SCE_IRQHandler ; CAN1 SCE + DCD EXTI9_5_IRQHandler ; EXTI Line 9..5 + DCD TIM1_BRK_IRQHandler ; TIM1 Break + DCD TIM1_UP_IRQHandler ; TIM1 Update + DCD TIM1_TRG_COM_IRQHandler ; TIM1 Trigger and Commutation + DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare + DCD TIM2_IRQHandler ; TIM2 + DCD TIM3_IRQHandler ; TIM3 + DCD TIM4_IRQHandler ; TIM4 + DCD I2C1_EV_IRQHandler ; I2C1 Event + DCD I2C1_ER_IRQHandler ; I2C1 Error + DCD I2C2_EV_IRQHandler ; I2C2 Event + DCD I2C2_ER_IRQHandler ; I2C2 Error + DCD SPI1_IRQHandler ; SPI1 + DCD SPI2_IRQHandler ; SPI2 + DCD USART1_IRQHandler ; USART1 + DCD USART2_IRQHandler ; USART2 + DCD USART3_IRQHandler ; USART3 + DCD EXTI15_10_IRQHandler ; EXTI Line 15..10 + DCD RTCAlarm_IRQHandler ; RTC Alarm through EXTI Line + DCD USBWakeUp_IRQHandler ; USB Wakeup from suspend + DCD TIM8_BRK_IRQHandler ; TIM8 Break + DCD TIM8_UP_IRQHandler ; TIM8 Update + DCD TIM8_TRG_COM_IRQHandler ; TIM8 Trigger and Commutation + DCD TIM8_CC_IRQHandler ; TIM8 Capture Compare + DCD ADC3_IRQHandler ; ADC3 + DCD FSMC_IRQHandler ; FSMC + DCD SDIO_IRQHandler ; SDIO + DCD TIM5_IRQHandler ; TIM5 + DCD SPI3_IRQHandler ; SPI3 + DCD UART4_IRQHandler ; UART4 + DCD UART5_IRQHandler ; UART5 + DCD TIM6_IRQHandler ; TIM6 + DCD TIM7_IRQHandler ; TIM7 + DCD DMA2_Channel1_IRQHandler ; DMA2 Channel1 + DCD DMA2_Channel2_IRQHandler ; DMA2 Channel2 + DCD DMA2_Channel3_IRQHandler ; DMA2 Channel3 + DCD DMA2_Channel4_5_IRQHandler ; DMA2 Channel4 & Channel5 +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + AREA |.text|, CODE, READONLY + +; Reset handler +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IMPORT SystemInit + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +MemManage_Handler\ + PROC + EXPORT MemManage_Handler [WEAK] + B . + ENDP +BusFault_Handler\ + PROC + EXPORT BusFault_Handler [WEAK] + B . + ENDP +UsageFault_Handler\ + PROC + EXPORT UsageFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +DebugMon_Handler\ + PROC + EXPORT DebugMon_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT WWDG_IRQHandler [WEAK] + EXPORT PVD_IRQHandler [WEAK] + EXPORT TAMPER_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT RCC_IRQHandler [WEAK] + EXPORT EXTI0_IRQHandler [WEAK] + EXPORT EXTI1_IRQHandler [WEAK] + EXPORT EXTI2_IRQHandler [WEAK] + EXPORT EXTI3_IRQHandler [WEAK] + EXPORT EXTI4_IRQHandler [WEAK] + EXPORT DMA1_Channel1_IRQHandler [WEAK] + EXPORT DMA1_Channel2_IRQHandler [WEAK] + EXPORT DMA1_Channel3_IRQHandler [WEAK] + EXPORT DMA1_Channel4_IRQHandler [WEAK] + EXPORT DMA1_Channel5_IRQHandler [WEAK] + EXPORT DMA1_Channel6_IRQHandler [WEAK] + EXPORT DMA1_Channel7_IRQHandler [WEAK] + EXPORT ADC1_2_IRQHandler [WEAK] + EXPORT USB_HP_CAN1_TX_IRQHandler [WEAK] + EXPORT USB_LP_CAN1_RX0_IRQHandler [WEAK] + EXPORT CAN1_RX1_IRQHandler [WEAK] + EXPORT CAN1_SCE_IRQHandler [WEAK] + EXPORT EXTI9_5_IRQHandler [WEAK] + EXPORT TIM1_BRK_IRQHandler [WEAK] + EXPORT TIM1_UP_IRQHandler [WEAK] + EXPORT TIM1_TRG_COM_IRQHandler [WEAK] + EXPORT TIM1_CC_IRQHandler [WEAK] + EXPORT TIM2_IRQHandler [WEAK] + EXPORT TIM3_IRQHandler [WEAK] + EXPORT TIM4_IRQHandler [WEAK] + EXPORT I2C1_EV_IRQHandler [WEAK] + EXPORT I2C1_ER_IRQHandler [WEAK] + EXPORT I2C2_EV_IRQHandler [WEAK] + EXPORT I2C2_ER_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT USART1_IRQHandler [WEAK] + EXPORT USART2_IRQHandler [WEAK] + EXPORT USART3_IRQHandler [WEAK] + EXPORT EXTI15_10_IRQHandler [WEAK] + EXPORT RTCAlarm_IRQHandler [WEAK] + EXPORT USBWakeUp_IRQHandler [WEAK] + EXPORT TIM8_BRK_IRQHandler [WEAK] + EXPORT TIM8_UP_IRQHandler [WEAK] + EXPORT TIM8_TRG_COM_IRQHandler [WEAK] + EXPORT TIM8_CC_IRQHandler [WEAK] + EXPORT ADC3_IRQHandler [WEAK] + EXPORT FSMC_IRQHandler [WEAK] + EXPORT SDIO_IRQHandler [WEAK] + EXPORT TIM5_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT TIM6_IRQHandler [WEAK] + EXPORT TIM7_IRQHandler [WEAK] + EXPORT DMA2_Channel1_IRQHandler [WEAK] + EXPORT DMA2_Channel2_IRQHandler [WEAK] + EXPORT DMA2_Channel3_IRQHandler [WEAK] + EXPORT DMA2_Channel4_5_IRQHandler [WEAK] + +WWDG_IRQHandler +PVD_IRQHandler +TAMPER_IRQHandler +RTC_IRQHandler +FLASH_IRQHandler +RCC_IRQHandler +EXTI0_IRQHandler +EXTI1_IRQHandler +EXTI2_IRQHandler +EXTI3_IRQHandler +EXTI4_IRQHandler +DMA1_Channel1_IRQHandler +DMA1_Channel2_IRQHandler +DMA1_Channel3_IRQHandler +DMA1_Channel4_IRQHandler +DMA1_Channel5_IRQHandler +DMA1_Channel6_IRQHandler +DMA1_Channel7_IRQHandler +ADC1_2_IRQHandler +USB_HP_CAN1_TX_IRQHandler +USB_LP_CAN1_RX0_IRQHandler +CAN1_RX1_IRQHandler +CAN1_SCE_IRQHandler +EXTI9_5_IRQHandler +TIM1_BRK_IRQHandler +TIM1_UP_IRQHandler +TIM1_TRG_COM_IRQHandler +TIM1_CC_IRQHandler +TIM2_IRQHandler +TIM3_IRQHandler +TIM4_IRQHandler +I2C1_EV_IRQHandler +I2C1_ER_IRQHandler +I2C2_EV_IRQHandler +I2C2_ER_IRQHandler +SPI1_IRQHandler +SPI2_IRQHandler +USART1_IRQHandler +USART2_IRQHandler +USART3_IRQHandler +EXTI15_10_IRQHandler +RTCAlarm_IRQHandler +USBWakeUp_IRQHandler +TIM8_BRK_IRQHandler +TIM8_UP_IRQHandler +TIM8_TRG_COM_IRQHandler +TIM8_CC_IRQHandler +ADC3_IRQHandler +FSMC_IRQHandler +SDIO_IRQHandler +TIM5_IRQHandler +SPI3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +TIM6_IRQHandler +TIM7_IRQHandler +DMA2_Channel1_IRQHandler +DMA2_Channel2_IRQHandler +DMA2_Channel3_IRQHandler +DMA2_Channel4_5_IRQHandler + B . + + ENDP + + ALIGN + +;******************************************************************************* +; User Stack and Heap initialization +;******************************************************************************* + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap + + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + + ALIGN + + ENDIF + + END + diff --git a/boot_source/platform/CMSIS/ST/STM32F10x/Source/arm/startup_stm32f10x_hd_vl.s b/boot_source/platform/CMSIS/ST/STM32F10x/Source/arm/startup_stm32f10x_hd_vl.s new file mode 100644 index 0000000..93a3261 --- /dev/null +++ b/boot_source/platform/CMSIS/ST/STM32F10x/Source/arm/startup_stm32f10x_hd_vl.s @@ -0,0 +1,347 @@ +;******************** (C) COPYRIGHT 2011 STMicroelectronics ******************** +;* File Name : startup_stm32f10x_hd_vl.s +;* Author : MCD Application Team +;* Version : V3.5.1 +;* Date : 08-September-2021 +;* Description : STM32F10x High Density Value Line Devices vector table +;* for MDK-ARM toolchain. +;* This module performs: +;* - Set the initial SP +;* - Set the initial PC == Reset_Handler +;* - Set the vector table entries with the exceptions ISR address +;* - Configure the clock system and also configure the external +;* SRAM mounted on STM32100E-EVAL board to be used as data +;* memory (optional, to be enabled by user) +;* - Branches to __main in the C library (which eventually +;* calls main()). +;* After Reset the CortexM3 processor is in Thread mode, +;* priority is Privileged, and the Stack is set to Main. +;* <<< Use Configuration Wizard in Context Menu >>> +;******************************************************************************* +;* +;* Copyright (c) 2011 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. +; +;******************************************************************************* + +; Amount of memory (in bytes) allocated for Stack +; Tailor this value to your application needs +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000200 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD MemManage_Handler ; MPU Fault Handler + DCD BusFault_Handler ; Bus Fault Handler + DCD UsageFault_Handler ; Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD DebugMon_Handler ; Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD WWDG_IRQHandler ; Window Watchdog + DCD PVD_IRQHandler ; PVD through EXTI Line detect + DCD TAMPER_IRQHandler ; Tamper + DCD RTC_IRQHandler ; RTC + DCD FLASH_IRQHandler ; Flash + DCD RCC_IRQHandler ; RCC + DCD EXTI0_IRQHandler ; EXTI Line 0 + DCD EXTI1_IRQHandler ; EXTI Line 1 + DCD EXTI2_IRQHandler ; EXTI Line 2 + DCD EXTI3_IRQHandler ; EXTI Line 3 + DCD EXTI4_IRQHandler ; EXTI Line 4 + DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1 + DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2 + DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3 + DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4 + DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5 + DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6 + DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7 + DCD ADC1_IRQHandler ; ADC1 + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD EXTI9_5_IRQHandler ; EXTI Line 9..5 + DCD TIM1_BRK_TIM15_IRQHandler ; TIM1 Break and TIM15 + DCD TIM1_UP_TIM16_IRQHandler ; TIM1 Update and TIM16 + DCD TIM1_TRG_COM_TIM17_IRQHandler ; TIM1 Trigger and Commutation and TIM17 + DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare + DCD TIM2_IRQHandler ; TIM2 + DCD TIM3_IRQHandler ; TIM3 + DCD TIM4_IRQHandler ; TIM4 + DCD I2C1_EV_IRQHandler ; I2C1 Event + DCD I2C1_ER_IRQHandler ; I2C1 Error + DCD I2C2_EV_IRQHandler ; I2C2 Event + DCD I2C2_ER_IRQHandler ; I2C2 Error + DCD SPI1_IRQHandler ; SPI1 + DCD SPI2_IRQHandler ; SPI2 + DCD USART1_IRQHandler ; USART1 + DCD USART2_IRQHandler ; USART2 + DCD USART3_IRQHandler ; USART3 + DCD EXTI15_10_IRQHandler ; EXTI Line 15..10 + DCD RTCAlarm_IRQHandler ; RTC Alarm through EXTI Line + DCD CEC_IRQHandler ; HDMI-CEC + DCD TIM12_IRQHandler ; TIM12 + DCD TIM13_IRQHandler ; TIM13 + DCD TIM14_IRQHandler ; TIM14 + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD TIM5_IRQHandler ; TIM5 + DCD SPI3_IRQHandler ; SPI3 + DCD UART4_IRQHandler ; UART4 + DCD UART5_IRQHandler ; UART5 + DCD TIM6_DAC_IRQHandler ; TIM6 and DAC underrun + DCD TIM7_IRQHandler ; TIM7 + DCD DMA2_Channel1_IRQHandler ; DMA2 Channel1 + DCD DMA2_Channel2_IRQHandler ; DMA2 Channel2 + DCD DMA2_Channel3_IRQHandler ; DMA2 Channel3 + DCD DMA2_Channel4_5_IRQHandler ; DMA2 Channel4 & Channel5 + DCD DMA2_Channel5_IRQHandler ; DMA2 Channel5 +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + AREA |.text|, CODE, READONLY + +; Reset handler +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IMPORT SystemInit + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +MemManage_Handler\ + PROC + EXPORT MemManage_Handler [WEAK] + B . + ENDP +BusFault_Handler\ + PROC + EXPORT BusFault_Handler [WEAK] + B . + ENDP +UsageFault_Handler\ + PROC + EXPORT UsageFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +DebugMon_Handler\ + PROC + EXPORT DebugMon_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT WWDG_IRQHandler [WEAK] + EXPORT PVD_IRQHandler [WEAK] + EXPORT TAMPER_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT RCC_IRQHandler [WEAK] + EXPORT EXTI0_IRQHandler [WEAK] + EXPORT EXTI1_IRQHandler [WEAK] + EXPORT EXTI2_IRQHandler [WEAK] + EXPORT EXTI3_IRQHandler [WEAK] + EXPORT EXTI4_IRQHandler [WEAK] + EXPORT DMA1_Channel1_IRQHandler [WEAK] + EXPORT DMA1_Channel2_IRQHandler [WEAK] + EXPORT DMA1_Channel3_IRQHandler [WEAK] + EXPORT DMA1_Channel4_IRQHandler [WEAK] + EXPORT DMA1_Channel5_IRQHandler [WEAK] + EXPORT DMA1_Channel6_IRQHandler [WEAK] + EXPORT DMA1_Channel7_IRQHandler [WEAK] + EXPORT ADC1_IRQHandler [WEAK] + EXPORT EXTI9_5_IRQHandler [WEAK] + EXPORT TIM1_BRK_TIM15_IRQHandler [WEAK] + EXPORT TIM1_UP_TIM16_IRQHandler [WEAK] + EXPORT TIM1_TRG_COM_TIM17_IRQHandler [WEAK] + EXPORT TIM1_CC_IRQHandler [WEAK] + EXPORT TIM2_IRQHandler [WEAK] + EXPORT TIM3_IRQHandler [WEAK] + EXPORT TIM4_IRQHandler [WEAK] + EXPORT I2C1_EV_IRQHandler [WEAK] + EXPORT I2C1_ER_IRQHandler [WEAK] + EXPORT I2C2_EV_IRQHandler [WEAK] + EXPORT I2C2_ER_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT USART1_IRQHandler [WEAK] + EXPORT USART2_IRQHandler [WEAK] + EXPORT USART3_IRQHandler [WEAK] + EXPORT EXTI15_10_IRQHandler [WEAK] + EXPORT RTCAlarm_IRQHandler [WEAK] + EXPORT CEC_IRQHandler [WEAK] + EXPORT TIM12_IRQHandler [WEAK] + EXPORT TIM13_IRQHandler [WEAK] + EXPORT TIM14_IRQHandler [WEAK] + EXPORT TIM5_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT TIM6_DAC_IRQHandler [WEAK] + EXPORT TIM7_IRQHandler [WEAK] + EXPORT DMA2_Channel1_IRQHandler [WEAK] + EXPORT DMA2_Channel2_IRQHandler [WEAK] + EXPORT DMA2_Channel3_IRQHandler [WEAK] + EXPORT DMA2_Channel4_5_IRQHandler [WEAK] + EXPORT DMA2_Channel5_IRQHandler [WEAK] + +WWDG_IRQHandler +PVD_IRQHandler +TAMPER_IRQHandler +RTC_IRQHandler +FLASH_IRQHandler +RCC_IRQHandler +EXTI0_IRQHandler +EXTI1_IRQHandler +EXTI2_IRQHandler +EXTI3_IRQHandler +EXTI4_IRQHandler +DMA1_Channel1_IRQHandler +DMA1_Channel2_IRQHandler +DMA1_Channel3_IRQHandler +DMA1_Channel4_IRQHandler +DMA1_Channel5_IRQHandler +DMA1_Channel6_IRQHandler +DMA1_Channel7_IRQHandler +ADC1_IRQHandler +EXTI9_5_IRQHandler +TIM1_BRK_TIM15_IRQHandler +TIM1_UP_TIM16_IRQHandler +TIM1_TRG_COM_TIM17_IRQHandler +TIM1_CC_IRQHandler +TIM2_IRQHandler +TIM3_IRQHandler +TIM4_IRQHandler +I2C1_EV_IRQHandler +I2C1_ER_IRQHandler +I2C2_EV_IRQHandler +I2C2_ER_IRQHandler +SPI1_IRQHandler +SPI2_IRQHandler +USART1_IRQHandler +USART2_IRQHandler +USART3_IRQHandler +EXTI15_10_IRQHandler +RTCAlarm_IRQHandler +CEC_IRQHandler +TIM12_IRQHandler +TIM13_IRQHandler +TIM14_IRQHandler +TIM5_IRQHandler +SPI3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +TIM6_DAC_IRQHandler +TIM7_IRQHandler +DMA2_Channel1_IRQHandler +DMA2_Channel2_IRQHandler +DMA2_Channel3_IRQHandler +DMA2_Channel4_5_IRQHandler +DMA2_Channel5_IRQHandler + B . + + ENDP + + ALIGN + +;******************************************************************************* +; User Stack and Heap initialization +;******************************************************************************* + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap + + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + + ALIGN + + ENDIF + + END + diff --git a/boot_source/platform/CMSIS/ST/STM32F10x/Source/arm/startup_stm32f10x_ld.s b/boot_source/platform/CMSIS/ST/STM32F10x/Source/arm/startup_stm32f10x_ld.s new file mode 100644 index 0000000..2c5c976 --- /dev/null +++ b/boot_source/platform/CMSIS/ST/STM32F10x/Source/arm/startup_stm32f10x_ld.s @@ -0,0 +1,298 @@ +;******************** (C) COPYRIGHT 2011 STMicroelectronics ******************** +;* File Name : startup_stm32f10x_ld.s +;* Author : MCD Application Team +;* Version : V3.5.1 +;* Date : 08-September-2021 +;* Description : STM32F10x Low Density Devices vector table for MDK-ARM +;* toolchain. +;* This module performs: +;* - Set the initial SP +;* - Set the initial PC == Reset_Handler +;* - Set the vector table entries with the exceptions ISR address +;* - Configure the clock system +;* - Branches to __main in the C library (which eventually +;* calls main()). +;* After Reset the CortexM3 processor is in Thread mode, +;* priority is Privileged, and the Stack is set to Main. +;* <<< Use Configuration Wizard in Context Menu >>> +;******************************************************************************* +;* +;* Copyright (c) 2011 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. +; +;******************************************************************************* + +; Amount of memory (in bytes) allocated for Stack +; Tailor this value to your application needs +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000200 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD MemManage_Handler ; MPU Fault Handler + DCD BusFault_Handler ; Bus Fault Handler + DCD UsageFault_Handler ; Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD DebugMon_Handler ; Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD WWDG_IRQHandler ; Window Watchdog + DCD PVD_IRQHandler ; PVD through EXTI Line detect + DCD TAMPER_IRQHandler ; Tamper + DCD RTC_IRQHandler ; RTC + DCD FLASH_IRQHandler ; Flash + DCD RCC_IRQHandler ; RCC + DCD EXTI0_IRQHandler ; EXTI Line 0 + DCD EXTI1_IRQHandler ; EXTI Line 1 + DCD EXTI2_IRQHandler ; EXTI Line 2 + DCD EXTI3_IRQHandler ; EXTI Line 3 + DCD EXTI4_IRQHandler ; EXTI Line 4 + DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1 + DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2 + DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3 + DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4 + DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5 + DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6 + DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7 + DCD ADC1_2_IRQHandler ; ADC1_2 + DCD USB_HP_CAN1_TX_IRQHandler ; USB High Priority or CAN1 TX + DCD USB_LP_CAN1_RX0_IRQHandler ; USB Low Priority or CAN1 RX0 + DCD CAN1_RX1_IRQHandler ; CAN1 RX1 + DCD CAN1_SCE_IRQHandler ; CAN1 SCE + DCD EXTI9_5_IRQHandler ; EXTI Line 9..5 + DCD TIM1_BRK_IRQHandler ; TIM1 Break + DCD TIM1_UP_IRQHandler ; TIM1 Update + DCD TIM1_TRG_COM_IRQHandler ; TIM1 Trigger and Commutation + DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare + DCD TIM2_IRQHandler ; TIM2 + DCD TIM3_IRQHandler ; TIM3 + DCD 0 ; Reserved + DCD I2C1_EV_IRQHandler ; I2C1 Event + DCD I2C1_ER_IRQHandler ; I2C1 Error + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SPI1_IRQHandler ; SPI1 + DCD 0 ; Reserved + DCD USART1_IRQHandler ; USART1 + DCD USART2_IRQHandler ; USART2 + DCD 0 ; Reserved + DCD EXTI15_10_IRQHandler ; EXTI Line 15..10 + DCD RTCAlarm_IRQHandler ; RTC Alarm through EXTI Line + DCD USBWakeUp_IRQHandler ; USB Wakeup from suspend +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + AREA |.text|, CODE, READONLY + +; Reset handler routine +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IMPORT SystemInit + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +MemManage_Handler\ + PROC + EXPORT MemManage_Handler [WEAK] + B . + ENDP +BusFault_Handler\ + PROC + EXPORT BusFault_Handler [WEAK] + B . + ENDP +UsageFault_Handler\ + PROC + EXPORT UsageFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +DebugMon_Handler\ + PROC + EXPORT DebugMon_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT WWDG_IRQHandler [WEAK] + EXPORT PVD_IRQHandler [WEAK] + EXPORT TAMPER_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT RCC_IRQHandler [WEAK] + EXPORT EXTI0_IRQHandler [WEAK] + EXPORT EXTI1_IRQHandler [WEAK] + EXPORT EXTI2_IRQHandler [WEAK] + EXPORT EXTI3_IRQHandler [WEAK] + EXPORT EXTI4_IRQHandler [WEAK] + EXPORT DMA1_Channel1_IRQHandler [WEAK] + EXPORT DMA1_Channel2_IRQHandler [WEAK] + EXPORT DMA1_Channel3_IRQHandler [WEAK] + EXPORT DMA1_Channel4_IRQHandler [WEAK] + EXPORT DMA1_Channel5_IRQHandler [WEAK] + EXPORT DMA1_Channel6_IRQHandler [WEAK] + EXPORT DMA1_Channel7_IRQHandler [WEAK] + EXPORT ADC1_2_IRQHandler [WEAK] + EXPORT USB_HP_CAN1_TX_IRQHandler [WEAK] + EXPORT USB_LP_CAN1_RX0_IRQHandler [WEAK] + EXPORT CAN1_RX1_IRQHandler [WEAK] + EXPORT CAN1_SCE_IRQHandler [WEAK] + EXPORT EXTI9_5_IRQHandler [WEAK] + EXPORT TIM1_BRK_IRQHandler [WEAK] + EXPORT TIM1_UP_IRQHandler [WEAK] + EXPORT TIM1_TRG_COM_IRQHandler [WEAK] + EXPORT TIM1_CC_IRQHandler [WEAK] + EXPORT TIM2_IRQHandler [WEAK] + EXPORT TIM3_IRQHandler [WEAK] + EXPORT I2C1_EV_IRQHandler [WEAK] + EXPORT I2C1_ER_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT USART1_IRQHandler [WEAK] + EXPORT USART2_IRQHandler [WEAK] + EXPORT EXTI15_10_IRQHandler [WEAK] + EXPORT RTCAlarm_IRQHandler [WEAK] + EXPORT USBWakeUp_IRQHandler [WEAK] + +WWDG_IRQHandler +PVD_IRQHandler +TAMPER_IRQHandler +RTC_IRQHandler +FLASH_IRQHandler +RCC_IRQHandler +EXTI0_IRQHandler +EXTI1_IRQHandler +EXTI2_IRQHandler +EXTI3_IRQHandler +EXTI4_IRQHandler +DMA1_Channel1_IRQHandler +DMA1_Channel2_IRQHandler +DMA1_Channel3_IRQHandler +DMA1_Channel4_IRQHandler +DMA1_Channel5_IRQHandler +DMA1_Channel6_IRQHandler +DMA1_Channel7_IRQHandler +ADC1_2_IRQHandler +USB_HP_CAN1_TX_IRQHandler +USB_LP_CAN1_RX0_IRQHandler +CAN1_RX1_IRQHandler +CAN1_SCE_IRQHandler +EXTI9_5_IRQHandler +TIM1_BRK_IRQHandler +TIM1_UP_IRQHandler +TIM1_TRG_COM_IRQHandler +TIM1_CC_IRQHandler +TIM2_IRQHandler +TIM3_IRQHandler +I2C1_EV_IRQHandler +I2C1_ER_IRQHandler +SPI1_IRQHandler +USART1_IRQHandler +USART2_IRQHandler +EXTI15_10_IRQHandler +RTCAlarm_IRQHandler +USBWakeUp_IRQHandler + + B . + + ENDP + + ALIGN + +;******************************************************************************* +; User Stack and Heap initialization +;******************************************************************************* + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap + + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + + ALIGN + + ENDIF + + END + diff --git a/boot_source/platform/CMSIS/ST/STM32F10x/Source/arm/startup_stm32f10x_ld_vl.s b/boot_source/platform/CMSIS/ST/STM32F10x/Source/arm/startup_stm32f10x_ld_vl.s new file mode 100644 index 0000000..b38d7ea --- /dev/null +++ b/boot_source/platform/CMSIS/ST/STM32F10x/Source/arm/startup_stm32f10x_ld_vl.s @@ -0,0 +1,305 @@ +;******************** (C) COPYRIGHT 2011 STMicroelectronics ******************** +;* File Name : startup_stm32f10x_ld_vl.s +;* Author : MCD Application Team +;* Version : V3.5.1 +;* Date : 08-September-2021 +;* Description : STM32F10x Low Density Value Line Devices vector table +;* for MDK-ARM toolchain. +;* This module performs: +;* - Set the initial SP +;* - Set the initial PC == Reset_Handler +;* - Set the vector table entries with the exceptions ISR address +;* - Configure the clock system +;* - Branches to __main in the C library (which eventually +;* calls main()). +;* After Reset the CortexM3 processor is in Thread mode, +;* priority is Privileged, and the Stack is set to Main. +;* <<< Use Configuration Wizard in Context Menu >>> +;******************************************************************************* +;* +;* Copyright (c) 2011 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. +; +;******************************************************************************* + +; Amount of memory (in bytes) allocated for Stack +; Tailor this value to your application needs +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000200 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD MemManage_Handler ; MPU Fault Handler + DCD BusFault_Handler ; Bus Fault Handler + DCD UsageFault_Handler ; Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD DebugMon_Handler ; Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD WWDG_IRQHandler ; Window Watchdog + DCD PVD_IRQHandler ; PVD through EXTI Line detect + DCD TAMPER_IRQHandler ; Tamper + DCD RTC_IRQHandler ; RTC + DCD FLASH_IRQHandler ; Flash + DCD RCC_IRQHandler ; RCC + DCD EXTI0_IRQHandler ; EXTI Line 0 + DCD EXTI1_IRQHandler ; EXTI Line 1 + DCD EXTI2_IRQHandler ; EXTI Line 2 + DCD EXTI3_IRQHandler ; EXTI Line 3 + DCD EXTI4_IRQHandler ; EXTI Line 4 + DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1 + DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2 + DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3 + DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4 + DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5 + DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6 + DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7 + DCD ADC1_IRQHandler ; ADC1 + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD EXTI9_5_IRQHandler ; EXTI Line 9..5 + DCD TIM1_BRK_TIM15_IRQHandler ; TIM1 Break and TIM15 + DCD TIM1_UP_TIM16_IRQHandler ; TIM1 Update and TIM16 + DCD TIM1_TRG_COM_TIM17_IRQHandler ; TIM1 Trigger and Commutation and TIM17 + DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare + DCD TIM2_IRQHandler ; TIM2 + DCD TIM3_IRQHandler ; TIM3 + DCD 0 ; Reserved + DCD I2C1_EV_IRQHandler ; I2C1 Event + DCD I2C1_ER_IRQHandler ; I2C1 Error + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SPI1_IRQHandler ; SPI1 + DCD 0 ; Reserved + DCD USART1_IRQHandler ; USART1 + DCD USART2_IRQHandler ; USART2 + DCD 0 ; Reserved + DCD EXTI15_10_IRQHandler ; EXTI Line 15..10 + DCD RTCAlarm_IRQHandler ; RTC Alarm through EXTI Line + DCD CEC_IRQHandler ; HDMI-CEC + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD TIM6_DAC_IRQHandler ; TIM6 and DAC underrun + DCD TIM7_IRQHandler ; TIM7 +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + AREA |.text|, CODE, READONLY + +; Reset handler +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IMPORT SystemInit + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +MemManage_Handler\ + PROC + EXPORT MemManage_Handler [WEAK] + B . + ENDP +BusFault_Handler\ + PROC + EXPORT BusFault_Handler [WEAK] + B . + ENDP +UsageFault_Handler\ + PROC + EXPORT UsageFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +DebugMon_Handler\ + PROC + EXPORT DebugMon_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT WWDG_IRQHandler [WEAK] + EXPORT PVD_IRQHandler [WEAK] + EXPORT TAMPER_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT RCC_IRQHandler [WEAK] + EXPORT EXTI0_IRQHandler [WEAK] + EXPORT EXTI1_IRQHandler [WEAK] + EXPORT EXTI2_IRQHandler [WEAK] + EXPORT EXTI3_IRQHandler [WEAK] + EXPORT EXTI4_IRQHandler [WEAK] + EXPORT DMA1_Channel1_IRQHandler [WEAK] + EXPORT DMA1_Channel2_IRQHandler [WEAK] + EXPORT DMA1_Channel3_IRQHandler [WEAK] + EXPORT DMA1_Channel4_IRQHandler [WEAK] + EXPORT DMA1_Channel5_IRQHandler [WEAK] + EXPORT DMA1_Channel6_IRQHandler [WEAK] + EXPORT DMA1_Channel7_IRQHandler [WEAK] + EXPORT ADC1_IRQHandler [WEAK] + EXPORT EXTI9_5_IRQHandler [WEAK] + EXPORT TIM1_BRK_TIM15_IRQHandler [WEAK] + EXPORT TIM1_UP_TIM16_IRQHandler [WEAK] + EXPORT TIM1_TRG_COM_TIM17_IRQHandler [WEAK] + EXPORT TIM1_CC_IRQHandler [WEAK] + EXPORT TIM2_IRQHandler [WEAK] + EXPORT TIM3_IRQHandler [WEAK] + EXPORT I2C1_EV_IRQHandler [WEAK] + EXPORT I2C1_ER_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT USART1_IRQHandler [WEAK] + EXPORT USART2_IRQHandler [WEAK] + EXPORT EXTI15_10_IRQHandler [WEAK] + EXPORT RTCAlarm_IRQHandler [WEAK] + EXPORT CEC_IRQHandler [WEAK] + EXPORT TIM6_DAC_IRQHandler [WEAK] + EXPORT TIM7_IRQHandler [WEAK] +WWDG_IRQHandler +PVD_IRQHandler +TAMPER_IRQHandler +RTC_IRQHandler +FLASH_IRQHandler +RCC_IRQHandler +EXTI0_IRQHandler +EXTI1_IRQHandler +EXTI2_IRQHandler +EXTI3_IRQHandler +EXTI4_IRQHandler +DMA1_Channel1_IRQHandler +DMA1_Channel2_IRQHandler +DMA1_Channel3_IRQHandler +DMA1_Channel4_IRQHandler +DMA1_Channel5_IRQHandler +DMA1_Channel6_IRQHandler +DMA1_Channel7_IRQHandler +ADC1_IRQHandler +EXTI9_5_IRQHandler +TIM1_BRK_TIM15_IRQHandler +TIM1_UP_TIM16_IRQHandler +TIM1_TRG_COM_TIM17_IRQHandler +TIM1_CC_IRQHandler +TIM2_IRQHandler +TIM3_IRQHandler +I2C1_EV_IRQHandler +I2C1_ER_IRQHandler +SPI1_IRQHandler +USART1_IRQHandler +USART2_IRQHandler +EXTI15_10_IRQHandler +RTCAlarm_IRQHandler +CEC_IRQHandler +TIM6_DAC_IRQHandler +TIM7_IRQHandler + B . + + ENDP + + ALIGN + +;******************************************************************************* +; User Stack and Heap initialization +;******************************************************************************* + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap + + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + + ALIGN + + ENDIF + + END + diff --git a/boot_source/platform/CMSIS/ST/STM32F10x/Source/arm/startup_stm32f10x_md.s b/boot_source/platform/CMSIS/ST/STM32F10x/Source/arm/startup_stm32f10x_md.s new file mode 100644 index 0000000..1ab7096 --- /dev/null +++ b/boot_source/platform/CMSIS/ST/STM32F10x/Source/arm/startup_stm32f10x_md.s @@ -0,0 +1,308 @@ +;******************** (C) COPYRIGHT 2011 STMicroelectronics ******************** +;* File Name : startup_stm32f10x_md.s +;* Author : MCD Application Team +;* Version : V3.5.1 +;* Date : 08-September-2021 +;* Description : STM32F10x Medium Density Devices vector table for MDK-ARM +;* toolchain. +;* This module performs: +;* - Set the initial SP +;* - Set the initial PC == Reset_Handler +;* - Set the vector table entries with the exceptions ISR address +;* - Configure the clock system +;* - Branches to __main in the C library (which eventually +;* calls main()). +;* After Reset the CortexM3 processor is in Thread mode, +;* priority is Privileged, and the Stack is set to Main. +;* <<< Use Configuration Wizard in Context Menu >>> +;******************************************************************************* +;* +;* Copyright (c) 2011 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. +; +;******************************************************************************* + +; Amount of memory (in bytes) allocated for Stack +; Tailor this value to your application needs +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000200 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD MemManage_Handler ; MPU Fault Handler + DCD BusFault_Handler ; Bus Fault Handler + DCD UsageFault_Handler ; Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD DebugMon_Handler ; Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD WWDG_IRQHandler ; Window Watchdog + DCD PVD_IRQHandler ; PVD through EXTI Line detect + DCD TAMPER_IRQHandler ; Tamper + DCD RTC_IRQHandler ; RTC + DCD FLASH_IRQHandler ; Flash + DCD RCC_IRQHandler ; RCC + DCD EXTI0_IRQHandler ; EXTI Line 0 + DCD EXTI1_IRQHandler ; EXTI Line 1 + DCD EXTI2_IRQHandler ; EXTI Line 2 + DCD EXTI3_IRQHandler ; EXTI Line 3 + DCD EXTI4_IRQHandler ; EXTI Line 4 + DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1 + DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2 + DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3 + DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4 + DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5 + DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6 + DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7 + DCD ADC1_2_IRQHandler ; ADC1_2 + DCD USB_HP_CAN1_TX_IRQHandler ; USB High Priority or CAN1 TX + DCD USB_LP_CAN1_RX0_IRQHandler ; USB Low Priority or CAN1 RX0 + DCD CAN1_RX1_IRQHandler ; CAN1 RX1 + DCD CAN1_SCE_IRQHandler ; CAN1 SCE + DCD EXTI9_5_IRQHandler ; EXTI Line 9..5 + DCD TIM1_BRK_IRQHandler ; TIM1 Break + DCD TIM1_UP_IRQHandler ; TIM1 Update + DCD TIM1_TRG_COM_IRQHandler ; TIM1 Trigger and Commutation + DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare + DCD TIM2_IRQHandler ; TIM2 + DCD TIM3_IRQHandler ; TIM3 + DCD TIM4_IRQHandler ; TIM4 + DCD I2C1_EV_IRQHandler ; I2C1 Event + DCD I2C1_ER_IRQHandler ; I2C1 Error + DCD I2C2_EV_IRQHandler ; I2C2 Event + DCD I2C2_ER_IRQHandler ; I2C2 Error + DCD SPI1_IRQHandler ; SPI1 + DCD SPI2_IRQHandler ; SPI2 + DCD USART1_IRQHandler ; USART1 + DCD USART2_IRQHandler ; USART2 + DCD USART3_IRQHandler ; USART3 + DCD EXTI15_10_IRQHandler ; EXTI Line 15..10 + DCD RTCAlarm_IRQHandler ; RTC Alarm through EXTI Line + DCD USBWakeUp_IRQHandler ; USB Wakeup from suspend +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + AREA |.text|, CODE, READONLY + +; Reset handler +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IMPORT SystemInit + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +MemManage_Handler\ + PROC + EXPORT MemManage_Handler [WEAK] + B . + ENDP +BusFault_Handler\ + PROC + EXPORT BusFault_Handler [WEAK] + B . + ENDP +UsageFault_Handler\ + PROC + EXPORT UsageFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +DebugMon_Handler\ + PROC + EXPORT DebugMon_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT WWDG_IRQHandler [WEAK] + EXPORT PVD_IRQHandler [WEAK] + EXPORT TAMPER_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT RCC_IRQHandler [WEAK] + EXPORT EXTI0_IRQHandler [WEAK] + EXPORT EXTI1_IRQHandler [WEAK] + EXPORT EXTI2_IRQHandler [WEAK] + EXPORT EXTI3_IRQHandler [WEAK] + EXPORT EXTI4_IRQHandler [WEAK] + EXPORT DMA1_Channel1_IRQHandler [WEAK] + EXPORT DMA1_Channel2_IRQHandler [WEAK] + EXPORT DMA1_Channel3_IRQHandler [WEAK] + EXPORT DMA1_Channel4_IRQHandler [WEAK] + EXPORT DMA1_Channel5_IRQHandler [WEAK] + EXPORT DMA1_Channel6_IRQHandler [WEAK] + EXPORT DMA1_Channel7_IRQHandler [WEAK] + EXPORT ADC1_2_IRQHandler [WEAK] + EXPORT USB_HP_CAN1_TX_IRQHandler [WEAK] + EXPORT USB_LP_CAN1_RX0_IRQHandler [WEAK] + EXPORT CAN1_RX1_IRQHandler [WEAK] + EXPORT CAN1_SCE_IRQHandler [WEAK] + EXPORT EXTI9_5_IRQHandler [WEAK] + EXPORT TIM1_BRK_IRQHandler [WEAK] + EXPORT TIM1_UP_IRQHandler [WEAK] + EXPORT TIM1_TRG_COM_IRQHandler [WEAK] + EXPORT TIM1_CC_IRQHandler [WEAK] + EXPORT TIM2_IRQHandler [WEAK] + EXPORT TIM3_IRQHandler [WEAK] + EXPORT TIM4_IRQHandler [WEAK] + EXPORT I2C1_EV_IRQHandler [WEAK] + EXPORT I2C1_ER_IRQHandler [WEAK] + EXPORT I2C2_EV_IRQHandler [WEAK] + EXPORT I2C2_ER_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT USART1_IRQHandler [WEAK] + EXPORT USART2_IRQHandler [WEAK] + EXPORT USART3_IRQHandler [WEAK] + EXPORT EXTI15_10_IRQHandler [WEAK] + EXPORT RTCAlarm_IRQHandler [WEAK] + EXPORT USBWakeUp_IRQHandler [WEAK] + +WWDG_IRQHandler +PVD_IRQHandler +TAMPER_IRQHandler +RTC_IRQHandler +FLASH_IRQHandler +RCC_IRQHandler +EXTI0_IRQHandler +EXTI1_IRQHandler +EXTI2_IRQHandler +EXTI3_IRQHandler +EXTI4_IRQHandler +DMA1_Channel1_IRQHandler +DMA1_Channel2_IRQHandler +DMA1_Channel3_IRQHandler +DMA1_Channel4_IRQHandler +DMA1_Channel5_IRQHandler +DMA1_Channel6_IRQHandler +DMA1_Channel7_IRQHandler +ADC1_2_IRQHandler +USB_HP_CAN1_TX_IRQHandler +USB_LP_CAN1_RX0_IRQHandler +CAN1_RX1_IRQHandler +CAN1_SCE_IRQHandler +EXTI9_5_IRQHandler +TIM1_BRK_IRQHandler +TIM1_UP_IRQHandler +TIM1_TRG_COM_IRQHandler +TIM1_CC_IRQHandler +TIM2_IRQHandler +TIM3_IRQHandler +TIM4_IRQHandler +I2C1_EV_IRQHandler +I2C1_ER_IRQHandler +I2C2_EV_IRQHandler +I2C2_ER_IRQHandler +SPI1_IRQHandler +SPI2_IRQHandler +USART1_IRQHandler +USART2_IRQHandler +USART3_IRQHandler +EXTI15_10_IRQHandler +RTCAlarm_IRQHandler +USBWakeUp_IRQHandler + + B . + + ENDP + + ALIGN + +;******************************************************************************* +; User Stack and Heap initialization +;******************************************************************************* + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap + + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + + ALIGN + + ENDIF + + END + diff --git a/boot_source/platform/CMSIS/ST/STM32F10x/Source/arm/startup_stm32f10x_md_vl.s b/boot_source/platform/CMSIS/ST/STM32F10x/Source/arm/startup_stm32f10x_md_vl.s new file mode 100644 index 0000000..8d7828a --- /dev/null +++ b/boot_source/platform/CMSIS/ST/STM32F10x/Source/arm/startup_stm32f10x_md_vl.s @@ -0,0 +1,316 @@ +;******************** (C) COPYRIGHT 2011 STMicroelectronics ******************** +;* File Name : startup_stm32f10x_md_vl.s +;* Author : MCD Application Team +;* Version : V3.5.1 +;* Date : 08-September-2021 +;* Description : STM32F10x Medium Density Value Line Devices vector table +;* for MDK-ARM toolchain. +;* This module performs: +;* - Set the initial SP +;* - Set the initial PC == Reset_Handler +;* - Set the vector table entries with the exceptions ISR address +;* - Configure the clock system +;* - Branches to __main in the C library (which eventually +;* calls main()). +;* After Reset the CortexM3 processor is in Thread mode, +;* priority is Privileged, and the Stack is set to Main. +;* <<< Use Configuration Wizard in Context Menu >>> +;******************************************************************************* +;* +;* Copyright (c) 2011 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. +; +;******************************************************************************* + +; Amount of memory (in bytes) allocated for Stack +; Tailor this value to your application needs +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000200 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD MemManage_Handler ; MPU Fault Handler + DCD BusFault_Handler ; Bus Fault Handler + DCD UsageFault_Handler ; Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD DebugMon_Handler ; Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD WWDG_IRQHandler ; Window Watchdog + DCD PVD_IRQHandler ; PVD through EXTI Line detect + DCD TAMPER_IRQHandler ; Tamper + DCD RTC_IRQHandler ; RTC + DCD FLASH_IRQHandler ; Flash + DCD RCC_IRQHandler ; RCC + DCD EXTI0_IRQHandler ; EXTI Line 0 + DCD EXTI1_IRQHandler ; EXTI Line 1 + DCD EXTI2_IRQHandler ; EXTI Line 2 + DCD EXTI3_IRQHandler ; EXTI Line 3 + DCD EXTI4_IRQHandler ; EXTI Line 4 + DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1 + DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2 + DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3 + DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4 + DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5 + DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6 + DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7 + DCD ADC1_IRQHandler ; ADC1 + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD EXTI9_5_IRQHandler ; EXTI Line 9..5 + DCD TIM1_BRK_TIM15_IRQHandler ; TIM1 Break and TIM15 + DCD TIM1_UP_TIM16_IRQHandler ; TIM1 Update and TIM16 + DCD TIM1_TRG_COM_TIM17_IRQHandler ; TIM1 Trigger and Commutation and TIM17 + DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare + DCD TIM2_IRQHandler ; TIM2 + DCD TIM3_IRQHandler ; TIM3 + DCD TIM4_IRQHandler ; TIM4 + DCD I2C1_EV_IRQHandler ; I2C1 Event + DCD I2C1_ER_IRQHandler ; I2C1 Error + DCD I2C2_EV_IRQHandler ; I2C2 Event + DCD I2C2_ER_IRQHandler ; I2C2 Error + DCD SPI1_IRQHandler ; SPI1 + DCD SPI2_IRQHandler ; SPI2 + DCD USART1_IRQHandler ; USART1 + DCD USART2_IRQHandler ; USART2 + DCD USART3_IRQHandler ; USART3 + DCD EXTI15_10_IRQHandler ; EXTI Line 15..10 + DCD RTCAlarm_IRQHandler ; RTC Alarm through EXTI Line + DCD CEC_IRQHandler ; HDMI-CEC + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD TIM6_DAC_IRQHandler ; TIM6 and DAC underrun + DCD TIM7_IRQHandler ; TIM7 +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + AREA |.text|, CODE, READONLY + +; Reset handler +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IMPORT SystemInit + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +MemManage_Handler\ + PROC + EXPORT MemManage_Handler [WEAK] + B . + ENDP +BusFault_Handler\ + PROC + EXPORT BusFault_Handler [WEAK] + B . + ENDP +UsageFault_Handler\ + PROC + EXPORT UsageFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +DebugMon_Handler\ + PROC + EXPORT DebugMon_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT WWDG_IRQHandler [WEAK] + EXPORT PVD_IRQHandler [WEAK] + EXPORT TAMPER_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT RCC_IRQHandler [WEAK] + EXPORT EXTI0_IRQHandler [WEAK] + EXPORT EXTI1_IRQHandler [WEAK] + EXPORT EXTI2_IRQHandler [WEAK] + EXPORT EXTI3_IRQHandler [WEAK] + EXPORT EXTI4_IRQHandler [WEAK] + EXPORT DMA1_Channel1_IRQHandler [WEAK] + EXPORT DMA1_Channel2_IRQHandler [WEAK] + EXPORT DMA1_Channel3_IRQHandler [WEAK] + EXPORT DMA1_Channel4_IRQHandler [WEAK] + EXPORT DMA1_Channel5_IRQHandler [WEAK] + EXPORT DMA1_Channel6_IRQHandler [WEAK] + EXPORT DMA1_Channel7_IRQHandler [WEAK] + EXPORT ADC1_IRQHandler [WEAK] + EXPORT EXTI9_5_IRQHandler [WEAK] + EXPORT TIM1_BRK_TIM15_IRQHandler [WEAK] + EXPORT TIM1_UP_TIM16_IRQHandler [WEAK] + EXPORT TIM1_TRG_COM_TIM17_IRQHandler [WEAK] + EXPORT TIM1_CC_IRQHandler [WEAK] + EXPORT TIM2_IRQHandler [WEAK] + EXPORT TIM3_IRQHandler [WEAK] + EXPORT TIM4_IRQHandler [WEAK] + EXPORT I2C1_EV_IRQHandler [WEAK] + EXPORT I2C1_ER_IRQHandler [WEAK] + EXPORT I2C2_EV_IRQHandler [WEAK] + EXPORT I2C2_ER_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT USART1_IRQHandler [WEAK] + EXPORT USART2_IRQHandler [WEAK] + EXPORT USART3_IRQHandler [WEAK] + EXPORT EXTI15_10_IRQHandler [WEAK] + EXPORT RTCAlarm_IRQHandler [WEAK] + EXPORT CEC_IRQHandler [WEAK] + EXPORT TIM6_DAC_IRQHandler [WEAK] + EXPORT TIM7_IRQHandler [WEAK] + +WWDG_IRQHandler +PVD_IRQHandler +TAMPER_IRQHandler +RTC_IRQHandler +FLASH_IRQHandler +RCC_IRQHandler +EXTI0_IRQHandler +EXTI1_IRQHandler +EXTI2_IRQHandler +EXTI3_IRQHandler +EXTI4_IRQHandler +DMA1_Channel1_IRQHandler +DMA1_Channel2_IRQHandler +DMA1_Channel3_IRQHandler +DMA1_Channel4_IRQHandler +DMA1_Channel5_IRQHandler +DMA1_Channel6_IRQHandler +DMA1_Channel7_IRQHandler +ADC1_IRQHandler +EXTI9_5_IRQHandler +TIM1_BRK_TIM15_IRQHandler +TIM1_UP_TIM16_IRQHandler +TIM1_TRG_COM_TIM17_IRQHandler +TIM1_CC_IRQHandler +TIM2_IRQHandler +TIM3_IRQHandler +TIM4_IRQHandler +I2C1_EV_IRQHandler +I2C1_ER_IRQHandler +I2C2_EV_IRQHandler +I2C2_ER_IRQHandler +SPI1_IRQHandler +SPI2_IRQHandler +USART1_IRQHandler +USART2_IRQHandler +USART3_IRQHandler +EXTI15_10_IRQHandler +RTCAlarm_IRQHandler +CEC_IRQHandler +TIM6_DAC_IRQHandler +TIM7_IRQHandler + B . + + ENDP + + ALIGN + +;******************************************************************************* +; User Stack and Heap initialization +;******************************************************************************* + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap + + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + + ALIGN + + ENDIF + + END + diff --git a/boot_source/platform/CMSIS/ST/STM32F10x/Source/arm/startup_stm32f10x_xl.s b/boot_source/platform/CMSIS/ST/STM32F10x/Source/arm/startup_stm32f10x_xl.s new file mode 100644 index 0000000..39f389b --- /dev/null +++ b/boot_source/platform/CMSIS/ST/STM32F10x/Source/arm/startup_stm32f10x_xl.s @@ -0,0 +1,359 @@ +;******************** (C) COPYRIGHT 2011 STMicroelectronics ******************** +;* File Name : startup_stm32f10x_xl.s +;* Author : MCD Application Team +;* Version : V3.5.1 +;* Date : 08-September-2021 +;* Description : STM32F10x XL-Density Devices vector table for MDK-ARM +;* toolchain. +;* This module performs: +;* - Set the initial SP +;* - Set the initial PC == Reset_Handler +;* - Set the vector table entries with the exceptions ISR address +;* - Configure the clock system and also configure the external +;* SRAM mounted on STM3210E-EVAL board to be used as data +;* memory (optional, to be enabled by user) +;* - Branches to __main in the C library (which eventually +;* calls main()). +;* After Reset the CortexM3 processor is in Thread mode, +;* priority is Privileged, and the Stack is set to Main. +;* <<< Use Configuration Wizard in Context Menu >>> +;******************************************************************************* +;* +;* Copyright (c) 2011 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. +; +;******************************************************************************* + +; Amount of memory (in bytes) allocated for Stack +; Tailor this value to your application needs +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000200 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD MemManage_Handler ; MPU Fault Handler + DCD BusFault_Handler ; Bus Fault Handler + DCD UsageFault_Handler ; Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD DebugMon_Handler ; Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD WWDG_IRQHandler ; Window Watchdog + DCD PVD_IRQHandler ; PVD through EXTI Line detect + DCD TAMPER_IRQHandler ; Tamper + DCD RTC_IRQHandler ; RTC + DCD FLASH_IRQHandler ; Flash + DCD RCC_IRQHandler ; RCC + DCD EXTI0_IRQHandler ; EXTI Line 0 + DCD EXTI1_IRQHandler ; EXTI Line 1 + DCD EXTI2_IRQHandler ; EXTI Line 2 + DCD EXTI3_IRQHandler ; EXTI Line 3 + DCD EXTI4_IRQHandler ; EXTI Line 4 + DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1 + DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2 + DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3 + DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4 + DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5 + DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6 + DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7 + DCD ADC1_2_IRQHandler ; ADC1 & ADC2 + DCD USB_HP_CAN1_TX_IRQHandler ; USB High Priority or CAN1 TX + DCD USB_LP_CAN1_RX0_IRQHandler ; USB Low Priority or CAN1 RX0 + DCD CAN1_RX1_IRQHandler ; CAN1 RX1 + DCD CAN1_SCE_IRQHandler ; CAN1 SCE + DCD EXTI9_5_IRQHandler ; EXTI Line 9..5 + DCD TIM1_BRK_TIM9_IRQHandler ; TIM1 Break and TIM9 + DCD TIM1_UP_TIM10_IRQHandler ; TIM1 Update and TIM10 + DCD TIM1_TRG_COM_TIM11_IRQHandler ; TIM1 Trigger and Commutation and TIM11 + DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare + DCD TIM2_IRQHandler ; TIM2 + DCD TIM3_IRQHandler ; TIM3 + DCD TIM4_IRQHandler ; TIM4 + DCD I2C1_EV_IRQHandler ; I2C1 Event + DCD I2C1_ER_IRQHandler ; I2C1 Error + DCD I2C2_EV_IRQHandler ; I2C2 Event + DCD I2C2_ER_IRQHandler ; I2C2 Error + DCD SPI1_IRQHandler ; SPI1 + DCD SPI2_IRQHandler ; SPI2 + DCD USART1_IRQHandler ; USART1 + DCD USART2_IRQHandler ; USART2 + DCD USART3_IRQHandler ; USART3 + DCD EXTI15_10_IRQHandler ; EXTI Line 15..10 + DCD RTCAlarm_IRQHandler ; RTC Alarm through EXTI Line + DCD USBWakeUp_IRQHandler ; USB Wakeup from suspend + DCD TIM8_BRK_TIM12_IRQHandler ; TIM8 Break and TIM12 + DCD TIM8_UP_TIM13_IRQHandler ; TIM8 Update and TIM13 + DCD TIM8_TRG_COM_TIM14_IRQHandler ; TIM8 Trigger and Commutation and TIM14 + DCD TIM8_CC_IRQHandler ; TIM8 Capture Compare + DCD ADC3_IRQHandler ; ADC3 + DCD FSMC_IRQHandler ; FSMC + DCD SDIO_IRQHandler ; SDIO + DCD TIM5_IRQHandler ; TIM5 + DCD SPI3_IRQHandler ; SPI3 + DCD UART4_IRQHandler ; UART4 + DCD UART5_IRQHandler ; UART5 + DCD TIM6_IRQHandler ; TIM6 + DCD TIM7_IRQHandler ; TIM7 + DCD DMA2_Channel1_IRQHandler ; DMA2 Channel1 + DCD DMA2_Channel2_IRQHandler ; DMA2 Channel2 + DCD DMA2_Channel3_IRQHandler ; DMA2 Channel3 + DCD DMA2_Channel4_5_IRQHandler ; DMA2 Channel4 & Channel5 +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + AREA |.text|, CODE, READONLY + +; Reset handler +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IMPORT SystemInit + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +MemManage_Handler\ + PROC + EXPORT MemManage_Handler [WEAK] + B . + ENDP +BusFault_Handler\ + PROC + EXPORT BusFault_Handler [WEAK] + B . + ENDP +UsageFault_Handler\ + PROC + EXPORT UsageFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +DebugMon_Handler\ + PROC + EXPORT DebugMon_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT WWDG_IRQHandler [WEAK] + EXPORT PVD_IRQHandler [WEAK] + EXPORT TAMPER_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT RCC_IRQHandler [WEAK] + EXPORT EXTI0_IRQHandler [WEAK] + EXPORT EXTI1_IRQHandler [WEAK] + EXPORT EXTI2_IRQHandler [WEAK] + EXPORT EXTI3_IRQHandler [WEAK] + EXPORT EXTI4_IRQHandler [WEAK] + EXPORT DMA1_Channel1_IRQHandler [WEAK] + EXPORT DMA1_Channel2_IRQHandler [WEAK] + EXPORT DMA1_Channel3_IRQHandler [WEAK] + EXPORT DMA1_Channel4_IRQHandler [WEAK] + EXPORT DMA1_Channel5_IRQHandler [WEAK] + EXPORT DMA1_Channel6_IRQHandler [WEAK] + EXPORT DMA1_Channel7_IRQHandler [WEAK] + EXPORT ADC1_2_IRQHandler [WEAK] + EXPORT USB_HP_CAN1_TX_IRQHandler [WEAK] + EXPORT USB_LP_CAN1_RX0_IRQHandler [WEAK] + EXPORT CAN1_RX1_IRQHandler [WEAK] + EXPORT CAN1_SCE_IRQHandler [WEAK] + EXPORT EXTI9_5_IRQHandler [WEAK] + EXPORT TIM1_BRK_TIM9_IRQHandler [WEAK] + EXPORT TIM1_UP_TIM10_IRQHandler [WEAK] + EXPORT TIM1_TRG_COM_TIM11_IRQHandler [WEAK] + EXPORT TIM1_CC_IRQHandler [WEAK] + EXPORT TIM2_IRQHandler [WEAK] + EXPORT TIM3_IRQHandler [WEAK] + EXPORT TIM4_IRQHandler [WEAK] + EXPORT I2C1_EV_IRQHandler [WEAK] + EXPORT I2C1_ER_IRQHandler [WEAK] + EXPORT I2C2_EV_IRQHandler [WEAK] + EXPORT I2C2_ER_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT USART1_IRQHandler [WEAK] + EXPORT USART2_IRQHandler [WEAK] + EXPORT USART3_IRQHandler [WEAK] + EXPORT EXTI15_10_IRQHandler [WEAK] + EXPORT RTCAlarm_IRQHandler [WEAK] + EXPORT USBWakeUp_IRQHandler [WEAK] + EXPORT TIM8_BRK_TIM12_IRQHandler [WEAK] + EXPORT TIM8_UP_TIM13_IRQHandler [WEAK] + EXPORT TIM8_TRG_COM_TIM14_IRQHandler [WEAK] + EXPORT TIM8_CC_IRQHandler [WEAK] + EXPORT ADC3_IRQHandler [WEAK] + EXPORT FSMC_IRQHandler [WEAK] + EXPORT SDIO_IRQHandler [WEAK] + EXPORT TIM5_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT TIM6_IRQHandler [WEAK] + EXPORT TIM7_IRQHandler [WEAK] + EXPORT DMA2_Channel1_IRQHandler [WEAK] + EXPORT DMA2_Channel2_IRQHandler [WEAK] + EXPORT DMA2_Channel3_IRQHandler [WEAK] + EXPORT DMA2_Channel4_5_IRQHandler [WEAK] + +WWDG_IRQHandler +PVD_IRQHandler +TAMPER_IRQHandler +RTC_IRQHandler +FLASH_IRQHandler +RCC_IRQHandler +EXTI0_IRQHandler +EXTI1_IRQHandler +EXTI2_IRQHandler +EXTI3_IRQHandler +EXTI4_IRQHandler +DMA1_Channel1_IRQHandler +DMA1_Channel2_IRQHandler +DMA1_Channel3_IRQHandler +DMA1_Channel4_IRQHandler +DMA1_Channel5_IRQHandler +DMA1_Channel6_IRQHandler +DMA1_Channel7_IRQHandler +ADC1_2_IRQHandler +USB_HP_CAN1_TX_IRQHandler +USB_LP_CAN1_RX0_IRQHandler +CAN1_RX1_IRQHandler +CAN1_SCE_IRQHandler +EXTI9_5_IRQHandler +TIM1_BRK_TIM9_IRQHandler +TIM1_UP_TIM10_IRQHandler +TIM1_TRG_COM_TIM11_IRQHandler +TIM1_CC_IRQHandler +TIM2_IRQHandler +TIM3_IRQHandler +TIM4_IRQHandler +I2C1_EV_IRQHandler +I2C1_ER_IRQHandler +I2C2_EV_IRQHandler +I2C2_ER_IRQHandler +SPI1_IRQHandler +SPI2_IRQHandler +USART1_IRQHandler +USART2_IRQHandler +USART3_IRQHandler +EXTI15_10_IRQHandler +RTCAlarm_IRQHandler +USBWakeUp_IRQHandler +TIM8_BRK_TIM12_IRQHandler +TIM8_UP_TIM13_IRQHandler +TIM8_TRG_COM_TIM14_IRQHandler +TIM8_CC_IRQHandler +ADC3_IRQHandler +FSMC_IRQHandler +SDIO_IRQHandler +TIM5_IRQHandler +SPI3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +TIM6_IRQHandler +TIM7_IRQHandler +DMA2_Channel1_IRQHandler +DMA2_Channel2_IRQHandler +DMA2_Channel3_IRQHandler +DMA2_Channel4_5_IRQHandler + B . + + ENDP + + ALIGN + +;******************************************************************************* +; User Stack and Heap initialization +;******************************************************************************* + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap + + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + + ALIGN + + ENDIF + + END + diff --git a/boot_source/platform/CMSIS/ST/STM32F10x/Source/gcc_ride7/startup_stm32f10x_cl.s b/boot_source/platform/CMSIS/ST/STM32F10x/Source/gcc_ride7/startup_stm32f10x_cl.s new file mode 100644 index 0000000..98a9935 --- /dev/null +++ b/boot_source/platform/CMSIS/ST/STM32F10x/Source/gcc_ride7/startup_stm32f10x_cl.s @@ -0,0 +1,466 @@ +/** + ****************************************************************************** + * @file startup_stm32f10x_cl.s + * @author MCD Application Team + * @version V3.5.1 + * @date 08-September-2021 + * @brief STM32F10x Connectivity line Devices vector table for RIDE7 toolchain. + * This module performs: + * - Set the initial SP + * - Set the initial PC == Reset_Handler, + * - Set the vector table entries with the exceptions ISR + * address. + * - Configure the clock system + * - Branches to main in the C library (which eventually + * calls main()). + * After Reset the Cortex-M3 processor is in Thread mode, + * priority is Privileged, and the Stack is set to Main. + ****************************************************************************** + * @attention + * + * Copyright (c) 2011 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-m3 + .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 + +.equ BootRAM, 0xF1E0F85F +/** + * @brief This is the code that gets called when the processor first + * starts execution following a reset event. Only the absolutely + * necessary set is performed, after which the application + * supplied main() routine is called. + * @param None + * @retval : None +*/ + + .section .text.Reset_Handler + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss + +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2], #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss +/* Call the clock system intitialization function.*/ + bl SystemInit +/* Call the application's entry point.*/ + bl main + bx lr +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * @param None + * @retval None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler + +/****************************************************************************** +* +* The minimal vector table for a Cortex M3. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +*******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word MemManage_Handler + .word BusFault_Handler + .word UsageFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word DebugMon_Handler + .word 0 + .word PendSV_Handler + .word SysTick_Handler + .word WWDG_IRQHandler + .word PVD_IRQHandler + .word TAMPER_IRQHandler + .word RTC_IRQHandler + .word FLASH_IRQHandler + .word RCC_IRQHandler + .word EXTI0_IRQHandler + .word EXTI1_IRQHandler + .word EXTI2_IRQHandler + .word EXTI3_IRQHandler + .word EXTI4_IRQHandler + .word DMA1_Channel1_IRQHandler + .word DMA1_Channel2_IRQHandler + .word DMA1_Channel3_IRQHandler + .word DMA1_Channel4_IRQHandler + .word DMA1_Channel5_IRQHandler + .word DMA1_Channel6_IRQHandler + .word DMA1_Channel7_IRQHandler + .word ADC1_2_IRQHandler + .word CAN1_TX_IRQHandler + .word CAN1_RX0_IRQHandler + .word CAN1_RX1_IRQHandler + .word CAN1_SCE_IRQHandler + .word EXTI9_5_IRQHandler + .word TIM1_BRK_IRQHandler + .word TIM1_UP_IRQHandler + .word TIM1_TRG_COM_IRQHandler + .word TIM1_CC_IRQHandler + .word TIM2_IRQHandler + .word TIM3_IRQHandler + .word TIM4_IRQHandler + .word I2C1_EV_IRQHandler + .word I2C1_ER_IRQHandler + .word I2C2_EV_IRQHandler + .word I2C2_ER_IRQHandler + .word SPI1_IRQHandler + .word SPI2_IRQHandler + .word USART1_IRQHandler + .word USART2_IRQHandler + .word USART3_IRQHandler + .word EXTI15_10_IRQHandler + .word RTCAlarm_IRQHandler + .word OTG_FS_WKUP_IRQHandler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word TIM5_IRQHandler + .word SPI3_IRQHandler + .word UART4_IRQHandler + .word UART5_IRQHandler + .word TIM6_IRQHandler + .word TIM7_IRQHandler + .word DMA2_Channel1_IRQHandler + .word DMA2_Channel2_IRQHandler + .word DMA2_Channel3_IRQHandler + .word DMA2_Channel4_IRQHandler + .word DMA2_Channel5_IRQHandler + .word ETH_IRQHandler + .word ETH_WKUP_IRQHandler + .word CAN2_TX_IRQHandler + .word CAN2_RX0_IRQHandler + .word CAN2_RX1_IRQHandler + .word CAN2_SCE_IRQHandler + .word OTG_FS_IRQHandler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word BootRAM /* @0x1E0. This is for boot in RAM mode for + STM32F10x Connectivity line Devices. */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak MemManage_Handler + .thumb_set MemManage_Handler,Default_Handler + + .weak BusFault_Handler + .thumb_set BusFault_Handler,Default_Handler + + .weak UsageFault_Handler + .thumb_set UsageFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak DebugMon_Handler + .thumb_set DebugMon_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak WWDG_IRQHandler + .thumb_set WWDG_IRQHandler,Default_Handler + + .weak PVD_IRQHandler + .thumb_set PVD_IRQHandler,Default_Handler + + .weak TAMPER_IRQHandler + .thumb_set TAMPER_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_IRQHandler + .thumb_set EXTI0_IRQHandler,Default_Handler + + .weak EXTI1_IRQHandler + .thumb_set EXTI1_IRQHandler,Default_Handler + + .weak EXTI2_IRQHandler + .thumb_set EXTI2_IRQHandler,Default_Handler + + .weak EXTI3_IRQHandler + .thumb_set EXTI3_IRQHandler,Default_Handler + + .weak EXTI4_IRQHandler + .thumb_set EXTI4_IRQHandler,Default_Handler + + .weak DMA1_Channel1_IRQHandler + .thumb_set DMA1_Channel1_IRQHandler,Default_Handler + + .weak DMA1_Channel2_IRQHandler + .thumb_set DMA1_Channel2_IRQHandler,Default_Handler + + .weak DMA1_Channel3_IRQHandler + .thumb_set DMA1_Channel3_IRQHandler,Default_Handler + + .weak DMA1_Channel4_IRQHandler + .thumb_set DMA1_Channel4_IRQHandler,Default_Handler + + .weak DMA1_Channel5_IRQHandler + .thumb_set DMA1_Channel5_IRQHandler,Default_Handler + + .weak DMA1_Channel6_IRQHandler + .thumb_set DMA1_Channel6_IRQHandler,Default_Handler + + .weak DMA1_Channel7_IRQHandler + .thumb_set DMA1_Channel7_IRQHandler,Default_Handler + + .weak ADC1_2_IRQHandler + .thumb_set ADC1_2_IRQHandler,Default_Handler + + .weak CAN1_TX_IRQHandler + .thumb_set CAN1_TX_IRQHandler,Default_Handler + + .weak CAN1_RX0_IRQHandler + .thumb_set CAN1_RX0_IRQHandler,Default_Handler + + .weak CAN1_RX1_IRQHandler + .thumb_set CAN1_RX1_IRQHandler,Default_Handler + + .weak CAN1_SCE_IRQHandler + .thumb_set CAN1_SCE_IRQHandler,Default_Handler + + .weak EXTI9_5_IRQHandler + .thumb_set EXTI9_5_IRQHandler,Default_Handler + + .weak TIM1_BRK_IRQHandler + .thumb_set TIM1_BRK_IRQHandler,Default_Handler + + .weak TIM1_UP_IRQHandler + .thumb_set TIM1_UP_IRQHandler,Default_Handler + + .weak TIM1_TRG_COM_IRQHandler + .thumb_set TIM1_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 TIM4_IRQHandler + .thumb_set TIM4_IRQHandler,Default_Handler + + .weak I2C1_EV_IRQHandler + .thumb_set I2C1_EV_IRQHandler,Default_Handler + + .weak I2C1_ER_IRQHandler + .thumb_set I2C1_ER_IRQHandler,Default_Handler + + .weak I2C2_EV_IRQHandler + .thumb_set I2C2_EV_IRQHandler,Default_Handler + + .weak I2C2_ER_IRQHandler + .thumb_set I2C2_ER_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak USART1_IRQHandler + .thumb_set USART1_IRQHandler,Default_Handler + + .weak USART2_IRQHandler + .thumb_set USART2_IRQHandler,Default_Handler + + .weak USART3_IRQHandler + .thumb_set USART3_IRQHandler,Default_Handler + + .weak EXTI15_10_IRQHandler + .thumb_set EXTI15_10_IRQHandler,Default_Handler + + .weak RTCAlarm_IRQHandler + .thumb_set RTCAlarm_IRQHandler,Default_Handler + + .weak OTG_FS_WKUP_IRQHandler + .thumb_set OTG_FS_WKUP_IRQHandler,Default_Handler + + .weak TIM5_IRQHandler + .thumb_set TIM5_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak TIM6_IRQHandler + .thumb_set TIM6_IRQHandler,Default_Handler + + .weak TIM7_IRQHandler + .thumb_set TIM7_IRQHandler,Default_Handler + + .weak DMA2_Channel1_IRQHandler + .thumb_set DMA2_Channel1_IRQHandler,Default_Handler + + .weak DMA2_Channel2_IRQHandler + .thumb_set DMA2_Channel2_IRQHandler,Default_Handler + + .weak DMA2_Channel3_IRQHandler + .thumb_set DMA2_Channel3_IRQHandler,Default_Handler + + .weak DMA2_Channel4_IRQHandler + .thumb_set DMA2_Channel4_IRQHandler,Default_Handler + + .weak DMA2_Channel5_IRQHandler + .thumb_set DMA2_Channel5_IRQHandler,Default_Handler + + .weak ETH_IRQHandler + .thumb_set ETH_IRQHandler,Default_Handler + + .weak ETH_WKUP_IRQHandler + .thumb_set ETH_WKUP_IRQHandler,Default_Handler + + .weak CAN2_TX_IRQHandler + .thumb_set CAN2_TX_IRQHandler,Default_Handler + + .weak CAN2_RX0_IRQHandler + .thumb_set CAN2_RX0_IRQHandler,Default_Handler + + .weak CAN2_RX1_IRQHandler + .thumb_set CAN2_RX1_IRQHandler,Default_Handler + + .weak CAN2_SCE_IRQHandler + .thumb_set CAN2_SCE_IRQHandler,Default_Handler + + .weak OTG_FS_IRQHandler + .thumb_set OTG_FS_IRQHandler ,Default_Handler + diff --git a/boot_source/platform/CMSIS/ST/STM32F10x/Source/gcc_ride7/startup_stm32f10x_hd.s b/boot_source/platform/CMSIS/ST/STM32F10x/Source/gcc_ride7/startup_stm32f10x_hd.s new file mode 100644 index 0000000..02cb227 --- /dev/null +++ b/boot_source/platform/CMSIS/ST/STM32F10x/Source/gcc_ride7/startup_stm32f10x_hd.s @@ -0,0 +1,463 @@ +/** + ****************************************************************************** + * @file startup_stm32f10x_hd.s + * @author MCD Application Team + * @version V3.5.1 + * @date 08-September-2021 + * @brief STM32F10x High Density Devices vector table for RIDE7 toolchain. + * This module performs: + * - Set the initial SP + * - Set the initial PC == Reset_Handler, + * - Set the vector table entries with the exceptions ISR address + * - Configure the clock system and the external SRAM mounted on + * STM3210E-EVAL board to be used as data memory (optional, + * to be enabled by user) + * - Branches to main in the C library (which eventually + * calls main()). + * After Reset the Cortex-M3 processor is in Thread mode, + * priority is Privileged, and the Stack is set to Main. + ****************************************************************************** + * @attention + * + * Copyright (c) 2011 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-m3 + .fpu softvfp + .thumb + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss +/* stack used for SystemInit_ExtMemCtl; always internal RAM used */ + +.equ BootRAM, 0xF1E0F85F +/** + * @brief This is the code that gets called when the processor first + * starts execution following a reset event. Only the absolutely + * necessary set is performed, after which the application + * supplied main() routine is called. + * @param None + * @retval : None +*/ + + .section .text.Reset_Handler + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2], #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss +/* Call the clock system intitialization function.*/ + bl SystemInit +/* Call the application's entry point.*/ + bl main + bx lr +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * @param None + * @retval None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M3. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +*******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word MemManage_Handler + .word BusFault_Handler + .word UsageFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word DebugMon_Handler + .word 0 + .word PendSV_Handler + .word SysTick_Handler + .word WWDG_IRQHandler + .word PVD_IRQHandler + .word TAMPER_IRQHandler + .word RTC_IRQHandler + .word FLASH_IRQHandler + .word RCC_IRQHandler + .word EXTI0_IRQHandler + .word EXTI1_IRQHandler + .word EXTI2_IRQHandler + .word EXTI3_IRQHandler + .word EXTI4_IRQHandler + .word DMA1_Channel1_IRQHandler + .word DMA1_Channel2_IRQHandler + .word DMA1_Channel3_IRQHandler + .word DMA1_Channel4_IRQHandler + .word DMA1_Channel5_IRQHandler + .word DMA1_Channel6_IRQHandler + .word DMA1_Channel7_IRQHandler + .word ADC1_2_IRQHandler + .word USB_HP_CAN1_TX_IRQHandler + .word USB_LP_CAN1_RX0_IRQHandler + .word CAN1_RX1_IRQHandler + .word CAN1_SCE_IRQHandler + .word EXTI9_5_IRQHandler + .word TIM1_BRK_IRQHandler + .word TIM1_UP_IRQHandler + .word TIM1_TRG_COM_IRQHandler + .word TIM1_CC_IRQHandler + .word TIM2_IRQHandler + .word TIM3_IRQHandler + .word TIM4_IRQHandler + .word I2C1_EV_IRQHandler + .word I2C1_ER_IRQHandler + .word I2C2_EV_IRQHandler + .word I2C2_ER_IRQHandler + .word SPI1_IRQHandler + .word SPI2_IRQHandler + .word USART1_IRQHandler + .word USART2_IRQHandler + .word USART3_IRQHandler + .word EXTI15_10_IRQHandler + .word RTCAlarm_IRQHandler + .word USBWakeUp_IRQHandler + .word TIM8_BRK_IRQHandler + .word TIM8_UP_IRQHandler + .word TIM8_TRG_COM_IRQHandler + .word TIM8_CC_IRQHandler + .word ADC3_IRQHandler + .word FSMC_IRQHandler + .word SDIO_IRQHandler + .word TIM5_IRQHandler + .word SPI3_IRQHandler + .word UART4_IRQHandler + .word UART5_IRQHandler + .word TIM6_IRQHandler + .word TIM7_IRQHandler + .word DMA2_Channel1_IRQHandler + .word DMA2_Channel2_IRQHandler + .word DMA2_Channel3_IRQHandler + .word DMA2_Channel4_5_IRQHandler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word BootRAM /* @0x1E0. This is for boot in RAM mode for + STM32F10x High Density devices. */ +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak MemManage_Handler + .thumb_set MemManage_Handler,Default_Handler + + .weak BusFault_Handler + .thumb_set BusFault_Handler,Default_Handler + + .weak UsageFault_Handler + .thumb_set UsageFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak DebugMon_Handler + .thumb_set DebugMon_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak WWDG_IRQHandler + .thumb_set WWDG_IRQHandler,Default_Handler + + .weak PVD_IRQHandler + .thumb_set PVD_IRQHandler,Default_Handler + + .weak TAMPER_IRQHandler + .thumb_set TAMPER_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_IRQHandler + .thumb_set EXTI0_IRQHandler,Default_Handler + + .weak EXTI1_IRQHandler + .thumb_set EXTI1_IRQHandler,Default_Handler + + .weak EXTI2_IRQHandler + .thumb_set EXTI2_IRQHandler,Default_Handler + + .weak EXTI3_IRQHandler + .thumb_set EXTI3_IRQHandler,Default_Handler + + .weak EXTI4_IRQHandler + .thumb_set EXTI4_IRQHandler,Default_Handler + + .weak DMA1_Channel1_IRQHandler + .thumb_set DMA1_Channel1_IRQHandler,Default_Handler + + .weak DMA1_Channel2_IRQHandler + .thumb_set DMA1_Channel2_IRQHandler,Default_Handler + + .weak DMA1_Channel3_IRQHandler + .thumb_set DMA1_Channel3_IRQHandler,Default_Handler + + .weak DMA1_Channel4_IRQHandler + .thumb_set DMA1_Channel4_IRQHandler,Default_Handler + + .weak DMA1_Channel5_IRQHandler + .thumb_set DMA1_Channel5_IRQHandler,Default_Handler + + .weak DMA1_Channel6_IRQHandler + .thumb_set DMA1_Channel6_IRQHandler,Default_Handler + + .weak DMA1_Channel7_IRQHandler + .thumb_set DMA1_Channel7_IRQHandler,Default_Handler + + .weak ADC1_2_IRQHandler + .thumb_set ADC1_2_IRQHandler,Default_Handler + + .weak USB_HP_CAN1_TX_IRQHandler + .thumb_set USB_HP_CAN1_TX_IRQHandler,Default_Handler + + .weak USB_LP_CAN1_RX0_IRQHandler + .thumb_set USB_LP_CAN1_RX0_IRQHandler,Default_Handler + + .weak CAN1_RX1_IRQHandler + .thumb_set CAN1_RX1_IRQHandler,Default_Handler + + .weak CAN1_SCE_IRQHandler + .thumb_set CAN1_SCE_IRQHandler,Default_Handler + + .weak EXTI9_5_IRQHandler + .thumb_set EXTI9_5_IRQHandler,Default_Handler + + .weak TIM1_BRK_IRQHandler + .thumb_set TIM1_BRK_IRQHandler,Default_Handler + + .weak TIM1_UP_IRQHandler + .thumb_set TIM1_UP_IRQHandler,Default_Handler + + .weak TIM1_TRG_COM_IRQHandler + .thumb_set TIM1_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 TIM4_IRQHandler + .thumb_set TIM4_IRQHandler,Default_Handler + + .weak I2C1_EV_IRQHandler + .thumb_set I2C1_EV_IRQHandler,Default_Handler + + .weak I2C1_ER_IRQHandler + .thumb_set I2C1_ER_IRQHandler,Default_Handler + + .weak I2C2_EV_IRQHandler + .thumb_set I2C2_EV_IRQHandler,Default_Handler + + .weak I2C2_ER_IRQHandler + .thumb_set I2C2_ER_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak USART1_IRQHandler + .thumb_set USART1_IRQHandler,Default_Handler + + .weak USART2_IRQHandler + .thumb_set USART2_IRQHandler,Default_Handler + + .weak USART3_IRQHandler + .thumb_set USART3_IRQHandler,Default_Handler + + .weak EXTI15_10_IRQHandler + .thumb_set EXTI15_10_IRQHandler,Default_Handler + + .weak RTCAlarm_IRQHandler + .thumb_set RTCAlarm_IRQHandler,Default_Handler + + .weak USBWakeUp_IRQHandler + .thumb_set USBWakeUp_IRQHandler,Default_Handler + + .weak TIM8_BRK_IRQHandler + .thumb_set TIM8_BRK_IRQHandler,Default_Handler + + .weak TIM8_UP_IRQHandler + .thumb_set TIM8_UP_IRQHandler,Default_Handler + + .weak TIM8_TRG_COM_IRQHandler + .thumb_set TIM8_TRG_COM_IRQHandler,Default_Handler + + .weak TIM8_CC_IRQHandler + .thumb_set TIM8_CC_IRQHandler,Default_Handler + + .weak ADC3_IRQHandler + .thumb_set ADC3_IRQHandler,Default_Handler + + .weak FSMC_IRQHandler + .thumb_set FSMC_IRQHandler,Default_Handler + + .weak SDIO_IRQHandler + .thumb_set SDIO_IRQHandler,Default_Handler + + .weak TIM5_IRQHandler + .thumb_set TIM5_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak TIM6_IRQHandler + .thumb_set TIM6_IRQHandler,Default_Handler + + .weak TIM7_IRQHandler + .thumb_set TIM7_IRQHandler,Default_Handler + + .weak DMA2_Channel1_IRQHandler + .thumb_set DMA2_Channel1_IRQHandler,Default_Handler + + .weak DMA2_Channel2_IRQHandler + .thumb_set DMA2_Channel2_IRQHandler,Default_Handler + + .weak DMA2_Channel3_IRQHandler + .thumb_set DMA2_Channel3_IRQHandler,Default_Handler + + .weak DMA2_Channel4_5_IRQHandler + .thumb_set DMA2_Channel4_5_IRQHandler,Default_Handler + diff --git a/boot_source/platform/CMSIS/ST/STM32F10x/Source/gcc_ride7/startup_stm32f10x_hd_vl.s b/boot_source/platform/CMSIS/ST/STM32F10x/Source/gcc_ride7/startup_stm32f10x_hd_vl.s new file mode 100644 index 0000000..cb0a3d4 --- /dev/null +++ b/boot_source/platform/CMSIS/ST/STM32F10x/Source/gcc_ride7/startup_stm32f10x_hd_vl.s @@ -0,0 +1,440 @@ +/** + ****************************************************************************** + * @file startup_stm32f10x_hd_vl.s + * @author MCD Application Team + * @version V3.5.1 + * @date 08-September-2021 + * @brief STM32F10x High Density Value Line Devices vector table for RIDE7 + * toolchain. + * This module performs: + * - Set the initial SP + * - Set the initial PC == Reset_Handler, + * - Set the vector table entries with the exceptions ISR address + * - Configure the clock system and the external SRAM mounted on + * STM32100E-EVAL board to be used as data memory (optional, + * to be enabled by user) + * - Branches to main in the C library (which eventually + * calls main()). + * After Reset the Cortex-M3 processor is in Thread mode, + * priority is Privileged, and the Stack is set to Main. + ****************************************************************************** + * @attention + * + * Copyright (c) 2011 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-m3 + .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 + +.equ BootRAM, 0xF108F85F +/** + * @brief This is the code that gets called when the processor first + * starts execution following a reset event. Only the absolutely + * necessary set is performed, after which the application + * supplied main() routine is called. + * @param None + * @retval None +*/ + + .section .text.Reset_Handler + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2], #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss +/* Call the clock system intitialization function.*/ + bl SystemInit +/* Call the application's entry point.*/ + bl main + bx lr +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * @param None + * @retval None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M3. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word MemManage_Handler + .word BusFault_Handler + .word UsageFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word DebugMon_Handler + .word 0 + .word PendSV_Handler + .word SysTick_Handler + .word WWDG_IRQHandler + .word PVD_IRQHandler + .word TAMPER_IRQHandler + .word RTC_IRQHandler + .word FLASH_IRQHandler + .word RCC_IRQHandler + .word EXTI0_IRQHandler + .word EXTI1_IRQHandler + .word EXTI2_IRQHandler + .word EXTI3_IRQHandler + .word EXTI4_IRQHandler + .word DMA1_Channel1_IRQHandler + .word DMA1_Channel2_IRQHandler + .word DMA1_Channel3_IRQHandler + .word DMA1_Channel4_IRQHandler + .word DMA1_Channel5_IRQHandler + .word DMA1_Channel6_IRQHandler + .word DMA1_Channel7_IRQHandler + .word ADC1_IRQHandler + .word 0 + .word 0 + .word 0 + .word 0 + .word EXTI9_5_IRQHandler + .word TIM1_BRK_TIM15_IRQHandler + .word TIM1_UP_TIM16_IRQHandler + .word TIM1_TRG_COM_TIM17_IRQHandler + .word TIM1_CC_IRQHandler + .word TIM2_IRQHandler + .word TIM3_IRQHandler + .word TIM4_IRQHandler + .word I2C1_EV_IRQHandler + .word I2C1_ER_IRQHandler + .word I2C2_EV_IRQHandler + .word I2C2_ER_IRQHandler + .word SPI1_IRQHandler + .word SPI2_IRQHandler + .word USART1_IRQHandler + .word USART2_IRQHandler + .word USART3_IRQHandler + .word EXTI15_10_IRQHandler + .word RTCAlarm_IRQHandler + .word CEC_IRQHandler + .word TIM12_IRQHandler + .word TIM13_IRQHandler + .word TIM14_IRQHandler + .word 0 + .word 0 + .word 0 + .word 0 + .word TIM5_IRQHandler + .word SPI3_IRQHandler + .word UART4_IRQHandler + .word UART5_IRQHandler + .word TIM6_DAC_IRQHandler + .word TIM7_IRQHandler + .word DMA2_Channel1_IRQHandler + .word DMA2_Channel2_IRQHandler + .word DMA2_Channel3_IRQHandler + .word DMA2_Channel4_5_IRQHandler + .word DMA2_Channel5_IRQHandler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word BootRAM /* @0x1E0. This is for boot in RAM mode for + STM32F10x High Density Value line devices. */ + +/******************************************************************************* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak MemManage_Handler + .thumb_set MemManage_Handler,Default_Handler + + .weak BusFault_Handler + .thumb_set BusFault_Handler,Default_Handler + + .weak UsageFault_Handler + .thumb_set UsageFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak DebugMon_Handler + .thumb_set DebugMon_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak WWDG_IRQHandler + .thumb_set WWDG_IRQHandler,Default_Handler + + .weak PVD_IRQHandler + .thumb_set PVD_IRQHandler,Default_Handler + + .weak TAMPER_IRQHandler + .thumb_set TAMPER_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_IRQHandler + .thumb_set EXTI0_IRQHandler,Default_Handler + + .weak EXTI1_IRQHandler + .thumb_set EXTI1_IRQHandler,Default_Handler + + .weak EXTI2_IRQHandler + .thumb_set EXTI2_IRQHandler,Default_Handler + + .weak EXTI3_IRQHandler + .thumb_set EXTI3_IRQHandler,Default_Handler + + .weak EXTI4_IRQHandler + .thumb_set EXTI4_IRQHandler,Default_Handler + + .weak DMA1_Channel1_IRQHandler + .thumb_set DMA1_Channel1_IRQHandler,Default_Handler + + .weak DMA1_Channel2_IRQHandler + .thumb_set DMA1_Channel2_IRQHandler,Default_Handler + + .weak DMA1_Channel3_IRQHandler + .thumb_set DMA1_Channel3_IRQHandler,Default_Handler + + .weak DMA1_Channel4_IRQHandler + .thumb_set DMA1_Channel4_IRQHandler,Default_Handler + + .weak DMA1_Channel5_IRQHandler + .thumb_set DMA1_Channel5_IRQHandler,Default_Handler + + .weak DMA1_Channel6_IRQHandler + .thumb_set DMA1_Channel6_IRQHandler,Default_Handler + + .weak DMA1_Channel7_IRQHandler + .thumb_set DMA1_Channel7_IRQHandler,Default_Handler + + .weak ADC1_IRQHandler + .thumb_set ADC1_IRQHandler,Default_Handler + + .weak EXTI9_5_IRQHandler + .thumb_set EXTI9_5_IRQHandler,Default_Handler + + .weak TIM1_BRK_TIM15_IRQHandler + .thumb_set TIM1_BRK_TIM15_IRQHandler,Default_Handler + + .weak TIM1_UP_TIM16_IRQHandler + .thumb_set TIM1_UP_TIM16_IRQHandler,Default_Handler + + .weak TIM1_TRG_COM_TIM17_IRQHandler + .thumb_set TIM1_TRG_COM_TIM17_IRQHandler,Default_Handler + + .weak TIM1_CC_IRQHandler + .thumb_set TIM1_CC_IRQHandler,Default_Handler + + .weak TIM2_IRQHandler + .thumb_set TIM2_IRQHandler,Default_Handler + + .weak TIM3_IRQHandler + .thumb_set TIM3_IRQHandler,Default_Handler + + .weak TIM4_IRQHandler + .thumb_set TIM4_IRQHandler,Default_Handler + + .weak I2C1_EV_IRQHandler + .thumb_set I2C1_EV_IRQHandler,Default_Handler + + .weak I2C1_ER_IRQHandler + .thumb_set I2C1_ER_IRQHandler,Default_Handler + + .weak I2C2_EV_IRQHandler + .thumb_set I2C2_EV_IRQHandler,Default_Handler + + .weak I2C2_ER_IRQHandler + .thumb_set I2C2_ER_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak USART1_IRQHandler + .thumb_set USART1_IRQHandler,Default_Handler + + .weak USART2_IRQHandler + .thumb_set USART2_IRQHandler,Default_Handler + + .weak USART3_IRQHandler + .thumb_set USART3_IRQHandler,Default_Handler + + .weak EXTI15_10_IRQHandler + .thumb_set EXTI15_10_IRQHandler,Default_Handler + + .weak RTCAlarm_IRQHandler + .thumb_set RTCAlarm_IRQHandler,Default_Handler + + .weak CEC_IRQHandler + .thumb_set CEC_IRQHandler,Default_Handler + + .weak TIM12_IRQHandler + .thumb_set TIM12_IRQHandler,Default_Handler + + .weak TIM13_IRQHandler + .thumb_set TIM13_IRQHandler,Default_Handler + + .weak TIM14_IRQHandler + .thumb_set TIM14_IRQHandler,Default_Handler + + .weak TIM5_IRQHandler + .thumb_set TIM5_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak TIM6_DAC_IRQHandler + .thumb_set TIM6_DAC_IRQHandler,Default_Handler + + .weak TIM7_IRQHandler + .thumb_set TIM7_IRQHandler,Default_Handler + + .weak DMA2_Channel1_IRQHandler + .thumb_set DMA2_Channel1_IRQHandler,Default_Handler + + .weak DMA2_Channel2_IRQHandler + .thumb_set DMA2_Channel2_IRQHandler,Default_Handler + + .weak DMA2_Channel3_IRQHandler + .thumb_set DMA2_Channel3_IRQHandler,Default_Handler + + .weak DMA2_Channel4_5_IRQHandler + .thumb_set DMA2_Channel4_5_IRQHandler,Default_Handler + + .weak DMA2_Channel5_IRQHandler + .thumb_set DMA2_Channel5_IRQHandler,Default_Handler + diff --git a/boot_source/platform/CMSIS/ST/STM32F10x/Source/gcc_ride7/startup_stm32f10x_ld.s b/boot_source/platform/CMSIS/ST/STM32F10x/Source/gcc_ride7/startup_stm32f10x_ld.s new file mode 100644 index 0000000..a027ea5 --- /dev/null +++ b/boot_source/platform/CMSIS/ST/STM32F10x/Source/gcc_ride7/startup_stm32f10x_ld.s @@ -0,0 +1,341 @@ +/** + ****************************************************************************** + * @file startup_stm32f10x_ld.s + * @author MCD Application Team + * @version V3.5.1 + * @date 08-September-2021 + * @brief STM32F10x Low Density Devices vector table for RIDE7 toolchain. + * This module performs: + * - Set the initial SP + * - Set the initial PC == Reset_Handler, + * - Set the vector table entries with the exceptions ISR address + * - Configure the clock system + * - Branches to main in the C library (which eventually + * calls main()). + * After Reset the Cortex-M3 processor is in Thread mode, + * priority is Privileged, and the Stack is set to Main. + ****************************************************************************** + * @attention + * + * Copyright (c) 2011 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-m3 + .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 + +.equ BootRAM, 0xF108F85F +/** + * @brief This is the code that gets called when the processor first + * starts execution following a reset event. Only the absolutely + * necessary set is performed, after which the application + * supplied main() routine is called. + * @param None + * @retval : None +*/ + + .section .text.Reset_Handler + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2], #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss +/* Call the clock system intitialization function.*/ + bl SystemInit +/* Call the application's entry point.*/ + bl main + bx lr +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * @param None + * @retval None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M3. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word MemManage_Handler + .word BusFault_Handler + .word UsageFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word DebugMon_Handler + .word 0 + .word PendSV_Handler + .word SysTick_Handler + .word WWDG_IRQHandler + .word PVD_IRQHandler + .word TAMPER_IRQHandler + .word RTC_IRQHandler + .word FLASH_IRQHandler + .word RCC_IRQHandler + .word EXTI0_IRQHandler + .word EXTI1_IRQHandler + .word EXTI2_IRQHandler + .word EXTI3_IRQHandler + .word EXTI4_IRQHandler + .word DMA1_Channel1_IRQHandler + .word DMA1_Channel2_IRQHandler + .word DMA1_Channel3_IRQHandler + .word DMA1_Channel4_IRQHandler + .word DMA1_Channel5_IRQHandler + .word DMA1_Channel6_IRQHandler + .word DMA1_Channel7_IRQHandler + .word ADC1_2_IRQHandler + .word USB_HP_CAN1_TX_IRQHandler + .word USB_LP_CAN1_RX0_IRQHandler + .word CAN1_RX1_IRQHandler + .word CAN1_SCE_IRQHandler + .word EXTI9_5_IRQHandler + .word TIM1_BRK_IRQHandler + .word TIM1_UP_IRQHandler + .word TIM1_TRG_COM_IRQHandler + .word TIM1_CC_IRQHandler + .word TIM2_IRQHandler + .word TIM3_IRQHandler + .word 0 + .word I2C1_EV_IRQHandler + .word I2C1_ER_IRQHandler + .word 0 + .word 0 + .word SPI1_IRQHandler + .word 0 + .word USART1_IRQHandler + .word USART2_IRQHandler + .word 0 + .word EXTI15_10_IRQHandler + .word RTCAlarm_IRQHandler + .word USBWakeUp_IRQHandler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word BootRAM /* @0x108. This is for boot in RAM mode for + STM32F10x Low Density devices.*/ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak MemManage_Handler + .thumb_set MemManage_Handler,Default_Handler + + .weak BusFault_Handler + .thumb_set BusFault_Handler,Default_Handler + + .weak UsageFault_Handler + .thumb_set UsageFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak DebugMon_Handler + .thumb_set DebugMon_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak WWDG_IRQHandler + .thumb_set WWDG_IRQHandler,Default_Handler + + .weak PVD_IRQHandler + .thumb_set PVD_IRQHandler,Default_Handler + + .weak TAMPER_IRQHandler + .thumb_set TAMPER_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_IRQHandler + .thumb_set EXTI0_IRQHandler,Default_Handler + + .weak EXTI1_IRQHandler + .thumb_set EXTI1_IRQHandler,Default_Handler + + .weak EXTI2_IRQHandler + .thumb_set EXTI2_IRQHandler,Default_Handler + + .weak EXTI3_IRQHandler + .thumb_set EXTI3_IRQHandler,Default_Handler + + .weak EXTI4_IRQHandler + .thumb_set EXTI4_IRQHandler,Default_Handler + + .weak DMA1_Channel1_IRQHandler + .thumb_set DMA1_Channel1_IRQHandler,Default_Handler + + .weak DMA1_Channel2_IRQHandler + .thumb_set DMA1_Channel2_IRQHandler,Default_Handler + + .weak DMA1_Channel3_IRQHandler + .thumb_set DMA1_Channel3_IRQHandler,Default_Handler + + .weak DMA1_Channel4_IRQHandler + .thumb_set DMA1_Channel4_IRQHandler,Default_Handler + + .weak DMA1_Channel5_IRQHandler + .thumb_set DMA1_Channel5_IRQHandler,Default_Handler + + .weak DMA1_Channel6_IRQHandler + .thumb_set DMA1_Channel6_IRQHandler,Default_Handler + + .weak DMA1_Channel7_IRQHandler + .thumb_set DMA1_Channel7_IRQHandler,Default_Handler + + .weak ADC1_2_IRQHandler + .thumb_set ADC1_2_IRQHandler,Default_Handler + + .weak USB_HP_CAN1_TX_IRQHandler + .thumb_set USB_HP_CAN1_TX_IRQHandler,Default_Handler + + .weak USB_LP_CAN1_RX0_IRQHandler + .thumb_set USB_LP_CAN1_RX0_IRQHandler,Default_Handler + + .weak CAN1_RX1_IRQHandler + .thumb_set CAN1_RX1_IRQHandler,Default_Handler + + .weak CAN1_SCE_IRQHandler + .thumb_set CAN1_SCE_IRQHandler,Default_Handler + + .weak EXTI9_5_IRQHandler + .thumb_set EXTI9_5_IRQHandler,Default_Handler + + .weak TIM1_BRK_IRQHandler + .thumb_set TIM1_BRK_IRQHandler,Default_Handler + + .weak TIM1_UP_IRQHandler + .thumb_set TIM1_UP_IRQHandler,Default_Handler + + .weak TIM1_TRG_COM_IRQHandler + .thumb_set TIM1_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 I2C1_EV_IRQHandler + .thumb_set I2C1_EV_IRQHandler,Default_Handler + + .weak I2C1_ER_IRQHandler + .thumb_set I2C1_ER_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak USART1_IRQHandler + .thumb_set USART1_IRQHandler,Default_Handler + + .weak USART2_IRQHandler + .thumb_set USART2_IRQHandler,Default_Handler + + .weak EXTI15_10_IRQHandler + .thumb_set EXTI15_10_IRQHandler,Default_Handler + + .weak RTCAlarm_IRQHandler + .thumb_set RTCAlarm_IRQHandler,Default_Handler + + .weak USBWakeUp_IRQHandler + .thumb_set USBWakeUp_IRQHandler,Default_Handler + diff --git a/boot_source/platform/CMSIS/ST/STM32F10x/Source/gcc_ride7/startup_stm32f10x_ld_vl.s b/boot_source/platform/CMSIS/ST/STM32F10x/Source/gcc_ride7/startup_stm32f10x_ld_vl.s new file mode 100644 index 0000000..29c5b78 --- /dev/null +++ b/boot_source/platform/CMSIS/ST/STM32F10x/Source/gcc_ride7/startup_stm32f10x_ld_vl.s @@ -0,0 +1,381 @@ +/** + ****************************************************************************** + * @file startup_stm32f10x_ld_vl.s + * @author MCD Application Team + * @version V3.5.1 + * @date 08-September-2021 + * @brief STM32F10x Low Density Value Line Devices vector table for RIDE7 + * toolchain. + * This module performs: + * - Set the initial SP + * - Set the initial PC == Reset_Handler, + * - Set the vector table entries with the exceptions ISR address + * - Configure the clock system + * - Branches to main in the C library (which eventually + * calls main()). + * After Reset the Cortex-M3 processor is in Thread mode, + * priority is Privileged, and the Stack is set to Main. + ****************************************************************************** + * @attention + * + * Copyright (c) 2011 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-m3 + .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 + +.equ BootRAM, 0xF108F85F +/** + * @brief This is the code that gets called when the processor first + * starts execution following a reset event. Only the absolutely + * necessary set is performed, after which the application + * supplied main() routine is called. + * @param None + * @retval None +*/ + + .section .text.Reset_Handler + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2], #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss +/* Call the clock system intitialization function.*/ + bl SystemInit +/* Call the application's entry point.*/ + bl main + bx lr +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * @param None + * @retval None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* The minimal vector table for a Cortex M3. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word MemManage_Handler + .word BusFault_Handler + .word UsageFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word DebugMon_Handler + .word 0 + .word PendSV_Handler + .word SysTick_Handler + .word WWDG_IRQHandler + .word PVD_IRQHandler + .word TAMPER_IRQHandler + .word RTC_IRQHandler + .word FLASH_IRQHandler + .word RCC_IRQHandler + .word EXTI0_IRQHandler + .word EXTI1_IRQHandler + .word EXTI2_IRQHandler + .word EXTI3_IRQHandler + .word EXTI4_IRQHandler + .word DMA1_Channel1_IRQHandler + .word DMA1_Channel2_IRQHandler + .word DMA1_Channel3_IRQHandler + .word DMA1_Channel4_IRQHandler + .word DMA1_Channel5_IRQHandler + .word DMA1_Channel6_IRQHandler + .word DMA1_Channel7_IRQHandler + .word ADC1_IRQHandler + .word 0 + .word 0 + .word 0 + .word 0 + .word EXTI9_5_IRQHandler + .word TIM1_BRK_TIM15_IRQHandler + .word TIM1_UP_TIM16_IRQHandler + .word TIM1_TRG_COM_TIM17_IRQHandler + .word TIM1_CC_IRQHandler + .word TIM2_IRQHandler + .word TIM3_IRQHandler + .word 0 + .word I2C1_EV_IRQHandler + .word I2C1_ER_IRQHandler + .word 0 + .word 0 + .word SPI1_IRQHandler + .word 0 + .word USART1_IRQHandler + .word USART2_IRQHandler + .word 0 + .word EXTI15_10_IRQHandler + .word RTCAlarm_IRQHandler + .word CEC_IRQHandler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word TIM6_DAC_IRQHandler + .word TIM7_IRQHandler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word BootRAM /* @0x01CC. This is for boot in RAM mode for + STM32F10x Low Density Value Line devices. */ + +/******************************************************************************* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak MemManage_Handler + .thumb_set MemManage_Handler,Default_Handler + + .weak BusFault_Handler + .thumb_set BusFault_Handler,Default_Handler + + .weak UsageFault_Handler + .thumb_set UsageFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak DebugMon_Handler + .thumb_set DebugMon_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak WWDG_IRQHandler + .thumb_set WWDG_IRQHandler,Default_Handler + + .weak PVD_IRQHandler + .thumb_set PVD_IRQHandler,Default_Handler + + .weak TAMPER_IRQHandler + .thumb_set TAMPER_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_IRQHandler + .thumb_set EXTI0_IRQHandler,Default_Handler + + .weak EXTI1_IRQHandler + .thumb_set EXTI1_IRQHandler,Default_Handler + + .weak EXTI2_IRQHandler + .thumb_set EXTI2_IRQHandler,Default_Handler + + .weak EXTI3_IRQHandler + .thumb_set EXTI3_IRQHandler,Default_Handler + + .weak EXTI4_IRQHandler + .thumb_set EXTI4_IRQHandler,Default_Handler + + .weak DMA1_Channel1_IRQHandler + .thumb_set DMA1_Channel1_IRQHandler,Default_Handler + + .weak DMA1_Channel2_IRQHandler + .thumb_set DMA1_Channel2_IRQHandler,Default_Handler + + .weak DMA1_Channel3_IRQHandler + .thumb_set DMA1_Channel3_IRQHandler,Default_Handler + + .weak DMA1_Channel4_IRQHandler + .thumb_set DMA1_Channel4_IRQHandler,Default_Handler + + .weak DMA1_Channel5_IRQHandler + .thumb_set DMA1_Channel5_IRQHandler,Default_Handler + + .weak DMA1_Channel6_IRQHandler + .thumb_set DMA1_Channel6_IRQHandler,Default_Handler + + .weak DMA1_Channel7_IRQHandler + .thumb_set DMA1_Channel7_IRQHandler,Default_Handler + + .weak ADC1_IRQHandler + .thumb_set ADC1_IRQHandler,Default_Handler + + .weak EXTI9_5_IRQHandler + .thumb_set EXTI9_5_IRQHandler,Default_Handler + + .weak TIM1_BRK_TIM15_IRQHandler + .thumb_set TIM1_BRK_TIM15_IRQHandler,Default_Handler + + .weak TIM1_UP_TIM16_IRQHandler + .thumb_set TIM1_UP_TIM16_IRQHandler,Default_Handler + + .weak TIM1_TRG_COM_TIM17_IRQHandler + .thumb_set TIM1_TRG_COM_TIM17_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 I2C1_EV_IRQHandler + .thumb_set I2C1_EV_IRQHandler,Default_Handler + + .weak I2C1_ER_IRQHandler + .thumb_set I2C1_ER_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak USART1_IRQHandler + .thumb_set USART1_IRQHandler,Default_Handler + + .weak USART2_IRQHandler + .thumb_set USART2_IRQHandler,Default_Handler + + .weak EXTI15_10_IRQHandler + .thumb_set EXTI15_10_IRQHandler,Default_Handler + + .weak RTCAlarm_IRQHandler + .thumb_set RTCAlarm_IRQHandler,Default_Handler + + .weak CEC_IRQHandler + .thumb_set CEC_IRQHandler,Default_Handler + + .weak TIM6_DAC_IRQHandler + .thumb_set TIM6_DAC_IRQHandler,Default_Handler + + .weak TIM7_IRQHandler + .thumb_set TIM7_IRQHandler,Default_Handler + diff --git a/boot_source/platform/CMSIS/ST/STM32F10x/Source/gcc_ride7/startup_stm32f10x_md.s b/boot_source/platform/CMSIS/ST/STM32F10x/Source/gcc_ride7/startup_stm32f10x_md.s new file mode 100644 index 0000000..a955e78 --- /dev/null +++ b/boot_source/platform/CMSIS/ST/STM32F10x/Source/gcc_ride7/startup_stm32f10x_md.s @@ -0,0 +1,356 @@ +/** + ****************************************************************************** + * @file startup_stm32f10x_md.s + * @author MCD Application Team + * @version V3.5.1 + * @date 08-September-2021 + * @brief STM32F10x Medium Density Devices vector table for RIDE7 toolchain. + * This module performs: + * - Set the initial SP + * - Set the initial PC == Reset_Handler, + * - Set the vector table entries with the exceptions ISR address + * - Configure the clock system + * - Branches to main in the C library (which eventually + * calls main()). + * After Reset the Cortex-M3 processor is in Thread mode, + * priority is Privileged, and the Stack is set to Main. + ****************************************************************************** + * @attention + * + * Copyright (c) 2011 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-m3 + .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 + +.equ BootRAM, 0xF108F85F +/** + * @brief This is the code that gets called when the processor first + * starts execution following a reset event. Only the absolutely + * necessary set is performed, after which the application + * supplied main() routine is called. + * @param None + * @retval : None +*/ + + .section .text.Reset_Handler + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2], #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss +/* Call the clock system intitialization function.*/ + bl SystemInit +/* Call the application's entry point.*/ + bl main + bx lr +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * @param None + * @retval None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M3. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word MemManage_Handler + .word BusFault_Handler + .word UsageFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word DebugMon_Handler + .word 0 + .word PendSV_Handler + .word SysTick_Handler + .word WWDG_IRQHandler + .word PVD_IRQHandler + .word TAMPER_IRQHandler + .word RTC_IRQHandler + .word FLASH_IRQHandler + .word RCC_IRQHandler + .word EXTI0_IRQHandler + .word EXTI1_IRQHandler + .word EXTI2_IRQHandler + .word EXTI3_IRQHandler + .word EXTI4_IRQHandler + .word DMA1_Channel1_IRQHandler + .word DMA1_Channel2_IRQHandler + .word DMA1_Channel3_IRQHandler + .word DMA1_Channel4_IRQHandler + .word DMA1_Channel5_IRQHandler + .word DMA1_Channel6_IRQHandler + .word DMA1_Channel7_IRQHandler + .word ADC1_2_IRQHandler + .word USB_HP_CAN1_TX_IRQHandler + .word USB_LP_CAN1_RX0_IRQHandler + .word CAN1_RX1_IRQHandler + .word CAN1_SCE_IRQHandler + .word EXTI9_5_IRQHandler + .word TIM1_BRK_IRQHandler + .word TIM1_UP_IRQHandler + .word TIM1_TRG_COM_IRQHandler + .word TIM1_CC_IRQHandler + .word TIM2_IRQHandler + .word TIM3_IRQHandler + .word TIM4_IRQHandler + .word I2C1_EV_IRQHandler + .word I2C1_ER_IRQHandler + .word I2C2_EV_IRQHandler + .word I2C2_ER_IRQHandler + .word SPI1_IRQHandler + .word SPI2_IRQHandler + .word USART1_IRQHandler + .word USART2_IRQHandler + .word USART3_IRQHandler + .word EXTI15_10_IRQHandler + .word RTCAlarm_IRQHandler + .word USBWakeUp_IRQHandler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word BootRAM /* @0x108. This is for boot in RAM mode for + STM32F10x Medium Density devices. */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak MemManage_Handler + .thumb_set MemManage_Handler,Default_Handler + + .weak BusFault_Handler + .thumb_set BusFault_Handler,Default_Handler + + .weak UsageFault_Handler + .thumb_set UsageFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak DebugMon_Handler + .thumb_set DebugMon_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak WWDG_IRQHandler + .thumb_set WWDG_IRQHandler,Default_Handler + + .weak PVD_IRQHandler + .thumb_set PVD_IRQHandler,Default_Handler + + .weak TAMPER_IRQHandler + .thumb_set TAMPER_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_IRQHandler + .thumb_set EXTI0_IRQHandler,Default_Handler + + .weak EXTI1_IRQHandler + .thumb_set EXTI1_IRQHandler,Default_Handler + + .weak EXTI2_IRQHandler + .thumb_set EXTI2_IRQHandler,Default_Handler + + .weak EXTI3_IRQHandler + .thumb_set EXTI3_IRQHandler,Default_Handler + + .weak EXTI4_IRQHandler + .thumb_set EXTI4_IRQHandler,Default_Handler + + .weak DMA1_Channel1_IRQHandler + .thumb_set DMA1_Channel1_IRQHandler,Default_Handler + + .weak DMA1_Channel2_IRQHandler + .thumb_set DMA1_Channel2_IRQHandler,Default_Handler + + .weak DMA1_Channel3_IRQHandler + .thumb_set DMA1_Channel3_IRQHandler,Default_Handler + + .weak DMA1_Channel4_IRQHandler + .thumb_set DMA1_Channel4_IRQHandler,Default_Handler + + .weak DMA1_Channel5_IRQHandler + .thumb_set DMA1_Channel5_IRQHandler,Default_Handler + + .weak DMA1_Channel6_IRQHandler + .thumb_set DMA1_Channel6_IRQHandler,Default_Handler + + .weak DMA1_Channel7_IRQHandler + .thumb_set DMA1_Channel7_IRQHandler,Default_Handler + + .weak ADC1_2_IRQHandler + .thumb_set ADC1_2_IRQHandler,Default_Handler + + .weak USB_HP_CAN1_TX_IRQHandler + .thumb_set USB_HP_CAN1_TX_IRQHandler,Default_Handler + + .weak USB_LP_CAN1_RX0_IRQHandler + .thumb_set USB_LP_CAN1_RX0_IRQHandler,Default_Handler + + .weak CAN1_RX1_IRQHandler + .thumb_set CAN1_RX1_IRQHandler,Default_Handler + + .weak CAN1_SCE_IRQHandler + .thumb_set CAN1_SCE_IRQHandler,Default_Handler + + .weak EXTI9_5_IRQHandler + .thumb_set EXTI9_5_IRQHandler,Default_Handler + + .weak TIM1_BRK_IRQHandler + .thumb_set TIM1_BRK_IRQHandler,Default_Handler + + .weak TIM1_UP_IRQHandler + .thumb_set TIM1_UP_IRQHandler,Default_Handler + + .weak TIM1_TRG_COM_IRQHandler + .thumb_set TIM1_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 TIM4_IRQHandler + .thumb_set TIM4_IRQHandler,Default_Handler + + .weak I2C1_EV_IRQHandler + .thumb_set I2C1_EV_IRQHandler,Default_Handler + + .weak I2C1_ER_IRQHandler + .thumb_set I2C1_ER_IRQHandler,Default_Handler + + .weak I2C2_EV_IRQHandler + .thumb_set I2C2_EV_IRQHandler,Default_Handler + + .weak I2C2_ER_IRQHandler + .thumb_set I2C2_ER_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak USART1_IRQHandler + .thumb_set USART1_IRQHandler,Default_Handler + + .weak USART2_IRQHandler + .thumb_set USART2_IRQHandler,Default_Handler + + .weak USART3_IRQHandler + .thumb_set USART3_IRQHandler,Default_Handler + + .weak EXTI15_10_IRQHandler + .thumb_set EXTI15_10_IRQHandler,Default_Handler + + .weak RTCAlarm_IRQHandler + .thumb_set RTCAlarm_IRQHandler,Default_Handler + + .weak USBWakeUp_IRQHandler + .thumb_set USBWakeUp_IRQHandler,Default_Handler + diff --git a/boot_source/platform/CMSIS/ST/STM32F10x/Source/gcc_ride7/startup_stm32f10x_md_vl.s b/boot_source/platform/CMSIS/ST/STM32F10x/Source/gcc_ride7/startup_stm32f10x_md_vl.s new file mode 100644 index 0000000..de17a40 --- /dev/null +++ b/boot_source/platform/CMSIS/ST/STM32F10x/Source/gcc_ride7/startup_stm32f10x_md_vl.s @@ -0,0 +1,397 @@ +/** + ****************************************************************************** + * @file startup_stm32f10x_md_vl.s + * @author MCD Application Team + * @version V3.5.1 + * @date 08-September-2021 + * @brief STM32F10x Medium Density Value Line Devices vector table for RIDE7 + * toolchain. + * This module performs: + * - Set the initial SP + * - Set the initial PC == Reset_Handler, + * - Set the vector table entries with the exceptions ISR address + * - Configure the clock system + * - Branches to main in the C library (which eventually + * calls main()). + * After Reset the Cortex-M3 processor is in Thread mode, + * priority is Privileged, and the Stack is set to Main. + ****************************************************************************** + * @attention + * + * Copyright (c) 2011 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-m3 + .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 + +.equ BootRAM, 0xF108F85F +/** + * @brief This is the code that gets called when the processor first + * starts execution following a reset event. Only the absolutely + * necessary set is performed, after which the application + * supplied main() routine is called. + * @param None + * @retval None +*/ + + .section .text.Reset_Handler + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2], #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss +/* Call the clock system intitialization function.*/ + bl SystemInit +/* Call the application's entry point.*/ + bl main + bx lr +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * @param None + * @retval None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M3. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word MemManage_Handler + .word BusFault_Handler + .word UsageFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word DebugMon_Handler + .word 0 + .word PendSV_Handler + .word SysTick_Handler + .word WWDG_IRQHandler + .word PVD_IRQHandler + .word TAMPER_IRQHandler + .word RTC_IRQHandler + .word FLASH_IRQHandler + .word RCC_IRQHandler + .word EXTI0_IRQHandler + .word EXTI1_IRQHandler + .word EXTI2_IRQHandler + .word EXTI3_IRQHandler + .word EXTI4_IRQHandler + .word DMA1_Channel1_IRQHandler + .word DMA1_Channel2_IRQHandler + .word DMA1_Channel3_IRQHandler + .word DMA1_Channel4_IRQHandler + .word DMA1_Channel5_IRQHandler + .word DMA1_Channel6_IRQHandler + .word DMA1_Channel7_IRQHandler + .word ADC1_IRQHandler + .word 0 + .word 0 + .word 0 + .word 0 + .word EXTI9_5_IRQHandler + .word TIM1_BRK_TIM15_IRQHandler + .word TIM1_UP_TIM16_IRQHandler + .word TIM1_TRG_COM_TIM17_IRQHandler + .word TIM1_CC_IRQHandler + .word TIM2_IRQHandler + .word TIM3_IRQHandler + .word TIM4_IRQHandler + .word I2C1_EV_IRQHandler + .word I2C1_ER_IRQHandler + .word I2C2_EV_IRQHandler + .word I2C2_ER_IRQHandler + .word SPI1_IRQHandler + .word SPI2_IRQHandler + .word USART1_IRQHandler + .word USART2_IRQHandler + .word USART3_IRQHandler + .word EXTI15_10_IRQHandler + .word RTCAlarm_IRQHandler + .word CEC_IRQHandler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word TIM6_DAC_IRQHandler + .word TIM7_IRQHandler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word BootRAM /* @0x01CC. This is for boot in RAM mode for + STM32F10x Medium Value Line Density devices. */ + +/******************************************************************************* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak MemManage_Handler + .thumb_set MemManage_Handler,Default_Handler + + .weak BusFault_Handler + .thumb_set BusFault_Handler,Default_Handler + + .weak UsageFault_Handler + .thumb_set UsageFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak DebugMon_Handler + .thumb_set DebugMon_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak WWDG_IRQHandler + .thumb_set WWDG_IRQHandler,Default_Handler + + .weak PVD_IRQHandler + .thumb_set PVD_IRQHandler,Default_Handler + + .weak TAMPER_IRQHandler + .thumb_set TAMPER_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_IRQHandler + .thumb_set EXTI0_IRQHandler,Default_Handler + + .weak EXTI1_IRQHandler + .thumb_set EXTI1_IRQHandler,Default_Handler + + .weak EXTI2_IRQHandler + .thumb_set EXTI2_IRQHandler,Default_Handler + + .weak EXTI3_IRQHandler + .thumb_set EXTI3_IRQHandler,Default_Handler + + .weak EXTI4_IRQHandler + .thumb_set EXTI4_IRQHandler,Default_Handler + + .weak DMA1_Channel1_IRQHandler + .thumb_set DMA1_Channel1_IRQHandler,Default_Handler + + .weak DMA1_Channel2_IRQHandler + .thumb_set DMA1_Channel2_IRQHandler,Default_Handler + + .weak DMA1_Channel3_IRQHandler + .thumb_set DMA1_Channel3_IRQHandler,Default_Handler + + .weak DMA1_Channel4_IRQHandler + .thumb_set DMA1_Channel4_IRQHandler,Default_Handler + + .weak DMA1_Channel5_IRQHandler + .thumb_set DMA1_Channel5_IRQHandler,Default_Handler + + .weak DMA1_Channel6_IRQHandler + .thumb_set DMA1_Channel6_IRQHandler,Default_Handler + + .weak DMA1_Channel7_IRQHandler + .thumb_set DMA1_Channel7_IRQHandler,Default_Handler + + .weak ADC1_IRQHandler + .thumb_set ADC1_IRQHandler,Default_Handler + + .weak EXTI9_5_IRQHandler + .thumb_set EXTI9_5_IRQHandler,Default_Handler + + .weak TIM1_BRK_TIM15_IRQHandler + .thumb_set TIM1_BRK_TIM15_IRQHandler,Default_Handler + + .weak TIM1_UP_TIM16_IRQHandler + .thumb_set TIM1_UP_TIM16_IRQHandler,Default_Handler + + .weak TIM1_TRG_COM_TIM17_IRQHandler + .thumb_set TIM1_TRG_COM_TIM17_IRQHandler,Default_Handler + + .weak TIM1_CC_IRQHandler + .thumb_set TIM1_CC_IRQHandler,Default_Handler + + .weak TIM2_IRQHandler + .thumb_set TIM2_IRQHandler,Default_Handler + + .weak TIM3_IRQHandler + .thumb_set TIM3_IRQHandler,Default_Handler + + .weak TIM4_IRQHandler + .thumb_set TIM4_IRQHandler,Default_Handler + + .weak I2C1_EV_IRQHandler + .thumb_set I2C1_EV_IRQHandler,Default_Handler + + .weak I2C1_ER_IRQHandler + .thumb_set I2C1_ER_IRQHandler,Default_Handler + + .weak I2C2_EV_IRQHandler + .thumb_set I2C2_EV_IRQHandler,Default_Handler + + .weak I2C2_ER_IRQHandler + .thumb_set I2C2_ER_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak USART1_IRQHandler + .thumb_set USART1_IRQHandler,Default_Handler + + .weak USART2_IRQHandler + .thumb_set USART2_IRQHandler,Default_Handler + + .weak USART3_IRQHandler + .thumb_set USART3_IRQHandler,Default_Handler + + .weak EXTI15_10_IRQHandler + .thumb_set EXTI15_10_IRQHandler,Default_Handler + + .weak RTCAlarm_IRQHandler + .thumb_set RTCAlarm_IRQHandler,Default_Handler + + .weak CEC_IRQHandler + .thumb_set CEC_IRQHandler,Default_Handler + + .weak TIM6_DAC_IRQHandler + .thumb_set TIM6_DAC_IRQHandler,Default_Handler + + .weak TIM7_IRQHandler + .thumb_set TIM7_IRQHandler,Default_Handler + diff --git a/boot_source/platform/CMSIS/ST/STM32F10x/Source/gcc_ride7/startup_stm32f10x_xl.s b/boot_source/platform/CMSIS/ST/STM32F10x/Source/gcc_ride7/startup_stm32f10x_xl.s new file mode 100644 index 0000000..2621fb4 --- /dev/null +++ b/boot_source/platform/CMSIS/ST/STM32F10x/Source/gcc_ride7/startup_stm32f10x_xl.s @@ -0,0 +1,463 @@ +/** + ****************************************************************************** + * @file startup_stm32f10x_xl.s + * @author MCD Application Team + * @version V3.5.1 + * @date 08-September-2021 + * @brief STM32F10x XL-Density Devices vector table for RIDE7 toolchain. + * This module performs: + * - Set the initial SP + * - Set the initial PC == Reset_Handler, + * - Set the vector table entries with the exceptions ISR address + * - Configure the clock system and the external SRAM mounted on + * STM3210E-EVAL board to be used as data memory (optional, + * to be enabled by user) + * - Branches to main in the C library (which eventually + * calls main()). + * After Reset the Cortex-M3 processor is in Thread mode, + * priority is Privileged, and the Stack is set to Main. + ****************************************************************************** + * @attention + * + * Copyright (c) 2011 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-m3 + .fpu softvfp + .thumb + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss +/* stack used for SystemInit_ExtMemCtl; always internal RAM used */ + +.equ BootRAM, 0xF1E0F85F +/** + * @brief This is the code that gets called when the processor first + * starts execution following a reset event. Only the absolutely + * necessary set is performed, after which the application + * supplied main() routine is called. + * @param None + * @retval : None +*/ + + .section .text.Reset_Handler + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2], #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss +/* Call the clock system intitialization function.*/ + bl SystemInit +/* Call the application's entry point.*/ + bl main + bx lr +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * @param None + * @retval None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M3. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +*******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word MemManage_Handler + .word BusFault_Handler + .word UsageFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word DebugMon_Handler + .word 0 + .word PendSV_Handler + .word SysTick_Handler + .word WWDG_IRQHandler + .word PVD_IRQHandler + .word TAMPER_IRQHandler + .word RTC_IRQHandler + .word FLASH_IRQHandler + .word RCC_IRQHandler + .word EXTI0_IRQHandler + .word EXTI1_IRQHandler + .word EXTI2_IRQHandler + .word EXTI3_IRQHandler + .word EXTI4_IRQHandler + .word DMA1_Channel1_IRQHandler + .word DMA1_Channel2_IRQHandler + .word DMA1_Channel3_IRQHandler + .word DMA1_Channel4_IRQHandler + .word DMA1_Channel5_IRQHandler + .word DMA1_Channel6_IRQHandler + .word DMA1_Channel7_IRQHandler + .word ADC1_2_IRQHandler + .word USB_HP_CAN1_TX_IRQHandler + .word USB_LP_CAN1_RX0_IRQHandler + .word CAN1_RX1_IRQHandler + .word CAN1_SCE_IRQHandler + .word EXTI9_5_IRQHandler + .word TIM1_BRK_TIM9_IRQHandler + .word TIM1_UP_TIM10_IRQHandler + .word TIM1_TRG_COM_TIM11_IRQHandler + .word TIM1_CC_IRQHandler + .word TIM2_IRQHandler + .word TIM3_IRQHandler + .word TIM4_IRQHandler + .word I2C1_EV_IRQHandler + .word I2C1_ER_IRQHandler + .word I2C2_EV_IRQHandler + .word I2C2_ER_IRQHandler + .word SPI1_IRQHandler + .word SPI2_IRQHandler + .word USART1_IRQHandler + .word USART2_IRQHandler + .word USART3_IRQHandler + .word EXTI15_10_IRQHandler + .word RTCAlarm_IRQHandler + .word USBWakeUp_IRQHandler + .word TIM8_BRK_TIM12_IRQHandler + .word TIM8_UP_TIM13_IRQHandler + .word TIM8_TRG_COM_TIM14_IRQHandler + .word TIM8_CC_IRQHandler + .word ADC3_IRQHandler + .word FSMC_IRQHandler + .word SDIO_IRQHandler + .word TIM5_IRQHandler + .word SPI3_IRQHandler + .word UART4_IRQHandler + .word UART5_IRQHandler + .word TIM6_IRQHandler + .word TIM7_IRQHandler + .word DMA2_Channel1_IRQHandler + .word DMA2_Channel2_IRQHandler + .word DMA2_Channel3_IRQHandler + .word DMA2_Channel4_5_IRQHandler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word BootRAM /* @0x1E0. This is for boot in RAM mode for + STM32F10x XL Density devices. */ +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak MemManage_Handler + .thumb_set MemManage_Handler,Default_Handler + + .weak BusFault_Handler + .thumb_set BusFault_Handler,Default_Handler + + .weak UsageFault_Handler + .thumb_set UsageFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak DebugMon_Handler + .thumb_set DebugMon_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak WWDG_IRQHandler + .thumb_set WWDG_IRQHandler,Default_Handler + + .weak PVD_IRQHandler + .thumb_set PVD_IRQHandler,Default_Handler + + .weak TAMPER_IRQHandler + .thumb_set TAMPER_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_IRQHandler + .thumb_set EXTI0_IRQHandler,Default_Handler + + .weak EXTI1_IRQHandler + .thumb_set EXTI1_IRQHandler,Default_Handler + + .weak EXTI2_IRQHandler + .thumb_set EXTI2_IRQHandler,Default_Handler + + .weak EXTI3_IRQHandler + .thumb_set EXTI3_IRQHandler,Default_Handler + + .weak EXTI4_IRQHandler + .thumb_set EXTI4_IRQHandler,Default_Handler + + .weak DMA1_Channel1_IRQHandler + .thumb_set DMA1_Channel1_IRQHandler,Default_Handler + + .weak DMA1_Channel2_IRQHandler + .thumb_set DMA1_Channel2_IRQHandler,Default_Handler + + .weak DMA1_Channel3_IRQHandler + .thumb_set DMA1_Channel3_IRQHandler,Default_Handler + + .weak DMA1_Channel4_IRQHandler + .thumb_set DMA1_Channel4_IRQHandler,Default_Handler + + .weak DMA1_Channel5_IRQHandler + .thumb_set DMA1_Channel5_IRQHandler,Default_Handler + + .weak DMA1_Channel6_IRQHandler + .thumb_set DMA1_Channel6_IRQHandler,Default_Handler + + .weak DMA1_Channel7_IRQHandler + .thumb_set DMA1_Channel7_IRQHandler,Default_Handler + + .weak ADC1_2_IRQHandler + .thumb_set ADC1_2_IRQHandler,Default_Handler + + .weak USB_HP_CAN1_TX_IRQHandler + .thumb_set USB_HP_CAN1_TX_IRQHandler,Default_Handler + + .weak USB_LP_CAN1_RX0_IRQHandler + .thumb_set USB_LP_CAN1_RX0_IRQHandler,Default_Handler + + .weak CAN1_RX1_IRQHandler + .thumb_set CAN1_RX1_IRQHandler,Default_Handler + + .weak CAN1_SCE_IRQHandler + .thumb_set CAN1_SCE_IRQHandler,Default_Handler + + .weak EXTI9_5_IRQHandler + .thumb_set EXTI9_5_IRQHandler,Default_Handler + + .weak TIM1_BRK_TIM9_IRQHandler + .thumb_set TIM1_BRK_TIM9_IRQHandler,Default_Handler + + .weak TIM1_UP_TIM10_IRQHandler + .thumb_set TIM1_UP_TIM10_IRQHandler,Default_Handler + + .weak TIM1_TRG_COM_TIM11_IRQHandler + .thumb_set TIM1_TRG_COM_TIM11_IRQHandler,Default_Handler + + .weak TIM1_CC_IRQHandler + .thumb_set TIM1_CC_IRQHandler,Default_Handler + + .weak TIM2_IRQHandler + .thumb_set TIM2_IRQHandler,Default_Handler + + .weak TIM3_IRQHandler + .thumb_set TIM3_IRQHandler,Default_Handler + + .weak TIM4_IRQHandler + .thumb_set TIM4_IRQHandler,Default_Handler + + .weak I2C1_EV_IRQHandler + .thumb_set I2C1_EV_IRQHandler,Default_Handler + + .weak I2C1_ER_IRQHandler + .thumb_set I2C1_ER_IRQHandler,Default_Handler + + .weak I2C2_EV_IRQHandler + .thumb_set I2C2_EV_IRQHandler,Default_Handler + + .weak I2C2_ER_IRQHandler + .thumb_set I2C2_ER_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak USART1_IRQHandler + .thumb_set USART1_IRQHandler,Default_Handler + + .weak USART2_IRQHandler + .thumb_set USART2_IRQHandler,Default_Handler + + .weak USART3_IRQHandler + .thumb_set USART3_IRQHandler,Default_Handler + + .weak EXTI15_10_IRQHandler + .thumb_set EXTI15_10_IRQHandler,Default_Handler + + .weak RTCAlarm_IRQHandler + .thumb_set RTCAlarm_IRQHandler,Default_Handler + + .weak USBWakeUp_IRQHandler + .thumb_set USBWakeUp_IRQHandler,Default_Handler + + .weak TIM8_BRK_TIM12_IRQHandler + .thumb_set TIM8_BRK_TIM12_IRQHandler,Default_Handler + + .weak TIM8_UP_TIM13_IRQHandler + .thumb_set TIM8_UP_TIM13_IRQHandler,Default_Handler + + .weak TIM8_TRG_COM_TIM14_IRQHandler + .thumb_set TIM8_TRG_COM_TIM14_IRQHandler,Default_Handler + + .weak TIM8_CC_IRQHandler + .thumb_set TIM8_CC_IRQHandler,Default_Handler + + .weak ADC3_IRQHandler + .thumb_set ADC3_IRQHandler,Default_Handler + + .weak FSMC_IRQHandler + .thumb_set FSMC_IRQHandler,Default_Handler + + .weak SDIO_IRQHandler + .thumb_set SDIO_IRQHandler,Default_Handler + + .weak TIM5_IRQHandler + .thumb_set TIM5_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak TIM6_IRQHandler + .thumb_set TIM6_IRQHandler,Default_Handler + + .weak TIM7_IRQHandler + .thumb_set TIM7_IRQHandler,Default_Handler + + .weak DMA2_Channel1_IRQHandler + .thumb_set DMA2_Channel1_IRQHandler,Default_Handler + + .weak DMA2_Channel2_IRQHandler + .thumb_set DMA2_Channel2_IRQHandler,Default_Handler + + .weak DMA2_Channel3_IRQHandler + .thumb_set DMA2_Channel3_IRQHandler,Default_Handler + + .weak DMA2_Channel4_5_IRQHandler + .thumb_set DMA2_Channel4_5_IRQHandler,Default_Handler + diff --git a/boot_source/platform/CMSIS/ST/STM32F10x/Source/iar/startup_stm32f10x_cl.s b/boot_source/platform/CMSIS/ST/STM32F10x/Source/iar/startup_stm32f10x_cl.s new file mode 100644 index 0000000..20aa4c8 --- /dev/null +++ b/boot_source/platform/CMSIS/ST/STM32F10x/Source/iar/startup_stm32f10x_cl.s @@ -0,0 +1,508 @@ +;******************** (C) COPYRIGHT 2011 STMicroelectronics ******************* +;* File Name : startup_stm32f10x_cl.s +;* Author : MCD Application Team +;* Version : V3.5.1 +;* Date : 08-September-2021 +;* Description : STM32F10x Connectivity line devices vector table for +;* EWARM toolchain. +;* This module performs: +;* - Set the initial SP +;* - Configure the clock system +;* - Set the initial PC == __iar_program_start, +;* - Set the vector table entries with the exceptions ISR +;* address. +;* After Reset the Cortex-M3 processor is in Thread mode, +;* priority is Privileged, and the Stack is set to Main. +;******************************************************************************** +;* +;* Copyright (c) 2011 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. +; +;******************************************************************************* +; +; +; The modules in this file are included in the libraries, and may be replaced +; by any user-defined modules that define the PUBLIC symbol _program_start or +; a user defined start symbol. +; To override the cstartup defined in the library, simply add your modified +; version to the workbench project. +; +; The vector table is normally located at address 0. +; When debugging in RAM, it can be located in RAM, aligned to at least 2^6. +; The name "__vector_table" has special meaning for C-SPY: +; it is where the SP start value is found, and the NVIC vector +; table register (VTOR) is initialized to this address if != 0. +; +; Cortex-M version +; + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + EXTERN SystemInit + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD MemManage_Handler ; MPU Fault Handler + DCD BusFault_Handler ; Bus Fault Handler + DCD UsageFault_Handler ; Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD DebugMon_Handler ; Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD WWDG_IRQHandler ; Window Watchdog + DCD PVD_IRQHandler ; PVD through EXTI Line detect + DCD TAMPER_IRQHandler ; Tamper + DCD RTC_IRQHandler ; RTC + DCD FLASH_IRQHandler ; Flash + DCD RCC_IRQHandler ; RCC + DCD EXTI0_IRQHandler ; EXTI Line 0 + DCD EXTI1_IRQHandler ; EXTI Line 1 + DCD EXTI2_IRQHandler ; EXTI Line 2 + DCD EXTI3_IRQHandler ; EXTI Line 3 + DCD EXTI4_IRQHandler ; EXTI Line 4 + DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1 + DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2 + DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3 + DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4 + DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5 + DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6 + DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7 + DCD ADC1_2_IRQHandler ; ADC1 and ADC2 + DCD CAN1_TX_IRQHandler ; CAN1 TX + DCD CAN1_RX0_IRQHandler ; CAN1 RX0 + DCD CAN1_RX1_IRQHandler ; CAN1 RX1 + DCD CAN1_SCE_IRQHandler ; CAN1 SCE + DCD EXTI9_5_IRQHandler ; EXTI Line 9..5 + DCD TIM1_BRK_IRQHandler ; TIM1 Break + DCD TIM1_UP_IRQHandler ; TIM1 Update + DCD TIM1_TRG_COM_IRQHandler ; TIM1 Trigger and Commutation + DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare + DCD TIM2_IRQHandler ; TIM2 + DCD TIM3_IRQHandler ; TIM3 + DCD TIM4_IRQHandler ; TIM4 + DCD I2C1_EV_IRQHandler ; I2C1 Event + DCD I2C1_ER_IRQHandler ; I2C1 Error + DCD I2C2_EV_IRQHandler ; I2C2 Event + DCD I2C2_ER_IRQHandler ; I2C1 Error + DCD SPI1_IRQHandler ; SPI1 + DCD SPI2_IRQHandler ; SPI2 + DCD USART1_IRQHandler ; USART1 + DCD USART2_IRQHandler ; USART2 + DCD USART3_IRQHandler ; USART3 + DCD EXTI15_10_IRQHandler ; EXTI Line 15..10 + DCD RTCAlarm_IRQHandler ; RTC alarm through EXTI line + DCD OTG_FS_WKUP_IRQHandler ; USB OTG FS Wakeup through EXTI line + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD TIM5_IRQHandler ; TIM5 + DCD SPI3_IRQHandler ; SPI3 + DCD UART4_IRQHandler ; UART4 + DCD UART5_IRQHandler ; UART5 + DCD TIM6_IRQHandler ; TIM6 + DCD TIM7_IRQHandler ; TIM7 + DCD DMA2_Channel1_IRQHandler ; DMA2 Channel1 + DCD DMA2_Channel2_IRQHandler ; DMA2 Channel2 + DCD DMA2_Channel3_IRQHandler ; DMA2 Channel3 + DCD DMA2_Channel4_IRQHandler ; DMA2 Channel4 + DCD DMA2_Channel5_IRQHandler ; DMA2 Channel5 + DCD ETH_IRQHandler ; Ethernet + DCD ETH_WKUP_IRQHandler ; Ethernet Wakeup through EXTI line + DCD CAN2_TX_IRQHandler ; CAN2 TX + DCD CAN2_RX0_IRQHandler ; CAN2 RX0 + DCD CAN2_RX1_IRQHandler ; CAN2 RX1 + DCD CAN2_SCE_IRQHandler ; CAN2 SCE + DCD OTG_FS_IRQHandler ; USB OTG FS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + SECTION .text:CODE:REORDER:NOROOT(2) +Reset_Handler + LDR R0, =SystemInit + BLX R0 + LDR R0, =__iar_program_start + BX R0 + + PUBWEAK NMI_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +NMI_Handler + B NMI_Handler + + PUBWEAK HardFault_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +HardFault_Handler + B HardFault_Handler + + PUBWEAK MemManage_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +MemManage_Handler + B MemManage_Handler + + PUBWEAK BusFault_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +BusFault_Handler + B BusFault_Handler + + PUBWEAK UsageFault_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +UsageFault_Handler + B UsageFault_Handler + + PUBWEAK SVC_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +SVC_Handler + B SVC_Handler + + PUBWEAK DebugMon_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +DebugMon_Handler + B DebugMon_Handler + + PUBWEAK PendSV_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +PendSV_Handler + B PendSV_Handler + + PUBWEAK SysTick_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +SysTick_Handler + B SysTick_Handler + + PUBWEAK WWDG_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +WWDG_IRQHandler + B WWDG_IRQHandler + + PUBWEAK PVD_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +PVD_IRQHandler + B PVD_IRQHandler + + PUBWEAK TAMPER_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TAMPER_IRQHandler + B TAMPER_IRQHandler + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +RTC_IRQHandler + B RTC_IRQHandler + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + PUBWEAK RCC_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +RCC_IRQHandler + B RCC_IRQHandler + + PUBWEAK EXTI0_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI0_IRQHandler + B EXTI0_IRQHandler + + PUBWEAK EXTI1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI1_IRQHandler + B EXTI1_IRQHandler + + PUBWEAK EXTI2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI2_IRQHandler + B EXTI2_IRQHandler + + PUBWEAK EXTI3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI3_IRQHandler + B EXTI3_IRQHandler + + + PUBWEAK EXTI4_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI4_IRQHandler + B EXTI4_IRQHandler + + PUBWEAK DMA1_Channel1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel1_IRQHandler + B DMA1_Channel1_IRQHandler + + PUBWEAK DMA1_Channel2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel2_IRQHandler + B DMA1_Channel2_IRQHandler + + PUBWEAK DMA1_Channel3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel3_IRQHandler + B DMA1_Channel3_IRQHandler + + PUBWEAK DMA1_Channel4_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel4_IRQHandler + B DMA1_Channel4_IRQHandler + + PUBWEAK DMA1_Channel5_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel5_IRQHandler + B DMA1_Channel5_IRQHandler + + PUBWEAK DMA1_Channel6_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel6_IRQHandler + B DMA1_Channel6_IRQHandler + + PUBWEAK DMA1_Channel7_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel7_IRQHandler + B DMA1_Channel7_IRQHandler + + PUBWEAK ADC1_2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +ADC1_2_IRQHandler + B ADC1_2_IRQHandler + + PUBWEAK CAN1_TX_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +CAN1_TX_IRQHandler + B CAN1_TX_IRQHandler + + PUBWEAK CAN1_RX0_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +CAN1_RX0_IRQHandler + B CAN1_RX0_IRQHandler + + PUBWEAK CAN1_RX1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +CAN1_RX1_IRQHandler + B CAN1_RX1_IRQHandler + + PUBWEAK CAN1_SCE_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +CAN1_SCE_IRQHandler + B CAN1_SCE_IRQHandler + + PUBWEAK EXTI9_5_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI9_5_IRQHandler + B EXTI9_5_IRQHandler + + PUBWEAK TIM1_BRK_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM1_BRK_IRQHandler + B TIM1_BRK_IRQHandler + + PUBWEAK TIM1_UP_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM1_UP_IRQHandler + B TIM1_UP_IRQHandler + + PUBWEAK TIM1_TRG_COM_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM1_TRG_COM_IRQHandler + B TIM1_TRG_COM_IRQHandler + + PUBWEAK TIM1_CC_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM1_CC_IRQHandler + B TIM1_CC_IRQHandler + + PUBWEAK TIM2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM2_IRQHandler + B TIM2_IRQHandler + + PUBWEAK TIM3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM3_IRQHandler + B TIM3_IRQHandler + + PUBWEAK TIM4_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM4_IRQHandler + B TIM4_IRQHandler + + PUBWEAK I2C1_EV_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +I2C1_EV_IRQHandler + B I2C1_EV_IRQHandler + + PUBWEAK I2C1_ER_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +I2C1_ER_IRQHandler + B I2C1_ER_IRQHandler + + PUBWEAK I2C2_EV_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +I2C2_EV_IRQHandler + B I2C2_EV_IRQHandler + + PUBWEAK I2C2_ER_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +I2C2_ER_IRQHandler + B I2C2_ER_IRQHandler + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + PUBWEAK USART1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +USART1_IRQHandler + B USART1_IRQHandler + + PUBWEAK USART2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +USART2_IRQHandler + B USART2_IRQHandler + + PUBWEAK USART3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +USART3_IRQHandler + B USART3_IRQHandler + + PUBWEAK EXTI15_10_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI15_10_IRQHandler + B EXTI15_10_IRQHandler + + PUBWEAK RTCAlarm_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +RTCAlarm_IRQHandler + B RTCAlarm_IRQHandler + + PUBWEAK OTG_FS_WKUP_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +OTG_FS_WKUP_IRQHandler + B OTG_FS_WKUP_IRQHandler + + PUBWEAK TIM5_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM5_IRQHandler + B TIM5_IRQHandler + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +UART4_IRQHandler + B UART4_IRQHandler + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +UART5_IRQHandler + B UART5_IRQHandler + + PUBWEAK TIM6_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM6_IRQHandler + B TIM6_IRQHandler + + PUBWEAK TIM7_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM7_IRQHandler + B TIM7_IRQHandler + + PUBWEAK DMA2_Channel1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA2_Channel1_IRQHandler + B DMA2_Channel1_IRQHandler + + PUBWEAK DMA2_Channel2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA2_Channel2_IRQHandler + B DMA2_Channel2_IRQHandler + + PUBWEAK DMA2_Channel3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA2_Channel3_IRQHandler + B DMA2_Channel3_IRQHandler + + PUBWEAK DMA2_Channel4_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA2_Channel4_IRQHandler + B DMA2_Channel4_IRQHandler + + PUBWEAK DMA2_Channel5_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA2_Channel5_IRQHandler + B DMA2_Channel5_IRQHandler + + PUBWEAK ETH_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +ETH_IRQHandler + B ETH_IRQHandler + + PUBWEAK ETH_WKUP_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +ETH_WKUP_IRQHandler + B ETH_WKUP_IRQHandler + + PUBWEAK CAN2_TX_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +CAN2_TX_IRQHandler + B CAN2_TX_IRQHandler + + PUBWEAK CAN2_RX0_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +CAN2_RX0_IRQHandler + B CAN2_RX0_IRQHandler + + PUBWEAK CAN2_RX1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +CAN2_RX1_IRQHandler + B CAN2_RX1_IRQHandler + + PUBWEAK CAN2_SCE_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +CAN2_SCE_IRQHandler + B CAN2_SCE_IRQHandler + + PUBWEAK OTG_FS_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +OTG_FS_IRQHandler + B OTG_FS_IRQHandler + + END diff --git a/boot_source/platform/CMSIS/ST/STM32F10x/Source/iar/startup_stm32f10x_hd.s b/boot_source/platform/CMSIS/ST/STM32F10x/Source/iar/startup_stm32f10x_hd.s new file mode 100644 index 0000000..d46073f --- /dev/null +++ b/boot_source/platform/CMSIS/ST/STM32F10x/Source/iar/startup_stm32f10x_hd.s @@ -0,0 +1,497 @@ +;******************** (C) COPYRIGHT 2011 STMicroelectronics ******************** +;* File Name : startup_stm32f10x_hd.s +;* Author : MCD Application Team +;* Version : V3.5.1 +;* Date : 08-September-2021 +;* Description : STM32F10x High Density Devices vector table for EWARM +;* toolchain. +;* This module performs: +;* - Set the initial SP +;* - Configure the clock system and the external SRAM +;* mounted on STM3210E-EVAL board to be used as data +;* memory (optional, to be enabled by user) +;* - Set the initial PC == __iar_program_start, +;* - Set the vector table entries with the exceptions ISR address, +;* After Reset the Cortex-M3 processor is in Thread mode, +;* priority is Privileged, and the Stack is set to Main. +;******************************************************************************** +;* +;* Copyright (c) 2011 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. +; +;******************************************************************************* +; +; +; The modules in this file are included in the libraries, and may be replaced +; by any user-defined modules that define the PUBLIC symbol _program_start or +; a user defined start symbol. +; To override the cstartup defined in the library, simply add your modified +; version to the workbench project. +; +; The vector table is normally located at address 0. +; When debugging in RAM, it can be located in RAM, aligned to at least 2^6. +; The name "__vector_table" has special meaning for C-SPY: +; it is where the SP start value is found, and the NVIC vector +; table register (VTOR) is initialized to this address if != 0. +; +; Cortex-M version +; + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + EXTERN SystemInit + PUBLIC __vector_table + + DATA + +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD MemManage_Handler ; MPU Fault Handler + DCD BusFault_Handler ; Bus Fault Handler + DCD UsageFault_Handler ; Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD DebugMon_Handler ; Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD WWDG_IRQHandler ; Window Watchdog + DCD PVD_IRQHandler ; PVD through EXTI Line detect + DCD TAMPER_IRQHandler ; Tamper + DCD RTC_IRQHandler ; RTC + DCD FLASH_IRQHandler ; Flash + DCD RCC_IRQHandler ; RCC + DCD EXTI0_IRQHandler ; EXTI Line 0 + DCD EXTI1_IRQHandler ; EXTI Line 1 + DCD EXTI2_IRQHandler ; EXTI Line 2 + DCD EXTI3_IRQHandler ; EXTI Line 3 + DCD EXTI4_IRQHandler ; EXTI Line 4 + DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1 + DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2 + DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3 + DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4 + DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5 + DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6 + DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7 + DCD ADC1_2_IRQHandler ; ADC1 & ADC2 + DCD USB_HP_CAN1_TX_IRQHandler ; USB High Priority or CAN1 TX + DCD USB_LP_CAN1_RX0_IRQHandler ; USB Low Priority or CAN1 RX0 + DCD CAN1_RX1_IRQHandler ; CAN1 RX1 + DCD CAN1_SCE_IRQHandler ; CAN1 SCE + DCD EXTI9_5_IRQHandler ; EXTI Line 9..5 + DCD TIM1_BRK_IRQHandler ; TIM1 Break + DCD TIM1_UP_IRQHandler ; TIM1 Update + DCD TIM1_TRG_COM_IRQHandler ; TIM1 Trigger and Commutation + DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare + DCD TIM2_IRQHandler ; TIM2 + DCD TIM3_IRQHandler ; TIM3 + DCD TIM4_IRQHandler ; TIM4 + DCD I2C1_EV_IRQHandler ; I2C1 Event + DCD I2C1_ER_IRQHandler ; I2C1 Error + DCD I2C2_EV_IRQHandler ; I2C2 Event + DCD I2C2_ER_IRQHandler ; I2C2 Error + DCD SPI1_IRQHandler ; SPI1 + DCD SPI2_IRQHandler ; SPI2 + DCD USART1_IRQHandler ; USART1 + DCD USART2_IRQHandler ; USART2 + DCD USART3_IRQHandler ; USART3 + DCD EXTI15_10_IRQHandler ; EXTI Line 15..10 + DCD RTCAlarm_IRQHandler ; RTC Alarm through EXTI Line + DCD USBWakeUp_IRQHandler ; USB Wakeup from suspend + DCD TIM8_BRK_IRQHandler ; TIM8 Break + DCD TIM8_UP_IRQHandler ; TIM8 Update + DCD TIM8_TRG_COM_IRQHandler ; TIM8 Trigger and Commutation + DCD TIM8_CC_IRQHandler ; TIM8 Capture Compare + DCD ADC3_IRQHandler ; ADC3 + DCD FSMC_IRQHandler ; FSMC + DCD SDIO_IRQHandler ; SDIO + DCD TIM5_IRQHandler ; TIM5 + DCD SPI3_IRQHandler ; SPI3 + DCD UART4_IRQHandler ; UART4 + DCD UART5_IRQHandler ; UART5 + DCD TIM6_IRQHandler ; TIM6 + DCD TIM7_IRQHandler ; TIM7 + DCD DMA2_Channel1_IRQHandler ; DMA2 Channel1 + DCD DMA2_Channel2_IRQHandler ; DMA2 Channel2 + DCD DMA2_Channel3_IRQHandler ; DMA2 Channel3 + DCD DMA2_Channel4_5_IRQHandler ; DMA2 Channel4 & Channel5 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + SECTION .text:CODE:REORDER:NOROOT(2) +Reset_Handler + LDR R0, =SystemInit + BLX R0 + LDR R0, =__iar_program_start + BX R0 + + PUBWEAK NMI_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +NMI_Handler + B NMI_Handler + + PUBWEAK HardFault_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +HardFault_Handler + B HardFault_Handler + + PUBWEAK MemManage_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +MemManage_Handler + B MemManage_Handler + + PUBWEAK BusFault_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +BusFault_Handler + B BusFault_Handler + + PUBWEAK UsageFault_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +UsageFault_Handler + B UsageFault_Handler + + PUBWEAK SVC_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +SVC_Handler + B SVC_Handler + + PUBWEAK DebugMon_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +DebugMon_Handler + B DebugMon_Handler + + PUBWEAK PendSV_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +PendSV_Handler + B PendSV_Handler + + PUBWEAK SysTick_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +SysTick_Handler + B SysTick_Handler + + PUBWEAK WWDG_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +WWDG_IRQHandler + B WWDG_IRQHandler + + PUBWEAK PVD_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +PVD_IRQHandler + B PVD_IRQHandler + + PUBWEAK TAMPER_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TAMPER_IRQHandler + B TAMPER_IRQHandler + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +RTC_IRQHandler + B RTC_IRQHandler + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + PUBWEAK RCC_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +RCC_IRQHandler + B RCC_IRQHandler + + PUBWEAK EXTI0_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI0_IRQHandler + B EXTI0_IRQHandler + + PUBWEAK EXTI1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI1_IRQHandler + B EXTI1_IRQHandler + + PUBWEAK EXTI2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI2_IRQHandler + B EXTI2_IRQHandler + + PUBWEAK EXTI3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI3_IRQHandler + B EXTI3_IRQHandler + + PUBWEAK EXTI4_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI4_IRQHandler + B EXTI4_IRQHandler + + PUBWEAK DMA1_Channel1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel1_IRQHandler + B DMA1_Channel1_IRQHandler + + PUBWEAK DMA1_Channel2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel2_IRQHandler + B DMA1_Channel2_IRQHandler + + PUBWEAK DMA1_Channel3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel3_IRQHandler + B DMA1_Channel3_IRQHandler + + PUBWEAK DMA1_Channel4_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel4_IRQHandler + B DMA1_Channel4_IRQHandler + + PUBWEAK DMA1_Channel5_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel5_IRQHandler + B DMA1_Channel5_IRQHandler + + PUBWEAK DMA1_Channel6_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel6_IRQHandler + B DMA1_Channel6_IRQHandler + + PUBWEAK DMA1_Channel7_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel7_IRQHandler + B DMA1_Channel7_IRQHandler + + PUBWEAK ADC1_2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +ADC1_2_IRQHandler + B ADC1_2_IRQHandler + + PUBWEAK USB_HP_CAN1_TX_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +USB_HP_CAN1_TX_IRQHandler + B USB_HP_CAN1_TX_IRQHandler + + PUBWEAK USB_LP_CAN1_RX0_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +USB_LP_CAN1_RX0_IRQHandler + B USB_LP_CAN1_RX0_IRQHandler + + PUBWEAK CAN1_RX1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +CAN1_RX1_IRQHandler + B CAN1_RX1_IRQHandler + + PUBWEAK CAN1_SCE_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +CAN1_SCE_IRQHandler + B CAN1_SCE_IRQHandler + + PUBWEAK EXTI9_5_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI9_5_IRQHandler + B EXTI9_5_IRQHandler + + PUBWEAK TIM1_BRK_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM1_BRK_IRQHandler + B TIM1_BRK_IRQHandler + + PUBWEAK TIM1_UP_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM1_UP_IRQHandler + B TIM1_UP_IRQHandler + + PUBWEAK TIM1_TRG_COM_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM1_TRG_COM_IRQHandler + B TIM1_TRG_COM_IRQHandler + + PUBWEAK TIM1_CC_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM1_CC_IRQHandler + B TIM1_CC_IRQHandler + + PUBWEAK TIM2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM2_IRQHandler + B TIM2_IRQHandler + + PUBWEAK TIM3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM3_IRQHandler + B TIM3_IRQHandler + + PUBWEAK TIM4_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM4_IRQHandler + B TIM4_IRQHandler + + PUBWEAK I2C1_EV_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +I2C1_EV_IRQHandler + B I2C1_EV_IRQHandler + + PUBWEAK I2C1_ER_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +I2C1_ER_IRQHandler + B I2C1_ER_IRQHandler + + PUBWEAK I2C2_EV_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +I2C2_EV_IRQHandler + B I2C2_EV_IRQHandler + + PUBWEAK I2C2_ER_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +I2C2_ER_IRQHandler + B I2C2_ER_IRQHandler + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + PUBWEAK USART1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +USART1_IRQHandler + B USART1_IRQHandler + + PUBWEAK USART2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +USART2_IRQHandler + B USART2_IRQHandler + + PUBWEAK USART3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +USART3_IRQHandler + B USART3_IRQHandler + + PUBWEAK EXTI15_10_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI15_10_IRQHandler + B EXTI15_10_IRQHandler + + PUBWEAK RTCAlarm_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +RTCAlarm_IRQHandler + B RTCAlarm_IRQHandler + + PUBWEAK USBWakeUp_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +USBWakeUp_IRQHandler + B USBWakeUp_IRQHandler + + PUBWEAK TIM8_BRK_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM8_BRK_IRQHandler + B TIM8_BRK_IRQHandler + + PUBWEAK TIM8_UP_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM8_UP_IRQHandler + B TIM8_UP_IRQHandler + + PUBWEAK TIM8_TRG_COM_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM8_TRG_COM_IRQHandler + B TIM8_TRG_COM_IRQHandler + + PUBWEAK TIM8_CC_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM8_CC_IRQHandler + B TIM8_CC_IRQHandler + + PUBWEAK ADC3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +ADC3_IRQHandler + B ADC3_IRQHandler + + PUBWEAK FSMC_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +FSMC_IRQHandler + B FSMC_IRQHandler + + PUBWEAK SDIO_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +SDIO_IRQHandler + B SDIO_IRQHandler + + PUBWEAK TIM5_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM5_IRQHandler + B TIM5_IRQHandler + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +UART4_IRQHandler + B UART4_IRQHandler + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +UART5_IRQHandler + B UART5_IRQHandler + + PUBWEAK TIM6_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM6_IRQHandler + B TIM6_IRQHandler + + PUBWEAK TIM7_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM7_IRQHandler + B TIM7_IRQHandler + + PUBWEAK DMA2_Channel1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA2_Channel1_IRQHandler + B DMA2_Channel1_IRQHandler + + PUBWEAK DMA2_Channel2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA2_Channel2_IRQHandler + B DMA2_Channel2_IRQHandler + + PUBWEAK DMA2_Channel3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA2_Channel3_IRQHandler + B DMA2_Channel3_IRQHandler + + PUBWEAK DMA2_Channel4_5_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA2_Channel4_5_IRQHandler + B DMA2_Channel4_5_IRQHandler + + + END + diff --git a/boot_source/platform/CMSIS/ST/STM32F10x/Source/iar/startup_stm32f10x_hd_vl.s b/boot_source/platform/CMSIS/ST/STM32F10x/Source/iar/startup_stm32f10x_hd_vl.s new file mode 100644 index 0000000..0b501d5 --- /dev/null +++ b/boot_source/platform/CMSIS/ST/STM32F10x/Source/iar/startup_stm32f10x_hd_vl.s @@ -0,0 +1,462 @@ +;******************** (C) COPYRIGHT 2011 STMicroelectronics ******************** +;* File Name : startup_stm32f10x_hd_vl.s +;* Author : MCD Application Team +;* Version : V3.5.1 +;* Date : 08-September-2021 +;* Description : STM32F10x High Density Value Line Devices vector table +;* for EWARM toolchain. +;* This module performs: +;* - Set the initial SP +;* - Configure the clock system and the external SRAM +;* mounted on STM32100E-EVAL board to be used as data +;* memory (optional, to be enabled by user) +;* - Set the initial PC == __iar_program_start, +;* - Set the vector table entries with the exceptions ISR +;* address. +;* After Reset the Cortex-M3 processor is in Thread mode, +;* priority is Privileged, and the Stack is set to Main. +;******************************************************************************** +;* +;* Copyright (c) 2011 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. +; +;******************************************************************************* +; +; +; The modules in this file are included in the libraries, and may be replaced +; by any user-defined modules that define the PUBLIC symbol _program_start or +; a user defined start symbol. +; To override the cstartup defined in the library, simply add your modified +; version to the workbench project. +; +; The vector table is normally located at address 0. +; When debugging in RAM, it can be located in RAM, aligned to at least 2^6. +; The name "__vector_table" has special meaning for C-SPY: +; it is where the SP start value is found, and the NVIC vector +; table register (VTOR) is initialized to this address if != 0. +; +; Cortex-M version +; + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + EXTERN SystemInit + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD MemManage_Handler ; MPU Fault Handler + DCD BusFault_Handler ; Bus Fault Handler + DCD UsageFault_Handler ; Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD DebugMon_Handler ; Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD WWDG_IRQHandler ; Window Watchdog + DCD PVD_IRQHandler ; PVD through EXTI Line detect + DCD TAMPER_IRQHandler ; Tamper + DCD RTC_IRQHandler ; RTC + DCD FLASH_IRQHandler ; Flash + DCD RCC_IRQHandler ; RCC + DCD EXTI0_IRQHandler ; EXTI Line 0 + DCD EXTI1_IRQHandler ; EXTI Line 1 + DCD EXTI2_IRQHandler ; EXTI Line 2 + DCD EXTI3_IRQHandler ; EXTI Line 3 + DCD EXTI4_IRQHandler ; EXTI Line 4 + DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1 + DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2 + DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3 + DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4 + DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5 + DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6 + DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7 + DCD ADC1_IRQHandler ; ADC1 + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD EXTI9_5_IRQHandler ; EXTI Line 9..5 + DCD TIM1_BRK_TIM15_IRQHandler ; TIM1 Break and TIM15 + DCD TIM1_UP_TIM16_IRQHandler ; TIM1 Update and TIM16 + DCD TIM1_TRG_COM_TIM17_IRQHandler ; TIM1 Trigger and Commutation and TIM17 + DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare + DCD TIM2_IRQHandler ; TIM2 + DCD TIM3_IRQHandler ; TIM3 + DCD TIM4_IRQHandler ; TIM4 + DCD I2C1_EV_IRQHandler ; I2C1 Event + DCD I2C1_ER_IRQHandler ; I2C1 Error + DCD I2C2_EV_IRQHandler ; I2C2 Event + DCD I2C2_ER_IRQHandler ; I2C2 Error + DCD SPI1_IRQHandler ; SPI1 + DCD SPI2_IRQHandler ; SPI2 + DCD USART1_IRQHandler ; USART1 + DCD USART2_IRQHandler ; USART2 + DCD USART3_IRQHandler ; USART3 + DCD EXTI15_10_IRQHandler ; EXTI Line 15..10 + DCD RTCAlarm_IRQHandler ; RTC Alarm through EXTI Line + DCD CEC_IRQHandler ; HDMI-CEC + DCD TIM12_IRQHandler ; TIM12 + DCD TIM13_IRQHandler ; TIM13 + DCD TIM14_IRQHandler ; TIM14 + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD TIM5_IRQHandler ; TIM5 + DCD SPI3_IRQHandler ; SPI3 + DCD UART4_IRQHandler ; UART4 + DCD UART5_IRQHandler ; UART5 + DCD TIM6_DAC_IRQHandler ; TIM6 and DAC underrun + DCD TIM7_IRQHandler ; TIM7 + DCD DMA2_Channel1_IRQHandler ; DMA2 Channel1 + DCD DMA2_Channel2_IRQHandler ; DMA2 Channel2 + DCD DMA2_Channel3_IRQHandler ; DMA2 Channel3 + DCD DMA2_Channel4_5_IRQHandler ; DMA2 Channel4 & Channel5 + DCD DMA2_Channel5_IRQHandler ; DMA2 Channel5 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + SECTION .text:CODE:REORDER:NOROOT(2) +Reset_Handler + LDR R0, =SystemInit + BLX R0 + LDR R0, =__iar_program_start + BX R0 + + PUBWEAK NMI_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +NMI_Handler + B NMI_Handler + + PUBWEAK HardFault_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +HardFault_Handler + B HardFault_Handler + + PUBWEAK MemManage_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +MemManage_Handler + B MemManage_Handler + + PUBWEAK BusFault_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +BusFault_Handler + B BusFault_Handler + + PUBWEAK UsageFault_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +UsageFault_Handler + B UsageFault_Handler + + PUBWEAK SVC_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +SVC_Handler + B SVC_Handler + + PUBWEAK DebugMon_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +DebugMon_Handler + B DebugMon_Handler + + PUBWEAK PendSV_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +PendSV_Handler + B PendSV_Handler + + PUBWEAK SysTick_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +SysTick_Handler + B SysTick_Handler + + PUBWEAK WWDG_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +WWDG_IRQHandler + B WWDG_IRQHandler + + PUBWEAK PVD_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +PVD_IRQHandler + B PVD_IRQHandler + + PUBWEAK TAMPER_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TAMPER_IRQHandler + B TAMPER_IRQHandler + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +RTC_IRQHandler + B RTC_IRQHandler + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + PUBWEAK RCC_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +RCC_IRQHandler + B RCC_IRQHandler + + PUBWEAK EXTI0_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI0_IRQHandler + B EXTI0_IRQHandler + + PUBWEAK EXTI1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI1_IRQHandler + B EXTI1_IRQHandler + + PUBWEAK EXTI2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI2_IRQHandler + B EXTI2_IRQHandler + + PUBWEAK EXTI3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI3_IRQHandler + B EXTI3_IRQHandler + + PUBWEAK EXTI4_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI4_IRQHandler + B EXTI4_IRQHandler + + PUBWEAK DMA1_Channel1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel1_IRQHandler + B DMA1_Channel1_IRQHandler + + PUBWEAK DMA1_Channel2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel2_IRQHandler + B DMA1_Channel2_IRQHandler + + PUBWEAK DMA1_Channel3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel3_IRQHandler + B DMA1_Channel3_IRQHandler + + PUBWEAK DMA1_Channel4_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel4_IRQHandler + B DMA1_Channel4_IRQHandler + + PUBWEAK DMA1_Channel5_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel5_IRQHandler + B DMA1_Channel5_IRQHandler + + PUBWEAK DMA1_Channel6_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel6_IRQHandler + B DMA1_Channel6_IRQHandler + + PUBWEAK DMA1_Channel7_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel7_IRQHandler + B DMA1_Channel7_IRQHandler + + PUBWEAK ADC1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +ADC1_IRQHandler + B ADC1_IRQHandler + + PUBWEAK EXTI9_5_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI9_5_IRQHandler + B EXTI9_5_IRQHandler + + PUBWEAK TIM1_BRK_TIM15_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM1_BRK_TIM15_IRQHandler + B TIM1_BRK_TIM15_IRQHandler + + PUBWEAK TIM1_UP_TIM16_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM1_UP_TIM16_IRQHandler + B TIM1_UP_TIM16_IRQHandler + + PUBWEAK TIM1_TRG_COM_TIM17_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM1_TRG_COM_TIM17_IRQHandler + B TIM1_TRG_COM_TIM17_IRQHandler + + PUBWEAK TIM1_CC_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM1_CC_IRQHandler + B TIM1_CC_IRQHandler + + PUBWEAK TIM2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM2_IRQHandler + B TIM2_IRQHandler + + PUBWEAK TIM3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM3_IRQHandler + B TIM3_IRQHandler + + PUBWEAK TIM4_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM4_IRQHandler + B TIM4_IRQHandler + + PUBWEAK I2C1_EV_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +I2C1_EV_IRQHandler + B I2C1_EV_IRQHandler + + PUBWEAK I2C1_ER_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +I2C1_ER_IRQHandler + B I2C1_ER_IRQHandler + + PUBWEAK I2C2_EV_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +I2C2_EV_IRQHandler + B I2C2_EV_IRQHandler + + PUBWEAK I2C2_ER_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +I2C2_ER_IRQHandler + B I2C2_ER_IRQHandler + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + PUBWEAK USART1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +USART1_IRQHandler + B USART1_IRQHandler + + PUBWEAK USART2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +USART2_IRQHandler + B USART2_IRQHandler + + PUBWEAK USART3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +USART3_IRQHandler + B USART3_IRQHandler + + PUBWEAK EXTI15_10_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI15_10_IRQHandler + B EXTI15_10_IRQHandler + + PUBWEAK RTCAlarm_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +RTCAlarm_IRQHandler + B RTCAlarm_IRQHandler + + PUBWEAK CEC_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +CEC_IRQHandler + B CEC_IRQHandler + + PUBWEAK TIM12_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM12_IRQHandler + B TIM12_IRQHandler + + PUBWEAK TIM13_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM13_IRQHandler + B TIM13_IRQHandler + + PUBWEAK TIM14_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM14_IRQHandler + B TIM14_IRQHandler + + PUBWEAK TIM5_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM5_IRQHandler + B TIM5_IRQHandler + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +UART4_IRQHandler + B UART4_IRQHandler + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +UART5_IRQHandler + B UART5_IRQHandler + + PUBWEAK TIM6_DAC_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM6_DAC_IRQHandler + B TIM6_DAC_IRQHandler + + PUBWEAK TIM7_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM7_IRQHandler + B TIM7_IRQHandler + + PUBWEAK DMA2_Channel1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA2_Channel1_IRQHandler + B DMA2_Channel1_IRQHandler + + PUBWEAK DMA2_Channel2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA2_Channel2_IRQHandler + B DMA2_Channel2_IRQHandler + + PUBWEAK DMA2_Channel3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA2_Channel3_IRQHandler + B DMA2_Channel3_IRQHandler + + PUBWEAK DMA2_Channel4_5_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA2_Channel4_5_IRQHandler + B DMA2_Channel4_5_IRQHandler + + PUBWEAK DMA2_Channel5_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA2_Channel5_IRQHandler + B DMA2_Channel5_IRQHandler + + END diff --git a/boot_source/platform/CMSIS/ST/STM32F10x/Source/iar/startup_stm32f10x_ld.s b/boot_source/platform/CMSIS/ST/STM32F10x/Source/iar/startup_stm32f10x_ld.s new file mode 100644 index 0000000..1d60ab6 --- /dev/null +++ b/boot_source/platform/CMSIS/ST/STM32F10x/Source/iar/startup_stm32f10x_ld.s @@ -0,0 +1,367 @@ +;******************** (C) COPYRIGHT 2011 STMicroelectronics ******************** +;* File Name : startup_stm32f10x_ld.s +;* Author : MCD Application Team +;* Version : V3.5.1 +;* Date : 08-September-2021 +;* Description : STM32F10x Low Density Devices vector table for EWARM +;* toolchain. +;* This module performs: +;* - Set the initial SP +;* - Configure the clock system +;* - Set the initial PC == __iar_program_start, +;* - Set the vector table entries with the exceptions ISR +;* address. +;* After Reset the Cortex-M3 processor is in Thread mode, +;* priority is Privileged, and the Stack is set to Main. +;******************************************************************************** +;* +;* Copyright (c) 2011 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. +; +;******************************************************************************* +; +; +; The modules in this file are included in the libraries, and may be replaced +; by any user-defined modules that define the PUBLIC symbol _program_start or +; a user defined start symbol. +; To override the cstartup defined in the library, simply add your modified +; version to the workbench project. +; +; The vector table is normally located at address 0. +; When debugging in RAM, it can be located in RAM, aligned to at least 2^6. +; The name "__vector_table" has special meaning for C-SPY: +; it is where the SP start value is found, and the NVIC vector +; table register (VTOR) is initialized to this address if != 0. +; +; Cortex-M version +; + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + EXTERN SystemInit + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD MemManage_Handler ; MPU Fault Handler + DCD BusFault_Handler ; Bus Fault Handler + DCD UsageFault_Handler ; Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD DebugMon_Handler ; Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD WWDG_IRQHandler ; Window Watchdog + DCD PVD_IRQHandler ; PVD through EXTI Line detect + DCD TAMPER_IRQHandler ; Tamper + DCD RTC_IRQHandler ; RTC + DCD FLASH_IRQHandler ; Flash + DCD RCC_IRQHandler ; RCC + DCD EXTI0_IRQHandler ; EXTI Line 0 + DCD EXTI1_IRQHandler ; EXTI Line 1 + DCD EXTI2_IRQHandler ; EXTI Line 2 + DCD EXTI3_IRQHandler ; EXTI Line 3 + DCD EXTI4_IRQHandler ; EXTI Line 4 + DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1 + DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2 + DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3 + DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4 + DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5 + DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6 + DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7 + DCD ADC1_2_IRQHandler ; ADC1 & ADC2 + DCD USB_HP_CAN1_TX_IRQHandler ; USB High Priority or CAN1 TX + DCD USB_LP_CAN1_RX0_IRQHandler ; USB Low Priority or CAN1 RX0 + DCD CAN1_RX1_IRQHandler ; CAN1 RX1 + DCD CAN1_SCE_IRQHandler ; CAN1 SCE + DCD EXTI9_5_IRQHandler ; EXTI Line 9..5 + DCD TIM1_BRK_IRQHandler ; TIM1 Break + DCD TIM1_UP_IRQHandler ; TIM1 Update + DCD TIM1_TRG_COM_IRQHandler ; TIM1 Trigger and Commutation + DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare + DCD TIM2_IRQHandler ; TIM2 + DCD TIM3_IRQHandler ; TIM3 + DCD 0 ; Reserved + DCD I2C1_EV_IRQHandler ; I2C1 Event + DCD I2C1_ER_IRQHandler ; I2C1 Error + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SPI1_IRQHandler ; SPI1 + DCD 0 ; Reserved + DCD USART1_IRQHandler ; USART1 + DCD USART2_IRQHandler ; USART2 + DCD 0 ; Reserved + DCD EXTI15_10_IRQHandler ; EXTI Line 15..10 + DCD RTCAlarm_IRQHandler ; RTC Alarm through EXTI Line + DCD USBWakeUp_IRQHandler ; USB Wakeup from suspend + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + SECTION .text:CODE:REORDER:NOROOT(2) +Reset_Handler + LDR R0, =SystemInit + BLX R0 + LDR R0, =__iar_program_start + BX R0 + + PUBWEAK NMI_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +NMI_Handler + B NMI_Handler + + PUBWEAK HardFault_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +HardFault_Handler + B HardFault_Handler + + PUBWEAK MemManage_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +MemManage_Handler + B MemManage_Handler + + PUBWEAK BusFault_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +BusFault_Handler + B BusFault_Handler + + PUBWEAK UsageFault_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +UsageFault_Handler + B UsageFault_Handler + + PUBWEAK SVC_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +SVC_Handler + B SVC_Handler + + PUBWEAK DebugMon_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +DebugMon_Handler + B DebugMon_Handler + + PUBWEAK PendSV_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +PendSV_Handler + B PendSV_Handler + + PUBWEAK SysTick_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +SysTick_Handler + B SysTick_Handler + + PUBWEAK WWDG_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +WWDG_IRQHandler + B WWDG_IRQHandler + + PUBWEAK PVD_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +PVD_IRQHandler + B PVD_IRQHandler + + PUBWEAK TAMPER_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TAMPER_IRQHandler + B TAMPER_IRQHandler + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +RTC_IRQHandler + B RTC_IRQHandler + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + PUBWEAK RCC_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +RCC_IRQHandler + B RCC_IRQHandler + + PUBWEAK EXTI0_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI0_IRQHandler + B EXTI0_IRQHandler + + PUBWEAK EXTI1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI1_IRQHandler + B EXTI1_IRQHandler + + PUBWEAK EXTI2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI2_IRQHandler + B EXTI2_IRQHandler + + PUBWEAK EXTI3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI3_IRQHandler + B EXTI3_IRQHandler + + PUBWEAK EXTI4_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI4_IRQHandler + B EXTI4_IRQHandler + + PUBWEAK DMA1_Channel1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel1_IRQHandler + B DMA1_Channel1_IRQHandler + + PUBWEAK DMA1_Channel2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel2_IRQHandler + B DMA1_Channel2_IRQHandler + + PUBWEAK DMA1_Channel3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel3_IRQHandler + B DMA1_Channel3_IRQHandler + + PUBWEAK DMA1_Channel4_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel4_IRQHandler + B DMA1_Channel4_IRQHandler + + PUBWEAK DMA1_Channel5_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel5_IRQHandler + B DMA1_Channel5_IRQHandler + + PUBWEAK DMA1_Channel6_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel6_IRQHandler + B DMA1_Channel6_IRQHandler + + PUBWEAK DMA1_Channel7_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel7_IRQHandler + B DMA1_Channel7_IRQHandler + + PUBWEAK ADC1_2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +ADC1_2_IRQHandler + B ADC1_2_IRQHandler + + PUBWEAK USB_HP_CAN1_TX_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +USB_HP_CAN1_TX_IRQHandler + B USB_HP_CAN1_TX_IRQHandler + + PUBWEAK USB_LP_CAN1_RX0_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +USB_LP_CAN1_RX0_IRQHandler + B USB_LP_CAN1_RX0_IRQHandler + + PUBWEAK CAN1_RX1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +CAN1_RX1_IRQHandler + B CAN1_RX1_IRQHandler + + PUBWEAK CAN1_SCE_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +CAN1_SCE_IRQHandler + B CAN1_SCE_IRQHandler + + PUBWEAK EXTI9_5_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI9_5_IRQHandler + B EXTI9_5_IRQHandler + + PUBWEAK TIM1_BRK_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM1_BRK_IRQHandler + B TIM1_BRK_IRQHandler + + PUBWEAK TIM1_UP_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM1_UP_IRQHandler + B TIM1_UP_IRQHandler + + PUBWEAK TIM1_TRG_COM_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM1_TRG_COM_IRQHandler + B TIM1_TRG_COM_IRQHandler + + PUBWEAK TIM1_CC_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM1_CC_IRQHandler + B TIM1_CC_IRQHandler + + PUBWEAK TIM2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM2_IRQHandler + B TIM2_IRQHandler + + PUBWEAK TIM3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM3_IRQHandler + B TIM3_IRQHandler + + PUBWEAK I2C1_EV_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +I2C1_EV_IRQHandler + B I2C1_EV_IRQHandler + + PUBWEAK I2C1_ER_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +I2C1_ER_IRQHandler + B I2C1_ER_IRQHandler + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + PUBWEAK USART1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +USART1_IRQHandler + B USART1_IRQHandler + + PUBWEAK USART2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +USART2_IRQHandler + B USART2_IRQHandler + + PUBWEAK EXTI15_10_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI15_10_IRQHandler + B EXTI15_10_IRQHandler + + PUBWEAK RTCAlarm_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +RTCAlarm_IRQHandler + B RTCAlarm_IRQHandler + + PUBWEAK USBWakeUp_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +USBWakeUp_IRQHandler + B USBWakeUp_IRQHandler + + END diff --git a/boot_source/platform/CMSIS/ST/STM32F10x/Source/iar/startup_stm32f10x_ld_vl.s b/boot_source/platform/CMSIS/ST/STM32F10x/Source/iar/startup_stm32f10x_ld_vl.s new file mode 100644 index 0000000..9f07cd6 --- /dev/null +++ b/boot_source/platform/CMSIS/ST/STM32F10x/Source/iar/startup_stm32f10x_ld_vl.s @@ -0,0 +1,370 @@ +;******************** (C) COPYRIGHT 2011 STMicroelectronics ******************** +;* File Name : startup_stm32f10x_ld_vl.s +;* Author : MCD Application Team +;* Version : V3.5.1 +;* Date : 08-September-2021 +;* Description : STM32F10x Low Density Value Line Devices vector table +;* for EWARM toolchain. +;* This module performs: +;* - Set the initial SP +;* - Configure the clock system +;* - Set the initial PC == __iar_program_start, +;* - Set the vector table entries with the exceptions ISR +;* address. +;* After Reset the Cortex-M3 processor is in Thread mode, +;* priority is Privileged, and the Stack is set to Main. +;******************************************************************************** +;* +;* Copyright (c) 2011 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. +; +;******************************************************************************* +; +; +; The modules in this file are included in the libraries, and may be replaced +; by any user-defined modules that define the PUBLIC symbol _program_start or +; a user defined start symbol. +; To override the cstartup defined in the library, simply add your modified +; version to the workbench project. +; +; The vector table is normally located at address 0. +; When debugging in RAM, it can be located in RAM, aligned to at least 2^6. +; The name "__vector_table" has special meaning for C-SPY: +; it is where the SP start value is found, and the NVIC vector +; table register (VTOR) is initialized to this address if != 0. +; +; Cortex-M version +; + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + EXTERN SystemInit + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD MemManage_Handler ; MPU Fault Handler + DCD BusFault_Handler ; Bus Fault Handler + DCD UsageFault_Handler ; Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD DebugMon_Handler ; Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD WWDG_IRQHandler ; Window Watchdog + DCD PVD_IRQHandler ; PVD through EXTI Line detect + DCD TAMPER_IRQHandler ; Tamper + DCD RTC_IRQHandler ; RTC + DCD FLASH_IRQHandler ; Flash + DCD RCC_IRQHandler ; RCC + DCD EXTI0_IRQHandler ; EXTI Line 0 + DCD EXTI1_IRQHandler ; EXTI Line 1 + DCD EXTI2_IRQHandler ; EXTI Line 2 + DCD EXTI3_IRQHandler ; EXTI Line 3 + DCD EXTI4_IRQHandler ; EXTI Line 4 + DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1 + DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2 + DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3 + DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4 + DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5 + DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6 + DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7 + DCD ADC1_IRQHandler ; ADC1 + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD EXTI9_5_IRQHandler ; EXTI Line 9..5 + DCD TIM1_BRK_TIM15_IRQHandler ; TIM1 Break and TIM15 + DCD TIM1_UP_TIM16_IRQHandler ; TIM1 Update and TIM16 + DCD TIM1_TRG_COM_TIM17_IRQHandler ; TIM1 Trigger and Commutation and TIM17 + DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare + DCD TIM2_IRQHandler ; TIM2 + DCD TIM3_IRQHandler ; TIM3 + DCD 0 ; Reserved + DCD I2C1_EV_IRQHandler ; I2C1 Event + DCD I2C1_ER_IRQHandler ; I2C1 Error + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SPI1_IRQHandler ; SPI1 + DCD 0 ; Reserved + DCD USART1_IRQHandler ; USART1 + DCD USART2_IRQHandler ; USART2 + DCD 0 ; Reserved + DCD EXTI15_10_IRQHandler ; EXTI Line 15..10 + DCD RTCAlarm_IRQHandler ; RTC Alarm through EXTI Line + DCD CEC_IRQHandler ; HDMI-CEC + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD TIM6_DAC_IRQHandler ; TIM6 and DAC underrun + DCD TIM7_IRQHandler ; TIM7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + SECTION .text:CODE:REORDER:NOROOT(2) +Reset_Handler + LDR R0, =SystemInit + BLX R0 + LDR R0, =__iar_program_start + BX R0 + + PUBWEAK NMI_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +NMI_Handler + B NMI_Handler + + PUBWEAK HardFault_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +HardFault_Handler + B HardFault_Handler + + PUBWEAK MemManage_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +MemManage_Handler + B MemManage_Handler + + PUBWEAK BusFault_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +BusFault_Handler + B BusFault_Handler + + PUBWEAK UsageFault_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +UsageFault_Handler + B UsageFault_Handler + + PUBWEAK SVC_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +SVC_Handler + B SVC_Handler + + PUBWEAK DebugMon_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +DebugMon_Handler + B DebugMon_Handler + + PUBWEAK PendSV_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +PendSV_Handler + B PendSV_Handler + + PUBWEAK SysTick_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +SysTick_Handler + B SysTick_Handler + + PUBWEAK WWDG_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +WWDG_IRQHandler + B WWDG_IRQHandler + + PUBWEAK PVD_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +PVD_IRQHandler + B PVD_IRQHandler + + PUBWEAK TAMPER_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TAMPER_IRQHandler + B TAMPER_IRQHandler + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +RTC_IRQHandler + B RTC_IRQHandler + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + PUBWEAK RCC_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +RCC_IRQHandler + B RCC_IRQHandler + + PUBWEAK EXTI0_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI0_IRQHandler + B EXTI0_IRQHandler + + PUBWEAK EXTI1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI1_IRQHandler + B EXTI1_IRQHandler + + PUBWEAK EXTI2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI2_IRQHandler + B EXTI2_IRQHandler + + PUBWEAK EXTI3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI3_IRQHandler + B EXTI3_IRQHandler + + PUBWEAK EXTI4_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI4_IRQHandler + B EXTI4_IRQHandler + + PUBWEAK DMA1_Channel1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel1_IRQHandler + B DMA1_Channel1_IRQHandler + + PUBWEAK DMA1_Channel2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel2_IRQHandler + B DMA1_Channel2_IRQHandler + + PUBWEAK DMA1_Channel3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel3_IRQHandler + B DMA1_Channel3_IRQHandler + + PUBWEAK DMA1_Channel4_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel4_IRQHandler + B DMA1_Channel4_IRQHandler + + PUBWEAK DMA1_Channel5_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel5_IRQHandler + B DMA1_Channel5_IRQHandler + + PUBWEAK DMA1_Channel6_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel6_IRQHandler + B DMA1_Channel6_IRQHandler + + PUBWEAK DMA1_Channel7_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel7_IRQHandler + B DMA1_Channel7_IRQHandler + + PUBWEAK ADC1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +ADC1_IRQHandler + B ADC1_IRQHandler + + PUBWEAK EXTI9_5_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI9_5_IRQHandler + B EXTI9_5_IRQHandler + + PUBWEAK TIM1_BRK_TIM15_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM1_BRK_TIM15_IRQHandler + B TIM1_BRK_TIM15_IRQHandler + + PUBWEAK TIM1_UP_TIM16_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM1_UP_TIM16_IRQHandler + B TIM1_UP_TIM16_IRQHandler + + PUBWEAK TIM1_TRG_COM_TIM17_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM1_TRG_COM_TIM17_IRQHandler + B TIM1_TRG_COM_TIM17_IRQHandler + + PUBWEAK TIM1_CC_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM1_CC_IRQHandler + B TIM1_CC_IRQHandler + + PUBWEAK TIM2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM2_IRQHandler + B TIM2_IRQHandler + + PUBWEAK TIM3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM3_IRQHandler + B TIM3_IRQHandler + + PUBWEAK I2C1_EV_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +I2C1_EV_IRQHandler + B I2C1_EV_IRQHandler + + PUBWEAK I2C1_ER_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +I2C1_ER_IRQHandler + B I2C1_ER_IRQHandler + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + PUBWEAK USART1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +USART1_IRQHandler + B USART1_IRQHandler + + PUBWEAK USART2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +USART2_IRQHandler + B USART2_IRQHandler + + PUBWEAK EXTI15_10_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI15_10_IRQHandler + B EXTI15_10_IRQHandler + + PUBWEAK RTCAlarm_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +RTCAlarm_IRQHandler + B RTCAlarm_IRQHandler + + PUBWEAK CEC_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +CEC_IRQHandler + B CEC_IRQHandler + + PUBWEAK TIM6_DAC_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM6_DAC_IRQHandler + B TIM6_DAC_IRQHandler + + PUBWEAK TIM7_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM7_IRQHandler + B TIM7_IRQHandler + + END diff --git a/boot_source/platform/CMSIS/ST/STM32F10x/Source/iar/startup_stm32f10x_md.s b/boot_source/platform/CMSIS/ST/STM32F10x/Source/iar/startup_stm32f10x_md.s new file mode 100644 index 0000000..db04c39 --- /dev/null +++ b/boot_source/platform/CMSIS/ST/STM32F10x/Source/iar/startup_stm32f10x_md.s @@ -0,0 +1,392 @@ +;******************** (C) COPYRIGHT 2011 STMicroelectronics ******************** +;* File Name : startup_stm32f10x_md.s +;* Author : MCD Application Team +;* Version : V3.5.1 +;* Date : 08-September-2021 +;* Description : STM32F10x Medium Density Devices vector table for +;* EWARM toolchain. +;* This module performs: +;* - Set the initial SP +;* - Configure the clock system +;* - Set the initial PC == __iar_program_start, +;* - Set the vector table entries with the exceptions ISR +;* address. +;* After Reset the Cortex-M3 processor is in Thread mode, +;* priority is Privileged, and the Stack is set to Main. +;******************************************************************************** +;* +;* Copyright (c) 2011 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. +; +;******************************************************************************* +; +; +; The modules in this file are included in the libraries, and may be replaced +; by any user-defined modules that define the PUBLIC symbol _program_start or +; a user defined start symbol. +; To override the cstartup defined in the library, simply add your modified +; version to the workbench project. +; +; The vector table is normally located at address 0. +; When debugging in RAM, it can be located in RAM, aligned to at least 2^6. +; The name "__vector_table" has special meaning for C-SPY: +; it is where the SP start value is found, and the NVIC vector +; table register (VTOR) is initialized to this address if != 0. +; +; Cortex-M version +; + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + EXTERN SystemInit + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD MemManage_Handler ; MPU Fault Handler + DCD BusFault_Handler ; Bus Fault Handler + DCD UsageFault_Handler ; Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD DebugMon_Handler ; Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD WWDG_IRQHandler ; Window Watchdog + DCD PVD_IRQHandler ; PVD through EXTI Line detect + DCD TAMPER_IRQHandler ; Tamper + DCD RTC_IRQHandler ; RTC + DCD FLASH_IRQHandler ; Flash + DCD RCC_IRQHandler ; RCC + DCD EXTI0_IRQHandler ; EXTI Line 0 + DCD EXTI1_IRQHandler ; EXTI Line 1 + DCD EXTI2_IRQHandler ; EXTI Line 2 + DCD EXTI3_IRQHandler ; EXTI Line 3 + DCD EXTI4_IRQHandler ; EXTI Line 4 + DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1 + DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2 + DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3 + DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4 + DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5 + DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6 + DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7 + DCD ADC1_2_IRQHandler ; ADC1 & ADC2 + DCD USB_HP_CAN1_TX_IRQHandler ; USB High Priority or CAN1 TX + DCD USB_LP_CAN1_RX0_IRQHandler ; USB Low Priority or CAN1 RX0 + DCD CAN1_RX1_IRQHandler ; CAN1 RX1 + DCD CAN1_SCE_IRQHandler ; CAN1 SCE + DCD EXTI9_5_IRQHandler ; EXTI Line 9..5 + DCD TIM1_BRK_IRQHandler ; TIM1 Break + DCD TIM1_UP_IRQHandler ; TIM1 Update + DCD TIM1_TRG_COM_IRQHandler ; TIM1 Trigger and Commutation + DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare + DCD TIM2_IRQHandler ; TIM2 + DCD TIM3_IRQHandler ; TIM3 + DCD TIM4_IRQHandler ; TIM4 + DCD I2C1_EV_IRQHandler ; I2C1 Event + DCD I2C1_ER_IRQHandler ; I2C1 Error + DCD I2C2_EV_IRQHandler ; I2C2 Event + DCD I2C2_ER_IRQHandler ; I2C2 Error + DCD SPI1_IRQHandler ; SPI1 + DCD SPI2_IRQHandler ; SPI2 + DCD USART1_IRQHandler ; USART1 + DCD USART2_IRQHandler ; USART2 + DCD USART3_IRQHandler ; USART3 + DCD EXTI15_10_IRQHandler ; EXTI Line 15..10 + DCD RTCAlarm_IRQHandler ; RTC Alarm through EXTI Line + DCD USBWakeUp_IRQHandler ; USB Wakeup from suspend + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + SECTION .text:CODE:REORDER:NOROOT(2) +Reset_Handler + LDR R0, =SystemInit + BLX R0 + LDR R0, =__iar_program_start + BX R0 + + PUBWEAK NMI_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +NMI_Handler + B NMI_Handler + + PUBWEAK HardFault_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +HardFault_Handler + B HardFault_Handler + + PUBWEAK MemManage_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +MemManage_Handler + B MemManage_Handler + + PUBWEAK BusFault_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +BusFault_Handler + B BusFault_Handler + + PUBWEAK UsageFault_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +UsageFault_Handler + B UsageFault_Handler + + PUBWEAK SVC_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +SVC_Handler + B SVC_Handler + + PUBWEAK DebugMon_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +DebugMon_Handler + B DebugMon_Handler + + PUBWEAK PendSV_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +PendSV_Handler + B PendSV_Handler + + PUBWEAK SysTick_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +SysTick_Handler + B SysTick_Handler + + PUBWEAK WWDG_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +WWDG_IRQHandler + B WWDG_IRQHandler + + PUBWEAK PVD_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +PVD_IRQHandler + B PVD_IRQHandler + + PUBWEAK TAMPER_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TAMPER_IRQHandler + B TAMPER_IRQHandler + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +RTC_IRQHandler + B RTC_IRQHandler + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + PUBWEAK RCC_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +RCC_IRQHandler + B RCC_IRQHandler + + PUBWEAK EXTI0_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI0_IRQHandler + B EXTI0_IRQHandler + + PUBWEAK EXTI1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI1_IRQHandler + B EXTI1_IRQHandler + + PUBWEAK EXTI2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI2_IRQHandler + B EXTI2_IRQHandler + + PUBWEAK EXTI3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI3_IRQHandler + B EXTI3_IRQHandler + + PUBWEAK EXTI4_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI4_IRQHandler + B EXTI4_IRQHandler + + PUBWEAK DMA1_Channel1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel1_IRQHandler + B DMA1_Channel1_IRQHandler + + PUBWEAK DMA1_Channel2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel2_IRQHandler + B DMA1_Channel2_IRQHandler + + PUBWEAK DMA1_Channel3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel3_IRQHandler + B DMA1_Channel3_IRQHandler + + PUBWEAK DMA1_Channel4_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel4_IRQHandler + B DMA1_Channel4_IRQHandler + + PUBWEAK DMA1_Channel5_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel5_IRQHandler + B DMA1_Channel5_IRQHandler + + PUBWEAK DMA1_Channel6_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel6_IRQHandler + B DMA1_Channel6_IRQHandler + + PUBWEAK DMA1_Channel7_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel7_IRQHandler + B DMA1_Channel7_IRQHandler + + PUBWEAK ADC1_2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +ADC1_2_IRQHandler + B ADC1_2_IRQHandler + + PUBWEAK USB_HP_CAN1_TX_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +USB_HP_CAN1_TX_IRQHandler + B USB_HP_CAN1_TX_IRQHandler + + PUBWEAK USB_LP_CAN1_RX0_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +USB_LP_CAN1_RX0_IRQHandler + B USB_LP_CAN1_RX0_IRQHandler + + PUBWEAK CAN1_RX1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +CAN1_RX1_IRQHandler + B CAN1_RX1_IRQHandler + + PUBWEAK CAN1_SCE_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +CAN1_SCE_IRQHandler + B CAN1_SCE_IRQHandler + + PUBWEAK EXTI9_5_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI9_5_IRQHandler + B EXTI9_5_IRQHandler + + PUBWEAK TIM1_BRK_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM1_BRK_IRQHandler + B TIM1_BRK_IRQHandler + + PUBWEAK TIM1_UP_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM1_UP_IRQHandler + B TIM1_UP_IRQHandler + + PUBWEAK TIM1_TRG_COM_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM1_TRG_COM_IRQHandler + B TIM1_TRG_COM_IRQHandler + + PUBWEAK TIM1_CC_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM1_CC_IRQHandler + B TIM1_CC_IRQHandler + + PUBWEAK TIM2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM2_IRQHandler + B TIM2_IRQHandler + + PUBWEAK TIM3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM3_IRQHandler + B TIM3_IRQHandler + + PUBWEAK TIM4_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM4_IRQHandler + B TIM4_IRQHandler + + PUBWEAK I2C1_EV_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +I2C1_EV_IRQHandler + B I2C1_EV_IRQHandler + + PUBWEAK I2C1_ER_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +I2C1_ER_IRQHandler + B I2C1_ER_IRQHandler + + PUBWEAK I2C2_EV_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +I2C2_EV_IRQHandler + B I2C2_EV_IRQHandler + + PUBWEAK I2C2_ER_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +I2C2_ER_IRQHandler + B I2C2_ER_IRQHandler + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + PUBWEAK USART1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +USART1_IRQHandler + B USART1_IRQHandler + + PUBWEAK USART2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +USART2_IRQHandler + B USART2_IRQHandler + + PUBWEAK USART3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +USART3_IRQHandler + B USART3_IRQHandler + + PUBWEAK EXTI15_10_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI15_10_IRQHandler + B EXTI15_10_IRQHandler + + PUBWEAK RTCAlarm_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +RTCAlarm_IRQHandler + B RTCAlarm_IRQHandler + + PUBWEAK USBWakeUp_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +USBWakeUp_IRQHandler + B USBWakeUp_IRQHandler + + END diff --git a/boot_source/platform/CMSIS/ST/STM32F10x/Source/iar/startup_stm32f10x_md_vl.s b/boot_source/platform/CMSIS/ST/STM32F10x/Source/iar/startup_stm32f10x_md_vl.s new file mode 100644 index 0000000..a8646a1 --- /dev/null +++ b/boot_source/platform/CMSIS/ST/STM32F10x/Source/iar/startup_stm32f10x_md_vl.s @@ -0,0 +1,395 @@ +;******************** (C) COPYRIGHT 2011 STMicroelectronics ******************** +;* File Name : startup_stm32f10x_md_vl.s +;* Author : MCD Application Team +;* Version : V3.5.1 +;* Date : 08-September-2021 +;* Description : STM32F10x Medium Density Value Line Devices vector table +;* for EWARM toolchain. +;* This module performs: +;* - Set the initial SP +;* - Configure the clock system +;* - Set the initial PC == __iar_program_start, +;* - Set the vector table entries with the exceptions ISR +;* address. +;* After Reset the Cortex-M3 processor is in Thread mode, +;* priority is Privileged, and the Stack is set to Main. +;******************************************************************************** +;* +;* Copyright (c) 2011 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. +; +;******************************************************************************* +; +; +; The modules in this file are included in the libraries, and may be replaced +; by any user-defined modules that define the PUBLIC symbol _program_start or +; a user defined start symbol. +; To override the cstartup defined in the library, simply add your modified +; version to the workbench project. +; +; The vector table is normally located at address 0. +; When debugging in RAM, it can be located in RAM, aligned to at least 2^6. +; The name "__vector_table" has special meaning for C-SPY: +; it is where the SP start value is found, and the NVIC vector +; table register (VTOR) is initialized to this address if != 0. +; +; Cortex-M version +; + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + EXTERN SystemInit + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD MemManage_Handler ; MPU Fault Handler + DCD BusFault_Handler ; Bus Fault Handler + DCD UsageFault_Handler ; Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD DebugMon_Handler ; Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD WWDG_IRQHandler ; Window Watchdog + DCD PVD_IRQHandler ; PVD through EXTI Line detect + DCD TAMPER_IRQHandler ; Tamper + DCD RTC_IRQHandler ; RTC + DCD FLASH_IRQHandler ; Flash + DCD RCC_IRQHandler ; RCC + DCD EXTI0_IRQHandler ; EXTI Line 0 + DCD EXTI1_IRQHandler ; EXTI Line 1 + DCD EXTI2_IRQHandler ; EXTI Line 2 + DCD EXTI3_IRQHandler ; EXTI Line 3 + DCD EXTI4_IRQHandler ; EXTI Line 4 + DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1 + DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2 + DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3 + DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4 + DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5 + DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6 + DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7 + DCD ADC1_IRQHandler ; ADC1 + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD EXTI9_5_IRQHandler ; EXTI Line 9..5 + DCD TIM1_BRK_TIM15_IRQHandler ; TIM1 Break and TIM15 + DCD TIM1_UP_TIM16_IRQHandler ; TIM1 Update and TIM16 + DCD TIM1_TRG_COM_TIM17_IRQHandler ; TIM1 Trigger and Commutation and TIM17 + DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare + DCD TIM2_IRQHandler ; TIM2 + DCD TIM3_IRQHandler ; TIM3 + DCD TIM4_IRQHandler ; TIM4 + DCD I2C1_EV_IRQHandler ; I2C1 Event + DCD I2C1_ER_IRQHandler ; I2C1 Error + DCD I2C2_EV_IRQHandler ; I2C2 Event + DCD I2C2_ER_IRQHandler ; I2C2 Error + DCD SPI1_IRQHandler ; SPI1 + DCD SPI2_IRQHandler ; SPI2 + DCD USART1_IRQHandler ; USART1 + DCD USART2_IRQHandler ; USART2 + DCD USART3_IRQHandler ; USART3 + DCD EXTI15_10_IRQHandler ; EXTI Line 15..10 + DCD RTCAlarm_IRQHandler ; RTC Alarm through EXTI Line + DCD CEC_IRQHandler ; HDMI-CEC + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD TIM6_DAC_IRQHandler ; TIM6 and DAC underrun + DCD TIM7_IRQHandler ; TIM7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + SECTION .text:CODE:REORDER:NOROOT(2) +Reset_Handler + LDR R0, =SystemInit + BLX R0 + LDR R0, =__iar_program_start + BX R0 + + PUBWEAK NMI_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +NMI_Handler + B NMI_Handler + + PUBWEAK HardFault_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +HardFault_Handler + B HardFault_Handler + + PUBWEAK MemManage_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +MemManage_Handler + B MemManage_Handler + + PUBWEAK BusFault_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +BusFault_Handler + B BusFault_Handler + + PUBWEAK UsageFault_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +UsageFault_Handler + B UsageFault_Handler + + PUBWEAK SVC_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +SVC_Handler + B SVC_Handler + + PUBWEAK DebugMon_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +DebugMon_Handler + B DebugMon_Handler + + PUBWEAK PendSV_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +PendSV_Handler + B PendSV_Handler + + PUBWEAK SysTick_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +SysTick_Handler + B SysTick_Handler + + PUBWEAK WWDG_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +WWDG_IRQHandler + B WWDG_IRQHandler + + PUBWEAK PVD_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +PVD_IRQHandler + B PVD_IRQHandler + + PUBWEAK TAMPER_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TAMPER_IRQHandler + B TAMPER_IRQHandler + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +RTC_IRQHandler + B RTC_IRQHandler + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + PUBWEAK RCC_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +RCC_IRQHandler + B RCC_IRQHandler + + PUBWEAK EXTI0_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI0_IRQHandler + B EXTI0_IRQHandler + + PUBWEAK EXTI1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI1_IRQHandler + B EXTI1_IRQHandler + + PUBWEAK EXTI2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI2_IRQHandler + B EXTI2_IRQHandler + + PUBWEAK EXTI3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI3_IRQHandler + B EXTI3_IRQHandler + + PUBWEAK EXTI4_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI4_IRQHandler + B EXTI4_IRQHandler + + PUBWEAK DMA1_Channel1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel1_IRQHandler + B DMA1_Channel1_IRQHandler + + PUBWEAK DMA1_Channel2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel2_IRQHandler + B DMA1_Channel2_IRQHandler + + PUBWEAK DMA1_Channel3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel3_IRQHandler + B DMA1_Channel3_IRQHandler + + PUBWEAK DMA1_Channel4_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel4_IRQHandler + B DMA1_Channel4_IRQHandler + + PUBWEAK DMA1_Channel5_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel5_IRQHandler + B DMA1_Channel5_IRQHandler + + PUBWEAK DMA1_Channel6_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel6_IRQHandler + B DMA1_Channel6_IRQHandler + + PUBWEAK DMA1_Channel7_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel7_IRQHandler + B DMA1_Channel7_IRQHandler + + PUBWEAK ADC1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +ADC1_IRQHandler + B ADC1_IRQHandler + + PUBWEAK EXTI9_5_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI9_5_IRQHandler + B EXTI9_5_IRQHandler + + PUBWEAK TIM1_BRK_TIM15_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM1_BRK_TIM15_IRQHandler + B TIM1_BRK_TIM15_IRQHandler + + PUBWEAK TIM1_UP_TIM16_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM1_UP_TIM16_IRQHandler + B TIM1_UP_TIM16_IRQHandler + + PUBWEAK TIM1_TRG_COM_TIM17_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM1_TRG_COM_TIM17_IRQHandler + B TIM1_TRG_COM_TIM17_IRQHandler + + PUBWEAK TIM1_CC_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM1_CC_IRQHandler + B TIM1_CC_IRQHandler + + PUBWEAK TIM2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM2_IRQHandler + B TIM2_IRQHandler + + PUBWEAK TIM3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM3_IRQHandler + B TIM3_IRQHandler + + PUBWEAK TIM4_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM4_IRQHandler + B TIM4_IRQHandler + + PUBWEAK I2C1_EV_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +I2C1_EV_IRQHandler + B I2C1_EV_IRQHandler + + PUBWEAK I2C1_ER_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +I2C1_ER_IRQHandler + B I2C1_ER_IRQHandler + + PUBWEAK I2C2_EV_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +I2C2_EV_IRQHandler + B I2C2_EV_IRQHandler + + PUBWEAK I2C2_ER_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +I2C2_ER_IRQHandler + B I2C2_ER_IRQHandler + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + PUBWEAK USART1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +USART1_IRQHandler + B USART1_IRQHandler + + PUBWEAK USART2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +USART2_IRQHandler + B USART2_IRQHandler + + PUBWEAK USART3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +USART3_IRQHandler + B USART3_IRQHandler + + PUBWEAK EXTI15_10_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI15_10_IRQHandler + B EXTI15_10_IRQHandler + + PUBWEAK RTCAlarm_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +RTCAlarm_IRQHandler + B RTCAlarm_IRQHandler + + PUBWEAK CEC_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +CEC_IRQHandler + B CEC_IRQHandler + + PUBWEAK TIM6_DAC_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM6_DAC_IRQHandler + B TIM6_DAC_IRQHandler + + PUBWEAK TIM7_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM7_IRQHandler + B TIM7_IRQHandler + + END diff --git a/boot_source/platform/CMSIS/ST/STM32F10x/Source/iar/startup_stm32f10x_xl.s b/boot_source/platform/CMSIS/ST/STM32F10x/Source/iar/startup_stm32f10x_xl.s new file mode 100644 index 0000000..d72f872 --- /dev/null +++ b/boot_source/platform/CMSIS/ST/STM32F10x/Source/iar/startup_stm32f10x_xl.s @@ -0,0 +1,497 @@ +;******************** (C) COPYRIGHT 2011 STMicroelectronics ******************** +;* File Name : startup_stm32f10x_xl.s +;* Author : MCD Application Team +;* Version : V3.5.1 +;* Date : 08-September-2021 +;* Description : STM32F10x XL-Density Devices vector table for EWARM +;* toolchain. +;* This module performs: +;* - Set the initial SP +;* - Configure the clock system and the external SRAM +;* mounted on STM3210E-EVAL board to be used as data +;* memory (optional, to be enabled by user) +;* - Set the initial PC == __iar_program_start, +;* - Set the vector table entries with the exceptions ISR address, +;* After Reset the Cortex-M3 processor is in Thread mode, +;* priority is Privileged, and the Stack is set to Main. +;******************************************************************************** +;* +;* Copyright (c) 2011 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. +; +;******************************************************************************* +; +; +; The modules in this file are included in the libraries, and may be replaced +; by any user-defined modules that define the PUBLIC symbol _program_start or +; a user defined start symbol. +; To override the cstartup defined in the library, simply add your modified +; version to the workbench project. +; +; The vector table is normally located at address 0. +; When debugging in RAM, it can be located in RAM, aligned to at least 2^6. +; The name "__vector_table" has special meaning for C-SPY: +; it is where the SP start value is found, and the NVIC vector +; table register (VTOR) is initialized to this address if != 0. +; +; Cortex-M version +; + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + EXTERN SystemInit + PUBLIC __vector_table + + DATA + +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD MemManage_Handler ; MPU Fault Handler + DCD BusFault_Handler ; Bus Fault Handler + DCD UsageFault_Handler ; Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD DebugMon_Handler ; Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD WWDG_IRQHandler ; Window Watchdog + DCD PVD_IRQHandler ; PVD through EXTI Line detect + DCD TAMPER_IRQHandler ; Tamper + DCD RTC_IRQHandler ; RTC + DCD FLASH_IRQHandler ; Flash + DCD RCC_IRQHandler ; RCC + DCD EXTI0_IRQHandler ; EXTI Line 0 + DCD EXTI1_IRQHandler ; EXTI Line 1 + DCD EXTI2_IRQHandler ; EXTI Line 2 + DCD EXTI3_IRQHandler ; EXTI Line 3 + DCD EXTI4_IRQHandler ; EXTI Line 4 + DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1 + DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2 + DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3 + DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4 + DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5 + DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6 + DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7 + DCD ADC1_2_IRQHandler ; ADC1 & ADC2 + DCD USB_HP_CAN1_TX_IRQHandler ; USB High Priority or CAN1 TX + DCD USB_LP_CAN1_RX0_IRQHandler ; USB Low Priority or CAN1 RX0 + DCD CAN1_RX1_IRQHandler ; CAN1 RX1 + DCD CAN1_SCE_IRQHandler ; CAN1 SCE + DCD EXTI9_5_IRQHandler ; EXTI Line 9..5 + DCD TIM1_BRK_TIM9_IRQHandler ; TIM1 Break and TIM9 + DCD TIM1_UP_TIM10_IRQHandler ; TIM1 Update and TIM10 + DCD TIM1_TRG_COM_TIM11_IRQHandler ; TIM1 Trigger and Commutation and TIM11 + DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare + DCD TIM2_IRQHandler ; TIM2 + DCD TIM3_IRQHandler ; TIM3 + DCD TIM4_IRQHandler ; TIM4 + DCD I2C1_EV_IRQHandler ; I2C1 Event + DCD I2C1_ER_IRQHandler ; I2C1 Error + DCD I2C2_EV_IRQHandler ; I2C2 Event + DCD I2C2_ER_IRQHandler ; I2C2 Error + DCD SPI1_IRQHandler ; SPI1 + DCD SPI2_IRQHandler ; SPI2 + DCD USART1_IRQHandler ; USART1 + DCD USART2_IRQHandler ; USART2 + DCD USART3_IRQHandler ; USART3 + DCD EXTI15_10_IRQHandler ; EXTI Line 15..10 + DCD RTCAlarm_IRQHandler ; RTC Alarm through EXTI Line + DCD USBWakeUp_IRQHandler ; USB Wakeup from suspend + DCD TIM8_BRK_TIM12_IRQHandler ; TIM8 Break and TIM12 + DCD TIM8_UP_TIM13_IRQHandler ; TIM8 Update and TIM13 + DCD TIM8_TRG_COM_TIM14_IRQHandler ; TIM8 Trigger and Commutation and TIM14 + DCD TIM8_CC_IRQHandler ; TIM8 Capture Compare + DCD ADC3_IRQHandler ; ADC3 + DCD FSMC_IRQHandler ; FSMC + DCD SDIO_IRQHandler ; SDIO + DCD TIM5_IRQHandler ; TIM5 + DCD SPI3_IRQHandler ; SPI3 + DCD UART4_IRQHandler ; UART4 + DCD UART5_IRQHandler ; UART5 + DCD TIM6_IRQHandler ; TIM6 + DCD TIM7_IRQHandler ; TIM7 + DCD DMA2_Channel1_IRQHandler ; DMA2 Channel1 + DCD DMA2_Channel2_IRQHandler ; DMA2 Channel2 + DCD DMA2_Channel3_IRQHandler ; DMA2 Channel3 + DCD DMA2_Channel4_5_IRQHandler ; DMA2 Channel4 & Channel5 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + SECTION .text:CODE:REORDER:NOROOT(2) +Reset_Handler + LDR R0, =SystemInit + BLX R0 + LDR R0, =__iar_program_start + BX R0 + + PUBWEAK NMI_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +NMI_Handler + B NMI_Handler + + PUBWEAK HardFault_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +HardFault_Handler + B HardFault_Handler + + PUBWEAK MemManage_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +MemManage_Handler + B MemManage_Handler + + PUBWEAK BusFault_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +BusFault_Handler + B BusFault_Handler + + PUBWEAK UsageFault_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +UsageFault_Handler + B UsageFault_Handler + + PUBWEAK SVC_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +SVC_Handler + B SVC_Handler + + PUBWEAK DebugMon_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +DebugMon_Handler + B DebugMon_Handler + + PUBWEAK PendSV_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +PendSV_Handler + B PendSV_Handler + + PUBWEAK SysTick_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +SysTick_Handler + B SysTick_Handler + + PUBWEAK WWDG_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +WWDG_IRQHandler + B WWDG_IRQHandler + + PUBWEAK PVD_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +PVD_IRQHandler + B PVD_IRQHandler + + PUBWEAK TAMPER_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TAMPER_IRQHandler + B TAMPER_IRQHandler + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +RTC_IRQHandler + B RTC_IRQHandler + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + PUBWEAK RCC_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +RCC_IRQHandler + B RCC_IRQHandler + + PUBWEAK EXTI0_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI0_IRQHandler + B EXTI0_IRQHandler + + PUBWEAK EXTI1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI1_IRQHandler + B EXTI1_IRQHandler + + PUBWEAK EXTI2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI2_IRQHandler + B EXTI2_IRQHandler + + PUBWEAK EXTI3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI3_IRQHandler + B EXTI3_IRQHandler + + PUBWEAK EXTI4_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI4_IRQHandler + B EXTI4_IRQHandler + + PUBWEAK DMA1_Channel1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel1_IRQHandler + B DMA1_Channel1_IRQHandler + + PUBWEAK DMA1_Channel2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel2_IRQHandler + B DMA1_Channel2_IRQHandler + + PUBWEAK DMA1_Channel3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel3_IRQHandler + B DMA1_Channel3_IRQHandler + + PUBWEAK DMA1_Channel4_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel4_IRQHandler + B DMA1_Channel4_IRQHandler + + PUBWEAK DMA1_Channel5_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel5_IRQHandler + B DMA1_Channel5_IRQHandler + + PUBWEAK DMA1_Channel6_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel6_IRQHandler + B DMA1_Channel6_IRQHandler + + PUBWEAK DMA1_Channel7_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Channel7_IRQHandler + B DMA1_Channel7_IRQHandler + + PUBWEAK ADC1_2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +ADC1_2_IRQHandler + B ADC1_2_IRQHandler + + PUBWEAK USB_HP_CAN1_TX_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +USB_HP_CAN1_TX_IRQHandler + B USB_HP_CAN1_TX_IRQHandler + + PUBWEAK USB_LP_CAN1_RX0_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +USB_LP_CAN1_RX0_IRQHandler + B USB_LP_CAN1_RX0_IRQHandler + + PUBWEAK CAN1_RX1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +CAN1_RX1_IRQHandler + B CAN1_RX1_IRQHandler + + PUBWEAK CAN1_SCE_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +CAN1_SCE_IRQHandler + B CAN1_SCE_IRQHandler + + PUBWEAK EXTI9_5_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI9_5_IRQHandler + B EXTI9_5_IRQHandler + + PUBWEAK TIM1_BRK_TIM9_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM1_BRK_TIM9_IRQHandler + B TIM1_BRK_TIM9_IRQHandler + + PUBWEAK TIM1_UP_TIM10_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM1_UP_TIM10_IRQHandler + B TIM1_UP_TIM10_IRQHandler + + PUBWEAK TIM1_TRG_COM_TIM11_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM1_TRG_COM_TIM11_IRQHandler + B TIM1_TRG_COM_TIM11_IRQHandler + + PUBWEAK TIM1_CC_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM1_CC_IRQHandler + B TIM1_CC_IRQHandler + + PUBWEAK TIM2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM2_IRQHandler + B TIM2_IRQHandler + + PUBWEAK TIM3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM3_IRQHandler + B TIM3_IRQHandler + + PUBWEAK TIM4_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM4_IRQHandler + B TIM4_IRQHandler + + PUBWEAK I2C1_EV_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +I2C1_EV_IRQHandler + B I2C1_EV_IRQHandler + + PUBWEAK I2C1_ER_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +I2C1_ER_IRQHandler + B I2C1_ER_IRQHandler + + PUBWEAK I2C2_EV_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +I2C2_EV_IRQHandler + B I2C2_EV_IRQHandler + + PUBWEAK I2C2_ER_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +I2C2_ER_IRQHandler + B I2C2_ER_IRQHandler + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + PUBWEAK USART1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +USART1_IRQHandler + B USART1_IRQHandler + + PUBWEAK USART2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +USART2_IRQHandler + B USART2_IRQHandler + + PUBWEAK USART3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +USART3_IRQHandler + B USART3_IRQHandler + + PUBWEAK EXTI15_10_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI15_10_IRQHandler + B EXTI15_10_IRQHandler + + PUBWEAK RTCAlarm_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +RTCAlarm_IRQHandler + B RTCAlarm_IRQHandler + + PUBWEAK USBWakeUp_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +USBWakeUp_IRQHandler + B USBWakeUp_IRQHandler + + PUBWEAK TIM8_BRK_TIM12_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM8_BRK_TIM12_IRQHandler + B TIM8_BRK_TIM12_IRQHandler + + PUBWEAK TIM8_UP_TIM13_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM8_UP_TIM13_IRQHandler + B TIM8_UP_TIM13_IRQHandler + + PUBWEAK TIM8_TRG_COM_TIM14_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM8_TRG_COM_TIM14_IRQHandler + B TIM8_TRG_COM_TIM14_IRQHandler + + PUBWEAK TIM8_CC_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM8_CC_IRQHandler + B TIM8_CC_IRQHandler + + PUBWEAK ADC3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +ADC3_IRQHandler + B ADC3_IRQHandler + + PUBWEAK FSMC_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +FSMC_IRQHandler + B FSMC_IRQHandler + + PUBWEAK SDIO_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +SDIO_IRQHandler + B SDIO_IRQHandler + + PUBWEAK TIM5_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM5_IRQHandler + B TIM5_IRQHandler + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +UART4_IRQHandler + B UART4_IRQHandler + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +UART5_IRQHandler + B UART5_IRQHandler + + PUBWEAK TIM6_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM6_IRQHandler + B TIM6_IRQHandler + + PUBWEAK TIM7_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM7_IRQHandler + B TIM7_IRQHandler + + PUBWEAK DMA2_Channel1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA2_Channel1_IRQHandler + B DMA2_Channel1_IRQHandler + + PUBWEAK DMA2_Channel2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA2_Channel2_IRQHandler + B DMA2_Channel2_IRQHandler + + PUBWEAK DMA2_Channel3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA2_Channel3_IRQHandler + B DMA2_Channel3_IRQHandler + + PUBWEAK DMA2_Channel4_5_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA2_Channel4_5_IRQHandler + B DMA2_Channel4_5_IRQHandler + + + END + diff --git a/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/misc.h b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/misc.h new file mode 100644 index 0000000..9a6bd07 --- /dev/null +++ b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/misc.h @@ -0,0 +1,220 @@ +/** + ****************************************************************************** + * @file misc.h + * @author MCD Application Team + * @version V3.5.0 + * @date 11-March-2011 + * @brief This file contains all the functions prototypes for the miscellaneous + * firmware library functions (add-on to CMSIS functions). + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

    © COPYRIGHT 2011 STMicroelectronics

    + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MISC_H +#define __MISC_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f10x.h" + +/** @addtogroup STM32F10x_StdPeriph_Driver + * @{ + */ + +/** @addtogroup MISC + * @{ + */ + +/** @defgroup MISC_Exported_Types + * @{ + */ + +/** + * @brief NVIC Init Structure definition + */ + +typedef struct +{ + uint8_t NVIC_IRQChannel; /*!< Specifies the IRQ channel to be enabled or disabled. + This parameter can be a value of @ref IRQn_Type + (For the complete STM32 Devices IRQ Channels list, please + refer to stm32f10x.h file) */ + + uint8_t NVIC_IRQChannelPreemptionPriority; /*!< Specifies the pre-emption priority for the IRQ channel + specified in NVIC_IRQChannel. This parameter can be a value + between 0 and 15 as described in the table @ref NVIC_Priority_Table */ + + uint8_t NVIC_IRQChannelSubPriority; /*!< Specifies the subpriority level for the IRQ channel specified + in NVIC_IRQChannel. This parameter can be a value + between 0 and 15 as described in the table @ref NVIC_Priority_Table */ + + FunctionalState NVIC_IRQChannelCmd; /*!< Specifies whether the IRQ channel defined in NVIC_IRQChannel + will be enabled or disabled. + This parameter can be set either to ENABLE or DISABLE */ +} NVIC_InitTypeDef; + +/** + * @} + */ + +/** @defgroup NVIC_Priority_Table + * @{ + */ + +/** +@code + The table below gives the allowed values of the pre-emption priority and subpriority according + to the Priority Grouping configuration performed by NVIC_PriorityGroupConfig function + ============================================================================================================================ + NVIC_PriorityGroup | NVIC_IRQChannelPreemptionPriority | NVIC_IRQChannelSubPriority | Description + ============================================================================================================================ + NVIC_PriorityGroup_0 | 0 | 0-15 | 0 bits for pre-emption priority + | | | 4 bits for subpriority + ---------------------------------------------------------------------------------------------------------------------------- + NVIC_PriorityGroup_1 | 0-1 | 0-7 | 1 bits for pre-emption priority + | | | 3 bits for subpriority + ---------------------------------------------------------------------------------------------------------------------------- + NVIC_PriorityGroup_2 | 0-3 | 0-3 | 2 bits for pre-emption priority + | | | 2 bits for subpriority + ---------------------------------------------------------------------------------------------------------------------------- + NVIC_PriorityGroup_3 | 0-7 | 0-1 | 3 bits for pre-emption priority + | | | 1 bits for subpriority + ---------------------------------------------------------------------------------------------------------------------------- + NVIC_PriorityGroup_4 | 0-15 | 0 | 4 bits for pre-emption priority + | | | 0 bits for subpriority + ============================================================================================================================ +@endcode +*/ + +/** + * @} + */ + +/** @defgroup MISC_Exported_Constants + * @{ + */ + +/** @defgroup Vector_Table_Base + * @{ + */ + +#define NVIC_VectTab_RAM ((uint32_t)0x20000000) +#define NVIC_VectTab_FLASH ((uint32_t)0x08000000) +#define IS_NVIC_VECTTAB(VECTTAB) (((VECTTAB) == NVIC_VectTab_RAM) || \ + ((VECTTAB) == NVIC_VectTab_FLASH)) +/** + * @} + */ + +/** @defgroup System_Low_Power + * @{ + */ + +#define NVIC_LP_SEVONPEND ((uint8_t)0x10) +#define NVIC_LP_SLEEPDEEP ((uint8_t)0x04) +#define NVIC_LP_SLEEPONEXIT ((uint8_t)0x02) +#define IS_NVIC_LP(LP) (((LP) == NVIC_LP_SEVONPEND) || \ + ((LP) == NVIC_LP_SLEEPDEEP) || \ + ((LP) == NVIC_LP_SLEEPONEXIT)) +/** + * @} + */ + +/** @defgroup Preemption_Priority_Group + * @{ + */ + +#define NVIC_PriorityGroup_0 ((uint32_t)0x700) /*!< 0 bits for pre-emption priority + 4 bits for subpriority */ +#define NVIC_PriorityGroup_1 ((uint32_t)0x600) /*!< 1 bits for pre-emption priority + 3 bits for subpriority */ +#define NVIC_PriorityGroup_2 ((uint32_t)0x500) /*!< 2 bits for pre-emption priority + 2 bits for subpriority */ +#define NVIC_PriorityGroup_3 ((uint32_t)0x400) /*!< 3 bits for pre-emption priority + 1 bits for subpriority */ +#define NVIC_PriorityGroup_4 ((uint32_t)0x300) /*!< 4 bits for pre-emption priority + 0 bits for subpriority */ + +#define IS_NVIC_PRIORITY_GROUP(GROUP) (((GROUP) == NVIC_PriorityGroup_0) || \ + ((GROUP) == NVIC_PriorityGroup_1) || \ + ((GROUP) == NVIC_PriorityGroup_2) || \ + ((GROUP) == NVIC_PriorityGroup_3) || \ + ((GROUP) == NVIC_PriorityGroup_4)) + +#define IS_NVIC_PREEMPTION_PRIORITY(PRIORITY) ((PRIORITY) < 0x10) + +#define IS_NVIC_SUB_PRIORITY(PRIORITY) ((PRIORITY) < 0x10) + +#define IS_NVIC_OFFSET(OFFSET) ((OFFSET) < 0x000FFFFF) + +/** + * @} + */ + +/** @defgroup SysTick_clock_source + * @{ + */ + +#define SysTick_CLKSource_HCLK_Div8 ((uint32_t)0xFFFFFFFB) +#define SysTick_CLKSource_HCLK ((uint32_t)0x00000004) +#define IS_SYSTICK_CLK_SOURCE(SOURCE) (((SOURCE) == SysTick_CLKSource_HCLK) || \ + ((SOURCE) == SysTick_CLKSource_HCLK_Div8)) +/** + * @} + */ + +/** + * @} + */ + +/** @defgroup MISC_Exported_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup MISC_Exported_Functions + * @{ + */ + +void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup); +void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct); +void NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset); +void NVIC_SystemLPConfig(uint8_t LowPowerMode, FunctionalState NewState); +void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource); + +#ifdef __cplusplus +} +#endif + +#endif /* __MISC_H */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_adc.h b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_adc.h new file mode 100644 index 0000000..c465d33 --- /dev/null +++ b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_adc.h @@ -0,0 +1,483 @@ +/** + ****************************************************************************** + * @file stm32f10x_adc.h + * @author MCD Application Team + * @version V3.5.0 + * @date 11-March-2011 + * @brief This file contains all the functions prototypes for the ADC firmware + * library. + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

    © COPYRIGHT 2011 STMicroelectronics

    + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F10x_ADC_H +#define __STM32F10x_ADC_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f10x.h" + +/** @addtogroup STM32F10x_StdPeriph_Driver + * @{ + */ + +/** @addtogroup ADC + * @{ + */ + +/** @defgroup ADC_Exported_Types + * @{ + */ + +/** + * @brief ADC Init structure definition + */ + +typedef struct +{ + uint32_t ADC_Mode; /*!< Configures the ADC to operate in independent or + dual mode. + This parameter can be a value of @ref ADC_mode */ + + FunctionalState ADC_ScanConvMode; /*!< Specifies whether the conversion is performed in + Scan (multichannels) or Single (one channel) mode. + This parameter can be set to ENABLE or DISABLE */ + + FunctionalState ADC_ContinuousConvMode; /*!< Specifies whether the conversion is performed in + Continuous or Single mode. + This parameter can be set to ENABLE or DISABLE. */ + + uint32_t ADC_ExternalTrigConv; /*!< Defines the external trigger used to start the analog + to digital conversion of regular channels. This parameter + can be a value of @ref ADC_external_trigger_sources_for_regular_channels_conversion */ + + uint32_t ADC_DataAlign; /*!< Specifies whether the ADC data alignment is left or right. + This parameter can be a value of @ref ADC_data_align */ + + uint8_t ADC_NbrOfChannel; /*!< Specifies the number of ADC channels that will be converted + using the sequencer for regular channel group. + This parameter must range from 1 to 16. */ +}ADC_InitTypeDef; +/** + * @} + */ + +/** @defgroup ADC_Exported_Constants + * @{ + */ + +#define IS_ADC_ALL_PERIPH(PERIPH) (((PERIPH) == ADC1) || \ + ((PERIPH) == ADC2) || \ + ((PERIPH) == ADC3)) + +#define IS_ADC_DMA_PERIPH(PERIPH) (((PERIPH) == ADC1) || \ + ((PERIPH) == ADC3)) + +/** @defgroup ADC_mode + * @{ + */ + +#define ADC_Mode_Independent ((uint32_t)0x00000000) +#define ADC_Mode_RegInjecSimult ((uint32_t)0x00010000) +#define ADC_Mode_RegSimult_AlterTrig ((uint32_t)0x00020000) +#define ADC_Mode_InjecSimult_FastInterl ((uint32_t)0x00030000) +#define ADC_Mode_InjecSimult_SlowInterl ((uint32_t)0x00040000) +#define ADC_Mode_InjecSimult ((uint32_t)0x00050000) +#define ADC_Mode_RegSimult ((uint32_t)0x00060000) +#define ADC_Mode_FastInterl ((uint32_t)0x00070000) +#define ADC_Mode_SlowInterl ((uint32_t)0x00080000) +#define ADC_Mode_AlterTrig ((uint32_t)0x00090000) + +#define IS_ADC_MODE(MODE) (((MODE) == ADC_Mode_Independent) || \ + ((MODE) == ADC_Mode_RegInjecSimult) || \ + ((MODE) == ADC_Mode_RegSimult_AlterTrig) || \ + ((MODE) == ADC_Mode_InjecSimult_FastInterl) || \ + ((MODE) == ADC_Mode_InjecSimult_SlowInterl) || \ + ((MODE) == ADC_Mode_InjecSimult) || \ + ((MODE) == ADC_Mode_RegSimult) || \ + ((MODE) == ADC_Mode_FastInterl) || \ + ((MODE) == ADC_Mode_SlowInterl) || \ + ((MODE) == ADC_Mode_AlterTrig)) +/** + * @} + */ + +/** @defgroup ADC_external_trigger_sources_for_regular_channels_conversion + * @{ + */ + +#define ADC_ExternalTrigConv_T1_CC1 ((uint32_t)0x00000000) /*!< For ADC1 and ADC2 */ +#define ADC_ExternalTrigConv_T1_CC2 ((uint32_t)0x00020000) /*!< For ADC1 and ADC2 */ +#define ADC_ExternalTrigConv_T2_CC2 ((uint32_t)0x00060000) /*!< For ADC1 and ADC2 */ +#define ADC_ExternalTrigConv_T3_TRGO ((uint32_t)0x00080000) /*!< For ADC1 and ADC2 */ +#define ADC_ExternalTrigConv_T4_CC4 ((uint32_t)0x000A0000) /*!< For ADC1 and ADC2 */ +#define ADC_ExternalTrigConv_Ext_IT11_TIM8_TRGO ((uint32_t)0x000C0000) /*!< For ADC1 and ADC2 */ + +#define ADC_ExternalTrigConv_T1_CC3 ((uint32_t)0x00040000) /*!< For ADC1, ADC2 and ADC3 */ +#define ADC_ExternalTrigConv_None ((uint32_t)0x000E0000) /*!< For ADC1, ADC2 and ADC3 */ + +#define ADC_ExternalTrigConv_T3_CC1 ((uint32_t)0x00000000) /*!< For ADC3 only */ +#define ADC_ExternalTrigConv_T2_CC3 ((uint32_t)0x00020000) /*!< For ADC3 only */ +#define ADC_ExternalTrigConv_T8_CC1 ((uint32_t)0x00060000) /*!< For ADC3 only */ +#define ADC_ExternalTrigConv_T8_TRGO ((uint32_t)0x00080000) /*!< For ADC3 only */ +#define ADC_ExternalTrigConv_T5_CC1 ((uint32_t)0x000A0000) /*!< For ADC3 only */ +#define ADC_ExternalTrigConv_T5_CC3 ((uint32_t)0x000C0000) /*!< For ADC3 only */ + +#define IS_ADC_EXT_TRIG(REGTRIG) (((REGTRIG) == ADC_ExternalTrigConv_T1_CC1) || \ + ((REGTRIG) == ADC_ExternalTrigConv_T1_CC2) || \ + ((REGTRIG) == ADC_ExternalTrigConv_T1_CC3) || \ + ((REGTRIG) == ADC_ExternalTrigConv_T2_CC2) || \ + ((REGTRIG) == ADC_ExternalTrigConv_T3_TRGO) || \ + ((REGTRIG) == ADC_ExternalTrigConv_T4_CC4) || \ + ((REGTRIG) == ADC_ExternalTrigConv_Ext_IT11_TIM8_TRGO) || \ + ((REGTRIG) == ADC_ExternalTrigConv_None) || \ + ((REGTRIG) == ADC_ExternalTrigConv_T3_CC1) || \ + ((REGTRIG) == ADC_ExternalTrigConv_T2_CC3) || \ + ((REGTRIG) == ADC_ExternalTrigConv_T8_CC1) || \ + ((REGTRIG) == ADC_ExternalTrigConv_T8_TRGO) || \ + ((REGTRIG) == ADC_ExternalTrigConv_T5_CC1) || \ + ((REGTRIG) == ADC_ExternalTrigConv_T5_CC3)) +/** + * @} + */ + +/** @defgroup ADC_data_align + * @{ + */ + +#define ADC_DataAlign_Right ((uint32_t)0x00000000) +#define ADC_DataAlign_Left ((uint32_t)0x00000800) +#define IS_ADC_DATA_ALIGN(ALIGN) (((ALIGN) == ADC_DataAlign_Right) || \ + ((ALIGN) == ADC_DataAlign_Left)) +/** + * @} + */ + +/** @defgroup ADC_channels + * @{ + */ + +#define ADC_Channel_0 ((uint8_t)0x00) +#define ADC_Channel_1 ((uint8_t)0x01) +#define ADC_Channel_2 ((uint8_t)0x02) +#define ADC_Channel_3 ((uint8_t)0x03) +#define ADC_Channel_4 ((uint8_t)0x04) +#define ADC_Channel_5 ((uint8_t)0x05) +#define ADC_Channel_6 ((uint8_t)0x06) +#define ADC_Channel_7 ((uint8_t)0x07) +#define ADC_Channel_8 ((uint8_t)0x08) +#define ADC_Channel_9 ((uint8_t)0x09) +#define ADC_Channel_10 ((uint8_t)0x0A) +#define ADC_Channel_11 ((uint8_t)0x0B) +#define ADC_Channel_12 ((uint8_t)0x0C) +#define ADC_Channel_13 ((uint8_t)0x0D) +#define ADC_Channel_14 ((uint8_t)0x0E) +#define ADC_Channel_15 ((uint8_t)0x0F) +#define ADC_Channel_16 ((uint8_t)0x10) +#define ADC_Channel_17 ((uint8_t)0x11) + +#define ADC_Channel_TempSensor ((uint8_t)ADC_Channel_16) +#define ADC_Channel_Vrefint ((uint8_t)ADC_Channel_17) + +#define IS_ADC_CHANNEL(CHANNEL) (((CHANNEL) == ADC_Channel_0) || ((CHANNEL) == ADC_Channel_1) || \ + ((CHANNEL) == ADC_Channel_2) || ((CHANNEL) == ADC_Channel_3) || \ + ((CHANNEL) == ADC_Channel_4) || ((CHANNEL) == ADC_Channel_5) || \ + ((CHANNEL) == ADC_Channel_6) || ((CHANNEL) == ADC_Channel_7) || \ + ((CHANNEL) == ADC_Channel_8) || ((CHANNEL) == ADC_Channel_9) || \ + ((CHANNEL) == ADC_Channel_10) || ((CHANNEL) == ADC_Channel_11) || \ + ((CHANNEL) == ADC_Channel_12) || ((CHANNEL) == ADC_Channel_13) || \ + ((CHANNEL) == ADC_Channel_14) || ((CHANNEL) == ADC_Channel_15) || \ + ((CHANNEL) == ADC_Channel_16) || ((CHANNEL) == ADC_Channel_17)) +/** + * @} + */ + +/** @defgroup ADC_sampling_time + * @{ + */ + +#define ADC_SampleTime_1Cycles5 ((uint8_t)0x00) +#define ADC_SampleTime_7Cycles5 ((uint8_t)0x01) +#define ADC_SampleTime_13Cycles5 ((uint8_t)0x02) +#define ADC_SampleTime_28Cycles5 ((uint8_t)0x03) +#define ADC_SampleTime_41Cycles5 ((uint8_t)0x04) +#define ADC_SampleTime_55Cycles5 ((uint8_t)0x05) +#define ADC_SampleTime_71Cycles5 ((uint8_t)0x06) +#define ADC_SampleTime_239Cycles5 ((uint8_t)0x07) +#define IS_ADC_SAMPLE_TIME(TIME) (((TIME) == ADC_SampleTime_1Cycles5) || \ + ((TIME) == ADC_SampleTime_7Cycles5) || \ + ((TIME) == ADC_SampleTime_13Cycles5) || \ + ((TIME) == ADC_SampleTime_28Cycles5) || \ + ((TIME) == ADC_SampleTime_41Cycles5) || \ + ((TIME) == ADC_SampleTime_55Cycles5) || \ + ((TIME) == ADC_SampleTime_71Cycles5) || \ + ((TIME) == ADC_SampleTime_239Cycles5)) +/** + * @} + */ + +/** @defgroup ADC_external_trigger_sources_for_injected_channels_conversion + * @{ + */ + +#define ADC_ExternalTrigInjecConv_T2_TRGO ((uint32_t)0x00002000) /*!< For ADC1 and ADC2 */ +#define ADC_ExternalTrigInjecConv_T2_CC1 ((uint32_t)0x00003000) /*!< For ADC1 and ADC2 */ +#define ADC_ExternalTrigInjecConv_T3_CC4 ((uint32_t)0x00004000) /*!< For ADC1 and ADC2 */ +#define ADC_ExternalTrigInjecConv_T4_TRGO ((uint32_t)0x00005000) /*!< For ADC1 and ADC2 */ +#define ADC_ExternalTrigInjecConv_Ext_IT15_TIM8_CC4 ((uint32_t)0x00006000) /*!< For ADC1 and ADC2 */ + +#define ADC_ExternalTrigInjecConv_T1_TRGO ((uint32_t)0x00000000) /*!< For ADC1, ADC2 and ADC3 */ +#define ADC_ExternalTrigInjecConv_T1_CC4 ((uint32_t)0x00001000) /*!< For ADC1, ADC2 and ADC3 */ +#define ADC_ExternalTrigInjecConv_None ((uint32_t)0x00007000) /*!< For ADC1, ADC2 and ADC3 */ + +#define ADC_ExternalTrigInjecConv_T4_CC3 ((uint32_t)0x00002000) /*!< For ADC3 only */ +#define ADC_ExternalTrigInjecConv_T8_CC2 ((uint32_t)0x00003000) /*!< For ADC3 only */ +#define ADC_ExternalTrigInjecConv_T8_CC4 ((uint32_t)0x00004000) /*!< For ADC3 only */ +#define ADC_ExternalTrigInjecConv_T5_TRGO ((uint32_t)0x00005000) /*!< For ADC3 only */ +#define ADC_ExternalTrigInjecConv_T5_CC4 ((uint32_t)0x00006000) /*!< For ADC3 only */ + +#define IS_ADC_EXT_INJEC_TRIG(INJTRIG) (((INJTRIG) == ADC_ExternalTrigInjecConv_T1_TRGO) || \ + ((INJTRIG) == ADC_ExternalTrigInjecConv_T1_CC4) || \ + ((INJTRIG) == ADC_ExternalTrigInjecConv_T2_TRGO) || \ + ((INJTRIG) == ADC_ExternalTrigInjecConv_T2_CC1) || \ + ((INJTRIG) == ADC_ExternalTrigInjecConv_T3_CC4) || \ + ((INJTRIG) == ADC_ExternalTrigInjecConv_T4_TRGO) || \ + ((INJTRIG) == ADC_ExternalTrigInjecConv_Ext_IT15_TIM8_CC4) || \ + ((INJTRIG) == ADC_ExternalTrigInjecConv_None) || \ + ((INJTRIG) == ADC_ExternalTrigInjecConv_T4_CC3) || \ + ((INJTRIG) == ADC_ExternalTrigInjecConv_T8_CC2) || \ + ((INJTRIG) == ADC_ExternalTrigInjecConv_T8_CC4) || \ + ((INJTRIG) == ADC_ExternalTrigInjecConv_T5_TRGO) || \ + ((INJTRIG) == ADC_ExternalTrigInjecConv_T5_CC4)) +/** + * @} + */ + +/** @defgroup ADC_injected_channel_selection + * @{ + */ + +#define ADC_InjectedChannel_1 ((uint8_t)0x14) +#define ADC_InjectedChannel_2 ((uint8_t)0x18) +#define ADC_InjectedChannel_3 ((uint8_t)0x1C) +#define ADC_InjectedChannel_4 ((uint8_t)0x20) +#define IS_ADC_INJECTED_CHANNEL(CHANNEL) (((CHANNEL) == ADC_InjectedChannel_1) || \ + ((CHANNEL) == ADC_InjectedChannel_2) || \ + ((CHANNEL) == ADC_InjectedChannel_3) || \ + ((CHANNEL) == ADC_InjectedChannel_4)) +/** + * @} + */ + +/** @defgroup ADC_analog_watchdog_selection + * @{ + */ + +#define ADC_AnalogWatchdog_SingleRegEnable ((uint32_t)0x00800200) +#define ADC_AnalogWatchdog_SingleInjecEnable ((uint32_t)0x00400200) +#define ADC_AnalogWatchdog_SingleRegOrInjecEnable ((uint32_t)0x00C00200) +#define ADC_AnalogWatchdog_AllRegEnable ((uint32_t)0x00800000) +#define ADC_AnalogWatchdog_AllInjecEnable ((uint32_t)0x00400000) +#define ADC_AnalogWatchdog_AllRegAllInjecEnable ((uint32_t)0x00C00000) +#define ADC_AnalogWatchdog_None ((uint32_t)0x00000000) + +#define IS_ADC_ANALOG_WATCHDOG(WATCHDOG) (((WATCHDOG) == ADC_AnalogWatchdog_SingleRegEnable) || \ + ((WATCHDOG) == ADC_AnalogWatchdog_SingleInjecEnable) || \ + ((WATCHDOG) == ADC_AnalogWatchdog_SingleRegOrInjecEnable) || \ + ((WATCHDOG) == ADC_AnalogWatchdog_AllRegEnable) || \ + ((WATCHDOG) == ADC_AnalogWatchdog_AllInjecEnable) || \ + ((WATCHDOG) == ADC_AnalogWatchdog_AllRegAllInjecEnable) || \ + ((WATCHDOG) == ADC_AnalogWatchdog_None)) +/** + * @} + */ + +/** @defgroup ADC_interrupts_definition + * @{ + */ + +#define ADC_IT_EOC ((uint16_t)0x0220) +#define ADC_IT_AWD ((uint16_t)0x0140) +#define ADC_IT_JEOC ((uint16_t)0x0480) + +#define IS_ADC_IT(IT) ((((IT) & (uint16_t)0xF81F) == 0x00) && ((IT) != 0x00)) + +#define IS_ADC_GET_IT(IT) (((IT) == ADC_IT_EOC) || ((IT) == ADC_IT_AWD) || \ + ((IT) == ADC_IT_JEOC)) +/** + * @} + */ + +/** @defgroup ADC_flags_definition + * @{ + */ + +#define ADC_FLAG_AWD ((uint8_t)0x01) +#define ADC_FLAG_EOC ((uint8_t)0x02) +#define ADC_FLAG_JEOC ((uint8_t)0x04) +#define ADC_FLAG_JSTRT ((uint8_t)0x08) +#define ADC_FLAG_STRT ((uint8_t)0x10) +#define IS_ADC_CLEAR_FLAG(FLAG) ((((FLAG) & (uint8_t)0xE0) == 0x00) && ((FLAG) != 0x00)) +#define IS_ADC_GET_FLAG(FLAG) (((FLAG) == ADC_FLAG_AWD) || ((FLAG) == ADC_FLAG_EOC) || \ + ((FLAG) == ADC_FLAG_JEOC) || ((FLAG)== ADC_FLAG_JSTRT) || \ + ((FLAG) == ADC_FLAG_STRT)) +/** + * @} + */ + +/** @defgroup ADC_thresholds + * @{ + */ + +#define IS_ADC_THRESHOLD(THRESHOLD) ((THRESHOLD) <= 0xFFF) + +/** + * @} + */ + +/** @defgroup ADC_injected_offset + * @{ + */ + +#define IS_ADC_OFFSET(OFFSET) ((OFFSET) <= 0xFFF) + +/** + * @} + */ + +/** @defgroup ADC_injected_length + * @{ + */ + +#define IS_ADC_INJECTED_LENGTH(LENGTH) (((LENGTH) >= 0x1) && ((LENGTH) <= 0x4)) + +/** + * @} + */ + +/** @defgroup ADC_injected_rank + * @{ + */ + +#define IS_ADC_INJECTED_RANK(RANK) (((RANK) >= 0x1) && ((RANK) <= 0x4)) + +/** + * @} + */ + + +/** @defgroup ADC_regular_length + * @{ + */ + +#define IS_ADC_REGULAR_LENGTH(LENGTH) (((LENGTH) >= 0x1) && ((LENGTH) <= 0x10)) +/** + * @} + */ + +/** @defgroup ADC_regular_rank + * @{ + */ + +#define IS_ADC_REGULAR_RANK(RANK) (((RANK) >= 0x1) && ((RANK) <= 0x10)) + +/** + * @} + */ + +/** @defgroup ADC_regular_discontinuous_mode_number + * @{ + */ + +#define IS_ADC_REGULAR_DISC_NUMBER(NUMBER) (((NUMBER) >= 0x1) && ((NUMBER) <= 0x8)) + +/** + * @} + */ + +/** + * @} + */ + +/** @defgroup ADC_Exported_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup ADC_Exported_Functions + * @{ + */ + +void ADC_DeInit(ADC_TypeDef* ADCx); +void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct); +void ADC_StructInit(ADC_InitTypeDef* ADC_InitStruct); +void ADC_Cmd(ADC_TypeDef* ADCx, FunctionalState NewState); +void ADC_DMACmd(ADC_TypeDef* ADCx, FunctionalState NewState); +void ADC_ITConfig(ADC_TypeDef* ADCx, uint16_t ADC_IT, FunctionalState NewState); +void ADC_ResetCalibration(ADC_TypeDef* ADCx); +FlagStatus ADC_GetResetCalibrationStatus(ADC_TypeDef* ADCx); +void ADC_StartCalibration(ADC_TypeDef* ADCx); +FlagStatus ADC_GetCalibrationStatus(ADC_TypeDef* ADCx); +void ADC_SoftwareStartConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState); +FlagStatus ADC_GetSoftwareStartConvStatus(ADC_TypeDef* ADCx); +void ADC_DiscModeChannelCountConfig(ADC_TypeDef* ADCx, uint8_t Number); +void ADC_DiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState); +void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime); +void ADC_ExternalTrigConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState); +uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx); +uint32_t ADC_GetDualModeConversionValue(void); +void ADC_AutoInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState); +void ADC_InjectedDiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState); +void ADC_ExternalTrigInjectedConvConfig(ADC_TypeDef* ADCx, uint32_t ADC_ExternalTrigInjecConv); +void ADC_ExternalTrigInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState); +void ADC_SoftwareStartInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState); +FlagStatus ADC_GetSoftwareStartInjectedConvCmdStatus(ADC_TypeDef* ADCx); +void ADC_InjectedChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime); +void ADC_InjectedSequencerLengthConfig(ADC_TypeDef* ADCx, uint8_t Length); +void ADC_SetInjectedOffset(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel, uint16_t Offset); +uint16_t ADC_GetInjectedConversionValue(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel); +void ADC_AnalogWatchdogCmd(ADC_TypeDef* ADCx, uint32_t ADC_AnalogWatchdog); +void ADC_AnalogWatchdogThresholdsConfig(ADC_TypeDef* ADCx, uint16_t HighThreshold, uint16_t LowThreshold); +void ADC_AnalogWatchdogSingleChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel); +void ADC_TempSensorVrefintCmd(FunctionalState NewState); +FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t ADC_FLAG); +void ADC_ClearFlag(ADC_TypeDef* ADCx, uint8_t ADC_FLAG); +ITStatus ADC_GetITStatus(ADC_TypeDef* ADCx, uint16_t ADC_IT); +void ADC_ClearITPendingBit(ADC_TypeDef* ADCx, uint16_t ADC_IT); + +#ifdef __cplusplus +} +#endif + +#endif /*__STM32F10x_ADC_H */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_bkp.h b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_bkp.h new file mode 100644 index 0000000..275c5e1 --- /dev/null +++ b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_bkp.h @@ -0,0 +1,195 @@ +/** + ****************************************************************************** + * @file stm32f10x_bkp.h + * @author MCD Application Team + * @version V3.5.0 + * @date 11-March-2011 + * @brief This file contains all the functions prototypes for the BKP firmware + * library. + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

    © COPYRIGHT 2011 STMicroelectronics

    + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F10x_BKP_H +#define __STM32F10x_BKP_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f10x.h" + +/** @addtogroup STM32F10x_StdPeriph_Driver + * @{ + */ + +/** @addtogroup BKP + * @{ + */ + +/** @defgroup BKP_Exported_Types + * @{ + */ + +/** + * @} + */ + +/** @defgroup BKP_Exported_Constants + * @{ + */ + +/** @defgroup Tamper_Pin_active_level + * @{ + */ + +#define BKP_TamperPinLevel_High ((uint16_t)0x0000) +#define BKP_TamperPinLevel_Low ((uint16_t)0x0001) +#define IS_BKP_TAMPER_PIN_LEVEL(LEVEL) (((LEVEL) == BKP_TamperPinLevel_High) || \ + ((LEVEL) == BKP_TamperPinLevel_Low)) +/** + * @} + */ + +/** @defgroup RTC_output_source_to_output_on_the_Tamper_pin + * @{ + */ + +#define BKP_RTCOutputSource_None ((uint16_t)0x0000) +#define BKP_RTCOutputSource_CalibClock ((uint16_t)0x0080) +#define BKP_RTCOutputSource_Alarm ((uint16_t)0x0100) +#define BKP_RTCOutputSource_Second ((uint16_t)0x0300) +#define IS_BKP_RTC_OUTPUT_SOURCE(SOURCE) (((SOURCE) == BKP_RTCOutputSource_None) || \ + ((SOURCE) == BKP_RTCOutputSource_CalibClock) || \ + ((SOURCE) == BKP_RTCOutputSource_Alarm) || \ + ((SOURCE) == BKP_RTCOutputSource_Second)) +/** + * @} + */ + +/** @defgroup Data_Backup_Register + * @{ + */ + +#define BKP_DR1 ((uint16_t)0x0004) +#define BKP_DR2 ((uint16_t)0x0008) +#define BKP_DR3 ((uint16_t)0x000C) +#define BKP_DR4 ((uint16_t)0x0010) +#define BKP_DR5 ((uint16_t)0x0014) +#define BKP_DR6 ((uint16_t)0x0018) +#define BKP_DR7 ((uint16_t)0x001C) +#define BKP_DR8 ((uint16_t)0x0020) +#define BKP_DR9 ((uint16_t)0x0024) +#define BKP_DR10 ((uint16_t)0x0028) +#define BKP_DR11 ((uint16_t)0x0040) +#define BKP_DR12 ((uint16_t)0x0044) +#define BKP_DR13 ((uint16_t)0x0048) +#define BKP_DR14 ((uint16_t)0x004C) +#define BKP_DR15 ((uint16_t)0x0050) +#define BKP_DR16 ((uint16_t)0x0054) +#define BKP_DR17 ((uint16_t)0x0058) +#define BKP_DR18 ((uint16_t)0x005C) +#define BKP_DR19 ((uint16_t)0x0060) +#define BKP_DR20 ((uint16_t)0x0064) +#define BKP_DR21 ((uint16_t)0x0068) +#define BKP_DR22 ((uint16_t)0x006C) +#define BKP_DR23 ((uint16_t)0x0070) +#define BKP_DR24 ((uint16_t)0x0074) +#define BKP_DR25 ((uint16_t)0x0078) +#define BKP_DR26 ((uint16_t)0x007C) +#define BKP_DR27 ((uint16_t)0x0080) +#define BKP_DR28 ((uint16_t)0x0084) +#define BKP_DR29 ((uint16_t)0x0088) +#define BKP_DR30 ((uint16_t)0x008C) +#define BKP_DR31 ((uint16_t)0x0090) +#define BKP_DR32 ((uint16_t)0x0094) +#define BKP_DR33 ((uint16_t)0x0098) +#define BKP_DR34 ((uint16_t)0x009C) +#define BKP_DR35 ((uint16_t)0x00A0) +#define BKP_DR36 ((uint16_t)0x00A4) +#define BKP_DR37 ((uint16_t)0x00A8) +#define BKP_DR38 ((uint16_t)0x00AC) +#define BKP_DR39 ((uint16_t)0x00B0) +#define BKP_DR40 ((uint16_t)0x00B4) +#define BKP_DR41 ((uint16_t)0x00B8) +#define BKP_DR42 ((uint16_t)0x00BC) + +#define IS_BKP_DR(DR) (((DR) == BKP_DR1) || ((DR) == BKP_DR2) || ((DR) == BKP_DR3) || \ + ((DR) == BKP_DR4) || ((DR) == BKP_DR5) || ((DR) == BKP_DR6) || \ + ((DR) == BKP_DR7) || ((DR) == BKP_DR8) || ((DR) == BKP_DR9) || \ + ((DR) == BKP_DR10) || ((DR) == BKP_DR11) || ((DR) == BKP_DR12) || \ + ((DR) == BKP_DR13) || ((DR) == BKP_DR14) || ((DR) == BKP_DR15) || \ + ((DR) == BKP_DR16) || ((DR) == BKP_DR17) || ((DR) == BKP_DR18) || \ + ((DR) == BKP_DR19) || ((DR) == BKP_DR20) || ((DR) == BKP_DR21) || \ + ((DR) == BKP_DR22) || ((DR) == BKP_DR23) || ((DR) == BKP_DR24) || \ + ((DR) == BKP_DR25) || ((DR) == BKP_DR26) || ((DR) == BKP_DR27) || \ + ((DR) == BKP_DR28) || ((DR) == BKP_DR29) || ((DR) == BKP_DR30) || \ + ((DR) == BKP_DR31) || ((DR) == BKP_DR32) || ((DR) == BKP_DR33) || \ + ((DR) == BKP_DR34) || ((DR) == BKP_DR35) || ((DR) == BKP_DR36) || \ + ((DR) == BKP_DR37) || ((DR) == BKP_DR38) || ((DR) == BKP_DR39) || \ + ((DR) == BKP_DR40) || ((DR) == BKP_DR41) || ((DR) == BKP_DR42)) + +#define IS_BKP_CALIBRATION_VALUE(VALUE) ((VALUE) <= 0x7F) +/** + * @} + */ + +/** + * @} + */ + +/** @defgroup BKP_Exported_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup BKP_Exported_Functions + * @{ + */ + +void BKP_DeInit(void); +void BKP_TamperPinLevelConfig(uint16_t BKP_TamperPinLevel); +void BKP_TamperPinCmd(FunctionalState NewState); +void BKP_ITConfig(FunctionalState NewState); +void BKP_RTCOutputConfig(uint16_t BKP_RTCOutputSource); +void BKP_SetRTCCalibrationValue(uint8_t CalibrationValue); +void BKP_WriteBackupRegister(uint16_t BKP_DR, uint16_t Data); +uint16_t BKP_ReadBackupRegister(uint16_t BKP_DR); +FlagStatus BKP_GetFlagStatus(void); +void BKP_ClearFlag(void); +ITStatus BKP_GetITStatus(void); +void BKP_ClearITPendingBit(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F10x_BKP_H */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_can.h b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_can.h new file mode 100644 index 0000000000000000000000000000000000000000..a3e56c32ba1e807c9c2756a35f55cc5984b10c8c GIT binary patch literal 32768 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
    © COPYRIGHT 2011 STMicroelectronics
  • + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F10x_CEC_H +#define __STM32F10x_CEC_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f10x.h" + +/** @addtogroup STM32F10x_StdPeriph_Driver + * @{ + */ + +/** @addtogroup CEC + * @{ + */ + + +/** @defgroup CEC_Exported_Types + * @{ + */ + +/** + * @brief CEC Init structure definition + */ +typedef struct +{ + uint16_t CEC_BitTimingMode; /*!< Configures the CEC Bit Timing Error Mode. + This parameter can be a value of @ref CEC_BitTiming_Mode */ + uint16_t CEC_BitPeriodMode; /*!< Configures the CEC Bit Period Error Mode. + This parameter can be a value of @ref CEC_BitPeriod_Mode */ +}CEC_InitTypeDef; + +/** + * @} + */ + +/** @defgroup CEC_Exported_Constants + * @{ + */ + +/** @defgroup CEC_BitTiming_Mode + * @{ + */ +#define CEC_BitTimingStdMode ((uint16_t)0x00) /*!< Bit timing error Standard Mode */ +#define CEC_BitTimingErrFreeMode CEC_CFGR_BTEM /*!< Bit timing error Free Mode */ + +#define IS_CEC_BIT_TIMING_ERROR_MODE(MODE) (((MODE) == CEC_BitTimingStdMode) || \ + ((MODE) == CEC_BitTimingErrFreeMode)) +/** + * @} + */ + +/** @defgroup CEC_BitPeriod_Mode + * @{ + */ +#define CEC_BitPeriodStdMode ((uint16_t)0x00) /*!< Bit period error Standard Mode */ +#define CEC_BitPeriodFlexibleMode CEC_CFGR_BPEM /*!< Bit period error Flexible Mode */ + +#define IS_CEC_BIT_PERIOD_ERROR_MODE(MODE) (((MODE) == CEC_BitPeriodStdMode) || \ + ((MODE) == CEC_BitPeriodFlexibleMode)) +/** + * @} + */ + + +/** @defgroup CEC_interrupts_definition + * @{ + */ +#define CEC_IT_TERR CEC_CSR_TERR +#define CEC_IT_TBTRF CEC_CSR_TBTRF +#define CEC_IT_RERR CEC_CSR_RERR +#define CEC_IT_RBTF CEC_CSR_RBTF +#define IS_CEC_GET_IT(IT) (((IT) == CEC_IT_TERR) || ((IT) == CEC_IT_TBTRF) || \ + ((IT) == CEC_IT_RERR) || ((IT) == CEC_IT_RBTF)) +/** + * @} + */ + + +/** @defgroup CEC_Own_Address + * @{ + */ +#define IS_CEC_ADDRESS(ADDRESS) ((ADDRESS) < 0x10) +/** + * @} + */ + +/** @defgroup CEC_Prescaler + * @{ + */ +#define IS_CEC_PRESCALER(PRESCALER) ((PRESCALER) <= 0x3FFF) + +/** + * @} + */ + +/** @defgroup CEC_flags_definition + * @{ + */ + +/** + * @brief ESR register flags + */ +#define CEC_FLAG_BTE ((uint32_t)0x10010000) +#define CEC_FLAG_BPE ((uint32_t)0x10020000) +#define CEC_FLAG_RBTFE ((uint32_t)0x10040000) +#define CEC_FLAG_SBE ((uint32_t)0x10080000) +#define CEC_FLAG_ACKE ((uint32_t)0x10100000) +#define CEC_FLAG_LINE ((uint32_t)0x10200000) +#define CEC_FLAG_TBTFE ((uint32_t)0x10400000) + +/** + * @brief CSR register flags + */ +#define CEC_FLAG_TEOM ((uint32_t)0x00000002) +#define CEC_FLAG_TERR ((uint32_t)0x00000004) +#define CEC_FLAG_TBTRF ((uint32_t)0x00000008) +#define CEC_FLAG_RSOM ((uint32_t)0x00000010) +#define CEC_FLAG_REOM ((uint32_t)0x00000020) +#define CEC_FLAG_RERR ((uint32_t)0x00000040) +#define CEC_FLAG_RBTF ((uint32_t)0x00000080) + +#define IS_CEC_CLEAR_FLAG(FLAG) ((((FLAG) & (uint32_t)0xFFFFFF03) == 0x00) && ((FLAG) != 0x00)) + +#define IS_CEC_GET_FLAG(FLAG) (((FLAG) == CEC_FLAG_BTE) || ((FLAG) == CEC_FLAG_BPE) || \ + ((FLAG) == CEC_FLAG_RBTFE) || ((FLAG)== CEC_FLAG_SBE) || \ + ((FLAG) == CEC_FLAG_ACKE) || ((FLAG) == CEC_FLAG_LINE) || \ + ((FLAG) == CEC_FLAG_TBTFE) || ((FLAG) == CEC_FLAG_TEOM) || \ + ((FLAG) == CEC_FLAG_TERR) || ((FLAG) == CEC_FLAG_TBTRF) || \ + ((FLAG) == CEC_FLAG_RSOM) || ((FLAG) == CEC_FLAG_REOM) || \ + ((FLAG) == CEC_FLAG_RERR) || ((FLAG) == CEC_FLAG_RBTF)) + +/** + * @} + */ + +/** + * @} + */ + +/** @defgroup CEC_Exported_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup CEC_Exported_Functions + * @{ + */ +void CEC_DeInit(void); +void CEC_Init(CEC_InitTypeDef* CEC_InitStruct); +void CEC_Cmd(FunctionalState NewState); +void CEC_ITConfig(FunctionalState NewState); +void CEC_OwnAddressConfig(uint8_t CEC_OwnAddress); +void CEC_SetPrescaler(uint16_t CEC_Prescaler); +void CEC_SendDataByte(uint8_t Data); +uint8_t CEC_ReceiveDataByte(void); +void CEC_StartOfMessage(void); +void CEC_EndOfMessageCmd(FunctionalState NewState); +FlagStatus CEC_GetFlagStatus(uint32_t CEC_FLAG); +void CEC_ClearFlag(uint32_t CEC_FLAG); +ITStatus CEC_GetITStatus(uint8_t CEC_IT); +void CEC_ClearITPendingBit(uint16_t CEC_IT); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F10x_CEC_H */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_crc.h b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_crc.h new file mode 100644 index 0000000..3362fca --- /dev/null +++ b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_crc.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file stm32f10x_crc.h + * @author MCD Application Team + * @version V3.5.0 + * @date 11-March-2011 + * @brief This file contains all the functions prototypes for the CRC firmware + * library. + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

    © COPYRIGHT 2011 STMicroelectronics

    + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F10x_CRC_H +#define __STM32F10x_CRC_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f10x.h" + +/** @addtogroup STM32F10x_StdPeriph_Driver + * @{ + */ + +/** @addtogroup CRC + * @{ + */ + +/** @defgroup CRC_Exported_Types + * @{ + */ + +/** + * @} + */ + +/** @defgroup CRC_Exported_Constants + * @{ + */ + +/** + * @} + */ + +/** @defgroup CRC_Exported_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup CRC_Exported_Functions + * @{ + */ + +void CRC_ResetDR(void); +uint32_t CRC_CalcCRC(uint32_t Data); +uint32_t CRC_CalcBlockCRC(uint32_t pBuffer[], uint32_t BufferLength); +uint32_t CRC_GetCRC(void); +void CRC_SetIDRegister(uint8_t IDValue); +uint8_t CRC_GetIDRegister(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F10x_CRC_H */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_dac.h b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_dac.h new file mode 100644 index 0000000..174773c --- /dev/null +++ b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_dac.h @@ -0,0 +1,317 @@ +/** + ****************************************************************************** + * @file stm32f10x_dac.h + * @author MCD Application Team + * @version V3.5.0 + * @date 11-March-2011 + * @brief This file contains all the functions prototypes for the DAC firmware + * library. + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

    © COPYRIGHT 2011 STMicroelectronics

    + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F10x_DAC_H +#define __STM32F10x_DAC_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f10x.h" + +/** @addtogroup STM32F10x_StdPeriph_Driver + * @{ + */ + +/** @addtogroup DAC + * @{ + */ + +/** @defgroup DAC_Exported_Types + * @{ + */ + +/** + * @brief DAC Init structure definition + */ + +typedef struct +{ + uint32_t DAC_Trigger; /*!< Specifies the external trigger for the selected DAC channel. + This parameter can be a value of @ref DAC_trigger_selection */ + + uint32_t DAC_WaveGeneration; /*!< Specifies whether DAC channel noise waves or triangle waves + are generated, or whether no wave is generated. + This parameter can be a value of @ref DAC_wave_generation */ + + uint32_t DAC_LFSRUnmask_TriangleAmplitude; /*!< Specifies the LFSR mask for noise wave generation or + the maximum amplitude triangle generation for the DAC channel. + This parameter can be a value of @ref DAC_lfsrunmask_triangleamplitude */ + + uint32_t DAC_OutputBuffer; /*!< Specifies whether the DAC channel output buffer is enabled or disabled. + This parameter can be a value of @ref DAC_output_buffer */ +}DAC_InitTypeDef; + +/** + * @} + */ + +/** @defgroup DAC_Exported_Constants + * @{ + */ + +/** @defgroup DAC_trigger_selection + * @{ + */ + +#define DAC_Trigger_None ((uint32_t)0x00000000) /*!< Conversion is automatic once the DAC1_DHRxxxx register + has been loaded, and not by external trigger */ +#define DAC_Trigger_T6_TRGO ((uint32_t)0x00000004) /*!< TIM6 TRGO selected as external conversion trigger for DAC channel */ +#define DAC_Trigger_T8_TRGO ((uint32_t)0x0000000C) /*!< TIM8 TRGO selected as external conversion trigger for DAC channel + only in High-density devices*/ +#define DAC_Trigger_T3_TRGO ((uint32_t)0x0000000C) /*!< TIM8 TRGO selected as external conversion trigger for DAC channel + only in Connectivity line, Medium-density and Low-density Value Line devices */ +#define DAC_Trigger_T7_TRGO ((uint32_t)0x00000014) /*!< TIM7 TRGO selected as external conversion trigger for DAC channel */ +#define DAC_Trigger_T5_TRGO ((uint32_t)0x0000001C) /*!< TIM5 TRGO selected as external conversion trigger for DAC channel */ +#define DAC_Trigger_T15_TRGO ((uint32_t)0x0000001C) /*!< TIM15 TRGO selected as external conversion trigger for DAC channel + only in Medium-density and Low-density Value Line devices*/ +#define DAC_Trigger_T2_TRGO ((uint32_t)0x00000024) /*!< TIM2 TRGO selected as external conversion trigger for DAC channel */ +#define DAC_Trigger_T4_TRGO ((uint32_t)0x0000002C) /*!< TIM4 TRGO selected as external conversion trigger for DAC channel */ +#define DAC_Trigger_Ext_IT9 ((uint32_t)0x00000034) /*!< EXTI Line9 event selected as external conversion trigger for DAC channel */ +#define DAC_Trigger_Software ((uint32_t)0x0000003C) /*!< Conversion started by software trigger for DAC channel */ + +#define IS_DAC_TRIGGER(TRIGGER) (((TRIGGER) == DAC_Trigger_None) || \ + ((TRIGGER) == DAC_Trigger_T6_TRGO) || \ + ((TRIGGER) == DAC_Trigger_T8_TRGO) || \ + ((TRIGGER) == DAC_Trigger_T7_TRGO) || \ + ((TRIGGER) == DAC_Trigger_T5_TRGO) || \ + ((TRIGGER) == DAC_Trigger_T2_TRGO) || \ + ((TRIGGER) == DAC_Trigger_T4_TRGO) || \ + ((TRIGGER) == DAC_Trigger_Ext_IT9) || \ + ((TRIGGER) == DAC_Trigger_Software)) + +/** + * @} + */ + +/** @defgroup DAC_wave_generation + * @{ + */ + +#define DAC_WaveGeneration_None ((uint32_t)0x00000000) +#define DAC_WaveGeneration_Noise ((uint32_t)0x00000040) +#define DAC_WaveGeneration_Triangle ((uint32_t)0x00000080) +#define IS_DAC_GENERATE_WAVE(WAVE) (((WAVE) == DAC_WaveGeneration_None) || \ + ((WAVE) == DAC_WaveGeneration_Noise) || \ + ((WAVE) == DAC_WaveGeneration_Triangle)) +/** + * @} + */ + +/** @defgroup DAC_lfsrunmask_triangleamplitude + * @{ + */ + +#define DAC_LFSRUnmask_Bit0 ((uint32_t)0x00000000) /*!< Unmask DAC channel LFSR bit0 for noise wave generation */ +#define DAC_LFSRUnmask_Bits1_0 ((uint32_t)0x00000100) /*!< Unmask DAC channel LFSR bit[1:0] for noise wave generation */ +#define DAC_LFSRUnmask_Bits2_0 ((uint32_t)0x00000200) /*!< Unmask DAC channel LFSR bit[2:0] for noise wave generation */ +#define DAC_LFSRUnmask_Bits3_0 ((uint32_t)0x00000300) /*!< Unmask DAC channel LFSR bit[3:0] for noise wave generation */ +#define DAC_LFSRUnmask_Bits4_0 ((uint32_t)0x00000400) /*!< Unmask DAC channel LFSR bit[4:0] for noise wave generation */ +#define DAC_LFSRUnmask_Bits5_0 ((uint32_t)0x00000500) /*!< Unmask DAC channel LFSR bit[5:0] for noise wave generation */ +#define DAC_LFSRUnmask_Bits6_0 ((uint32_t)0x00000600) /*!< Unmask DAC channel LFSR bit[6:0] for noise wave generation */ +#define DAC_LFSRUnmask_Bits7_0 ((uint32_t)0x00000700) /*!< Unmask DAC channel LFSR bit[7:0] for noise wave generation */ +#define DAC_LFSRUnmask_Bits8_0 ((uint32_t)0x00000800) /*!< Unmask DAC channel LFSR bit[8:0] for noise wave generation */ +#define DAC_LFSRUnmask_Bits9_0 ((uint32_t)0x00000900) /*!< Unmask DAC channel LFSR bit[9:0] for noise wave generation */ +#define DAC_LFSRUnmask_Bits10_0 ((uint32_t)0x00000A00) /*!< Unmask DAC channel LFSR bit[10:0] for noise wave generation */ +#define DAC_LFSRUnmask_Bits11_0 ((uint32_t)0x00000B00) /*!< Unmask DAC channel LFSR bit[11:0] for noise wave generation */ +#define DAC_TriangleAmplitude_1 ((uint32_t)0x00000000) /*!< Select max triangle amplitude of 1 */ +#define DAC_TriangleAmplitude_3 ((uint32_t)0x00000100) /*!< Select max triangle amplitude of 3 */ +#define DAC_TriangleAmplitude_7 ((uint32_t)0x00000200) /*!< Select max triangle amplitude of 7 */ +#define DAC_TriangleAmplitude_15 ((uint32_t)0x00000300) /*!< Select max triangle amplitude of 15 */ +#define DAC_TriangleAmplitude_31 ((uint32_t)0x00000400) /*!< Select max triangle amplitude of 31 */ +#define DAC_TriangleAmplitude_63 ((uint32_t)0x00000500) /*!< Select max triangle amplitude of 63 */ +#define DAC_TriangleAmplitude_127 ((uint32_t)0x00000600) /*!< Select max triangle amplitude of 127 */ +#define DAC_TriangleAmplitude_255 ((uint32_t)0x00000700) /*!< Select max triangle amplitude of 255 */ +#define DAC_TriangleAmplitude_511 ((uint32_t)0x00000800) /*!< Select max triangle amplitude of 511 */ +#define DAC_TriangleAmplitude_1023 ((uint32_t)0x00000900) /*!< Select max triangle amplitude of 1023 */ +#define DAC_TriangleAmplitude_2047 ((uint32_t)0x00000A00) /*!< Select max triangle amplitude of 2047 */ +#define DAC_TriangleAmplitude_4095 ((uint32_t)0x00000B00) /*!< Select max triangle amplitude of 4095 */ + +#define IS_DAC_LFSR_UNMASK_TRIANGLE_AMPLITUDE(VALUE) (((VALUE) == DAC_LFSRUnmask_Bit0) || \ + ((VALUE) == DAC_LFSRUnmask_Bits1_0) || \ + ((VALUE) == DAC_LFSRUnmask_Bits2_0) || \ + ((VALUE) == DAC_LFSRUnmask_Bits3_0) || \ + ((VALUE) == DAC_LFSRUnmask_Bits4_0) || \ + ((VALUE) == DAC_LFSRUnmask_Bits5_0) || \ + ((VALUE) == DAC_LFSRUnmask_Bits6_0) || \ + ((VALUE) == DAC_LFSRUnmask_Bits7_0) || \ + ((VALUE) == DAC_LFSRUnmask_Bits8_0) || \ + ((VALUE) == DAC_LFSRUnmask_Bits9_0) || \ + ((VALUE) == DAC_LFSRUnmask_Bits10_0) || \ + ((VALUE) == DAC_LFSRUnmask_Bits11_0) || \ + ((VALUE) == DAC_TriangleAmplitude_1) || \ + ((VALUE) == DAC_TriangleAmplitude_3) || \ + ((VALUE) == DAC_TriangleAmplitude_7) || \ + ((VALUE) == DAC_TriangleAmplitude_15) || \ + ((VALUE) == DAC_TriangleAmplitude_31) || \ + ((VALUE) == DAC_TriangleAmplitude_63) || \ + ((VALUE) == DAC_TriangleAmplitude_127) || \ + ((VALUE) == DAC_TriangleAmplitude_255) || \ + ((VALUE) == DAC_TriangleAmplitude_511) || \ + ((VALUE) == DAC_TriangleAmplitude_1023) || \ + ((VALUE) == DAC_TriangleAmplitude_2047) || \ + ((VALUE) == DAC_TriangleAmplitude_4095)) +/** + * @} + */ + +/** @defgroup DAC_output_buffer + * @{ + */ + +#define DAC_OutputBuffer_Enable ((uint32_t)0x00000000) +#define DAC_OutputBuffer_Disable ((uint32_t)0x00000002) +#define IS_DAC_OUTPUT_BUFFER_STATE(STATE) (((STATE) == DAC_OutputBuffer_Enable) || \ + ((STATE) == DAC_OutputBuffer_Disable)) +/** + * @} + */ + +/** @defgroup DAC_Channel_selection + * @{ + */ + +#define DAC_Channel_1 ((uint32_t)0x00000000) +#define DAC_Channel_2 ((uint32_t)0x00000010) +#define IS_DAC_CHANNEL(CHANNEL) (((CHANNEL) == DAC_Channel_1) || \ + ((CHANNEL) == DAC_Channel_2)) +/** + * @} + */ + +/** @defgroup DAC_data_alignment + * @{ + */ + +#define DAC_Align_12b_R ((uint32_t)0x00000000) +#define DAC_Align_12b_L ((uint32_t)0x00000004) +#define DAC_Align_8b_R ((uint32_t)0x00000008) +#define IS_DAC_ALIGN(ALIGN) (((ALIGN) == DAC_Align_12b_R) || \ + ((ALIGN) == DAC_Align_12b_L) || \ + ((ALIGN) == DAC_Align_8b_R)) +/** + * @} + */ + +/** @defgroup DAC_wave_generation + * @{ + */ + +#define DAC_Wave_Noise ((uint32_t)0x00000040) +#define DAC_Wave_Triangle ((uint32_t)0x00000080) +#define IS_DAC_WAVE(WAVE) (((WAVE) == DAC_Wave_Noise) || \ + ((WAVE) == DAC_Wave_Triangle)) +/** + * @} + */ + +/** @defgroup DAC_data + * @{ + */ + +#define IS_DAC_DATA(DATA) ((DATA) <= 0xFFF0) +/** + * @} + */ +#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL) +/** @defgroup DAC_interrupts_definition + * @{ + */ + +#define DAC_IT_DMAUDR ((uint32_t)0x00002000) +#define IS_DAC_IT(IT) (((IT) == DAC_IT_DMAUDR)) + +/** + * @} + */ + +/** @defgroup DAC_flags_definition + * @{ + */ + +#define DAC_FLAG_DMAUDR ((uint32_t)0x00002000) +#define IS_DAC_FLAG(FLAG) (((FLAG) == DAC_FLAG_DMAUDR)) + +/** + * @} + */ +#endif + +/** + * @} + */ + +/** @defgroup DAC_Exported_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup DAC_Exported_Functions + * @{ + */ + +void DAC_DeInit(void); +void DAC_Init(uint32_t DAC_Channel, DAC_InitTypeDef* DAC_InitStruct); +void DAC_StructInit(DAC_InitTypeDef* DAC_InitStruct); +void DAC_Cmd(uint32_t DAC_Channel, FunctionalState NewState); +#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL) +void DAC_ITConfig(uint32_t DAC_Channel, uint32_t DAC_IT, FunctionalState NewState); +#endif +void DAC_DMACmd(uint32_t DAC_Channel, FunctionalState NewState); +void DAC_SoftwareTriggerCmd(uint32_t DAC_Channel, FunctionalState NewState); +void DAC_DualSoftwareTriggerCmd(FunctionalState NewState); +void DAC_WaveGenerationCmd(uint32_t DAC_Channel, uint32_t DAC_Wave, FunctionalState NewState); +void DAC_SetChannel1Data(uint32_t DAC_Align, uint16_t Data); +void DAC_SetChannel2Data(uint32_t DAC_Align, uint16_t Data); +void DAC_SetDualChannelData(uint32_t DAC_Align, uint16_t Data2, uint16_t Data1); +uint16_t DAC_GetDataOutputValue(uint32_t DAC_Channel); +#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL) +FlagStatus DAC_GetFlagStatus(uint32_t DAC_Channel, uint32_t DAC_FLAG); +void DAC_ClearFlag(uint32_t DAC_Channel, uint32_t DAC_FLAG); +ITStatus DAC_GetITStatus(uint32_t DAC_Channel, uint32_t DAC_IT); +void DAC_ClearITPendingBit(uint32_t DAC_Channel, uint32_t DAC_IT); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /*__STM32F10x_DAC_H */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_dbgmcu.h b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_dbgmcu.h new file mode 100644 index 0000000..89ceb9a --- /dev/null +++ b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_dbgmcu.h @@ -0,0 +1,119 @@ +/** + ****************************************************************************** + * @file stm32f10x_dbgmcu.h + * @author MCD Application Team + * @version V3.5.0 + * @date 11-March-2011 + * @brief This file contains all the functions prototypes for the DBGMCU + * firmware library. + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

    © COPYRIGHT 2011 STMicroelectronics

    + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F10x_DBGMCU_H +#define __STM32F10x_DBGMCU_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f10x.h" + +/** @addtogroup STM32F10x_StdPeriph_Driver + * @{ + */ + +/** @addtogroup DBGMCU + * @{ + */ + +/** @defgroup DBGMCU_Exported_Types + * @{ + */ + +/** + * @} + */ + +/** @defgroup DBGMCU_Exported_Constants + * @{ + */ + +#define DBGMCU_SLEEP ((uint32_t)0x00000001) +#define DBGMCU_STOP ((uint32_t)0x00000002) +#define DBGMCU_STANDBY ((uint32_t)0x00000004) +#define DBGMCU_IWDG_STOP ((uint32_t)0x00000100) +#define DBGMCU_WWDG_STOP ((uint32_t)0x00000200) +#define DBGMCU_TIM1_STOP ((uint32_t)0x00000400) +#define DBGMCU_TIM2_STOP ((uint32_t)0x00000800) +#define DBGMCU_TIM3_STOP ((uint32_t)0x00001000) +#define DBGMCU_TIM4_STOP ((uint32_t)0x00002000) +#define DBGMCU_CAN1_STOP ((uint32_t)0x00004000) +#define DBGMCU_I2C1_SMBUS_TIMEOUT ((uint32_t)0x00008000) +#define DBGMCU_I2C2_SMBUS_TIMEOUT ((uint32_t)0x00010000) +#define DBGMCU_TIM8_STOP ((uint32_t)0x00020000) +#define DBGMCU_TIM5_STOP ((uint32_t)0x00040000) +#define DBGMCU_TIM6_STOP ((uint32_t)0x00080000) +#define DBGMCU_TIM7_STOP ((uint32_t)0x00100000) +#define DBGMCU_CAN2_STOP ((uint32_t)0x00200000) +#define DBGMCU_TIM15_STOP ((uint32_t)0x00400000) +#define DBGMCU_TIM16_STOP ((uint32_t)0x00800000) +#define DBGMCU_TIM17_STOP ((uint32_t)0x01000000) +#define DBGMCU_TIM12_STOP ((uint32_t)0x02000000) +#define DBGMCU_TIM13_STOP ((uint32_t)0x04000000) +#define DBGMCU_TIM14_STOP ((uint32_t)0x08000000) +#define DBGMCU_TIM9_STOP ((uint32_t)0x10000000) +#define DBGMCU_TIM10_STOP ((uint32_t)0x20000000) +#define DBGMCU_TIM11_STOP ((uint32_t)0x40000000) + +#define IS_DBGMCU_PERIPH(PERIPH) ((((PERIPH) & 0x800000F8) == 0x00) && ((PERIPH) != 0x00)) +/** + * @} + */ + +/** @defgroup DBGMCU_Exported_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup DBGMCU_Exported_Functions + * @{ + */ + +uint32_t DBGMCU_GetREVID(void); +uint32_t DBGMCU_GetDEVID(void); +void DBGMCU_Config(uint32_t DBGMCU_Periph, FunctionalState NewState); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F10x_DBGMCU_H */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_dma.h b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_dma.h new file mode 100644 index 0000000..14275fe --- /dev/null +++ b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_dma.h @@ -0,0 +1,439 @@ +/** + ****************************************************************************** + * @file stm32f10x_dma.h + * @author MCD Application Team + * @version V3.5.0 + * @date 11-March-2011 + * @brief This file contains all the functions prototypes for the DMA firmware + * library. + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

    © COPYRIGHT 2011 STMicroelectronics

    + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F10x_DMA_H +#define __STM32F10x_DMA_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f10x.h" + +/** @addtogroup STM32F10x_StdPeriph_Driver + * @{ + */ + +/** @addtogroup DMA + * @{ + */ + +/** @defgroup DMA_Exported_Types + * @{ + */ + +/** + * @brief DMA Init structure definition + */ + +typedef struct +{ + uint32_t DMA_PeripheralBaseAddr; /*!< Specifies the peripheral base address for DMAy Channelx. */ + + uint32_t DMA_MemoryBaseAddr; /*!< Specifies the memory base address for DMAy Channelx. */ + + uint32_t DMA_DIR; /*!< Specifies if the peripheral is the source or destination. + This parameter can be a value of @ref DMA_data_transfer_direction */ + + uint32_t DMA_BufferSize; /*!< Specifies the buffer size, in data unit, of the specified Channel. + The data unit is equal to the configuration set in DMA_PeripheralDataSize + or DMA_MemoryDataSize members depending in the transfer direction. */ + + uint32_t DMA_PeripheralInc; /*!< Specifies whether the Peripheral address register is incremented or not. + This parameter can be a value of @ref DMA_peripheral_incremented_mode */ + + uint32_t DMA_MemoryInc; /*!< Specifies whether the memory address register is incremented or not. + This parameter can be a value of @ref DMA_memory_incremented_mode */ + + uint32_t DMA_PeripheralDataSize; /*!< Specifies the Peripheral data width. + This parameter can be a value of @ref DMA_peripheral_data_size */ + + uint32_t DMA_MemoryDataSize; /*!< Specifies the Memory data width. + This parameter can be a value of @ref DMA_memory_data_size */ + + uint32_t DMA_Mode; /*!< Specifies the operation mode of the DMAy Channelx. + This parameter can be a value of @ref DMA_circular_normal_mode. + @note: The circular buffer mode cannot be used if the memory-to-memory + data transfer is configured on the selected Channel */ + + uint32_t DMA_Priority; /*!< Specifies the software priority for the DMAy Channelx. + This parameter can be a value of @ref DMA_priority_level */ + + uint32_t DMA_M2M; /*!< Specifies if the DMAy Channelx will be used in memory-to-memory transfer. + This parameter can be a value of @ref DMA_memory_to_memory */ +}DMA_InitTypeDef; + +/** + * @} + */ + +/** @defgroup DMA_Exported_Constants + * @{ + */ + +#define IS_DMA_ALL_PERIPH(PERIPH) (((PERIPH) == DMA1_Channel1) || \ + ((PERIPH) == DMA1_Channel2) || \ + ((PERIPH) == DMA1_Channel3) || \ + ((PERIPH) == DMA1_Channel4) || \ + ((PERIPH) == DMA1_Channel5) || \ + ((PERIPH) == DMA1_Channel6) || \ + ((PERIPH) == DMA1_Channel7) || \ + ((PERIPH) == DMA2_Channel1) || \ + ((PERIPH) == DMA2_Channel2) || \ + ((PERIPH) == DMA2_Channel3) || \ + ((PERIPH) == DMA2_Channel4) || \ + ((PERIPH) == DMA2_Channel5)) + +/** @defgroup DMA_data_transfer_direction + * @{ + */ + +#define DMA_DIR_PeripheralDST ((uint32_t)0x00000010) +#define DMA_DIR_PeripheralSRC ((uint32_t)0x00000000) +#define IS_DMA_DIR(DIR) (((DIR) == DMA_DIR_PeripheralDST) || \ + ((DIR) == DMA_DIR_PeripheralSRC)) +/** + * @} + */ + +/** @defgroup DMA_peripheral_incremented_mode + * @{ + */ + +#define DMA_PeripheralInc_Enable ((uint32_t)0x00000040) +#define DMA_PeripheralInc_Disable ((uint32_t)0x00000000) +#define IS_DMA_PERIPHERAL_INC_STATE(STATE) (((STATE) == DMA_PeripheralInc_Enable) || \ + ((STATE) == DMA_PeripheralInc_Disable)) +/** + * @} + */ + +/** @defgroup DMA_memory_incremented_mode + * @{ + */ + +#define DMA_MemoryInc_Enable ((uint32_t)0x00000080) +#define DMA_MemoryInc_Disable ((uint32_t)0x00000000) +#define IS_DMA_MEMORY_INC_STATE(STATE) (((STATE) == DMA_MemoryInc_Enable) || \ + ((STATE) == DMA_MemoryInc_Disable)) +/** + * @} + */ + +/** @defgroup DMA_peripheral_data_size + * @{ + */ + +#define DMA_PeripheralDataSize_Byte ((uint32_t)0x00000000) +#define DMA_PeripheralDataSize_HalfWord ((uint32_t)0x00000100) +#define DMA_PeripheralDataSize_Word ((uint32_t)0x00000200) +#define IS_DMA_PERIPHERAL_DATA_SIZE(SIZE) (((SIZE) == DMA_PeripheralDataSize_Byte) || \ + ((SIZE) == DMA_PeripheralDataSize_HalfWord) || \ + ((SIZE) == DMA_PeripheralDataSize_Word)) +/** + * @} + */ + +/** @defgroup DMA_memory_data_size + * @{ + */ + +#define DMA_MemoryDataSize_Byte ((uint32_t)0x00000000) +#define DMA_MemoryDataSize_HalfWord ((uint32_t)0x00000400) +#define DMA_MemoryDataSize_Word ((uint32_t)0x00000800) +#define IS_DMA_MEMORY_DATA_SIZE(SIZE) (((SIZE) == DMA_MemoryDataSize_Byte) || \ + ((SIZE) == DMA_MemoryDataSize_HalfWord) || \ + ((SIZE) == DMA_MemoryDataSize_Word)) +/** + * @} + */ + +/** @defgroup DMA_circular_normal_mode + * @{ + */ + +#define DMA_Mode_Circular ((uint32_t)0x00000020) +#define DMA_Mode_Normal ((uint32_t)0x00000000) +#define IS_DMA_MODE(MODE) (((MODE) == DMA_Mode_Circular) || ((MODE) == DMA_Mode_Normal)) +/** + * @} + */ + +/** @defgroup DMA_priority_level + * @{ + */ + +#define DMA_Priority_VeryHigh ((uint32_t)0x00003000) +#define DMA_Priority_High ((uint32_t)0x00002000) +#define DMA_Priority_Medium ((uint32_t)0x00001000) +#define DMA_Priority_Low ((uint32_t)0x00000000) +#define IS_DMA_PRIORITY(PRIORITY) (((PRIORITY) == DMA_Priority_VeryHigh) || \ + ((PRIORITY) == DMA_Priority_High) || \ + ((PRIORITY) == DMA_Priority_Medium) || \ + ((PRIORITY) == DMA_Priority_Low)) +/** + * @} + */ + +/** @defgroup DMA_memory_to_memory + * @{ + */ + +#define DMA_M2M_Enable ((uint32_t)0x00004000) +#define DMA_M2M_Disable ((uint32_t)0x00000000) +#define IS_DMA_M2M_STATE(STATE) (((STATE) == DMA_M2M_Enable) || ((STATE) == DMA_M2M_Disable)) + +/** + * @} + */ + +/** @defgroup DMA_interrupts_definition + * @{ + */ + +#define DMA_IT_TC ((uint32_t)0x00000002) +#define DMA_IT_HT ((uint32_t)0x00000004) +#define DMA_IT_TE ((uint32_t)0x00000008) +#define IS_DMA_CONFIG_IT(IT) ((((IT) & 0xFFFFFFF1) == 0x00) && ((IT) != 0x00)) + +#define DMA1_IT_GL1 ((uint32_t)0x00000001) +#define DMA1_IT_TC1 ((uint32_t)0x00000002) +#define DMA1_IT_HT1 ((uint32_t)0x00000004) +#define DMA1_IT_TE1 ((uint32_t)0x00000008) +#define DMA1_IT_GL2 ((uint32_t)0x00000010) +#define DMA1_IT_TC2 ((uint32_t)0x00000020) +#define DMA1_IT_HT2 ((uint32_t)0x00000040) +#define DMA1_IT_TE2 ((uint32_t)0x00000080) +#define DMA1_IT_GL3 ((uint32_t)0x00000100) +#define DMA1_IT_TC3 ((uint32_t)0x00000200) +#define DMA1_IT_HT3 ((uint32_t)0x00000400) +#define DMA1_IT_TE3 ((uint32_t)0x00000800) +#define DMA1_IT_GL4 ((uint32_t)0x00001000) +#define DMA1_IT_TC4 ((uint32_t)0x00002000) +#define DMA1_IT_HT4 ((uint32_t)0x00004000) +#define DMA1_IT_TE4 ((uint32_t)0x00008000) +#define DMA1_IT_GL5 ((uint32_t)0x00010000) +#define DMA1_IT_TC5 ((uint32_t)0x00020000) +#define DMA1_IT_HT5 ((uint32_t)0x00040000) +#define DMA1_IT_TE5 ((uint32_t)0x00080000) +#define DMA1_IT_GL6 ((uint32_t)0x00100000) +#define DMA1_IT_TC6 ((uint32_t)0x00200000) +#define DMA1_IT_HT6 ((uint32_t)0x00400000) +#define DMA1_IT_TE6 ((uint32_t)0x00800000) +#define DMA1_IT_GL7 ((uint32_t)0x01000000) +#define DMA1_IT_TC7 ((uint32_t)0x02000000) +#define DMA1_IT_HT7 ((uint32_t)0x04000000) +#define DMA1_IT_TE7 ((uint32_t)0x08000000) + +#define DMA2_IT_GL1 ((uint32_t)0x10000001) +#define DMA2_IT_TC1 ((uint32_t)0x10000002) +#define DMA2_IT_HT1 ((uint32_t)0x10000004) +#define DMA2_IT_TE1 ((uint32_t)0x10000008) +#define DMA2_IT_GL2 ((uint32_t)0x10000010) +#define DMA2_IT_TC2 ((uint32_t)0x10000020) +#define DMA2_IT_HT2 ((uint32_t)0x10000040) +#define DMA2_IT_TE2 ((uint32_t)0x10000080) +#define DMA2_IT_GL3 ((uint32_t)0x10000100) +#define DMA2_IT_TC3 ((uint32_t)0x10000200) +#define DMA2_IT_HT3 ((uint32_t)0x10000400) +#define DMA2_IT_TE3 ((uint32_t)0x10000800) +#define DMA2_IT_GL4 ((uint32_t)0x10001000) +#define DMA2_IT_TC4 ((uint32_t)0x10002000) +#define DMA2_IT_HT4 ((uint32_t)0x10004000) +#define DMA2_IT_TE4 ((uint32_t)0x10008000) +#define DMA2_IT_GL5 ((uint32_t)0x10010000) +#define DMA2_IT_TC5 ((uint32_t)0x10020000) +#define DMA2_IT_HT5 ((uint32_t)0x10040000) +#define DMA2_IT_TE5 ((uint32_t)0x10080000) + +#define IS_DMA_CLEAR_IT(IT) (((((IT) & 0xF0000000) == 0x00) || (((IT) & 0xEFF00000) == 0x00)) && ((IT) != 0x00)) + +#define IS_DMA_GET_IT(IT) (((IT) == DMA1_IT_GL1) || ((IT) == DMA1_IT_TC1) || \ + ((IT) == DMA1_IT_HT1) || ((IT) == DMA1_IT_TE1) || \ + ((IT) == DMA1_IT_GL2) || ((IT) == DMA1_IT_TC2) || \ + ((IT) == DMA1_IT_HT2) || ((IT) == DMA1_IT_TE2) || \ + ((IT) == DMA1_IT_GL3) || ((IT) == DMA1_IT_TC3) || \ + ((IT) == DMA1_IT_HT3) || ((IT) == DMA1_IT_TE3) || \ + ((IT) == DMA1_IT_GL4) || ((IT) == DMA1_IT_TC4) || \ + ((IT) == DMA1_IT_HT4) || ((IT) == DMA1_IT_TE4) || \ + ((IT) == DMA1_IT_GL5) || ((IT) == DMA1_IT_TC5) || \ + ((IT) == DMA1_IT_HT5) || ((IT) == DMA1_IT_TE5) || \ + ((IT) == DMA1_IT_GL6) || ((IT) == DMA1_IT_TC6) || \ + ((IT) == DMA1_IT_HT6) || ((IT) == DMA1_IT_TE6) || \ + ((IT) == DMA1_IT_GL7) || ((IT) == DMA1_IT_TC7) || \ + ((IT) == DMA1_IT_HT7) || ((IT) == DMA1_IT_TE7) || \ + ((IT) == DMA2_IT_GL1) || ((IT) == DMA2_IT_TC1) || \ + ((IT) == DMA2_IT_HT1) || ((IT) == DMA2_IT_TE1) || \ + ((IT) == DMA2_IT_GL2) || ((IT) == DMA2_IT_TC2) || \ + ((IT) == DMA2_IT_HT2) || ((IT) == DMA2_IT_TE2) || \ + ((IT) == DMA2_IT_GL3) || ((IT) == DMA2_IT_TC3) || \ + ((IT) == DMA2_IT_HT3) || ((IT) == DMA2_IT_TE3) || \ + ((IT) == DMA2_IT_GL4) || ((IT) == DMA2_IT_TC4) || \ + ((IT) == DMA2_IT_HT4) || ((IT) == DMA2_IT_TE4) || \ + ((IT) == DMA2_IT_GL5) || ((IT) == DMA2_IT_TC5) || \ + ((IT) == DMA2_IT_HT5) || ((IT) == DMA2_IT_TE5)) + +/** + * @} + */ + +/** @defgroup DMA_flags_definition + * @{ + */ +#define DMA1_FLAG_GL1 ((uint32_t)0x00000001) +#define DMA1_FLAG_TC1 ((uint32_t)0x00000002) +#define DMA1_FLAG_HT1 ((uint32_t)0x00000004) +#define DMA1_FLAG_TE1 ((uint32_t)0x00000008) +#define DMA1_FLAG_GL2 ((uint32_t)0x00000010) +#define DMA1_FLAG_TC2 ((uint32_t)0x00000020) +#define DMA1_FLAG_HT2 ((uint32_t)0x00000040) +#define DMA1_FLAG_TE2 ((uint32_t)0x00000080) +#define DMA1_FLAG_GL3 ((uint32_t)0x00000100) +#define DMA1_FLAG_TC3 ((uint32_t)0x00000200) +#define DMA1_FLAG_HT3 ((uint32_t)0x00000400) +#define DMA1_FLAG_TE3 ((uint32_t)0x00000800) +#define DMA1_FLAG_GL4 ((uint32_t)0x00001000) +#define DMA1_FLAG_TC4 ((uint32_t)0x00002000) +#define DMA1_FLAG_HT4 ((uint32_t)0x00004000) +#define DMA1_FLAG_TE4 ((uint32_t)0x00008000) +#define DMA1_FLAG_GL5 ((uint32_t)0x00010000) +#define DMA1_FLAG_TC5 ((uint32_t)0x00020000) +#define DMA1_FLAG_HT5 ((uint32_t)0x00040000) +#define DMA1_FLAG_TE5 ((uint32_t)0x00080000) +#define DMA1_FLAG_GL6 ((uint32_t)0x00100000) +#define DMA1_FLAG_TC6 ((uint32_t)0x00200000) +#define DMA1_FLAG_HT6 ((uint32_t)0x00400000) +#define DMA1_FLAG_TE6 ((uint32_t)0x00800000) +#define DMA1_FLAG_GL7 ((uint32_t)0x01000000) +#define DMA1_FLAG_TC7 ((uint32_t)0x02000000) +#define DMA1_FLAG_HT7 ((uint32_t)0x04000000) +#define DMA1_FLAG_TE7 ((uint32_t)0x08000000) + +#define DMA2_FLAG_GL1 ((uint32_t)0x10000001) +#define DMA2_FLAG_TC1 ((uint32_t)0x10000002) +#define DMA2_FLAG_HT1 ((uint32_t)0x10000004) +#define DMA2_FLAG_TE1 ((uint32_t)0x10000008) +#define DMA2_FLAG_GL2 ((uint32_t)0x10000010) +#define DMA2_FLAG_TC2 ((uint32_t)0x10000020) +#define DMA2_FLAG_HT2 ((uint32_t)0x10000040) +#define DMA2_FLAG_TE2 ((uint32_t)0x10000080) +#define DMA2_FLAG_GL3 ((uint32_t)0x10000100) +#define DMA2_FLAG_TC3 ((uint32_t)0x10000200) +#define DMA2_FLAG_HT3 ((uint32_t)0x10000400) +#define DMA2_FLAG_TE3 ((uint32_t)0x10000800) +#define DMA2_FLAG_GL4 ((uint32_t)0x10001000) +#define DMA2_FLAG_TC4 ((uint32_t)0x10002000) +#define DMA2_FLAG_HT4 ((uint32_t)0x10004000) +#define DMA2_FLAG_TE4 ((uint32_t)0x10008000) +#define DMA2_FLAG_GL5 ((uint32_t)0x10010000) +#define DMA2_FLAG_TC5 ((uint32_t)0x10020000) +#define DMA2_FLAG_HT5 ((uint32_t)0x10040000) +#define DMA2_FLAG_TE5 ((uint32_t)0x10080000) + +#define IS_DMA_CLEAR_FLAG(FLAG) (((((FLAG) & 0xF0000000) == 0x00) || (((FLAG) & 0xEFF00000) == 0x00)) && ((FLAG) != 0x00)) + +#define IS_DMA_GET_FLAG(FLAG) (((FLAG) == DMA1_FLAG_GL1) || ((FLAG) == DMA1_FLAG_TC1) || \ + ((FLAG) == DMA1_FLAG_HT1) || ((FLAG) == DMA1_FLAG_TE1) || \ + ((FLAG) == DMA1_FLAG_GL2) || ((FLAG) == DMA1_FLAG_TC2) || \ + ((FLAG) == DMA1_FLAG_HT2) || ((FLAG) == DMA1_FLAG_TE2) || \ + ((FLAG) == DMA1_FLAG_GL3) || ((FLAG) == DMA1_FLAG_TC3) || \ + ((FLAG) == DMA1_FLAG_HT3) || ((FLAG) == DMA1_FLAG_TE3) || \ + ((FLAG) == DMA1_FLAG_GL4) || ((FLAG) == DMA1_FLAG_TC4) || \ + ((FLAG) == DMA1_FLAG_HT4) || ((FLAG) == DMA1_FLAG_TE4) || \ + ((FLAG) == DMA1_FLAG_GL5) || ((FLAG) == DMA1_FLAG_TC5) || \ + ((FLAG) == DMA1_FLAG_HT5) || ((FLAG) == DMA1_FLAG_TE5) || \ + ((FLAG) == DMA1_FLAG_GL6) || ((FLAG) == DMA1_FLAG_TC6) || \ + ((FLAG) == DMA1_FLAG_HT6) || ((FLAG) == DMA1_FLAG_TE6) || \ + ((FLAG) == DMA1_FLAG_GL7) || ((FLAG) == DMA1_FLAG_TC7) || \ + ((FLAG) == DMA1_FLAG_HT7) || ((FLAG) == DMA1_FLAG_TE7) || \ + ((FLAG) == DMA2_FLAG_GL1) || ((FLAG) == DMA2_FLAG_TC1) || \ + ((FLAG) == DMA2_FLAG_HT1) || ((FLAG) == DMA2_FLAG_TE1) || \ + ((FLAG) == DMA2_FLAG_GL2) || ((FLAG) == DMA2_FLAG_TC2) || \ + ((FLAG) == DMA2_FLAG_HT2) || ((FLAG) == DMA2_FLAG_TE2) || \ + ((FLAG) == DMA2_FLAG_GL3) || ((FLAG) == DMA2_FLAG_TC3) || \ + ((FLAG) == DMA2_FLAG_HT3) || ((FLAG) == DMA2_FLAG_TE3) || \ + ((FLAG) == DMA2_FLAG_GL4) || ((FLAG) == DMA2_FLAG_TC4) || \ + ((FLAG) == DMA2_FLAG_HT4) || ((FLAG) == DMA2_FLAG_TE4) || \ + ((FLAG) == DMA2_FLAG_GL5) || ((FLAG) == DMA2_FLAG_TC5) || \ + ((FLAG) == DMA2_FLAG_HT5) || ((FLAG) == DMA2_FLAG_TE5)) +/** + * @} + */ + +/** @defgroup DMA_Buffer_Size + * @{ + */ + +#define IS_DMA_BUFFER_SIZE(SIZE) (((SIZE) >= 0x1) && ((SIZE) < 0x10000)) + +/** + * @} + */ + +/** + * @} + */ + +/** @defgroup DMA_Exported_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup DMA_Exported_Functions + * @{ + */ + +void DMA_DeInit(DMA_Channel_TypeDef* DMAy_Channelx); +void DMA_Init(DMA_Channel_TypeDef* DMAy_Channelx, DMA_InitTypeDef* DMA_InitStruct); +void DMA_StructInit(DMA_InitTypeDef* DMA_InitStruct); +void DMA_Cmd(DMA_Channel_TypeDef* DMAy_Channelx, FunctionalState NewState); +void DMA_ITConfig(DMA_Channel_TypeDef* DMAy_Channelx, uint32_t DMA_IT, FunctionalState NewState); +void DMA_SetCurrDataCounter(DMA_Channel_TypeDef* DMAy_Channelx, uint16_t DataNumber); +uint16_t DMA_GetCurrDataCounter(DMA_Channel_TypeDef* DMAy_Channelx); +FlagStatus DMA_GetFlagStatus(uint32_t DMAy_FLAG); +void DMA_ClearFlag(uint32_t DMAy_FLAG); +ITStatus DMA_GetITStatus(uint32_t DMAy_IT); +void DMA_ClearITPendingBit(uint32_t DMAy_IT); + +#ifdef __cplusplus +} +#endif + +#endif /*__STM32F10x_DMA_H */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_exti.h b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_exti.h new file mode 100644 index 0000000..bb9d7f6 --- /dev/null +++ b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_exti.h @@ -0,0 +1,184 @@ +/** + ****************************************************************************** + * @file stm32f10x_exti.h + * @author MCD Application Team + * @version V3.5.0 + * @date 11-March-2011 + * @brief This file contains all the functions prototypes for the EXTI firmware + * library. + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

    © COPYRIGHT 2011 STMicroelectronics

    + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F10x_EXTI_H +#define __STM32F10x_EXTI_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f10x.h" + +/** @addtogroup STM32F10x_StdPeriph_Driver + * @{ + */ + +/** @addtogroup EXTI + * @{ + */ + +/** @defgroup EXTI_Exported_Types + * @{ + */ + +/** + * @brief EXTI mode enumeration + */ + +typedef enum +{ + EXTI_Mode_Interrupt = 0x00, + EXTI_Mode_Event = 0x04 +}EXTIMode_TypeDef; + +#define IS_EXTI_MODE(MODE) (((MODE) == EXTI_Mode_Interrupt) || ((MODE) == EXTI_Mode_Event)) + +/** + * @brief EXTI Trigger enumeration + */ + +typedef enum +{ + EXTI_Trigger_Rising = 0x08, + EXTI_Trigger_Falling = 0x0C, + EXTI_Trigger_Rising_Falling = 0x10 +}EXTITrigger_TypeDef; + +#define IS_EXTI_TRIGGER(TRIGGER) (((TRIGGER) == EXTI_Trigger_Rising) || \ + ((TRIGGER) == EXTI_Trigger_Falling) || \ + ((TRIGGER) == EXTI_Trigger_Rising_Falling)) +/** + * @brief EXTI Init Structure definition + */ + +typedef struct +{ + uint32_t EXTI_Line; /*!< Specifies the EXTI lines to be enabled or disabled. + This parameter can be any combination of @ref EXTI_Lines */ + + EXTIMode_TypeDef EXTI_Mode; /*!< Specifies the mode for the EXTI lines. + This parameter can be a value of @ref EXTIMode_TypeDef */ + + EXTITrigger_TypeDef EXTI_Trigger; /*!< Specifies the trigger signal active edge for the EXTI lines. + This parameter can be a value of @ref EXTIMode_TypeDef */ + + FunctionalState EXTI_LineCmd; /*!< Specifies the new state of the selected EXTI lines. + This parameter can be set either to ENABLE or DISABLE */ +}EXTI_InitTypeDef; + +/** + * @} + */ + +/** @defgroup EXTI_Exported_Constants + * @{ + */ + +/** @defgroup EXTI_Lines + * @{ + */ + +#define EXTI_Line0 ((uint32_t)0x00001) /*!< External interrupt line 0 */ +#define EXTI_Line1 ((uint32_t)0x00002) /*!< External interrupt line 1 */ +#define EXTI_Line2 ((uint32_t)0x00004) /*!< External interrupt line 2 */ +#define EXTI_Line3 ((uint32_t)0x00008) /*!< External interrupt line 3 */ +#define EXTI_Line4 ((uint32_t)0x00010) /*!< External interrupt line 4 */ +#define EXTI_Line5 ((uint32_t)0x00020) /*!< External interrupt line 5 */ +#define EXTI_Line6 ((uint32_t)0x00040) /*!< External interrupt line 6 */ +#define EXTI_Line7 ((uint32_t)0x00080) /*!< External interrupt line 7 */ +#define EXTI_Line8 ((uint32_t)0x00100) /*!< External interrupt line 8 */ +#define EXTI_Line9 ((uint32_t)0x00200) /*!< External interrupt line 9 */ +#define EXTI_Line10 ((uint32_t)0x00400) /*!< External interrupt line 10 */ +#define EXTI_Line11 ((uint32_t)0x00800) /*!< External interrupt line 11 */ +#define EXTI_Line12 ((uint32_t)0x01000) /*!< External interrupt line 12 */ +#define EXTI_Line13 ((uint32_t)0x02000) /*!< External interrupt line 13 */ +#define EXTI_Line14 ((uint32_t)0x04000) /*!< External interrupt line 14 */ +#define EXTI_Line15 ((uint32_t)0x08000) /*!< External interrupt line 15 */ +#define EXTI_Line16 ((uint32_t)0x10000) /*!< External interrupt line 16 Connected to the PVD Output */ +#define EXTI_Line17 ((uint32_t)0x20000) /*!< External interrupt line 17 Connected to the RTC Alarm event */ +#define EXTI_Line18 ((uint32_t)0x40000) /*!< External interrupt line 18 Connected to the USB Device/USB OTG FS + Wakeup from suspend event */ +#define EXTI_Line19 ((uint32_t)0x80000) /*!< External interrupt line 19 Connected to the Ethernet Wakeup event */ + +#define IS_EXTI_LINE(LINE) ((((LINE) & (uint32_t)0xFFF00000) == 0x00) && ((LINE) != (uint16_t)0x00)) +#define IS_GET_EXTI_LINE(LINE) (((LINE) == EXTI_Line0) || ((LINE) == EXTI_Line1) || \ + ((LINE) == EXTI_Line2) || ((LINE) == EXTI_Line3) || \ + ((LINE) == EXTI_Line4) || ((LINE) == EXTI_Line5) || \ + ((LINE) == EXTI_Line6) || ((LINE) == EXTI_Line7) || \ + ((LINE) == EXTI_Line8) || ((LINE) == EXTI_Line9) || \ + ((LINE) == EXTI_Line10) || ((LINE) == EXTI_Line11) || \ + ((LINE) == EXTI_Line12) || ((LINE) == EXTI_Line13) || \ + ((LINE) == EXTI_Line14) || ((LINE) == EXTI_Line15) || \ + ((LINE) == EXTI_Line16) || ((LINE) == EXTI_Line17) || \ + ((LINE) == EXTI_Line18) || ((LINE) == EXTI_Line19)) + + +/** + * @} + */ + +/** + * @} + */ + +/** @defgroup EXTI_Exported_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup EXTI_Exported_Functions + * @{ + */ + +void EXTI_DeInit(void); +void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct); +void EXTI_StructInit(EXTI_InitTypeDef* EXTI_InitStruct); +void EXTI_GenerateSWInterrupt(uint32_t EXTI_Line); +FlagStatus EXTI_GetFlagStatus(uint32_t EXTI_Line); +void EXTI_ClearFlag(uint32_t EXTI_Line); +ITStatus EXTI_GetITStatus(uint32_t EXTI_Line); +void EXTI_ClearITPendingBit(uint32_t EXTI_Line); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F10x_EXTI_H */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_flash.h b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_flash.h new file mode 100644 index 0000000..63720de --- /dev/null +++ b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_flash.h @@ -0,0 +1,426 @@ +/** + ****************************************************************************** + * @file stm32f10x_flash.h + * @author MCD Application Team + * @version V3.5.0 + * @date 11-March-2011 + * @brief This file contains all the functions prototypes for the FLASH + * firmware library. + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

    © COPYRIGHT 2011 STMicroelectronics

    + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F10x_FLASH_H +#define __STM32F10x_FLASH_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f10x.h" + +/** @addtogroup STM32F10x_StdPeriph_Driver + * @{ + */ + +/** @addtogroup FLASH + * @{ + */ + +/** @defgroup FLASH_Exported_Types + * @{ + */ + +/** + * @brief FLASH Status + */ + +typedef enum +{ + FLASH_BUSY = 1, + FLASH_ERROR_PG, + FLASH_ERROR_WRP, + FLASH_COMPLETE, + FLASH_TIMEOUT +}FLASH_Status; + +/** + * @} + */ + +/** @defgroup FLASH_Exported_Constants + * @{ + */ + +/** @defgroup Flash_Latency + * @{ + */ + +#define FLASH_Latency_0 ((uint32_t)0x00000000) /*!< FLASH Zero Latency cycle */ +#define FLASH_Latency_1 ((uint32_t)0x00000001) /*!< FLASH One Latency cycle */ +#define FLASH_Latency_2 ((uint32_t)0x00000002) /*!< FLASH Two Latency cycles */ +#define IS_FLASH_LATENCY(LATENCY) (((LATENCY) == FLASH_Latency_0) || \ + ((LATENCY) == FLASH_Latency_1) || \ + ((LATENCY) == FLASH_Latency_2)) +/** + * @} + */ + +/** @defgroup Half_Cycle_Enable_Disable + * @{ + */ + +#define FLASH_HalfCycleAccess_Enable ((uint32_t)0x00000008) /*!< FLASH Half Cycle Enable */ +#define FLASH_HalfCycleAccess_Disable ((uint32_t)0x00000000) /*!< FLASH Half Cycle Disable */ +#define IS_FLASH_HALFCYCLEACCESS_STATE(STATE) (((STATE) == FLASH_HalfCycleAccess_Enable) || \ + ((STATE) == FLASH_HalfCycleAccess_Disable)) +/** + * @} + */ + +/** @defgroup Prefetch_Buffer_Enable_Disable + * @{ + */ + +#define FLASH_PrefetchBuffer_Enable ((uint32_t)0x00000010) /*!< FLASH Prefetch Buffer Enable */ +#define FLASH_PrefetchBuffer_Disable ((uint32_t)0x00000000) /*!< FLASH Prefetch Buffer Disable */ +#define IS_FLASH_PREFETCHBUFFER_STATE(STATE) (((STATE) == FLASH_PrefetchBuffer_Enable) || \ + ((STATE) == FLASH_PrefetchBuffer_Disable)) +/** + * @} + */ + +/** @defgroup Option_Bytes_Write_Protection + * @{ + */ + +/* Values to be used with STM32 Low and Medium density devices */ +#define FLASH_WRProt_Pages0to3 ((uint32_t)0x00000001) /*!< STM32 Low and Medium density devices: Write protection of page 0 to 3 */ +#define FLASH_WRProt_Pages4to7 ((uint32_t)0x00000002) /*!< STM32 Low and Medium density devices: Write protection of page 4 to 7 */ +#define FLASH_WRProt_Pages8to11 ((uint32_t)0x00000004) /*!< STM32 Low and Medium density devices: Write protection of page 8 to 11 */ +#define FLASH_WRProt_Pages12to15 ((uint32_t)0x00000008) /*!< STM32 Low and Medium density devices: Write protection of page 12 to 15 */ +#define FLASH_WRProt_Pages16to19 ((uint32_t)0x00000010) /*!< STM32 Low and Medium density devices: Write protection of page 16 to 19 */ +#define FLASH_WRProt_Pages20to23 ((uint32_t)0x00000020) /*!< STM32 Low and Medium density devices: Write protection of page 20 to 23 */ +#define FLASH_WRProt_Pages24to27 ((uint32_t)0x00000040) /*!< STM32 Low and Medium density devices: Write protection of page 24 to 27 */ +#define FLASH_WRProt_Pages28to31 ((uint32_t)0x00000080) /*!< STM32 Low and Medium density devices: Write protection of page 28 to 31 */ + +/* Values to be used with STM32 Medium-density devices */ +#define FLASH_WRProt_Pages32to35 ((uint32_t)0x00000100) /*!< STM32 Medium-density devices: Write protection of page 32 to 35 */ +#define FLASH_WRProt_Pages36to39 ((uint32_t)0x00000200) /*!< STM32 Medium-density devices: Write protection of page 36 to 39 */ +#define FLASH_WRProt_Pages40to43 ((uint32_t)0x00000400) /*!< STM32 Medium-density devices: Write protection of page 40 to 43 */ +#define FLASH_WRProt_Pages44to47 ((uint32_t)0x00000800) /*!< STM32 Medium-density devices: Write protection of page 44 to 47 */ +#define FLASH_WRProt_Pages48to51 ((uint32_t)0x00001000) /*!< STM32 Medium-density devices: Write protection of page 48 to 51 */ +#define FLASH_WRProt_Pages52to55 ((uint32_t)0x00002000) /*!< STM32 Medium-density devices: Write protection of page 52 to 55 */ +#define FLASH_WRProt_Pages56to59 ((uint32_t)0x00004000) /*!< STM32 Medium-density devices: Write protection of page 56 to 59 */ +#define FLASH_WRProt_Pages60to63 ((uint32_t)0x00008000) /*!< STM32 Medium-density devices: Write protection of page 60 to 63 */ +#define FLASH_WRProt_Pages64to67 ((uint32_t)0x00010000) /*!< STM32 Medium-density devices: Write protection of page 64 to 67 */ +#define FLASH_WRProt_Pages68to71 ((uint32_t)0x00020000) /*!< STM32 Medium-density devices: Write protection of page 68 to 71 */ +#define FLASH_WRProt_Pages72to75 ((uint32_t)0x00040000) /*!< STM32 Medium-density devices: Write protection of page 72 to 75 */ +#define FLASH_WRProt_Pages76to79 ((uint32_t)0x00080000) /*!< STM32 Medium-density devices: Write protection of page 76 to 79 */ +#define FLASH_WRProt_Pages80to83 ((uint32_t)0x00100000) /*!< STM32 Medium-density devices: Write protection of page 80 to 83 */ +#define FLASH_WRProt_Pages84to87 ((uint32_t)0x00200000) /*!< STM32 Medium-density devices: Write protection of page 84 to 87 */ +#define FLASH_WRProt_Pages88to91 ((uint32_t)0x00400000) /*!< STM32 Medium-density devices: Write protection of page 88 to 91 */ +#define FLASH_WRProt_Pages92to95 ((uint32_t)0x00800000) /*!< STM32 Medium-density devices: Write protection of page 92 to 95 */ +#define FLASH_WRProt_Pages96to99 ((uint32_t)0x01000000) /*!< STM32 Medium-density devices: Write protection of page 96 to 99 */ +#define FLASH_WRProt_Pages100to103 ((uint32_t)0x02000000) /*!< STM32 Medium-density devices: Write protection of page 100 to 103 */ +#define FLASH_WRProt_Pages104to107 ((uint32_t)0x04000000) /*!< STM32 Medium-density devices: Write protection of page 104 to 107 */ +#define FLASH_WRProt_Pages108to111 ((uint32_t)0x08000000) /*!< STM32 Medium-density devices: Write protection of page 108 to 111 */ +#define FLASH_WRProt_Pages112to115 ((uint32_t)0x10000000) /*!< STM32 Medium-density devices: Write protection of page 112 to 115 */ +#define FLASH_WRProt_Pages116to119 ((uint32_t)0x20000000) /*!< STM32 Medium-density devices: Write protection of page 115 to 119 */ +#define FLASH_WRProt_Pages120to123 ((uint32_t)0x40000000) /*!< STM32 Medium-density devices: Write protection of page 120 to 123 */ +#define FLASH_WRProt_Pages124to127 ((uint32_t)0x80000000) /*!< STM32 Medium-density devices: Write protection of page 124 to 127 */ + +/* Values to be used with STM32 High-density and STM32F10X Connectivity line devices */ +#define FLASH_WRProt_Pages0to1 ((uint32_t)0x00000001) /*!< STM32 High-density, XL-density and Connectivity line devices: + Write protection of page 0 to 1 */ +#define FLASH_WRProt_Pages2to3 ((uint32_t)0x00000002) /*!< STM32 High-density, XL-density and Connectivity line devices: + Write protection of page 2 to 3 */ +#define FLASH_WRProt_Pages4to5 ((uint32_t)0x00000004) /*!< STM32 High-density, XL-density and Connectivity line devices: + Write protection of page 4 to 5 */ +#define FLASH_WRProt_Pages6to7 ((uint32_t)0x00000008) /*!< STM32 High-density, XL-density and Connectivity line devices: + Write protection of page 6 to 7 */ +#define FLASH_WRProt_Pages8to9 ((uint32_t)0x00000010) /*!< STM32 High-density, XL-density and Connectivity line devices: + Write protection of page 8 to 9 */ +#define FLASH_WRProt_Pages10to11 ((uint32_t)0x00000020) /*!< STM32 High-density, XL-density and Connectivity line devices: + Write protection of page 10 to 11 */ +#define FLASH_WRProt_Pages12to13 ((uint32_t)0x00000040) /*!< STM32 High-density, XL-density and Connectivity line devices: + Write protection of page 12 to 13 */ +#define FLASH_WRProt_Pages14to15 ((uint32_t)0x00000080) /*!< STM32 High-density, XL-density and Connectivity line devices: + Write protection of page 14 to 15 */ +#define FLASH_WRProt_Pages16to17 ((uint32_t)0x00000100) /*!< STM32 High-density, XL-density and Connectivity line devices: + Write protection of page 16 to 17 */ +#define FLASH_WRProt_Pages18to19 ((uint32_t)0x00000200) /*!< STM32 High-density, XL-density and Connectivity line devices: + Write protection of page 18 to 19 */ +#define FLASH_WRProt_Pages20to21 ((uint32_t)0x00000400) /*!< STM32 High-density, XL-density and Connectivity line devices: + Write protection of page 20 to 21 */ +#define FLASH_WRProt_Pages22to23 ((uint32_t)0x00000800) /*!< STM32 High-density, XL-density and Connectivity line devices: + Write protection of page 22 to 23 */ +#define FLASH_WRProt_Pages24to25 ((uint32_t)0x00001000) /*!< STM32 High-density, XL-density and Connectivity line devices: + Write protection of page 24 to 25 */ +#define FLASH_WRProt_Pages26to27 ((uint32_t)0x00002000) /*!< STM32 High-density, XL-density and Connectivity line devices: + Write protection of page 26 to 27 */ +#define FLASH_WRProt_Pages28to29 ((uint32_t)0x00004000) /*!< STM32 High-density, XL-density and Connectivity line devices: + Write protection of page 28 to 29 */ +#define FLASH_WRProt_Pages30to31 ((uint32_t)0x00008000) /*!< STM32 High-density, XL-density and Connectivity line devices: + Write protection of page 30 to 31 */ +#define FLASH_WRProt_Pages32to33 ((uint32_t)0x00010000) /*!< STM32 High-density, XL-density and Connectivity line devices: + Write protection of page 32 to 33 */ +#define FLASH_WRProt_Pages34to35 ((uint32_t)0x00020000) /*!< STM32 High-density, XL-density and Connectivity line devices: + Write protection of page 34 to 35 */ +#define FLASH_WRProt_Pages36to37 ((uint32_t)0x00040000) /*!< STM32 High-density, XL-density and Connectivity line devices: + Write protection of page 36 to 37 */ +#define FLASH_WRProt_Pages38to39 ((uint32_t)0x00080000) /*!< STM32 High-density, XL-density and Connectivity line devices: + Write protection of page 38 to 39 */ +#define FLASH_WRProt_Pages40to41 ((uint32_t)0x00100000) /*!< STM32 High-density, XL-density and Connectivity line devices: + Write protection of page 40 to 41 */ +#define FLASH_WRProt_Pages42to43 ((uint32_t)0x00200000) /*!< STM32 High-density, XL-density and Connectivity line devices: + Write protection of page 42 to 43 */ +#define FLASH_WRProt_Pages44to45 ((uint32_t)0x00400000) /*!< STM32 High-density, XL-density and Connectivity line devices: + Write protection of page 44 to 45 */ +#define FLASH_WRProt_Pages46to47 ((uint32_t)0x00800000) /*!< STM32 High-density, XL-density and Connectivity line devices: + Write protection of page 46 to 47 */ +#define FLASH_WRProt_Pages48to49 ((uint32_t)0x01000000) /*!< STM32 High-density, XL-density and Connectivity line devices: + Write protection of page 48 to 49 */ +#define FLASH_WRProt_Pages50to51 ((uint32_t)0x02000000) /*!< STM32 High-density, XL-density and Connectivity line devices: + Write protection of page 50 to 51 */ +#define FLASH_WRProt_Pages52to53 ((uint32_t)0x04000000) /*!< STM32 High-density, XL-density and Connectivity line devices: + Write protection of page 52 to 53 */ +#define FLASH_WRProt_Pages54to55 ((uint32_t)0x08000000) /*!< STM32 High-density, XL-density and Connectivity line devices: + Write protection of page 54 to 55 */ +#define FLASH_WRProt_Pages56to57 ((uint32_t)0x10000000) /*!< STM32 High-density, XL-density and Connectivity line devices: + Write protection of page 56 to 57 */ +#define FLASH_WRProt_Pages58to59 ((uint32_t)0x20000000) /*!< STM32 High-density, XL-density and Connectivity line devices: + Write protection of page 58 to 59 */ +#define FLASH_WRProt_Pages60to61 ((uint32_t)0x40000000) /*!< STM32 High-density, XL-density and Connectivity line devices: + Write protection of page 60 to 61 */ +#define FLASH_WRProt_Pages62to127 ((uint32_t)0x80000000) /*!< STM32 Connectivity line devices: Write protection of page 62 to 127 */ +#define FLASH_WRProt_Pages62to255 ((uint32_t)0x80000000) /*!< STM32 Medium-density devices: Write protection of page 62 to 255 */ +#define FLASH_WRProt_Pages62to511 ((uint32_t)0x80000000) /*!< STM32 XL-density devices: Write protection of page 62 to 511 */ + +#define FLASH_WRProt_AllPages ((uint32_t)0xFFFFFFFF) /*!< Write protection of all Pages */ + +#define IS_FLASH_WRPROT_PAGE(PAGE) (((PAGE) != 0x00000000)) + +#define IS_FLASH_ADDRESS(ADDRESS) (((ADDRESS) >= 0x08000000) && ((ADDRESS) < 0x080FFFFF)) + +#define IS_OB_DATA_ADDRESS(ADDRESS) (((ADDRESS) == 0x1FFFF804) || ((ADDRESS) == 0x1FFFF806)) + +/** + * @} + */ + +/** @defgroup Option_Bytes_IWatchdog + * @{ + */ + +#define OB_IWDG_SW ((uint16_t)0x0001) /*!< Software IWDG selected */ +#define OB_IWDG_HW ((uint16_t)0x0000) /*!< Hardware IWDG selected */ +#define IS_OB_IWDG_SOURCE(SOURCE) (((SOURCE) == OB_IWDG_SW) || ((SOURCE) == OB_IWDG_HW)) + +/** + * @} + */ + +/** @defgroup Option_Bytes_nRST_STOP + * @{ + */ + +#define OB_STOP_NoRST ((uint16_t)0x0002) /*!< No reset generated when entering in STOP */ +#define OB_STOP_RST ((uint16_t)0x0000) /*!< Reset generated when entering in STOP */ +#define IS_OB_STOP_SOURCE(SOURCE) (((SOURCE) == OB_STOP_NoRST) || ((SOURCE) == OB_STOP_RST)) + +/** + * @} + */ + +/** @defgroup Option_Bytes_nRST_STDBY + * @{ + */ + +#define OB_STDBY_NoRST ((uint16_t)0x0004) /*!< No reset generated when entering in STANDBY */ +#define OB_STDBY_RST ((uint16_t)0x0000) /*!< Reset generated when entering in STANDBY */ +#define IS_OB_STDBY_SOURCE(SOURCE) (((SOURCE) == OB_STDBY_NoRST) || ((SOURCE) == OB_STDBY_RST)) + +#ifdef STM32F10X_XL +/** + * @} + */ +/** @defgroup FLASH_Boot + * @{ + */ +#define FLASH_BOOT_Bank1 ((uint16_t)0x0000) /*!< At startup, if boot pins are set in boot from user Flash position + and this parameter is selected the device will boot from Bank1(Default) */ +#define FLASH_BOOT_Bank2 ((uint16_t)0x0001) /*!< At startup, if boot pins are set in boot from user Flash position + and this parameter is selected the device will boot from Bank 2 or Bank 1, + depending on the activation of the bank */ +#define IS_FLASH_BOOT(BOOT) (((BOOT) == FLASH_BOOT_Bank1) || ((BOOT) == FLASH_BOOT_Bank2)) +#endif +/** + * @} + */ +/** @defgroup FLASH_Interrupts + * @{ + */ +#ifdef STM32F10X_XL +#define FLASH_IT_BANK2_ERROR ((uint32_t)0x80000400) /*!< FPEC BANK2 error interrupt source */ +#define FLASH_IT_BANK2_EOP ((uint32_t)0x80001000) /*!< End of FLASH BANK2 Operation Interrupt source */ + +#define FLASH_IT_BANK1_ERROR FLASH_IT_ERROR /*!< FPEC BANK1 error interrupt source */ +#define FLASH_IT_BANK1_EOP FLASH_IT_EOP /*!< End of FLASH BANK1 Operation Interrupt source */ + +#define FLASH_IT_ERROR ((uint32_t)0x00000400) /*!< FPEC BANK1 error interrupt source */ +#define FLASH_IT_EOP ((uint32_t)0x00001000) /*!< End of FLASH BANK1 Operation Interrupt source */ +#define IS_FLASH_IT(IT) ((((IT) & (uint32_t)0x7FFFEBFF) == 0x00000000) && (((IT) != 0x00000000))) +#else +#define FLASH_IT_ERROR ((uint32_t)0x00000400) /*!< FPEC error interrupt source */ +#define FLASH_IT_EOP ((uint32_t)0x00001000) /*!< End of FLASH Operation Interrupt source */ +#define FLASH_IT_BANK1_ERROR FLASH_IT_ERROR /*!< FPEC BANK1 error interrupt source */ +#define FLASH_IT_BANK1_EOP FLASH_IT_EOP /*!< End of FLASH BANK1 Operation Interrupt source */ + +#define IS_FLASH_IT(IT) ((((IT) & (uint32_t)0xFFFFEBFF) == 0x00000000) && (((IT) != 0x00000000))) +#endif + +/** + * @} + */ + +/** @defgroup FLASH_Flags + * @{ + */ +#ifdef STM32F10X_XL +#define FLASH_FLAG_BANK2_BSY ((uint32_t)0x80000001) /*!< FLASH BANK2 Busy flag */ +#define FLASH_FLAG_BANK2_EOP ((uint32_t)0x80000020) /*!< FLASH BANK2 End of Operation flag */ +#define FLASH_FLAG_BANK2_PGERR ((uint32_t)0x80000004) /*!< FLASH BANK2 Program error flag */ +#define FLASH_FLAG_BANK2_WRPRTERR ((uint32_t)0x80000010) /*!< FLASH BANK2 Write protected error flag */ + +#define FLASH_FLAG_BANK1_BSY FLASH_FLAG_BSY /*!< FLASH BANK1 Busy flag*/ +#define FLASH_FLAG_BANK1_EOP FLASH_FLAG_EOP /*!< FLASH BANK1 End of Operation flag */ +#define FLASH_FLAG_BANK1_PGERR FLASH_FLAG_PGERR /*!< FLASH BANK1 Program error flag */ +#define FLASH_FLAG_BANK1_WRPRTERR FLASH_FLAG_WRPRTERR /*!< FLASH BANK1 Write protected error flag */ + +#define FLASH_FLAG_BSY ((uint32_t)0x00000001) /*!< FLASH Busy flag */ +#define FLASH_FLAG_EOP ((uint32_t)0x00000020) /*!< FLASH End of Operation flag */ +#define FLASH_FLAG_PGERR ((uint32_t)0x00000004) /*!< FLASH Program error flag */ +#define FLASH_FLAG_WRPRTERR ((uint32_t)0x00000010) /*!< FLASH Write protected error flag */ +#define FLASH_FLAG_OPTERR ((uint32_t)0x00000001) /*!< FLASH Option Byte error flag */ + +#define IS_FLASH_CLEAR_FLAG(FLAG) ((((FLAG) & (uint32_t)0x7FFFFFCA) == 0x00000000) && ((FLAG) != 0x00000000)) +#define IS_FLASH_GET_FLAG(FLAG) (((FLAG) == FLASH_FLAG_BSY) || ((FLAG) == FLASH_FLAG_EOP) || \ + ((FLAG) == FLASH_FLAG_PGERR) || ((FLAG) == FLASH_FLAG_WRPRTERR) || \ + ((FLAG) == FLASH_FLAG_OPTERR)|| \ + ((FLAG) == FLASH_FLAG_BANK1_BSY) || ((FLAG) == FLASH_FLAG_BANK1_EOP) || \ + ((FLAG) == FLASH_FLAG_BANK1_PGERR) || ((FLAG) == FLASH_FLAG_BANK1_WRPRTERR) || \ + ((FLAG) == FLASH_FLAG_BANK2_BSY) || ((FLAG) == FLASH_FLAG_BANK2_EOP) || \ + ((FLAG) == FLASH_FLAG_BANK2_PGERR) || ((FLAG) == FLASH_FLAG_BANK2_WRPRTERR)) +#else +#define FLASH_FLAG_BSY ((uint32_t)0x00000001) /*!< FLASH Busy flag */ +#define FLASH_FLAG_EOP ((uint32_t)0x00000020) /*!< FLASH End of Operation flag */ +#define FLASH_FLAG_PGERR ((uint32_t)0x00000004) /*!< FLASH Program error flag */ +#define FLASH_FLAG_WRPRTERR ((uint32_t)0x00000010) /*!< FLASH Write protected error flag */ +#define FLASH_FLAG_OPTERR ((uint32_t)0x00000001) /*!< FLASH Option Byte error flag */ + +#define FLASH_FLAG_BANK1_BSY FLASH_FLAG_BSY /*!< FLASH BANK1 Busy flag*/ +#define FLASH_FLAG_BANK1_EOP FLASH_FLAG_EOP /*!< FLASH BANK1 End of Operation flag */ +#define FLASH_FLAG_BANK1_PGERR FLASH_FLAG_PGERR /*!< FLASH BANK1 Program error flag */ +#define FLASH_FLAG_BANK1_WRPRTERR FLASH_FLAG_WRPRTERR /*!< FLASH BANK1 Write protected error flag */ + +#define IS_FLASH_CLEAR_FLAG(FLAG) ((((FLAG) & (uint32_t)0xFFFFFFCA) == 0x00000000) && ((FLAG) != 0x00000000)) +#define IS_FLASH_GET_FLAG(FLAG) (((FLAG) == FLASH_FLAG_BSY) || ((FLAG) == FLASH_FLAG_EOP) || \ + ((FLAG) == FLASH_FLAG_PGERR) || ((FLAG) == FLASH_FLAG_WRPRTERR) || \ + ((FLAG) == FLASH_FLAG_BANK1_BSY) || ((FLAG) == FLASH_FLAG_BANK1_EOP) || \ + ((FLAG) == FLASH_FLAG_BANK1_PGERR) || ((FLAG) == FLASH_FLAG_BANK1_WRPRTERR) || \ + ((FLAG) == FLASH_FLAG_OPTERR)) +#endif + +/** + * @} + */ + +/** + * @} + */ + +/** @defgroup FLASH_Exported_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup FLASH_Exported_Functions + * @{ + */ + +/*------------ Functions used for all STM32F10x devices -----*/ +void FLASH_SetLatency(uint32_t FLASH_Latency); +void FLASH_HalfCycleAccessCmd(uint32_t FLASH_HalfCycleAccess); +void FLASH_PrefetchBufferCmd(uint32_t FLASH_PrefetchBuffer); +void FLASH_Unlock(void); +void FLASH_Lock(void); +FLASH_Status FLASH_ErasePage(uint32_t Page_Address); +FLASH_Status FLASH_EraseAllPages(void); +FLASH_Status FLASH_EraseOptionBytes(void); +FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data); +FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data); +FLASH_Status FLASH_ProgramOptionByteData(uint32_t Address, uint8_t Data); +FLASH_Status FLASH_EnableWriteProtection(uint32_t FLASH_Pages); +FLASH_Status FLASH_ReadOutProtection(FunctionalState NewState); +FLASH_Status FLASH_UserOptionByteConfig(uint16_t OB_IWDG, uint16_t OB_STOP, uint16_t OB_STDBY); +uint32_t FLASH_GetUserOptionByte(void); +uint32_t FLASH_GetWriteProtectionOptionByte(void); +FlagStatus FLASH_GetReadOutProtectionStatus(void); +FlagStatus FLASH_GetPrefetchBufferStatus(void); +void FLASH_ITConfig(uint32_t FLASH_IT, FunctionalState NewState); +FlagStatus FLASH_GetFlagStatus(uint32_t FLASH_FLAG); +void FLASH_ClearFlag(uint32_t FLASH_FLAG); +FLASH_Status FLASH_GetStatus(void); +FLASH_Status FLASH_WaitForLastOperation(uint32_t Timeout); + +/*------------ New function used for all STM32F10x devices -----*/ +void FLASH_UnlockBank1(void); +void FLASH_LockBank1(void); +FLASH_Status FLASH_EraseAllBank1Pages(void); +FLASH_Status FLASH_GetBank1Status(void); +FLASH_Status FLASH_WaitForLastBank1Operation(uint32_t Timeout); + +#ifdef STM32F10X_XL +/*---- New Functions used only with STM32F10x_XL density devices -----*/ +void FLASH_UnlockBank2(void); +void FLASH_LockBank2(void); +FLASH_Status FLASH_EraseAllBank2Pages(void); +FLASH_Status FLASH_GetBank2Status(void); +FLASH_Status FLASH_WaitForLastBank2Operation(uint32_t Timeout); +FLASH_Status FLASH_BootConfig(uint16_t FLASH_BOOT); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F10x_FLASH_H */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_fsmc.h b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_fsmc.h new file mode 100644 index 0000000..6e1769d --- /dev/null +++ b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_fsmc.h @@ -0,0 +1,733 @@ +/** + ****************************************************************************** + * @file stm32f10x_fsmc.h + * @author MCD Application Team + * @version V3.5.0 + * @date 11-March-2011 + * @brief This file contains all the functions prototypes for the FSMC firmware + * library. + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

    © COPYRIGHT 2011 STMicroelectronics

    + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F10x_FSMC_H +#define __STM32F10x_FSMC_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f10x.h" + +/** @addtogroup STM32F10x_StdPeriph_Driver + * @{ + */ + +/** @addtogroup FSMC + * @{ + */ + +/** @defgroup FSMC_Exported_Types + * @{ + */ + +/** + * @brief Timing parameters For NOR/SRAM Banks + */ + +typedef struct +{ + uint32_t FSMC_AddressSetupTime; /*!< Defines the number of HCLK cycles to configure + the duration of the address setup time. + This parameter can be a value between 0 and 0xF. + @note: It is not used with synchronous NOR Flash memories. */ + + uint32_t FSMC_AddressHoldTime; /*!< Defines the number of HCLK cycles to configure + the duration of the address hold time. + This parameter can be a value between 0 and 0xF. + @note: It is not used with synchronous NOR Flash memories.*/ + + uint32_t FSMC_DataSetupTime; /*!< Defines the number of HCLK cycles to configure + the duration of the data setup time. + This parameter can be a value between 0 and 0xFF. + @note: It is used for SRAMs, ROMs and asynchronous multiplexed NOR Flash memories. */ + + uint32_t FSMC_BusTurnAroundDuration; /*!< Defines the number of HCLK cycles to configure + the duration of the bus turnaround. + This parameter can be a value between 0 and 0xF. + @note: It is only used for multiplexed NOR Flash memories. */ + + uint32_t FSMC_CLKDivision; /*!< Defines the period of CLK clock output signal, expressed in number of HCLK cycles. + This parameter can be a value between 1 and 0xF. + @note: This parameter is not used for asynchronous NOR Flash, SRAM or ROM accesses. */ + + uint32_t FSMC_DataLatency; /*!< Defines the number of memory clock cycles to issue + to the memory before getting the first data. + The value of this parameter depends on the memory type as shown below: + - It must be set to 0 in case of a CRAM + - It is don't care in asynchronous NOR, SRAM or ROM accesses + - It may assume a value between 0 and 0xF in NOR Flash memories + with synchronous burst mode enable */ + + uint32_t FSMC_AccessMode; /*!< Specifies the asynchronous access mode. + This parameter can be a value of @ref FSMC_Access_Mode */ +}FSMC_NORSRAMTimingInitTypeDef; + +/** + * @brief FSMC NOR/SRAM Init structure definition + */ + +typedef struct +{ + uint32_t FSMC_Bank; /*!< Specifies the NOR/SRAM memory bank that will be used. + This parameter can be a value of @ref FSMC_NORSRAM_Bank */ + + uint32_t FSMC_DataAddressMux; /*!< Specifies whether the address and data values are + multiplexed on the databus or not. + This parameter can be a value of @ref FSMC_Data_Address_Bus_Multiplexing */ + + uint32_t FSMC_MemoryType; /*!< Specifies the type of external memory attached to + the corresponding memory bank. + This parameter can be a value of @ref FSMC_Memory_Type */ + + uint32_t FSMC_MemoryDataWidth; /*!< Specifies the external memory device width. + This parameter can be a value of @ref FSMC_Data_Width */ + + uint32_t FSMC_BurstAccessMode; /*!< Enables or disables the burst access mode for Flash memory, + valid only with synchronous burst Flash memories. + This parameter can be a value of @ref FSMC_Burst_Access_Mode */ + + uint32_t FSMC_AsynchronousWait; /*!< Enables or disables wait signal during asynchronous transfers, + valid only with asynchronous Flash memories. + This parameter can be a value of @ref FSMC_AsynchronousWait */ + + uint32_t FSMC_WaitSignalPolarity; /*!< Specifies the wait signal polarity, valid only when accessing + the Flash memory in burst mode. + This parameter can be a value of @ref FSMC_Wait_Signal_Polarity */ + + uint32_t FSMC_WrapMode; /*!< Enables or disables the Wrapped burst access mode for Flash + memory, valid only when accessing Flash memories in burst mode. + This parameter can be a value of @ref FSMC_Wrap_Mode */ + + uint32_t FSMC_WaitSignalActive; /*!< Specifies if the wait signal is asserted by the memory one + clock cycle before the wait state or during the wait state, + valid only when accessing memories in burst mode. + This parameter can be a value of @ref FSMC_Wait_Timing */ + + uint32_t FSMC_WriteOperation; /*!< Enables or disables the write operation in the selected bank by the FSMC. + This parameter can be a value of @ref FSMC_Write_Operation */ + + uint32_t FSMC_WaitSignal; /*!< Enables or disables the wait-state insertion via wait + signal, valid for Flash memory access in burst mode. + This parameter can be a value of @ref FSMC_Wait_Signal */ + + uint32_t FSMC_ExtendedMode; /*!< Enables or disables the extended mode. + This parameter can be a value of @ref FSMC_Extended_Mode */ + + uint32_t FSMC_WriteBurst; /*!< Enables or disables the write burst operation. + This parameter can be a value of @ref FSMC_Write_Burst */ + + FSMC_NORSRAMTimingInitTypeDef* FSMC_ReadWriteTimingStruct; /*!< Timing Parameters for write and read access if the ExtendedMode is not used*/ + + FSMC_NORSRAMTimingInitTypeDef* FSMC_WriteTimingStruct; /*!< Timing Parameters for write access if the ExtendedMode is used*/ +}FSMC_NORSRAMInitTypeDef; + +/** + * @brief Timing parameters For FSMC NAND and PCCARD Banks + */ + +typedef struct +{ + uint32_t FSMC_SetupTime; /*!< Defines the number of HCLK cycles to setup address before + the command assertion for NAND-Flash read or write access + to common/Attribute or I/O memory space (depending on + the memory space timing to be configured). + This parameter can be a value between 0 and 0xFF.*/ + + uint32_t FSMC_WaitSetupTime; /*!< Defines the minimum number of HCLK cycles to assert the + command for NAND-Flash read or write access to + common/Attribute or I/O memory space (depending on the + memory space timing to be configured). + This parameter can be a number between 0x00 and 0xFF */ + + uint32_t FSMC_HoldSetupTime; /*!< Defines the number of HCLK clock cycles to hold address + (and data for write access) after the command deassertion + for NAND-Flash read or write access to common/Attribute + or I/O memory space (depending on the memory space timing + to be configured). + This parameter can be a number between 0x00 and 0xFF */ + + uint32_t FSMC_HiZSetupTime; /*!< Defines the number of HCLK clock cycles during which the + databus is kept in HiZ after the start of a NAND-Flash + write access to common/Attribute or I/O memory space (depending + on the memory space timing to be configured). + This parameter can be a number between 0x00 and 0xFF */ +}FSMC_NAND_PCCARDTimingInitTypeDef; + +/** + * @brief FSMC NAND Init structure definition + */ + +typedef struct +{ + uint32_t FSMC_Bank; /*!< Specifies the NAND memory bank that will be used. + This parameter can be a value of @ref FSMC_NAND_Bank */ + + uint32_t FSMC_Waitfeature; /*!< Enables or disables the Wait feature for the NAND Memory Bank. + This parameter can be any value of @ref FSMC_Wait_feature */ + + uint32_t FSMC_MemoryDataWidth; /*!< Specifies the external memory device width. + This parameter can be any value of @ref FSMC_Data_Width */ + + uint32_t FSMC_ECC; /*!< Enables or disables the ECC computation. + This parameter can be any value of @ref FSMC_ECC */ + + uint32_t FSMC_ECCPageSize; /*!< Defines the page size for the extended ECC. + This parameter can be any value of @ref FSMC_ECC_Page_Size */ + + uint32_t FSMC_TCLRSetupTime; /*!< Defines the number of HCLK cycles to configure the + delay between CLE low and RE low. + This parameter can be a value between 0 and 0xFF. */ + + uint32_t FSMC_TARSetupTime; /*!< Defines the number of HCLK cycles to configure the + delay between ALE low and RE low. + This parameter can be a number between 0x0 and 0xFF */ + + FSMC_NAND_PCCARDTimingInitTypeDef* FSMC_CommonSpaceTimingStruct; /*!< FSMC Common Space Timing */ + + FSMC_NAND_PCCARDTimingInitTypeDef* FSMC_AttributeSpaceTimingStruct; /*!< FSMC Attribute Space Timing */ +}FSMC_NANDInitTypeDef; + +/** + * @brief FSMC PCCARD Init structure definition + */ + +typedef struct +{ + uint32_t FSMC_Waitfeature; /*!< Enables or disables the Wait feature for the Memory Bank. + This parameter can be any value of @ref FSMC_Wait_feature */ + + uint32_t FSMC_TCLRSetupTime; /*!< Defines the number of HCLK cycles to configure the + delay between CLE low and RE low. + This parameter can be a value between 0 and 0xFF. */ + + uint32_t FSMC_TARSetupTime; /*!< Defines the number of HCLK cycles to configure the + delay between ALE low and RE low. + This parameter can be a number between 0x0 and 0xFF */ + + + FSMC_NAND_PCCARDTimingInitTypeDef* FSMC_CommonSpaceTimingStruct; /*!< FSMC Common Space Timing */ + + FSMC_NAND_PCCARDTimingInitTypeDef* FSMC_AttributeSpaceTimingStruct; /*!< FSMC Attribute Space Timing */ + + FSMC_NAND_PCCARDTimingInitTypeDef* FSMC_IOSpaceTimingStruct; /*!< FSMC IO Space Timing */ +}FSMC_PCCARDInitTypeDef; + +/** + * @} + */ + +/** @defgroup FSMC_Exported_Constants + * @{ + */ + +/** @defgroup FSMC_NORSRAM_Bank + * @{ + */ +#define FSMC_Bank1_NORSRAM1 ((uint32_t)0x00000000) +#define FSMC_Bank1_NORSRAM2 ((uint32_t)0x00000002) +#define FSMC_Bank1_NORSRAM3 ((uint32_t)0x00000004) +#define FSMC_Bank1_NORSRAM4 ((uint32_t)0x00000006) +/** + * @} + */ + +/** @defgroup FSMC_NAND_Bank + * @{ + */ +#define FSMC_Bank2_NAND ((uint32_t)0x00000010) +#define FSMC_Bank3_NAND ((uint32_t)0x00000100) +/** + * @} + */ + +/** @defgroup FSMC_PCCARD_Bank + * @{ + */ +#define FSMC_Bank4_PCCARD ((uint32_t)0x00001000) +/** + * @} + */ + +#define IS_FSMC_NORSRAM_BANK(BANK) (((BANK) == FSMC_Bank1_NORSRAM1) || \ + ((BANK) == FSMC_Bank1_NORSRAM2) || \ + ((BANK) == FSMC_Bank1_NORSRAM3) || \ + ((BANK) == FSMC_Bank1_NORSRAM4)) + +#define IS_FSMC_NAND_BANK(BANK) (((BANK) == FSMC_Bank2_NAND) || \ + ((BANK) == FSMC_Bank3_NAND)) + +#define IS_FSMC_GETFLAG_BANK(BANK) (((BANK) == FSMC_Bank2_NAND) || \ + ((BANK) == FSMC_Bank3_NAND) || \ + ((BANK) == FSMC_Bank4_PCCARD)) + +#define IS_FSMC_IT_BANK(BANK) (((BANK) == FSMC_Bank2_NAND) || \ + ((BANK) == FSMC_Bank3_NAND) || \ + ((BANK) == FSMC_Bank4_PCCARD)) + +/** @defgroup NOR_SRAM_Controller + * @{ + */ + +/** @defgroup FSMC_Data_Address_Bus_Multiplexing + * @{ + */ + +#define FSMC_DataAddressMux_Disable ((uint32_t)0x00000000) +#define FSMC_DataAddressMux_Enable ((uint32_t)0x00000002) +#define IS_FSMC_MUX(MUX) (((MUX) == FSMC_DataAddressMux_Disable) || \ + ((MUX) == FSMC_DataAddressMux_Enable)) + +/** + * @} + */ + +/** @defgroup FSMC_Memory_Type + * @{ + */ + +#define FSMC_MemoryType_SRAM ((uint32_t)0x00000000) +#define FSMC_MemoryType_PSRAM ((uint32_t)0x00000004) +#define FSMC_MemoryType_NOR ((uint32_t)0x00000008) +#define IS_FSMC_MEMORY(MEMORY) (((MEMORY) == FSMC_MemoryType_SRAM) || \ + ((MEMORY) == FSMC_MemoryType_PSRAM)|| \ + ((MEMORY) == FSMC_MemoryType_NOR)) + +/** + * @} + */ + +/** @defgroup FSMC_Data_Width + * @{ + */ + +#define FSMC_MemoryDataWidth_8b ((uint32_t)0x00000000) +#define FSMC_MemoryDataWidth_16b ((uint32_t)0x00000010) +#define IS_FSMC_MEMORY_WIDTH(WIDTH) (((WIDTH) == FSMC_MemoryDataWidth_8b) || \ + ((WIDTH) == FSMC_MemoryDataWidth_16b)) + +/** + * @} + */ + +/** @defgroup FSMC_Burst_Access_Mode + * @{ + */ + +#define FSMC_BurstAccessMode_Disable ((uint32_t)0x00000000) +#define FSMC_BurstAccessMode_Enable ((uint32_t)0x00000100) +#define IS_FSMC_BURSTMODE(STATE) (((STATE) == FSMC_BurstAccessMode_Disable) || \ + ((STATE) == FSMC_BurstAccessMode_Enable)) +/** + * @} + */ + +/** @defgroup FSMC_AsynchronousWait + * @{ + */ +#define FSMC_AsynchronousWait_Disable ((uint32_t)0x00000000) +#define FSMC_AsynchronousWait_Enable ((uint32_t)0x00008000) +#define IS_FSMC_ASYNWAIT(STATE) (((STATE) == FSMC_AsynchronousWait_Disable) || \ + ((STATE) == FSMC_AsynchronousWait_Enable)) + +/** + * @} + */ + +/** @defgroup FSMC_Wait_Signal_Polarity + * @{ + */ + +#define FSMC_WaitSignalPolarity_Low ((uint32_t)0x00000000) +#define FSMC_WaitSignalPolarity_High ((uint32_t)0x00000200) +#define IS_FSMC_WAIT_POLARITY(POLARITY) (((POLARITY) == FSMC_WaitSignalPolarity_Low) || \ + ((POLARITY) == FSMC_WaitSignalPolarity_High)) + +/** + * @} + */ + +/** @defgroup FSMC_Wrap_Mode + * @{ + */ + +#define FSMC_WrapMode_Disable ((uint32_t)0x00000000) +#define FSMC_WrapMode_Enable ((uint32_t)0x00000400) +#define IS_FSMC_WRAP_MODE(MODE) (((MODE) == FSMC_WrapMode_Disable) || \ + ((MODE) == FSMC_WrapMode_Enable)) + +/** + * @} + */ + +/** @defgroup FSMC_Wait_Timing + * @{ + */ + +#define FSMC_WaitSignalActive_BeforeWaitState ((uint32_t)0x00000000) +#define FSMC_WaitSignalActive_DuringWaitState ((uint32_t)0x00000800) +#define IS_FSMC_WAIT_SIGNAL_ACTIVE(ACTIVE) (((ACTIVE) == FSMC_WaitSignalActive_BeforeWaitState) || \ + ((ACTIVE) == FSMC_WaitSignalActive_DuringWaitState)) + +/** + * @} + */ + +/** @defgroup FSMC_Write_Operation + * @{ + */ + +#define FSMC_WriteOperation_Disable ((uint32_t)0x00000000) +#define FSMC_WriteOperation_Enable ((uint32_t)0x00001000) +#define IS_FSMC_WRITE_OPERATION(OPERATION) (((OPERATION) == FSMC_WriteOperation_Disable) || \ + ((OPERATION) == FSMC_WriteOperation_Enable)) + +/** + * @} + */ + +/** @defgroup FSMC_Wait_Signal + * @{ + */ + +#define FSMC_WaitSignal_Disable ((uint32_t)0x00000000) +#define FSMC_WaitSignal_Enable ((uint32_t)0x00002000) +#define IS_FSMC_WAITE_SIGNAL(SIGNAL) (((SIGNAL) == FSMC_WaitSignal_Disable) || \ + ((SIGNAL) == FSMC_WaitSignal_Enable)) +/** + * @} + */ + +/** @defgroup FSMC_Extended_Mode + * @{ + */ + +#define FSMC_ExtendedMode_Disable ((uint32_t)0x00000000) +#define FSMC_ExtendedMode_Enable ((uint32_t)0x00004000) + +#define IS_FSMC_EXTENDED_MODE(MODE) (((MODE) == FSMC_ExtendedMode_Disable) || \ + ((MODE) == FSMC_ExtendedMode_Enable)) + +/** + * @} + */ + +/** @defgroup FSMC_Write_Burst + * @{ + */ + +#define FSMC_WriteBurst_Disable ((uint32_t)0x00000000) +#define FSMC_WriteBurst_Enable ((uint32_t)0x00080000) +#define IS_FSMC_WRITE_BURST(BURST) (((BURST) == FSMC_WriteBurst_Disable) || \ + ((BURST) == FSMC_WriteBurst_Enable)) +/** + * @} + */ + +/** @defgroup FSMC_Address_Setup_Time + * @{ + */ + +#define IS_FSMC_ADDRESS_SETUP_TIME(TIME) ((TIME) <= 0xF) + +/** + * @} + */ + +/** @defgroup FSMC_Address_Hold_Time + * @{ + */ + +#define IS_FSMC_ADDRESS_HOLD_TIME(TIME) ((TIME) <= 0xF) + +/** + * @} + */ + +/** @defgroup FSMC_Data_Setup_Time + * @{ + */ + +#define IS_FSMC_DATASETUP_TIME(TIME) (((TIME) > 0) && ((TIME) <= 0xFF)) + +/** + * @} + */ + +/** @defgroup FSMC_Bus_Turn_around_Duration + * @{ + */ + +#define IS_FSMC_TURNAROUND_TIME(TIME) ((TIME) <= 0xF) + +/** + * @} + */ + +/** @defgroup FSMC_CLK_Division + * @{ + */ + +#define IS_FSMC_CLK_DIV(DIV) ((DIV) <= 0xF) + +/** + * @} + */ + +/** @defgroup FSMC_Data_Latency + * @{ + */ + +#define IS_FSMC_DATA_LATENCY(LATENCY) ((LATENCY) <= 0xF) + +/** + * @} + */ + +/** @defgroup FSMC_Access_Mode + * @{ + */ + +#define FSMC_AccessMode_A ((uint32_t)0x00000000) +#define FSMC_AccessMode_B ((uint32_t)0x10000000) +#define FSMC_AccessMode_C ((uint32_t)0x20000000) +#define FSMC_AccessMode_D ((uint32_t)0x30000000) +#define IS_FSMC_ACCESS_MODE(MODE) (((MODE) == FSMC_AccessMode_A) || \ + ((MODE) == FSMC_AccessMode_B) || \ + ((MODE) == FSMC_AccessMode_C) || \ + ((MODE) == FSMC_AccessMode_D)) + +/** + * @} + */ + +/** + * @} + */ + +/** @defgroup NAND_PCCARD_Controller + * @{ + */ + +/** @defgroup FSMC_Wait_feature + * @{ + */ + +#define FSMC_Waitfeature_Disable ((uint32_t)0x00000000) +#define FSMC_Waitfeature_Enable ((uint32_t)0x00000002) +#define IS_FSMC_WAIT_FEATURE(FEATURE) (((FEATURE) == FSMC_Waitfeature_Disable) || \ + ((FEATURE) == FSMC_Waitfeature_Enable)) + +/** + * @} + */ + + +/** @defgroup FSMC_ECC + * @{ + */ + +#define FSMC_ECC_Disable ((uint32_t)0x00000000) +#define FSMC_ECC_Enable ((uint32_t)0x00000040) +#define IS_FSMC_ECC_STATE(STATE) (((STATE) == FSMC_ECC_Disable) || \ + ((STATE) == FSMC_ECC_Enable)) + +/** + * @} + */ + +/** @defgroup FSMC_ECC_Page_Size + * @{ + */ + +#define FSMC_ECCPageSize_256Bytes ((uint32_t)0x00000000) +#define FSMC_ECCPageSize_512Bytes ((uint32_t)0x00020000) +#define FSMC_ECCPageSize_1024Bytes ((uint32_t)0x00040000) +#define FSMC_ECCPageSize_2048Bytes ((uint32_t)0x00060000) +#define FSMC_ECCPageSize_4096Bytes ((uint32_t)0x00080000) +#define FSMC_ECCPageSize_8192Bytes ((uint32_t)0x000A0000) +#define IS_FSMC_ECCPAGE_SIZE(SIZE) (((SIZE) == FSMC_ECCPageSize_256Bytes) || \ + ((SIZE) == FSMC_ECCPageSize_512Bytes) || \ + ((SIZE) == FSMC_ECCPageSize_1024Bytes) || \ + ((SIZE) == FSMC_ECCPageSize_2048Bytes) || \ + ((SIZE) == FSMC_ECCPageSize_4096Bytes) || \ + ((SIZE) == FSMC_ECCPageSize_8192Bytes)) + +/** + * @} + */ + +/** @defgroup FSMC_TCLR_Setup_Time + * @{ + */ + +#define IS_FSMC_TCLR_TIME(TIME) ((TIME) <= 0xFF) + +/** + * @} + */ + +/** @defgroup FSMC_TAR_Setup_Time + * @{ + */ + +#define IS_FSMC_TAR_TIME(TIME) ((TIME) <= 0xFF) + +/** + * @} + */ + +/** @defgroup FSMC_Setup_Time + * @{ + */ + +#define IS_FSMC_SETUP_TIME(TIME) ((TIME) <= 0xFF) + +/** + * @} + */ + +/** @defgroup FSMC_Wait_Setup_Time + * @{ + */ + +#define IS_FSMC_WAIT_TIME(TIME) ((TIME) <= 0xFF) + +/** + * @} + */ + +/** @defgroup FSMC_Hold_Setup_Time + * @{ + */ + +#define IS_FSMC_HOLD_TIME(TIME) ((TIME) <= 0xFF) + +/** + * @} + */ + +/** @defgroup FSMC_HiZ_Setup_Time + * @{ + */ + +#define IS_FSMC_HIZ_TIME(TIME) ((TIME) <= 0xFF) + +/** + * @} + */ + +/** @defgroup FSMC_Interrupt_sources + * @{ + */ + +#define FSMC_IT_RisingEdge ((uint32_t)0x00000008) +#define FSMC_IT_Level ((uint32_t)0x00000010) +#define FSMC_IT_FallingEdge ((uint32_t)0x00000020) +#define IS_FSMC_IT(IT) ((((IT) & (uint32_t)0xFFFFFFC7) == 0x00000000) && ((IT) != 0x00000000)) +#define IS_FSMC_GET_IT(IT) (((IT) == FSMC_IT_RisingEdge) || \ + ((IT) == FSMC_IT_Level) || \ + ((IT) == FSMC_IT_FallingEdge)) +/** + * @} + */ + +/** @defgroup FSMC_Flags + * @{ + */ + +#define FSMC_FLAG_RisingEdge ((uint32_t)0x00000001) +#define FSMC_FLAG_Level ((uint32_t)0x00000002) +#define FSMC_FLAG_FallingEdge ((uint32_t)0x00000004) +#define FSMC_FLAG_FEMPT ((uint32_t)0x00000040) +#define IS_FSMC_GET_FLAG(FLAG) (((FLAG) == FSMC_FLAG_RisingEdge) || \ + ((FLAG) == FSMC_FLAG_Level) || \ + ((FLAG) == FSMC_FLAG_FallingEdge) || \ + ((FLAG) == FSMC_FLAG_FEMPT)) + +#define IS_FSMC_CLEAR_FLAG(FLAG) ((((FLAG) & (uint32_t)0xFFFFFFF8) == 0x00000000) && ((FLAG) != 0x00000000)) + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** @defgroup FSMC_Exported_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup FSMC_Exported_Functions + * @{ + */ + +void FSMC_NORSRAMDeInit(uint32_t FSMC_Bank); +void FSMC_NANDDeInit(uint32_t FSMC_Bank); +void FSMC_PCCARDDeInit(void); +void FSMC_NORSRAMInit(FSMC_NORSRAMInitTypeDef* FSMC_NORSRAMInitStruct); +void FSMC_NANDInit(FSMC_NANDInitTypeDef* FSMC_NANDInitStruct); +void FSMC_PCCARDInit(FSMC_PCCARDInitTypeDef* FSMC_PCCARDInitStruct); +void FSMC_NORSRAMStructInit(FSMC_NORSRAMInitTypeDef* FSMC_NORSRAMInitStruct); +void FSMC_NANDStructInit(FSMC_NANDInitTypeDef* FSMC_NANDInitStruct); +void FSMC_PCCARDStructInit(FSMC_PCCARDInitTypeDef* FSMC_PCCARDInitStruct); +void FSMC_NORSRAMCmd(uint32_t FSMC_Bank, FunctionalState NewState); +void FSMC_NANDCmd(uint32_t FSMC_Bank, FunctionalState NewState); +void FSMC_PCCARDCmd(FunctionalState NewState); +void FSMC_NANDECCCmd(uint32_t FSMC_Bank, FunctionalState NewState); +uint32_t FSMC_GetECC(uint32_t FSMC_Bank); +void FSMC_ITConfig(uint32_t FSMC_Bank, uint32_t FSMC_IT, FunctionalState NewState); +FlagStatus FSMC_GetFlagStatus(uint32_t FSMC_Bank, uint32_t FSMC_FLAG); +void FSMC_ClearFlag(uint32_t FSMC_Bank, uint32_t FSMC_FLAG); +ITStatus FSMC_GetITStatus(uint32_t FSMC_Bank, uint32_t FSMC_IT); +void FSMC_ClearITPendingBit(uint32_t FSMC_Bank, uint32_t FSMC_IT); + +#ifdef __cplusplus +} +#endif + +#endif /*__STM32F10x_FSMC_H */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_gpio.h b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_gpio.h new file mode 100644 index 0000000..1d64cab --- /dev/null +++ b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_gpio.h @@ -0,0 +1,386 @@ +/** + ****************************************************************************** + * @file stm32f10x_gpio.h + * @author MCD Application Team + * @version V3.5.0 + * @date 11-March-2011 + * @brief This file contains all the functions prototypes for the GPIO + * firmware library. + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

    © COPYRIGHT 2011 STMicroelectronics

    + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F10x_GPIO_H +#define __STM32F10x_GPIO_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f10x.h" + +/** @addtogroup STM32F10x_StdPeriph_Driver + * @{ + */ + +/** @addtogroup GPIO + * @{ + */ + +/** @defgroup GPIO_Exported_Types + * @{ + */ + +#define IS_GPIO_ALL_PERIPH(PERIPH) (((PERIPH) == GPIOA) || \ + ((PERIPH) == GPIOB) || \ + ((PERIPH) == GPIOC) || \ + ((PERIPH) == GPIOD) || \ + ((PERIPH) == GPIOE) || \ + ((PERIPH) == GPIOF) || \ + ((PERIPH) == GPIOG)) + +/** + * @brief Output Maximum frequency selection + */ + +typedef enum +{ + GPIO_Speed_10MHz = 1, + GPIO_Speed_2MHz, + GPIO_Speed_50MHz +}GPIOSpeed_TypeDef; +#define IS_GPIO_SPEED(SPEED) (((SPEED) == GPIO_Speed_10MHz) || ((SPEED) == GPIO_Speed_2MHz) || \ + ((SPEED) == GPIO_Speed_50MHz)) + +/** + * @brief Configuration Mode enumeration + */ + +typedef enum +{ GPIO_Mode_AIN = 0x0, + GPIO_Mode_IN_FLOATING = 0x04, + GPIO_Mode_IPD = 0x28, + GPIO_Mode_IPU = 0x48, + GPIO_Mode_Out_OD = 0x14, + GPIO_Mode_Out_PP = 0x10, + GPIO_Mode_AF_OD = 0x1C, + GPIO_Mode_AF_PP = 0x18 +}GPIOMode_TypeDef; + +#define IS_GPIO_MODE(MODE) (((MODE) == GPIO_Mode_AIN) || ((MODE) == GPIO_Mode_IN_FLOATING) || \ + ((MODE) == GPIO_Mode_IPD) || ((MODE) == GPIO_Mode_IPU) || \ + ((MODE) == GPIO_Mode_Out_OD) || ((MODE) == GPIO_Mode_Out_PP) || \ + ((MODE) == GPIO_Mode_AF_OD) || ((MODE) == GPIO_Mode_AF_PP)) + +/** + * @brief GPIO Init structure definition + */ + +typedef struct +{ + uint16_t GPIO_Pin; /*!< Specifies the GPIO pins to be configured. + This parameter can be any value of @ref GPIO_pins_define */ + + GPIOSpeed_TypeDef GPIO_Speed; /*!< Specifies the speed for the selected pins. + This parameter can be a value of @ref GPIOSpeed_TypeDef */ + + GPIOMode_TypeDef GPIO_Mode; /*!< Specifies the operating mode for the selected pins. + This parameter can be a value of @ref GPIOMode_TypeDef */ +}GPIO_InitTypeDef; + + +/** + * @brief Bit_SET and Bit_RESET enumeration + */ + +typedef enum +{ + Bit_RESET = 0, + Bit_SET +}BitAction; + +#define IS_GPIO_BIT_ACTION(ACTION) (((ACTION) == Bit_RESET) || ((ACTION) == Bit_SET)) + +/** + * @} + */ + +/** @defgroup GPIO_Exported_Constants + * @{ + */ + +/** @defgroup GPIO_pins_define + * @{ + */ + +#define GPIO_Pin_0 ((uint16_t)0x0001) /*!< Pin 0 selected */ +#define GPIO_Pin_1 ((uint16_t)0x0002) /*!< Pin 1 selected */ +#define GPIO_Pin_2 ((uint16_t)0x0004) /*!< Pin 2 selected */ +#define GPIO_Pin_3 ((uint16_t)0x0008) /*!< Pin 3 selected */ +#define GPIO_Pin_4 ((uint16_t)0x0010) /*!< Pin 4 selected */ +#define GPIO_Pin_5 ((uint16_t)0x0020) /*!< Pin 5 selected */ +#define GPIO_Pin_6 ((uint16_t)0x0040) /*!< Pin 6 selected */ +#define GPIO_Pin_7 ((uint16_t)0x0080) /*!< Pin 7 selected */ +#define GPIO_Pin_8 ((uint16_t)0x0100) /*!< Pin 8 selected */ +#define GPIO_Pin_9 ((uint16_t)0x0200) /*!< Pin 9 selected */ +#define GPIO_Pin_10 ((uint16_t)0x0400) /*!< Pin 10 selected */ +#define GPIO_Pin_11 ((uint16_t)0x0800) /*!< Pin 11 selected */ +#define GPIO_Pin_12 ((uint16_t)0x1000) /*!< Pin 12 selected */ +#define GPIO_Pin_13 ((uint16_t)0x2000) /*!< Pin 13 selected */ +#define GPIO_Pin_14 ((uint16_t)0x4000) /*!< Pin 14 selected */ +#define GPIO_Pin_15 ((uint16_t)0x8000) /*!< Pin 15 selected */ +#define GPIO_Pin_All ((uint16_t)0xFFFF) /*!< All pins selected */ + +#define IS_GPIO_PIN(PIN) ((((PIN) & (uint16_t)0x00) == 0x00) && ((PIN) != (uint16_t)0x00)) + +#define IS_GET_GPIO_PIN(PIN) (((PIN) == GPIO_Pin_0) || \ + ((PIN) == GPIO_Pin_1) || \ + ((PIN) == GPIO_Pin_2) || \ + ((PIN) == GPIO_Pin_3) || \ + ((PIN) == GPIO_Pin_4) || \ + ((PIN) == GPIO_Pin_5) || \ + ((PIN) == GPIO_Pin_6) || \ + ((PIN) == GPIO_Pin_7) || \ + ((PIN) == GPIO_Pin_8) || \ + ((PIN) == GPIO_Pin_9) || \ + ((PIN) == GPIO_Pin_10) || \ + ((PIN) == GPIO_Pin_11) || \ + ((PIN) == GPIO_Pin_12) || \ + ((PIN) == GPIO_Pin_13) || \ + ((PIN) == GPIO_Pin_14) || \ + ((PIN) == GPIO_Pin_15)) + +/** + * @} + */ + +/** @defgroup GPIO_Remap_define + * @{ + */ + +#define GPIO_Remap_SPI1 ((uint32_t)0x00000001) /*!< SPI1 Alternate Function mapping */ +#define GPIO_Remap_I2C1 ((uint32_t)0x00000002) /*!< I2C1 Alternate Function mapping */ +#define GPIO_Remap_USART1 ((uint32_t)0x00000004) /*!< USART1 Alternate Function mapping */ +#define GPIO_Remap_USART2 ((uint32_t)0x00000008) /*!< USART2 Alternate Function mapping */ +#define GPIO_PartialRemap_USART3 ((uint32_t)0x00140010) /*!< USART3 Partial Alternate Function mapping */ +#define GPIO_FullRemap_USART3 ((uint32_t)0x00140030) /*!< USART3 Full Alternate Function mapping */ +#define GPIO_PartialRemap_TIM1 ((uint32_t)0x00160040) /*!< TIM1 Partial Alternate Function mapping */ +#define GPIO_FullRemap_TIM1 ((uint32_t)0x001600C0) /*!< TIM1 Full Alternate Function mapping */ +#define GPIO_PartialRemap1_TIM2 ((uint32_t)0x00180100) /*!< TIM2 Partial1 Alternate Function mapping */ +#define GPIO_PartialRemap2_TIM2 ((uint32_t)0x00180200) /*!< TIM2 Partial2 Alternate Function mapping */ +#define GPIO_FullRemap_TIM2 ((uint32_t)0x00180300) /*!< TIM2 Full Alternate Function mapping */ +#define GPIO_PartialRemap_TIM3 ((uint32_t)0x001A0800) /*!< TIM3 Partial Alternate Function mapping */ +#define GPIO_FullRemap_TIM3 ((uint32_t)0x001A0C00) /*!< TIM3 Full Alternate Function mapping */ +#define GPIO_Remap_TIM4 ((uint32_t)0x00001000) /*!< TIM4 Alternate Function mapping */ +#define GPIO_Remap1_CAN1 ((uint32_t)0x001D4000) /*!< CAN1 Alternate Function mapping */ +#define GPIO_Remap2_CAN1 ((uint32_t)0x001D6000) /*!< CAN1 Alternate Function mapping */ +#define GPIO_Remap_PD01 ((uint32_t)0x00008000) /*!< PD01 Alternate Function mapping */ +#define GPIO_Remap_TIM5CH4_LSI ((uint32_t)0x00200001) /*!< LSI connected to TIM5 Channel4 input capture for calibration */ +#define GPIO_Remap_ADC1_ETRGINJ ((uint32_t)0x00200002) /*!< ADC1 External Trigger Injected Conversion remapping */ +#define GPIO_Remap_ADC1_ETRGREG ((uint32_t)0x00200004) /*!< ADC1 External Trigger Regular Conversion remapping */ +#define GPIO_Remap_ADC2_ETRGINJ ((uint32_t)0x00200008) /*!< ADC2 External Trigger Injected Conversion remapping */ +#define GPIO_Remap_ADC2_ETRGREG ((uint32_t)0x00200010) /*!< ADC2 External Trigger Regular Conversion remapping */ +#define GPIO_Remap_ETH ((uint32_t)0x00200020) /*!< Ethernet remapping (only for Connectivity line devices) */ +#define GPIO_Remap_CAN2 ((uint32_t)0x00200040) /*!< CAN2 remapping (only for Connectivity line devices) */ +#define GPIO_Remap_SWJ_NoJTRST ((uint32_t)0x00300100) /*!< Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRST */ +#define GPIO_Remap_SWJ_JTAGDisable ((uint32_t)0x00300200) /*!< JTAG-DP Disabled and SW-DP Enabled */ +#define GPIO_Remap_SWJ_Disable ((uint32_t)0x00300400) /*!< Full SWJ Disabled (JTAG-DP + SW-DP) */ +#define GPIO_Remap_SPI3 ((uint32_t)0x00201100) /*!< SPI3/I2S3 Alternate Function mapping (only for Connectivity line devices) */ +#define GPIO_Remap_TIM2ITR1_PTP_SOF ((uint32_t)0x00202000) /*!< Ethernet PTP output or USB OTG SOF (Start of Frame) connected + to TIM2 Internal Trigger 1 for calibration + (only for Connectivity line devices) */ +#define GPIO_Remap_PTP_PPS ((uint32_t)0x00204000) /*!< Ethernet MAC PPS_PTS output on PB05 (only for Connectivity line devices) */ + +#define GPIO_Remap_TIM15 ((uint32_t)0x80000001) /*!< TIM15 Alternate Function mapping (only for Value line devices) */ +#define GPIO_Remap_TIM16 ((uint32_t)0x80000002) /*!< TIM16 Alternate Function mapping (only for Value line devices) */ +#define GPIO_Remap_TIM17 ((uint32_t)0x80000004) /*!< TIM17 Alternate Function mapping (only for Value line devices) */ +#define GPIO_Remap_CEC ((uint32_t)0x80000008) /*!< CEC Alternate Function mapping (only for Value line devices) */ +#define GPIO_Remap_TIM1_DMA ((uint32_t)0x80000010) /*!< TIM1 DMA requests mapping (only for Value line devices) */ + +#define GPIO_Remap_TIM9 ((uint32_t)0x80000020) /*!< TIM9 Alternate Function mapping (only for XL-density devices) */ +#define GPIO_Remap_TIM10 ((uint32_t)0x80000040) /*!< TIM10 Alternate Function mapping (only for XL-density devices) */ +#define GPIO_Remap_TIM11 ((uint32_t)0x80000080) /*!< TIM11 Alternate Function mapping (only for XL-density devices) */ +#define GPIO_Remap_TIM13 ((uint32_t)0x80000100) /*!< TIM13 Alternate Function mapping (only for High density Value line and XL-density devices) */ +#define GPIO_Remap_TIM14 ((uint32_t)0x80000200) /*!< TIM14 Alternate Function mapping (only for High density Value line and XL-density devices) */ +#define GPIO_Remap_FSMC_NADV ((uint32_t)0x80000400) /*!< FSMC_NADV Alternate Function mapping (only for High density Value line and XL-density devices) */ + +#define GPIO_Remap_TIM67_DAC_DMA ((uint32_t)0x80000800) /*!< TIM6/TIM7 and DAC DMA requests remapping (only for High density Value line devices) */ +#define GPIO_Remap_TIM12 ((uint32_t)0x80001000) /*!< TIM12 Alternate Function mapping (only for High density Value line devices) */ +#define GPIO_Remap_MISC ((uint32_t)0x80002000) /*!< Miscellaneous Remap (DMA2 Channel5 Position and DAC Trigger remapping, + only for High density Value line devices) */ + +#define IS_GPIO_REMAP(REMAP) (((REMAP) == GPIO_Remap_SPI1) || ((REMAP) == GPIO_Remap_I2C1) || \ + ((REMAP) == GPIO_Remap_USART1) || ((REMAP) == GPIO_Remap_USART2) || \ + ((REMAP) == GPIO_PartialRemap_USART3) || ((REMAP) == GPIO_FullRemap_USART3) || \ + ((REMAP) == GPIO_PartialRemap_TIM1) || ((REMAP) == GPIO_FullRemap_TIM1) || \ + ((REMAP) == GPIO_PartialRemap1_TIM2) || ((REMAP) == GPIO_PartialRemap2_TIM2) || \ + ((REMAP) == GPIO_FullRemap_TIM2) || ((REMAP) == GPIO_PartialRemap_TIM3) || \ + ((REMAP) == GPIO_FullRemap_TIM3) || ((REMAP) == GPIO_Remap_TIM4) || \ + ((REMAP) == GPIO_Remap1_CAN1) || ((REMAP) == GPIO_Remap2_CAN1) || \ + ((REMAP) == GPIO_Remap_PD01) || ((REMAP) == GPIO_Remap_TIM5CH4_LSI) || \ + ((REMAP) == GPIO_Remap_ADC1_ETRGINJ) ||((REMAP) == GPIO_Remap_ADC1_ETRGREG) || \ + ((REMAP) == GPIO_Remap_ADC2_ETRGINJ) ||((REMAP) == GPIO_Remap_ADC2_ETRGREG) || \ + ((REMAP) == GPIO_Remap_ETH) ||((REMAP) == GPIO_Remap_CAN2) || \ + ((REMAP) == GPIO_Remap_SWJ_NoJTRST) || ((REMAP) == GPIO_Remap_SWJ_JTAGDisable) || \ + ((REMAP) == GPIO_Remap_SWJ_Disable)|| ((REMAP) == GPIO_Remap_SPI3) || \ + ((REMAP) == GPIO_Remap_TIM2ITR1_PTP_SOF) || ((REMAP) == GPIO_Remap_PTP_PPS) || \ + ((REMAP) == GPIO_Remap_TIM15) || ((REMAP) == GPIO_Remap_TIM16) || \ + ((REMAP) == GPIO_Remap_TIM17) || ((REMAP) == GPIO_Remap_CEC) || \ + ((REMAP) == GPIO_Remap_TIM1_DMA) || ((REMAP) == GPIO_Remap_TIM9) || \ + ((REMAP) == GPIO_Remap_TIM10) || ((REMAP) == GPIO_Remap_TIM11) || \ + ((REMAP) == GPIO_Remap_TIM13) || ((REMAP) == GPIO_Remap_TIM14) || \ + ((REMAP) == GPIO_Remap_FSMC_NADV) || ((REMAP) == GPIO_Remap_TIM67_DAC_DMA) || \ + ((REMAP) == GPIO_Remap_TIM12) || ((REMAP) == GPIO_Remap_MISC)) + +/** + * @} + */ + +/** @defgroup GPIO_Port_Sources + * @{ + */ + +#define GPIO_PortSourceGPIOA ((uint8_t)0x00) +#define GPIO_PortSourceGPIOB ((uint8_t)0x01) +#define GPIO_PortSourceGPIOC ((uint8_t)0x02) +#define GPIO_PortSourceGPIOD ((uint8_t)0x03) +#define GPIO_PortSourceGPIOE ((uint8_t)0x04) +#define GPIO_PortSourceGPIOF ((uint8_t)0x05) +#define GPIO_PortSourceGPIOG ((uint8_t)0x06) +#define IS_GPIO_EVENTOUT_PORT_SOURCE(PORTSOURCE) (((PORTSOURCE) == GPIO_PortSourceGPIOA) || \ + ((PORTSOURCE) == GPIO_PortSourceGPIOB) || \ + ((PORTSOURCE) == GPIO_PortSourceGPIOC) || \ + ((PORTSOURCE) == GPIO_PortSourceGPIOD) || \ + ((PORTSOURCE) == GPIO_PortSourceGPIOE)) + +#define IS_GPIO_EXTI_PORT_SOURCE(PORTSOURCE) (((PORTSOURCE) == GPIO_PortSourceGPIOA) || \ + ((PORTSOURCE) == GPIO_PortSourceGPIOB) || \ + ((PORTSOURCE) == GPIO_PortSourceGPIOC) || \ + ((PORTSOURCE) == GPIO_PortSourceGPIOD) || \ + ((PORTSOURCE) == GPIO_PortSourceGPIOE) || \ + ((PORTSOURCE) == GPIO_PortSourceGPIOF) || \ + ((PORTSOURCE) == GPIO_PortSourceGPIOG)) + +/** + * @} + */ + +/** @defgroup GPIO_Pin_sources + * @{ + */ + +#define GPIO_PinSource0 ((uint8_t)0x00) +#define GPIO_PinSource1 ((uint8_t)0x01) +#define GPIO_PinSource2 ((uint8_t)0x02) +#define GPIO_PinSource3 ((uint8_t)0x03) +#define GPIO_PinSource4 ((uint8_t)0x04) +#define GPIO_PinSource5 ((uint8_t)0x05) +#define GPIO_PinSource6 ((uint8_t)0x06) +#define GPIO_PinSource7 ((uint8_t)0x07) +#define GPIO_PinSource8 ((uint8_t)0x08) +#define GPIO_PinSource9 ((uint8_t)0x09) +#define GPIO_PinSource10 ((uint8_t)0x0A) +#define GPIO_PinSource11 ((uint8_t)0x0B) +#define GPIO_PinSource12 ((uint8_t)0x0C) +#define GPIO_PinSource13 ((uint8_t)0x0D) +#define GPIO_PinSource14 ((uint8_t)0x0E) +#define GPIO_PinSource15 ((uint8_t)0x0F) + +#define IS_GPIO_PIN_SOURCE(PINSOURCE) (((PINSOURCE) == GPIO_PinSource0) || \ + ((PINSOURCE) == GPIO_PinSource1) || \ + ((PINSOURCE) == GPIO_PinSource2) || \ + ((PINSOURCE) == GPIO_PinSource3) || \ + ((PINSOURCE) == GPIO_PinSource4) || \ + ((PINSOURCE) == GPIO_PinSource5) || \ + ((PINSOURCE) == GPIO_PinSource6) || \ + ((PINSOURCE) == GPIO_PinSource7) || \ + ((PINSOURCE) == GPIO_PinSource8) || \ + ((PINSOURCE) == GPIO_PinSource9) || \ + ((PINSOURCE) == GPIO_PinSource10) || \ + ((PINSOURCE) == GPIO_PinSource11) || \ + ((PINSOURCE) == GPIO_PinSource12) || \ + ((PINSOURCE) == GPIO_PinSource13) || \ + ((PINSOURCE) == GPIO_PinSource14) || \ + ((PINSOURCE) == GPIO_PinSource15)) + +/** + * @} + */ + +/** @defgroup Ethernet_Media_Interface + * @{ + */ +#define GPIO_ETH_MediaInterface_MII ((u32)0x00000000) +#define GPIO_ETH_MediaInterface_RMII ((u32)0x00000001) + +#define IS_GPIO_ETH_MEDIA_INTERFACE(INTERFACE) (((INTERFACE) == GPIO_ETH_MediaInterface_MII) || \ + ((INTERFACE) == GPIO_ETH_MediaInterface_RMII)) + +/** + * @} + */ +/** + * @} + */ + +/** @defgroup GPIO_Exported_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup GPIO_Exported_Functions + * @{ + */ + +void GPIO_DeInit(GPIO_TypeDef* GPIOx); +void GPIO_AFIODeInit(void); +void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct); +void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct); +uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); +uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx); +uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); +uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx); +void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); +void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); +void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal); +void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal); +void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); +void GPIO_EventOutputConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource); +void GPIO_EventOutputCmd(FunctionalState NewState); +void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState); +void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource); +void GPIO_ETH_MediaInterfaceConfig(uint32_t GPIO_ETH_MediaInterface); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F10x_GPIO_H */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_i2c.h b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_i2c.h new file mode 100644 index 0000000..60e4b14 --- /dev/null +++ b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_i2c.h @@ -0,0 +1,684 @@ +/** + ****************************************************************************** + * @file stm32f10x_i2c.h + * @author MCD Application Team + * @version V3.5.0 + * @date 11-March-2011 + * @brief This file contains all the functions prototypes for the I2C firmware + * library. + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

    © COPYRIGHT 2011 STMicroelectronics

    + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F10x_I2C_H +#define __STM32F10x_I2C_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f10x.h" + +/** @addtogroup STM32F10x_StdPeriph_Driver + * @{ + */ + +/** @addtogroup I2C + * @{ + */ + +/** @defgroup I2C_Exported_Types + * @{ + */ + +/** + * @brief I2C Init structure definition + */ + +typedef struct +{ + uint32_t I2C_ClockSpeed; /*!< Specifies the clock frequency. + This parameter must be set to a value lower than 400kHz */ + + uint16_t I2C_Mode; /*!< Specifies the I2C mode. + This parameter can be a value of @ref I2C_mode */ + + uint16_t I2C_DutyCycle; /*!< Specifies the I2C fast mode duty cycle. + This parameter can be a value of @ref I2C_duty_cycle_in_fast_mode */ + + uint16_t I2C_OwnAddress1; /*!< Specifies the first device own address. + This parameter can be a 7-bit or 10-bit address. */ + + uint16_t I2C_Ack; /*!< Enables or disables the acknowledgement. + This parameter can be a value of @ref I2C_acknowledgement */ + + uint16_t I2C_AcknowledgedAddress; /*!< Specifies if 7-bit or 10-bit address is acknowledged. + This parameter can be a value of @ref I2C_acknowledged_address */ +}I2C_InitTypeDef; + +/** + * @} + */ + + +/** @defgroup I2C_Exported_Constants + * @{ + */ + +#define IS_I2C_ALL_PERIPH(PERIPH) (((PERIPH) == I2C1) || \ + ((PERIPH) == I2C2)) +/** @defgroup I2C_mode + * @{ + */ + +#define I2C_Mode_I2C ((uint16_t)0x0000) +#define I2C_Mode_SMBusDevice ((uint16_t)0x0002) +#define I2C_Mode_SMBusHost ((uint16_t)0x000A) +#define IS_I2C_MODE(MODE) (((MODE) == I2C_Mode_I2C) || \ + ((MODE) == I2C_Mode_SMBusDevice) || \ + ((MODE) == I2C_Mode_SMBusHost)) +/** + * @} + */ + +/** @defgroup I2C_duty_cycle_in_fast_mode + * @{ + */ + +#define I2C_DutyCycle_16_9 ((uint16_t)0x4000) /*!< I2C fast mode Tlow/Thigh = 16/9 */ +#define I2C_DutyCycle_2 ((uint16_t)0xBFFF) /*!< I2C fast mode Tlow/Thigh = 2 */ +#define IS_I2C_DUTY_CYCLE(CYCLE) (((CYCLE) == I2C_DutyCycle_16_9) || \ + ((CYCLE) == I2C_DutyCycle_2)) +/** + * @} + */ + +/** @defgroup I2C_acknowledgement + * @{ + */ + +#define I2C_Ack_Enable ((uint16_t)0x0400) +#define I2C_Ack_Disable ((uint16_t)0x0000) +#define IS_I2C_ACK_STATE(STATE) (((STATE) == I2C_Ack_Enable) || \ + ((STATE) == I2C_Ack_Disable)) +/** + * @} + */ + +/** @defgroup I2C_transfer_direction + * @{ + */ + +#define I2C_Direction_Transmitter ((uint8_t)0x00) +#define I2C_Direction_Receiver ((uint8_t)0x01) +#define IS_I2C_DIRECTION(DIRECTION) (((DIRECTION) == I2C_Direction_Transmitter) || \ + ((DIRECTION) == I2C_Direction_Receiver)) +/** + * @} + */ + +/** @defgroup I2C_acknowledged_address + * @{ + */ + +#define I2C_AcknowledgedAddress_7bit ((uint16_t)0x4000) +#define I2C_AcknowledgedAddress_10bit ((uint16_t)0xC000) +#define IS_I2C_ACKNOWLEDGE_ADDRESS(ADDRESS) (((ADDRESS) == I2C_AcknowledgedAddress_7bit) || \ + ((ADDRESS) == I2C_AcknowledgedAddress_10bit)) +/** + * @} + */ + +/** @defgroup I2C_registers + * @{ + */ + +#define I2C_Register_CR1 ((uint8_t)0x00) +#define I2C_Register_CR2 ((uint8_t)0x04) +#define I2C_Register_OAR1 ((uint8_t)0x08) +#define I2C_Register_OAR2 ((uint8_t)0x0C) +#define I2C_Register_DR ((uint8_t)0x10) +#define I2C_Register_SR1 ((uint8_t)0x14) +#define I2C_Register_SR2 ((uint8_t)0x18) +#define I2C_Register_CCR ((uint8_t)0x1C) +#define I2C_Register_TRISE ((uint8_t)0x20) +#define IS_I2C_REGISTER(REGISTER) (((REGISTER) == I2C_Register_CR1) || \ + ((REGISTER) == I2C_Register_CR2) || \ + ((REGISTER) == I2C_Register_OAR1) || \ + ((REGISTER) == I2C_Register_OAR2) || \ + ((REGISTER) == I2C_Register_DR) || \ + ((REGISTER) == I2C_Register_SR1) || \ + ((REGISTER) == I2C_Register_SR2) || \ + ((REGISTER) == I2C_Register_CCR) || \ + ((REGISTER) == I2C_Register_TRISE)) +/** + * @} + */ + +/** @defgroup I2C_SMBus_alert_pin_level + * @{ + */ + +#define I2C_SMBusAlert_Low ((uint16_t)0x2000) +#define I2C_SMBusAlert_High ((uint16_t)0xDFFF) +#define IS_I2C_SMBUS_ALERT(ALERT) (((ALERT) == I2C_SMBusAlert_Low) || \ + ((ALERT) == I2C_SMBusAlert_High)) +/** + * @} + */ + +/** @defgroup I2C_PEC_position + * @{ + */ + +#define I2C_PECPosition_Next ((uint16_t)0x0800) +#define I2C_PECPosition_Current ((uint16_t)0xF7FF) +#define IS_I2C_PEC_POSITION(POSITION) (((POSITION) == I2C_PECPosition_Next) || \ + ((POSITION) == I2C_PECPosition_Current)) +/** + * @} + */ + +/** @defgroup I2C_NCAK_position + * @{ + */ + +#define I2C_NACKPosition_Next ((uint16_t)0x0800) +#define I2C_NACKPosition_Current ((uint16_t)0xF7FF) +#define IS_I2C_NACK_POSITION(POSITION) (((POSITION) == I2C_NACKPosition_Next) || \ + ((POSITION) == I2C_NACKPosition_Current)) +/** + * @} + */ + +/** @defgroup I2C_interrupts_definition + * @{ + */ + +#define I2C_IT_BUF ((uint16_t)0x0400) +#define I2C_IT_EVT ((uint16_t)0x0200) +#define I2C_IT_ERR ((uint16_t)0x0100) +#define IS_I2C_CONFIG_IT(IT) ((((IT) & (uint16_t)0xF8FF) == 0x00) && ((IT) != 0x00)) +/** + * @} + */ + +/** @defgroup I2C_interrupts_definition + * @{ + */ + +#define I2C_IT_SMBALERT ((uint32_t)0x01008000) +#define I2C_IT_TIMEOUT ((uint32_t)0x01004000) +#define I2C_IT_PECERR ((uint32_t)0x01001000) +#define I2C_IT_OVR ((uint32_t)0x01000800) +#define I2C_IT_AF ((uint32_t)0x01000400) +#define I2C_IT_ARLO ((uint32_t)0x01000200) +#define I2C_IT_BERR ((uint32_t)0x01000100) +#define I2C_IT_TXE ((uint32_t)0x06000080) +#define I2C_IT_RXNE ((uint32_t)0x06000040) +#define I2C_IT_STOPF ((uint32_t)0x02000010) +#define I2C_IT_ADD10 ((uint32_t)0x02000008) +#define I2C_IT_BTF ((uint32_t)0x02000004) +#define I2C_IT_ADDR ((uint32_t)0x02000002) +#define I2C_IT_SB ((uint32_t)0x02000001) + +#define IS_I2C_CLEAR_IT(IT) ((((IT) & (uint16_t)0x20FF) == 0x00) && ((IT) != (uint16_t)0x00)) + +#define IS_I2C_GET_IT(IT) (((IT) == I2C_IT_SMBALERT) || ((IT) == I2C_IT_TIMEOUT) || \ + ((IT) == I2C_IT_PECERR) || ((IT) == I2C_IT_OVR) || \ + ((IT) == I2C_IT_AF) || ((IT) == I2C_IT_ARLO) || \ + ((IT) == I2C_IT_BERR) || ((IT) == I2C_IT_TXE) || \ + ((IT) == I2C_IT_RXNE) || ((IT) == I2C_IT_STOPF) || \ + ((IT) == I2C_IT_ADD10) || ((IT) == I2C_IT_BTF) || \ + ((IT) == I2C_IT_ADDR) || ((IT) == I2C_IT_SB)) +/** + * @} + */ + +/** @defgroup I2C_flags_definition + * @{ + */ + +/** + * @brief SR2 register flags + */ + +#define I2C_FLAG_DUALF ((uint32_t)0x00800000) +#define I2C_FLAG_SMBHOST ((uint32_t)0x00400000) +#define I2C_FLAG_SMBDEFAULT ((uint32_t)0x00200000) +#define I2C_FLAG_GENCALL ((uint32_t)0x00100000) +#define I2C_FLAG_TRA ((uint32_t)0x00040000) +#define I2C_FLAG_BUSY ((uint32_t)0x00020000) +#define I2C_FLAG_MSL ((uint32_t)0x00010000) + +/** + * @brief SR1 register flags + */ + +#define I2C_FLAG_SMBALERT ((uint32_t)0x10008000) +#define I2C_FLAG_TIMEOUT ((uint32_t)0x10004000) +#define I2C_FLAG_PECERR ((uint32_t)0x10001000) +#define I2C_FLAG_OVR ((uint32_t)0x10000800) +#define I2C_FLAG_AF ((uint32_t)0x10000400) +#define I2C_FLAG_ARLO ((uint32_t)0x10000200) +#define I2C_FLAG_BERR ((uint32_t)0x10000100) +#define I2C_FLAG_TXE ((uint32_t)0x10000080) +#define I2C_FLAG_RXNE ((uint32_t)0x10000040) +#define I2C_FLAG_STOPF ((uint32_t)0x10000010) +#define I2C_FLAG_ADD10 ((uint32_t)0x10000008) +#define I2C_FLAG_BTF ((uint32_t)0x10000004) +#define I2C_FLAG_ADDR ((uint32_t)0x10000002) +#define I2C_FLAG_SB ((uint32_t)0x10000001) + +#define IS_I2C_CLEAR_FLAG(FLAG) ((((FLAG) & (uint16_t)0x20FF) == 0x00) && ((FLAG) != (uint16_t)0x00)) + +#define IS_I2C_GET_FLAG(FLAG) (((FLAG) == I2C_FLAG_DUALF) || ((FLAG) == I2C_FLAG_SMBHOST) || \ + ((FLAG) == I2C_FLAG_SMBDEFAULT) || ((FLAG) == I2C_FLAG_GENCALL) || \ + ((FLAG) == I2C_FLAG_TRA) || ((FLAG) == I2C_FLAG_BUSY) || \ + ((FLAG) == I2C_FLAG_MSL) || ((FLAG) == I2C_FLAG_SMBALERT) || \ + ((FLAG) == I2C_FLAG_TIMEOUT) || ((FLAG) == I2C_FLAG_PECERR) || \ + ((FLAG) == I2C_FLAG_OVR) || ((FLAG) == I2C_FLAG_AF) || \ + ((FLAG) == I2C_FLAG_ARLO) || ((FLAG) == I2C_FLAG_BERR) || \ + ((FLAG) == I2C_FLAG_TXE) || ((FLAG) == I2C_FLAG_RXNE) || \ + ((FLAG) == I2C_FLAG_STOPF) || ((FLAG) == I2C_FLAG_ADD10) || \ + ((FLAG) == I2C_FLAG_BTF) || ((FLAG) == I2C_FLAG_ADDR) || \ + ((FLAG) == I2C_FLAG_SB)) +/** + * @} + */ + +/** @defgroup I2C_Events + * @{ + */ + +/*======================================== + + I2C Master Events (Events grouped in order of communication) + ==========================================*/ +/** + * @brief Communication start + * + * After sending the START condition (I2C_GenerateSTART() function) the master + * has to wait for this event. It means that the Start condition has been correctly + * released on the I2C bus (the bus is free, no other devices is communicating). + * + */ +/* --EV5 */ +#define I2C_EVENT_MASTER_MODE_SELECT ((uint32_t)0x00030001) /* BUSY, MSL and SB flag */ + +/** + * @brief Address Acknowledge + * + * After checking on EV5 (start condition correctly released on the bus), the + * master sends the address of the slave(s) with which it will communicate + * (I2C_Send7bitAddress() function, it also determines the direction of the communication: + * Master transmitter or Receiver). Then the master has to wait that a slave acknowledges + * his address. If an acknowledge is sent on the bus, one of the following events will + * be set: + * + * 1) In case of Master Receiver (7-bit addressing): the I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED + * event is set. + * + * 2) In case of Master Transmitter (7-bit addressing): the I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED + * is set + * + * 3) In case of 10-Bit addressing mode, the master (just after generating the START + * and checking on EV5) has to send the header of 10-bit addressing mode (I2C_SendData() + * function). Then master should wait on EV9. It means that the 10-bit addressing + * header has been correctly sent on the bus. Then master should send the second part of + * the 10-bit address (LSB) using the function I2C_Send7bitAddress(). Then master + * should wait for event EV6. + * + */ + +/* --EV6 */ +#define I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED ((uint32_t)0x00070082) /* BUSY, MSL, ADDR, TXE and TRA flags */ +#define I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED ((uint32_t)0x00030002) /* BUSY, MSL and ADDR flags */ +/* --EV9 */ +#define I2C_EVENT_MASTER_MODE_ADDRESS10 ((uint32_t)0x00030008) /* BUSY, MSL and ADD10 flags */ + +/** + * @brief Communication events + * + * If a communication is established (START condition generated and slave address + * acknowledged) then the master has to check on one of the following events for + * communication procedures: + * + * 1) Master Receiver mode: The master has to wait on the event EV7 then to read + * the data received from the slave (I2C_ReceiveData() function). + * + * 2) Master Transmitter mode: The master has to send data (I2C_SendData() + * function) then to wait on event EV8 or EV8_2. + * These two events are similar: + * - EV8 means that the data has been written in the data register and is + * being shifted out. + * - EV8_2 means that the data has been physically shifted out and output + * on the bus. + * In most cases, using EV8 is sufficient for the application. + * Using EV8_2 leads to a slower communication but ensure more reliable test. + * EV8_2 is also more suitable than EV8 for testing on the last data transmission + * (before Stop condition generation). + * + * @note In case the user software does not guarantee that this event EV7 is + * managed before the current byte end of transfer, then user may check on EV7 + * and BTF flag at the same time (ie. (I2C_EVENT_MASTER_BYTE_RECEIVED | I2C_FLAG_BTF)). + * In this case the communication may be slower. + * + */ + +/* Master RECEIVER mode -----------------------------*/ +/* --EV7 */ +#define I2C_EVENT_MASTER_BYTE_RECEIVED ((uint32_t)0x00030040) /* BUSY, MSL and RXNE flags */ + +/* Master TRANSMITTER mode --------------------------*/ +/* --EV8 */ +#define I2C_EVENT_MASTER_BYTE_TRANSMITTING ((uint32_t)0x00070080) /* TRA, BUSY, MSL, TXE flags */ +/* --EV8_2 */ +#define I2C_EVENT_MASTER_BYTE_TRANSMITTED ((uint32_t)0x00070084) /* TRA, BUSY, MSL, TXE and BTF flags */ + + +/*======================================== + + I2C Slave Events (Events grouped in order of communication) + ==========================================*/ + +/** + * @brief Communication start events + * + * Wait on one of these events at the start of the communication. It means that + * the I2C peripheral detected a Start condition on the bus (generated by master + * device) followed by the peripheral address. The peripheral generates an ACK + * condition on the bus (if the acknowledge feature is enabled through function + * I2C_AcknowledgeConfig()) and the events listed above are set : + * + * 1) In normal case (only one address managed by the slave), when the address + * sent by the master matches the own address of the peripheral (configured by + * I2C_OwnAddress1 field) the I2C_EVENT_SLAVE_XXX_ADDRESS_MATCHED event is set + * (where XXX could be TRANSMITTER or RECEIVER). + * + * 2) In case the address sent by the master matches the second address of the + * peripheral (configured by the function I2C_OwnAddress2Config() and enabled + * by the function I2C_DualAddressCmd()) the events I2C_EVENT_SLAVE_XXX_SECONDADDRESS_MATCHED + * (where XXX could be TRANSMITTER or RECEIVER) are set. + * + * 3) In case the address sent by the master is General Call (address 0x00) and + * if the General Call is enabled for the peripheral (using function I2C_GeneralCallCmd()) + * the following event is set I2C_EVENT_SLAVE_GENERALCALLADDRESS_MATCHED. + * + */ + +/* --EV1 (all the events below are variants of EV1) */ +/* 1) Case of One Single Address managed by the slave */ +#define I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED ((uint32_t)0x00020002) /* BUSY and ADDR flags */ +#define I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED ((uint32_t)0x00060082) /* TRA, BUSY, TXE and ADDR flags */ + +/* 2) Case of Dual address managed by the slave */ +#define I2C_EVENT_SLAVE_RECEIVER_SECONDADDRESS_MATCHED ((uint32_t)0x00820000) /* DUALF and BUSY flags */ +#define I2C_EVENT_SLAVE_TRANSMITTER_SECONDADDRESS_MATCHED ((uint32_t)0x00860080) /* DUALF, TRA, BUSY and TXE flags */ + +/* 3) Case of General Call enabled for the slave */ +#define I2C_EVENT_SLAVE_GENERALCALLADDRESS_MATCHED ((uint32_t)0x00120000) /* GENCALL and BUSY flags */ + +/** + * @brief Communication events + * + * Wait on one of these events when EV1 has already been checked and: + * + * - Slave RECEIVER mode: + * - EV2: When the application is expecting a data byte to be received. + * - EV4: When the application is expecting the end of the communication: master + * sends a stop condition and data transmission is stopped. + * + * - Slave Transmitter mode: + * - EV3: When a byte has been transmitted by the slave and the application is expecting + * the end of the byte transmission. The two events I2C_EVENT_SLAVE_BYTE_TRANSMITTED and + * I2C_EVENT_SLAVE_BYTE_TRANSMITTING are similar. The second one can optionally be + * used when the user software doesn't guarantee the EV3 is managed before the + * current byte end of transfer. + * - EV3_2: When the master sends a NACK in order to tell slave that data transmission + * shall end (before sending the STOP condition). In this case slave has to stop sending + * data bytes and expect a Stop condition on the bus. + * + * @note In case the user software does not guarantee that the event EV2 is + * managed before the current byte end of transfer, then user may check on EV2 + * and BTF flag at the same time (ie. (I2C_EVENT_SLAVE_BYTE_RECEIVED | I2C_FLAG_BTF)). + * In this case the communication may be slower. + * + */ + +/* Slave RECEIVER mode --------------------------*/ +/* --EV2 */ +#define I2C_EVENT_SLAVE_BYTE_RECEIVED ((uint32_t)0x00020040) /* BUSY and RXNE flags */ +/* --EV4 */ +#define I2C_EVENT_SLAVE_STOP_DETECTED ((uint32_t)0x00000010) /* STOPF flag */ + +/* Slave TRANSMITTER mode -----------------------*/ +/* --EV3 */ +#define I2C_EVENT_SLAVE_BYTE_TRANSMITTED ((uint32_t)0x00060084) /* TRA, BUSY, TXE and BTF flags */ +#define I2C_EVENT_SLAVE_BYTE_TRANSMITTING ((uint32_t)0x00060080) /* TRA, BUSY and TXE flags */ +/* --EV3_2 */ +#define I2C_EVENT_SLAVE_ACK_FAILURE ((uint32_t)0x00000400) /* AF flag */ + +/*=========================== End of Events Description ==========================================*/ + +#define IS_I2C_EVENT(EVENT) (((EVENT) == I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED) || \ + ((EVENT) == I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED) || \ + ((EVENT) == I2C_EVENT_SLAVE_TRANSMITTER_SECONDADDRESS_MATCHED) || \ + ((EVENT) == I2C_EVENT_SLAVE_RECEIVER_SECONDADDRESS_MATCHED) || \ + ((EVENT) == I2C_EVENT_SLAVE_GENERALCALLADDRESS_MATCHED) || \ + ((EVENT) == I2C_EVENT_SLAVE_BYTE_RECEIVED) || \ + ((EVENT) == (I2C_EVENT_SLAVE_BYTE_RECEIVED | I2C_FLAG_DUALF)) || \ + ((EVENT) == (I2C_EVENT_SLAVE_BYTE_RECEIVED | I2C_FLAG_GENCALL)) || \ + ((EVENT) == I2C_EVENT_SLAVE_BYTE_TRANSMITTED) || \ + ((EVENT) == (I2C_EVENT_SLAVE_BYTE_TRANSMITTED | I2C_FLAG_DUALF)) || \ + ((EVENT) == (I2C_EVENT_SLAVE_BYTE_TRANSMITTED | I2C_FLAG_GENCALL)) || \ + ((EVENT) == I2C_EVENT_SLAVE_STOP_DETECTED) || \ + ((EVENT) == I2C_EVENT_MASTER_MODE_SELECT) || \ + ((EVENT) == I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED) || \ + ((EVENT) == I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED) || \ + ((EVENT) == I2C_EVENT_MASTER_BYTE_RECEIVED) || \ + ((EVENT) == I2C_EVENT_MASTER_BYTE_TRANSMITTED) || \ + ((EVENT) == I2C_EVENT_MASTER_BYTE_TRANSMITTING) || \ + ((EVENT) == I2C_EVENT_MASTER_MODE_ADDRESS10) || \ + ((EVENT) == I2C_EVENT_SLAVE_ACK_FAILURE)) +/** + * @} + */ + +/** @defgroup I2C_own_address1 + * @{ + */ + +#define IS_I2C_OWN_ADDRESS1(ADDRESS1) ((ADDRESS1) <= 0x3FF) +/** + * @} + */ + +/** @defgroup I2C_clock_speed + * @{ + */ + +#define IS_I2C_CLOCK_SPEED(SPEED) (((SPEED) >= 0x1) && ((SPEED) <= 400000)) +/** + * @} + */ + +/** + * @} + */ + +/** @defgroup I2C_Exported_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup I2C_Exported_Functions + * @{ + */ + +void I2C_DeInit(I2C_TypeDef* I2Cx); +void I2C_Init(I2C_TypeDef* I2Cx, I2C_InitTypeDef* I2C_InitStruct); +void I2C_StructInit(I2C_InitTypeDef* I2C_InitStruct); +void I2C_Cmd(I2C_TypeDef* I2Cx, FunctionalState NewState); +void I2C_DMACmd(I2C_TypeDef* I2Cx, FunctionalState NewState); +void I2C_DMALastTransferCmd(I2C_TypeDef* I2Cx, FunctionalState NewState); +void I2C_GenerateSTART(I2C_TypeDef* I2Cx, FunctionalState NewState); +void I2C_GenerateSTOP(I2C_TypeDef* I2Cx, FunctionalState NewState); +void I2C_AcknowledgeConfig(I2C_TypeDef* I2Cx, FunctionalState NewState); +void I2C_OwnAddress2Config(I2C_TypeDef* I2Cx, uint8_t Address); +void I2C_DualAddressCmd(I2C_TypeDef* I2Cx, FunctionalState NewState); +void I2C_GeneralCallCmd(I2C_TypeDef* I2Cx, FunctionalState NewState); +void I2C_ITConfig(I2C_TypeDef* I2Cx, uint16_t I2C_IT, FunctionalState NewState); +void I2C_SendData(I2C_TypeDef* I2Cx, uint8_t Data); +uint8_t I2C_ReceiveData(I2C_TypeDef* I2Cx); +void I2C_Send7bitAddress(I2C_TypeDef* I2Cx, uint8_t Address, uint8_t I2C_Direction); +uint16_t I2C_ReadRegister(I2C_TypeDef* I2Cx, uint8_t I2C_Register); +void I2C_SoftwareResetCmd(I2C_TypeDef* I2Cx, FunctionalState NewState); +void I2C_NACKPositionConfig(I2C_TypeDef* I2Cx, uint16_t I2C_NACKPosition); +void I2C_SMBusAlertConfig(I2C_TypeDef* I2Cx, uint16_t I2C_SMBusAlert); +void I2C_TransmitPEC(I2C_TypeDef* I2Cx, FunctionalState NewState); +void I2C_PECPositionConfig(I2C_TypeDef* I2Cx, uint16_t I2C_PECPosition); +void I2C_CalculatePEC(I2C_TypeDef* I2Cx, FunctionalState NewState); +uint8_t I2C_GetPEC(I2C_TypeDef* I2Cx); +void I2C_ARPCmd(I2C_TypeDef* I2Cx, FunctionalState NewState); +void I2C_StretchClockCmd(I2C_TypeDef* I2Cx, FunctionalState NewState); +void I2C_FastModeDutyCycleConfig(I2C_TypeDef* I2Cx, uint16_t I2C_DutyCycle); + +/** + * @brief + **************************************************************************************** + * + * I2C State Monitoring Functions + * + **************************************************************************************** + * This I2C driver provides three different ways for I2C state monitoring + * depending on the application requirements and constraints: + * + * + * 1) Basic state monitoring: + * Using I2C_CheckEvent() function: + * It compares the status registers (SR1 and SR2) content to a given event + * (can be the combination of one or more flags). + * It returns SUCCESS if the current status includes the given flags + * and returns ERROR if one or more flags are missing in the current status. + * - When to use: + * - This function is suitable for most applications as well as for startup + * activity since the events are fully described in the product reference manual + * (RM0008). + * - It is also suitable for users who need to define their own events. + * - Limitations: + * - If an error occurs (ie. error flags are set besides to the monitored flags), + * the I2C_CheckEvent() function may return SUCCESS despite the communication + * hold or corrupted real state. + * In this case, it is advised to use error interrupts to monitor the error + * events and handle them in the interrupt IRQ handler. + * + * @note + * For error management, it is advised to use the following functions: + * - I2C_ITConfig() to configure and enable the error interrupts (I2C_IT_ERR). + * - I2Cx_ER_IRQHandler() which is called when the error interrupt occurs. + * Where x is the peripheral instance (I2C1, I2C2 ...) + * - I2C_GetFlagStatus() or I2C_GetITStatus() to be called into I2Cx_ER_IRQHandler() + * in order to determine which error occurred. + * - I2C_ClearFlag() or I2C_ClearITPendingBit() and/or I2C_SoftwareResetCmd() + * and/or I2C_GenerateStop() in order to clear the error flag and source, + * and return to correct communication status. + * + * + * 2) Advanced state monitoring: + * Using the function I2C_GetLastEvent() which returns the image of both status + * registers in a single word (uint32_t) (Status Register 2 value is shifted left + * by 16 bits and concatenated to Status Register 1). + * - When to use: + * - This function is suitable for the same applications above but it allows to + * overcome the limitations of I2C_GetFlagStatus() function (see below). + * The returned value could be compared to events already defined in the + * library (stm32f10x_i2c.h) or to custom values defined by user. + * - This function is suitable when multiple flags are monitored at the same time. + * - At the opposite of I2C_CheckEvent() function, this function allows user to + * choose when an event is accepted (when all events flags are set and no + * other flags are set or just when the needed flags are set like + * I2C_CheckEvent() function). + * - Limitations: + * - User may need to define his own events. + * - Same remark concerning the error management is applicable for this + * function if user decides to check only regular communication flags (and + * ignores error flags). + * + * + * 3) Flag-based state monitoring: + * Using the function I2C_GetFlagStatus() which simply returns the status of + * one single flag (ie. I2C_FLAG_RXNE ...). + * - When to use: + * - This function could be used for specific applications or in debug phase. + * - It is suitable when only one flag checking is needed (most I2C events + * are monitored through multiple flags). + * - Limitations: + * - When calling this function, the Status register is accessed. Some flags are + * cleared when the status register is accessed. So checking the status + * of one Flag, may clear other ones. + * - Function may need to be called twice or more in order to monitor one + * single event. + * + */ + +/** + * + * 1) Basic state monitoring + ******************************************************************************* + */ +ErrorStatus I2C_CheckEvent(I2C_TypeDef* I2Cx, uint32_t I2C_EVENT); +/** + * + * 2) Advanced state monitoring + ******************************************************************************* + */ +uint32_t I2C_GetLastEvent(I2C_TypeDef* I2Cx); +/** + * + * 3) Flag-based state monitoring + ******************************************************************************* + */ +FlagStatus I2C_GetFlagStatus(I2C_TypeDef* I2Cx, uint32_t I2C_FLAG); +/** + * + ******************************************************************************* + */ + +void I2C_ClearFlag(I2C_TypeDef* I2Cx, uint32_t I2C_FLAG); +ITStatus I2C_GetITStatus(I2C_TypeDef* I2Cx, uint32_t I2C_IT); +void I2C_ClearITPendingBit(I2C_TypeDef* I2Cx, uint32_t I2C_IT); + +#ifdef __cplusplus +} +#endif + +#endif /*__STM32F10x_I2C_H */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_iwdg.h b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_iwdg.h new file mode 100644 index 0000000..25b0bb5 --- /dev/null +++ b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_iwdg.h @@ -0,0 +1,140 @@ +/** + ****************************************************************************** + * @file stm32f10x_iwdg.h + * @author MCD Application Team + * @version V3.5.0 + * @date 11-March-2011 + * @brief This file contains all the functions prototypes for the IWDG + * firmware library. + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

    © COPYRIGHT 2011 STMicroelectronics

    + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F10x_IWDG_H +#define __STM32F10x_IWDG_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f10x.h" + +/** @addtogroup STM32F10x_StdPeriph_Driver + * @{ + */ + +/** @addtogroup IWDG + * @{ + */ + +/** @defgroup IWDG_Exported_Types + * @{ + */ + +/** + * @} + */ + +/** @defgroup IWDG_Exported_Constants + * @{ + */ + +/** @defgroup IWDG_WriteAccess + * @{ + */ + +#define IWDG_WriteAccess_Enable ((uint16_t)0x5555) +#define IWDG_WriteAccess_Disable ((uint16_t)0x0000) +#define IS_IWDG_WRITE_ACCESS(ACCESS) (((ACCESS) == IWDG_WriteAccess_Enable) || \ + ((ACCESS) == IWDG_WriteAccess_Disable)) +/** + * @} + */ + +/** @defgroup IWDG_prescaler + * @{ + */ + +#define IWDG_Prescaler_4 ((uint8_t)0x00) +#define IWDG_Prescaler_8 ((uint8_t)0x01) +#define IWDG_Prescaler_16 ((uint8_t)0x02) +#define IWDG_Prescaler_32 ((uint8_t)0x03) +#define IWDG_Prescaler_64 ((uint8_t)0x04) +#define IWDG_Prescaler_128 ((uint8_t)0x05) +#define IWDG_Prescaler_256 ((uint8_t)0x06) +#define IS_IWDG_PRESCALER(PRESCALER) (((PRESCALER) == IWDG_Prescaler_4) || \ + ((PRESCALER) == IWDG_Prescaler_8) || \ + ((PRESCALER) == IWDG_Prescaler_16) || \ + ((PRESCALER) == IWDG_Prescaler_32) || \ + ((PRESCALER) == IWDG_Prescaler_64) || \ + ((PRESCALER) == IWDG_Prescaler_128)|| \ + ((PRESCALER) == IWDG_Prescaler_256)) +/** + * @} + */ + +/** @defgroup IWDG_Flag + * @{ + */ + +#define IWDG_FLAG_PVU ((uint16_t)0x0001) +#define IWDG_FLAG_RVU ((uint16_t)0x0002) +#define IS_IWDG_FLAG(FLAG) (((FLAG) == IWDG_FLAG_PVU) || ((FLAG) == IWDG_FLAG_RVU)) +#define IS_IWDG_RELOAD(RELOAD) ((RELOAD) <= 0xFFF) +/** + * @} + */ + +/** + * @} + */ + +/** @defgroup IWDG_Exported_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup IWDG_Exported_Functions + * @{ + */ + +void IWDG_WriteAccessCmd(uint16_t IWDG_WriteAccess); +void IWDG_SetPrescaler(uint8_t IWDG_Prescaler); +void IWDG_SetReload(uint16_t Reload); +void IWDG_ReloadCounter(void); +void IWDG_Enable(void); +FlagStatus IWDG_GetFlagStatus(uint16_t IWDG_FLAG); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F10x_IWDG_H */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_pwr.h b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_pwr.h new file mode 100644 index 0000000000000000000000000000000000000000..ba5bb6b15de0ad55fbf70920497ac314997371c5 GIT binary patch literal 12288 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 K=BI6Q4*my}19DaX literal 0 HcmV?d00001 diff --git a/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_rcc.h b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_rcc.h new file mode 100644 index 0000000..1149c34 --- /dev/null +++ b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_rcc.h @@ -0,0 +1,727 @@ +/** + ****************************************************************************** + * @file stm32f10x_rcc.h + * @author MCD Application Team + * @version V3.5.0 + * @date 11-March-2011 + * @brief This file contains all the functions prototypes for the RCC firmware + * library. + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

    © COPYRIGHT 2011 STMicroelectronics

    + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F10x_RCC_H +#define __STM32F10x_RCC_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f10x.h" + +/** @addtogroup STM32F10x_StdPeriph_Driver + * @{ + */ + +/** @addtogroup RCC + * @{ + */ + +/** @defgroup RCC_Exported_Types + * @{ + */ + +typedef struct +{ + uint32_t SYSCLK_Frequency; /*!< returns SYSCLK clock frequency expressed in Hz */ + uint32_t HCLK_Frequency; /*!< returns HCLK clock frequency expressed in Hz */ + uint32_t PCLK1_Frequency; /*!< returns PCLK1 clock frequency expressed in Hz */ + uint32_t PCLK2_Frequency; /*!< returns PCLK2 clock frequency expressed in Hz */ + uint32_t ADCCLK_Frequency; /*!< returns ADCCLK clock frequency expressed in Hz */ +}RCC_ClocksTypeDef; + +/** + * @} + */ + +/** @defgroup RCC_Exported_Constants + * @{ + */ + +/** @defgroup HSE_configuration + * @{ + */ + +#define RCC_HSE_OFF ((uint32_t)0x00000000) +#define RCC_HSE_ON ((uint32_t)0x00010000) +#define RCC_HSE_Bypass ((uint32_t)0x00040000) +#define IS_RCC_HSE(HSE) (((HSE) == RCC_HSE_OFF) || ((HSE) == RCC_HSE_ON) || \ + ((HSE) == RCC_HSE_Bypass)) + +/** + * @} + */ + +/** @defgroup PLL_entry_clock_source + * @{ + */ + +#define RCC_PLLSource_HSI_Div2 ((uint32_t)0x00000000) + +#if !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD_VL) && !defined (STM32F10X_HD_VL) && !defined (STM32F10X_CL) + #define RCC_PLLSource_HSE_Div1 ((uint32_t)0x00010000) + #define RCC_PLLSource_HSE_Div2 ((uint32_t)0x00030000) + #define IS_RCC_PLL_SOURCE(SOURCE) (((SOURCE) == RCC_PLLSource_HSI_Div2) || \ + ((SOURCE) == RCC_PLLSource_HSE_Div1) || \ + ((SOURCE) == RCC_PLLSource_HSE_Div2)) +#else + #define RCC_PLLSource_PREDIV1 ((uint32_t)0x00010000) + #define IS_RCC_PLL_SOURCE(SOURCE) (((SOURCE) == RCC_PLLSource_HSI_Div2) || \ + ((SOURCE) == RCC_PLLSource_PREDIV1)) +#endif /* STM32F10X_CL */ + +/** + * @} + */ + +/** @defgroup PLL_multiplication_factor + * @{ + */ +#ifndef STM32F10X_CL + #define RCC_PLLMul_2 ((uint32_t)0x00000000) + #define RCC_PLLMul_3 ((uint32_t)0x00040000) + #define RCC_PLLMul_4 ((uint32_t)0x00080000) + #define RCC_PLLMul_5 ((uint32_t)0x000C0000) + #define RCC_PLLMul_6 ((uint32_t)0x00100000) + #define RCC_PLLMul_7 ((uint32_t)0x00140000) + #define RCC_PLLMul_8 ((uint32_t)0x00180000) + #define RCC_PLLMul_9 ((uint32_t)0x001C0000) + #define RCC_PLLMul_10 ((uint32_t)0x00200000) + #define RCC_PLLMul_11 ((uint32_t)0x00240000) + #define RCC_PLLMul_12 ((uint32_t)0x00280000) + #define RCC_PLLMul_13 ((uint32_t)0x002C0000) + #define RCC_PLLMul_14 ((uint32_t)0x00300000) + #define RCC_PLLMul_15 ((uint32_t)0x00340000) + #define RCC_PLLMul_16 ((uint32_t)0x00380000) + #define IS_RCC_PLL_MUL(MUL) (((MUL) == RCC_PLLMul_2) || ((MUL) == RCC_PLLMul_3) || \ + ((MUL) == RCC_PLLMul_4) || ((MUL) == RCC_PLLMul_5) || \ + ((MUL) == RCC_PLLMul_6) || ((MUL) == RCC_PLLMul_7) || \ + ((MUL) == RCC_PLLMul_8) || ((MUL) == RCC_PLLMul_9) || \ + ((MUL) == RCC_PLLMul_10) || ((MUL) == RCC_PLLMul_11) || \ + ((MUL) == RCC_PLLMul_12) || ((MUL) == RCC_PLLMul_13) || \ + ((MUL) == RCC_PLLMul_14) || ((MUL) == RCC_PLLMul_15) || \ + ((MUL) == RCC_PLLMul_16)) + +#else + #define RCC_PLLMul_4 ((uint32_t)0x00080000) + #define RCC_PLLMul_5 ((uint32_t)0x000C0000) + #define RCC_PLLMul_6 ((uint32_t)0x00100000) + #define RCC_PLLMul_7 ((uint32_t)0x00140000) + #define RCC_PLLMul_8 ((uint32_t)0x00180000) + #define RCC_PLLMul_9 ((uint32_t)0x001C0000) + #define RCC_PLLMul_6_5 ((uint32_t)0x00340000) + + #define IS_RCC_PLL_MUL(MUL) (((MUL) == RCC_PLLMul_4) || ((MUL) == RCC_PLLMul_5) || \ + ((MUL) == RCC_PLLMul_6) || ((MUL) == RCC_PLLMul_7) || \ + ((MUL) == RCC_PLLMul_8) || ((MUL) == RCC_PLLMul_9) || \ + ((MUL) == RCC_PLLMul_6_5)) +#endif /* STM32F10X_CL */ +/** + * @} + */ + +/** @defgroup PREDIV1_division_factor + * @{ + */ +#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL) || defined (STM32F10X_CL) + #define RCC_PREDIV1_Div1 ((uint32_t)0x00000000) + #define RCC_PREDIV1_Div2 ((uint32_t)0x00000001) + #define RCC_PREDIV1_Div3 ((uint32_t)0x00000002) + #define RCC_PREDIV1_Div4 ((uint32_t)0x00000003) + #define RCC_PREDIV1_Div5 ((uint32_t)0x00000004) + #define RCC_PREDIV1_Div6 ((uint32_t)0x00000005) + #define RCC_PREDIV1_Div7 ((uint32_t)0x00000006) + #define RCC_PREDIV1_Div8 ((uint32_t)0x00000007) + #define RCC_PREDIV1_Div9 ((uint32_t)0x00000008) + #define RCC_PREDIV1_Div10 ((uint32_t)0x00000009) + #define RCC_PREDIV1_Div11 ((uint32_t)0x0000000A) + #define RCC_PREDIV1_Div12 ((uint32_t)0x0000000B) + #define RCC_PREDIV1_Div13 ((uint32_t)0x0000000C) + #define RCC_PREDIV1_Div14 ((uint32_t)0x0000000D) + #define RCC_PREDIV1_Div15 ((uint32_t)0x0000000E) + #define RCC_PREDIV1_Div16 ((uint32_t)0x0000000F) + + #define IS_RCC_PREDIV1(PREDIV1) (((PREDIV1) == RCC_PREDIV1_Div1) || ((PREDIV1) == RCC_PREDIV1_Div2) || \ + ((PREDIV1) == RCC_PREDIV1_Div3) || ((PREDIV1) == RCC_PREDIV1_Div4) || \ + ((PREDIV1) == RCC_PREDIV1_Div5) || ((PREDIV1) == RCC_PREDIV1_Div6) || \ + ((PREDIV1) == RCC_PREDIV1_Div7) || ((PREDIV1) == RCC_PREDIV1_Div8) || \ + ((PREDIV1) == RCC_PREDIV1_Div9) || ((PREDIV1) == RCC_PREDIV1_Div10) || \ + ((PREDIV1) == RCC_PREDIV1_Div11) || ((PREDIV1) == RCC_PREDIV1_Div12) || \ + ((PREDIV1) == RCC_PREDIV1_Div13) || ((PREDIV1) == RCC_PREDIV1_Div14) || \ + ((PREDIV1) == RCC_PREDIV1_Div15) || ((PREDIV1) == RCC_PREDIV1_Div16)) +#endif +/** + * @} + */ + + +/** @defgroup PREDIV1_clock_source + * @{ + */ +#ifdef STM32F10X_CL +/* PREDIV1 clock source (for STM32 connectivity line devices) */ + #define RCC_PREDIV1_Source_HSE ((uint32_t)0x00000000) + #define RCC_PREDIV1_Source_PLL2 ((uint32_t)0x00010000) + + #define IS_RCC_PREDIV1_SOURCE(SOURCE) (((SOURCE) == RCC_PREDIV1_Source_HSE) || \ + ((SOURCE) == RCC_PREDIV1_Source_PLL2)) +#elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL) +/* PREDIV1 clock source (for STM32 Value line devices) */ + #define RCC_PREDIV1_Source_HSE ((uint32_t)0x00000000) + + #define IS_RCC_PREDIV1_SOURCE(SOURCE) (((SOURCE) == RCC_PREDIV1_Source_HSE)) +#endif +/** + * @} + */ + +#ifdef STM32F10X_CL +/** @defgroup PREDIV2_division_factor + * @{ + */ + + #define RCC_PREDIV2_Div1 ((uint32_t)0x00000000) + #define RCC_PREDIV2_Div2 ((uint32_t)0x00000010) + #define RCC_PREDIV2_Div3 ((uint32_t)0x00000020) + #define RCC_PREDIV2_Div4 ((uint32_t)0x00000030) + #define RCC_PREDIV2_Div5 ((uint32_t)0x00000040) + #define RCC_PREDIV2_Div6 ((uint32_t)0x00000050) + #define RCC_PREDIV2_Div7 ((uint32_t)0x00000060) + #define RCC_PREDIV2_Div8 ((uint32_t)0x00000070) + #define RCC_PREDIV2_Div9 ((uint32_t)0x00000080) + #define RCC_PREDIV2_Div10 ((uint32_t)0x00000090) + #define RCC_PREDIV2_Div11 ((uint32_t)0x000000A0) + #define RCC_PREDIV2_Div12 ((uint32_t)0x000000B0) + #define RCC_PREDIV2_Div13 ((uint32_t)0x000000C0) + #define RCC_PREDIV2_Div14 ((uint32_t)0x000000D0) + #define RCC_PREDIV2_Div15 ((uint32_t)0x000000E0) + #define RCC_PREDIV2_Div16 ((uint32_t)0x000000F0) + + #define IS_RCC_PREDIV2(PREDIV2) (((PREDIV2) == RCC_PREDIV2_Div1) || ((PREDIV2) == RCC_PREDIV2_Div2) || \ + ((PREDIV2) == RCC_PREDIV2_Div3) || ((PREDIV2) == RCC_PREDIV2_Div4) || \ + ((PREDIV2) == RCC_PREDIV2_Div5) || ((PREDIV2) == RCC_PREDIV2_Div6) || \ + ((PREDIV2) == RCC_PREDIV2_Div7) || ((PREDIV2) == RCC_PREDIV2_Div8) || \ + ((PREDIV2) == RCC_PREDIV2_Div9) || ((PREDIV2) == RCC_PREDIV2_Div10) || \ + ((PREDIV2) == RCC_PREDIV2_Div11) || ((PREDIV2) == RCC_PREDIV2_Div12) || \ + ((PREDIV2) == RCC_PREDIV2_Div13) || ((PREDIV2) == RCC_PREDIV2_Div14) || \ + ((PREDIV2) == RCC_PREDIV2_Div15) || ((PREDIV2) == RCC_PREDIV2_Div16)) +/** + * @} + */ + + +/** @defgroup PLL2_multiplication_factor + * @{ + */ + + #define RCC_PLL2Mul_8 ((uint32_t)0x00000600) + #define RCC_PLL2Mul_9 ((uint32_t)0x00000700) + #define RCC_PLL2Mul_10 ((uint32_t)0x00000800) + #define RCC_PLL2Mul_11 ((uint32_t)0x00000900) + #define RCC_PLL2Mul_12 ((uint32_t)0x00000A00) + #define RCC_PLL2Mul_13 ((uint32_t)0x00000B00) + #define RCC_PLL2Mul_14 ((uint32_t)0x00000C00) + #define RCC_PLL2Mul_16 ((uint32_t)0x00000E00) + #define RCC_PLL2Mul_20 ((uint32_t)0x00000F00) + + #define IS_RCC_PLL2_MUL(MUL) (((MUL) == RCC_PLL2Mul_8) || ((MUL) == RCC_PLL2Mul_9) || \ + ((MUL) == RCC_PLL2Mul_10) || ((MUL) == RCC_PLL2Mul_11) || \ + ((MUL) == RCC_PLL2Mul_12) || ((MUL) == RCC_PLL2Mul_13) || \ + ((MUL) == RCC_PLL2Mul_14) || ((MUL) == RCC_PLL2Mul_16) || \ + ((MUL) == RCC_PLL2Mul_20)) +/** + * @} + */ + + +/** @defgroup PLL3_multiplication_factor + * @{ + */ + + #define RCC_PLL3Mul_8 ((uint32_t)0x00006000) + #define RCC_PLL3Mul_9 ((uint32_t)0x00007000) + #define RCC_PLL3Mul_10 ((uint32_t)0x00008000) + #define RCC_PLL3Mul_11 ((uint32_t)0x00009000) + #define RCC_PLL3Mul_12 ((uint32_t)0x0000A000) + #define RCC_PLL3Mul_13 ((uint32_t)0x0000B000) + #define RCC_PLL3Mul_14 ((uint32_t)0x0000C000) + #define RCC_PLL3Mul_16 ((uint32_t)0x0000E000) + #define RCC_PLL3Mul_20 ((uint32_t)0x0000F000) + + #define IS_RCC_PLL3_MUL(MUL) (((MUL) == RCC_PLL3Mul_8) || ((MUL) == RCC_PLL3Mul_9) || \ + ((MUL) == RCC_PLL3Mul_10) || ((MUL) == RCC_PLL3Mul_11) || \ + ((MUL) == RCC_PLL3Mul_12) || ((MUL) == RCC_PLL3Mul_13) || \ + ((MUL) == RCC_PLL3Mul_14) || ((MUL) == RCC_PLL3Mul_16) || \ + ((MUL) == RCC_PLL3Mul_20)) +/** + * @} + */ + +#endif /* STM32F10X_CL */ + + +/** @defgroup System_clock_source + * @{ + */ + +#define RCC_SYSCLKSource_HSI ((uint32_t)0x00000000) +#define RCC_SYSCLKSource_HSE ((uint32_t)0x00000001) +#define RCC_SYSCLKSource_PLLCLK ((uint32_t)0x00000002) +#define IS_RCC_SYSCLK_SOURCE(SOURCE) (((SOURCE) == RCC_SYSCLKSource_HSI) || \ + ((SOURCE) == RCC_SYSCLKSource_HSE) || \ + ((SOURCE) == RCC_SYSCLKSource_PLLCLK)) +/** + * @} + */ + +/** @defgroup AHB_clock_source + * @{ + */ + +#define RCC_SYSCLK_Div1 ((uint32_t)0x00000000) +#define RCC_SYSCLK_Div2 ((uint32_t)0x00000080) +#define RCC_SYSCLK_Div4 ((uint32_t)0x00000090) +#define RCC_SYSCLK_Div8 ((uint32_t)0x000000A0) +#define RCC_SYSCLK_Div16 ((uint32_t)0x000000B0) +#define RCC_SYSCLK_Div64 ((uint32_t)0x000000C0) +#define RCC_SYSCLK_Div128 ((uint32_t)0x000000D0) +#define RCC_SYSCLK_Div256 ((uint32_t)0x000000E0) +#define RCC_SYSCLK_Div512 ((uint32_t)0x000000F0) +#define IS_RCC_HCLK(HCLK) (((HCLK) == RCC_SYSCLK_Div1) || ((HCLK) == RCC_SYSCLK_Div2) || \ + ((HCLK) == RCC_SYSCLK_Div4) || ((HCLK) == RCC_SYSCLK_Div8) || \ + ((HCLK) == RCC_SYSCLK_Div16) || ((HCLK) == RCC_SYSCLK_Div64) || \ + ((HCLK) == RCC_SYSCLK_Div128) || ((HCLK) == RCC_SYSCLK_Div256) || \ + ((HCLK) == RCC_SYSCLK_Div512)) +/** + * @} + */ + +/** @defgroup APB1_APB2_clock_source + * @{ + */ + +#define RCC_HCLK_Div1 ((uint32_t)0x00000000) +#define RCC_HCLK_Div2 ((uint32_t)0x00000400) +#define RCC_HCLK_Div4 ((uint32_t)0x00000500) +#define RCC_HCLK_Div8 ((uint32_t)0x00000600) +#define RCC_HCLK_Div16 ((uint32_t)0x00000700) +#define IS_RCC_PCLK(PCLK) (((PCLK) == RCC_HCLK_Div1) || ((PCLK) == RCC_HCLK_Div2) || \ + ((PCLK) == RCC_HCLK_Div4) || ((PCLK) == RCC_HCLK_Div8) || \ + ((PCLK) == RCC_HCLK_Div16)) +/** + * @} + */ + +/** @defgroup RCC_Interrupt_source + * @{ + */ + +#define RCC_IT_LSIRDY ((uint8_t)0x01) +#define RCC_IT_LSERDY ((uint8_t)0x02) +#define RCC_IT_HSIRDY ((uint8_t)0x04) +#define RCC_IT_HSERDY ((uint8_t)0x08) +#define RCC_IT_PLLRDY ((uint8_t)0x10) +#define RCC_IT_CSS ((uint8_t)0x80) + +#ifndef STM32F10X_CL + #define IS_RCC_IT(IT) ((((IT) & (uint8_t)0xE0) == 0x00) && ((IT) != 0x00)) + #define IS_RCC_GET_IT(IT) (((IT) == RCC_IT_LSIRDY) || ((IT) == RCC_IT_LSERDY) || \ + ((IT) == RCC_IT_HSIRDY) || ((IT) == RCC_IT_HSERDY) || \ + ((IT) == RCC_IT_PLLRDY) || ((IT) == RCC_IT_CSS)) + #define IS_RCC_CLEAR_IT(IT) ((((IT) & (uint8_t)0x60) == 0x00) && ((IT) != 0x00)) +#else + #define RCC_IT_PLL2RDY ((uint8_t)0x20) + #define RCC_IT_PLL3RDY ((uint8_t)0x40) + #define IS_RCC_IT(IT) ((((IT) & (uint8_t)0x80) == 0x00) && ((IT) != 0x00)) + #define IS_RCC_GET_IT(IT) (((IT) == RCC_IT_LSIRDY) || ((IT) == RCC_IT_LSERDY) || \ + ((IT) == RCC_IT_HSIRDY) || ((IT) == RCC_IT_HSERDY) || \ + ((IT) == RCC_IT_PLLRDY) || ((IT) == RCC_IT_CSS) || \ + ((IT) == RCC_IT_PLL2RDY) || ((IT) == RCC_IT_PLL3RDY)) + #define IS_RCC_CLEAR_IT(IT) ((IT) != 0x00) +#endif /* STM32F10X_CL */ + + +/** + * @} + */ + +#ifndef STM32F10X_CL +/** @defgroup USB_Device_clock_source + * @{ + */ + + #define RCC_USBCLKSource_PLLCLK_1Div5 ((uint8_t)0x00) + #define RCC_USBCLKSource_PLLCLK_Div1 ((uint8_t)0x01) + + #define IS_RCC_USBCLK_SOURCE(SOURCE) (((SOURCE) == RCC_USBCLKSource_PLLCLK_1Div5) || \ + ((SOURCE) == RCC_USBCLKSource_PLLCLK_Div1)) +/** + * @} + */ +#else +/** @defgroup USB_OTG_FS_clock_source + * @{ + */ + #define RCC_OTGFSCLKSource_PLLVCO_Div3 ((uint8_t)0x00) + #define RCC_OTGFSCLKSource_PLLVCO_Div2 ((uint8_t)0x01) + + #define IS_RCC_OTGFSCLK_SOURCE(SOURCE) (((SOURCE) == RCC_OTGFSCLKSource_PLLVCO_Div3) || \ + ((SOURCE) == RCC_OTGFSCLKSource_PLLVCO_Div2)) +/** + * @} + */ +#endif /* STM32F10X_CL */ + + +#ifdef STM32F10X_CL +/** @defgroup I2S2_clock_source + * @{ + */ + #define RCC_I2S2CLKSource_SYSCLK ((uint8_t)0x00) + #define RCC_I2S2CLKSource_PLL3_VCO ((uint8_t)0x01) + + #define IS_RCC_I2S2CLK_SOURCE(SOURCE) (((SOURCE) == RCC_I2S2CLKSource_SYSCLK) || \ + ((SOURCE) == RCC_I2S2CLKSource_PLL3_VCO)) +/** + * @} + */ + +/** @defgroup I2S3_clock_source + * @{ + */ + #define RCC_I2S3CLKSource_SYSCLK ((uint8_t)0x00) + #define RCC_I2S3CLKSource_PLL3_VCO ((uint8_t)0x01) + + #define IS_RCC_I2S3CLK_SOURCE(SOURCE) (((SOURCE) == RCC_I2S3CLKSource_SYSCLK) || \ + ((SOURCE) == RCC_I2S3CLKSource_PLL3_VCO)) +/** + * @} + */ +#endif /* STM32F10X_CL */ + + +/** @defgroup ADC_clock_source + * @{ + */ + +#define RCC_PCLK2_Div2 ((uint32_t)0x00000000) +#define RCC_PCLK2_Div4 ((uint32_t)0x00004000) +#define RCC_PCLK2_Div6 ((uint32_t)0x00008000) +#define RCC_PCLK2_Div8 ((uint32_t)0x0000C000) +#define IS_RCC_ADCCLK(ADCCLK) (((ADCCLK) == RCC_PCLK2_Div2) || ((ADCCLK) == RCC_PCLK2_Div4) || \ + ((ADCCLK) == RCC_PCLK2_Div6) || ((ADCCLK) == RCC_PCLK2_Div8)) +/** + * @} + */ + +/** @defgroup LSE_configuration + * @{ + */ + +#define RCC_LSE_OFF ((uint8_t)0x00) +#define RCC_LSE_ON ((uint8_t)0x01) +#define RCC_LSE_Bypass ((uint8_t)0x04) +#define IS_RCC_LSE(LSE) (((LSE) == RCC_LSE_OFF) || ((LSE) == RCC_LSE_ON) || \ + ((LSE) == RCC_LSE_Bypass)) +/** + * @} + */ + +/** @defgroup RTC_clock_source + * @{ + */ + +#define RCC_RTCCLKSource_LSE ((uint32_t)0x00000100) +#define RCC_RTCCLKSource_LSI ((uint32_t)0x00000200) +#define RCC_RTCCLKSource_HSE_Div128 ((uint32_t)0x00000300) +#define IS_RCC_RTCCLK_SOURCE(SOURCE) (((SOURCE) == RCC_RTCCLKSource_LSE) || \ + ((SOURCE) == RCC_RTCCLKSource_LSI) || \ + ((SOURCE) == RCC_RTCCLKSource_HSE_Div128)) +/** + * @} + */ + +/** @defgroup AHB_peripheral + * @{ + */ + +#define RCC_AHBPeriph_DMA1 ((uint32_t)0x00000001) +#define RCC_AHBPeriph_DMA2 ((uint32_t)0x00000002) +#define RCC_AHBPeriph_SRAM ((uint32_t)0x00000004) +#define RCC_AHBPeriph_FLITF ((uint32_t)0x00000010) +#define RCC_AHBPeriph_CRC ((uint32_t)0x00000040) + +#ifndef STM32F10X_CL + #define RCC_AHBPeriph_FSMC ((uint32_t)0x00000100) + #define RCC_AHBPeriph_SDIO ((uint32_t)0x00000400) + #define IS_RCC_AHB_PERIPH(PERIPH) ((((PERIPH) & 0xFFFFFAA8) == 0x00) && ((PERIPH) != 0x00)) +#else + #define RCC_AHBPeriph_OTG_FS ((uint32_t)0x00001000) + #define RCC_AHBPeriph_ETH_MAC ((uint32_t)0x00004000) + #define RCC_AHBPeriph_ETH_MAC_Tx ((uint32_t)0x00008000) + #define RCC_AHBPeriph_ETH_MAC_Rx ((uint32_t)0x00010000) + + #define IS_RCC_AHB_PERIPH(PERIPH) ((((PERIPH) & 0xFFFE2FA8) == 0x00) && ((PERIPH) != 0x00)) + #define IS_RCC_AHB_PERIPH_RESET(PERIPH) ((((PERIPH) & 0xFFFFAFFF) == 0x00) && ((PERIPH) != 0x00)) +#endif /* STM32F10X_CL */ +/** + * @} + */ + +/** @defgroup APB2_peripheral + * @{ + */ + +#define RCC_APB2Periph_AFIO ((uint32_t)0x00000001) +#define RCC_APB2Periph_GPIOA ((uint32_t)0x00000004) +#define RCC_APB2Periph_GPIOB ((uint32_t)0x00000008) +#define RCC_APB2Periph_GPIOC ((uint32_t)0x00000010) +#define RCC_APB2Periph_GPIOD ((uint32_t)0x00000020) +#define RCC_APB2Periph_GPIOE ((uint32_t)0x00000040) +#define RCC_APB2Periph_GPIOF ((uint32_t)0x00000080) +#define RCC_APB2Periph_GPIOG ((uint32_t)0x00000100) +#define RCC_APB2Periph_ADC1 ((uint32_t)0x00000200) +#define RCC_APB2Periph_ADC2 ((uint32_t)0x00000400) +#define RCC_APB2Periph_TIM1 ((uint32_t)0x00000800) +#define RCC_APB2Periph_SPI1 ((uint32_t)0x00001000) +#define RCC_APB2Periph_TIM8 ((uint32_t)0x00002000) +#define RCC_APB2Periph_USART1 ((uint32_t)0x00004000) +#define RCC_APB2Periph_ADC3 ((uint32_t)0x00008000) +#define RCC_APB2Periph_TIM15 ((uint32_t)0x00010000) +#define RCC_APB2Periph_TIM16 ((uint32_t)0x00020000) +#define RCC_APB2Periph_TIM17 ((uint32_t)0x00040000) +#define RCC_APB2Periph_TIM9 ((uint32_t)0x00080000) +#define RCC_APB2Periph_TIM10 ((uint32_t)0x00100000) +#define RCC_APB2Periph_TIM11 ((uint32_t)0x00200000) + +#define IS_RCC_APB2_PERIPH(PERIPH) ((((PERIPH) & 0xFFC00002) == 0x00) && ((PERIPH) != 0x00)) +/** + * @} + */ + +/** @defgroup APB1_peripheral + * @{ + */ + +#define RCC_APB1Periph_TIM2 ((uint32_t)0x00000001) +#define RCC_APB1Periph_TIM3 ((uint32_t)0x00000002) +#define RCC_APB1Periph_TIM4 ((uint32_t)0x00000004) +#define RCC_APB1Periph_TIM5 ((uint32_t)0x00000008) +#define RCC_APB1Periph_TIM6 ((uint32_t)0x00000010) +#define RCC_APB1Periph_TIM7 ((uint32_t)0x00000020) +#define RCC_APB1Periph_TIM12 ((uint32_t)0x00000040) +#define RCC_APB1Periph_TIM13 ((uint32_t)0x00000080) +#define RCC_APB1Periph_TIM14 ((uint32_t)0x00000100) +#define RCC_APB1Periph_WWDG ((uint32_t)0x00000800) +#define RCC_APB1Periph_SPI2 ((uint32_t)0x00004000) +#define RCC_APB1Periph_SPI3 ((uint32_t)0x00008000) +#define RCC_APB1Periph_USART2 ((uint32_t)0x00020000) +#define RCC_APB1Periph_USART3 ((uint32_t)0x00040000) +#define RCC_APB1Periph_UART4 ((uint32_t)0x00080000) +#define RCC_APB1Periph_UART5 ((uint32_t)0x00100000) +#define RCC_APB1Periph_I2C1 ((uint32_t)0x00200000) +#define RCC_APB1Periph_I2C2 ((uint32_t)0x00400000) +#define RCC_APB1Periph_USB ((uint32_t)0x00800000) +#define RCC_APB1Periph_CAN1 ((uint32_t)0x02000000) +#define RCC_APB1Periph_CAN2 ((uint32_t)0x04000000) +#define RCC_APB1Periph_BKP ((uint32_t)0x08000000) +#define RCC_APB1Periph_PWR ((uint32_t)0x10000000) +#define RCC_APB1Periph_DAC ((uint32_t)0x20000000) +#define RCC_APB1Periph_CEC ((uint32_t)0x40000000) + +#define IS_RCC_APB1_PERIPH(PERIPH) ((((PERIPH) & 0x81013600) == 0x00) && ((PERIPH) != 0x00)) + +/** + * @} + */ + +/** @defgroup Clock_source_to_output_on_MCO_pin + * @{ + */ + +#define RCC_MCO_NoClock ((uint8_t)0x00) +#define RCC_MCO_SYSCLK ((uint8_t)0x04) +#define RCC_MCO_HSI ((uint8_t)0x05) +#define RCC_MCO_HSE ((uint8_t)0x06) +#define RCC_MCO_PLLCLK_Div2 ((uint8_t)0x07) + +#ifndef STM32F10X_CL + #define IS_RCC_MCO(MCO) (((MCO) == RCC_MCO_NoClock) || ((MCO) == RCC_MCO_HSI) || \ + ((MCO) == RCC_MCO_SYSCLK) || ((MCO) == RCC_MCO_HSE) || \ + ((MCO) == RCC_MCO_PLLCLK_Div2)) +#else + #define RCC_MCO_PLL2CLK ((uint8_t)0x08) + #define RCC_MCO_PLL3CLK_Div2 ((uint8_t)0x09) + #define RCC_MCO_XT1 ((uint8_t)0x0A) + #define RCC_MCO_PLL3CLK ((uint8_t)0x0B) + + #define IS_RCC_MCO(MCO) (((MCO) == RCC_MCO_NoClock) || ((MCO) == RCC_MCO_HSI) || \ + ((MCO) == RCC_MCO_SYSCLK) || ((MCO) == RCC_MCO_HSE) || \ + ((MCO) == RCC_MCO_PLLCLK_Div2) || ((MCO) == RCC_MCO_PLL2CLK) || \ + ((MCO) == RCC_MCO_PLL3CLK_Div2) || ((MCO) == RCC_MCO_XT1) || \ + ((MCO) == RCC_MCO_PLL3CLK)) +#endif /* STM32F10X_CL */ + +/** + * @} + */ + +/** @defgroup RCC_Flag + * @{ + */ + +#define RCC_FLAG_HSIRDY ((uint8_t)0x21) +#define RCC_FLAG_HSERDY ((uint8_t)0x31) +#define RCC_FLAG_PLLRDY ((uint8_t)0x39) +#define RCC_FLAG_LSERDY ((uint8_t)0x41) +#define RCC_FLAG_LSIRDY ((uint8_t)0x61) +#define RCC_FLAG_PINRST ((uint8_t)0x7A) +#define RCC_FLAG_PORRST ((uint8_t)0x7B) +#define RCC_FLAG_SFTRST ((uint8_t)0x7C) +#define RCC_FLAG_IWDGRST ((uint8_t)0x7D) +#define RCC_FLAG_WWDGRST ((uint8_t)0x7E) +#define RCC_FLAG_LPWRRST ((uint8_t)0x7F) + +#ifndef STM32F10X_CL + #define IS_RCC_FLAG(FLAG) (((FLAG) == RCC_FLAG_HSIRDY) || ((FLAG) == RCC_FLAG_HSERDY) || \ + ((FLAG) == RCC_FLAG_PLLRDY) || ((FLAG) == RCC_FLAG_LSERDY) || \ + ((FLAG) == RCC_FLAG_LSIRDY) || ((FLAG) == RCC_FLAG_PINRST) || \ + ((FLAG) == RCC_FLAG_PORRST) || ((FLAG) == RCC_FLAG_SFTRST) || \ + ((FLAG) == RCC_FLAG_IWDGRST)|| ((FLAG) == RCC_FLAG_WWDGRST)|| \ + ((FLAG) == RCC_FLAG_LPWRRST)) +#else + #define RCC_FLAG_PLL2RDY ((uint8_t)0x3B) + #define RCC_FLAG_PLL3RDY ((uint8_t)0x3D) + #define IS_RCC_FLAG(FLAG) (((FLAG) == RCC_FLAG_HSIRDY) || ((FLAG) == RCC_FLAG_HSERDY) || \ + ((FLAG) == RCC_FLAG_PLLRDY) || ((FLAG) == RCC_FLAG_LSERDY) || \ + ((FLAG) == RCC_FLAG_PLL2RDY) || ((FLAG) == RCC_FLAG_PLL3RDY) || \ + ((FLAG) == RCC_FLAG_LSIRDY) || ((FLAG) == RCC_FLAG_PINRST) || \ + ((FLAG) == RCC_FLAG_PORRST) || ((FLAG) == RCC_FLAG_SFTRST) || \ + ((FLAG) == RCC_FLAG_IWDGRST)|| ((FLAG) == RCC_FLAG_WWDGRST)|| \ + ((FLAG) == RCC_FLAG_LPWRRST)) +#endif /* STM32F10X_CL */ + +#define IS_RCC_CALIBRATION_VALUE(VALUE) ((VALUE) <= 0x1F) +/** + * @} + */ + +/** + * @} + */ + +/** @defgroup RCC_Exported_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup RCC_Exported_Functions + * @{ + */ + +void RCC_DeInit(void); +void RCC_HSEConfig(uint32_t RCC_HSE); +ErrorStatus RCC_WaitForHSEStartUp(void); +void RCC_AdjustHSICalibrationValue(uint8_t HSICalibrationValue); +void RCC_HSICmd(FunctionalState NewState); +void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul); +void RCC_PLLCmd(FunctionalState NewState); + +#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL) || defined (STM32F10X_CL) + void RCC_PREDIV1Config(uint32_t RCC_PREDIV1_Source, uint32_t RCC_PREDIV1_Div); +#endif + +#ifdef STM32F10X_CL + void RCC_PREDIV2Config(uint32_t RCC_PREDIV2_Div); + void RCC_PLL2Config(uint32_t RCC_PLL2Mul); + void RCC_PLL2Cmd(FunctionalState NewState); + void RCC_PLL3Config(uint32_t RCC_PLL3Mul); + void RCC_PLL3Cmd(FunctionalState NewState); +#endif /* STM32F10X_CL */ + +void RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource); +uint8_t RCC_GetSYSCLKSource(void); +void RCC_HCLKConfig(uint32_t RCC_SYSCLK); +void RCC_PCLK1Config(uint32_t RCC_HCLK); +void RCC_PCLK2Config(uint32_t RCC_HCLK); +void RCC_ITConfig(uint8_t RCC_IT, FunctionalState NewState); + +#ifndef STM32F10X_CL + void RCC_USBCLKConfig(uint32_t RCC_USBCLKSource); +#else + void RCC_OTGFSCLKConfig(uint32_t RCC_OTGFSCLKSource); +#endif /* STM32F10X_CL */ + +void RCC_ADCCLKConfig(uint32_t RCC_PCLK2); + +#ifdef STM32F10X_CL + void RCC_I2S2CLKConfig(uint32_t RCC_I2S2CLKSource); + void RCC_I2S3CLKConfig(uint32_t RCC_I2S3CLKSource); +#endif /* STM32F10X_CL */ + +void RCC_LSEConfig(uint8_t RCC_LSE); +void RCC_LSICmd(FunctionalState NewState); +void RCC_RTCCLKConfig(uint32_t RCC_RTCCLKSource); +void RCC_RTCCLKCmd(FunctionalState NewState); +void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks); +void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState); +void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState); +void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState); + +#ifdef STM32F10X_CL +void RCC_AHBPeriphResetCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState); +#endif /* STM32F10X_CL */ + +void RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState); +void RCC_APB1PeriphResetCmd(uint32_t RCC_APB1Periph, FunctionalState NewState); +void RCC_BackupResetCmd(FunctionalState NewState); +void RCC_ClockSecuritySystemCmd(FunctionalState NewState); +void RCC_MCOConfig(uint8_t RCC_MCO); +FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG); +void RCC_ClearFlag(void); +ITStatus RCC_GetITStatus(uint8_t RCC_IT); +void RCC_ClearITPendingBit(uint8_t RCC_IT); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F10x_RCC_H */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_rtc.h b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_rtc.h new file mode 100644 index 0000000..fd8beb5 --- /dev/null +++ b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_rtc.h @@ -0,0 +1,135 @@ +/** + ****************************************************************************** + * @file stm32f10x_rtc.h + * @author MCD Application Team + * @version V3.5.0 + * @date 11-March-2011 + * @brief This file contains all the functions prototypes for the RTC firmware + * library. + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

    © COPYRIGHT 2011 STMicroelectronics

    + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F10x_RTC_H +#define __STM32F10x_RTC_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f10x.h" + +/** @addtogroup STM32F10x_StdPeriph_Driver + * @{ + */ + +/** @addtogroup RTC + * @{ + */ + +/** @defgroup RTC_Exported_Types + * @{ + */ + +/** + * @} + */ + +/** @defgroup RTC_Exported_Constants + * @{ + */ + +/** @defgroup RTC_interrupts_define + * @{ + */ + +#define RTC_IT_OW ((uint16_t)0x0004) /*!< Overflow interrupt */ +#define RTC_IT_ALR ((uint16_t)0x0002) /*!< Alarm interrupt */ +#define RTC_IT_SEC ((uint16_t)0x0001) /*!< Second interrupt */ +#define IS_RTC_IT(IT) ((((IT) & (uint16_t)0xFFF8) == 0x00) && ((IT) != 0x00)) +#define IS_RTC_GET_IT(IT) (((IT) == RTC_IT_OW) || ((IT) == RTC_IT_ALR) || \ + ((IT) == RTC_IT_SEC)) +/** + * @} + */ + +/** @defgroup RTC_interrupts_flags + * @{ + */ + +#define RTC_FLAG_RTOFF ((uint16_t)0x0020) /*!< RTC Operation OFF flag */ +#define RTC_FLAG_RSF ((uint16_t)0x0008) /*!< Registers Synchronized flag */ +#define RTC_FLAG_OW ((uint16_t)0x0004) /*!< Overflow flag */ +#define RTC_FLAG_ALR ((uint16_t)0x0002) /*!< Alarm flag */ +#define RTC_FLAG_SEC ((uint16_t)0x0001) /*!< Second flag */ +#define IS_RTC_CLEAR_FLAG(FLAG) ((((FLAG) & (uint16_t)0xFFF0) == 0x00) && ((FLAG) != 0x00)) +#define IS_RTC_GET_FLAG(FLAG) (((FLAG) == RTC_FLAG_RTOFF) || ((FLAG) == RTC_FLAG_RSF) || \ + ((FLAG) == RTC_FLAG_OW) || ((FLAG) == RTC_FLAG_ALR) || \ + ((FLAG) == RTC_FLAG_SEC)) +#define IS_RTC_PRESCALER(PRESCALER) ((PRESCALER) <= 0xFFFFF) + +/** + * @} + */ + +/** + * @} + */ + +/** @defgroup RTC_Exported_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup RTC_Exported_Functions + * @{ + */ + +void RTC_ITConfig(uint16_t RTC_IT, FunctionalState NewState); +void RTC_EnterConfigMode(void); +void RTC_ExitConfigMode(void); +uint32_t RTC_GetCounter(void); +void RTC_SetCounter(uint32_t CounterValue); +void RTC_SetPrescaler(uint32_t PrescalerValue); +void RTC_SetAlarm(uint32_t AlarmValue); +uint32_t RTC_GetDivider(void); +void RTC_WaitForLastTask(void); +void RTC_WaitForSynchro(void); +FlagStatus RTC_GetFlagStatus(uint16_t RTC_FLAG); +void RTC_ClearFlag(uint16_t RTC_FLAG); +ITStatus RTC_GetITStatus(uint16_t RTC_IT); +void RTC_ClearITPendingBit(uint16_t RTC_IT); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F10x_RTC_H */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_sdio.h b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_sdio.h new file mode 100644 index 0000000..81c058a --- /dev/null +++ b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_sdio.h @@ -0,0 +1,531 @@ +/** + ****************************************************************************** + * @file stm32f10x_sdio.h + * @author MCD Application Team + * @version V3.5.0 + * @date 11-March-2011 + * @brief This file contains all the functions prototypes for the SDIO firmware + * library. + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

    © COPYRIGHT 2011 STMicroelectronics

    + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F10x_SDIO_H +#define __STM32F10x_SDIO_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f10x.h" + +/** @addtogroup STM32F10x_StdPeriph_Driver + * @{ + */ + +/** @addtogroup SDIO + * @{ + */ + +/** @defgroup SDIO_Exported_Types + * @{ + */ + +typedef struct +{ + uint32_t SDIO_ClockEdge; /*!< Specifies the clock transition on which the bit capture is made. + This parameter can be a value of @ref SDIO_Clock_Edge */ + + uint32_t SDIO_ClockBypass; /*!< Specifies whether the SDIO Clock divider bypass is + enabled or disabled. + This parameter can be a value of @ref SDIO_Clock_Bypass */ + + uint32_t SDIO_ClockPowerSave; /*!< Specifies whether SDIO Clock output is enabled or + disabled when the bus is idle. + This parameter can be a value of @ref SDIO_Clock_Power_Save */ + + uint32_t SDIO_BusWide; /*!< Specifies the SDIO bus width. + This parameter can be a value of @ref SDIO_Bus_Wide */ + + uint32_t SDIO_HardwareFlowControl; /*!< Specifies whether the SDIO hardware flow control is enabled or disabled. + This parameter can be a value of @ref SDIO_Hardware_Flow_Control */ + + uint8_t SDIO_ClockDiv; /*!< Specifies the clock frequency of the SDIO controller. + This parameter can be a value between 0x00 and 0xFF. */ + +} SDIO_InitTypeDef; + +typedef struct +{ + uint32_t SDIO_Argument; /*!< Specifies the SDIO command argument which is sent + to a card as part of a command message. If a command + contains an argument, it must be loaded into this register + before writing the command to the command register */ + + uint32_t SDIO_CmdIndex; /*!< Specifies the SDIO command index. It must be lower than 0x40. */ + + uint32_t SDIO_Response; /*!< Specifies the SDIO response type. + This parameter can be a value of @ref SDIO_Response_Type */ + + uint32_t SDIO_Wait; /*!< Specifies whether SDIO wait-for-interrupt request is enabled or disabled. + This parameter can be a value of @ref SDIO_Wait_Interrupt_State */ + + uint32_t SDIO_CPSM; /*!< Specifies whether SDIO Command path state machine (CPSM) + is enabled or disabled. + This parameter can be a value of @ref SDIO_CPSM_State */ +} SDIO_CmdInitTypeDef; + +typedef struct +{ + uint32_t SDIO_DataTimeOut; /*!< Specifies the data timeout period in card bus clock periods. */ + + uint32_t SDIO_DataLength; /*!< Specifies the number of data bytes to be transferred. */ + + uint32_t SDIO_DataBlockSize; /*!< Specifies the data block size for block transfer. + This parameter can be a value of @ref SDIO_Data_Block_Size */ + + uint32_t SDIO_TransferDir; /*!< Specifies the data transfer direction, whether the transfer + is a read or write. + This parameter can be a value of @ref SDIO_Transfer_Direction */ + + uint32_t SDIO_TransferMode; /*!< Specifies whether data transfer is in stream or block mode. + This parameter can be a value of @ref SDIO_Transfer_Type */ + + uint32_t SDIO_DPSM; /*!< Specifies whether SDIO Data path state machine (DPSM) + is enabled or disabled. + This parameter can be a value of @ref SDIO_DPSM_State */ +} SDIO_DataInitTypeDef; + +/** + * @} + */ + +/** @defgroup SDIO_Exported_Constants + * @{ + */ + +/** @defgroup SDIO_Clock_Edge + * @{ + */ + +#define SDIO_ClockEdge_Rising ((uint32_t)0x00000000) +#define SDIO_ClockEdge_Falling ((uint32_t)0x00002000) +#define IS_SDIO_CLOCK_EDGE(EDGE) (((EDGE) == SDIO_ClockEdge_Rising) || \ + ((EDGE) == SDIO_ClockEdge_Falling)) +/** + * @} + */ + +/** @defgroup SDIO_Clock_Bypass + * @{ + */ + +#define SDIO_ClockBypass_Disable ((uint32_t)0x00000000) +#define SDIO_ClockBypass_Enable ((uint32_t)0x00000400) +#define IS_SDIO_CLOCK_BYPASS(BYPASS) (((BYPASS) == SDIO_ClockBypass_Disable) || \ + ((BYPASS) == SDIO_ClockBypass_Enable)) +/** + * @} + */ + +/** @defgroup SDIO_Clock_Power_Save + * @{ + */ + +#define SDIO_ClockPowerSave_Disable ((uint32_t)0x00000000) +#define SDIO_ClockPowerSave_Enable ((uint32_t)0x00000200) +#define IS_SDIO_CLOCK_POWER_SAVE(SAVE) (((SAVE) == SDIO_ClockPowerSave_Disable) || \ + ((SAVE) == SDIO_ClockPowerSave_Enable)) +/** + * @} + */ + +/** @defgroup SDIO_Bus_Wide + * @{ + */ + +#define SDIO_BusWide_1b ((uint32_t)0x00000000) +#define SDIO_BusWide_4b ((uint32_t)0x00000800) +#define SDIO_BusWide_8b ((uint32_t)0x00001000) +#define IS_SDIO_BUS_WIDE(WIDE) (((WIDE) == SDIO_BusWide_1b) || ((WIDE) == SDIO_BusWide_4b) || \ + ((WIDE) == SDIO_BusWide_8b)) + +/** + * @} + */ + +/** @defgroup SDIO_Hardware_Flow_Control + * @{ + */ + +#define SDIO_HardwareFlowControl_Disable ((uint32_t)0x00000000) +#define SDIO_HardwareFlowControl_Enable ((uint32_t)0x00004000) +#define IS_SDIO_HARDWARE_FLOW_CONTROL(CONTROL) (((CONTROL) == SDIO_HardwareFlowControl_Disable) || \ + ((CONTROL) == SDIO_HardwareFlowControl_Enable)) +/** + * @} + */ + +/** @defgroup SDIO_Power_State + * @{ + */ + +#define SDIO_PowerState_OFF ((uint32_t)0x00000000) +#define SDIO_PowerState_ON ((uint32_t)0x00000003) +#define IS_SDIO_POWER_STATE(STATE) (((STATE) == SDIO_PowerState_OFF) || ((STATE) == SDIO_PowerState_ON)) +/** + * @} + */ + + +/** @defgroup SDIO_Interrupt_sources + * @{ + */ + +#define SDIO_IT_CCRCFAIL ((uint32_t)0x00000001) +#define SDIO_IT_DCRCFAIL ((uint32_t)0x00000002) +#define SDIO_IT_CTIMEOUT ((uint32_t)0x00000004) +#define SDIO_IT_DTIMEOUT ((uint32_t)0x00000008) +#define SDIO_IT_TXUNDERR ((uint32_t)0x00000010) +#define SDIO_IT_RXOVERR ((uint32_t)0x00000020) +#define SDIO_IT_CMDREND ((uint32_t)0x00000040) +#define SDIO_IT_CMDSENT ((uint32_t)0x00000080) +#define SDIO_IT_DATAEND ((uint32_t)0x00000100) +#define SDIO_IT_STBITERR ((uint32_t)0x00000200) +#define SDIO_IT_DBCKEND ((uint32_t)0x00000400) +#define SDIO_IT_CMDACT ((uint32_t)0x00000800) +#define SDIO_IT_TXACT ((uint32_t)0x00001000) +#define SDIO_IT_RXACT ((uint32_t)0x00002000) +#define SDIO_IT_TXFIFOHE ((uint32_t)0x00004000) +#define SDIO_IT_RXFIFOHF ((uint32_t)0x00008000) +#define SDIO_IT_TXFIFOF ((uint32_t)0x00010000) +#define SDIO_IT_RXFIFOF ((uint32_t)0x00020000) +#define SDIO_IT_TXFIFOE ((uint32_t)0x00040000) +#define SDIO_IT_RXFIFOE ((uint32_t)0x00080000) +#define SDIO_IT_TXDAVL ((uint32_t)0x00100000) +#define SDIO_IT_RXDAVL ((uint32_t)0x00200000) +#define SDIO_IT_SDIOIT ((uint32_t)0x00400000) +#define SDIO_IT_CEATAEND ((uint32_t)0x00800000) +#define IS_SDIO_IT(IT) ((((IT) & (uint32_t)0xFF000000) == 0x00) && ((IT) != (uint32_t)0x00)) +/** + * @} + */ + +/** @defgroup SDIO_Command_Index + * @{ + */ + +#define IS_SDIO_CMD_INDEX(INDEX) ((INDEX) < 0x40) +/** + * @} + */ + +/** @defgroup SDIO_Response_Type + * @{ + */ + +#define SDIO_Response_No ((uint32_t)0x00000000) +#define SDIO_Response_Short ((uint32_t)0x00000040) +#define SDIO_Response_Long ((uint32_t)0x000000C0) +#define IS_SDIO_RESPONSE(RESPONSE) (((RESPONSE) == SDIO_Response_No) || \ + ((RESPONSE) == SDIO_Response_Short) || \ + ((RESPONSE) == SDIO_Response_Long)) +/** + * @} + */ + +/** @defgroup SDIO_Wait_Interrupt_State + * @{ + */ + +#define SDIO_Wait_No ((uint32_t)0x00000000) /*!< SDIO No Wait, TimeOut is enabled */ +#define SDIO_Wait_IT ((uint32_t)0x00000100) /*!< SDIO Wait Interrupt Request */ +#define SDIO_Wait_Pend ((uint32_t)0x00000200) /*!< SDIO Wait End of transfer */ +#define IS_SDIO_WAIT(WAIT) (((WAIT) == SDIO_Wait_No) || ((WAIT) == SDIO_Wait_IT) || \ + ((WAIT) == SDIO_Wait_Pend)) +/** + * @} + */ + +/** @defgroup SDIO_CPSM_State + * @{ + */ + +#define SDIO_CPSM_Disable ((uint32_t)0x00000000) +#define SDIO_CPSM_Enable ((uint32_t)0x00000400) +#define IS_SDIO_CPSM(CPSM) (((CPSM) == SDIO_CPSM_Enable) || ((CPSM) == SDIO_CPSM_Disable)) +/** + * @} + */ + +/** @defgroup SDIO_Response_Registers + * @{ + */ + +#define SDIO_RESP1 ((uint32_t)0x00000000) +#define SDIO_RESP2 ((uint32_t)0x00000004) +#define SDIO_RESP3 ((uint32_t)0x00000008) +#define SDIO_RESP4 ((uint32_t)0x0000000C) +#define IS_SDIO_RESP(RESP) (((RESP) == SDIO_RESP1) || ((RESP) == SDIO_RESP2) || \ + ((RESP) == SDIO_RESP3) || ((RESP) == SDIO_RESP4)) +/** + * @} + */ + +/** @defgroup SDIO_Data_Length + * @{ + */ + +#define IS_SDIO_DATA_LENGTH(LENGTH) ((LENGTH) <= 0x01FFFFFF) +/** + * @} + */ + +/** @defgroup SDIO_Data_Block_Size + * @{ + */ + +#define SDIO_DataBlockSize_1b ((uint32_t)0x00000000) +#define SDIO_DataBlockSize_2b ((uint32_t)0x00000010) +#define SDIO_DataBlockSize_4b ((uint32_t)0x00000020) +#define SDIO_DataBlockSize_8b ((uint32_t)0x00000030) +#define SDIO_DataBlockSize_16b ((uint32_t)0x00000040) +#define SDIO_DataBlockSize_32b ((uint32_t)0x00000050) +#define SDIO_DataBlockSize_64b ((uint32_t)0x00000060) +#define SDIO_DataBlockSize_128b ((uint32_t)0x00000070) +#define SDIO_DataBlockSize_256b ((uint32_t)0x00000080) +#define SDIO_DataBlockSize_512b ((uint32_t)0x00000090) +#define SDIO_DataBlockSize_1024b ((uint32_t)0x000000A0) +#define SDIO_DataBlockSize_2048b ((uint32_t)0x000000B0) +#define SDIO_DataBlockSize_4096b ((uint32_t)0x000000C0) +#define SDIO_DataBlockSize_8192b ((uint32_t)0x000000D0) +#define SDIO_DataBlockSize_16384b ((uint32_t)0x000000E0) +#define IS_SDIO_BLOCK_SIZE(SIZE) (((SIZE) == SDIO_DataBlockSize_1b) || \ + ((SIZE) == SDIO_DataBlockSize_2b) || \ + ((SIZE) == SDIO_DataBlockSize_4b) || \ + ((SIZE) == SDIO_DataBlockSize_8b) || \ + ((SIZE) == SDIO_DataBlockSize_16b) || \ + ((SIZE) == SDIO_DataBlockSize_32b) || \ + ((SIZE) == SDIO_DataBlockSize_64b) || \ + ((SIZE) == SDIO_DataBlockSize_128b) || \ + ((SIZE) == SDIO_DataBlockSize_256b) || \ + ((SIZE) == SDIO_DataBlockSize_512b) || \ + ((SIZE) == SDIO_DataBlockSize_1024b) || \ + ((SIZE) == SDIO_DataBlockSize_2048b) || \ + ((SIZE) == SDIO_DataBlockSize_4096b) || \ + ((SIZE) == SDIO_DataBlockSize_8192b) || \ + ((SIZE) == SDIO_DataBlockSize_16384b)) +/** + * @} + */ + +/** @defgroup SDIO_Transfer_Direction + * @{ + */ + +#define SDIO_TransferDir_ToCard ((uint32_t)0x00000000) +#define SDIO_TransferDir_ToSDIO ((uint32_t)0x00000002) +#define IS_SDIO_TRANSFER_DIR(DIR) (((DIR) == SDIO_TransferDir_ToCard) || \ + ((DIR) == SDIO_TransferDir_ToSDIO)) +/** + * @} + */ + +/** @defgroup SDIO_Transfer_Type + * @{ + */ + +#define SDIO_TransferMode_Block ((uint32_t)0x00000000) +#define SDIO_TransferMode_Stream ((uint32_t)0x00000004) +#define IS_SDIO_TRANSFER_MODE(MODE) (((MODE) == SDIO_TransferMode_Stream) || \ + ((MODE) == SDIO_TransferMode_Block)) +/** + * @} + */ + +/** @defgroup SDIO_DPSM_State + * @{ + */ + +#define SDIO_DPSM_Disable ((uint32_t)0x00000000) +#define SDIO_DPSM_Enable ((uint32_t)0x00000001) +#define IS_SDIO_DPSM(DPSM) (((DPSM) == SDIO_DPSM_Enable) || ((DPSM) == SDIO_DPSM_Disable)) +/** + * @} + */ + +/** @defgroup SDIO_Flags + * @{ + */ + +#define SDIO_FLAG_CCRCFAIL ((uint32_t)0x00000001) +#define SDIO_FLAG_DCRCFAIL ((uint32_t)0x00000002) +#define SDIO_FLAG_CTIMEOUT ((uint32_t)0x00000004) +#define SDIO_FLAG_DTIMEOUT ((uint32_t)0x00000008) +#define SDIO_FLAG_TXUNDERR ((uint32_t)0x00000010) +#define SDIO_FLAG_RXOVERR ((uint32_t)0x00000020) +#define SDIO_FLAG_CMDREND ((uint32_t)0x00000040) +#define SDIO_FLAG_CMDSENT ((uint32_t)0x00000080) +#define SDIO_FLAG_DATAEND ((uint32_t)0x00000100) +#define SDIO_FLAG_STBITERR ((uint32_t)0x00000200) +#define SDIO_FLAG_DBCKEND ((uint32_t)0x00000400) +#define SDIO_FLAG_CMDACT ((uint32_t)0x00000800) +#define SDIO_FLAG_TXACT ((uint32_t)0x00001000) +#define SDIO_FLAG_RXACT ((uint32_t)0x00002000) +#define SDIO_FLAG_TXFIFOHE ((uint32_t)0x00004000) +#define SDIO_FLAG_RXFIFOHF ((uint32_t)0x00008000) +#define SDIO_FLAG_TXFIFOF ((uint32_t)0x00010000) +#define SDIO_FLAG_RXFIFOF ((uint32_t)0x00020000) +#define SDIO_FLAG_TXFIFOE ((uint32_t)0x00040000) +#define SDIO_FLAG_RXFIFOE ((uint32_t)0x00080000) +#define SDIO_FLAG_TXDAVL ((uint32_t)0x00100000) +#define SDIO_FLAG_RXDAVL ((uint32_t)0x00200000) +#define SDIO_FLAG_SDIOIT ((uint32_t)0x00400000) +#define SDIO_FLAG_CEATAEND ((uint32_t)0x00800000) +#define IS_SDIO_FLAG(FLAG) (((FLAG) == SDIO_FLAG_CCRCFAIL) || \ + ((FLAG) == SDIO_FLAG_DCRCFAIL) || \ + ((FLAG) == SDIO_FLAG_CTIMEOUT) || \ + ((FLAG) == SDIO_FLAG_DTIMEOUT) || \ + ((FLAG) == SDIO_FLAG_TXUNDERR) || \ + ((FLAG) == SDIO_FLAG_RXOVERR) || \ + ((FLAG) == SDIO_FLAG_CMDREND) || \ + ((FLAG) == SDIO_FLAG_CMDSENT) || \ + ((FLAG) == SDIO_FLAG_DATAEND) || \ + ((FLAG) == SDIO_FLAG_STBITERR) || \ + ((FLAG) == SDIO_FLAG_DBCKEND) || \ + ((FLAG) == SDIO_FLAG_CMDACT) || \ + ((FLAG) == SDIO_FLAG_TXACT) || \ + ((FLAG) == SDIO_FLAG_RXACT) || \ + ((FLAG) == SDIO_FLAG_TXFIFOHE) || \ + ((FLAG) == SDIO_FLAG_RXFIFOHF) || \ + ((FLAG) == SDIO_FLAG_TXFIFOF) || \ + ((FLAG) == SDIO_FLAG_RXFIFOF) || \ + ((FLAG) == SDIO_FLAG_TXFIFOE) || \ + ((FLAG) == SDIO_FLAG_RXFIFOE) || \ + ((FLAG) == SDIO_FLAG_TXDAVL) || \ + ((FLAG) == SDIO_FLAG_RXDAVL) || \ + ((FLAG) == SDIO_FLAG_SDIOIT) || \ + ((FLAG) == SDIO_FLAG_CEATAEND)) + +#define IS_SDIO_CLEAR_FLAG(FLAG) ((((FLAG) & (uint32_t)0xFF3FF800) == 0x00) && ((FLAG) != (uint32_t)0x00)) + +#define IS_SDIO_GET_IT(IT) (((IT) == SDIO_IT_CCRCFAIL) || \ + ((IT) == SDIO_IT_DCRCFAIL) || \ + ((IT) == SDIO_IT_CTIMEOUT) || \ + ((IT) == SDIO_IT_DTIMEOUT) || \ + ((IT) == SDIO_IT_TXUNDERR) || \ + ((IT) == SDIO_IT_RXOVERR) || \ + ((IT) == SDIO_IT_CMDREND) || \ + ((IT) == SDIO_IT_CMDSENT) || \ + ((IT) == SDIO_IT_DATAEND) || \ + ((IT) == SDIO_IT_STBITERR) || \ + ((IT) == SDIO_IT_DBCKEND) || \ + ((IT) == SDIO_IT_CMDACT) || \ + ((IT) == SDIO_IT_TXACT) || \ + ((IT) == SDIO_IT_RXACT) || \ + ((IT) == SDIO_IT_TXFIFOHE) || \ + ((IT) == SDIO_IT_RXFIFOHF) || \ + ((IT) == SDIO_IT_TXFIFOF) || \ + ((IT) == SDIO_IT_RXFIFOF) || \ + ((IT) == SDIO_IT_TXFIFOE) || \ + ((IT) == SDIO_IT_RXFIFOE) || \ + ((IT) == SDIO_IT_TXDAVL) || \ + ((IT) == SDIO_IT_RXDAVL) || \ + ((IT) == SDIO_IT_SDIOIT) || \ + ((IT) == SDIO_IT_CEATAEND)) + +#define IS_SDIO_CLEAR_IT(IT) ((((IT) & (uint32_t)0xFF3FF800) == 0x00) && ((IT) != (uint32_t)0x00)) + +/** + * @} + */ + +/** @defgroup SDIO_Read_Wait_Mode + * @{ + */ + +#define SDIO_ReadWaitMode_CLK ((uint32_t)0x00000001) +#define SDIO_ReadWaitMode_DATA2 ((uint32_t)0x00000000) +#define IS_SDIO_READWAIT_MODE(MODE) (((MODE) == SDIO_ReadWaitMode_CLK) || \ + ((MODE) == SDIO_ReadWaitMode_DATA2)) +/** + * @} + */ + +/** + * @} + */ + +/** @defgroup SDIO_Exported_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup SDIO_Exported_Functions + * @{ + */ + +void SDIO_DeInit(void); +void SDIO_Init(SDIO_InitTypeDef* SDIO_InitStruct); +void SDIO_StructInit(SDIO_InitTypeDef* SDIO_InitStruct); +void SDIO_ClockCmd(FunctionalState NewState); +void SDIO_SetPowerState(uint32_t SDIO_PowerState); +uint32_t SDIO_GetPowerState(void); +void SDIO_ITConfig(uint32_t SDIO_IT, FunctionalState NewState); +void SDIO_DMACmd(FunctionalState NewState); +void SDIO_SendCommand(SDIO_CmdInitTypeDef *SDIO_CmdInitStruct); +void SDIO_CmdStructInit(SDIO_CmdInitTypeDef* SDIO_CmdInitStruct); +uint8_t SDIO_GetCommandResponse(void); +uint32_t SDIO_GetResponse(uint32_t SDIO_RESP); +void SDIO_DataConfig(SDIO_DataInitTypeDef* SDIO_DataInitStruct); +void SDIO_DataStructInit(SDIO_DataInitTypeDef* SDIO_DataInitStruct); +uint32_t SDIO_GetDataCounter(void); +uint32_t SDIO_ReadData(void); +void SDIO_WriteData(uint32_t Data); +uint32_t SDIO_GetFIFOCount(void); +void SDIO_StartSDIOReadWait(FunctionalState NewState); +void SDIO_StopSDIOReadWait(FunctionalState NewState); +void SDIO_SetSDIOReadWaitMode(uint32_t SDIO_ReadWaitMode); +void SDIO_SetSDIOOperation(FunctionalState NewState); +void SDIO_SendSDIOSuspendCmd(FunctionalState NewState); +void SDIO_CommandCompletionCmd(FunctionalState NewState); +void SDIO_CEATAITCmd(FunctionalState NewState); +void SDIO_SendCEATACmd(FunctionalState NewState); +FlagStatus SDIO_GetFlagStatus(uint32_t SDIO_FLAG); +void SDIO_ClearFlag(uint32_t SDIO_FLAG); +ITStatus SDIO_GetITStatus(uint32_t SDIO_IT); +void SDIO_ClearITPendingBit(uint32_t SDIO_IT); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F10x_SDIO_H */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_spi.h b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_spi.h new file mode 100644 index 0000000..23cc26d --- /dev/null +++ b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_spi.h @@ -0,0 +1,487 @@ +/** + ****************************************************************************** + * @file stm32f10x_spi.h + * @author MCD Application Team + * @version V3.5.0 + * @date 11-March-2011 + * @brief This file contains all the functions prototypes for the SPI firmware + * library. + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

    © COPYRIGHT 2011 STMicroelectronics

    + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F10x_SPI_H +#define __STM32F10x_SPI_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f10x.h" + +/** @addtogroup STM32F10x_StdPeriph_Driver + * @{ + */ + +/** @addtogroup SPI + * @{ + */ + +/** @defgroup SPI_Exported_Types + * @{ + */ + +/** + * @brief SPI Init structure definition + */ + +typedef struct +{ + uint16_t SPI_Direction; /*!< Specifies the SPI unidirectional or bidirectional data mode. + This parameter can be a value of @ref SPI_data_direction */ + + uint16_t SPI_Mode; /*!< Specifies the SPI operating mode. + This parameter can be a value of @ref SPI_mode */ + + uint16_t SPI_DataSize; /*!< Specifies the SPI data size. + This parameter can be a value of @ref SPI_data_size */ + + uint16_t SPI_CPOL; /*!< Specifies the serial clock steady state. + This parameter can be a value of @ref SPI_Clock_Polarity */ + + uint16_t SPI_CPHA; /*!< Specifies the clock active edge for the bit capture. + This parameter can be a value of @ref SPI_Clock_Phase */ + + uint16_t SPI_NSS; /*!< Specifies whether the NSS signal is managed by + hardware (NSS pin) or by software using the SSI bit. + This parameter can be a value of @ref SPI_Slave_Select_management */ + + uint16_t SPI_BaudRatePrescaler; /*!< Specifies the Baud Rate prescaler value which will be + used to configure the transmit and receive SCK clock. + This parameter can be a value of @ref SPI_BaudRate_Prescaler. + @note The communication clock is derived from the master + clock. The slave clock does not need to be set. */ + + uint16_t SPI_FirstBit; /*!< Specifies whether data transfers start from MSB or LSB bit. + This parameter can be a value of @ref SPI_MSB_LSB_transmission */ + + uint16_t SPI_CRCPolynomial; /*!< Specifies the polynomial used for the CRC calculation. */ +}SPI_InitTypeDef; + +/** + * @brief I2S Init structure definition + */ + +typedef struct +{ + + uint16_t I2S_Mode; /*!< Specifies the I2S operating mode. + This parameter can be a value of @ref I2S_Mode */ + + uint16_t I2S_Standard; /*!< Specifies the standard used for the I2S communication. + This parameter can be a value of @ref I2S_Standard */ + + uint16_t I2S_DataFormat; /*!< Specifies the data format for the I2S communication. + This parameter can be a value of @ref I2S_Data_Format */ + + uint16_t I2S_MCLKOutput; /*!< Specifies whether the I2S MCLK output is enabled or not. + This parameter can be a value of @ref I2S_MCLK_Output */ + + uint32_t I2S_AudioFreq; /*!< Specifies the frequency selected for the I2S communication. + This parameter can be a value of @ref I2S_Audio_Frequency */ + + uint16_t I2S_CPOL; /*!< Specifies the idle state of the I2S clock. + This parameter can be a value of @ref I2S_Clock_Polarity */ +}I2S_InitTypeDef; + +/** + * @} + */ + +/** @defgroup SPI_Exported_Constants + * @{ + */ + +#define IS_SPI_ALL_PERIPH(PERIPH) (((PERIPH) == SPI1) || \ + ((PERIPH) == SPI2) || \ + ((PERIPH) == SPI3)) + +#define IS_SPI_23_PERIPH(PERIPH) (((PERIPH) == SPI2) || \ + ((PERIPH) == SPI3)) + +/** @defgroup SPI_data_direction + * @{ + */ + +#define SPI_Direction_2Lines_FullDuplex ((uint16_t)0x0000) +#define SPI_Direction_2Lines_RxOnly ((uint16_t)0x0400) +#define SPI_Direction_1Line_Rx ((uint16_t)0x8000) +#define SPI_Direction_1Line_Tx ((uint16_t)0xC000) +#define IS_SPI_DIRECTION_MODE(MODE) (((MODE) == SPI_Direction_2Lines_FullDuplex) || \ + ((MODE) == SPI_Direction_2Lines_RxOnly) || \ + ((MODE) == SPI_Direction_1Line_Rx) || \ + ((MODE) == SPI_Direction_1Line_Tx)) +/** + * @} + */ + +/** @defgroup SPI_mode + * @{ + */ + +#define SPI_Mode_Master ((uint16_t)0x0104) +#define SPI_Mode_Slave ((uint16_t)0x0000) +#define IS_SPI_MODE(MODE) (((MODE) == SPI_Mode_Master) || \ + ((MODE) == SPI_Mode_Slave)) +/** + * @} + */ + +/** @defgroup SPI_data_size + * @{ + */ + +#define SPI_DataSize_16b ((uint16_t)0x0800) +#define SPI_DataSize_8b ((uint16_t)0x0000) +#define IS_SPI_DATASIZE(DATASIZE) (((DATASIZE) == SPI_DataSize_16b) || \ + ((DATASIZE) == SPI_DataSize_8b)) +/** + * @} + */ + +/** @defgroup SPI_Clock_Polarity + * @{ + */ + +#define SPI_CPOL_Low ((uint16_t)0x0000) +#define SPI_CPOL_High ((uint16_t)0x0002) +#define IS_SPI_CPOL(CPOL) (((CPOL) == SPI_CPOL_Low) || \ + ((CPOL) == SPI_CPOL_High)) +/** + * @} + */ + +/** @defgroup SPI_Clock_Phase + * @{ + */ + +#define SPI_CPHA_1Edge ((uint16_t)0x0000) +#define SPI_CPHA_2Edge ((uint16_t)0x0001) +#define IS_SPI_CPHA(CPHA) (((CPHA) == SPI_CPHA_1Edge) || \ + ((CPHA) == SPI_CPHA_2Edge)) +/** + * @} + */ + +/** @defgroup SPI_Slave_Select_management + * @{ + */ + +#define SPI_NSS_Soft ((uint16_t)0x0200) +#define SPI_NSS_Hard ((uint16_t)0x0000) +#define IS_SPI_NSS(NSS) (((NSS) == SPI_NSS_Soft) || \ + ((NSS) == SPI_NSS_Hard)) +/** + * @} + */ + +/** @defgroup SPI_BaudRate_Prescaler + * @{ + */ + +#define SPI_BaudRatePrescaler_2 ((uint16_t)0x0000) +#define SPI_BaudRatePrescaler_4 ((uint16_t)0x0008) +#define SPI_BaudRatePrescaler_8 ((uint16_t)0x0010) +#define SPI_BaudRatePrescaler_16 ((uint16_t)0x0018) +#define SPI_BaudRatePrescaler_32 ((uint16_t)0x0020) +#define SPI_BaudRatePrescaler_64 ((uint16_t)0x0028) +#define SPI_BaudRatePrescaler_128 ((uint16_t)0x0030) +#define SPI_BaudRatePrescaler_256 ((uint16_t)0x0038) +#define IS_SPI_BAUDRATE_PRESCALER(PRESCALER) (((PRESCALER) == SPI_BaudRatePrescaler_2) || \ + ((PRESCALER) == SPI_BaudRatePrescaler_4) || \ + ((PRESCALER) == SPI_BaudRatePrescaler_8) || \ + ((PRESCALER) == SPI_BaudRatePrescaler_16) || \ + ((PRESCALER) == SPI_BaudRatePrescaler_32) || \ + ((PRESCALER) == SPI_BaudRatePrescaler_64) || \ + ((PRESCALER) == SPI_BaudRatePrescaler_128) || \ + ((PRESCALER) == SPI_BaudRatePrescaler_256)) +/** + * @} + */ + +/** @defgroup SPI_MSB_LSB_transmission + * @{ + */ + +#define SPI_FirstBit_MSB ((uint16_t)0x0000) +#define SPI_FirstBit_LSB ((uint16_t)0x0080) +#define IS_SPI_FIRST_BIT(BIT) (((BIT) == SPI_FirstBit_MSB) || \ + ((BIT) == SPI_FirstBit_LSB)) +/** + * @} + */ + +/** @defgroup I2S_Mode + * @{ + */ + +#define I2S_Mode_SlaveTx ((uint16_t)0x0000) +#define I2S_Mode_SlaveRx ((uint16_t)0x0100) +#define I2S_Mode_MasterTx ((uint16_t)0x0200) +#define I2S_Mode_MasterRx ((uint16_t)0x0300) +#define IS_I2S_MODE(MODE) (((MODE) == I2S_Mode_SlaveTx) || \ + ((MODE) == I2S_Mode_SlaveRx) || \ + ((MODE) == I2S_Mode_MasterTx) || \ + ((MODE) == I2S_Mode_MasterRx) ) +/** + * @} + */ + +/** @defgroup I2S_Standard + * @{ + */ + +#define I2S_Standard_Phillips ((uint16_t)0x0000) +#define I2S_Standard_MSB ((uint16_t)0x0010) +#define I2S_Standard_LSB ((uint16_t)0x0020) +#define I2S_Standard_PCMShort ((uint16_t)0x0030) +#define I2S_Standard_PCMLong ((uint16_t)0x00B0) +#define IS_I2S_STANDARD(STANDARD) (((STANDARD) == I2S_Standard_Phillips) || \ + ((STANDARD) == I2S_Standard_MSB) || \ + ((STANDARD) == I2S_Standard_LSB) || \ + ((STANDARD) == I2S_Standard_PCMShort) || \ + ((STANDARD) == I2S_Standard_PCMLong)) +/** + * @} + */ + +/** @defgroup I2S_Data_Format + * @{ + */ + +#define I2S_DataFormat_16b ((uint16_t)0x0000) +#define I2S_DataFormat_16bextended ((uint16_t)0x0001) +#define I2S_DataFormat_24b ((uint16_t)0x0003) +#define I2S_DataFormat_32b ((uint16_t)0x0005) +#define IS_I2S_DATA_FORMAT(FORMAT) (((FORMAT) == I2S_DataFormat_16b) || \ + ((FORMAT) == I2S_DataFormat_16bextended) || \ + ((FORMAT) == I2S_DataFormat_24b) || \ + ((FORMAT) == I2S_DataFormat_32b)) +/** + * @} + */ + +/** @defgroup I2S_MCLK_Output + * @{ + */ + +#define I2S_MCLKOutput_Enable ((uint16_t)0x0200) +#define I2S_MCLKOutput_Disable ((uint16_t)0x0000) +#define IS_I2S_MCLK_OUTPUT(OUTPUT) (((OUTPUT) == I2S_MCLKOutput_Enable) || \ + ((OUTPUT) == I2S_MCLKOutput_Disable)) +/** + * @} + */ + +/** @defgroup I2S_Audio_Frequency + * @{ + */ + +#define I2S_AudioFreq_192k ((uint32_t)192000) +#define I2S_AudioFreq_96k ((uint32_t)96000) +#define I2S_AudioFreq_48k ((uint32_t)48000) +#define I2S_AudioFreq_44k ((uint32_t)44100) +#define I2S_AudioFreq_32k ((uint32_t)32000) +#define I2S_AudioFreq_22k ((uint32_t)22050) +#define I2S_AudioFreq_16k ((uint32_t)16000) +#define I2S_AudioFreq_11k ((uint32_t)11025) +#define I2S_AudioFreq_8k ((uint32_t)8000) +#define I2S_AudioFreq_Default ((uint32_t)2) + +#define IS_I2S_AUDIO_FREQ(FREQ) ((((FREQ) >= I2S_AudioFreq_8k) && \ + ((FREQ) <= I2S_AudioFreq_192k)) || \ + ((FREQ) == I2S_AudioFreq_Default)) +/** + * @} + */ + +/** @defgroup I2S_Clock_Polarity + * @{ + */ + +#define I2S_CPOL_Low ((uint16_t)0x0000) +#define I2S_CPOL_High ((uint16_t)0x0008) +#define IS_I2S_CPOL(CPOL) (((CPOL) == I2S_CPOL_Low) || \ + ((CPOL) == I2S_CPOL_High)) +/** + * @} + */ + +/** @defgroup SPI_I2S_DMA_transfer_requests + * @{ + */ + +#define SPI_I2S_DMAReq_Tx ((uint16_t)0x0002) +#define SPI_I2S_DMAReq_Rx ((uint16_t)0x0001) +#define IS_SPI_I2S_DMAREQ(DMAREQ) ((((DMAREQ) & (uint16_t)0xFFFC) == 0x00) && ((DMAREQ) != 0x00)) +/** + * @} + */ + +/** @defgroup SPI_NSS_internal_software_management + * @{ + */ + +#define SPI_NSSInternalSoft_Set ((uint16_t)0x0100) +#define SPI_NSSInternalSoft_Reset ((uint16_t)0xFEFF) +#define IS_SPI_NSS_INTERNAL(INTERNAL) (((INTERNAL) == SPI_NSSInternalSoft_Set) || \ + ((INTERNAL) == SPI_NSSInternalSoft_Reset)) +/** + * @} + */ + +/** @defgroup SPI_CRC_Transmit_Receive + * @{ + */ + +#define SPI_CRC_Tx ((uint8_t)0x00) +#define SPI_CRC_Rx ((uint8_t)0x01) +#define IS_SPI_CRC(CRC) (((CRC) == SPI_CRC_Tx) || ((CRC) == SPI_CRC_Rx)) +/** + * @} + */ + +/** @defgroup SPI_direction_transmit_receive + * @{ + */ + +#define SPI_Direction_Rx ((uint16_t)0xBFFF) +#define SPI_Direction_Tx ((uint16_t)0x4000) +#define IS_SPI_DIRECTION(DIRECTION) (((DIRECTION) == SPI_Direction_Rx) || \ + ((DIRECTION) == SPI_Direction_Tx)) +/** + * @} + */ + +/** @defgroup SPI_I2S_interrupts_definition + * @{ + */ + +#define SPI_I2S_IT_TXE ((uint8_t)0x71) +#define SPI_I2S_IT_RXNE ((uint8_t)0x60) +#define SPI_I2S_IT_ERR ((uint8_t)0x50) +#define IS_SPI_I2S_CONFIG_IT(IT) (((IT) == SPI_I2S_IT_TXE) || \ + ((IT) == SPI_I2S_IT_RXNE) || \ + ((IT) == SPI_I2S_IT_ERR)) +#define SPI_I2S_IT_OVR ((uint8_t)0x56) +#define SPI_IT_MODF ((uint8_t)0x55) +#define SPI_IT_CRCERR ((uint8_t)0x54) +#define I2S_IT_UDR ((uint8_t)0x53) +#define IS_SPI_I2S_CLEAR_IT(IT) (((IT) == SPI_IT_CRCERR)) +#define IS_SPI_I2S_GET_IT(IT) (((IT) == SPI_I2S_IT_RXNE) || ((IT) == SPI_I2S_IT_TXE) || \ + ((IT) == I2S_IT_UDR) || ((IT) == SPI_IT_CRCERR) || \ + ((IT) == SPI_IT_MODF) || ((IT) == SPI_I2S_IT_OVR)) +/** + * @} + */ + +/** @defgroup SPI_I2S_flags_definition + * @{ + */ + +#define SPI_I2S_FLAG_RXNE ((uint16_t)0x0001) +#define SPI_I2S_FLAG_TXE ((uint16_t)0x0002) +#define I2S_FLAG_CHSIDE ((uint16_t)0x0004) +#define I2S_FLAG_UDR ((uint16_t)0x0008) +#define SPI_FLAG_CRCERR ((uint16_t)0x0010) +#define SPI_FLAG_MODF ((uint16_t)0x0020) +#define SPI_I2S_FLAG_OVR ((uint16_t)0x0040) +#define SPI_I2S_FLAG_BSY ((uint16_t)0x0080) +#define IS_SPI_I2S_CLEAR_FLAG(FLAG) (((FLAG) == SPI_FLAG_CRCERR)) +#define IS_SPI_I2S_GET_FLAG(FLAG) (((FLAG) == SPI_I2S_FLAG_BSY) || ((FLAG) == SPI_I2S_FLAG_OVR) || \ + ((FLAG) == SPI_FLAG_MODF) || ((FLAG) == SPI_FLAG_CRCERR) || \ + ((FLAG) == I2S_FLAG_UDR) || ((FLAG) == I2S_FLAG_CHSIDE) || \ + ((FLAG) == SPI_I2S_FLAG_TXE) || ((FLAG) == SPI_I2S_FLAG_RXNE)) +/** + * @} + */ + +/** @defgroup SPI_CRC_polynomial + * @{ + */ + +#define IS_SPI_CRC_POLYNOMIAL(POLYNOMIAL) ((POLYNOMIAL) >= 0x1) +/** + * @} + */ + +/** + * @} + */ + +/** @defgroup SPI_Exported_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup SPI_Exported_Functions + * @{ + */ + +void SPI_I2S_DeInit(SPI_TypeDef* SPIx); +void SPI_Init(SPI_TypeDef* SPIx, SPI_InitTypeDef* SPI_InitStruct); +void I2S_Init(SPI_TypeDef* SPIx, I2S_InitTypeDef* I2S_InitStruct); +void SPI_StructInit(SPI_InitTypeDef* SPI_InitStruct); +void I2S_StructInit(I2S_InitTypeDef* I2S_InitStruct); +void SPI_Cmd(SPI_TypeDef* SPIx, FunctionalState NewState); +void I2S_Cmd(SPI_TypeDef* SPIx, FunctionalState NewState); +void SPI_I2S_ITConfig(SPI_TypeDef* SPIx, uint8_t SPI_I2S_IT, FunctionalState NewState); +void SPI_I2S_DMACmd(SPI_TypeDef* SPIx, uint16_t SPI_I2S_DMAReq, FunctionalState NewState); +void SPI_I2S_SendData(SPI_TypeDef* SPIx, uint16_t Data); +uint16_t SPI_I2S_ReceiveData(SPI_TypeDef* SPIx); +void SPI_NSSInternalSoftwareConfig(SPI_TypeDef* SPIx, uint16_t SPI_NSSInternalSoft); +void SPI_SSOutputCmd(SPI_TypeDef* SPIx, FunctionalState NewState); +void SPI_DataSizeConfig(SPI_TypeDef* SPIx, uint16_t SPI_DataSize); +void SPI_TransmitCRC(SPI_TypeDef* SPIx); +void SPI_CalculateCRC(SPI_TypeDef* SPIx, FunctionalState NewState); +uint16_t SPI_GetCRC(SPI_TypeDef* SPIx, uint8_t SPI_CRC); +uint16_t SPI_GetCRCPolynomial(SPI_TypeDef* SPIx); +void SPI_BiDirectionalLineConfig(SPI_TypeDef* SPIx, uint16_t SPI_Direction); +FlagStatus SPI_I2S_GetFlagStatus(SPI_TypeDef* SPIx, uint16_t SPI_I2S_FLAG); +void SPI_I2S_ClearFlag(SPI_TypeDef* SPIx, uint16_t SPI_I2S_FLAG); +ITStatus SPI_I2S_GetITStatus(SPI_TypeDef* SPIx, uint8_t SPI_I2S_IT); +void SPI_I2S_ClearITPendingBit(SPI_TypeDef* SPIx, uint8_t SPI_I2S_IT); + +#ifdef __cplusplus +} +#endif + +#endif /*__STM32F10x_SPI_H */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_tim.h b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_tim.h new file mode 100644 index 0000000..65bf76a --- /dev/null +++ b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_tim.h @@ -0,0 +1,1164 @@ +/** + ****************************************************************************** + * @file stm32f10x_tim.h + * @author MCD Application Team + * @version V3.5.0 + * @date 11-March-2011 + * @brief This file contains all the functions prototypes for the TIM firmware + * library. + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

    © COPYRIGHT 2011 STMicroelectronics

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

    © COPYRIGHT 2011 STMicroelectronics

    + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F10x_USART_H +#define __STM32F10x_USART_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f10x.h" + +/** @addtogroup STM32F10x_StdPeriph_Driver + * @{ + */ + +/** @addtogroup USART + * @{ + */ + +/** @defgroup USART_Exported_Types + * @{ + */ + +/** + * @brief USART Init Structure definition + */ + +typedef struct +{ + uint32_t USART_BaudRate; /*!< This member configures the USART communication baud rate. + The baud rate is computed using the following formula: + - IntegerDivider = ((PCLKx) / (16 * (USART_InitStruct->USART_BaudRate))) + - FractionalDivider = ((IntegerDivider - ((u32) IntegerDivider)) * 16) + 0.5 */ + + uint16_t USART_WordLength; /*!< Specifies the number of data bits transmitted or received in a frame. + This parameter can be a value of @ref USART_Word_Length */ + + uint16_t USART_StopBits; /*!< Specifies the number of stop bits transmitted. + This parameter can be a value of @ref USART_Stop_Bits */ + + uint16_t USART_Parity; /*!< Specifies the parity mode. + This parameter can be a value of @ref USART_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). */ + + uint16_t USART_Mode; /*!< Specifies wether the Receive or Transmit mode is enabled or disabled. + This parameter can be a value of @ref USART_Mode */ + + uint16_t USART_HardwareFlowControl; /*!< Specifies wether the hardware flow control mode is enabled + or disabled. + This parameter can be a value of @ref USART_Hardware_Flow_Control */ +} USART_InitTypeDef; + +/** + * @brief USART Clock Init Structure definition + */ + +typedef struct +{ + + uint16_t USART_Clock; /*!< Specifies whether the USART clock is enabled or disabled. + This parameter can be a value of @ref USART_Clock */ + + uint16_t USART_CPOL; /*!< Specifies the steady state value of the serial clock. + This parameter can be a value of @ref USART_Clock_Polarity */ + + uint16_t USART_CPHA; /*!< Specifies the clock transition on which the bit capture is made. + This parameter can be a value of @ref USART_Clock_Phase */ + + uint16_t USART_LastBit; /*!< 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_Last_Bit */ +} USART_ClockInitTypeDef; + +/** + * @} + */ + +/** @defgroup USART_Exported_Constants + * @{ + */ + +#define IS_USART_ALL_PERIPH(PERIPH) (((PERIPH) == USART1) || \ + ((PERIPH) == USART2) || \ + ((PERIPH) == USART3) || \ + ((PERIPH) == UART4) || \ + ((PERIPH) == UART5)) + +#define IS_USART_123_PERIPH(PERIPH) (((PERIPH) == USART1) || \ + ((PERIPH) == USART2) || \ + ((PERIPH) == USART3)) + +#define IS_USART_1234_PERIPH(PERIPH) (((PERIPH) == USART1) || \ + ((PERIPH) == USART2) || \ + ((PERIPH) == USART3) || \ + ((PERIPH) == UART4)) +/** @defgroup USART_Word_Length + * @{ + */ + +#define USART_WordLength_8b ((uint16_t)0x0000) +#define USART_WordLength_9b ((uint16_t)0x1000) + +#define IS_USART_WORD_LENGTH(LENGTH) (((LENGTH) == USART_WordLength_8b) || \ + ((LENGTH) == USART_WordLength_9b)) +/** + * @} + */ + +/** @defgroup USART_Stop_Bits + * @{ + */ + +#define USART_StopBits_1 ((uint16_t)0x0000) +#define USART_StopBits_0_5 ((uint16_t)0x1000) +#define USART_StopBits_2 ((uint16_t)0x2000) +#define USART_StopBits_1_5 ((uint16_t)0x3000) +#define IS_USART_STOPBITS(STOPBITS) (((STOPBITS) == USART_StopBits_1) || \ + ((STOPBITS) == USART_StopBits_0_5) || \ + ((STOPBITS) == USART_StopBits_2) || \ + ((STOPBITS) == USART_StopBits_1_5)) +/** + * @} + */ + +/** @defgroup USART_Parity + * @{ + */ + +#define USART_Parity_No ((uint16_t)0x0000) +#define USART_Parity_Even ((uint16_t)0x0400) +#define USART_Parity_Odd ((uint16_t)0x0600) +#define IS_USART_PARITY(PARITY) (((PARITY) == USART_Parity_No) || \ + ((PARITY) == USART_Parity_Even) || \ + ((PARITY) == USART_Parity_Odd)) +/** + * @} + */ + +/** @defgroup USART_Mode + * @{ + */ + +#define USART_Mode_Rx ((uint16_t)0x0004) +#define USART_Mode_Tx ((uint16_t)0x0008) +#define IS_USART_MODE(MODE) ((((MODE) & (uint16_t)0xFFF3) == 0x00) && ((MODE) != (uint16_t)0x00)) +/** + * @} + */ + +/** @defgroup USART_Hardware_Flow_Control + * @{ + */ +#define USART_HardwareFlowControl_None ((uint16_t)0x0000) +#define USART_HardwareFlowControl_RTS ((uint16_t)0x0100) +#define USART_HardwareFlowControl_CTS ((uint16_t)0x0200) +#define USART_HardwareFlowControl_RTS_CTS ((uint16_t)0x0300) +#define IS_USART_HARDWARE_FLOW_CONTROL(CONTROL)\ + (((CONTROL) == USART_HardwareFlowControl_None) || \ + ((CONTROL) == USART_HardwareFlowControl_RTS) || \ + ((CONTROL) == USART_HardwareFlowControl_CTS) || \ + ((CONTROL) == USART_HardwareFlowControl_RTS_CTS)) +/** + * @} + */ + +/** @defgroup USART_Clock + * @{ + */ +#define USART_Clock_Disable ((uint16_t)0x0000) +#define USART_Clock_Enable ((uint16_t)0x0800) +#define IS_USART_CLOCK(CLOCK) (((CLOCK) == USART_Clock_Disable) || \ + ((CLOCK) == USART_Clock_Enable)) +/** + * @} + */ + +/** @defgroup USART_Clock_Polarity + * @{ + */ + +#define USART_CPOL_Low ((uint16_t)0x0000) +#define USART_CPOL_High ((uint16_t)0x0400) +#define IS_USART_CPOL(CPOL) (((CPOL) == USART_CPOL_Low) || ((CPOL) == USART_CPOL_High)) + +/** + * @} + */ + +/** @defgroup USART_Clock_Phase + * @{ + */ + +#define USART_CPHA_1Edge ((uint16_t)0x0000) +#define USART_CPHA_2Edge ((uint16_t)0x0200) +#define IS_USART_CPHA(CPHA) (((CPHA) == USART_CPHA_1Edge) || ((CPHA) == USART_CPHA_2Edge)) + +/** + * @} + */ + +/** @defgroup USART_Last_Bit + * @{ + */ + +#define USART_LastBit_Disable ((uint16_t)0x0000) +#define USART_LastBit_Enable ((uint16_t)0x0100) +#define IS_USART_LASTBIT(LASTBIT) (((LASTBIT) == USART_LastBit_Disable) || \ + ((LASTBIT) == USART_LastBit_Enable)) +/** + * @} + */ + +/** @defgroup USART_Interrupt_definition + * @{ + */ + +#define USART_IT_PE ((uint16_t)0x0028) +#define USART_IT_TXE ((uint16_t)0x0727) +#define USART_IT_TC ((uint16_t)0x0626) +#define USART_IT_RXNE ((uint16_t)0x0525) +#define USART_IT_IDLE ((uint16_t)0x0424) +#define USART_IT_LBD ((uint16_t)0x0846) +#define USART_IT_CTS ((uint16_t)0x096A) +#define USART_IT_ERR ((uint16_t)0x0060) +#define USART_IT_ORE ((uint16_t)0x0360) +#define USART_IT_NE ((uint16_t)0x0260) +#define USART_IT_FE ((uint16_t)0x0160) +#define IS_USART_CONFIG_IT(IT) (((IT) == USART_IT_PE) || ((IT) == USART_IT_TXE) || \ + ((IT) == USART_IT_TC) || ((IT) == USART_IT_RXNE) || \ + ((IT) == USART_IT_IDLE) || ((IT) == USART_IT_LBD) || \ + ((IT) == USART_IT_CTS) || ((IT) == USART_IT_ERR)) +#define IS_USART_GET_IT(IT) (((IT) == USART_IT_PE) || ((IT) == USART_IT_TXE) || \ + ((IT) == USART_IT_TC) || ((IT) == USART_IT_RXNE) || \ + ((IT) == USART_IT_IDLE) || ((IT) == USART_IT_LBD) || \ + ((IT) == USART_IT_CTS) || ((IT) == USART_IT_ORE) || \ + ((IT) == USART_IT_NE) || ((IT) == USART_IT_FE)) +#define IS_USART_CLEAR_IT(IT) (((IT) == USART_IT_TC) || ((IT) == USART_IT_RXNE) || \ + ((IT) == USART_IT_LBD) || ((IT) == USART_IT_CTS)) +/** + * @} + */ + +/** @defgroup USART_DMA_Requests + * @{ + */ + +#define USART_DMAReq_Tx ((uint16_t)0x0080) +#define USART_DMAReq_Rx ((uint16_t)0x0040) +#define IS_USART_DMAREQ(DMAREQ) ((((DMAREQ) & (uint16_t)0xFF3F) == 0x00) && ((DMAREQ) != (uint16_t)0x00)) + +/** + * @} + */ + +/** @defgroup USART_WakeUp_methods + * @{ + */ + +#define USART_WakeUp_IdleLine ((uint16_t)0x0000) +#define USART_WakeUp_AddressMark ((uint16_t)0x0800) +#define IS_USART_WAKEUP(WAKEUP) (((WAKEUP) == USART_WakeUp_IdleLine) || \ + ((WAKEUP) == USART_WakeUp_AddressMark)) +/** + * @} + */ + +/** @defgroup USART_LIN_Break_Detection_Length + * @{ + */ + +#define USART_LINBreakDetectLength_10b ((uint16_t)0x0000) +#define USART_LINBreakDetectLength_11b ((uint16_t)0x0020) +#define IS_USART_LIN_BREAK_DETECT_LENGTH(LENGTH) \ + (((LENGTH) == USART_LINBreakDetectLength_10b) || \ + ((LENGTH) == USART_LINBreakDetectLength_11b)) +/** + * @} + */ + +/** @defgroup USART_IrDA_Low_Power + * @{ + */ + +#define USART_IrDAMode_LowPower ((uint16_t)0x0004) +#define USART_IrDAMode_Normal ((uint16_t)0x0000) +#define IS_USART_IRDA_MODE(MODE) (((MODE) == USART_IrDAMode_LowPower) || \ + ((MODE) == USART_IrDAMode_Normal)) +/** + * @} + */ + +/** @defgroup USART_Flags + * @{ + */ + +#define USART_FLAG_CTS ((uint16_t)0x0200) +#define USART_FLAG_LBD ((uint16_t)0x0100) +#define USART_FLAG_TXE ((uint16_t)0x0080) +#define USART_FLAG_TC ((uint16_t)0x0040) +#define USART_FLAG_RXNE ((uint16_t)0x0020) +#define USART_FLAG_IDLE ((uint16_t)0x0010) +#define USART_FLAG_ORE ((uint16_t)0x0008) +#define USART_FLAG_NE ((uint16_t)0x0004) +#define USART_FLAG_FE ((uint16_t)0x0002) +#define USART_FLAG_PE ((uint16_t)0x0001) +#define IS_USART_FLAG(FLAG) (((FLAG) == USART_FLAG_PE) || ((FLAG) == USART_FLAG_TXE) || \ + ((FLAG) == USART_FLAG_TC) || ((FLAG) == USART_FLAG_RXNE) || \ + ((FLAG) == USART_FLAG_IDLE) || ((FLAG) == USART_FLAG_LBD) || \ + ((FLAG) == USART_FLAG_CTS) || ((FLAG) == USART_FLAG_ORE) || \ + ((FLAG) == USART_FLAG_NE) || ((FLAG) == USART_FLAG_FE)) + +#define IS_USART_CLEAR_FLAG(FLAG) ((((FLAG) & (uint16_t)0xFC9F) == 0x00) && ((FLAG) != (uint16_t)0x00)) +#define IS_USART_PERIPH_FLAG(PERIPH, USART_FLAG) ((((*(uint32_t*)&(PERIPH)) != UART4_BASE) &&\ + ((*(uint32_t*)&(PERIPH)) != UART5_BASE)) \ + || ((USART_FLAG) != USART_FLAG_CTS)) +#define IS_USART_BAUDRATE(BAUDRATE) (((BAUDRATE) > 0) && ((BAUDRATE) < 0x0044AA21)) +#define IS_USART_ADDRESS(ADDRESS) ((ADDRESS) <= 0xF) +#define IS_USART_DATA(DATA) ((DATA) <= 0x1FF) + +/** + * @} + */ + +/** + * @} + */ + +/** @defgroup USART_Exported_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup USART_Exported_Functions + * @{ + */ + +void USART_DeInit(USART_TypeDef* USARTx); +void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct); +void USART_StructInit(USART_InitTypeDef* USART_InitStruct); +void USART_ClockInit(USART_TypeDef* USARTx, USART_ClockInitTypeDef* USART_ClockInitStruct); +void USART_ClockStructInit(USART_ClockInitTypeDef* USART_ClockInitStruct); +void USART_Cmd(USART_TypeDef* USARTx, FunctionalState NewState); +void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, FunctionalState NewState); +void USART_DMACmd(USART_TypeDef* USARTx, uint16_t USART_DMAReq, FunctionalState NewState); +void USART_SetAddress(USART_TypeDef* USARTx, uint8_t USART_Address); +void USART_WakeUpConfig(USART_TypeDef* USARTx, uint16_t USART_WakeUp); +void USART_ReceiverWakeUpCmd(USART_TypeDef* USARTx, FunctionalState NewState); +void USART_LINBreakDetectLengthConfig(USART_TypeDef* USARTx, uint16_t USART_LINBreakDetectLength); +void USART_LINCmd(USART_TypeDef* USARTx, FunctionalState NewState); +void USART_SendData(USART_TypeDef* USARTx, uint16_t Data); +uint16_t USART_ReceiveData(USART_TypeDef* USARTx); +void USART_SendBreak(USART_TypeDef* USARTx); +void USART_SetGuardTime(USART_TypeDef* USARTx, uint8_t USART_GuardTime); +void USART_SetPrescaler(USART_TypeDef* USARTx, uint8_t USART_Prescaler); +void USART_SmartCardCmd(USART_TypeDef* USARTx, FunctionalState NewState); +void USART_SmartCardNACKCmd(USART_TypeDef* USARTx, FunctionalState NewState); +void USART_HalfDuplexCmd(USART_TypeDef* USARTx, FunctionalState NewState); +void USART_OverSampling8Cmd(USART_TypeDef* USARTx, FunctionalState NewState); +void USART_OneBitMethodCmd(USART_TypeDef* USARTx, FunctionalState NewState); +void USART_IrDAConfig(USART_TypeDef* USARTx, uint16_t USART_IrDAMode); +void USART_IrDACmd(USART_TypeDef* USARTx, FunctionalState NewState); +FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG); +void USART_ClearFlag(USART_TypeDef* USARTx, uint16_t USART_FLAG); +ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT); +void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F10x_USART_H */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_wwdg.h b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_wwdg.h new file mode 100644 index 0000000..bdfa177 --- /dev/null +++ b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/inc/stm32f10x_wwdg.h @@ -0,0 +1,115 @@ +/** + ****************************************************************************** + * @file stm32f10x_wwdg.h + * @author MCD Application Team + * @version V3.5.0 + * @date 11-March-2011 + * @brief This file contains all the functions prototypes for the WWDG firmware + * library. + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

    © COPYRIGHT 2011 STMicroelectronics

    + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F10x_WWDG_H +#define __STM32F10x_WWDG_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f10x.h" + +/** @addtogroup STM32F10x_StdPeriph_Driver + * @{ + */ + +/** @addtogroup WWDG + * @{ + */ + +/** @defgroup WWDG_Exported_Types + * @{ + */ + +/** + * @} + */ + +/** @defgroup WWDG_Exported_Constants + * @{ + */ + +/** @defgroup WWDG_Prescaler + * @{ + */ + +#define WWDG_Prescaler_1 ((uint32_t)0x00000000) +#define WWDG_Prescaler_2 ((uint32_t)0x00000080) +#define WWDG_Prescaler_4 ((uint32_t)0x00000100) +#define WWDG_Prescaler_8 ((uint32_t)0x00000180) +#define IS_WWDG_PRESCALER(PRESCALER) (((PRESCALER) == WWDG_Prescaler_1) || \ + ((PRESCALER) == WWDG_Prescaler_2) || \ + ((PRESCALER) == WWDG_Prescaler_4) || \ + ((PRESCALER) == WWDG_Prescaler_8)) +#define IS_WWDG_WINDOW_VALUE(VALUE) ((VALUE) <= 0x7F) +#define IS_WWDG_COUNTER(COUNTER) (((COUNTER) >= 0x40) && ((COUNTER) <= 0x7F)) + +/** + * @} + */ + +/** + * @} + */ + +/** @defgroup WWDG_Exported_Macros + * @{ + */ +/** + * @} + */ + +/** @defgroup WWDG_Exported_Functions + * @{ + */ + +void WWDG_DeInit(void); +void WWDG_SetPrescaler(uint32_t WWDG_Prescaler); +void WWDG_SetWindowValue(uint8_t WindowValue); +void WWDG_EnableIT(void); +void WWDG_SetCounter(uint8_t Counter); +void WWDG_Enable(uint8_t Counter); +FlagStatus WWDG_GetFlagStatus(void); +void WWDG_ClearFlag(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F10x_WWDG_H */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/misc.c b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/misc.c new file mode 100644 index 0000000..c0a5e11 --- /dev/null +++ b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/misc.c @@ -0,0 +1,225 @@ +/** + ****************************************************************************** + * @file misc.c + * @author MCD Application Team + * @version V3.5.0 + * @date 11-March-2011 + * @brief This file provides all the miscellaneous firmware functions (add-on + * to CMSIS functions). + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

    © COPYRIGHT 2011 STMicroelectronics

    + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "misc.h" + +/** @addtogroup STM32F10x_StdPeriph_Driver + * @{ + */ + +/** @defgroup MISC + * @brief MISC driver modules + * @{ + */ + +/** @defgroup MISC_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @defgroup MISC_Private_Defines + * @{ + */ + +#define AIRCR_VECTKEY_MASK ((uint32_t)0x05FA0000) +/** + * @} + */ + +/** @defgroup MISC_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup MISC_Private_Variables + * @{ + */ + +/** + * @} + */ + +/** @defgroup MISC_Private_FunctionPrototypes + * @{ + */ + +/** + * @} + */ + +/** @defgroup MISC_Private_Functions + * @{ + */ + +/** + * @brief Configures the priority grouping: pre-emption priority and subpriority. + * @param NVIC_PriorityGroup: specifies the priority grouping bits length. + * This parameter can be one of the following values: + * @arg NVIC_PriorityGroup_0: 0 bits for pre-emption priority + * 4 bits for subpriority + * @arg NVIC_PriorityGroup_1: 1 bits for pre-emption priority + * 3 bits for subpriority + * @arg NVIC_PriorityGroup_2: 2 bits for pre-emption priority + * 2 bits for subpriority + * @arg NVIC_PriorityGroup_3: 3 bits for pre-emption priority + * 1 bits for subpriority + * @arg NVIC_PriorityGroup_4: 4 bits for pre-emption priority + * 0 bits for subpriority + * @retval None + */ +void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup) +{ + /* Check the parameters */ + assert_param(IS_NVIC_PRIORITY_GROUP(NVIC_PriorityGroup)); + + /* Set the PRIGROUP[10:8] bits according to NVIC_PriorityGroup value */ + SCB->AIRCR = AIRCR_VECTKEY_MASK | NVIC_PriorityGroup; +} + +/** + * @brief Initializes the NVIC peripheral according to the specified + * parameters in the NVIC_InitStruct. + * @param NVIC_InitStruct: pointer to a NVIC_InitTypeDef structure that contains + * the configuration information for the specified NVIC peripheral. + * @retval None + */ +void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct) +{ + uint32_t tmppriority = 0x00, tmppre = 0x00, tmpsub = 0x0F; + + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NVIC_InitStruct->NVIC_IRQChannelCmd)); + assert_param(IS_NVIC_PREEMPTION_PRIORITY(NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority)); + assert_param(IS_NVIC_SUB_PRIORITY(NVIC_InitStruct->NVIC_IRQChannelSubPriority)); + + if (NVIC_InitStruct->NVIC_IRQChannelCmd != DISABLE) + { + /* Compute the Corresponding IRQ Priority --------------------------------*/ + tmppriority = (0x700 - ((SCB->AIRCR) & (uint32_t)0x700))>> 0x08; + tmppre = (0x4 - tmppriority); + tmpsub = tmpsub >> tmppriority; + + tmppriority = (uint32_t)NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority << tmppre; + tmppriority |= NVIC_InitStruct->NVIC_IRQChannelSubPriority & tmpsub; + tmppriority = tmppriority << 0x04; + + NVIC->IP[NVIC_InitStruct->NVIC_IRQChannel] = tmppriority; + + /* Enable the Selected IRQ Channels --------------------------------------*/ + NVIC->ISER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] = + (uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F); + } + else + { + /* Disable the Selected IRQ Channels -------------------------------------*/ + NVIC->ICER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] = + (uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F); + } +} + +/** + * @brief Sets the vector table location and Offset. + * @param NVIC_VectTab: specifies if the vector table is in RAM or FLASH memory. + * This parameter can be one of the following values: + * @arg NVIC_VectTab_RAM + * @arg NVIC_VectTab_FLASH + * @param Offset: Vector Table base offset field. This value must be a multiple + * of 0x200. + * @retval None + */ +void NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset) +{ + /* Check the parameters */ + assert_param(IS_NVIC_VECTTAB(NVIC_VectTab)); + assert_param(IS_NVIC_OFFSET(Offset)); + + SCB->VTOR = NVIC_VectTab | (Offset & (uint32_t)0x1FFFFF80); +} + +/** + * @brief Selects the condition for the system to enter low power mode. + * @param LowPowerMode: Specifies the new mode for the system to enter low power mode. + * This parameter can be one of the following values: + * @arg NVIC_LP_SEVONPEND + * @arg NVIC_LP_SLEEPDEEP + * @arg NVIC_LP_SLEEPONEXIT + * @param NewState: new state of LP condition. This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void NVIC_SystemLPConfig(uint8_t LowPowerMode, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_NVIC_LP(LowPowerMode)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + SCB->SCR |= LowPowerMode; + } + else + { + SCB->SCR &= (uint32_t)(~(uint32_t)LowPowerMode); + } +} + +/** + * @brief Configures the SysTick clock source. + * @param SysTick_CLKSource: specifies the SysTick clock source. + * This parameter can be one of the following values: + * @arg SysTick_CLKSource_HCLK_Div8: AHB clock divided by 8 selected as SysTick clock source. + * @arg SysTick_CLKSource_HCLK: AHB clock selected as SysTick clock source. + * @retval None + */ +void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource) +{ + /* Check the parameters */ + assert_param(IS_SYSTICK_CLK_SOURCE(SysTick_CLKSource)); + if (SysTick_CLKSource == SysTick_CLKSource_HCLK) + { + SysTick->CTRL |= SysTick_CLKSource_HCLK; + } + else + { + SysTick->CTRL &= SysTick_CLKSource_HCLK_Div8; + } +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_adc.c b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_adc.c new file mode 100644 index 0000000..8155dc9 --- /dev/null +++ b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_adc.c @@ -0,0 +1,1307 @@ +/** + ****************************************************************************** + * @file stm32f10x_adc.c + * @author MCD Application Team + * @version V3.5.0 + * @date 11-March-2011 + * @brief This file provides all the ADC firmware functions. + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

    © COPYRIGHT 2011 STMicroelectronics

    + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f10x_adc.h" +#include "stm32f10x_rcc.h" + +/** @addtogroup STM32F10x_StdPeriph_Driver + * @{ + */ + +/** @defgroup ADC + * @brief ADC driver modules + * @{ + */ + +/** @defgroup ADC_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @defgroup ADC_Private_Defines + * @{ + */ + +/* ADC DISCNUM mask */ +#define CR1_DISCNUM_Reset ((uint32_t)0xFFFF1FFF) + +/* ADC DISCEN mask */ +#define CR1_DISCEN_Set ((uint32_t)0x00000800) +#define CR1_DISCEN_Reset ((uint32_t)0xFFFFF7FF) + +/* ADC JAUTO mask */ +#define CR1_JAUTO_Set ((uint32_t)0x00000400) +#define CR1_JAUTO_Reset ((uint32_t)0xFFFFFBFF) + +/* ADC JDISCEN mask */ +#define CR1_JDISCEN_Set ((uint32_t)0x00001000) +#define CR1_JDISCEN_Reset ((uint32_t)0xFFFFEFFF) + +/* ADC AWDCH mask */ +#define CR1_AWDCH_Reset ((uint32_t)0xFFFFFFE0) + +/* ADC Analog watchdog enable mode mask */ +#define CR1_AWDMode_Reset ((uint32_t)0xFF3FFDFF) + +/* CR1 register Mask */ +#define CR1_CLEAR_Mask ((uint32_t)0xFFF0FEFF) + +/* ADC ADON mask */ +#define CR2_ADON_Set ((uint32_t)0x00000001) +#define CR2_ADON_Reset ((uint32_t)0xFFFFFFFE) + +/* ADC DMA mask */ +#define CR2_DMA_Set ((uint32_t)0x00000100) +#define CR2_DMA_Reset ((uint32_t)0xFFFFFEFF) + +/* ADC RSTCAL mask */ +#define CR2_RSTCAL_Set ((uint32_t)0x00000008) + +/* ADC CAL mask */ +#define CR2_CAL_Set ((uint32_t)0x00000004) + +/* ADC SWSTART mask */ +#define CR2_SWSTART_Set ((uint32_t)0x00400000) + +/* ADC EXTTRIG mask */ +#define CR2_EXTTRIG_Set ((uint32_t)0x00100000) +#define CR2_EXTTRIG_Reset ((uint32_t)0xFFEFFFFF) + +/* ADC Software start mask */ +#define CR2_EXTTRIG_SWSTART_Set ((uint32_t)0x00500000) +#define CR2_EXTTRIG_SWSTART_Reset ((uint32_t)0xFFAFFFFF) + +/* ADC JEXTSEL mask */ +#define CR2_JEXTSEL_Reset ((uint32_t)0xFFFF8FFF) + +/* ADC JEXTTRIG mask */ +#define CR2_JEXTTRIG_Set ((uint32_t)0x00008000) +#define CR2_JEXTTRIG_Reset ((uint32_t)0xFFFF7FFF) + +/* ADC JSWSTART mask */ +#define CR2_JSWSTART_Set ((uint32_t)0x00200000) + +/* ADC injected software start mask */ +#define CR2_JEXTTRIG_JSWSTART_Set ((uint32_t)0x00208000) +#define CR2_JEXTTRIG_JSWSTART_Reset ((uint32_t)0xFFDF7FFF) + +/* ADC TSPD mask */ +#define CR2_TSVREFE_Set ((uint32_t)0x00800000) +#define CR2_TSVREFE_Reset ((uint32_t)0xFF7FFFFF) + +/* CR2 register Mask */ +#define CR2_CLEAR_Mask ((uint32_t)0xFFF1F7FD) + +/* ADC SQx mask */ +#define SQR3_SQ_Set ((uint32_t)0x0000001F) +#define SQR2_SQ_Set ((uint32_t)0x0000001F) +#define SQR1_SQ_Set ((uint32_t)0x0000001F) + +/* SQR1 register Mask */ +#define SQR1_CLEAR_Mask ((uint32_t)0xFF0FFFFF) + +/* ADC JSQx mask */ +#define JSQR_JSQ_Set ((uint32_t)0x0000001F) + +/* ADC JL mask */ +#define JSQR_JL_Set ((uint32_t)0x00300000) +#define JSQR_JL_Reset ((uint32_t)0xFFCFFFFF) + +/* ADC SMPx mask */ +#define SMPR1_SMP_Set ((uint32_t)0x00000007) +#define SMPR2_SMP_Set ((uint32_t)0x00000007) + +/* ADC JDRx registers offset */ +#define JDR_Offset ((uint8_t)0x28) + +/* ADC1 DR register base address */ +#define DR_ADDRESS ((uint32_t)0x4001244C) + +/** + * @} + */ + +/** @defgroup ADC_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup ADC_Private_Variables + * @{ + */ + +/** + * @} + */ + +/** @defgroup ADC_Private_FunctionPrototypes + * @{ + */ + +/** + * @} + */ + +/** @defgroup ADC_Private_Functions + * @{ + */ + +/** + * @brief Deinitializes the ADCx peripheral registers to their default reset values. + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @retval None + */ +void ADC_DeInit(ADC_TypeDef* ADCx) +{ + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + + if (ADCx == ADC1) + { + /* Enable ADC1 reset state */ + RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1, ENABLE); + /* Release ADC1 from reset state */ + RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1, DISABLE); + } + else if (ADCx == ADC2) + { + /* Enable ADC2 reset state */ + RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC2, ENABLE); + /* Release ADC2 from reset state */ + RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC2, DISABLE); + } + else + { + if (ADCx == ADC3) + { + /* Enable ADC3 reset state */ + RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC3, ENABLE); + /* Release ADC3 from reset state */ + RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC3, DISABLE); + } + } +} + +/** + * @brief Initializes the ADCx peripheral according to the specified parameters + * in the ADC_InitStruct. + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param ADC_InitStruct: pointer to an ADC_InitTypeDef structure that contains + * the configuration information for the specified ADC peripheral. + * @retval None + */ +void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct) +{ + uint32_t tmpreg1 = 0; + uint8_t tmpreg2 = 0; + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_ADC_MODE(ADC_InitStruct->ADC_Mode)); + assert_param(IS_FUNCTIONAL_STATE(ADC_InitStruct->ADC_ScanConvMode)); + assert_param(IS_FUNCTIONAL_STATE(ADC_InitStruct->ADC_ContinuousConvMode)); + assert_param(IS_ADC_EXT_TRIG(ADC_InitStruct->ADC_ExternalTrigConv)); + assert_param(IS_ADC_DATA_ALIGN(ADC_InitStruct->ADC_DataAlign)); + assert_param(IS_ADC_REGULAR_LENGTH(ADC_InitStruct->ADC_NbrOfChannel)); + + /*---------------------------- ADCx CR1 Configuration -----------------*/ + /* Get the ADCx CR1 value */ + tmpreg1 = ADCx->CR1; + /* Clear DUALMOD and SCAN bits */ + tmpreg1 &= CR1_CLEAR_Mask; + /* Configure ADCx: Dual mode and scan conversion mode */ + /* Set DUALMOD bits according to ADC_Mode value */ + /* Set SCAN bit according to ADC_ScanConvMode value */ + tmpreg1 |= (uint32_t)(ADC_InitStruct->ADC_Mode | ((uint32_t)ADC_InitStruct->ADC_ScanConvMode << 8)); + /* Write to ADCx CR1 */ + ADCx->CR1 = tmpreg1; + + /*---------------------------- ADCx CR2 Configuration -----------------*/ + /* Get the ADCx CR2 value */ + tmpreg1 = ADCx->CR2; + /* Clear CONT, ALIGN and EXTSEL bits */ + tmpreg1 &= CR2_CLEAR_Mask; + /* Configure ADCx: external trigger event and continuous conversion mode */ + /* Set ALIGN bit according to ADC_DataAlign value */ + /* Set EXTSEL bits according to ADC_ExternalTrigConv value */ + /* Set CONT bit according to ADC_ContinuousConvMode value */ + tmpreg1 |= (uint32_t)(ADC_InitStruct->ADC_DataAlign | ADC_InitStruct->ADC_ExternalTrigConv | + ((uint32_t)ADC_InitStruct->ADC_ContinuousConvMode << 1)); + /* Write to ADCx CR2 */ + ADCx->CR2 = tmpreg1; + + /*---------------------------- ADCx SQR1 Configuration -----------------*/ + /* Get the ADCx SQR1 value */ + tmpreg1 = ADCx->SQR1; + /* Clear L bits */ + tmpreg1 &= SQR1_CLEAR_Mask; + /* Configure ADCx: regular channel sequence length */ + /* Set L bits according to ADC_NbrOfChannel value */ + tmpreg2 |= (uint8_t) (ADC_InitStruct->ADC_NbrOfChannel - (uint8_t)1); + tmpreg1 |= (uint32_t)tmpreg2 << 20; + /* Write to ADCx SQR1 */ + ADCx->SQR1 = tmpreg1; +} + +/** + * @brief Fills each ADC_InitStruct member with its default value. + * @param ADC_InitStruct : pointer to an ADC_InitTypeDef structure which will be initialized. + * @retval None + */ +void ADC_StructInit(ADC_InitTypeDef* ADC_InitStruct) +{ + /* Reset ADC init structure parameters values */ + /* Initialize the ADC_Mode member */ + ADC_InitStruct->ADC_Mode = ADC_Mode_Independent; + /* initialize the ADC_ScanConvMode member */ + ADC_InitStruct->ADC_ScanConvMode = DISABLE; + /* Initialize the ADC_ContinuousConvMode member */ + ADC_InitStruct->ADC_ContinuousConvMode = DISABLE; + /* Initialize the ADC_ExternalTrigConv member */ + ADC_InitStruct->ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1; + /* Initialize the ADC_DataAlign member */ + ADC_InitStruct->ADC_DataAlign = ADC_DataAlign_Right; + /* Initialize the ADC_NbrOfChannel member */ + ADC_InitStruct->ADC_NbrOfChannel = 1; +} + +/** + * @brief Enables or disables the specified ADC peripheral. + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param NewState: new state of the ADCx peripheral. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void ADC_Cmd(ADC_TypeDef* ADCx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Set the ADON bit to wake up the ADC from power down mode */ + ADCx->CR2 |= CR2_ADON_Set; + } + else + { + /* Disable the selected ADC peripheral */ + ADCx->CR2 &= CR2_ADON_Reset; + } +} + +/** + * @brief Enables or disables the specified ADC DMA request. + * @param ADCx: where x can be 1 or 3 to select the ADC peripheral. + * Note: ADC2 hasn't a DMA capability. + * @param NewState: new state of the selected ADC DMA transfer. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void ADC_DMACmd(ADC_TypeDef* ADCx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_ADC_DMA_PERIPH(ADCx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the selected ADC DMA request */ + ADCx->CR2 |= CR2_DMA_Set; + } + else + { + /* Disable the selected ADC DMA request */ + ADCx->CR2 &= CR2_DMA_Reset; + } +} + +/** + * @brief Enables or disables the specified ADC interrupts. + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param ADC_IT: specifies the ADC interrupt sources to be enabled or disabled. + * This parameter can be any combination of the following values: + * @arg ADC_IT_EOC: End of conversion interrupt mask + * @arg ADC_IT_AWD: Analog watchdog interrupt mask + * @arg ADC_IT_JEOC: End of injected conversion interrupt mask + * @param NewState: new state of the specified ADC interrupts. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void ADC_ITConfig(ADC_TypeDef* ADCx, uint16_t ADC_IT, FunctionalState NewState) +{ + uint8_t itmask = 0; + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + assert_param(IS_ADC_IT(ADC_IT)); + /* Get the ADC IT index */ + itmask = (uint8_t)ADC_IT; + if (NewState != DISABLE) + { + /* Enable the selected ADC interrupts */ + ADCx->CR1 |= itmask; + } + else + { + /* Disable the selected ADC interrupts */ + ADCx->CR1 &= (~(uint32_t)itmask); + } +} + +/** + * @brief Resets the selected ADC calibration registers. + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @retval None + */ +void ADC_ResetCalibration(ADC_TypeDef* ADCx) +{ + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + /* Resets the selected ADC calibration registers */ + ADCx->CR2 |= CR2_RSTCAL_Set; +} + +/** + * @brief Gets the selected ADC reset calibration registers status. + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @retval The new state of ADC reset calibration registers (SET or RESET). + */ +FlagStatus ADC_GetResetCalibrationStatus(ADC_TypeDef* ADCx) +{ + FlagStatus bitstatus = RESET; + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + /* Check the status of RSTCAL bit */ + if ((ADCx->CR2 & CR2_RSTCAL_Set) != (uint32_t)RESET) + { + /* RSTCAL bit is set */ + bitstatus = SET; + } + else + { + /* RSTCAL bit is reset */ + bitstatus = RESET; + } + /* Return the RSTCAL bit status */ + return bitstatus; +} + +/** + * @brief Starts the selected ADC calibration process. + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @retval None + */ +void ADC_StartCalibration(ADC_TypeDef* ADCx) +{ + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + /* Enable the selected ADC calibration process */ + ADCx->CR2 |= CR2_CAL_Set; +} + +/** + * @brief Gets the selected ADC calibration status. + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @retval The new state of ADC calibration (SET or RESET). + */ +FlagStatus ADC_GetCalibrationStatus(ADC_TypeDef* ADCx) +{ + FlagStatus bitstatus = RESET; + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + /* Check the status of CAL bit */ + if ((ADCx->CR2 & CR2_CAL_Set) != (uint32_t)RESET) + { + /* CAL bit is set: calibration on going */ + bitstatus = SET; + } + else + { + /* CAL bit is reset: end of calibration */ + bitstatus = RESET; + } + /* Return the CAL bit status */ + return bitstatus; +} + +/** + * @brief Enables or disables the selected ADC software start conversion . + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param NewState: new state of the selected ADC software start conversion. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void ADC_SoftwareStartConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the selected ADC conversion on external event and start the selected + ADC conversion */ + ADCx->CR2 |= CR2_EXTTRIG_SWSTART_Set; + } + else + { + /* Disable the selected ADC conversion on external event and stop the selected + ADC conversion */ + ADCx->CR2 &= CR2_EXTTRIG_SWSTART_Reset; + } +} + +/** + * @brief Gets the selected ADC Software start conversion Status. + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @retval The new state of ADC software start conversion (SET or RESET). + */ +FlagStatus ADC_GetSoftwareStartConvStatus(ADC_TypeDef* ADCx) +{ + FlagStatus bitstatus = RESET; + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + /* Check the status of SWSTART bit */ + if ((ADCx->CR2 & CR2_SWSTART_Set) != (uint32_t)RESET) + { + /* SWSTART bit is set */ + bitstatus = SET; + } + else + { + /* SWSTART bit is reset */ + bitstatus = RESET; + } + /* Return the SWSTART bit status */ + return bitstatus; +} + +/** + * @brief Configures the discontinuous mode for the selected ADC regular + * group channel. + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param Number: specifies the discontinuous mode regular channel + * count value. This number must be between 1 and 8. + * @retval None + */ +void ADC_DiscModeChannelCountConfig(ADC_TypeDef* ADCx, uint8_t Number) +{ + uint32_t tmpreg1 = 0; + uint32_t tmpreg2 = 0; + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_ADC_REGULAR_DISC_NUMBER(Number)); + /* Get the old register value */ + tmpreg1 = ADCx->CR1; + /* Clear the old discontinuous mode channel count */ + tmpreg1 &= CR1_DISCNUM_Reset; + /* Set the discontinuous mode channel count */ + tmpreg2 = Number - 1; + tmpreg1 |= tmpreg2 << 13; + /* Store the new register value */ + ADCx->CR1 = tmpreg1; +} + +/** + * @brief Enables or disables the discontinuous mode on regular group + * channel for the specified ADC + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param NewState: new state of the selected ADC discontinuous mode + * on regular group channel. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void ADC_DiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the selected ADC regular discontinuous mode */ + ADCx->CR1 |= CR1_DISCEN_Set; + } + else + { + /* Disable the selected ADC regular discontinuous mode */ + ADCx->CR1 &= CR1_DISCEN_Reset; + } +} + +/** + * @brief Configures for the selected ADC regular channel its corresponding + * rank in the sequencer and its sample time. + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param ADC_Channel: the ADC channel to configure. + * This parameter can be one of the following values: + * @arg ADC_Channel_0: ADC Channel0 selected + * @arg ADC_Channel_1: ADC Channel1 selected + * @arg ADC_Channel_2: ADC Channel2 selected + * @arg ADC_Channel_3: ADC Channel3 selected + * @arg ADC_Channel_4: ADC Channel4 selected + * @arg ADC_Channel_5: ADC Channel5 selected + * @arg ADC_Channel_6: ADC Channel6 selected + * @arg ADC_Channel_7: ADC Channel7 selected + * @arg ADC_Channel_8: ADC Channel8 selected + * @arg ADC_Channel_9: ADC Channel9 selected + * @arg ADC_Channel_10: ADC Channel10 selected + * @arg ADC_Channel_11: ADC Channel11 selected + * @arg ADC_Channel_12: ADC Channel12 selected + * @arg ADC_Channel_13: ADC Channel13 selected + * @arg ADC_Channel_14: ADC Channel14 selected + * @arg ADC_Channel_15: ADC Channel15 selected + * @arg ADC_Channel_16: ADC Channel16 selected + * @arg ADC_Channel_17: ADC Channel17 selected + * @param Rank: The rank in the regular group sequencer. This parameter must be between 1 to 16. + * @param ADC_SampleTime: The sample time value to be set for the selected channel. + * This parameter can be one of the following values: + * @arg ADC_SampleTime_1Cycles5: Sample time equal to 1.5 cycles + * @arg ADC_SampleTime_7Cycles5: Sample time equal to 7.5 cycles + * @arg ADC_SampleTime_13Cycles5: Sample time equal to 13.5 cycles + * @arg ADC_SampleTime_28Cycles5: Sample time equal to 28.5 cycles + * @arg ADC_SampleTime_41Cycles5: Sample time equal to 41.5 cycles + * @arg ADC_SampleTime_55Cycles5: Sample time equal to 55.5 cycles + * @arg ADC_SampleTime_71Cycles5: Sample time equal to 71.5 cycles + * @arg ADC_SampleTime_239Cycles5: Sample time equal to 239.5 cycles + * @retval None + */ +void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime) +{ + uint32_t tmpreg1 = 0, tmpreg2 = 0; + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_ADC_CHANNEL(ADC_Channel)); + assert_param(IS_ADC_REGULAR_RANK(Rank)); + assert_param(IS_ADC_SAMPLE_TIME(ADC_SampleTime)); + /* if ADC_Channel_10 ... ADC_Channel_17 is selected */ + if (ADC_Channel > ADC_Channel_9) + { + /* Get the old register value */ + tmpreg1 = ADCx->SMPR1; + /* Calculate the mask to clear */ + tmpreg2 = SMPR1_SMP_Set << (3 * (ADC_Channel - 10)); + /* Clear the old channel sample time */ + tmpreg1 &= ~tmpreg2; + /* Calculate the mask to set */ + tmpreg2 = (uint32_t)ADC_SampleTime << (3 * (ADC_Channel - 10)); + /* Set the new channel sample time */ + tmpreg1 |= tmpreg2; + /* Store the new register value */ + ADCx->SMPR1 = tmpreg1; + } + else /* ADC_Channel include in ADC_Channel_[0..9] */ + { + /* Get the old register value */ + tmpreg1 = ADCx->SMPR2; + /* Calculate the mask to clear */ + tmpreg2 = SMPR2_SMP_Set << (3 * ADC_Channel); + /* Clear the old channel sample time */ + tmpreg1 &= ~tmpreg2; + /* Calculate the mask to set */ + tmpreg2 = (uint32_t)ADC_SampleTime << (3 * ADC_Channel); + /* Set the new channel sample time */ + tmpreg1 |= tmpreg2; + /* Store the new register value */ + ADCx->SMPR2 = tmpreg1; + } + /* For Rank 1 to 6 */ + if (Rank < 7) + { + /* Get the old register value */ + tmpreg1 = ADCx->SQR3; + /* Calculate the mask to clear */ + tmpreg2 = SQR3_SQ_Set << (5 * (Rank - 1)); + /* Clear the old SQx bits for the selected rank */ + tmpreg1 &= ~tmpreg2; + /* Calculate the mask to set */ + tmpreg2 = (uint32_t)ADC_Channel << (5 * (Rank - 1)); + /* Set the SQx bits for the selected rank */ + tmpreg1 |= tmpreg2; + /* Store the new register value */ + ADCx->SQR3 = tmpreg1; + } + /* For Rank 7 to 12 */ + else if (Rank < 13) + { + /* Get the old register value */ + tmpreg1 = ADCx->SQR2; + /* Calculate the mask to clear */ + tmpreg2 = SQR2_SQ_Set << (5 * (Rank - 7)); + /* Clear the old SQx bits for the selected rank */ + tmpreg1 &= ~tmpreg2; + /* Calculate the mask to set */ + tmpreg2 = (uint32_t)ADC_Channel << (5 * (Rank - 7)); + /* Set the SQx bits for the selected rank */ + tmpreg1 |= tmpreg2; + /* Store the new register value */ + ADCx->SQR2 = tmpreg1; + } + /* For Rank 13 to 16 */ + else + { + /* Get the old register value */ + tmpreg1 = ADCx->SQR1; + /* Calculate the mask to clear */ + tmpreg2 = SQR1_SQ_Set << (5 * (Rank - 13)); + /* Clear the old SQx bits for the selected rank */ + tmpreg1 &= ~tmpreg2; + /* Calculate the mask to set */ + tmpreg2 = (uint32_t)ADC_Channel << (5 * (Rank - 13)); + /* Set the SQx bits for the selected rank */ + tmpreg1 |= tmpreg2; + /* Store the new register value */ + ADCx->SQR1 = tmpreg1; + } +} + +/** + * @brief Enables or disables the ADCx conversion through external trigger. + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param NewState: new state of the selected ADC external trigger start of conversion. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void ADC_ExternalTrigConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the selected ADC conversion on external event */ + ADCx->CR2 |= CR2_EXTTRIG_Set; + } + else + { + /* Disable the selected ADC conversion on external event */ + ADCx->CR2 &= CR2_EXTTRIG_Reset; + } +} + +/** + * @brief Returns the last ADCx conversion result data for regular channel. + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @retval The Data conversion value. + */ +uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx) +{ + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + /* Return the selected ADC conversion value */ + return (uint16_t) ADCx->DR; +} + +/** + * @brief Returns the last ADC1 and ADC2 conversion result data in dual mode. + * @retval The Data conversion value. + */ +uint32_t ADC_GetDualModeConversionValue(void) +{ + /* Return the dual mode conversion value */ + return (*(__IO uint32_t *) DR_ADDRESS); +} + +/** + * @brief Enables or disables the selected ADC automatic injected group + * conversion after regular one. + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param NewState: new state of the selected ADC auto injected conversion + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void ADC_AutoInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the selected ADC automatic injected group conversion */ + ADCx->CR1 |= CR1_JAUTO_Set; + } + else + { + /* Disable the selected ADC automatic injected group conversion */ + ADCx->CR1 &= CR1_JAUTO_Reset; + } +} + +/** + * @brief Enables or disables the discontinuous mode for injected group + * channel for the specified ADC + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param NewState: new state of the selected ADC discontinuous mode + * on injected group channel. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void ADC_InjectedDiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the selected ADC injected discontinuous mode */ + ADCx->CR1 |= CR1_JDISCEN_Set; + } + else + { + /* Disable the selected ADC injected discontinuous mode */ + ADCx->CR1 &= CR1_JDISCEN_Reset; + } +} + +/** + * @brief Configures the ADCx external trigger for injected channels conversion. + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param ADC_ExternalTrigInjecConv: specifies the ADC trigger to start injected conversion. + * This parameter can be one of the following values: + * @arg ADC_ExternalTrigInjecConv_T1_TRGO: Timer1 TRGO event selected (for ADC1, ADC2 and ADC3) + * @arg ADC_ExternalTrigInjecConv_T1_CC4: Timer1 capture compare4 selected (for ADC1, ADC2 and ADC3) + * @arg ADC_ExternalTrigInjecConv_T2_TRGO: Timer2 TRGO event selected (for ADC1 and ADC2) + * @arg ADC_ExternalTrigInjecConv_T2_CC1: Timer2 capture compare1 selected (for ADC1 and ADC2) + * @arg ADC_ExternalTrigInjecConv_T3_CC4: Timer3 capture compare4 selected (for ADC1 and ADC2) + * @arg ADC_ExternalTrigInjecConv_T4_TRGO: Timer4 TRGO event selected (for ADC1 and ADC2) + * @arg ADC_ExternalTrigInjecConv_Ext_IT15_TIM8_CC4: External interrupt line 15 or Timer8 + * capture compare4 event selected (for ADC1 and ADC2) + * @arg ADC_ExternalTrigInjecConv_T4_CC3: Timer4 capture compare3 selected (for ADC3 only) + * @arg ADC_ExternalTrigInjecConv_T8_CC2: Timer8 capture compare2 selected (for ADC3 only) + * @arg ADC_ExternalTrigInjecConv_T8_CC4: Timer8 capture compare4 selected (for ADC3 only) + * @arg ADC_ExternalTrigInjecConv_T5_TRGO: Timer5 TRGO event selected (for ADC3 only) + * @arg ADC_ExternalTrigInjecConv_T5_CC4: Timer5 capture compare4 selected (for ADC3 only) + * @arg ADC_ExternalTrigInjecConv_None: Injected conversion started by software and not + * by external trigger (for ADC1, ADC2 and ADC3) + * @retval None + */ +void ADC_ExternalTrigInjectedConvConfig(ADC_TypeDef* ADCx, uint32_t ADC_ExternalTrigInjecConv) +{ + uint32_t tmpreg = 0; + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_ADC_EXT_INJEC_TRIG(ADC_ExternalTrigInjecConv)); + /* Get the old register value */ + tmpreg = ADCx->CR2; + /* Clear the old external event selection for injected group */ + tmpreg &= CR2_JEXTSEL_Reset; + /* Set the external event selection for injected group */ + tmpreg |= ADC_ExternalTrigInjecConv; + /* Store the new register value */ + ADCx->CR2 = tmpreg; +} + +/** + * @brief Enables or disables the ADCx injected channels conversion through + * external trigger + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param NewState: new state of the selected ADC external trigger start of + * injected conversion. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void ADC_ExternalTrigInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the selected ADC external event selection for injected group */ + ADCx->CR2 |= CR2_JEXTTRIG_Set; + } + else + { + /* Disable the selected ADC external event selection for injected group */ + ADCx->CR2 &= CR2_JEXTTRIG_Reset; + } +} + +/** + * @brief Enables or disables the selected ADC start of the injected + * channels conversion. + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param NewState: new state of the selected ADC software start injected conversion. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void ADC_SoftwareStartInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the selected ADC conversion for injected group on external event and start the selected + ADC injected conversion */ + ADCx->CR2 |= CR2_JEXTTRIG_JSWSTART_Set; + } + else + { + /* Disable the selected ADC conversion on external event for injected group and stop the selected + ADC injected conversion */ + ADCx->CR2 &= CR2_JEXTTRIG_JSWSTART_Reset; + } +} + +/** + * @brief Gets the selected ADC Software start injected conversion Status. + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @retval The new state of ADC software start injected conversion (SET or RESET). + */ +FlagStatus ADC_GetSoftwareStartInjectedConvCmdStatus(ADC_TypeDef* ADCx) +{ + FlagStatus bitstatus = RESET; + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + /* Check the status of JSWSTART bit */ + if ((ADCx->CR2 & CR2_JSWSTART_Set) != (uint32_t)RESET) + { + /* JSWSTART bit is set */ + bitstatus = SET; + } + else + { + /* JSWSTART bit is reset */ + bitstatus = RESET; + } + /* Return the JSWSTART bit status */ + return bitstatus; +} + +/** + * @brief Configures for the selected ADC injected channel its corresponding + * rank in the sequencer and its sample time. + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param ADC_Channel: the ADC channel to configure. + * This parameter can be one of the following values: + * @arg ADC_Channel_0: ADC Channel0 selected + * @arg ADC_Channel_1: ADC Channel1 selected + * @arg ADC_Channel_2: ADC Channel2 selected + * @arg ADC_Channel_3: ADC Channel3 selected + * @arg ADC_Channel_4: ADC Channel4 selected + * @arg ADC_Channel_5: ADC Channel5 selected + * @arg ADC_Channel_6: ADC Channel6 selected + * @arg ADC_Channel_7: ADC Channel7 selected + * @arg ADC_Channel_8: ADC Channel8 selected + * @arg ADC_Channel_9: ADC Channel9 selected + * @arg ADC_Channel_10: ADC Channel10 selected + * @arg ADC_Channel_11: ADC Channel11 selected + * @arg ADC_Channel_12: ADC Channel12 selected + * @arg ADC_Channel_13: ADC Channel13 selected + * @arg ADC_Channel_14: ADC Channel14 selected + * @arg ADC_Channel_15: ADC Channel15 selected + * @arg ADC_Channel_16: ADC Channel16 selected + * @arg ADC_Channel_17: ADC Channel17 selected + * @param Rank: The rank in the injected group sequencer. This parameter must be between 1 and 4. + * @param ADC_SampleTime: The sample time value to be set for the selected channel. + * This parameter can be one of the following values: + * @arg ADC_SampleTime_1Cycles5: Sample time equal to 1.5 cycles + * @arg ADC_SampleTime_7Cycles5: Sample time equal to 7.5 cycles + * @arg ADC_SampleTime_13Cycles5: Sample time equal to 13.5 cycles + * @arg ADC_SampleTime_28Cycles5: Sample time equal to 28.5 cycles + * @arg ADC_SampleTime_41Cycles5: Sample time equal to 41.5 cycles + * @arg ADC_SampleTime_55Cycles5: Sample time equal to 55.5 cycles + * @arg ADC_SampleTime_71Cycles5: Sample time equal to 71.5 cycles + * @arg ADC_SampleTime_239Cycles5: Sample time equal to 239.5 cycles + * @retval None + */ +void ADC_InjectedChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime) +{ + uint32_t tmpreg1 = 0, tmpreg2 = 0, tmpreg3 = 0; + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_ADC_CHANNEL(ADC_Channel)); + assert_param(IS_ADC_INJECTED_RANK(Rank)); + assert_param(IS_ADC_SAMPLE_TIME(ADC_SampleTime)); + /* if ADC_Channel_10 ... ADC_Channel_17 is selected */ + if (ADC_Channel > ADC_Channel_9) + { + /* Get the old register value */ + tmpreg1 = ADCx->SMPR1; + /* Calculate the mask to clear */ + tmpreg2 = SMPR1_SMP_Set << (3*(ADC_Channel - 10)); + /* Clear the old channel sample time */ + tmpreg1 &= ~tmpreg2; + /* Calculate the mask to set */ + tmpreg2 = (uint32_t)ADC_SampleTime << (3*(ADC_Channel - 10)); + /* Set the new channel sample time */ + tmpreg1 |= tmpreg2; + /* Store the new register value */ + ADCx->SMPR1 = tmpreg1; + } + else /* ADC_Channel include in ADC_Channel_[0..9] */ + { + /* Get the old register value */ + tmpreg1 = ADCx->SMPR2; + /* Calculate the mask to clear */ + tmpreg2 = SMPR2_SMP_Set << (3 * ADC_Channel); + /* Clear the old channel sample time */ + tmpreg1 &= ~tmpreg2; + /* Calculate the mask to set */ + tmpreg2 = (uint32_t)ADC_SampleTime << (3 * ADC_Channel); + /* Set the new channel sample time */ + tmpreg1 |= tmpreg2; + /* Store the new register value */ + ADCx->SMPR2 = tmpreg1; + } + /* Rank configuration */ + /* Get the old register value */ + tmpreg1 = ADCx->JSQR; + /* Get JL value: Number = JL+1 */ + tmpreg3 = (tmpreg1 & JSQR_JL_Set)>> 20; + /* Calculate the mask to clear: ((Rank-1)+(4-JL-1)) */ + tmpreg2 = JSQR_JSQ_Set << (5 * (uint8_t)((Rank + 3) - (tmpreg3 + 1))); + /* Clear the old JSQx bits for the selected rank */ + tmpreg1 &= ~tmpreg2; + /* Calculate the mask to set: ((Rank-1)+(4-JL-1)) */ + tmpreg2 = (uint32_t)ADC_Channel << (5 * (uint8_t)((Rank + 3) - (tmpreg3 + 1))); + /* Set the JSQx bits for the selected rank */ + tmpreg1 |= tmpreg2; + /* Store the new register value */ + ADCx->JSQR = tmpreg1; +} + +/** + * @brief Configures the sequencer length for injected channels + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param Length: The sequencer length. + * This parameter must be a number between 1 to 4. + * @retval None + */ +void ADC_InjectedSequencerLengthConfig(ADC_TypeDef* ADCx, uint8_t Length) +{ + uint32_t tmpreg1 = 0; + uint32_t tmpreg2 = 0; + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_ADC_INJECTED_LENGTH(Length)); + + /* Get the old register value */ + tmpreg1 = ADCx->JSQR; + /* Clear the old injected sequnence lenght JL bits */ + tmpreg1 &= JSQR_JL_Reset; + /* Set the injected sequnence lenght JL bits */ + tmpreg2 = Length - 1; + tmpreg1 |= tmpreg2 << 20; + /* Store the new register value */ + ADCx->JSQR = tmpreg1; +} + +/** + * @brief Set the injected channels conversion value offset + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param ADC_InjectedChannel: the ADC injected channel to set its offset. + * This parameter can be one of the following values: + * @arg ADC_InjectedChannel_1: Injected Channel1 selected + * @arg ADC_InjectedChannel_2: Injected Channel2 selected + * @arg ADC_InjectedChannel_3: Injected Channel3 selected + * @arg ADC_InjectedChannel_4: Injected Channel4 selected + * @param Offset: the offset value for the selected ADC injected channel + * This parameter must be a 12bit value. + * @retval None + */ +void ADC_SetInjectedOffset(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel, uint16_t Offset) +{ + __IO uint32_t tmp = 0; + + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_ADC_INJECTED_CHANNEL(ADC_InjectedChannel)); + assert_param(IS_ADC_OFFSET(Offset)); + + tmp = (uint32_t)ADCx; + tmp += ADC_InjectedChannel; + + /* Set the selected injected channel data offset */ + *(__IO uint32_t *) tmp = (uint32_t)Offset; +} + +/** + * @brief Returns the ADC injected channel conversion result + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param ADC_InjectedChannel: the converted ADC injected channel. + * This parameter can be one of the following values: + * @arg ADC_InjectedChannel_1: Injected Channel1 selected + * @arg ADC_InjectedChannel_2: Injected Channel2 selected + * @arg ADC_InjectedChannel_3: Injected Channel3 selected + * @arg ADC_InjectedChannel_4: Injected Channel4 selected + * @retval The Data conversion value. + */ +uint16_t ADC_GetInjectedConversionValue(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel) +{ + __IO uint32_t tmp = 0; + + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_ADC_INJECTED_CHANNEL(ADC_InjectedChannel)); + + tmp = (uint32_t)ADCx; + tmp += ADC_InjectedChannel + JDR_Offset; + + /* Returns the selected injected channel conversion data value */ + return (uint16_t) (*(__IO uint32_t*) tmp); +} + +/** + * @brief Enables or disables the analog watchdog on single/all regular + * or injected channels + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param ADC_AnalogWatchdog: the ADC analog watchdog configuration. + * This parameter can be one of the following values: + * @arg ADC_AnalogWatchdog_SingleRegEnable: Analog watchdog on a single regular channel + * @arg ADC_AnalogWatchdog_SingleInjecEnable: Analog watchdog on a single injected channel + * @arg ADC_AnalogWatchdog_SingleRegOrInjecEnable: Analog watchdog on a single regular or injected channel + * @arg ADC_AnalogWatchdog_AllRegEnable: Analog watchdog on all regular channel + * @arg ADC_AnalogWatchdog_AllInjecEnable: Analog watchdog on all injected channel + * @arg ADC_AnalogWatchdog_AllRegAllInjecEnable: Analog watchdog on all regular and injected channels + * @arg ADC_AnalogWatchdog_None: No channel guarded by the analog watchdog + * @retval None + */ +void ADC_AnalogWatchdogCmd(ADC_TypeDef* ADCx, uint32_t ADC_AnalogWatchdog) +{ + uint32_t tmpreg = 0; + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_ADC_ANALOG_WATCHDOG(ADC_AnalogWatchdog)); + /* Get the old register value */ + tmpreg = ADCx->CR1; + /* Clear AWDEN, AWDENJ and AWDSGL bits */ + tmpreg &= CR1_AWDMode_Reset; + /* Set the analog watchdog enable mode */ + tmpreg |= ADC_AnalogWatchdog; + /* Store the new register value */ + ADCx->CR1 = tmpreg; +} + +/** + * @brief Configures the high and low thresholds of the analog watchdog. + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param HighThreshold: the ADC analog watchdog High threshold value. + * This parameter must be a 12bit value. + * @param LowThreshold: the ADC analog watchdog Low threshold value. + * This parameter must be a 12bit value. + * @retval None + */ +void ADC_AnalogWatchdogThresholdsConfig(ADC_TypeDef* ADCx, uint16_t HighThreshold, + uint16_t LowThreshold) +{ + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_ADC_THRESHOLD(HighThreshold)); + assert_param(IS_ADC_THRESHOLD(LowThreshold)); + /* Set the ADCx high threshold */ + ADCx->HTR = HighThreshold; + /* Set the ADCx low threshold */ + ADCx->LTR = LowThreshold; +} + +/** + * @brief Configures the analog watchdog guarded single channel + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param ADC_Channel: the ADC channel to configure for the analog watchdog. + * This parameter can be one of the following values: + * @arg ADC_Channel_0: ADC Channel0 selected + * @arg ADC_Channel_1: ADC Channel1 selected + * @arg ADC_Channel_2: ADC Channel2 selected + * @arg ADC_Channel_3: ADC Channel3 selected + * @arg ADC_Channel_4: ADC Channel4 selected + * @arg ADC_Channel_5: ADC Channel5 selected + * @arg ADC_Channel_6: ADC Channel6 selected + * @arg ADC_Channel_7: ADC Channel7 selected + * @arg ADC_Channel_8: ADC Channel8 selected + * @arg ADC_Channel_9: ADC Channel9 selected + * @arg ADC_Channel_10: ADC Channel10 selected + * @arg ADC_Channel_11: ADC Channel11 selected + * @arg ADC_Channel_12: ADC Channel12 selected + * @arg ADC_Channel_13: ADC Channel13 selected + * @arg ADC_Channel_14: ADC Channel14 selected + * @arg ADC_Channel_15: ADC Channel15 selected + * @arg ADC_Channel_16: ADC Channel16 selected + * @arg ADC_Channel_17: ADC Channel17 selected + * @retval None + */ +void ADC_AnalogWatchdogSingleChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel) +{ + uint32_t tmpreg = 0; + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_ADC_CHANNEL(ADC_Channel)); + /* Get the old register value */ + tmpreg = ADCx->CR1; + /* Clear the Analog watchdog channel select bits */ + tmpreg &= CR1_AWDCH_Reset; + /* Set the Analog watchdog channel */ + tmpreg |= ADC_Channel; + /* Store the new register value */ + ADCx->CR1 = tmpreg; +} + +/** + * @brief Enables or disables the temperature sensor and Vrefint channel. + * @param NewState: new state of the temperature sensor. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void ADC_TempSensorVrefintCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the temperature sensor and Vrefint channel*/ + ADC1->CR2 |= CR2_TSVREFE_Set; + } + else + { + /* Disable the temperature sensor and Vrefint channel*/ + ADC1->CR2 &= CR2_TSVREFE_Reset; + } +} + +/** + * @brief Checks whether the specified ADC flag is set or not. + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param ADC_FLAG: specifies the flag to check. + * This parameter can be one of the following values: + * @arg ADC_FLAG_AWD: Analog watchdog flag + * @arg ADC_FLAG_EOC: End of conversion flag + * @arg ADC_FLAG_JEOC: End of injected group conversion flag + * @arg ADC_FLAG_JSTRT: Start of injected group conversion flag + * @arg ADC_FLAG_STRT: Start of regular group conversion flag + * @retval The new state of ADC_FLAG (SET or RESET). + */ +FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t ADC_FLAG) +{ + FlagStatus bitstatus = RESET; + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_ADC_GET_FLAG(ADC_FLAG)); + /* Check the status of the specified ADC flag */ + if ((ADCx->SR & ADC_FLAG) != (uint8_t)RESET) + { + /* ADC_FLAG is set */ + bitstatus = SET; + } + else + { + /* ADC_FLAG is reset */ + bitstatus = RESET; + } + /* Return the ADC_FLAG status */ + return bitstatus; +} + +/** + * @brief Clears the ADCx's pending flags. + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param ADC_FLAG: specifies the flag to clear. + * This parameter can be any combination of the following values: + * @arg ADC_FLAG_AWD: Analog watchdog flag + * @arg ADC_FLAG_EOC: End of conversion flag + * @arg ADC_FLAG_JEOC: End of injected group conversion flag + * @arg ADC_FLAG_JSTRT: Start of injected group conversion flag + * @arg ADC_FLAG_STRT: Start of regular group conversion flag + * @retval None + */ +void ADC_ClearFlag(ADC_TypeDef* ADCx, uint8_t ADC_FLAG) +{ + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_ADC_CLEAR_FLAG(ADC_FLAG)); + /* Clear the selected ADC flags */ + ADCx->SR = ~(uint32_t)ADC_FLAG; +} + +/** + * @brief Checks whether the specified ADC interrupt has occurred or not. + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param ADC_IT: specifies the ADC interrupt source to check. + * This parameter can be one of the following values: + * @arg ADC_IT_EOC: End of conversion interrupt mask + * @arg ADC_IT_AWD: Analog watchdog interrupt mask + * @arg ADC_IT_JEOC: End of injected conversion interrupt mask + * @retval The new state of ADC_IT (SET or RESET). + */ +ITStatus ADC_GetITStatus(ADC_TypeDef* ADCx, uint16_t ADC_IT) +{ + ITStatus bitstatus = RESET; + uint32_t itmask = 0, enablestatus = 0; + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_ADC_GET_IT(ADC_IT)); + /* Get the ADC IT index */ + itmask = ADC_IT >> 8; + /* Get the ADC_IT enable bit status */ + enablestatus = (ADCx->CR1 & (uint8_t)ADC_IT) ; + /* Check the status of the specified ADC interrupt */ + if (((ADCx->SR & itmask) != (uint32_t)RESET) && enablestatus) + { + /* ADC_IT is set */ + bitstatus = SET; + } + else + { + /* ADC_IT is reset */ + bitstatus = RESET; + } + /* Return the ADC_IT status */ + return bitstatus; +} + +/** + * @brief Clears the ADCx's interrupt pending bits. + * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. + * @param ADC_IT: specifies the ADC interrupt pending bit to clear. + * This parameter can be any combination of the following values: + * @arg ADC_IT_EOC: End of conversion interrupt mask + * @arg ADC_IT_AWD: Analog watchdog interrupt mask + * @arg ADC_IT_JEOC: End of injected conversion interrupt mask + * @retval None + */ +void ADC_ClearITPendingBit(ADC_TypeDef* ADCx, uint16_t ADC_IT) +{ + uint8_t itmask = 0; + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_ADC_IT(ADC_IT)); + /* Get the ADC IT index */ + itmask = (uint8_t)(ADC_IT >> 8); + /* Clear the selected ADC interrupt pending bits */ + ADCx->SR = ~(uint32_t)itmask; +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_bkp.c b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_bkp.c new file mode 100644 index 0000000..997eecc --- /dev/null +++ b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_bkp.c @@ -0,0 +1,308 @@ +/** + ****************************************************************************** + * @file stm32f10x_bkp.c + * @author MCD Application Team + * @version V3.5.0 + * @date 11-March-2011 + * @brief This file provides all the BKP firmware functions. + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

    © COPYRIGHT 2011 STMicroelectronics

    + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f10x_bkp.h" +#include "stm32f10x_rcc.h" + +/** @addtogroup STM32F10x_StdPeriph_Driver + * @{ + */ + +/** @defgroup BKP + * @brief BKP driver modules + * @{ + */ + +/** @defgroup BKP_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @defgroup BKP_Private_Defines + * @{ + */ + +/* ------------ BKP registers bit address in the alias region --------------- */ +#define BKP_OFFSET (BKP_BASE - PERIPH_BASE) + +/* --- CR Register ----*/ + +/* Alias word address of TPAL bit */ +#define CR_OFFSET (BKP_OFFSET + 0x30) +#define TPAL_BitNumber 0x01 +#define CR_TPAL_BB (PERIPH_BB_BASE + (CR_OFFSET * 32) + (TPAL_BitNumber * 4)) + +/* Alias word address of TPE bit */ +#define TPE_BitNumber 0x00 +#define CR_TPE_BB (PERIPH_BB_BASE + (CR_OFFSET * 32) + (TPE_BitNumber * 4)) + +/* --- CSR Register ---*/ + +/* Alias word address of TPIE bit */ +#define CSR_OFFSET (BKP_OFFSET + 0x34) +#define TPIE_BitNumber 0x02 +#define CSR_TPIE_BB (PERIPH_BB_BASE + (CSR_OFFSET * 32) + (TPIE_BitNumber * 4)) + +/* Alias word address of TIF bit */ +#define TIF_BitNumber 0x09 +#define CSR_TIF_BB (PERIPH_BB_BASE + (CSR_OFFSET * 32) + (TIF_BitNumber * 4)) + +/* Alias word address of TEF bit */ +#define TEF_BitNumber 0x08 +#define CSR_TEF_BB (PERIPH_BB_BASE + (CSR_OFFSET * 32) + (TEF_BitNumber * 4)) + +/* ---------------------- BKP registers bit mask ------------------------ */ + +/* RTCCR register bit mask */ +#define RTCCR_CAL_MASK ((uint16_t)0xFF80) +#define RTCCR_MASK ((uint16_t)0xFC7F) + +/** + * @} + */ + + +/** @defgroup BKP_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup BKP_Private_Variables + * @{ + */ + +/** + * @} + */ + +/** @defgroup BKP_Private_FunctionPrototypes + * @{ + */ + +/** + * @} + */ + +/** @defgroup BKP_Private_Functions + * @{ + */ + +/** + * @brief Deinitializes the BKP peripheral registers to their default reset values. + * @param None + * @retval None + */ +void BKP_DeInit(void) +{ + RCC_BackupResetCmd(ENABLE); + RCC_BackupResetCmd(DISABLE); +} + +/** + * @brief Configures the Tamper Pin active level. + * @param BKP_TamperPinLevel: specifies the Tamper Pin active level. + * This parameter can be one of the following values: + * @arg BKP_TamperPinLevel_High: Tamper pin active on high level + * @arg BKP_TamperPinLevel_Low: Tamper pin active on low level + * @retval None + */ +void BKP_TamperPinLevelConfig(uint16_t BKP_TamperPinLevel) +{ + /* Check the parameters */ + assert_param(IS_BKP_TAMPER_PIN_LEVEL(BKP_TamperPinLevel)); + *(__IO uint32_t *) CR_TPAL_BB = BKP_TamperPinLevel; +} + +/** + * @brief Enables or disables the Tamper Pin activation. + * @param NewState: new state of the Tamper Pin activation. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void BKP_TamperPinCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + *(__IO uint32_t *) CR_TPE_BB = (uint32_t)NewState; +} + +/** + * @brief Enables or disables the Tamper Pin Interrupt. + * @param NewState: new state of the Tamper Pin Interrupt. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void BKP_ITConfig(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + *(__IO uint32_t *) CSR_TPIE_BB = (uint32_t)NewState; +} + +/** + * @brief Select the RTC output source to output on the Tamper pin. + * @param BKP_RTCOutputSource: specifies the RTC output source. + * This parameter can be one of the following values: + * @arg BKP_RTCOutputSource_None: no RTC output on the Tamper pin. + * @arg BKP_RTCOutputSource_CalibClock: output the RTC clock with frequency + * divided by 64 on the Tamper pin. + * @arg BKP_RTCOutputSource_Alarm: output the RTC Alarm pulse signal on + * the Tamper pin. + * @arg BKP_RTCOutputSource_Second: output the RTC Second pulse signal on + * the Tamper pin. + * @retval None + */ +void BKP_RTCOutputConfig(uint16_t BKP_RTCOutputSource) +{ + uint16_t tmpreg = 0; + /* Check the parameters */ + assert_param(IS_BKP_RTC_OUTPUT_SOURCE(BKP_RTCOutputSource)); + tmpreg = BKP->RTCCR; + /* Clear CCO, ASOE and ASOS bits */ + tmpreg &= RTCCR_MASK; + + /* Set CCO, ASOE and ASOS bits according to BKP_RTCOutputSource value */ + tmpreg |= BKP_RTCOutputSource; + /* Store the new value */ + BKP->RTCCR = tmpreg; +} + +/** + * @brief Sets RTC Clock Calibration value. + * @param CalibrationValue: specifies the RTC Clock Calibration value. + * This parameter must be a number between 0 and 0x7F. + * @retval None + */ +void BKP_SetRTCCalibrationValue(uint8_t CalibrationValue) +{ + uint16_t tmpreg = 0; + /* Check the parameters */ + assert_param(IS_BKP_CALIBRATION_VALUE(CalibrationValue)); + tmpreg = BKP->RTCCR; + /* Clear CAL[6:0] bits */ + tmpreg &= RTCCR_CAL_MASK; + /* Set CAL[6:0] bits according to CalibrationValue value */ + tmpreg |= CalibrationValue; + /* Store the new value */ + BKP->RTCCR = tmpreg; +} + +/** + * @brief Writes user data to the specified Data Backup Register. + * @param BKP_DR: specifies the Data Backup Register. + * This parameter can be BKP_DRx where x:[1, 42] + * @param Data: data to write + * @retval None + */ +void BKP_WriteBackupRegister(uint16_t BKP_DR, uint16_t Data) +{ + __IO uint32_t tmp = 0; + + /* Check the parameters */ + assert_param(IS_BKP_DR(BKP_DR)); + + tmp = (uint32_t)BKP_BASE; + tmp += BKP_DR; + + *(__IO uint32_t *) tmp = Data; +} + +/** + * @brief Reads data from the specified Data Backup Register. + * @param BKP_DR: specifies the Data Backup Register. + * This parameter can be BKP_DRx where x:[1, 42] + * @retval The content of the specified Data Backup Register + */ +uint16_t BKP_ReadBackupRegister(uint16_t BKP_DR) +{ + __IO uint32_t tmp = 0; + + /* Check the parameters */ + assert_param(IS_BKP_DR(BKP_DR)); + + tmp = (uint32_t)BKP_BASE; + tmp += BKP_DR; + + return (*(__IO uint16_t *) tmp); +} + +/** + * @brief Checks whether the Tamper Pin Event flag is set or not. + * @param None + * @retval The new state of the Tamper Pin Event flag (SET or RESET). + */ +FlagStatus BKP_GetFlagStatus(void) +{ + return (FlagStatus)(*(__IO uint32_t *) CSR_TEF_BB); +} + +/** + * @brief Clears Tamper Pin Event pending flag. + * @param None + * @retval None + */ +void BKP_ClearFlag(void) +{ + /* Set CTE bit to clear Tamper Pin Event flag */ + BKP->CSR |= BKP_CSR_CTE; +} + +/** + * @brief Checks whether the Tamper Pin Interrupt has occurred or not. + * @param None + * @retval The new state of the Tamper Pin Interrupt (SET or RESET). + */ +ITStatus BKP_GetITStatus(void) +{ + return (ITStatus)(*(__IO uint32_t *) CSR_TIF_BB); +} + +/** + * @brief Clears Tamper Pin Interrupt pending bit. + * @param None + * @retval None + */ +void BKP_ClearITPendingBit(void) +{ + /* Set CTI bit to clear Tamper Pin Interrupt pending bit */ + BKP->CSR |= BKP_CSR_CTI; +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_can.c b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_can.c new file mode 100644 index 0000000..ec8e049 --- /dev/null +++ b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_can.c @@ -0,0 +1,1415 @@ +/** + ****************************************************************************** + * @file stm32f10x_can.c + * @author MCD Application Team + * @version V3.5.0 + * @date 11-March-2011 + * @brief This file provides all the CAN firmware functions. + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

    © COPYRIGHT 2011 STMicroelectronics

    + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f10x_can.h" +#include "stm32f10x_rcc.h" + +/** @addtogroup STM32F10x_StdPeriph_Driver + * @{ + */ + +/** @defgroup CAN + * @brief CAN driver modules + * @{ + */ + +/** @defgroup CAN_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @defgroup CAN_Private_Defines + * @{ + */ + +/* CAN Master Control Register bits */ + +#define MCR_DBF ((uint32_t)0x00010000) /* software master reset */ + +/* CAN Mailbox Transmit Request */ +#define TMIDxR_TXRQ ((uint32_t)0x00000001) /* Transmit mailbox request */ + +/* CAN Filter Master Register bits */ +#define FMR_FINIT ((uint32_t)0x00000001) /* Filter init mode */ + +/* Time out for INAK bit */ +#define INAK_TIMEOUT ((uint32_t)0x0000FFFF) +/* Time out for SLAK bit */ +#define SLAK_TIMEOUT ((uint32_t)0x0000FFFF) + + + +/* Flags in TSR register */ +#define CAN_FLAGS_TSR ((uint32_t)0x08000000) +/* Flags in RF1R register */ +#define CAN_FLAGS_RF1R ((uint32_t)0x04000000) +/* Flags in RF0R register */ +#define CAN_FLAGS_RF0R ((uint32_t)0x02000000) +/* Flags in MSR register */ +#define CAN_FLAGS_MSR ((uint32_t)0x01000000) +/* Flags in ESR register */ +#define CAN_FLAGS_ESR ((uint32_t)0x00F00000) + +/* Mailboxes definition */ +#define CAN_TXMAILBOX_0 ((uint8_t)0x00) +#define CAN_TXMAILBOX_1 ((uint8_t)0x01) +#define CAN_TXMAILBOX_2 ((uint8_t)0x02) + + + +#define CAN_MODE_MASK ((uint32_t) 0x00000003) +/** + * @} + */ + +/** @defgroup CAN_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup CAN_Private_Variables + * @{ + */ + +/** + * @} + */ + +/** @defgroup CAN_Private_FunctionPrototypes + * @{ + */ + +static ITStatus CheckITStatus(uint32_t CAN_Reg, uint32_t It_Bit); + +/** + * @} + */ + +/** @defgroup CAN_Private_Functions + * @{ + */ + +/** + * @brief Deinitializes the CAN peripheral registers to their default reset values. + * @param CANx: where x can be 1 or 2 to select the CAN peripheral. + * @retval None. + */ +void CAN_DeInit(CAN_TypeDef* CANx) +{ + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + + if (CANx == CAN1) + { + /* Enable CAN1 reset state */ + RCC_APB1PeriphResetCmd(RCC_APB1Periph_CAN1, ENABLE); + /* Release CAN1 from reset state */ + RCC_APB1PeriphResetCmd(RCC_APB1Periph_CAN1, DISABLE); + } + else + { + /* Enable CAN2 reset state */ + RCC_APB1PeriphResetCmd(RCC_APB1Periph_CAN2, ENABLE); + /* Release CAN2 from reset state */ + RCC_APB1PeriphResetCmd(RCC_APB1Periph_CAN2, DISABLE); + } +} + +/** + * @brief Initializes the CAN peripheral according to the specified + * parameters in the CAN_InitStruct. + * @param CANx: where x can be 1 or 2 to to select the CAN + * peripheral. + * @param CAN_InitStruct: pointer to a CAN_InitTypeDef structure that + * contains the configuration information for the + * CAN peripheral. + * @retval Constant indicates initialization succeed which will be + * CAN_InitStatus_Failed or CAN_InitStatus_Success. + */ +uint8_t CAN_Init(CAN_TypeDef* CANx, CAN_InitTypeDef* CAN_InitStruct) +{ + uint8_t InitStatus = CAN_InitStatus_Failed; + uint32_t wait_ack = 0x00000000; + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + assert_param(IS_FUNCTIONAL_STATE(CAN_InitStruct->CAN_TTCM)); + assert_param(IS_FUNCTIONAL_STATE(CAN_InitStruct->CAN_ABOM)); + assert_param(IS_FUNCTIONAL_STATE(CAN_InitStruct->CAN_AWUM)); + assert_param(IS_FUNCTIONAL_STATE(CAN_InitStruct->CAN_NART)); + assert_param(IS_FUNCTIONAL_STATE(CAN_InitStruct->CAN_RFLM)); + assert_param(IS_FUNCTIONAL_STATE(CAN_InitStruct->CAN_TXFP)); + assert_param(IS_CAN_MODE(CAN_InitStruct->CAN_Mode)); + assert_param(IS_CAN_SJW(CAN_InitStruct->CAN_SJW)); + assert_param(IS_CAN_BS1(CAN_InitStruct->CAN_BS1)); + assert_param(IS_CAN_BS2(CAN_InitStruct->CAN_BS2)); + assert_param(IS_CAN_PRESCALER(CAN_InitStruct->CAN_Prescaler)); + + /* Exit from sleep mode */ + CANx->MCR &= (~(uint32_t)CAN_MCR_SLEEP); + + /* Request initialisation */ + CANx->MCR |= CAN_MCR_INRQ ; + + /* Wait the acknowledge */ + while (((CANx->MSR & CAN_MSR_INAK) != CAN_MSR_INAK) && (wait_ack != INAK_TIMEOUT)) + { + wait_ack++; + } + + /* Check acknowledge */ + if ((CANx->MSR & CAN_MSR_INAK) != CAN_MSR_INAK) + { + InitStatus = CAN_InitStatus_Failed; + } + else + { + /* Set the time triggered communication mode */ + if (CAN_InitStruct->CAN_TTCM == ENABLE) + { + CANx->MCR |= CAN_MCR_TTCM; + } + else + { + CANx->MCR &= ~(uint32_t)CAN_MCR_TTCM; + } + + /* Set the automatic bus-off management */ + if (CAN_InitStruct->CAN_ABOM == ENABLE) + { + CANx->MCR |= CAN_MCR_ABOM; + } + else + { + CANx->MCR &= ~(uint32_t)CAN_MCR_ABOM; + } + + /* Set the automatic wake-up mode */ + if (CAN_InitStruct->CAN_AWUM == ENABLE) + { + CANx->MCR |= CAN_MCR_AWUM; + } + else + { + CANx->MCR &= ~(uint32_t)CAN_MCR_AWUM; + } + + /* Set the no automatic retransmission */ + if (CAN_InitStruct->CAN_NART == ENABLE) + { + CANx->MCR |= CAN_MCR_NART; + } + else + { + CANx->MCR &= ~(uint32_t)CAN_MCR_NART; + } + + /* Set the receive FIFO locked mode */ + if (CAN_InitStruct->CAN_RFLM == ENABLE) + { + CANx->MCR |= CAN_MCR_RFLM; + } + else + { + CANx->MCR &= ~(uint32_t)CAN_MCR_RFLM; + } + + /* Set the transmit FIFO priority */ + if (CAN_InitStruct->CAN_TXFP == ENABLE) + { + CANx->MCR |= CAN_MCR_TXFP; + } + else + { + CANx->MCR &= ~(uint32_t)CAN_MCR_TXFP; + } + + /* Set the bit timing register */ + CANx->BTR = (uint32_t)((uint32_t)CAN_InitStruct->CAN_Mode << 30) | \ + ((uint32_t)CAN_InitStruct->CAN_SJW << 24) | \ + ((uint32_t)CAN_InitStruct->CAN_BS1 << 16) | \ + ((uint32_t)CAN_InitStruct->CAN_BS2 << 20) | \ + ((uint32_t)CAN_InitStruct->CAN_Prescaler - 1); + + /* Request leave initialisation */ + CANx->MCR &= ~(uint32_t)CAN_MCR_INRQ; + + /* Wait the acknowledge */ + wait_ack = 0; + + while (((CANx->MSR & CAN_MSR_INAK) == CAN_MSR_INAK) && (wait_ack != INAK_TIMEOUT)) + { + wait_ack++; + } + + /* ...and check acknowledged */ + if ((CANx->MSR & CAN_MSR_INAK) == CAN_MSR_INAK) + { + InitStatus = CAN_InitStatus_Failed; + } + else + { + InitStatus = CAN_InitStatus_Success ; + } + } + + /* At this step, return the status of initialization */ + return InitStatus; +} + +/** + * @brief Initializes the CAN peripheral according to the specified + * parameters in the CAN_FilterInitStruct. + * @param CAN_FilterInitStruct: pointer to a CAN_FilterInitTypeDef + * structure that contains the configuration + * information. + * @retval None. + */ +void CAN_FilterInit(CAN_FilterInitTypeDef* CAN_FilterInitStruct) +{ + uint32_t filter_number_bit_pos = 0; + /* Check the parameters */ + assert_param(IS_CAN_FILTER_NUMBER(CAN_FilterInitStruct->CAN_FilterNumber)); + assert_param(IS_CAN_FILTER_MODE(CAN_FilterInitStruct->CAN_FilterMode)); + assert_param(IS_CAN_FILTER_SCALE(CAN_FilterInitStruct->CAN_FilterScale)); + assert_param(IS_CAN_FILTER_FIFO(CAN_FilterInitStruct->CAN_FilterFIFOAssignment)); + assert_param(IS_FUNCTIONAL_STATE(CAN_FilterInitStruct->CAN_FilterActivation)); + + filter_number_bit_pos = ((uint32_t)1) << CAN_FilterInitStruct->CAN_FilterNumber; + + /* Initialisation mode for the filter */ + CAN1->FMR |= FMR_FINIT; + + /* Filter Deactivation */ + CAN1->FA1R &= ~(uint32_t)filter_number_bit_pos; + + /* Filter Scale */ + if (CAN_FilterInitStruct->CAN_FilterScale == CAN_FilterScale_16bit) + { + /* 16-bit scale for the filter */ + CAN1->FS1R &= ~(uint32_t)filter_number_bit_pos; + + /* First 16-bit identifier and First 16-bit mask */ + /* Or First 16-bit identifier and Second 16-bit identifier */ + CAN1->sFilterRegister[CAN_FilterInitStruct->CAN_FilterNumber].FR1 = + ((0x0000FFFF & (uint32_t)CAN_FilterInitStruct->CAN_FilterMaskIdLow) << 16) | + (0x0000FFFF & (uint32_t)CAN_FilterInitStruct->CAN_FilterIdLow); + + /* Second 16-bit identifier and Second 16-bit mask */ + /* Or Third 16-bit identifier and Fourth 16-bit identifier */ + CAN1->sFilterRegister[CAN_FilterInitStruct->CAN_FilterNumber].FR2 = + ((0x0000FFFF & (uint32_t)CAN_FilterInitStruct->CAN_FilterMaskIdHigh) << 16) | + (0x0000FFFF & (uint32_t)CAN_FilterInitStruct->CAN_FilterIdHigh); + } + + if (CAN_FilterInitStruct->CAN_FilterScale == CAN_FilterScale_32bit) + { + /* 32-bit scale for the filter */ + CAN1->FS1R |= filter_number_bit_pos; + /* 32-bit identifier or First 32-bit identifier */ + CAN1->sFilterRegister[CAN_FilterInitStruct->CAN_FilterNumber].FR1 = + ((0x0000FFFF & (uint32_t)CAN_FilterInitStruct->CAN_FilterIdHigh) << 16) | + (0x0000FFFF & (uint32_t)CAN_FilterInitStruct->CAN_FilterIdLow); + /* 32-bit mask or Second 32-bit identifier */ + CAN1->sFilterRegister[CAN_FilterInitStruct->CAN_FilterNumber].FR2 = + ((0x0000FFFF & (uint32_t)CAN_FilterInitStruct->CAN_FilterMaskIdHigh) << 16) | + (0x0000FFFF & (uint32_t)CAN_FilterInitStruct->CAN_FilterMaskIdLow); + } + + /* Filter Mode */ + if (CAN_FilterInitStruct->CAN_FilterMode == CAN_FilterMode_IdMask) + { + /*Id/Mask mode for the filter*/ + CAN1->FM1R &= ~(uint32_t)filter_number_bit_pos; + } + else /* CAN_FilterInitStruct->CAN_FilterMode == CAN_FilterMode_IdList */ + { + /*Identifier list mode for the filter*/ + CAN1->FM1R |= (uint32_t)filter_number_bit_pos; + } + + /* Filter FIFO assignment */ + if (CAN_FilterInitStruct->CAN_FilterFIFOAssignment == CAN_Filter_FIFO0) + { + /* FIFO 0 assignation for the filter */ + CAN1->FFA1R &= ~(uint32_t)filter_number_bit_pos; + } + + if (CAN_FilterInitStruct->CAN_FilterFIFOAssignment == CAN_Filter_FIFO1) + { + /* FIFO 1 assignation for the filter */ + CAN1->FFA1R |= (uint32_t)filter_number_bit_pos; + } + + /* Filter activation */ + if (CAN_FilterInitStruct->CAN_FilterActivation == ENABLE) + { + CAN1->FA1R |= filter_number_bit_pos; + } + + /* Leave the initialisation mode for the filter */ + CAN1->FMR &= ~FMR_FINIT; +} + +/** + * @brief Fills each CAN_InitStruct member with its default value. + * @param CAN_InitStruct: pointer to a CAN_InitTypeDef structure which + * will be initialized. + * @retval None. + */ +void CAN_StructInit(CAN_InitTypeDef* CAN_InitStruct) +{ + /* Reset CAN init structure parameters values */ + + /* Initialize the time triggered communication mode */ + CAN_InitStruct->CAN_TTCM = DISABLE; + + /* Initialize the automatic bus-off management */ + CAN_InitStruct->CAN_ABOM = DISABLE; + + /* Initialize the automatic wake-up mode */ + CAN_InitStruct->CAN_AWUM = DISABLE; + + /* Initialize the no automatic retransmission */ + CAN_InitStruct->CAN_NART = DISABLE; + + /* Initialize the receive FIFO locked mode */ + CAN_InitStruct->CAN_RFLM = DISABLE; + + /* Initialize the transmit FIFO priority */ + CAN_InitStruct->CAN_TXFP = DISABLE; + + /* Initialize the CAN_Mode member */ + CAN_InitStruct->CAN_Mode = CAN_Mode_Normal; + + /* Initialize the CAN_SJW member */ + CAN_InitStruct->CAN_SJW = CAN_SJW_1tq; + + /* Initialize the CAN_BS1 member */ + CAN_InitStruct->CAN_BS1 = CAN_BS1_4tq; + + /* Initialize the CAN_BS2 member */ + CAN_InitStruct->CAN_BS2 = CAN_BS2_3tq; + + /* Initialize the CAN_Prescaler member */ + CAN_InitStruct->CAN_Prescaler = 1; +} + +/** + * @brief Select the start bank filter for slave CAN. + * @note This function applies only to STM32 Connectivity line devices. + * @param CAN_BankNumber: Select the start slave bank filter from 1..27. + * @retval None. + */ +void CAN_SlaveStartBank(uint8_t CAN_BankNumber) +{ + /* Check the parameters */ + assert_param(IS_CAN_BANKNUMBER(CAN_BankNumber)); + + /* Enter Initialisation mode for the filter */ + CAN1->FMR |= FMR_FINIT; + + /* Select the start slave bank */ + CAN1->FMR &= (uint32_t)0xFFFFC0F1 ; + CAN1->FMR |= (uint32_t)(CAN_BankNumber)<<8; + + /* Leave Initialisation mode for the filter */ + CAN1->FMR &= ~FMR_FINIT; +} + +/** + * @brief Enables or disables the DBG Freeze for CAN. + * @param CANx: where x can be 1 or 2 to to select the CAN peripheral. + * @param NewState: new state of the CAN peripheral. This parameter can + * be: ENABLE or DISABLE. + * @retval None. + */ +void CAN_DBGFreeze(CAN_TypeDef* CANx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable Debug Freeze */ + CANx->MCR |= MCR_DBF; + } + else + { + /* Disable Debug Freeze */ + CANx->MCR &= ~MCR_DBF; + } +} + + +/** + * @brief Enables or disabes the CAN Time TriggerOperation communication mode. + * @param CANx: where x can be 1 or 2 to to select the CAN peripheral. + * @param NewState : Mode new state , can be one of @ref FunctionalState. + * @note when enabled, Time stamp (TIME[15:0]) value is sent in the last + * two data bytes of the 8-byte message: TIME[7:0] in data byte 6 + * and TIME[15:8] in data byte 7 + * @note DLC must be programmed as 8 in order Time Stamp (2 bytes) to be + * sent over the CAN bus. + * @retval None + */ +void CAN_TTComModeCmd(CAN_TypeDef* CANx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the TTCM mode */ + CANx->MCR |= CAN_MCR_TTCM; + + /* Set TGT bits */ + CANx->sTxMailBox[0].TDTR |= ((uint32_t)CAN_TDT0R_TGT); + CANx->sTxMailBox[1].TDTR |= ((uint32_t)CAN_TDT1R_TGT); + CANx->sTxMailBox[2].TDTR |= ((uint32_t)CAN_TDT2R_TGT); + } + else + { + /* Disable the TTCM mode */ + CANx->MCR &= (uint32_t)(~(uint32_t)CAN_MCR_TTCM); + + /* Reset TGT bits */ + CANx->sTxMailBox[0].TDTR &= ((uint32_t)~CAN_TDT0R_TGT); + CANx->sTxMailBox[1].TDTR &= ((uint32_t)~CAN_TDT1R_TGT); + CANx->sTxMailBox[2].TDTR &= ((uint32_t)~CAN_TDT2R_TGT); + } +} +/** + * @brief Initiates the transmission of a message. + * @param CANx: where x can be 1 or 2 to to select the CAN peripheral. + * @param TxMessage: pointer to a structure which contains CAN Id, CAN + * DLC and CAN data. + * @retval The number of the mailbox that is used for transmission + * or CAN_TxStatus_NoMailBox if there is no empty mailbox. + */ +uint8_t CAN_Transmit(CAN_TypeDef* CANx, CanTxMsg* TxMessage) +{ + uint8_t transmit_mailbox = 0; + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + assert_param(IS_CAN_IDTYPE(TxMessage->IDE)); + assert_param(IS_CAN_RTR(TxMessage->RTR)); + assert_param(IS_CAN_DLC(TxMessage->DLC)); + + /* Select one empty transmit mailbox */ + if ((CANx->TSR&CAN_TSR_TME0) == CAN_TSR_TME0) + { + transmit_mailbox = 0; + } + else if ((CANx->TSR&CAN_TSR_TME1) == CAN_TSR_TME1) + { + transmit_mailbox = 1; + } + else if ((CANx->TSR&CAN_TSR_TME2) == CAN_TSR_TME2) + { + transmit_mailbox = 2; + } + else + { + transmit_mailbox = CAN_TxStatus_NoMailBox; + } + + if (transmit_mailbox != CAN_TxStatus_NoMailBox) + { + /* Set up the Id */ + CANx->sTxMailBox[transmit_mailbox].TIR &= TMIDxR_TXRQ; + if (TxMessage->IDE == CAN_Id_Standard) + { + assert_param(IS_CAN_STDID(TxMessage->StdId)); + CANx->sTxMailBox[transmit_mailbox].TIR |= ((TxMessage->StdId << 21) | \ + TxMessage->RTR); + } + else + { + assert_param(IS_CAN_EXTID(TxMessage->ExtId)); + CANx->sTxMailBox[transmit_mailbox].TIR |= ((TxMessage->ExtId << 3) | \ + TxMessage->IDE | \ + TxMessage->RTR); + } + + /* Set up the DLC */ + TxMessage->DLC &= (uint8_t)0x0000000F; + CANx->sTxMailBox[transmit_mailbox].TDTR &= (uint32_t)0xFFFFFFF0; + CANx->sTxMailBox[transmit_mailbox].TDTR |= TxMessage->DLC; + + /* Set up the data field */ + CANx->sTxMailBox[transmit_mailbox].TDLR = (((uint32_t)TxMessage->Data[3] << 24) | + ((uint32_t)TxMessage->Data[2] << 16) | + ((uint32_t)TxMessage->Data[1] << 8) | + ((uint32_t)TxMessage->Data[0])); + CANx->sTxMailBox[transmit_mailbox].TDHR = (((uint32_t)TxMessage->Data[7] << 24) | + ((uint32_t)TxMessage->Data[6] << 16) | + ((uint32_t)TxMessage->Data[5] << 8) | + ((uint32_t)TxMessage->Data[4])); + /* Request transmission */ + CANx->sTxMailBox[transmit_mailbox].TIR |= TMIDxR_TXRQ; + } + return transmit_mailbox; +} + +/** + * @brief Checks the transmission of a message. + * @param CANx: where x can be 1 or 2 to to select the + * CAN peripheral. + * @param TransmitMailbox: the number of the mailbox that is used for + * transmission. + * @retval CAN_TxStatus_Ok if the CAN driver transmits the message, CAN_TxStatus_Failed + * in an other case. + */ +uint8_t CAN_TransmitStatus(CAN_TypeDef* CANx, uint8_t TransmitMailbox) +{ + uint32_t state = 0; + + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + assert_param(IS_CAN_TRANSMITMAILBOX(TransmitMailbox)); + + switch (TransmitMailbox) + { + case (CAN_TXMAILBOX_0): + state = CANx->TSR & (CAN_TSR_RQCP0 | CAN_TSR_TXOK0 | CAN_TSR_TME0); + break; + case (CAN_TXMAILBOX_1): + state = CANx->TSR & (CAN_TSR_RQCP1 | CAN_TSR_TXOK1 | CAN_TSR_TME1); + break; + case (CAN_TXMAILBOX_2): + state = CANx->TSR & (CAN_TSR_RQCP2 | CAN_TSR_TXOK2 | CAN_TSR_TME2); + break; + default: + state = CAN_TxStatus_Failed; + break; + } + switch (state) + { + /* transmit pending */ + case (0x0): state = CAN_TxStatus_Pending; + break; + /* transmit failed */ + case (CAN_TSR_RQCP0 | CAN_TSR_TME0): state = CAN_TxStatus_Failed; + break; + case (CAN_TSR_RQCP1 | CAN_TSR_TME1): state = CAN_TxStatus_Failed; + break; + case (CAN_TSR_RQCP2 | CAN_TSR_TME2): state = CAN_TxStatus_Failed; + break; + /* transmit succeeded */ + case (CAN_TSR_RQCP0 | CAN_TSR_TXOK0 | CAN_TSR_TME0):state = CAN_TxStatus_Ok; + break; + case (CAN_TSR_RQCP1 | CAN_TSR_TXOK1 | CAN_TSR_TME1):state = CAN_TxStatus_Ok; + break; + case (CAN_TSR_RQCP2 | CAN_TSR_TXOK2 | CAN_TSR_TME2):state = CAN_TxStatus_Ok; + break; + default: state = CAN_TxStatus_Failed; + break; + } + return (uint8_t) state; +} + +/** + * @brief Cancels a transmit request. + * @param CANx: where x can be 1 or 2 to to select the CAN peripheral. + * @param Mailbox: Mailbox number. + * @retval None. + */ +void CAN_CancelTransmit(CAN_TypeDef* CANx, uint8_t Mailbox) +{ + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + assert_param(IS_CAN_TRANSMITMAILBOX(Mailbox)); + /* abort transmission */ + switch (Mailbox) + { + case (CAN_TXMAILBOX_0): CANx->TSR |= CAN_TSR_ABRQ0; + break; + case (CAN_TXMAILBOX_1): CANx->TSR |= CAN_TSR_ABRQ1; + break; + case (CAN_TXMAILBOX_2): CANx->TSR |= CAN_TSR_ABRQ2; + break; + default: + break; + } +} + + +/** + * @brief Receives a message. + * @param CANx: where x can be 1 or 2 to to select the CAN peripheral. + * @param FIFONumber: Receive FIFO number, CAN_FIFO0 or CAN_FIFO1. + * @param RxMessage: pointer to a structure receive message which contains + * CAN Id, CAN DLC, CAN datas and FMI number. + * @retval None. + */ +void CAN_Receive(CAN_TypeDef* CANx, uint8_t FIFONumber, CanRxMsg* RxMessage) +{ + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + assert_param(IS_CAN_FIFO(FIFONumber)); + /* Get the Id */ + RxMessage->IDE = (uint8_t)0x04 & CANx->sFIFOMailBox[FIFONumber].RIR; + if (RxMessage->IDE == CAN_Id_Standard) + { + RxMessage->StdId = (uint32_t)0x000007FF & (CANx->sFIFOMailBox[FIFONumber].RIR >> 21); + } + else + { + RxMessage->ExtId = (uint32_t)0x1FFFFFFF & (CANx->sFIFOMailBox[FIFONumber].RIR >> 3); + } + + RxMessage->RTR = (uint8_t)0x02 & CANx->sFIFOMailBox[FIFONumber].RIR; + /* Get the DLC */ + RxMessage->DLC = (uint8_t)0x0F & CANx->sFIFOMailBox[FIFONumber].RDTR; + /* Get the FMI */ + RxMessage->FMI = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDTR >> 8); + /* Get the data field */ + RxMessage->Data[0] = (uint8_t)0xFF & CANx->sFIFOMailBox[FIFONumber].RDLR; + RxMessage->Data[1] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDLR >> 8); + RxMessage->Data[2] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDLR >> 16); + RxMessage->Data[3] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDLR >> 24); + RxMessage->Data[4] = (uint8_t)0xFF & CANx->sFIFOMailBox[FIFONumber].RDHR; + RxMessage->Data[5] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDHR >> 8); + RxMessage->Data[6] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDHR >> 16); + RxMessage->Data[7] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDHR >> 24); + /* Release the FIFO */ + /* Release FIFO0 */ + if (FIFONumber == CAN_FIFO0) + { + CANx->RF0R |= CAN_RF0R_RFOM0; + } + /* Release FIFO1 */ + else /* FIFONumber == CAN_FIFO1 */ + { + CANx->RF1R |= CAN_RF1R_RFOM1; + } +} + +/** + * @brief Releases the specified FIFO. + * @param CANx: where x can be 1 or 2 to to select the CAN peripheral. + * @param FIFONumber: FIFO to release, CAN_FIFO0 or CAN_FIFO1. + * @retval None. + */ +void CAN_FIFORelease(CAN_TypeDef* CANx, uint8_t FIFONumber) +{ + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + assert_param(IS_CAN_FIFO(FIFONumber)); + /* Release FIFO0 */ + if (FIFONumber == CAN_FIFO0) + { + CANx->RF0R |= CAN_RF0R_RFOM0; + } + /* Release FIFO1 */ + else /* FIFONumber == CAN_FIFO1 */ + { + CANx->RF1R |= CAN_RF1R_RFOM1; + } +} + +/** + * @brief Returns the number of pending messages. + * @param CANx: where x can be 1 or 2 to to select the CAN peripheral. + * @param FIFONumber: Receive FIFO number, CAN_FIFO0 or CAN_FIFO1. + * @retval NbMessage : which is the number of pending message. + */ +uint8_t CAN_MessagePending(CAN_TypeDef* CANx, uint8_t FIFONumber) +{ + uint8_t message_pending=0; + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + assert_param(IS_CAN_FIFO(FIFONumber)); + if (FIFONumber == CAN_FIFO0) + { + message_pending = (uint8_t)(CANx->RF0R&(uint32_t)0x03); + } + else if (FIFONumber == CAN_FIFO1) + { + message_pending = (uint8_t)(CANx->RF1R&(uint32_t)0x03); + } + else + { + message_pending = 0; + } + return message_pending; +} + + +/** + * @brief Select the CAN Operation mode. + * @param CAN_OperatingMode : CAN Operating Mode. This parameter can be one + * of @ref CAN_OperatingMode_TypeDef enumeration. + * @retval status of the requested mode which can be + * - CAN_ModeStatus_Failed CAN failed entering the specific mode + * - CAN_ModeStatus_Success CAN Succeed entering the specific mode + + */ +uint8_t CAN_OperatingModeRequest(CAN_TypeDef* CANx, uint8_t CAN_OperatingMode) +{ + uint8_t status = CAN_ModeStatus_Failed; + + /* Timeout for INAK or also for SLAK bits*/ + uint32_t timeout = INAK_TIMEOUT; + + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + assert_param(IS_CAN_OPERATING_MODE(CAN_OperatingMode)); + + if (CAN_OperatingMode == CAN_OperatingMode_Initialization) + { + /* Request initialisation */ + CANx->MCR = (uint32_t)((CANx->MCR & (uint32_t)(~(uint32_t)CAN_MCR_SLEEP)) | CAN_MCR_INRQ); + + /* Wait the acknowledge */ + while (((CANx->MSR & CAN_MODE_MASK) != CAN_MSR_INAK) && (timeout != 0)) + { + timeout--; + } + if ((CANx->MSR & CAN_MODE_MASK) != CAN_MSR_INAK) + { + status = CAN_ModeStatus_Failed; + } + else + { + status = CAN_ModeStatus_Success; + } + } + else if (CAN_OperatingMode == CAN_OperatingMode_Normal) + { + /* Request leave initialisation and sleep mode and enter Normal mode */ + CANx->MCR &= (uint32_t)(~(CAN_MCR_SLEEP|CAN_MCR_INRQ)); + + /* Wait the acknowledge */ + while (((CANx->MSR & CAN_MODE_MASK) != 0) && (timeout!=0)) + { + timeout--; + } + if ((CANx->MSR & CAN_MODE_MASK) != 0) + { + status = CAN_ModeStatus_Failed; + } + else + { + status = CAN_ModeStatus_Success; + } + } + else if (CAN_OperatingMode == CAN_OperatingMode_Sleep) + { + /* Request Sleep mode */ + CANx->MCR = (uint32_t)((CANx->MCR & (uint32_t)(~(uint32_t)CAN_MCR_INRQ)) | CAN_MCR_SLEEP); + + /* Wait the acknowledge */ + while (((CANx->MSR & CAN_MODE_MASK) != CAN_MSR_SLAK) && (timeout!=0)) + { + timeout--; + } + if ((CANx->MSR & CAN_MODE_MASK) != CAN_MSR_SLAK) + { + status = CAN_ModeStatus_Failed; + } + else + { + status = CAN_ModeStatus_Success; + } + } + else + { + status = CAN_ModeStatus_Failed; + } + + return (uint8_t) status; +} + +/** + * @brief Enters the low power mode. + * @param CANx: where x can be 1 or 2 to to select the CAN peripheral. + * @retval status: CAN_Sleep_Ok if sleep entered, CAN_Sleep_Failed in an + * other case. + */ +uint8_t CAN_Sleep(CAN_TypeDef* CANx) +{ + uint8_t sleepstatus = CAN_Sleep_Failed; + + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + + /* Request Sleep mode */ + CANx->MCR = (((CANx->MCR) & (uint32_t)(~(uint32_t)CAN_MCR_INRQ)) | CAN_MCR_SLEEP); + + /* Sleep mode status */ + if ((CANx->MSR & (CAN_MSR_SLAK|CAN_MSR_INAK)) == CAN_MSR_SLAK) + { + /* Sleep mode not entered */ + sleepstatus = CAN_Sleep_Ok; + } + /* return sleep mode status */ + return (uint8_t)sleepstatus; +} + +/** + * @brief Wakes the CAN up. + * @param CANx: where x can be 1 or 2 to to select the CAN peripheral. + * @retval status: CAN_WakeUp_Ok if sleep mode left, CAN_WakeUp_Failed in an + * other case. + */ +uint8_t CAN_WakeUp(CAN_TypeDef* CANx) +{ + uint32_t wait_slak = SLAK_TIMEOUT; + uint8_t wakeupstatus = CAN_WakeUp_Failed; + + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + + /* Wake up request */ + CANx->MCR &= ~(uint32_t)CAN_MCR_SLEEP; + + /* Sleep mode status */ + while(((CANx->MSR & CAN_MSR_SLAK) == CAN_MSR_SLAK)&&(wait_slak!=0x00)) + { + wait_slak--; + } + if((CANx->MSR & CAN_MSR_SLAK) != CAN_MSR_SLAK) + { + /* wake up done : Sleep mode exited */ + wakeupstatus = CAN_WakeUp_Ok; + } + /* return wakeup status */ + return (uint8_t)wakeupstatus; +} + + +/** + * @brief Returns the CANx's last error code (LEC). + * @param CANx: where x can be 1 or 2 to to select the CAN peripheral. + * @retval CAN_ErrorCode: specifies the Error code : + * - CAN_ERRORCODE_NoErr No Error + * - CAN_ERRORCODE_StuffErr Stuff Error + * - CAN_ERRORCODE_FormErr Form Error + * - CAN_ERRORCODE_ACKErr Acknowledgment Error + * - CAN_ERRORCODE_BitRecessiveErr Bit Recessive Error + * - CAN_ERRORCODE_BitDominantErr Bit Dominant Error + * - CAN_ERRORCODE_CRCErr CRC Error + * - CAN_ERRORCODE_SoftwareSetErr Software Set Error + */ + +uint8_t CAN_GetLastErrorCode(CAN_TypeDef* CANx) +{ + uint8_t errorcode=0; + + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + + /* Get the error code*/ + errorcode = (((uint8_t)CANx->ESR) & (uint8_t)CAN_ESR_LEC); + + /* Return the error code*/ + return errorcode; +} +/** + * @brief Returns the CANx Receive Error Counter (REC). + * @note In case of an error during reception, this counter is incremented + * by 1 or by 8 depending on the error condition as defined by the CAN + * standard. After every successful reception, the counter is + * decremented by 1 or reset to 120 if its value was higher than 128. + * When the counter value exceeds 127, the CAN controller enters the + * error passive state. + * @param CANx: where x can be 1 or 2 to to select the CAN peripheral. + * @retval CAN Receive Error Counter. + */ +uint8_t CAN_GetReceiveErrorCounter(CAN_TypeDef* CANx) +{ + uint8_t counter=0; + + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + + /* Get the Receive Error Counter*/ + counter = (uint8_t)((CANx->ESR & CAN_ESR_REC)>> 24); + + /* Return the Receive Error Counter*/ + return counter; +} + + +/** + * @brief Returns the LSB of the 9-bit CANx Transmit Error Counter(TEC). + * @param CANx: where x can be 1 or 2 to to select the CAN peripheral. + * @retval LSB of the 9-bit CAN Transmit Error Counter. + */ +uint8_t CAN_GetLSBTransmitErrorCounter(CAN_TypeDef* CANx) +{ + uint8_t counter=0; + + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + + /* Get the LSB of the 9-bit CANx Transmit Error Counter(TEC) */ + counter = (uint8_t)((CANx->ESR & CAN_ESR_TEC)>> 16); + + /* Return the LSB of the 9-bit CANx Transmit Error Counter(TEC) */ + return counter; +} + + +/** + * @brief Enables or disables the specified CANx interrupts. + * @param CANx: where x can be 1 or 2 to to select the CAN peripheral. + * @param CAN_IT: specifies the CAN interrupt sources to be enabled or disabled. + * This parameter can be: + * - CAN_IT_TME, + * - CAN_IT_FMP0, + * - CAN_IT_FF0, + * - CAN_IT_FOV0, + * - CAN_IT_FMP1, + * - CAN_IT_FF1, + * - CAN_IT_FOV1, + * - CAN_IT_EWG, + * - CAN_IT_EPV, + * - CAN_IT_LEC, + * - CAN_IT_ERR, + * - CAN_IT_WKU or + * - CAN_IT_SLK. + * @param NewState: new state of the CAN interrupts. + * This parameter can be: ENABLE or DISABLE. + * @retval None. + */ +void CAN_ITConfig(CAN_TypeDef* CANx, uint32_t CAN_IT, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + assert_param(IS_CAN_IT(CAN_IT)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the selected CANx interrupt */ + CANx->IER |= CAN_IT; + } + else + { + /* Disable the selected CANx interrupt */ + CANx->IER &= ~CAN_IT; + } +} +/** + * @brief Checks whether the specified CAN flag is set or not. + * @param CANx: where x can be 1 or 2 to to select the CAN peripheral. + * @param CAN_FLAG: specifies the flag to check. + * This parameter can be one of the following flags: + * - CAN_FLAG_EWG + * - CAN_FLAG_EPV + * - CAN_FLAG_BOF + * - CAN_FLAG_RQCP0 + * - CAN_FLAG_RQCP1 + * - CAN_FLAG_RQCP2 + * - CAN_FLAG_FMP1 + * - CAN_FLAG_FF1 + * - CAN_FLAG_FOV1 + * - CAN_FLAG_FMP0 + * - CAN_FLAG_FF0 + * - CAN_FLAG_FOV0 + * - CAN_FLAG_WKU + * - CAN_FLAG_SLAK + * - CAN_FLAG_LEC + * @retval The new state of CAN_FLAG (SET or RESET). + */ +FlagStatus CAN_GetFlagStatus(CAN_TypeDef* CANx, uint32_t CAN_FLAG) +{ + FlagStatus bitstatus = RESET; + + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + assert_param(IS_CAN_GET_FLAG(CAN_FLAG)); + + + if((CAN_FLAG & CAN_FLAGS_ESR) != (uint32_t)RESET) + { + /* Check the status of the specified CAN flag */ + if ((CANx->ESR & (CAN_FLAG & 0x000FFFFF)) != (uint32_t)RESET) + { + /* CAN_FLAG is set */ + bitstatus = SET; + } + else + { + /* CAN_FLAG is reset */ + bitstatus = RESET; + } + } + else if((CAN_FLAG & CAN_FLAGS_MSR) != (uint32_t)RESET) + { + /* Check the status of the specified CAN flag */ + if ((CANx->MSR & (CAN_FLAG & 0x000FFFFF)) != (uint32_t)RESET) + { + /* CAN_FLAG is set */ + bitstatus = SET; + } + else + { + /* CAN_FLAG is reset */ + bitstatus = RESET; + } + } + else if((CAN_FLAG & CAN_FLAGS_TSR) != (uint32_t)RESET) + { + /* Check the status of the specified CAN flag */ + if ((CANx->TSR & (CAN_FLAG & 0x000FFFFF)) != (uint32_t)RESET) + { + /* CAN_FLAG is set */ + bitstatus = SET; + } + else + { + /* CAN_FLAG is reset */ + bitstatus = RESET; + } + } + else if((CAN_FLAG & CAN_FLAGS_RF0R) != (uint32_t)RESET) + { + /* Check the status of the specified CAN flag */ + if ((CANx->RF0R & (CAN_FLAG & 0x000FFFFF)) != (uint32_t)RESET) + { + /* CAN_FLAG is set */ + bitstatus = SET; + } + else + { + /* CAN_FLAG is reset */ + bitstatus = RESET; + } + } + else /* If(CAN_FLAG & CAN_FLAGS_RF1R != (uint32_t)RESET) */ + { + /* Check the status of the specified CAN flag */ + if ((uint32_t)(CANx->RF1R & (CAN_FLAG & 0x000FFFFF)) != (uint32_t)RESET) + { + /* CAN_FLAG is set */ + bitstatus = SET; + } + else + { + /* CAN_FLAG is reset */ + bitstatus = RESET; + } + } + /* Return the CAN_FLAG status */ + return bitstatus; +} + +/** + * @brief Clears the CAN's pending flags. + * @param CANx: where x can be 1 or 2 to to select the CAN peripheral. + * @param CAN_FLAG: specifies the flag to clear. + * This parameter can be one of the following flags: + * - CAN_FLAG_RQCP0 + * - CAN_FLAG_RQCP1 + * - CAN_FLAG_RQCP2 + * - CAN_FLAG_FF1 + * - CAN_FLAG_FOV1 + * - CAN_FLAG_FF0 + * - CAN_FLAG_FOV0 + * - CAN_FLAG_WKU + * - CAN_FLAG_SLAK + * - CAN_FLAG_LEC + * @retval None. + */ +void CAN_ClearFlag(CAN_TypeDef* CANx, uint32_t CAN_FLAG) +{ + uint32_t flagtmp=0; + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + assert_param(IS_CAN_CLEAR_FLAG(CAN_FLAG)); + + if (CAN_FLAG == CAN_FLAG_LEC) /* ESR register */ + { + /* Clear the selected CAN flags */ + CANx->ESR = (uint32_t)RESET; + } + else /* MSR or TSR or RF0R or RF1R */ + { + flagtmp = CAN_FLAG & 0x000FFFFF; + + if ((CAN_FLAG & CAN_FLAGS_RF0R)!=(uint32_t)RESET) + { + /* Receive Flags */ + CANx->RF0R = (uint32_t)(flagtmp); + } + else if ((CAN_FLAG & CAN_FLAGS_RF1R)!=(uint32_t)RESET) + { + /* Receive Flags */ + CANx->RF1R = (uint32_t)(flagtmp); + } + else if ((CAN_FLAG & CAN_FLAGS_TSR)!=(uint32_t)RESET) + { + /* Transmit Flags */ + CANx->TSR = (uint32_t)(flagtmp); + } + else /* If((CAN_FLAG & CAN_FLAGS_MSR)!=(uint32_t)RESET) */ + { + /* Operating mode Flags */ + CANx->MSR = (uint32_t)(flagtmp); + } + } +} + +/** + * @brief Checks whether the specified CANx interrupt has occurred or not. + * @param CANx: where x can be 1 or 2 to to select the CAN peripheral. + * @param CAN_IT: specifies the CAN interrupt source to check. + * This parameter can be one of the following flags: + * - CAN_IT_TME + * - CAN_IT_FMP0 + * - CAN_IT_FF0 + * - CAN_IT_FOV0 + * - CAN_IT_FMP1 + * - CAN_IT_FF1 + * - CAN_IT_FOV1 + * - CAN_IT_WKU + * - CAN_IT_SLK + * - CAN_IT_EWG + * - CAN_IT_EPV + * - CAN_IT_BOF + * - CAN_IT_LEC + * - CAN_IT_ERR + * @retval The current state of CAN_IT (SET or RESET). + */ +ITStatus CAN_GetITStatus(CAN_TypeDef* CANx, uint32_t CAN_IT) +{ + ITStatus itstatus = RESET; + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + assert_param(IS_CAN_IT(CAN_IT)); + + /* check the enable interrupt bit */ + if((CANx->IER & CAN_IT) != RESET) + { + /* in case the Interrupt is enabled, .... */ + switch (CAN_IT) + { + case CAN_IT_TME: + /* Check CAN_TSR_RQCPx bits */ + itstatus = CheckITStatus(CANx->TSR, CAN_TSR_RQCP0|CAN_TSR_RQCP1|CAN_TSR_RQCP2); + break; + case CAN_IT_FMP0: + /* Check CAN_RF0R_FMP0 bit */ + itstatus = CheckITStatus(CANx->RF0R, CAN_RF0R_FMP0); + break; + case CAN_IT_FF0: + /* Check CAN_RF0R_FULL0 bit */ + itstatus = CheckITStatus(CANx->RF0R, CAN_RF0R_FULL0); + break; + case CAN_IT_FOV0: + /* Check CAN_RF0R_FOVR0 bit */ + itstatus = CheckITStatus(CANx->RF0R, CAN_RF0R_FOVR0); + break; + case CAN_IT_FMP1: + /* Check CAN_RF1R_FMP1 bit */ + itstatus = CheckITStatus(CANx->RF1R, CAN_RF1R_FMP1); + break; + case CAN_IT_FF1: + /* Check CAN_RF1R_FULL1 bit */ + itstatus = CheckITStatus(CANx->RF1R, CAN_RF1R_FULL1); + break; + case CAN_IT_FOV1: + /* Check CAN_RF1R_FOVR1 bit */ + itstatus = CheckITStatus(CANx->RF1R, CAN_RF1R_FOVR1); + break; + case CAN_IT_WKU: + /* Check CAN_MSR_WKUI bit */ + itstatus = CheckITStatus(CANx->MSR, CAN_MSR_WKUI); + break; + case CAN_IT_SLK: + /* Check CAN_MSR_SLAKI bit */ + itstatus = CheckITStatus(CANx->MSR, CAN_MSR_SLAKI); + break; + case CAN_IT_EWG: + /* Check CAN_ESR_EWGF bit */ + itstatus = CheckITStatus(CANx->ESR, CAN_ESR_EWGF); + break; + case CAN_IT_EPV: + /* Check CAN_ESR_EPVF bit */ + itstatus = CheckITStatus(CANx->ESR, CAN_ESR_EPVF); + break; + case CAN_IT_BOF: + /* Check CAN_ESR_BOFF bit */ + itstatus = CheckITStatus(CANx->ESR, CAN_ESR_BOFF); + break; + case CAN_IT_LEC: + /* Check CAN_ESR_LEC bit */ + itstatus = CheckITStatus(CANx->ESR, CAN_ESR_LEC); + break; + case CAN_IT_ERR: + /* Check CAN_MSR_ERRI bit */ + itstatus = CheckITStatus(CANx->MSR, CAN_MSR_ERRI); + break; + default : + /* in case of error, return RESET */ + itstatus = RESET; + break; + } + } + else + { + /* in case the Interrupt is not enabled, return RESET */ + itstatus = RESET; + } + + /* Return the CAN_IT status */ + return itstatus; +} + +/** + * @brief Clears the CANx's interrupt pending bits. + * @param CANx: where x can be 1 or 2 to to select the CAN peripheral. + * @param CAN_IT: specifies the interrupt pending bit to clear. + * - CAN_IT_TME + * - CAN_IT_FF0 + * - CAN_IT_FOV0 + * - CAN_IT_FF1 + * - CAN_IT_FOV1 + * - CAN_IT_WKU + * - CAN_IT_SLK + * - CAN_IT_EWG + * - CAN_IT_EPV + * - CAN_IT_BOF + * - CAN_IT_LEC + * - CAN_IT_ERR + * @retval None. + */ +void CAN_ClearITPendingBit(CAN_TypeDef* CANx, uint32_t CAN_IT) +{ + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + assert_param(IS_CAN_CLEAR_IT(CAN_IT)); + + switch (CAN_IT) + { + case CAN_IT_TME: + /* Clear CAN_TSR_RQCPx (rc_w1)*/ + CANx->TSR = CAN_TSR_RQCP0|CAN_TSR_RQCP1|CAN_TSR_RQCP2; + break; + case CAN_IT_FF0: + /* Clear CAN_RF0R_FULL0 (rc_w1)*/ + CANx->RF0R = CAN_RF0R_FULL0; + break; + case CAN_IT_FOV0: + /* Clear CAN_RF0R_FOVR0 (rc_w1)*/ + CANx->RF0R = CAN_RF0R_FOVR0; + break; + case CAN_IT_FF1: + /* Clear CAN_RF1R_FULL1 (rc_w1)*/ + CANx->RF1R = CAN_RF1R_FULL1; + break; + case CAN_IT_FOV1: + /* Clear CAN_RF1R_FOVR1 (rc_w1)*/ + CANx->RF1R = CAN_RF1R_FOVR1; + break; + case CAN_IT_WKU: + /* Clear CAN_MSR_WKUI (rc_w1)*/ + CANx->MSR = CAN_MSR_WKUI; + break; + case CAN_IT_SLK: + /* Clear CAN_MSR_SLAKI (rc_w1)*/ + CANx->MSR = CAN_MSR_SLAKI; + break; + case CAN_IT_EWG: + /* Clear CAN_MSR_ERRI (rc_w1) */ + CANx->MSR = CAN_MSR_ERRI; + /* Note : the corresponding Flag is cleared by hardware depending + of the CAN Bus status*/ + break; + case CAN_IT_EPV: + /* Clear CAN_MSR_ERRI (rc_w1) */ + CANx->MSR = CAN_MSR_ERRI; + /* Note : the corresponding Flag is cleared by hardware depending + of the CAN Bus status*/ + break; + case CAN_IT_BOF: + /* Clear CAN_MSR_ERRI (rc_w1) */ + CANx->MSR = CAN_MSR_ERRI; + /* Note : the corresponding Flag is cleared by hardware depending + of the CAN Bus status*/ + break; + case CAN_IT_LEC: + /* Clear LEC bits */ + CANx->ESR = RESET; + /* Clear CAN_MSR_ERRI (rc_w1) */ + CANx->MSR = CAN_MSR_ERRI; + break; + case CAN_IT_ERR: + /*Clear LEC bits */ + CANx->ESR = RESET; + /* Clear CAN_MSR_ERRI (rc_w1) */ + CANx->MSR = CAN_MSR_ERRI; + /* Note : BOFF, EPVF and EWGF Flags are cleared by hardware depending + of the CAN Bus status*/ + break; + default : + break; + } +} + +/** + * @brief Checks whether the CAN interrupt has occurred or not. + * @param CAN_Reg: specifies the CAN interrupt register to check. + * @param It_Bit: specifies the interrupt source bit to check. + * @retval The new state of the CAN Interrupt (SET or RESET). + */ +static ITStatus CheckITStatus(uint32_t CAN_Reg, uint32_t It_Bit) +{ + ITStatus pendingbitstatus = RESET; + + if ((CAN_Reg & It_Bit) != (uint32_t)RESET) + { + /* CAN_IT is set */ + pendingbitstatus = SET; + } + else + { + /* CAN_IT is reset */ + pendingbitstatus = RESET; + } + return pendingbitstatus; +} + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_cec.c b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_cec.c new file mode 100644 index 0000000..4dc615f --- /dev/null +++ b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_cec.c @@ -0,0 +1,433 @@ +/** + ****************************************************************************** + * @file stm32f10x_cec.c + * @author MCD Application Team + * @version V3.5.0 + * @date 11-March-2011 + * @brief This file provides all the CEC firmware functions. + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

    © COPYRIGHT 2011 STMicroelectronics

    + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f10x_cec.h" +#include "stm32f10x_rcc.h" + +/** @addtogroup STM32F10x_StdPeriph_Driver + * @{ + */ + +/** @defgroup CEC + * @brief CEC driver modules + * @{ + */ + +/** @defgroup CEC_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + + +/** @defgroup CEC_Private_Defines + * @{ + */ + +/* ------------ CEC registers bit address in the alias region ----------- */ +#define CEC_OFFSET (CEC_BASE - PERIPH_BASE) + +/* --- CFGR Register ---*/ + +/* Alias word address of PE bit */ +#define CFGR_OFFSET (CEC_OFFSET + 0x00) +#define PE_BitNumber 0x00 +#define CFGR_PE_BB (PERIPH_BB_BASE + (CFGR_OFFSET * 32) + (PE_BitNumber * 4)) + +/* Alias word address of IE bit */ +#define IE_BitNumber 0x01 +#define CFGR_IE_BB (PERIPH_BB_BASE + (CFGR_OFFSET * 32) + (IE_BitNumber * 4)) + +/* --- CSR Register ---*/ + +/* Alias word address of TSOM bit */ +#define CSR_OFFSET (CEC_OFFSET + 0x10) +#define TSOM_BitNumber 0x00 +#define CSR_TSOM_BB (PERIPH_BB_BASE + (CSR_OFFSET * 32) + (TSOM_BitNumber * 4)) + +/* Alias word address of TEOM bit */ +#define TEOM_BitNumber 0x01 +#define CSR_TEOM_BB (PERIPH_BB_BASE + (CSR_OFFSET * 32) + (TEOM_BitNumber * 4)) + +#define CFGR_CLEAR_Mask (uint8_t)(0xF3) /* CFGR register Mask */ +#define FLAG_Mask ((uint32_t)0x00FFFFFF) /* CEC FLAG mask */ + +/** + * @} + */ + + +/** @defgroup CEC_Private_Macros + * @{ + */ + +/** + * @} + */ + + +/** @defgroup CEC_Private_Variables + * @{ + */ + +/** + * @} + */ + + +/** @defgroup CEC_Private_FunctionPrototypes + * @{ + */ + +/** + * @} + */ + + +/** @defgroup CEC_Private_Functions + * @{ + */ + +/** + * @brief Deinitializes the CEC peripheral registers to their default reset + * values. + * @param None + * @retval None + */ +void CEC_DeInit(void) +{ + /* Enable CEC reset state */ + RCC_APB1PeriphResetCmd(RCC_APB1Periph_CEC, ENABLE); + /* Release CEC from reset state */ + RCC_APB1PeriphResetCmd(RCC_APB1Periph_CEC, DISABLE); +} + + +/** + * @brief Initializes the CEC peripheral according to the specified + * parameters in the CEC_InitStruct. + * @param CEC_InitStruct: pointer to an CEC_InitTypeDef structure that + * contains the configuration information for the specified + * CEC peripheral. + * @retval None + */ +void CEC_Init(CEC_InitTypeDef* CEC_InitStruct) +{ + uint16_t tmpreg = 0; + + /* Check the parameters */ + assert_param(IS_CEC_BIT_TIMING_ERROR_MODE(CEC_InitStruct->CEC_BitTimingMode)); + assert_param(IS_CEC_BIT_PERIOD_ERROR_MODE(CEC_InitStruct->CEC_BitPeriodMode)); + + /*---------------------------- CEC CFGR Configuration -----------------*/ + /* Get the CEC CFGR value */ + tmpreg = CEC->CFGR; + + /* Clear BTEM and BPEM bits */ + tmpreg &= CFGR_CLEAR_Mask; + + /* Configure CEC: Bit Timing Error and Bit Period Error */ + tmpreg |= (uint16_t)(CEC_InitStruct->CEC_BitTimingMode | CEC_InitStruct->CEC_BitPeriodMode); + + /* Write to CEC CFGR register*/ + CEC->CFGR = tmpreg; + +} + +/** + * @brief Enables or disables the specified CEC peripheral. + * @param NewState: new state of the CEC peripheral. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void CEC_Cmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + *(__IO uint32_t *) CFGR_PE_BB = (uint32_t)NewState; + + if(NewState == DISABLE) + { + /* Wait until the PE bit is cleared by hardware (Idle Line detected) */ + while((CEC->CFGR & CEC_CFGR_PE) != (uint32_t)RESET) + { + } + } +} + +/** + * @brief Enables or disables the CEC interrupt. + * @param NewState: new state of the CEC interrupt. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void CEC_ITConfig(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + *(__IO uint32_t *) CFGR_IE_BB = (uint32_t)NewState; +} + +/** + * @brief Defines the Own Address of the CEC device. + * @param CEC_OwnAddress: The CEC own address + * @retval None + */ +void CEC_OwnAddressConfig(uint8_t CEC_OwnAddress) +{ + /* Check the parameters */ + assert_param(IS_CEC_ADDRESS(CEC_OwnAddress)); + + /* Set the CEC own address */ + CEC->OAR = CEC_OwnAddress; +} + +/** + * @brief Sets the CEC prescaler value. + * @param CEC_Prescaler: CEC prescaler new value + * @retval None + */ +void CEC_SetPrescaler(uint16_t CEC_Prescaler) +{ + /* Check the parameters */ + assert_param(IS_CEC_PRESCALER(CEC_Prescaler)); + + /* Set the Prescaler value*/ + CEC->PRES = CEC_Prescaler; +} + +/** + * @brief Transmits single data through the CEC peripheral. + * @param Data: the data to transmit. + * @retval None + */ +void CEC_SendDataByte(uint8_t Data) +{ + /* Transmit Data */ + CEC->TXD = Data ; +} + + +/** + * @brief Returns the most recent received data by the CEC peripheral. + * @param None + * @retval The received data. + */ +uint8_t CEC_ReceiveDataByte(void) +{ + /* Receive Data */ + return (uint8_t)(CEC->RXD); +} + +/** + * @brief Starts a new message. + * @param None + * @retval None + */ +void CEC_StartOfMessage(void) +{ + /* Starts of new message */ + *(__IO uint32_t *) CSR_TSOM_BB = (uint32_t)0x1; +} + +/** + * @brief Transmits message with or without an EOM bit. + * @param NewState: new state of the CEC Tx End Of Message. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void CEC_EndOfMessageCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + /* The data byte will be transmitted with or without an EOM bit*/ + *(__IO uint32_t *) CSR_TEOM_BB = (uint32_t)NewState; +} + +/** + * @brief Gets the CEC flag status + * @param CEC_FLAG: specifies the CEC flag to check. + * This parameter can be one of the following values: + * @arg CEC_FLAG_BTE: Bit Timing Error + * @arg CEC_FLAG_BPE: Bit Period Error + * @arg CEC_FLAG_RBTFE: Rx Block Transfer Finished Error + * @arg CEC_FLAG_SBE: Start Bit Error + * @arg CEC_FLAG_ACKE: Block Acknowledge Error + * @arg CEC_FLAG_LINE: Line Error + * @arg CEC_FLAG_TBTFE: Tx Block Transfer Finished Error + * @arg CEC_FLAG_TEOM: Tx End Of Message + * @arg CEC_FLAG_TERR: Tx Error + * @arg CEC_FLAG_TBTRF: Tx Byte Transfer Request or Block Transfer Finished + * @arg CEC_FLAG_RSOM: Rx Start Of Message + * @arg CEC_FLAG_REOM: Rx End Of Message + * @arg CEC_FLAG_RERR: Rx Error + * @arg CEC_FLAG_RBTF: Rx Byte/Block Transfer Finished + * @retval The new state of CEC_FLAG (SET or RESET) + */ +FlagStatus CEC_GetFlagStatus(uint32_t CEC_FLAG) +{ + FlagStatus bitstatus = RESET; + uint32_t cecreg = 0, cecbase = 0; + + /* Check the parameters */ + assert_param(IS_CEC_GET_FLAG(CEC_FLAG)); + + /* Get the CEC peripheral base address */ + cecbase = (uint32_t)(CEC_BASE); + + /* Read flag register index */ + cecreg = CEC_FLAG >> 28; + + /* Get bit[23:0] of the flag */ + CEC_FLAG &= FLAG_Mask; + + if(cecreg != 0) + { + /* Flag in CEC ESR Register */ + CEC_FLAG = (uint32_t)(CEC_FLAG >> 16); + + /* Get the CEC ESR register address */ + cecbase += 0xC; + } + else + { + /* Get the CEC CSR register address */ + cecbase += 0x10; + } + + if(((*(__IO uint32_t *)cecbase) & CEC_FLAG) != (uint32_t)RESET) + { + /* CEC_FLAG is set */ + bitstatus = SET; + } + else + { + /* CEC_FLAG is reset */ + bitstatus = RESET; + } + + /* Return the CEC_FLAG status */ + return bitstatus; +} + +/** + * @brief Clears the CEC's pending flags. + * @param CEC_FLAG: specifies the flag to clear. + * This parameter can be any combination of the following values: + * @arg CEC_FLAG_TERR: Tx Error + * @arg CEC_FLAG_TBTRF: Tx Byte Transfer Request or Block Transfer Finished + * @arg CEC_FLAG_RSOM: Rx Start Of Message + * @arg CEC_FLAG_REOM: Rx End Of Message + * @arg CEC_FLAG_RERR: Rx Error + * @arg CEC_FLAG_RBTF: Rx Byte/Block Transfer Finished + * @retval None + */ +void CEC_ClearFlag(uint32_t CEC_FLAG) +{ + uint32_t tmp = 0x0; + + /* Check the parameters */ + assert_param(IS_CEC_CLEAR_FLAG(CEC_FLAG)); + + tmp = CEC->CSR & 0x2; + + /* Clear the selected CEC flags */ + CEC->CSR &= (uint32_t)(((~(uint32_t)CEC_FLAG) & 0xFFFFFFFC) | tmp); +} + +/** + * @brief Checks whether the specified CEC interrupt has occurred or not. + * @param CEC_IT: specifies the CEC interrupt source to check. + * This parameter can be one of the following values: + * @arg CEC_IT_TERR: Tx Error + * @arg CEC_IT_TBTF: Tx Block Transfer Finished + * @arg CEC_IT_RERR: Rx Error + * @arg CEC_IT_RBTF: Rx Block Transfer Finished + * @retval The new state of CEC_IT (SET or RESET). + */ +ITStatus CEC_GetITStatus(uint8_t CEC_IT) +{ + ITStatus bitstatus = RESET; + uint32_t enablestatus = 0; + + /* Check the parameters */ + assert_param(IS_CEC_GET_IT(CEC_IT)); + + /* Get the CEC IT enable bit status */ + enablestatus = (CEC->CFGR & (uint8_t)CEC_CFGR_IE) ; + + /* Check the status of the specified CEC interrupt */ + if (((CEC->CSR & CEC_IT) != (uint32_t)RESET) && enablestatus) + { + /* CEC_IT is set */ + bitstatus = SET; + } + else + { + /* CEC_IT is reset */ + bitstatus = RESET; + } + /* Return the CEC_IT status */ + return bitstatus; +} + +/** + * @brief Clears the CEC's interrupt pending bits. + * @param CEC_IT: specifies the CEC interrupt pending bit to clear. + * This parameter can be any combination of the following values: + * @arg CEC_IT_TERR: Tx Error + * @arg CEC_IT_TBTF: Tx Block Transfer Finished + * @arg CEC_IT_RERR: Rx Error + * @arg CEC_IT_RBTF: Rx Block Transfer Finished + * @retval None + */ +void CEC_ClearITPendingBit(uint16_t CEC_IT) +{ + uint32_t tmp = 0x0; + + /* Check the parameters */ + assert_param(IS_CEC_GET_IT(CEC_IT)); + + tmp = CEC->CSR & 0x2; + + /* Clear the selected CEC interrupt pending bits */ + CEC->CSR &= (uint32_t)(((~(uint32_t)CEC_IT) & 0xFFFFFFFC) | tmp); +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_crc.c b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_crc.c new file mode 100644 index 0000000..6501728 --- /dev/null +++ b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_crc.c @@ -0,0 +1,160 @@ +/** + ****************************************************************************** + * @file stm32f10x_crc.c + * @author MCD Application Team + * @version V3.5.0 + * @date 11-March-2011 + * @brief This file provides all the CRC firmware functions. + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

    © COPYRIGHT 2011 STMicroelectronics

    + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f10x_crc.h" + +/** @addtogroup STM32F10x_StdPeriph_Driver + * @{ + */ + +/** @defgroup CRC + * @brief CRC driver modules + * @{ + */ + +/** @defgroup CRC_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @defgroup CRC_Private_Defines + * @{ + */ + +/** + * @} + */ + +/** @defgroup CRC_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup CRC_Private_Variables + * @{ + */ + +/** + * @} + */ + +/** @defgroup CRC_Private_FunctionPrototypes + * @{ + */ + +/** + * @} + */ + +/** @defgroup CRC_Private_Functions + * @{ + */ + +/** + * @brief Resets the CRC Data register (DR). + * @param None + * @retval None + */ +void CRC_ResetDR(void) +{ + /* Reset CRC generator */ + CRC->CR = CRC_CR_RESET; +} + +/** + * @brief Computes the 32-bit CRC of a given data word(32-bit). + * @param Data: data word(32-bit) to compute its CRC + * @retval 32-bit CRC + */ +uint32_t CRC_CalcCRC(uint32_t Data) +{ + CRC->DR = Data; + + return (CRC->DR); +} + +/** + * @brief Computes the 32-bit CRC of a given buffer of data word(32-bit). + * @param pBuffer: pointer to the buffer containing the data to be computed + * @param BufferLength: length of the buffer to be computed + * @retval 32-bit CRC + */ +uint32_t CRC_CalcBlockCRC(uint32_t pBuffer[], uint32_t BufferLength) +{ + uint32_t index = 0; + + for(index = 0; index < BufferLength; index++) + { + CRC->DR = pBuffer[index]; + } + return (CRC->DR); +} + +/** + * @brief Returns the current CRC value. + * @param None + * @retval 32-bit CRC + */ +uint32_t CRC_GetCRC(void) +{ + return (CRC->DR); +} + +/** + * @brief Stores a 8-bit data in the Independent Data(ID) register. + * @param IDValue: 8-bit value to be stored in the ID register + * @retval None + */ +void CRC_SetIDRegister(uint8_t IDValue) +{ + CRC->IDR = IDValue; +} + +/** + * @brief Returns the 8-bit data stored in the Independent Data(ID) register + * @param None + * @retval 8-bit value of the ID register + */ +uint8_t CRC_GetIDRegister(void) +{ + return (CRC->IDR); +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_dac.c b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_dac.c new file mode 100644 index 0000000..1cfc71d --- /dev/null +++ b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_dac.c @@ -0,0 +1,571 @@ +/** + ****************************************************************************** + * @file stm32f10x_dac.c + * @author MCD Application Team + * @version V3.5.0 + * @date 11-March-2011 + * @brief This file provides all the DAC firmware functions. + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

    © COPYRIGHT 2011 STMicroelectronics

    + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f10x_dac.h" +#include "stm32f10x_rcc.h" + +/** @addtogroup STM32F10x_StdPeriph_Driver + * @{ + */ + +/** @defgroup DAC + * @brief DAC driver modules + * @{ + */ + +/** @defgroup DAC_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @defgroup DAC_Private_Defines + * @{ + */ + +/* CR register Mask */ +#define CR_CLEAR_MASK ((uint32_t)0x00000FFE) + +/* DAC Dual Channels SWTRIG masks */ +#define DUAL_SWTRIG_SET ((uint32_t)0x00000003) +#define DUAL_SWTRIG_RESET ((uint32_t)0xFFFFFFFC) + +/* DHR registers offsets */ +#define DHR12R1_OFFSET ((uint32_t)0x00000008) +#define DHR12R2_OFFSET ((uint32_t)0x00000014) +#define DHR12RD_OFFSET ((uint32_t)0x00000020) + +/* DOR register offset */ +#define DOR_OFFSET ((uint32_t)0x0000002C) +/** + * @} + */ + +/** @defgroup DAC_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup DAC_Private_Variables + * @{ + */ + +/** + * @} + */ + +/** @defgroup DAC_Private_FunctionPrototypes + * @{ + */ + +/** + * @} + */ + +/** @defgroup DAC_Private_Functions + * @{ + */ + +/** + * @brief Deinitializes the DAC peripheral registers to their default reset values. + * @param None + * @retval None + */ +void DAC_DeInit(void) +{ + /* Enable DAC reset state */ + RCC_APB1PeriphResetCmd(RCC_APB1Periph_DAC, ENABLE); + /* Release DAC from reset state */ + RCC_APB1PeriphResetCmd(RCC_APB1Periph_DAC, DISABLE); +} + +/** + * @brief Initializes the DAC peripheral according to the specified + * parameters in the DAC_InitStruct. + * @param DAC_Channel: the selected DAC channel. + * This parameter can be one of the following values: + * @arg DAC_Channel_1: DAC Channel1 selected + * @arg DAC_Channel_2: DAC Channel2 selected + * @param DAC_InitStruct: pointer to a DAC_InitTypeDef structure that + * contains the configuration information for the specified DAC channel. + * @retval None + */ +void DAC_Init(uint32_t DAC_Channel, DAC_InitTypeDef* DAC_InitStruct) +{ + uint32_t tmpreg1 = 0, tmpreg2 = 0; + /* Check the DAC parameters */ + assert_param(IS_DAC_TRIGGER(DAC_InitStruct->DAC_Trigger)); + assert_param(IS_DAC_GENERATE_WAVE(DAC_InitStruct->DAC_WaveGeneration)); + assert_param(IS_DAC_LFSR_UNMASK_TRIANGLE_AMPLITUDE(DAC_InitStruct->DAC_LFSRUnmask_TriangleAmplitude)); + assert_param(IS_DAC_OUTPUT_BUFFER_STATE(DAC_InitStruct->DAC_OutputBuffer)); +/*---------------------------- DAC CR Configuration --------------------------*/ + /* Get the DAC CR value */ + tmpreg1 = DAC->CR; + /* Clear BOFFx, TENx, TSELx, WAVEx and MAMPx bits */ + tmpreg1 &= ~(CR_CLEAR_MASK << DAC_Channel); + /* Configure for the selected DAC channel: buffer output, trigger, wave generation, + mask/amplitude for wave generation */ + /* Set TSELx and TENx bits according to DAC_Trigger value */ + /* Set WAVEx bits according to DAC_WaveGeneration value */ + /* Set MAMPx bits according to DAC_LFSRUnmask_TriangleAmplitude value */ + /* Set BOFFx bit according to DAC_OutputBuffer value */ + tmpreg2 = (DAC_InitStruct->DAC_Trigger | DAC_InitStruct->DAC_WaveGeneration | + DAC_InitStruct->DAC_LFSRUnmask_TriangleAmplitude | DAC_InitStruct->DAC_OutputBuffer); + /* Calculate CR register value depending on DAC_Channel */ + tmpreg1 |= tmpreg2 << DAC_Channel; + /* Write to DAC CR */ + DAC->CR = tmpreg1; +} + +/** + * @brief Fills each DAC_InitStruct member with its default value. + * @param DAC_InitStruct : pointer to a DAC_InitTypeDef structure which will + * be initialized. + * @retval None + */ +void DAC_StructInit(DAC_InitTypeDef* DAC_InitStruct) +{ +/*--------------- Reset DAC init structure parameters values -----------------*/ + /* Initialize the DAC_Trigger member */ + DAC_InitStruct->DAC_Trigger = DAC_Trigger_None; + /* Initialize the DAC_WaveGeneration member */ + DAC_InitStruct->DAC_WaveGeneration = DAC_WaveGeneration_None; + /* Initialize the DAC_LFSRUnmask_TriangleAmplitude member */ + DAC_InitStruct->DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bit0; + /* Initialize the DAC_OutputBuffer member */ + DAC_InitStruct->DAC_OutputBuffer = DAC_OutputBuffer_Enable; +} + +/** + * @brief Enables or disables the specified DAC channel. + * @param DAC_Channel: the selected DAC channel. + * This parameter can be one of the following values: + * @arg DAC_Channel_1: DAC Channel1 selected + * @arg DAC_Channel_2: DAC Channel2 selected + * @param NewState: new state of the DAC channel. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void DAC_Cmd(uint32_t DAC_Channel, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_DAC_CHANNEL(DAC_Channel)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the selected DAC channel */ + DAC->CR |= (DAC_CR_EN1 << DAC_Channel); + } + else + { + /* Disable the selected DAC channel */ + DAC->CR &= ~(DAC_CR_EN1 << DAC_Channel); + } +} +#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL) +/** + * @brief Enables or disables the specified DAC interrupts. + * @param DAC_Channel: the selected DAC channel. + * This parameter can be one of the following values: + * @arg DAC_Channel_1: DAC Channel1 selected + * @arg DAC_Channel_2: DAC Channel2 selected + * @param DAC_IT: specifies the DAC interrupt sources to be enabled or disabled. + * This parameter can be the following values: + * @arg DAC_IT_DMAUDR: DMA underrun interrupt mask + * @param NewState: new state of the specified DAC interrupts. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void DAC_ITConfig(uint32_t DAC_Channel, uint32_t DAC_IT, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_DAC_CHANNEL(DAC_Channel)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + assert_param(IS_DAC_IT(DAC_IT)); + + if (NewState != DISABLE) + { + /* Enable the selected DAC interrupts */ + DAC->CR |= (DAC_IT << DAC_Channel); + } + else + { + /* Disable the selected DAC interrupts */ + DAC->CR &= (~(uint32_t)(DAC_IT << DAC_Channel)); + } +} +#endif + +/** + * @brief Enables or disables the specified DAC channel DMA request. + * @param DAC_Channel: the selected DAC channel. + * This parameter can be one of the following values: + * @arg DAC_Channel_1: DAC Channel1 selected + * @arg DAC_Channel_2: DAC Channel2 selected + * @param NewState: new state of the selected DAC channel DMA request. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void DAC_DMACmd(uint32_t DAC_Channel, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_DAC_CHANNEL(DAC_Channel)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the selected DAC channel DMA request */ + DAC->CR |= (DAC_CR_DMAEN1 << DAC_Channel); + } + else + { + /* Disable the selected DAC channel DMA request */ + DAC->CR &= ~(DAC_CR_DMAEN1 << DAC_Channel); + } +} + +/** + * @brief Enables or disables the selected DAC channel software trigger. + * @param DAC_Channel: the selected DAC channel. + * This parameter can be one of the following values: + * @arg DAC_Channel_1: DAC Channel1 selected + * @arg DAC_Channel_2: DAC Channel2 selected + * @param NewState: new state of the selected DAC channel software trigger. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void DAC_SoftwareTriggerCmd(uint32_t DAC_Channel, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_DAC_CHANNEL(DAC_Channel)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable software trigger for the selected DAC channel */ + DAC->SWTRIGR |= (uint32_t)DAC_SWTRIGR_SWTRIG1 << (DAC_Channel >> 4); + } + else + { + /* Disable software trigger for the selected DAC channel */ + DAC->SWTRIGR &= ~((uint32_t)DAC_SWTRIGR_SWTRIG1 << (DAC_Channel >> 4)); + } +} + +/** + * @brief Enables or disables simultaneously the two DAC channels software + * triggers. + * @param NewState: new state of the DAC channels software triggers. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void DAC_DualSoftwareTriggerCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable software trigger for both DAC channels */ + DAC->SWTRIGR |= DUAL_SWTRIG_SET ; + } + else + { + /* Disable software trigger for both DAC channels */ + DAC->SWTRIGR &= DUAL_SWTRIG_RESET; + } +} + +/** + * @brief Enables or disables the selected DAC channel wave generation. + * @param DAC_Channel: the selected DAC channel. + * This parameter can be one of the following values: + * @arg DAC_Channel_1: DAC Channel1 selected + * @arg DAC_Channel_2: DAC Channel2 selected + * @param DAC_Wave: Specifies the wave type to enable or disable. + * This parameter can be one of the following values: + * @arg DAC_Wave_Noise: noise wave generation + * @arg DAC_Wave_Triangle: triangle wave generation + * @param NewState: new state of the selected DAC channel wave generation. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void DAC_WaveGenerationCmd(uint32_t DAC_Channel, uint32_t DAC_Wave, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_DAC_CHANNEL(DAC_Channel)); + assert_param(IS_DAC_WAVE(DAC_Wave)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the selected wave generation for the selected DAC channel */ + DAC->CR |= DAC_Wave << DAC_Channel; + } + else + { + /* Disable the selected wave generation for the selected DAC channel */ + DAC->CR &= ~(DAC_Wave << DAC_Channel); + } +} + +/** + * @brief Set the specified data holding register value for DAC channel1. + * @param DAC_Align: Specifies the data alignment for DAC channel1. + * This parameter can be one of the following values: + * @arg DAC_Align_8b_R: 8bit right data alignment selected + * @arg DAC_Align_12b_L: 12bit left data alignment selected + * @arg DAC_Align_12b_R: 12bit right data alignment selected + * @param Data : Data to be loaded in the selected data holding register. + * @retval None + */ +void DAC_SetChannel1Data(uint32_t DAC_Align, uint16_t Data) +{ + __IO uint32_t tmp = 0; + + /* Check the parameters */ + assert_param(IS_DAC_ALIGN(DAC_Align)); + assert_param(IS_DAC_DATA(Data)); + + tmp = (uint32_t)DAC_BASE; + tmp += DHR12R1_OFFSET + DAC_Align; + + /* Set the DAC channel1 selected data holding register */ + *(__IO uint32_t *) tmp = Data; +} + +/** + * @brief Set the specified data holding register value for DAC channel2. + * @param DAC_Align: Specifies the data alignment for DAC channel2. + * This parameter can be one of the following values: + * @arg DAC_Align_8b_R: 8bit right data alignment selected + * @arg DAC_Align_12b_L: 12bit left data alignment selected + * @arg DAC_Align_12b_R: 12bit right data alignment selected + * @param Data : Data to be loaded in the selected data holding register. + * @retval None + */ +void DAC_SetChannel2Data(uint32_t DAC_Align, uint16_t Data) +{ + __IO uint32_t tmp = 0; + + /* Check the parameters */ + assert_param(IS_DAC_ALIGN(DAC_Align)); + assert_param(IS_DAC_DATA(Data)); + + tmp = (uint32_t)DAC_BASE; + tmp += DHR12R2_OFFSET + DAC_Align; + + /* Set the DAC channel2 selected data holding register */ + *(__IO uint32_t *)tmp = Data; +} + +/** + * @brief Set the specified data holding register value for dual channel + * DAC. + * @param DAC_Align: Specifies the data alignment for dual channel DAC. + * This parameter can be one of the following values: + * @arg DAC_Align_8b_R: 8bit right data alignment selected + * @arg DAC_Align_12b_L: 12bit left data alignment selected + * @arg DAC_Align_12b_R: 12bit right data alignment selected + * @param Data2: Data for DAC Channel2 to be loaded in the selected data + * holding register. + * @param Data1: Data for DAC Channel1 to be loaded in the selected data + * holding register. + * @retval None + */ +void DAC_SetDualChannelData(uint32_t DAC_Align, uint16_t Data2, uint16_t Data1) +{ + uint32_t data = 0, tmp = 0; + + /* Check the parameters */ + assert_param(IS_DAC_ALIGN(DAC_Align)); + assert_param(IS_DAC_DATA(Data1)); + assert_param(IS_DAC_DATA(Data2)); + + /* Calculate and set dual DAC data holding register value */ + if (DAC_Align == DAC_Align_8b_R) + { + data = ((uint32_t)Data2 << 8) | Data1; + } + else + { + data = ((uint32_t)Data2 << 16) | Data1; + } + + tmp = (uint32_t)DAC_BASE; + tmp += DHR12RD_OFFSET + DAC_Align; + + /* Set the dual DAC selected data holding register */ + *(__IO uint32_t *)tmp = data; +} + +/** + * @brief Returns the last data output value of the selected DAC channel. + * @param DAC_Channel: the selected DAC channel. + * This parameter can be one of the following values: + * @arg DAC_Channel_1: DAC Channel1 selected + * @arg DAC_Channel_2: DAC Channel2 selected + * @retval The selected DAC channel data output value. + */ +uint16_t DAC_GetDataOutputValue(uint32_t DAC_Channel) +{ + __IO uint32_t tmp = 0; + + /* Check the parameters */ + assert_param(IS_DAC_CHANNEL(DAC_Channel)); + + tmp = (uint32_t) DAC_BASE ; + tmp += DOR_OFFSET + ((uint32_t)DAC_Channel >> 2); + + /* Returns the DAC channel data output register value */ + return (uint16_t) (*(__IO uint32_t*) tmp); +} + +#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL) +/** + * @brief Checks whether the specified DAC flag is set or not. + * @param DAC_Channel: thee selected DAC channel. + * This parameter can be one of the following values: + * @arg DAC_Channel_1: DAC Channel1 selected + * @arg DAC_Channel_2: DAC Channel2 selected + * @param DAC_FLAG: specifies the flag to check. + * This parameter can be only of the following value: + * @arg DAC_FLAG_DMAUDR: DMA underrun flag + * @retval The new state of DAC_FLAG (SET or RESET). + */ +FlagStatus DAC_GetFlagStatus(uint32_t DAC_Channel, uint32_t DAC_FLAG) +{ + FlagStatus bitstatus = RESET; + /* Check the parameters */ + assert_param(IS_DAC_CHANNEL(DAC_Channel)); + assert_param(IS_DAC_FLAG(DAC_FLAG)); + + /* Check the status of the specified DAC flag */ + if ((DAC->SR & (DAC_FLAG << DAC_Channel)) != (uint8_t)RESET) + { + /* DAC_FLAG is set */ + bitstatus = SET; + } + else + { + /* DAC_FLAG is reset */ + bitstatus = RESET; + } + /* Return the DAC_FLAG status */ + return bitstatus; +} + +/** + * @brief Clears the DAC channelx's pending flags. + * @param DAC_Channel: the selected DAC channel. + * This parameter can be one of the following values: + * @arg DAC_Channel_1: DAC Channel1 selected + * @arg DAC_Channel_2: DAC Channel2 selected + * @param DAC_FLAG: specifies the flag to clear. + * This parameter can be of the following value: + * @arg DAC_FLAG_DMAUDR: DMA underrun flag + * @retval None + */ +void DAC_ClearFlag(uint32_t DAC_Channel, uint32_t DAC_FLAG) +{ + /* Check the parameters */ + assert_param(IS_DAC_CHANNEL(DAC_Channel)); + assert_param(IS_DAC_FLAG(DAC_FLAG)); + + /* Clear the selected DAC flags */ + DAC->SR = (DAC_FLAG << DAC_Channel); +} + +/** + * @brief Checks whether the specified DAC interrupt has occurred or not. + * @param DAC_Channel: the selected DAC channel. + * This parameter can be one of the following values: + * @arg DAC_Channel_1: DAC Channel1 selected + * @arg DAC_Channel_2: DAC Channel2 selected + * @param DAC_IT: specifies the DAC interrupt source to check. + * This parameter can be the following values: + * @arg DAC_IT_DMAUDR: DMA underrun interrupt mask + * @retval The new state of DAC_IT (SET or RESET). + */ +ITStatus DAC_GetITStatus(uint32_t DAC_Channel, uint32_t DAC_IT) +{ + ITStatus bitstatus = RESET; + uint32_t enablestatus = 0; + + /* Check the parameters */ + assert_param(IS_DAC_CHANNEL(DAC_Channel)); + assert_param(IS_DAC_IT(DAC_IT)); + + /* Get the DAC_IT enable bit status */ + enablestatus = (DAC->CR & (DAC_IT << DAC_Channel)) ; + + /* Check the status of the specified DAC interrupt */ + if (((DAC->SR & (DAC_IT << DAC_Channel)) != (uint32_t)RESET) && enablestatus) + { + /* DAC_IT is set */ + bitstatus = SET; + } + else + { + /* DAC_IT is reset */ + bitstatus = RESET; + } + /* Return the DAC_IT status */ + return bitstatus; +} + +/** + * @brief Clears the DAC channelx's interrupt pending bits. + * @param DAC_Channel: the selected DAC channel. + * This parameter can be one of the following values: + * @arg DAC_Channel_1: DAC Channel1 selected + * @arg DAC_Channel_2: DAC Channel2 selected + * @param DAC_IT: specifies the DAC interrupt pending bit to clear. + * This parameter can be the following values: + * @arg DAC_IT_DMAUDR: DMA underrun interrupt mask + * @retval None + */ +void DAC_ClearITPendingBit(uint32_t DAC_Channel, uint32_t DAC_IT) +{ + /* Check the parameters */ + assert_param(IS_DAC_CHANNEL(DAC_Channel)); + assert_param(IS_DAC_IT(DAC_IT)); + + /* Clear the selected DAC interrupt pending bits */ + DAC->SR = (DAC_IT << DAC_Channel); +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_dbgmcu.c b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_dbgmcu.c new file mode 100644 index 0000000..96a8fde --- /dev/null +++ b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_dbgmcu.c @@ -0,0 +1,162 @@ +/** + ****************************************************************************** + * @file stm32f10x_dbgmcu.c + * @author MCD Application Team + * @version V3.5.0 + * @date 11-March-2011 + * @brief This file provides all the DBGMCU firmware functions. + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

    © COPYRIGHT 2011 STMicroelectronics

    + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f10x_dbgmcu.h" + +/** @addtogroup STM32F10x_StdPeriph_Driver + * @{ + */ + +/** @defgroup DBGMCU + * @brief DBGMCU driver modules + * @{ + */ + +/** @defgroup DBGMCU_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @defgroup DBGMCU_Private_Defines + * @{ + */ + +#define IDCODE_DEVID_MASK ((uint32_t)0x00000FFF) +/** + * @} + */ + +/** @defgroup DBGMCU_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup DBGMCU_Private_Variables + * @{ + */ + +/** + * @} + */ + +/** @defgroup DBGMCU_Private_FunctionPrototypes + * @{ + */ + +/** + * @} + */ + +/** @defgroup DBGMCU_Private_Functions + * @{ + */ + +/** + * @brief Returns the device revision identifier. + * @param None + * @retval Device revision identifier + */ +uint32_t DBGMCU_GetREVID(void) +{ + return(DBGMCU->IDCODE >> 16); +} + +/** + * @brief Returns the device identifier. + * @param None + * @retval Device identifier + */ +uint32_t DBGMCU_GetDEVID(void) +{ + return(DBGMCU->IDCODE & IDCODE_DEVID_MASK); +} + +/** + * @brief Configures the specified peripheral and low power mode behavior + * when the MCU under Debug mode. + * @param DBGMCU_Periph: specifies the peripheral and low power mode. + * This parameter can be any combination of the following values: + * @arg DBGMCU_SLEEP: Keep debugger connection during SLEEP mode + * @arg DBGMCU_STOP: Keep debugger connection during STOP mode + * @arg DBGMCU_STANDBY: Keep debugger connection during STANDBY mode + * @arg DBGMCU_IWDG_STOP: Debug IWDG stopped when Core is halted + * @arg DBGMCU_WWDG_STOP: Debug WWDG stopped when Core is halted + * @arg DBGMCU_TIM1_STOP: TIM1 counter stopped when Core is halted + * @arg DBGMCU_TIM2_STOP: TIM2 counter stopped when Core is halted + * @arg DBGMCU_TIM3_STOP: TIM3 counter stopped when Core is halted + * @arg DBGMCU_TIM4_STOP: TIM4 counter stopped when Core is halted + * @arg DBGMCU_CAN1_STOP: Debug CAN2 stopped when Core is halted + * @arg DBGMCU_I2C1_SMBUS_TIMEOUT: I2C1 SMBUS timeout mode stopped when Core is halted + * @arg DBGMCU_I2C2_SMBUS_TIMEOUT: I2C2 SMBUS timeout mode stopped when Core is halted + * @arg DBGMCU_TIM5_STOP: TIM5 counter stopped when Core is halted + * @arg DBGMCU_TIM6_STOP: TIM6 counter stopped when Core is halted + * @arg DBGMCU_TIM7_STOP: TIM7 counter stopped when Core is halted + * @arg DBGMCU_TIM8_STOP: TIM8 counter stopped when Core is halted + * @arg DBGMCU_CAN2_STOP: Debug CAN2 stopped when Core is halted + * @arg DBGMCU_TIM15_STOP: TIM15 counter stopped when Core is halted + * @arg DBGMCU_TIM16_STOP: TIM16 counter stopped when Core is halted + * @arg DBGMCU_TIM17_STOP: TIM17 counter stopped when Core is halted + * @arg DBGMCU_TIM9_STOP: TIM9 counter stopped when Core is halted + * @arg DBGMCU_TIM10_STOP: TIM10 counter stopped when Core is halted + * @arg DBGMCU_TIM11_STOP: TIM11 counter stopped when Core is halted + * @arg DBGMCU_TIM12_STOP: TIM12 counter stopped when Core is halted + * @arg DBGMCU_TIM13_STOP: TIM13 counter stopped when Core is halted + * @arg DBGMCU_TIM14_STOP: TIM14 counter stopped when Core is halted + * @param NewState: new state of the specified peripheral in Debug mode. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void DBGMCU_Config(uint32_t DBGMCU_Periph, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_DBGMCU_PERIPH(DBGMCU_Periph)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + DBGMCU->CR |= DBGMCU_Periph; + } + else + { + DBGMCU->CR &= ~DBGMCU_Periph; + } +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_dma.c b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_dma.c new file mode 100644 index 0000000..bf072df --- /dev/null +++ b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_dma.c @@ -0,0 +1,714 @@ +/** + ****************************************************************************** + * @file stm32f10x_dma.c + * @author MCD Application Team + * @version V3.5.0 + * @date 11-March-2011 + * @brief This file provides all the DMA firmware functions. + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

    © COPYRIGHT 2011 STMicroelectronics

    + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f10x_dma.h" +#include "stm32f10x_rcc.h" + +/** @addtogroup STM32F10x_StdPeriph_Driver + * @{ + */ + +/** @defgroup DMA + * @brief DMA driver modules + * @{ + */ + +/** @defgroup DMA_Private_TypesDefinitions + * @{ + */ +/** + * @} + */ + +/** @defgroup DMA_Private_Defines + * @{ + */ + + +/* DMA1 Channelx interrupt pending bit masks */ +#define DMA1_Channel1_IT_Mask ((uint32_t)(DMA_ISR_GIF1 | DMA_ISR_TCIF1 | DMA_ISR_HTIF1 | DMA_ISR_TEIF1)) +#define DMA1_Channel2_IT_Mask ((uint32_t)(DMA_ISR_GIF2 | DMA_ISR_TCIF2 | DMA_ISR_HTIF2 | DMA_ISR_TEIF2)) +#define DMA1_Channel3_IT_Mask ((uint32_t)(DMA_ISR_GIF3 | DMA_ISR_TCIF3 | DMA_ISR_HTIF3 | DMA_ISR_TEIF3)) +#define DMA1_Channel4_IT_Mask ((uint32_t)(DMA_ISR_GIF4 | DMA_ISR_TCIF4 | DMA_ISR_HTIF4 | DMA_ISR_TEIF4)) +#define DMA1_Channel5_IT_Mask ((uint32_t)(DMA_ISR_GIF5 | DMA_ISR_TCIF5 | DMA_ISR_HTIF5 | DMA_ISR_TEIF5)) +#define DMA1_Channel6_IT_Mask ((uint32_t)(DMA_ISR_GIF6 | DMA_ISR_TCIF6 | DMA_ISR_HTIF6 | DMA_ISR_TEIF6)) +#define DMA1_Channel7_IT_Mask ((uint32_t)(DMA_ISR_GIF7 | DMA_ISR_TCIF7 | DMA_ISR_HTIF7 | DMA_ISR_TEIF7)) + +/* DMA2 Channelx interrupt pending bit masks */ +#define DMA2_Channel1_IT_Mask ((uint32_t)(DMA_ISR_GIF1 | DMA_ISR_TCIF1 | DMA_ISR_HTIF1 | DMA_ISR_TEIF1)) +#define DMA2_Channel2_IT_Mask ((uint32_t)(DMA_ISR_GIF2 | DMA_ISR_TCIF2 | DMA_ISR_HTIF2 | DMA_ISR_TEIF2)) +#define DMA2_Channel3_IT_Mask ((uint32_t)(DMA_ISR_GIF3 | DMA_ISR_TCIF3 | DMA_ISR_HTIF3 | DMA_ISR_TEIF3)) +#define DMA2_Channel4_IT_Mask ((uint32_t)(DMA_ISR_GIF4 | DMA_ISR_TCIF4 | DMA_ISR_HTIF4 | DMA_ISR_TEIF4)) +#define DMA2_Channel5_IT_Mask ((uint32_t)(DMA_ISR_GIF5 | DMA_ISR_TCIF5 | DMA_ISR_HTIF5 | DMA_ISR_TEIF5)) + +/* DMA2 FLAG mask */ +#define FLAG_Mask ((uint32_t)0x10000000) + +/* DMA registers Masks */ +#define CCR_CLEAR_Mask ((uint32_t)0xFFFF800F) + +/** + * @} + */ + +/** @defgroup DMA_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup DMA_Private_Variables + * @{ + */ + +/** + * @} + */ + +/** @defgroup DMA_Private_FunctionPrototypes + * @{ + */ + +/** + * @} + */ + +/** @defgroup DMA_Private_Functions + * @{ + */ + +/** + * @brief Deinitializes the DMAy Channelx registers to their default reset + * values. + * @param DMAy_Channelx: where y can be 1 or 2 to select the DMA and + * x can be 1 to 7 for DMA1 and 1 to 5 for DMA2 to select the DMA Channel. + * @retval None + */ +void DMA_DeInit(DMA_Channel_TypeDef* DMAy_Channelx) +{ + /* Check the parameters */ + assert_param(IS_DMA_ALL_PERIPH(DMAy_Channelx)); + + /* Disable the selected DMAy Channelx */ + DMAy_Channelx->CCR &= (uint16_t)(~DMA_CCR1_EN); + + /* Reset DMAy Channelx control register */ + DMAy_Channelx->CCR = 0; + + /* Reset DMAy Channelx remaining bytes register */ + DMAy_Channelx->CNDTR = 0; + + /* Reset DMAy Channelx peripheral address register */ + DMAy_Channelx->CPAR = 0; + + /* Reset DMAy Channelx memory address register */ + DMAy_Channelx->CMAR = 0; + + if (DMAy_Channelx == DMA1_Channel1) + { + /* Reset interrupt pending bits for DMA1 Channel1 */ + DMA1->IFCR |= DMA1_Channel1_IT_Mask; + } + else if (DMAy_Channelx == DMA1_Channel2) + { + /* Reset interrupt pending bits for DMA1 Channel2 */ + DMA1->IFCR |= DMA1_Channel2_IT_Mask; + } + else if (DMAy_Channelx == DMA1_Channel3) + { + /* Reset interrupt pending bits for DMA1 Channel3 */ + DMA1->IFCR |= DMA1_Channel3_IT_Mask; + } + else if (DMAy_Channelx == DMA1_Channel4) + { + /* Reset interrupt pending bits for DMA1 Channel4 */ + DMA1->IFCR |= DMA1_Channel4_IT_Mask; + } + else if (DMAy_Channelx == DMA1_Channel5) + { + /* Reset interrupt pending bits for DMA1 Channel5 */ + DMA1->IFCR |= DMA1_Channel5_IT_Mask; + } + else if (DMAy_Channelx == DMA1_Channel6) + { + /* Reset interrupt pending bits for DMA1 Channel6 */ + DMA1->IFCR |= DMA1_Channel6_IT_Mask; + } + else if (DMAy_Channelx == DMA1_Channel7) + { + /* Reset interrupt pending bits for DMA1 Channel7 */ + DMA1->IFCR |= DMA1_Channel7_IT_Mask; + } + else if (DMAy_Channelx == DMA2_Channel1) + { + /* Reset interrupt pending bits for DMA2 Channel1 */ + DMA2->IFCR |= DMA2_Channel1_IT_Mask; + } + else if (DMAy_Channelx == DMA2_Channel2) + { + /* Reset interrupt pending bits for DMA2 Channel2 */ + DMA2->IFCR |= DMA2_Channel2_IT_Mask; + } + else if (DMAy_Channelx == DMA2_Channel3) + { + /* Reset interrupt pending bits for DMA2 Channel3 */ + DMA2->IFCR |= DMA2_Channel3_IT_Mask; + } + else if (DMAy_Channelx == DMA2_Channel4) + { + /* Reset interrupt pending bits for DMA2 Channel4 */ + DMA2->IFCR |= DMA2_Channel4_IT_Mask; + } + else + { + if (DMAy_Channelx == DMA2_Channel5) + { + /* Reset interrupt pending bits for DMA2 Channel5 */ + DMA2->IFCR |= DMA2_Channel5_IT_Mask; + } + } +} + +/** + * @brief Initializes the DMAy Channelx according to the specified + * parameters in the DMA_InitStruct. + * @param DMAy_Channelx: where y can be 1 or 2 to select the DMA and + * x can be 1 to 7 for DMA1 and 1 to 5 for DMA2 to select the DMA Channel. + * @param DMA_InitStruct: pointer to a DMA_InitTypeDef structure that + * contains the configuration information for the specified DMA Channel. + * @retval None + */ +void DMA_Init(DMA_Channel_TypeDef* DMAy_Channelx, DMA_InitTypeDef* DMA_InitStruct) +{ + uint32_t tmpreg = 0; + + /* Check the parameters */ + assert_param(IS_DMA_ALL_PERIPH(DMAy_Channelx)); + assert_param(IS_DMA_DIR(DMA_InitStruct->DMA_DIR)); + assert_param(IS_DMA_BUFFER_SIZE(DMA_InitStruct->DMA_BufferSize)); + assert_param(IS_DMA_PERIPHERAL_INC_STATE(DMA_InitStruct->DMA_PeripheralInc)); + assert_param(IS_DMA_MEMORY_INC_STATE(DMA_InitStruct->DMA_MemoryInc)); + assert_param(IS_DMA_PERIPHERAL_DATA_SIZE(DMA_InitStruct->DMA_PeripheralDataSize)); + assert_param(IS_DMA_MEMORY_DATA_SIZE(DMA_InitStruct->DMA_MemoryDataSize)); + assert_param(IS_DMA_MODE(DMA_InitStruct->DMA_Mode)); + assert_param(IS_DMA_PRIORITY(DMA_InitStruct->DMA_Priority)); + assert_param(IS_DMA_M2M_STATE(DMA_InitStruct->DMA_M2M)); + +/*--------------------------- DMAy Channelx CCR Configuration -----------------*/ + /* Get the DMAy_Channelx CCR value */ + tmpreg = DMAy_Channelx->CCR; + /* Clear MEM2MEM, PL, MSIZE, PSIZE, MINC, PINC, CIRC and DIR bits */ + tmpreg &= CCR_CLEAR_Mask; + /* Configure DMAy Channelx: data transfer, data size, priority level and mode */ + /* Set DIR bit according to DMA_DIR value */ + /* Set CIRC bit according to DMA_Mode value */ + /* Set PINC bit according to DMA_PeripheralInc value */ + /* Set MINC bit according to DMA_MemoryInc value */ + /* Set PSIZE bits according to DMA_PeripheralDataSize value */ + /* Set MSIZE bits according to DMA_MemoryDataSize value */ + /* Set PL bits according to DMA_Priority value */ + /* Set the MEM2MEM bit according to DMA_M2M value */ + tmpreg |= DMA_InitStruct->DMA_DIR | DMA_InitStruct->DMA_Mode | + DMA_InitStruct->DMA_PeripheralInc | DMA_InitStruct->DMA_MemoryInc | + DMA_InitStruct->DMA_PeripheralDataSize | DMA_InitStruct->DMA_MemoryDataSize | + DMA_InitStruct->DMA_Priority | DMA_InitStruct->DMA_M2M; + + /* Write to DMAy Channelx CCR */ + DMAy_Channelx->CCR = tmpreg; + +/*--------------------------- DMAy Channelx CNDTR Configuration ---------------*/ + /* Write to DMAy Channelx CNDTR */ + DMAy_Channelx->CNDTR = DMA_InitStruct->DMA_BufferSize; + +/*--------------------------- DMAy Channelx CPAR Configuration ----------------*/ + /* Write to DMAy Channelx CPAR */ + DMAy_Channelx->CPAR = DMA_InitStruct->DMA_PeripheralBaseAddr; + +/*--------------------------- DMAy Channelx CMAR Configuration ----------------*/ + /* Write to DMAy Channelx CMAR */ + DMAy_Channelx->CMAR = DMA_InitStruct->DMA_MemoryBaseAddr; +} + +/** + * @brief Fills each DMA_InitStruct member with its default value. + * @param DMA_InitStruct : pointer to a DMA_InitTypeDef structure which will + * be initialized. + * @retval None + */ +void DMA_StructInit(DMA_InitTypeDef* DMA_InitStruct) +{ +/*-------------- Reset DMA init structure parameters values ------------------*/ + /* Initialize the DMA_PeripheralBaseAddr member */ + DMA_InitStruct->DMA_PeripheralBaseAddr = 0; + /* Initialize the DMA_MemoryBaseAddr member */ + DMA_InitStruct->DMA_MemoryBaseAddr = 0; + /* Initialize the DMA_DIR member */ + DMA_InitStruct->DMA_DIR = DMA_DIR_PeripheralSRC; + /* Initialize the DMA_BufferSize member */ + DMA_InitStruct->DMA_BufferSize = 0; + /* Initialize the DMA_PeripheralInc member */ + DMA_InitStruct->DMA_PeripheralInc = DMA_PeripheralInc_Disable; + /* Initialize the DMA_MemoryInc member */ + DMA_InitStruct->DMA_MemoryInc = DMA_MemoryInc_Disable; + /* Initialize the DMA_PeripheralDataSize member */ + DMA_InitStruct->DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; + /* Initialize the DMA_MemoryDataSize member */ + DMA_InitStruct->DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; + /* Initialize the DMA_Mode member */ + DMA_InitStruct->DMA_Mode = DMA_Mode_Normal; + /* Initialize the DMA_Priority member */ + DMA_InitStruct->DMA_Priority = DMA_Priority_Low; + /* Initialize the DMA_M2M member */ + DMA_InitStruct->DMA_M2M = DMA_M2M_Disable; +} + +/** + * @brief Enables or disables the specified DMAy Channelx. + * @param DMAy_Channelx: where y can be 1 or 2 to select the DMA and + * x can be 1 to 7 for DMA1 and 1 to 5 for DMA2 to select the DMA Channel. + * @param NewState: new state of the DMAy Channelx. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void DMA_Cmd(DMA_Channel_TypeDef* DMAy_Channelx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_DMA_ALL_PERIPH(DMAy_Channelx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the selected DMAy Channelx */ + DMAy_Channelx->CCR |= DMA_CCR1_EN; + } + else + { + /* Disable the selected DMAy Channelx */ + DMAy_Channelx->CCR &= (uint16_t)(~DMA_CCR1_EN); + } +} + +/** + * @brief Enables or disables the specified DMAy Channelx interrupts. + * @param DMAy_Channelx: where y can be 1 or 2 to select the DMA and + * x can be 1 to 7 for DMA1 and 1 to 5 for DMA2 to select the DMA Channel. + * @param DMA_IT: specifies the DMA interrupts sources to be enabled + * or disabled. + * This parameter can be any combination of the following values: + * @arg DMA_IT_TC: Transfer complete interrupt mask + * @arg DMA_IT_HT: Half transfer interrupt mask + * @arg DMA_IT_TE: Transfer error interrupt mask + * @param NewState: new state of the specified DMA interrupts. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void DMA_ITConfig(DMA_Channel_TypeDef* DMAy_Channelx, uint32_t DMA_IT, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_DMA_ALL_PERIPH(DMAy_Channelx)); + assert_param(IS_DMA_CONFIG_IT(DMA_IT)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the selected DMA interrupts */ + DMAy_Channelx->CCR |= DMA_IT; + } + else + { + /* Disable the selected DMA interrupts */ + DMAy_Channelx->CCR &= ~DMA_IT; + } +} + +/** + * @brief Sets the number of data units in the current DMAy Channelx transfer. + * @param DMAy_Channelx: where y can be 1 or 2 to select the DMA and + * x can be 1 to 7 for DMA1 and 1 to 5 for DMA2 to select the DMA Channel. + * @param DataNumber: The number of data units in the current DMAy Channelx + * transfer. + * @note This function can only be used when the DMAy_Channelx is disabled. + * @retval None. + */ +void DMA_SetCurrDataCounter(DMA_Channel_TypeDef* DMAy_Channelx, uint16_t DataNumber) +{ + /* Check the parameters */ + assert_param(IS_DMA_ALL_PERIPH(DMAy_Channelx)); + +/*--------------------------- DMAy Channelx CNDTR Configuration ---------------*/ + /* Write to DMAy Channelx CNDTR */ + DMAy_Channelx->CNDTR = DataNumber; +} + +/** + * @brief Returns the number of remaining data units in the current + * DMAy Channelx transfer. + * @param DMAy_Channelx: where y can be 1 or 2 to select the DMA and + * x can be 1 to 7 for DMA1 and 1 to 5 for DMA2 to select the DMA Channel. + * @retval The number of remaining data units in the current DMAy Channelx + * transfer. + */ +uint16_t DMA_GetCurrDataCounter(DMA_Channel_TypeDef* DMAy_Channelx) +{ + /* Check the parameters */ + assert_param(IS_DMA_ALL_PERIPH(DMAy_Channelx)); + /* Return the number of remaining data units for DMAy Channelx */ + return ((uint16_t)(DMAy_Channelx->CNDTR)); +} + +/** + * @brief Checks whether the specified DMAy Channelx flag is set or not. + * @param DMAy_FLAG: specifies the flag to check. + * This parameter can be one of the following values: + * @arg DMA1_FLAG_GL1: DMA1 Channel1 global flag. + * @arg DMA1_FLAG_TC1: DMA1 Channel1 transfer complete flag. + * @arg DMA1_FLAG_HT1: DMA1 Channel1 half transfer flag. + * @arg DMA1_FLAG_TE1: DMA1 Channel1 transfer error flag. + * @arg DMA1_FLAG_GL2: DMA1 Channel2 global flag. + * @arg DMA1_FLAG_TC2: DMA1 Channel2 transfer complete flag. + * @arg DMA1_FLAG_HT2: DMA1 Channel2 half transfer flag. + * @arg DMA1_FLAG_TE2: DMA1 Channel2 transfer error flag. + * @arg DMA1_FLAG_GL3: DMA1 Channel3 global flag. + * @arg DMA1_FLAG_TC3: DMA1 Channel3 transfer complete flag. + * @arg DMA1_FLAG_HT3: DMA1 Channel3 half transfer flag. + * @arg DMA1_FLAG_TE3: DMA1 Channel3 transfer error flag. + * @arg DMA1_FLAG_GL4: DMA1 Channel4 global flag. + * @arg DMA1_FLAG_TC4: DMA1 Channel4 transfer complete flag. + * @arg DMA1_FLAG_HT4: DMA1 Channel4 half transfer flag. + * @arg DMA1_FLAG_TE4: DMA1 Channel4 transfer error flag. + * @arg DMA1_FLAG_GL5: DMA1 Channel5 global flag. + * @arg DMA1_FLAG_TC5: DMA1 Channel5 transfer complete flag. + * @arg DMA1_FLAG_HT5: DMA1 Channel5 half transfer flag. + * @arg DMA1_FLAG_TE5: DMA1 Channel5 transfer error flag. + * @arg DMA1_FLAG_GL6: DMA1 Channel6 global flag. + * @arg DMA1_FLAG_TC6: DMA1 Channel6 transfer complete flag. + * @arg DMA1_FLAG_HT6: DMA1 Channel6 half transfer flag. + * @arg DMA1_FLAG_TE6: DMA1 Channel6 transfer error flag. + * @arg DMA1_FLAG_GL7: DMA1 Channel7 global flag. + * @arg DMA1_FLAG_TC7: DMA1 Channel7 transfer complete flag. + * @arg DMA1_FLAG_HT7: DMA1 Channel7 half transfer flag. + * @arg DMA1_FLAG_TE7: DMA1 Channel7 transfer error flag. + * @arg DMA2_FLAG_GL1: DMA2 Channel1 global flag. + * @arg DMA2_FLAG_TC1: DMA2 Channel1 transfer complete flag. + * @arg DMA2_FLAG_HT1: DMA2 Channel1 half transfer flag. + * @arg DMA2_FLAG_TE1: DMA2 Channel1 transfer error flag. + * @arg DMA2_FLAG_GL2: DMA2 Channel2 global flag. + * @arg DMA2_FLAG_TC2: DMA2 Channel2 transfer complete flag. + * @arg DMA2_FLAG_HT2: DMA2 Channel2 half transfer flag. + * @arg DMA2_FLAG_TE2: DMA2 Channel2 transfer error flag. + * @arg DMA2_FLAG_GL3: DMA2 Channel3 global flag. + * @arg DMA2_FLAG_TC3: DMA2 Channel3 transfer complete flag. + * @arg DMA2_FLAG_HT3: DMA2 Channel3 half transfer flag. + * @arg DMA2_FLAG_TE3: DMA2 Channel3 transfer error flag. + * @arg DMA2_FLAG_GL4: DMA2 Channel4 global flag. + * @arg DMA2_FLAG_TC4: DMA2 Channel4 transfer complete flag. + * @arg DMA2_FLAG_HT4: DMA2 Channel4 half transfer flag. + * @arg DMA2_FLAG_TE4: DMA2 Channel4 transfer error flag. + * @arg DMA2_FLAG_GL5: DMA2 Channel5 global flag. + * @arg DMA2_FLAG_TC5: DMA2 Channel5 transfer complete flag. + * @arg DMA2_FLAG_HT5: DMA2 Channel5 half transfer flag. + * @arg DMA2_FLAG_TE5: DMA2 Channel5 transfer error flag. + * @retval The new state of DMAy_FLAG (SET or RESET). + */ +FlagStatus DMA_GetFlagStatus(uint32_t DMAy_FLAG) +{ + FlagStatus bitstatus = RESET; + uint32_t tmpreg = 0; + + /* Check the parameters */ + assert_param(IS_DMA_GET_FLAG(DMAy_FLAG)); + + /* Calculate the used DMAy */ + if ((DMAy_FLAG & FLAG_Mask) != (uint32_t)RESET) + { + /* Get DMA2 ISR register value */ + tmpreg = DMA2->ISR ; + } + else + { + /* Get DMA1 ISR register value */ + tmpreg = DMA1->ISR ; + } + + /* Check the status of the specified DMAy flag */ + if ((tmpreg & DMAy_FLAG) != (uint32_t)RESET) + { + /* DMAy_FLAG is set */ + bitstatus = SET; + } + else + { + /* DMAy_FLAG is reset */ + bitstatus = RESET; + } + + /* Return the DMAy_FLAG status */ + return bitstatus; +} + +/** + * @brief Clears the DMAy Channelx's pending flags. + * @param DMAy_FLAG: specifies the flag to clear. + * This parameter can be any combination (for the same DMA) of the following values: + * @arg DMA1_FLAG_GL1: DMA1 Channel1 global flag. + * @arg DMA1_FLAG_TC1: DMA1 Channel1 transfer complete flag. + * @arg DMA1_FLAG_HT1: DMA1 Channel1 half transfer flag. + * @arg DMA1_FLAG_TE1: DMA1 Channel1 transfer error flag. + * @arg DMA1_FLAG_GL2: DMA1 Channel2 global flag. + * @arg DMA1_FLAG_TC2: DMA1 Channel2 transfer complete flag. + * @arg DMA1_FLAG_HT2: DMA1 Channel2 half transfer flag. + * @arg DMA1_FLAG_TE2: DMA1 Channel2 transfer error flag. + * @arg DMA1_FLAG_GL3: DMA1 Channel3 global flag. + * @arg DMA1_FLAG_TC3: DMA1 Channel3 transfer complete flag. + * @arg DMA1_FLAG_HT3: DMA1 Channel3 half transfer flag. + * @arg DMA1_FLAG_TE3: DMA1 Channel3 transfer error flag. + * @arg DMA1_FLAG_GL4: DMA1 Channel4 global flag. + * @arg DMA1_FLAG_TC4: DMA1 Channel4 transfer complete flag. + * @arg DMA1_FLAG_HT4: DMA1 Channel4 half transfer flag. + * @arg DMA1_FLAG_TE4: DMA1 Channel4 transfer error flag. + * @arg DMA1_FLAG_GL5: DMA1 Channel5 global flag. + * @arg DMA1_FLAG_TC5: DMA1 Channel5 transfer complete flag. + * @arg DMA1_FLAG_HT5: DMA1 Channel5 half transfer flag. + * @arg DMA1_FLAG_TE5: DMA1 Channel5 transfer error flag. + * @arg DMA1_FLAG_GL6: DMA1 Channel6 global flag. + * @arg DMA1_FLAG_TC6: DMA1 Channel6 transfer complete flag. + * @arg DMA1_FLAG_HT6: DMA1 Channel6 half transfer flag. + * @arg DMA1_FLAG_TE6: DMA1 Channel6 transfer error flag. + * @arg DMA1_FLAG_GL7: DMA1 Channel7 global flag. + * @arg DMA1_FLAG_TC7: DMA1 Channel7 transfer complete flag. + * @arg DMA1_FLAG_HT7: DMA1 Channel7 half transfer flag. + * @arg DMA1_FLAG_TE7: DMA1 Channel7 transfer error flag. + * @arg DMA2_FLAG_GL1: DMA2 Channel1 global flag. + * @arg DMA2_FLAG_TC1: DMA2 Channel1 transfer complete flag. + * @arg DMA2_FLAG_HT1: DMA2 Channel1 half transfer flag. + * @arg DMA2_FLAG_TE1: DMA2 Channel1 transfer error flag. + * @arg DMA2_FLAG_GL2: DMA2 Channel2 global flag. + * @arg DMA2_FLAG_TC2: DMA2 Channel2 transfer complete flag. + * @arg DMA2_FLAG_HT2: DMA2 Channel2 half transfer flag. + * @arg DMA2_FLAG_TE2: DMA2 Channel2 transfer error flag. + * @arg DMA2_FLAG_GL3: DMA2 Channel3 global flag. + * @arg DMA2_FLAG_TC3: DMA2 Channel3 transfer complete flag. + * @arg DMA2_FLAG_HT3: DMA2 Channel3 half transfer flag. + * @arg DMA2_FLAG_TE3: DMA2 Channel3 transfer error flag. + * @arg DMA2_FLAG_GL4: DMA2 Channel4 global flag. + * @arg DMA2_FLAG_TC4: DMA2 Channel4 transfer complete flag. + * @arg DMA2_FLAG_HT4: DMA2 Channel4 half transfer flag. + * @arg DMA2_FLAG_TE4: DMA2 Channel4 transfer error flag. + * @arg DMA2_FLAG_GL5: DMA2 Channel5 global flag. + * @arg DMA2_FLAG_TC5: DMA2 Channel5 transfer complete flag. + * @arg DMA2_FLAG_HT5: DMA2 Channel5 half transfer flag. + * @arg DMA2_FLAG_TE5: DMA2 Channel5 transfer error flag. + * @retval None + */ +void DMA_ClearFlag(uint32_t DMAy_FLAG) +{ + /* Check the parameters */ + assert_param(IS_DMA_CLEAR_FLAG(DMAy_FLAG)); + + /* Calculate the used DMAy */ + if ((DMAy_FLAG & FLAG_Mask) != (uint32_t)RESET) + { + /* Clear the selected DMAy flags */ + DMA2->IFCR = DMAy_FLAG; + } + else + { + /* Clear the selected DMAy flags */ + DMA1->IFCR = DMAy_FLAG; + } +} + +/** + * @brief Checks whether the specified DMAy Channelx interrupt has occurred or not. + * @param DMAy_IT: specifies the DMAy interrupt source to check. + * This parameter can be one of the following values: + * @arg DMA1_IT_GL1: DMA1 Channel1 global interrupt. + * @arg DMA1_IT_TC1: DMA1 Channel1 transfer complete interrupt. + * @arg DMA1_IT_HT1: DMA1 Channel1 half transfer interrupt. + * @arg DMA1_IT_TE1: DMA1 Channel1 transfer error interrupt. + * @arg DMA1_IT_GL2: DMA1 Channel2 global interrupt. + * @arg DMA1_IT_TC2: DMA1 Channel2 transfer complete interrupt. + * @arg DMA1_IT_HT2: DMA1 Channel2 half transfer interrupt. + * @arg DMA1_IT_TE2: DMA1 Channel2 transfer error interrupt. + * @arg DMA1_IT_GL3: DMA1 Channel3 global interrupt. + * @arg DMA1_IT_TC3: DMA1 Channel3 transfer complete interrupt. + * @arg DMA1_IT_HT3: DMA1 Channel3 half transfer interrupt. + * @arg DMA1_IT_TE3: DMA1 Channel3 transfer error interrupt. + * @arg DMA1_IT_GL4: DMA1 Channel4 global interrupt. + * @arg DMA1_IT_TC4: DMA1 Channel4 transfer complete interrupt. + * @arg DMA1_IT_HT4: DMA1 Channel4 half transfer interrupt. + * @arg DMA1_IT_TE4: DMA1 Channel4 transfer error interrupt. + * @arg DMA1_IT_GL5: DMA1 Channel5 global interrupt. + * @arg DMA1_IT_TC5: DMA1 Channel5 transfer complete interrupt. + * @arg DMA1_IT_HT5: DMA1 Channel5 half transfer interrupt. + * @arg DMA1_IT_TE5: DMA1 Channel5 transfer error interrupt. + * @arg DMA1_IT_GL6: DMA1 Channel6 global interrupt. + * @arg DMA1_IT_TC6: DMA1 Channel6 transfer complete interrupt. + * @arg DMA1_IT_HT6: DMA1 Channel6 half transfer interrupt. + * @arg DMA1_IT_TE6: DMA1 Channel6 transfer error interrupt. + * @arg DMA1_IT_GL7: DMA1 Channel7 global interrupt. + * @arg DMA1_IT_TC7: DMA1 Channel7 transfer complete interrupt. + * @arg DMA1_IT_HT7: DMA1 Channel7 half transfer interrupt. + * @arg DMA1_IT_TE7: DMA1 Channel7 transfer error interrupt. + * @arg DMA2_IT_GL1: DMA2 Channel1 global interrupt. + * @arg DMA2_IT_TC1: DMA2 Channel1 transfer complete interrupt. + * @arg DMA2_IT_HT1: DMA2 Channel1 half transfer interrupt. + * @arg DMA2_IT_TE1: DMA2 Channel1 transfer error interrupt. + * @arg DMA2_IT_GL2: DMA2 Channel2 global interrupt. + * @arg DMA2_IT_TC2: DMA2 Channel2 transfer complete interrupt. + * @arg DMA2_IT_HT2: DMA2 Channel2 half transfer interrupt. + * @arg DMA2_IT_TE2: DMA2 Channel2 transfer error interrupt. + * @arg DMA2_IT_GL3: DMA2 Channel3 global interrupt. + * @arg DMA2_IT_TC3: DMA2 Channel3 transfer complete interrupt. + * @arg DMA2_IT_HT3: DMA2 Channel3 half transfer interrupt. + * @arg DMA2_IT_TE3: DMA2 Channel3 transfer error interrupt. + * @arg DMA2_IT_GL4: DMA2 Channel4 global interrupt. + * @arg DMA2_IT_TC4: DMA2 Channel4 transfer complete interrupt. + * @arg DMA2_IT_HT4: DMA2 Channel4 half transfer interrupt. + * @arg DMA2_IT_TE4: DMA2 Channel4 transfer error interrupt. + * @arg DMA2_IT_GL5: DMA2 Channel5 global interrupt. + * @arg DMA2_IT_TC5: DMA2 Channel5 transfer complete interrupt. + * @arg DMA2_IT_HT5: DMA2 Channel5 half transfer interrupt. + * @arg DMA2_IT_TE5: DMA2 Channel5 transfer error interrupt. + * @retval The new state of DMAy_IT (SET or RESET). + */ +ITStatus DMA_GetITStatus(uint32_t DMAy_IT) +{ + ITStatus bitstatus = RESET; + uint32_t tmpreg = 0; + + /* Check the parameters */ + assert_param(IS_DMA_GET_IT(DMAy_IT)); + + /* Calculate the used DMA */ + if ((DMAy_IT & FLAG_Mask) != (uint32_t)RESET) + { + /* Get DMA2 ISR register value */ + tmpreg = DMA2->ISR; + } + else + { + /* Get DMA1 ISR register value */ + tmpreg = DMA1->ISR; + } + + /* Check the status of the specified DMAy interrupt */ + if ((tmpreg & DMAy_IT) != (uint32_t)RESET) + { + /* DMAy_IT is set */ + bitstatus = SET; + } + else + { + /* DMAy_IT is reset */ + bitstatus = RESET; + } + /* Return the DMA_IT status */ + return bitstatus; +} + +/** + * @brief Clears the DMAy Channelx's interrupt pending bits. + * @param DMAy_IT: specifies the DMAy interrupt pending bit to clear. + * This parameter can be any combination (for the same DMA) of the following values: + * @arg DMA1_IT_GL1: DMA1 Channel1 global interrupt. + * @arg DMA1_IT_TC1: DMA1 Channel1 transfer complete interrupt. + * @arg DMA1_IT_HT1: DMA1 Channel1 half transfer interrupt. + * @arg DMA1_IT_TE1: DMA1 Channel1 transfer error interrupt. + * @arg DMA1_IT_GL2: DMA1 Channel2 global interrupt. + * @arg DMA1_IT_TC2: DMA1 Channel2 transfer complete interrupt. + * @arg DMA1_IT_HT2: DMA1 Channel2 half transfer interrupt. + * @arg DMA1_IT_TE2: DMA1 Channel2 transfer error interrupt. + * @arg DMA1_IT_GL3: DMA1 Channel3 global interrupt. + * @arg DMA1_IT_TC3: DMA1 Channel3 transfer complete interrupt. + * @arg DMA1_IT_HT3: DMA1 Channel3 half transfer interrupt. + * @arg DMA1_IT_TE3: DMA1 Channel3 transfer error interrupt. + * @arg DMA1_IT_GL4: DMA1 Channel4 global interrupt. + * @arg DMA1_IT_TC4: DMA1 Channel4 transfer complete interrupt. + * @arg DMA1_IT_HT4: DMA1 Channel4 half transfer interrupt. + * @arg DMA1_IT_TE4: DMA1 Channel4 transfer error interrupt. + * @arg DMA1_IT_GL5: DMA1 Channel5 global interrupt. + * @arg DMA1_IT_TC5: DMA1 Channel5 transfer complete interrupt. + * @arg DMA1_IT_HT5: DMA1 Channel5 half transfer interrupt. + * @arg DMA1_IT_TE5: DMA1 Channel5 transfer error interrupt. + * @arg DMA1_IT_GL6: DMA1 Channel6 global interrupt. + * @arg DMA1_IT_TC6: DMA1 Channel6 transfer complete interrupt. + * @arg DMA1_IT_HT6: DMA1 Channel6 half transfer interrupt. + * @arg DMA1_IT_TE6: DMA1 Channel6 transfer error interrupt. + * @arg DMA1_IT_GL7: DMA1 Channel7 global interrupt. + * @arg DMA1_IT_TC7: DMA1 Channel7 transfer complete interrupt. + * @arg DMA1_IT_HT7: DMA1 Channel7 half transfer interrupt. + * @arg DMA1_IT_TE7: DMA1 Channel7 transfer error interrupt. + * @arg DMA2_IT_GL1: DMA2 Channel1 global interrupt. + * @arg DMA2_IT_TC1: DMA2 Channel1 transfer complete interrupt. + * @arg DMA2_IT_HT1: DMA2 Channel1 half transfer interrupt. + * @arg DMA2_IT_TE1: DMA2 Channel1 transfer error interrupt. + * @arg DMA2_IT_GL2: DMA2 Channel2 global interrupt. + * @arg DMA2_IT_TC2: DMA2 Channel2 transfer complete interrupt. + * @arg DMA2_IT_HT2: DMA2 Channel2 half transfer interrupt. + * @arg DMA2_IT_TE2: DMA2 Channel2 transfer error interrupt. + * @arg DMA2_IT_GL3: DMA2 Channel3 global interrupt. + * @arg DMA2_IT_TC3: DMA2 Channel3 transfer complete interrupt. + * @arg DMA2_IT_HT3: DMA2 Channel3 half transfer interrupt. + * @arg DMA2_IT_TE3: DMA2 Channel3 transfer error interrupt. + * @arg DMA2_IT_GL4: DMA2 Channel4 global interrupt. + * @arg DMA2_IT_TC4: DMA2 Channel4 transfer complete interrupt. + * @arg DMA2_IT_HT4: DMA2 Channel4 half transfer interrupt. + * @arg DMA2_IT_TE4: DMA2 Channel4 transfer error interrupt. + * @arg DMA2_IT_GL5: DMA2 Channel5 global interrupt. + * @arg DMA2_IT_TC5: DMA2 Channel5 transfer complete interrupt. + * @arg DMA2_IT_HT5: DMA2 Channel5 half transfer interrupt. + * @arg DMA2_IT_TE5: DMA2 Channel5 transfer error interrupt. + * @retval None + */ +void DMA_ClearITPendingBit(uint32_t DMAy_IT) +{ + /* Check the parameters */ + assert_param(IS_DMA_CLEAR_IT(DMAy_IT)); + + /* Calculate the used DMAy */ + if ((DMAy_IT & FLAG_Mask) != (uint32_t)RESET) + { + /* Clear the selected DMAy interrupt pending bits */ + DMA2->IFCR = DMAy_IT; + } + else + { + /* Clear the selected DMAy interrupt pending bits */ + DMA1->IFCR = DMAy_IT; + } +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_exti.c b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_exti.c new file mode 100644 index 0000000..b6290d5 --- /dev/null +++ b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_exti.c @@ -0,0 +1,269 @@ +/** + ****************************************************************************** + * @file stm32f10x_exti.c + * @author MCD Application Team + * @version V3.5.0 + * @date 11-March-2011 + * @brief This file provides all the EXTI firmware functions. + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

    © COPYRIGHT 2011 STMicroelectronics

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

    © COPYRIGHT 2011 STMicroelectronics

    + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f10x_flash.h" + +/** @addtogroup STM32F10x_StdPeriph_Driver + * @{ + */ + +/** @defgroup FLASH + * @brief FLASH driver modules + * @{ + */ + +/** @defgroup FLASH_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @defgroup FLASH_Private_Defines + * @{ + */ + +/* Flash Access Control Register bits */ +#define ACR_LATENCY_Mask ((uint32_t)0x00000038) +#define ACR_HLFCYA_Mask ((uint32_t)0xFFFFFFF7) +#define ACR_PRFTBE_Mask ((uint32_t)0xFFFFFFEF) + +/* Flash Access Control Register bits */ +#define ACR_PRFTBS_Mask ((uint32_t)0x00000020) + +/* Flash Control Register bits */ +#define CR_PG_Set ((uint32_t)0x00000001) +#define CR_PG_Reset ((uint32_t)0x00001FFE) +#define CR_PER_Set ((uint32_t)0x00000002) +#define CR_PER_Reset ((uint32_t)0x00001FFD) +#define CR_MER_Set ((uint32_t)0x00000004) +#define CR_MER_Reset ((uint32_t)0x00001FFB) +#define CR_OPTPG_Set ((uint32_t)0x00000010) +#define CR_OPTPG_Reset ((uint32_t)0x00001FEF) +#define CR_OPTER_Set ((uint32_t)0x00000020) +#define CR_OPTER_Reset ((uint32_t)0x00001FDF) +#define CR_STRT_Set ((uint32_t)0x00000040) +#define CR_LOCK_Set ((uint32_t)0x00000080) + +/* FLASH Mask */ +#define RDPRT_Mask ((uint32_t)0x00000002) +#define WRP0_Mask ((uint32_t)0x000000FF) +#define WRP1_Mask ((uint32_t)0x0000FF00) +#define WRP2_Mask ((uint32_t)0x00FF0000) +#define WRP3_Mask ((uint32_t)0xFF000000) +#define OB_USER_BFB2 ((uint16_t)0x0008) + +/* FLASH Keys */ +#define RDP_Key ((uint16_t)0x00A5) +#define FLASH_KEY1 ((uint32_t)0x45670123) +#define FLASH_KEY2 ((uint32_t)0xCDEF89AB) + +/* FLASH BANK address */ +#define FLASH_BANK1_END_ADDRESS ((uint32_t)0x807FFFF) + +/* Delay definition */ +//#define EraseTimeout ((uint32_t)0x000B0000) +//#define ProgramTimeout ((uint32_t)0x00002000) + +#define EraseTimeout ((uint32_t)0x000fffff) +#define ProgramTimeout ((uint32_t)0x0000ffff) + +/** + * @} + */ + +/** @defgroup FLASH_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup FLASH_Private_Variables + * @{ + */ + +/** + * @} + */ + +/** @defgroup FLASH_Private_FunctionPrototypes + * @{ + */ + +/** + * @} + */ + +/** @defgroup FLASH_Private_Functions + * @{ + */ + +/** +@code + + This driver provides functions to configure and program the Flash memory of all STM32F10x devices, + including the latest STM32F10x_XL density devices. + + STM32F10x_XL devices feature up to 1 Mbyte with dual bank architecture for read-while-write (RWW) capability: + - bank1: fixed size of 512 Kbytes (256 pages of 2Kbytes each) + - bank2: up to 512 Kbytes (up to 256 pages of 2Kbytes each) + While other STM32F10x devices features only one bank with memory up to 512 Kbytes. + + In version V3.3.0, some functions were updated and new ones were added to support + STM32F10x_XL devices. Thus some functions manages all devices, while other are + dedicated for XL devices only. + + The table below presents the list of available functions depending on the used STM32F10x devices. + + *************************************************** + * Legacy functions used for all STM32F10x devices * + *************************************************** + +----------------------------------------------------------------------------------------------------------------------------------+ + | Functions prototypes |STM32F10x_XL|Other STM32F10x| Comments | + | | devices | devices | | + |----------------------------------------------------------------------------------------------------------------------------------| + |FLASH_SetLatency | Yes | Yes | No change | + |----------------------------------------------------------------------------------------------------------------------------------| + |FLASH_HalfCycleAccessCmd | Yes | Yes | No change | + |----------------------------------------------------------------------------------------------------------------------------------| + |FLASH_PrefetchBufferCmd | Yes | Yes | No change | + |----------------------------------------------------------------------------------------------------------------------------------| + |FLASH_Unlock | Yes | Yes | - For STM32F10X_XL devices: unlock Bank1 and Bank2. | + | | | | - For other devices: unlock Bank1 and it is equivalent | + | | | | to FLASH_UnlockBank1 function. | + |----------------------------------------------------------------------------------------------------------------------------------| + |FLASH_Lock | Yes | Yes | - For STM32F10X_XL devices: lock Bank1 and Bank2. | + | | | | - For other devices: lock Bank1 and it is equivalent | + | | | | to FLASH_LockBank1 function. | + |----------------------------------------------------------------------------------------------------------------------------------| + |FLASH_ErasePage | Yes | Yes | - For STM32F10x_XL devices: erase a page in Bank1 and Bank2 | + | | | | - For other devices: erase a page in Bank1 | + |----------------------------------------------------------------------------------------------------------------------------------| + |FLASH_EraseAllPages | Yes | Yes | - For STM32F10x_XL devices: erase all pages in Bank1 and Bank2 | + | | | | - For other devices: erase all pages in Bank1 | + |----------------------------------------------------------------------------------------------------------------------------------| + |FLASH_EraseOptionBytes | Yes | Yes | No change | + |----------------------------------------------------------------------------------------------------------------------------------| + |FLASH_ProgramWord | Yes | Yes | Updated to program up to 1MByte (depending on the used device) | + |----------------------------------------------------------------------------------------------------------------------------------| + |FLASH_ProgramHalfWord | Yes | Yes | Updated to program up to 1MByte (depending on the used device) | + |----------------------------------------------------------------------------------------------------------------------------------| + |FLASH_ProgramOptionByteData | Yes | Yes | No change | + |----------------------------------------------------------------------------------------------------------------------------------| + |FLASH_EnableWriteProtection | Yes | Yes | No change | + |----------------------------------------------------------------------------------------------------------------------------------| + |FLASH_ReadOutProtection | Yes | Yes | No change | + |----------------------------------------------------------------------------------------------------------------------------------| + |FLASH_UserOptionByteConfig | Yes | Yes | No change | + |----------------------------------------------------------------------------------------------------------------------------------| + |FLASH_GetUserOptionByte | Yes | Yes | No change | + |----------------------------------------------------------------------------------------------------------------------------------| + |FLASH_GetWriteProtectionOptionByte | Yes | Yes | No change | + |----------------------------------------------------------------------------------------------------------------------------------| + |FLASH_GetReadOutProtectionStatus | Yes | Yes | No change | + |----------------------------------------------------------------------------------------------------------------------------------| + |FLASH_GetPrefetchBufferStatus | Yes | Yes | No change | + |----------------------------------------------------------------------------------------------------------------------------------| + |FLASH_ITConfig | Yes | Yes | - For STM32F10x_XL devices: enable Bank1 and Bank2's interrupts| + | | | | - For other devices: enable Bank1's interrupts | + |----------------------------------------------------------------------------------------------------------------------------------| + |FLASH_GetFlagStatus | Yes | Yes | - For STM32F10x_XL devices: return Bank1 and Bank2's flag status| + | | | | - For other devices: return Bank1's flag status | + |----------------------------------------------------------------------------------------------------------------------------------| + |FLASH_ClearFlag | Yes | Yes | - For STM32F10x_XL devices: clear Bank1 and Bank2's flag | + | | | | - For other devices: clear Bank1's flag | + |----------------------------------------------------------------------------------------------------------------------------------| + |FLASH_GetStatus | Yes | Yes | - Return the status of Bank1 (for all devices) | + | | | | equivalent to FLASH_GetBank1Status function | + |----------------------------------------------------------------------------------------------------------------------------------| + |FLASH_WaitForLastOperation | Yes | Yes | - Wait for Bank1 last operation (for all devices) | + | | | | equivalent to: FLASH_WaitForLastBank1Operation function | + +----------------------------------------------------------------------------------------------------------------------------------+ + + ************************************************************************************************************************ + * New functions used for all STM32F10x devices to manage Bank1: * + * - These functions are mainly useful for STM32F10x_XL density devices, to have separate control for Bank1 and bank2 * + * - For other devices, these functions are optional (covered by functions listed above) * + ************************************************************************************************************************ + +----------------------------------------------------------------------------------------------------------------------------------+ + | Functions prototypes |STM32F10x_XL|Other STM32F10x| Comments | + | | devices | devices | | + |----------------------------------------------------------------------------------------------------------------------------------| + | FLASH_UnlockBank1 | Yes | Yes | - Unlock Bank1 | + |----------------------------------------------------------------------------------------------------------------------------------| + |FLASH_LockBank1 | Yes | Yes | - Lock Bank1 | + |----------------------------------------------------------------------------------------------------------------------------------| + | FLASH_EraseAllBank1Pages | Yes | Yes | - Erase all pages in Bank1 | + |----------------------------------------------------------------------------------------------------------------------------------| + | FLASH_GetBank1Status | Yes | Yes | - Return the status of Bank1 | + |----------------------------------------------------------------------------------------------------------------------------------| + | FLASH_WaitForLastBank1Operation | Yes | Yes | - Wait for Bank1 last operation | + +----------------------------------------------------------------------------------------------------------------------------------+ + + ***************************************************************************** + * New Functions used only with STM32F10x_XL density devices to manage Bank2 * + ***************************************************************************** + +----------------------------------------------------------------------------------------------------------------------------------+ + | Functions prototypes |STM32F10x_XL|Other STM32F10x| Comments | + | | devices | devices | | + |----------------------------------------------------------------------------------------------------------------------------------| + | FLASH_UnlockBank2 | Yes | No | - Unlock Bank2 | + |----------------------------------------------------------------------------------------------------------------------------------| + |FLASH_LockBank2 | Yes | No | - Lock Bank2 | + |----------------------------------------------------------------------------------------------------------------------------------| + | FLASH_EraseAllBank2Pages | Yes | No | - Erase all pages in Bank2 | + |----------------------------------------------------------------------------------------------------------------------------------| + | FLASH_GetBank2Status | Yes | No | - Return the status of Bank2 | + |----------------------------------------------------------------------------------------------------------------------------------| + | FLASH_WaitForLastBank2Operation | Yes | No | - Wait for Bank2 last operation | + |----------------------------------------------------------------------------------------------------------------------------------| + | FLASH_BootConfig | Yes | No | - Configure to boot from Bank1 or Bank2 | + +----------------------------------------------------------------------------------------------------------------------------------+ +@endcode +*/ + + +/** + * @brief Sets the code latency value. + * @note This function can be used for all STM32F10x devices. + * @param FLASH_Latency: specifies the FLASH Latency value. + * This parameter can be one of the following values: + * @arg FLASH_Latency_0: FLASH Zero Latency cycle + * @arg FLASH_Latency_1: FLASH One Latency cycle + * @arg FLASH_Latency_2: FLASH Two Latency cycles + * @retval None + */ +void FLASH_SetLatency(uint32_t FLASH_Latency) +{ + uint32_t tmpreg = 0; + + /* Check the parameters */ + assert_param(IS_FLASH_LATENCY(FLASH_Latency)); + + /* Read the ACR register */ + tmpreg = FLASH->ACR; + + /* Sets the Latency value */ + tmpreg &= ACR_LATENCY_Mask; + tmpreg |= FLASH_Latency; + + /* Write the ACR register */ + FLASH->ACR = tmpreg; +} + +/** + * @brief Enables or disables the Half cycle flash access. + * @note This function can be used for all STM32F10x devices. + * @param FLASH_HalfCycleAccess: specifies the FLASH Half cycle Access mode. + * This parameter can be one of the following values: + * @arg FLASH_HalfCycleAccess_Enable: FLASH Half Cycle Enable + * @arg FLASH_HalfCycleAccess_Disable: FLASH Half Cycle Disable + * @retval None + */ +void FLASH_HalfCycleAccessCmd(uint32_t FLASH_HalfCycleAccess) +{ + /* Check the parameters */ + assert_param(IS_FLASH_HALFCYCLEACCESS_STATE(FLASH_HalfCycleAccess)); + + /* Enable or disable the Half cycle access */ + FLASH->ACR &= ACR_HLFCYA_Mask; + FLASH->ACR |= FLASH_HalfCycleAccess; +} + +/** + * @brief Enables or disables the Prefetch Buffer. + * @note This function can be used for all STM32F10x devices. + * @param FLASH_PrefetchBuffer: specifies the Prefetch buffer status. + * This parameter can be one of the following values: + * @arg FLASH_PrefetchBuffer_Enable: FLASH Prefetch Buffer Enable + * @arg FLASH_PrefetchBuffer_Disable: FLASH Prefetch Buffer Disable + * @retval None + */ +void FLASH_PrefetchBufferCmd(uint32_t FLASH_PrefetchBuffer) +{ + /* Check the parameters */ + assert_param(IS_FLASH_PREFETCHBUFFER_STATE(FLASH_PrefetchBuffer)); + + /* Enable or disable the Prefetch Buffer */ + FLASH->ACR &= ACR_PRFTBE_Mask; + FLASH->ACR |= FLASH_PrefetchBuffer; +} + +/** + * @brief Unlocks the FLASH Program Erase Controller. + * @note This function can be used for all STM32F10x devices. + * - For STM32F10X_XL devices this function unlocks Bank1 and Bank2. + * - For all other devices it unlocks Bank1 and it is equivalent + * to FLASH_UnlockBank1 function.. + * @param None + * @retval None + */ +void FLASH_Unlock(void) +{ + /* Authorize the FPEC of Bank1 Access */ + FLASH->KEYR = FLASH_KEY1; + FLASH->KEYR = FLASH_KEY2; + +#ifdef STM32F10X_XL + /* Authorize the FPEC of Bank2 Access */ + FLASH->KEYR2 = FLASH_KEY1; + FLASH->KEYR2 = FLASH_KEY2; +#endif /* STM32F10X_XL */ +} +/** + * @brief Unlocks the FLASH Bank1 Program Erase Controller. + * @note This function can be used for all STM32F10x devices. + * - For STM32F10X_XL devices this function unlocks Bank1. + * - For all other devices it unlocks Bank1 and it is + * equivalent to FLASH_Unlock function. + * @param None + * @retval None + */ +void FLASH_UnlockBank1(void) +{ + /* Authorize the FPEC of Bank1 Access */ + FLASH->KEYR = FLASH_KEY1; + FLASH->KEYR = FLASH_KEY2; +} + +#ifdef STM32F10X_XL +/** + * @brief Unlocks the FLASH Bank2 Program Erase Controller. + * @note This function can be used only for STM32F10X_XL density devices. + * @param None + * @retval None + */ +void FLASH_UnlockBank2(void) +{ + /* Authorize the FPEC of Bank2 Access */ + FLASH->KEYR2 = FLASH_KEY1; + FLASH->KEYR2 = FLASH_KEY2; + +} +#endif /* STM32F10X_XL */ + +/** + * @brief Locks the FLASH Program Erase Controller. + * @note This function can be used for all STM32F10x devices. + * - For STM32F10X_XL devices this function Locks Bank1 and Bank2. + * - For all other devices it Locks Bank1 and it is equivalent + * to FLASH_LockBank1 function. + * @param None + * @retval None + */ +void FLASH_Lock(void) +{ + /* Set the Lock Bit to lock the FPEC and the CR of Bank1 */ + FLASH->CR |= CR_LOCK_Set; + +#ifdef STM32F10X_XL + /* Set the Lock Bit to lock the FPEC and the CR of Bank2 */ + FLASH->CR2 |= CR_LOCK_Set; +#endif /* STM32F10X_XL */ +} + +/** + * @brief Locks the FLASH Bank1 Program Erase Controller. + * @note this function can be used for all STM32F10x devices. + * - For STM32F10X_XL devices this function Locks Bank1. + * - For all other devices it Locks Bank1 and it is equivalent + * to FLASH_Lock function. + * @param None + * @retval None + */ +void FLASH_LockBank1(void) +{ + /* Set the Lock Bit to lock the FPEC and the CR of Bank1 */ + FLASH->CR |= CR_LOCK_Set; +} + +#ifdef STM32F10X_XL +/** + * @brief Locks the FLASH Bank2 Program Erase Controller. + * @note This function can be used only for STM32F10X_XL density devices. + * @param None + * @retval None + */ +void FLASH_LockBank2(void) +{ + /* Set the Lock Bit to lock the FPEC and the CR of Bank2 */ + FLASH->CR2 |= CR_LOCK_Set; +} +#endif /* STM32F10X_XL */ + +/** + * @brief Erases a specified FLASH page. + * @note This function can be used for all STM32F10x devices. + * @param Page_Address: The page address to be erased. + * @retval FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PG, + * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. + */ +FLASH_Status FLASH_ErasePage(uint32_t Page_Address) +{ + FLASH_Status status = FLASH_COMPLETE; + /* Check the parameters */ + assert_param(IS_FLASH_ADDRESS(Page_Address)); + +#ifdef STM32F10X_XL + if(Page_Address < FLASH_BANK1_END_ADDRESS) + { + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastBank1Operation(EraseTimeout); + if(status == FLASH_COMPLETE) + { + /* if the previous operation is completed, proceed to erase the page */ + FLASH->CR|= CR_PER_Set; + FLASH->AR = Page_Address; + FLASH->CR|= CR_STRT_Set; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastBank1Operation(EraseTimeout); + + /* Disable the PER Bit */ + FLASH->CR &= CR_PER_Reset; + } + } + else + { + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastBank2Operation(EraseTimeout); + if(status == FLASH_COMPLETE) + { + /* if the previous operation is completed, proceed to erase the page */ + FLASH->CR2|= CR_PER_Set; + FLASH->AR2 = Page_Address; + FLASH->CR2|= CR_STRT_Set; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastBank2Operation(EraseTimeout); + + /* Disable the PER Bit */ + FLASH->CR2 &= CR_PER_Reset; + } + } +#else + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(EraseTimeout); + + if(status == FLASH_COMPLETE) + { + /* if the previous operation is completed, proceed to erase the page */ + FLASH->CR|= CR_PER_Set; + FLASH->AR = Page_Address; + FLASH->CR|= CR_STRT_Set; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(EraseTimeout); + + /* Disable the PER Bit */ + FLASH->CR &= CR_PER_Reset; + } +#endif /* STM32F10X_XL */ + + /* Return the Erase Status */ + return status; +} + +/** + * @brief Erases all FLASH pages. + * @note This function can be used for all STM32F10x devices. + * @param None + * @retval FLASH Status: The returned value can be: FLASH_ERROR_PG, + * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. + */ +FLASH_Status FLASH_EraseAllPages(void) +{ + FLASH_Status status = FLASH_COMPLETE; + +#ifdef STM32F10X_XL + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastBank1Operation(EraseTimeout); + + if(status == FLASH_COMPLETE) + { + /* if the previous operation is completed, proceed to erase all pages */ + FLASH->CR |= CR_MER_Set; + FLASH->CR |= CR_STRT_Set; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastBank1Operation(EraseTimeout); + + /* Disable the MER Bit */ + FLASH->CR &= CR_MER_Reset; + } + if(status == FLASH_COMPLETE) + { + /* if the previous operation is completed, proceed to erase all pages */ + FLASH->CR2 |= CR_MER_Set; + FLASH->CR2 |= CR_STRT_Set; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastBank2Operation(EraseTimeout); + + /* Disable the MER Bit */ + FLASH->CR2 &= CR_MER_Reset; + } +#else + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(EraseTimeout); + if(status == FLASH_COMPLETE) + { + /* if the previous operation is completed, proceed to erase all pages */ + FLASH->CR |= CR_MER_Set; + FLASH->CR |= CR_STRT_Set; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(EraseTimeout); + + /* Disable the MER Bit */ + FLASH->CR &= CR_MER_Reset; + } +#endif /* STM32F10X_XL */ + + /* Return the Erase Status */ + return status; +} + +/** + * @brief Erases all Bank1 FLASH pages. + * @note This function can be used for all STM32F10x devices. + * - For STM32F10X_XL devices this function erases all Bank1 pages. + * - For all other devices it erases all Bank1 pages and it is equivalent + * to FLASH_EraseAllPages function. + * @param None + * @retval FLASH Status: The returned value can be: FLASH_ERROR_PG, + * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. + */ +FLASH_Status FLASH_EraseAllBank1Pages(void) +{ + FLASH_Status status = FLASH_COMPLETE; + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastBank1Operation(EraseTimeout); + + if(status == FLASH_COMPLETE) + { + /* if the previous operation is completed, proceed to erase all pages */ + FLASH->CR |= CR_MER_Set; + FLASH->CR |= CR_STRT_Set; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastBank1Operation(EraseTimeout); + + /* Disable the MER Bit */ + FLASH->CR &= CR_MER_Reset; + } + /* Return the Erase Status */ + return status; +} + +#ifdef STM32F10X_XL +/** + * @brief Erases all Bank2 FLASH pages. + * @note This function can be used only for STM32F10x_XL density devices. + * @param None + * @retval FLASH Status: The returned value can be: FLASH_ERROR_PG, + * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. + */ +FLASH_Status FLASH_EraseAllBank2Pages(void) +{ + FLASH_Status status = FLASH_COMPLETE; + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastBank2Operation(EraseTimeout); + + if(status == FLASH_COMPLETE) + { + /* if the previous operation is completed, proceed to erase all pages */ + FLASH->CR2 |= CR_MER_Set; + FLASH->CR2 |= CR_STRT_Set; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastBank2Operation(EraseTimeout); + + /* Disable the MER Bit */ + FLASH->CR2 &= CR_MER_Reset; + } + /* Return the Erase Status */ + return status; +} +#endif /* STM32F10X_XL */ + +/** + * @brief Erases the FLASH option bytes. + * @note This functions erases all option bytes except the Read protection (RDP). + * @note This function can be used for all STM32F10x devices. + * @param None + * @retval FLASH Status: The returned value can be: FLASH_ERROR_PG, + * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. + */ +FLASH_Status FLASH_EraseOptionBytes(void) +{ + uint16_t rdptmp = RDP_Key; + + FLASH_Status status = FLASH_COMPLETE; + + /* Get the actual read protection Option Byte value */ + if(FLASH_GetReadOutProtectionStatus() != RESET) + { + rdptmp = 0x00; + } + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(EraseTimeout); + if(status == FLASH_COMPLETE) + { + /* Authorize the small information block programming */ + FLASH->OPTKEYR = FLASH_KEY1; + FLASH->OPTKEYR = FLASH_KEY2; + + /* if the previous operation is completed, proceed to erase the option bytes */ + FLASH->CR |= CR_OPTER_Set; + FLASH->CR |= CR_STRT_Set; + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(EraseTimeout); + + if(status == FLASH_COMPLETE) + { + /* if the erase operation is completed, disable the OPTER Bit */ + FLASH->CR &= CR_OPTER_Reset; + + /* Enable the Option Bytes Programming operation */ + FLASH->CR |= CR_OPTPG_Set; + /* Restore the last read protection Option Byte value */ + OB->RDP = (uint16_t)rdptmp; + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(ProgramTimeout); + + if(status != FLASH_TIMEOUT) + { + /* if the program operation is completed, disable the OPTPG Bit */ + FLASH->CR &= CR_OPTPG_Reset; + } + } + else + { + if (status != FLASH_TIMEOUT) + { + /* Disable the OPTPG Bit */ + FLASH->CR &= CR_OPTPG_Reset; + } + } + } + /* Return the erase status */ + return status; +} + +/** + * @brief Programs a word at a specified address. + * @note This function can be used for all STM32F10x devices. + * @param Address: specifies the address to be programmed. + * @param Data: specifies the data to be programmed. + * @retval FLASH Status: The returned value can be: FLASH_ERROR_PG, + * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. + */ +FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data) +{ + FLASH_Status status = FLASH_COMPLETE; + __IO uint32_t tmp = 0; + + /* Check the parameters */ + assert_param(IS_FLASH_ADDRESS(Address)); + +#ifdef STM32F10X_XL + if(Address < FLASH_BANK1_END_ADDRESS - 2) + { + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastBank1Operation(ProgramTimeout); + if(status == FLASH_COMPLETE) + { + /* if the previous operation is completed, proceed to program the new first + half word */ + FLASH->CR |= CR_PG_Set; + + *(__IO uint16_t*)Address = (uint16_t)Data; + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(ProgramTimeout); + + if(status == FLASH_COMPLETE) + { + /* if the previous operation is completed, proceed to program the new second + half word */ + tmp = Address + 2; + + *(__IO uint16_t*) tmp = Data >> 16; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(ProgramTimeout); + + /* Disable the PG Bit */ + FLASH->CR &= CR_PG_Reset; + } + else + { + /* Disable the PG Bit */ + FLASH->CR &= CR_PG_Reset; + } + } + } + else if(Address == (FLASH_BANK1_END_ADDRESS - 1)) + { + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastBank1Operation(ProgramTimeout); + + if(status == FLASH_COMPLETE) + { + /* if the previous operation is completed, proceed to program the new first + half word */ + FLASH->CR |= CR_PG_Set; + + *(__IO uint16_t*)Address = (uint16_t)Data; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastBank1Operation(ProgramTimeout); + + /* Disable the PG Bit */ + FLASH->CR &= CR_PG_Reset; + } + else + { + /* Disable the PG Bit */ + FLASH->CR &= CR_PG_Reset; + } + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastBank2Operation(ProgramTimeout); + + if(status == FLASH_COMPLETE) + { + /* if the previous operation is completed, proceed to program the new second + half word */ + FLASH->CR2 |= CR_PG_Set; + tmp = Address + 2; + + *(__IO uint16_t*) tmp = Data >> 16; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastBank2Operation(ProgramTimeout); + + /* Disable the PG Bit */ + FLASH->CR2 &= CR_PG_Reset; + } + else + { + /* Disable the PG Bit */ + FLASH->CR2 &= CR_PG_Reset; + } + } + else + { + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastBank2Operation(ProgramTimeout); + + if(status == FLASH_COMPLETE) + { + /* if the previous operation is completed, proceed to program the new first + half word */ + FLASH->CR2 |= CR_PG_Set; + + *(__IO uint16_t*)Address = (uint16_t)Data; + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastBank2Operation(ProgramTimeout); + + if(status == FLASH_COMPLETE) + { + /* if the previous operation is completed, proceed to program the new second + half word */ + tmp = Address + 2; + + *(__IO uint16_t*) tmp = Data >> 16; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastBank2Operation(ProgramTimeout); + + /* Disable the PG Bit */ + FLASH->CR2 &= CR_PG_Reset; + } + else + { + /* Disable the PG Bit */ + FLASH->CR2 &= CR_PG_Reset; + } + } + } +#else + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(ProgramTimeout); + + if(status == FLASH_COMPLETE) + { + /* if the previous operation is completed, proceed to program the new first + half word */ + FLASH->CR |= CR_PG_Set; + + *(__IO uint16_t*)Address = (uint16_t)Data; + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(ProgramTimeout); + + if(status == FLASH_COMPLETE) + { + /* if the previous operation is completed, proceed to program the new second + half word */ + tmp = Address + 2; + + *(__IO uint16_t*) tmp = Data >> 16; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(ProgramTimeout); + + /* Disable the PG Bit */ + FLASH->CR &= CR_PG_Reset; + } + else + { + /* Disable the PG Bit */ + FLASH->CR &= CR_PG_Reset; + } + } +#endif /* STM32F10X_XL */ + + /* Return the Program Status */ + return status; +} + +/** + * @brief Programs a half word at a specified address. + * @note This function can be used for all STM32F10x devices. + * @param Address: specifies the address to be programmed. + * @param Data: specifies the data to be programmed. + * @retval FLASH Status: The returned value can be: FLASH_ERROR_PG, + * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. + */ +FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data) +{ + FLASH_Status status = FLASH_COMPLETE; + /* Check the parameters */ + assert_param(IS_FLASH_ADDRESS(Address)); + +#ifdef STM32F10X_XL + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(ProgramTimeout); + + if(Address < FLASH_BANK1_END_ADDRESS) + { + if(status == FLASH_COMPLETE) + { + /* if the previous operation is completed, proceed to program the new data */ + FLASH->CR |= CR_PG_Set; + + *(__IO uint16_t*)Address = Data; + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastBank1Operation(ProgramTimeout); + + /* Disable the PG Bit */ + FLASH->CR &= CR_PG_Reset; + } + } + else + { + if(status == FLASH_COMPLETE) + { + /* if the previous operation is completed, proceed to program the new data */ + FLASH->CR2 |= CR_PG_Set; + + *(__IO uint16_t*)Address = Data; + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastBank2Operation(ProgramTimeout); + + /* Disable the PG Bit */ + FLASH->CR2 &= CR_PG_Reset; + } + } +#else + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(ProgramTimeout); + + if(status == FLASH_COMPLETE) + { + /* if the previous operation is completed, proceed to program the new data */ + FLASH->CR |= CR_PG_Set; + + *(__IO uint16_t*)Address = Data; + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(ProgramTimeout); + + /* Disable the PG Bit */ + FLASH->CR &= CR_PG_Reset; + } +#endif /* STM32F10X_XL */ + + /* Return the Program Status */ + return status; +} + +/** + * @brief Programs a half word at a specified Option Byte Data address. + * @note This function can be used for all STM32F10x devices. + * @param Address: specifies the address to be programmed. + * This parameter can be 0x1FFFF804 or 0x1FFFF806. + * @param Data: specifies the data to be programmed. + * @retval FLASH Status: The returned value can be: FLASH_ERROR_PG, + * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. + */ +FLASH_Status FLASH_ProgramOptionByteData(uint32_t Address, uint8_t Data) +{ + FLASH_Status status = FLASH_COMPLETE; + /* Check the parameters */ + assert_param(IS_OB_DATA_ADDRESS(Address)); + status = FLASH_WaitForLastOperation(ProgramTimeout); + + if(status == FLASH_COMPLETE) + { + /* Authorize the small information block programming */ + FLASH->OPTKEYR = FLASH_KEY1; + FLASH->OPTKEYR = FLASH_KEY2; + /* Enables the Option Bytes Programming operation */ + FLASH->CR |= CR_OPTPG_Set; + *(__IO uint16_t*)Address = Data; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(ProgramTimeout); + if(status != FLASH_TIMEOUT) + { + /* if the program operation is completed, disable the OPTPG Bit */ + FLASH->CR &= CR_OPTPG_Reset; + } + } + /* Return the Option Byte Data Program Status */ + return status; +} + +/** + * @brief Write protects the desired pages + * @note This function can be used for all STM32F10x devices. + * @param FLASH_Pages: specifies the address of the pages to be write protected. + * This parameter can be: + * @arg For @b STM32_Low-density_devices: value between FLASH_WRProt_Pages0to3 and FLASH_WRProt_Pages28to31 + * @arg For @b STM32_Medium-density_devices: value between FLASH_WRProt_Pages0to3 + * and FLASH_WRProt_Pages124to127 + * @arg For @b STM32_High-density_devices: value between FLASH_WRProt_Pages0to1 and + * FLASH_WRProt_Pages60to61 or FLASH_WRProt_Pages62to255 + * @arg For @b STM32_Connectivity_line_devices: value between FLASH_WRProt_Pages0to1 and + * FLASH_WRProt_Pages60to61 or FLASH_WRProt_Pages62to127 + * @arg For @b STM32_XL-density_devices: value between FLASH_WRProt_Pages0to1 and + * FLASH_WRProt_Pages60to61 or FLASH_WRProt_Pages62to511 + * @arg FLASH_WRProt_AllPages + * @retval FLASH Status: The returned value can be: FLASH_ERROR_PG, + * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. + */ +FLASH_Status FLASH_EnableWriteProtection(uint32_t FLASH_Pages) +{ + uint16_t WRP0_Data = 0xFFFF, WRP1_Data = 0xFFFF, WRP2_Data = 0xFFFF, WRP3_Data = 0xFFFF; + + FLASH_Status status = FLASH_COMPLETE; + + /* Check the parameters */ + assert_param(IS_FLASH_WRPROT_PAGE(FLASH_Pages)); + + FLASH_Pages = (uint32_t)(~FLASH_Pages); + WRP0_Data = (uint16_t)(FLASH_Pages & WRP0_Mask); + WRP1_Data = (uint16_t)((FLASH_Pages & WRP1_Mask) >> 8); + WRP2_Data = (uint16_t)((FLASH_Pages & WRP2_Mask) >> 16); + WRP3_Data = (uint16_t)((FLASH_Pages & WRP3_Mask) >> 24); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(ProgramTimeout); + + if(status == FLASH_COMPLETE) + { + /* Authorizes the small information block programming */ + FLASH->OPTKEYR = FLASH_KEY1; + FLASH->OPTKEYR = FLASH_KEY2; + FLASH->CR |= CR_OPTPG_Set; + if(WRP0_Data != 0xFF) + { + OB->WRP0 = WRP0_Data; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(ProgramTimeout); + } + if((status == FLASH_COMPLETE) && (WRP1_Data != 0xFF)) + { + OB->WRP1 = WRP1_Data; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(ProgramTimeout); + } + if((status == FLASH_COMPLETE) && (WRP2_Data != 0xFF)) + { + OB->WRP2 = WRP2_Data; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(ProgramTimeout); + } + + if((status == FLASH_COMPLETE)&& (WRP3_Data != 0xFF)) + { + OB->WRP3 = WRP3_Data; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(ProgramTimeout); + } + + if(status != FLASH_TIMEOUT) + { + /* if the program operation is completed, disable the OPTPG Bit */ + FLASH->CR &= CR_OPTPG_Reset; + } + } + /* Return the write protection operation Status */ + return status; +} + +/** + * @brief Enables or disables the read out protection. + * @note If the user has already programmed the other option bytes before calling + * this function, he must re-program them since this function erases all option bytes. + * @note This function can be used for all STM32F10x devices. + * @param Newstate: new state of the ReadOut Protection. + * This parameter can be: ENABLE or DISABLE. + * @retval FLASH Status: The returned value can be: FLASH_ERROR_PG, + * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. + */ +FLASH_Status FLASH_ReadOutProtection(FunctionalState NewState) +{ + FLASH_Status status = FLASH_COMPLETE; + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + status = FLASH_WaitForLastOperation(EraseTimeout); + if(status == FLASH_COMPLETE) + { + /* Authorizes the small information block programming */ + FLASH->OPTKEYR = FLASH_KEY1; + FLASH->OPTKEYR = FLASH_KEY2; + FLASH->CR |= CR_OPTER_Set; + FLASH->CR |= CR_STRT_Set; + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(EraseTimeout); + if(status == FLASH_COMPLETE) + { + /* if the erase operation is completed, disable the OPTER Bit */ + FLASH->CR &= CR_OPTER_Reset; + /* Enable the Option Bytes Programming operation */ + FLASH->CR |= CR_OPTPG_Set; + if(NewState != DISABLE) + { + OB->RDP = 0x00; + } + else + { + OB->RDP = RDP_Key; + } + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(EraseTimeout); + + if(status != FLASH_TIMEOUT) + { + /* if the program operation is completed, disable the OPTPG Bit */ + FLASH->CR &= CR_OPTPG_Reset; + } + } + else + { + if(status != FLASH_TIMEOUT) + { + /* Disable the OPTER Bit */ + FLASH->CR &= CR_OPTER_Reset; + } + } + } + /* Return the protection operation Status */ + return status; +} + +/** + * @brief Programs the FLASH User Option Byte: IWDG_SW / RST_STOP / RST_STDBY. + * @note This function can be used for all STM32F10x devices. + * @param OB_IWDG: Selects the IWDG mode + * This parameter can be one of the following values: + * @arg OB_IWDG_SW: Software IWDG selected + * @arg OB_IWDG_HW: Hardware IWDG selected + * @param OB_STOP: Reset event when entering STOP mode. + * This parameter can be one of the following values: + * @arg OB_STOP_NoRST: No reset generated when entering in STOP + * @arg OB_STOP_RST: Reset generated when entering in STOP + * @param OB_STDBY: Reset event when entering Standby mode. + * This parameter can be one of the following values: + * @arg OB_STDBY_NoRST: No reset generated when entering in STANDBY + * @arg OB_STDBY_RST: Reset generated when entering in STANDBY + * @retval FLASH Status: The returned value can be: FLASH_ERROR_PG, + * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. + */ +FLASH_Status FLASH_UserOptionByteConfig(uint16_t OB_IWDG, uint16_t OB_STOP, uint16_t OB_STDBY) +{ + FLASH_Status status = FLASH_COMPLETE; + + /* Check the parameters */ + assert_param(IS_OB_IWDG_SOURCE(OB_IWDG)); + assert_param(IS_OB_STOP_SOURCE(OB_STOP)); + assert_param(IS_OB_STDBY_SOURCE(OB_STDBY)); + + /* Authorize the small information block programming */ + FLASH->OPTKEYR = FLASH_KEY1; + FLASH->OPTKEYR = FLASH_KEY2; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(ProgramTimeout); + + if(status == FLASH_COMPLETE) + { + /* Enable the Option Bytes Programming operation */ + FLASH->CR |= CR_OPTPG_Set; + + OB->USER = OB_IWDG | (uint16_t)(OB_STOP | (uint16_t)(OB_STDBY | ((uint16_t)0xF8))); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(ProgramTimeout); + if(status != FLASH_TIMEOUT) + { + /* if the program operation is completed, disable the OPTPG Bit */ + FLASH->CR &= CR_OPTPG_Reset; + } + } + /* Return the Option Byte program Status */ + return status; +} + +#ifdef STM32F10X_XL +/** + * @brief Configures to boot from Bank1 or Bank2. + * @note This function can be used only for STM32F10x_XL density devices. + * @param FLASH_BOOT: select the FLASH Bank to boot from. + * This parameter can be one of the following values: + * @arg FLASH_BOOT_Bank1: At startup, if boot pins are set in boot from user Flash + * position and this parameter is selected the device will boot from Bank1(Default). + * @arg FLASH_BOOT_Bank2: At startup, if boot pins are set in boot from user Flash + * position and this parameter is selected the device will boot from Bank2 or Bank1, + * depending on the activation of the bank. The active banks are checked in + * the following order: Bank2, followed by Bank1. + * The active bank is recognized by the value programmed at the base address + * of the respective bank (corresponding to the initial stack pointer value + * in the interrupt vector table). + * For more information, please refer to AN2606 from www.st.com. + * @retval FLASH Status: The returned value can be: FLASH_ERROR_PG, + * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. + */ +FLASH_Status FLASH_BootConfig(uint16_t FLASH_BOOT) +{ + FLASH_Status status = FLASH_COMPLETE; + assert_param(IS_FLASH_BOOT(FLASH_BOOT)); + /* Authorize the small information block programming */ + FLASH->OPTKEYR = FLASH_KEY1; + FLASH->OPTKEYR = FLASH_KEY2; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(ProgramTimeout); + + if(status == FLASH_COMPLETE) + { + /* Enable the Option Bytes Programming operation */ + FLASH->CR |= CR_OPTPG_Set; + + if(FLASH_BOOT == FLASH_BOOT_Bank1) + { + OB->USER |= OB_USER_BFB2; + } + else + { + OB->USER &= (uint16_t)(~(uint16_t)(OB_USER_BFB2)); + } + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(ProgramTimeout); + if(status != FLASH_TIMEOUT) + { + /* if the program operation is completed, disable the OPTPG Bit */ + FLASH->CR &= CR_OPTPG_Reset; + } + } + /* Return the Option Byte program Status */ + return status; +} +#endif /* STM32F10X_XL */ + +/** + * @brief Returns the FLASH User Option Bytes values. + * @note This function can be used for all STM32F10x devices. + * @param None + * @retval The FLASH User Option Bytes values:IWDG_SW(Bit0), RST_STOP(Bit1) + * and RST_STDBY(Bit2). + */ +uint32_t FLASH_GetUserOptionByte(void) +{ + /* Return the User Option Byte */ + return (uint32_t)(FLASH->OBR >> 2); +} + +/** + * @brief Returns the FLASH Write Protection Option Bytes Register value. + * @note This function can be used for all STM32F10x devices. + * @param None + * @retval The FLASH Write Protection Option Bytes Register value + */ +uint32_t FLASH_GetWriteProtectionOptionByte(void) +{ + /* Return the Flash write protection Register value */ + return (uint32_t)(FLASH->WRPR); +} + +/** + * @brief Checks whether the FLASH Read Out Protection Status is set or not. + * @note This function can be used for all STM32F10x devices. + * @param None + * @retval FLASH ReadOut Protection Status(SET or RESET) + */ +FlagStatus FLASH_GetReadOutProtectionStatus(void) +{ + FlagStatus readoutstatus = RESET; + if ((FLASH->OBR & RDPRT_Mask) != (uint32_t)RESET) + { + readoutstatus = SET; + } + else + { + readoutstatus = RESET; + } + return readoutstatus; +} + +/** + * @brief Checks whether the FLASH Prefetch Buffer status is set or not. + * @note This function can be used for all STM32F10x devices. + * @param None + * @retval FLASH Prefetch Buffer Status (SET or RESET). + */ +FlagStatus FLASH_GetPrefetchBufferStatus(void) +{ + FlagStatus bitstatus = RESET; + + if ((FLASH->ACR & ACR_PRFTBS_Mask) != (uint32_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + /* Return the new state of FLASH Prefetch Buffer Status (SET or RESET) */ + return bitstatus; +} + +/** + * @brief Enables or disables the specified FLASH interrupts. + * @note This function can be used for all STM32F10x devices. + * - For STM32F10X_XL devices, enables or disables the specified FLASH interrupts + for Bank1 and Bank2. + * - For other devices it enables or disables the specified FLASH interrupts for Bank1. + * @param FLASH_IT: specifies the FLASH interrupt sources to be enabled or disabled. + * This parameter can be any combination of the following values: + * @arg FLASH_IT_ERROR: FLASH Error Interrupt + * @arg FLASH_IT_EOP: FLASH end of operation Interrupt + * @param NewState: new state of the specified Flash interrupts. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void FLASH_ITConfig(uint32_t FLASH_IT, FunctionalState NewState) +{ +#ifdef STM32F10X_XL + /* Check the parameters */ + assert_param(IS_FLASH_IT(FLASH_IT)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if((FLASH_IT & 0x80000000) != 0x0) + { + if(NewState != DISABLE) + { + /* Enable the interrupt sources */ + FLASH->CR2 |= (FLASH_IT & 0x7FFFFFFF); + } + else + { + /* Disable the interrupt sources */ + FLASH->CR2 &= ~(uint32_t)(FLASH_IT & 0x7FFFFFFF); + } + } + else + { + if(NewState != DISABLE) + { + /* Enable the interrupt sources */ + FLASH->CR |= FLASH_IT; + } + else + { + /* Disable the interrupt sources */ + FLASH->CR &= ~(uint32_t)FLASH_IT; + } + } +#else + /* Check the parameters */ + assert_param(IS_FLASH_IT(FLASH_IT)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if(NewState != DISABLE) + { + /* Enable the interrupt sources */ + FLASH->CR |= FLASH_IT; + } + else + { + /* Disable the interrupt sources */ + FLASH->CR &= ~(uint32_t)FLASH_IT; + } +#endif /* STM32F10X_XL */ +} + +/** + * @brief Checks whether the specified FLASH flag is set or not. + * @note This function can be used for all STM32F10x devices. + * - For STM32F10X_XL devices, this function checks whether the specified + * Bank1 or Bank2 flag is set or not. + * - For other devices, it checks whether the specified Bank1 flag is + * set or not. + * @param FLASH_FLAG: specifies the FLASH flag to check. + * This parameter can be one of the following values: + * @arg FLASH_FLAG_BSY: FLASH Busy flag + * @arg FLASH_FLAG_PGERR: FLASH Program error flag + * @arg FLASH_FLAG_WRPRTERR: FLASH Write protected error flag + * @arg FLASH_FLAG_EOP: FLASH End of Operation flag + * @arg FLASH_FLAG_OPTERR: FLASH Option Byte error flag + * @retval The new state of FLASH_FLAG (SET or RESET). + */ +FlagStatus FLASH_GetFlagStatus(uint32_t FLASH_FLAG) +{ + FlagStatus bitstatus = RESET; + +#ifdef STM32F10X_XL + /* Check the parameters */ + assert_param(IS_FLASH_GET_FLAG(FLASH_FLAG)) ; + if(FLASH_FLAG == FLASH_FLAG_OPTERR) + { + if((FLASH->OBR & FLASH_FLAG_OPTERR) != (uint32_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + } + else + { + if((FLASH_FLAG & 0x80000000) != 0x0) + { + if((FLASH->SR2 & FLASH_FLAG) != (uint32_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + } + else + { + if((FLASH->SR & FLASH_FLAG) != (uint32_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + } + } +#else + /* Check the parameters */ + assert_param(IS_FLASH_GET_FLAG(FLASH_FLAG)) ; + if(FLASH_FLAG == FLASH_FLAG_OPTERR) + { + if((FLASH->OBR & FLASH_FLAG_OPTERR) != (uint32_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + } + else + { + if((FLASH->SR & FLASH_FLAG) != (uint32_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + } +#endif /* STM32F10X_XL */ + + /* Return the new state of FLASH_FLAG (SET or RESET) */ + return bitstatus; +} + +/** + * @brief Clears the FLASH's pending flags. + * @note This function can be used for all STM32F10x devices. + * - For STM32F10X_XL devices, this function clears Bank1 or Bank2s pending flags + * - For other devices, it clears Bank1s pending flags. + * @param FLASH_FLAG: specifies the FLASH flags to clear. + * This parameter can be any combination of the following values: + * @arg FLASH_FLAG_PGERR: FLASH Program error flag + * @arg FLASH_FLAG_WRPRTERR: FLASH Write protected error flag + * @arg FLASH_FLAG_EOP: FLASH End of Operation flag + * @retval None + */ +void FLASH_ClearFlag(uint32_t FLASH_FLAG) +{ +#ifdef STM32F10X_XL + /* Check the parameters */ + assert_param(IS_FLASH_CLEAR_FLAG(FLASH_FLAG)) ; + + if((FLASH_FLAG & 0x80000000) != 0x0) + { + /* Clear the flags */ + FLASH->SR2 = FLASH_FLAG; + } + else + { + /* Clear the flags */ + FLASH->SR = FLASH_FLAG; + } + +#else + /* Check the parameters */ + assert_param(IS_FLASH_CLEAR_FLAG(FLASH_FLAG)) ; + + /* Clear the flags */ + FLASH->SR = FLASH_FLAG; +#endif /* STM32F10X_XL */ +} + +/** + * @brief Returns the FLASH Status. + * @note This function can be used for all STM32F10x devices, it is equivalent + * to FLASH_GetBank1Status function. + * @param None + * @retval FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PG, + * FLASH_ERROR_WRP or FLASH_COMPLETE + */ +FLASH_Status FLASH_GetStatus(void) +{ + FLASH_Status flashstatus = FLASH_COMPLETE; + + if((FLASH->SR & FLASH_FLAG_BSY) == FLASH_FLAG_BSY) + { + flashstatus = FLASH_BUSY; + } + else + { + if((FLASH->SR & FLASH_FLAG_PGERR) != 0) + { + flashstatus = FLASH_ERROR_PG; + } + else + { + if((FLASH->SR & FLASH_FLAG_WRPRTERR) != 0 ) + { + flashstatus = FLASH_ERROR_WRP; + } + else + { + flashstatus = FLASH_COMPLETE; + } + } + } + /* Return the Flash Status */ + return flashstatus; +} + +/** + * @brief Returns the FLASH Bank1 Status. + * @note This function can be used for all STM32F10x devices, it is equivalent + * to FLASH_GetStatus function. + * @param None + * @retval FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PG, + * FLASH_ERROR_WRP or FLASH_COMPLETE + */ +FLASH_Status FLASH_GetBank1Status(void) +{ + FLASH_Status flashstatus = FLASH_COMPLETE; + + if((FLASH->SR & FLASH_FLAG_BANK1_BSY) == FLASH_FLAG_BSY) + { + flashstatus = FLASH_BUSY; + } + else + { + if((FLASH->SR & FLASH_FLAG_BANK1_PGERR) != 0) + { + flashstatus = FLASH_ERROR_PG; + } + else + { + if((FLASH->SR & FLASH_FLAG_BANK1_WRPRTERR) != 0 ) + { + flashstatus = FLASH_ERROR_WRP; + } + else + { + flashstatus = FLASH_COMPLETE; + } + } + } + /* Return the Flash Status */ + return flashstatus; +} + +#ifdef STM32F10X_XL +/** + * @brief Returns the FLASH Bank2 Status. + * @note This function can be used for STM32F10x_XL density devices. + * @param None + * @retval FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PG, + * FLASH_ERROR_WRP or FLASH_COMPLETE + */ +FLASH_Status FLASH_GetBank2Status(void) +{ + FLASH_Status flashstatus = FLASH_COMPLETE; + + if((FLASH->SR2 & (FLASH_FLAG_BANK2_BSY & 0x7FFFFFFF)) == (FLASH_FLAG_BANK2_BSY & 0x7FFFFFFF)) + { + flashstatus = FLASH_BUSY; + } + else + { + if((FLASH->SR2 & (FLASH_FLAG_BANK2_PGERR & 0x7FFFFFFF)) != 0) + { + flashstatus = FLASH_ERROR_PG; + } + else + { + if((FLASH->SR2 & (FLASH_FLAG_BANK2_WRPRTERR & 0x7FFFFFFF)) != 0 ) + { + flashstatus = FLASH_ERROR_WRP; + } + else + { + flashstatus = FLASH_COMPLETE; + } + } + } + /* Return the Flash Status */ + return flashstatus; +} +#endif /* STM32F10X_XL */ +/** + * @brief Waits for a Flash operation to complete or a TIMEOUT to occur. + * @note This function can be used for all STM32F10x devices, + * it is equivalent to FLASH_WaitForLastBank1Operation. + * - For STM32F10X_XL devices this function waits for a Bank1 Flash operation + * to complete or a TIMEOUT to occur. + * - For all other devices it waits for a Flash operation to complete + * or a TIMEOUT to occur. + * @param Timeout: FLASH programming Timeout + * @retval FLASH Status: The returned value can be: FLASH_ERROR_PG, + * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. + */ +FLASH_Status FLASH_WaitForLastOperation(uint32_t Timeout) +{ + FLASH_Status status = FLASH_COMPLETE; + + /* Check for the Flash Status */ + status = FLASH_GetBank1Status(); + /* Wait for a Flash operation to complete or a TIMEOUT to occur */ + while((status == FLASH_BUSY) && (Timeout != 0x00)) + { + status = FLASH_GetBank1Status(); + Timeout--; + } + if(Timeout == 0x00 ) + { + status = FLASH_TIMEOUT; + } + /* Return the operation status */ + return status; +} + +/** + * @brief Waits for a Flash operation on Bank1 to complete or a TIMEOUT to occur. + * @note This function can be used for all STM32F10x devices, + * it is equivalent to FLASH_WaitForLastOperation. + * @param Timeout: FLASH programming Timeout + * @retval FLASH Status: The returned value can be: FLASH_ERROR_PG, + * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. + */ +FLASH_Status FLASH_WaitForLastBank1Operation(uint32_t Timeout) +{ + FLASH_Status status = FLASH_COMPLETE; + + /* Check for the Flash Status */ + status = FLASH_GetBank1Status(); + /* Wait for a Flash operation to complete or a TIMEOUT to occur */ + while((status == FLASH_FLAG_BANK1_BSY) && (Timeout != 0x00)) + { + status = FLASH_GetBank1Status(); + Timeout--; + } + if(Timeout == 0x00 ) + { + status = FLASH_TIMEOUT; + } + /* Return the operation status */ + return status; +} + +#ifdef STM32F10X_XL +/** + * @brief Waits for a Flash operation on Bank2 to complete or a TIMEOUT to occur. + * @note This function can be used only for STM32F10x_XL density devices. + * @param Timeout: FLASH programming Timeout + * @retval FLASH Status: The returned value can be: FLASH_ERROR_PG, + * FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. + */ +FLASH_Status FLASH_WaitForLastBank2Operation(uint32_t Timeout) +{ + FLASH_Status status = FLASH_COMPLETE; + + /* Check for the Flash Status */ + status = FLASH_GetBank2Status(); + /* Wait for a Flash operation to complete or a TIMEOUT to occur */ + while((status == (FLASH_FLAG_BANK2_BSY & 0x7FFFFFFF)) && (Timeout != 0x00)) + { + status = FLASH_GetBank2Status(); + Timeout--; + } + if(Timeout == 0x00 ) + { + status = FLASH_TIMEOUT; + } + /* Return the operation status */ + return status; +} +#endif /* STM32F10X_XL */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_fsmc.c b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_fsmc.c new file mode 100644 index 0000000..51669ee --- /dev/null +++ b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_fsmc.c @@ -0,0 +1,866 @@ +/** + ****************************************************************************** + * @file stm32f10x_fsmc.c + * @author MCD Application Team + * @version V3.5.0 + * @date 11-March-2011 + * @brief This file provides all the FSMC firmware functions. + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

    © COPYRIGHT 2011 STMicroelectronics

    + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f10x_fsmc.h" +#include "stm32f10x_rcc.h" + +/** @addtogroup STM32F10x_StdPeriph_Driver + * @{ + */ + +/** @defgroup FSMC + * @brief FSMC driver modules + * @{ + */ + +/** @defgroup FSMC_Private_TypesDefinitions + * @{ + */ +/** + * @} + */ + +/** @defgroup FSMC_Private_Defines + * @{ + */ + +/* --------------------- FSMC registers bit mask ---------------------------- */ + +/* FSMC BCRx Mask */ +#define BCR_MBKEN_Set ((uint32_t)0x00000001) +#define BCR_MBKEN_Reset ((uint32_t)0x000FFFFE) +#define BCR_FACCEN_Set ((uint32_t)0x00000040) + +/* FSMC PCRx Mask */ +#define PCR_PBKEN_Set ((uint32_t)0x00000004) +#define PCR_PBKEN_Reset ((uint32_t)0x000FFFFB) +#define PCR_ECCEN_Set ((uint32_t)0x00000040) +#define PCR_ECCEN_Reset ((uint32_t)0x000FFFBF) +#define PCR_MemoryType_NAND ((uint32_t)0x00000008) +/** + * @} + */ + +/** @defgroup FSMC_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup FSMC_Private_Variables + * @{ + */ + +/** + * @} + */ + +/** @defgroup FSMC_Private_FunctionPrototypes + * @{ + */ + +/** + * @} + */ + +/** @defgroup FSMC_Private_Functions + * @{ + */ + +/** + * @brief Deinitializes the FSMC NOR/SRAM Banks registers to their default + * reset values. + * @param FSMC_Bank: specifies the FSMC Bank to be used + * This parameter can be one of the following values: + * @arg FSMC_Bank1_NORSRAM1: FSMC Bank1 NOR/SRAM1 + * @arg FSMC_Bank1_NORSRAM2: FSMC Bank1 NOR/SRAM2 + * @arg FSMC_Bank1_NORSRAM3: FSMC Bank1 NOR/SRAM3 + * @arg FSMC_Bank1_NORSRAM4: FSMC Bank1 NOR/SRAM4 + * @retval None + */ +void FSMC_NORSRAMDeInit(uint32_t FSMC_Bank) +{ + /* Check the parameter */ + assert_param(IS_FSMC_NORSRAM_BANK(FSMC_Bank)); + + /* FSMC_Bank1_NORSRAM1 */ + if(FSMC_Bank == FSMC_Bank1_NORSRAM1) + { + FSMC_Bank1->BTCR[FSMC_Bank] = 0x000030DB; + } + /* FSMC_Bank1_NORSRAM2, FSMC_Bank1_NORSRAM3 or FSMC_Bank1_NORSRAM4 */ + else + { + FSMC_Bank1->BTCR[FSMC_Bank] = 0x000030D2; + } + FSMC_Bank1->BTCR[FSMC_Bank + 1] = 0x0FFFFFFF; + FSMC_Bank1E->BWTR[FSMC_Bank] = 0x0FFFFFFF; +} + +/** + * @brief Deinitializes the FSMC NAND Banks registers to their default reset values. + * @param FSMC_Bank: specifies the FSMC Bank to be used + * This parameter can be one of the following values: + * @arg FSMC_Bank2_NAND: FSMC Bank2 NAND + * @arg FSMC_Bank3_NAND: FSMC Bank3 NAND + * @retval None + */ +void FSMC_NANDDeInit(uint32_t FSMC_Bank) +{ + /* Check the parameter */ + assert_param(IS_FSMC_NAND_BANK(FSMC_Bank)); + + if(FSMC_Bank == FSMC_Bank2_NAND) + { + /* Set the FSMC_Bank2 registers to their reset values */ + FSMC_Bank2->PCR2 = 0x00000018; + FSMC_Bank2->SR2 = 0x00000040; + FSMC_Bank2->PMEM2 = 0xFCFCFCFC; + FSMC_Bank2->PATT2 = 0xFCFCFCFC; + } + /* FSMC_Bank3_NAND */ + else + { + /* Set the FSMC_Bank3 registers to their reset values */ + FSMC_Bank3->PCR3 = 0x00000018; + FSMC_Bank3->SR3 = 0x00000040; + FSMC_Bank3->PMEM3 = 0xFCFCFCFC; + FSMC_Bank3->PATT3 = 0xFCFCFCFC; + } +} + +/** + * @brief Deinitializes the FSMC PCCARD Bank registers to their default reset values. + * @param None + * @retval None + */ +void FSMC_PCCARDDeInit(void) +{ + /* Set the FSMC_Bank4 registers to their reset values */ + FSMC_Bank4->PCR4 = 0x00000018; + FSMC_Bank4->SR4 = 0x00000000; + FSMC_Bank4->PMEM4 = 0xFCFCFCFC; + FSMC_Bank4->PATT4 = 0xFCFCFCFC; + FSMC_Bank4->PIO4 = 0xFCFCFCFC; +} + +/** + * @brief Initializes the FSMC NOR/SRAM Banks according to the specified + * parameters in the FSMC_NORSRAMInitStruct. + * @param FSMC_NORSRAMInitStruct : pointer to a FSMC_NORSRAMInitTypeDef + * structure that contains the configuration information for + * the FSMC NOR/SRAM specified Banks. + * @retval None + */ +void FSMC_NORSRAMInit(FSMC_NORSRAMInitTypeDef* FSMC_NORSRAMInitStruct) +{ + /* Check the parameters */ + assert_param(IS_FSMC_NORSRAM_BANK(FSMC_NORSRAMInitStruct->FSMC_Bank)); + assert_param(IS_FSMC_MUX(FSMC_NORSRAMInitStruct->FSMC_DataAddressMux)); + assert_param(IS_FSMC_MEMORY(FSMC_NORSRAMInitStruct->FSMC_MemoryType)); + assert_param(IS_FSMC_MEMORY_WIDTH(FSMC_NORSRAMInitStruct->FSMC_MemoryDataWidth)); + assert_param(IS_FSMC_BURSTMODE(FSMC_NORSRAMInitStruct->FSMC_BurstAccessMode)); + assert_param(IS_FSMC_ASYNWAIT(FSMC_NORSRAMInitStruct->FSMC_AsynchronousWait)); + assert_param(IS_FSMC_WAIT_POLARITY(FSMC_NORSRAMInitStruct->FSMC_WaitSignalPolarity)); + assert_param(IS_FSMC_WRAP_MODE(FSMC_NORSRAMInitStruct->FSMC_WrapMode)); + assert_param(IS_FSMC_WAIT_SIGNAL_ACTIVE(FSMC_NORSRAMInitStruct->FSMC_WaitSignalActive)); + assert_param(IS_FSMC_WRITE_OPERATION(FSMC_NORSRAMInitStruct->FSMC_WriteOperation)); + assert_param(IS_FSMC_WAITE_SIGNAL(FSMC_NORSRAMInitStruct->FSMC_WaitSignal)); + assert_param(IS_FSMC_EXTENDED_MODE(FSMC_NORSRAMInitStruct->FSMC_ExtendedMode)); + assert_param(IS_FSMC_WRITE_BURST(FSMC_NORSRAMInitStruct->FSMC_WriteBurst)); + assert_param(IS_FSMC_ADDRESS_SETUP_TIME(FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_AddressSetupTime)); + assert_param(IS_FSMC_ADDRESS_HOLD_TIME(FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_AddressHoldTime)); + assert_param(IS_FSMC_DATASETUP_TIME(FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_DataSetupTime)); + assert_param(IS_FSMC_TURNAROUND_TIME(FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_BusTurnAroundDuration)); + assert_param(IS_FSMC_CLK_DIV(FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_CLKDivision)); + assert_param(IS_FSMC_DATA_LATENCY(FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_DataLatency)); + assert_param(IS_FSMC_ACCESS_MODE(FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_AccessMode)); + + /* Bank1 NOR/SRAM control register configuration */ + FSMC_Bank1->BTCR[FSMC_NORSRAMInitStruct->FSMC_Bank] = + (uint32_t)FSMC_NORSRAMInitStruct->FSMC_DataAddressMux | + FSMC_NORSRAMInitStruct->FSMC_MemoryType | + FSMC_NORSRAMInitStruct->FSMC_MemoryDataWidth | + FSMC_NORSRAMInitStruct->FSMC_BurstAccessMode | + FSMC_NORSRAMInitStruct->FSMC_AsynchronousWait | + FSMC_NORSRAMInitStruct->FSMC_WaitSignalPolarity | + FSMC_NORSRAMInitStruct->FSMC_WrapMode | + FSMC_NORSRAMInitStruct->FSMC_WaitSignalActive | + FSMC_NORSRAMInitStruct->FSMC_WriteOperation | + FSMC_NORSRAMInitStruct->FSMC_WaitSignal | + FSMC_NORSRAMInitStruct->FSMC_ExtendedMode | + FSMC_NORSRAMInitStruct->FSMC_WriteBurst; + + if(FSMC_NORSRAMInitStruct->FSMC_MemoryType == FSMC_MemoryType_NOR) + { + FSMC_Bank1->BTCR[FSMC_NORSRAMInitStruct->FSMC_Bank] |= (uint32_t)BCR_FACCEN_Set; + } + + /* Bank1 NOR/SRAM timing register configuration */ + FSMC_Bank1->BTCR[FSMC_NORSRAMInitStruct->FSMC_Bank+1] = + (uint32_t)FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_AddressSetupTime | + (FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_AddressHoldTime << 4) | + (FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_DataSetupTime << 8) | + (FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_BusTurnAroundDuration << 16) | + (FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_CLKDivision << 20) | + (FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_DataLatency << 24) | + FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_AccessMode; + + + /* Bank1 NOR/SRAM timing register for write configuration, if extended mode is used */ + if(FSMC_NORSRAMInitStruct->FSMC_ExtendedMode == FSMC_ExtendedMode_Enable) + { + assert_param(IS_FSMC_ADDRESS_SETUP_TIME(FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_AddressSetupTime)); + assert_param(IS_FSMC_ADDRESS_HOLD_TIME(FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_AddressHoldTime)); + assert_param(IS_FSMC_DATASETUP_TIME(FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_DataSetupTime)); + assert_param(IS_FSMC_CLK_DIV(FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_CLKDivision)); + assert_param(IS_FSMC_DATA_LATENCY(FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_DataLatency)); + assert_param(IS_FSMC_ACCESS_MODE(FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_AccessMode)); + FSMC_Bank1E->BWTR[FSMC_NORSRAMInitStruct->FSMC_Bank] = + (uint32_t)FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_AddressSetupTime | + (FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_AddressHoldTime << 4 )| + (FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_DataSetupTime << 8) | + (FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_CLKDivision << 20) | + (FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_DataLatency << 24) | + FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_AccessMode; + } + else + { + FSMC_Bank1E->BWTR[FSMC_NORSRAMInitStruct->FSMC_Bank] = 0x0FFFFFFF; + } +} + +/** + * @brief Initializes the FSMC NAND Banks according to the specified + * parameters in the FSMC_NANDInitStruct. + * @param FSMC_NANDInitStruct : pointer to a FSMC_NANDInitTypeDef + * structure that contains the configuration information for the FSMC + * NAND specified Banks. + * @retval None + */ +void FSMC_NANDInit(FSMC_NANDInitTypeDef* FSMC_NANDInitStruct) +{ + uint32_t tmppcr = 0x00000000, tmppmem = 0x00000000, tmppatt = 0x00000000; + + /* Check the parameters */ + assert_param( IS_FSMC_NAND_BANK(FSMC_NANDInitStruct->FSMC_Bank)); + assert_param( IS_FSMC_WAIT_FEATURE(FSMC_NANDInitStruct->FSMC_Waitfeature)); + assert_param( IS_FSMC_MEMORY_WIDTH(FSMC_NANDInitStruct->FSMC_MemoryDataWidth)); + assert_param( IS_FSMC_ECC_STATE(FSMC_NANDInitStruct->FSMC_ECC)); + assert_param( IS_FSMC_ECCPAGE_SIZE(FSMC_NANDInitStruct->FSMC_ECCPageSize)); + assert_param( IS_FSMC_TCLR_TIME(FSMC_NANDInitStruct->FSMC_TCLRSetupTime)); + assert_param( IS_FSMC_TAR_TIME(FSMC_NANDInitStruct->FSMC_TARSetupTime)); + assert_param(IS_FSMC_SETUP_TIME(FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_SetupTime)); + assert_param(IS_FSMC_WAIT_TIME(FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_WaitSetupTime)); + assert_param(IS_FSMC_HOLD_TIME(FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HoldSetupTime)); + assert_param(IS_FSMC_HIZ_TIME(FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HiZSetupTime)); + assert_param(IS_FSMC_SETUP_TIME(FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_SetupTime)); + assert_param(IS_FSMC_WAIT_TIME(FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_WaitSetupTime)); + assert_param(IS_FSMC_HOLD_TIME(FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HoldSetupTime)); + assert_param(IS_FSMC_HIZ_TIME(FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HiZSetupTime)); + + /* Set the tmppcr value according to FSMC_NANDInitStruct parameters */ + tmppcr = (uint32_t)FSMC_NANDInitStruct->FSMC_Waitfeature | + PCR_MemoryType_NAND | + FSMC_NANDInitStruct->FSMC_MemoryDataWidth | + FSMC_NANDInitStruct->FSMC_ECC | + FSMC_NANDInitStruct->FSMC_ECCPageSize | + (FSMC_NANDInitStruct->FSMC_TCLRSetupTime << 9 )| + (FSMC_NANDInitStruct->FSMC_TARSetupTime << 13); + + /* Set tmppmem value according to FSMC_CommonSpaceTimingStructure parameters */ + tmppmem = (uint32_t)FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_SetupTime | + (FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_WaitSetupTime << 8) | + (FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HoldSetupTime << 16)| + (FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HiZSetupTime << 24); + + /* Set tmppatt value according to FSMC_AttributeSpaceTimingStructure parameters */ + tmppatt = (uint32_t)FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_SetupTime | + (FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_WaitSetupTime << 8) | + (FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HoldSetupTime << 16)| + (FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HiZSetupTime << 24); + + if(FSMC_NANDInitStruct->FSMC_Bank == FSMC_Bank2_NAND) + { + /* FSMC_Bank2_NAND registers configuration */ + FSMC_Bank2->PCR2 = tmppcr; + FSMC_Bank2->PMEM2 = tmppmem; + FSMC_Bank2->PATT2 = tmppatt; + } + else + { + /* FSMC_Bank3_NAND registers configuration */ + FSMC_Bank3->PCR3 = tmppcr; + FSMC_Bank3->PMEM3 = tmppmem; + FSMC_Bank3->PATT3 = tmppatt; + } +} + +/** + * @brief Initializes the FSMC PCCARD Bank according to the specified + * parameters in the FSMC_PCCARDInitStruct. + * @param FSMC_PCCARDInitStruct : pointer to a FSMC_PCCARDInitTypeDef + * structure that contains the configuration information for the FSMC + * PCCARD Bank. + * @retval None + */ +void FSMC_PCCARDInit(FSMC_PCCARDInitTypeDef* FSMC_PCCARDInitStruct) +{ + /* Check the parameters */ + assert_param(IS_FSMC_WAIT_FEATURE(FSMC_PCCARDInitStruct->FSMC_Waitfeature)); + assert_param(IS_FSMC_TCLR_TIME(FSMC_PCCARDInitStruct->FSMC_TCLRSetupTime)); + assert_param(IS_FSMC_TAR_TIME(FSMC_PCCARDInitStruct->FSMC_TARSetupTime)); + + assert_param(IS_FSMC_SETUP_TIME(FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_SetupTime)); + assert_param(IS_FSMC_WAIT_TIME(FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_WaitSetupTime)); + assert_param(IS_FSMC_HOLD_TIME(FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HoldSetupTime)); + assert_param(IS_FSMC_HIZ_TIME(FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HiZSetupTime)); + + assert_param(IS_FSMC_SETUP_TIME(FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_SetupTime)); + assert_param(IS_FSMC_WAIT_TIME(FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_WaitSetupTime)); + assert_param(IS_FSMC_HOLD_TIME(FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HoldSetupTime)); + assert_param(IS_FSMC_HIZ_TIME(FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HiZSetupTime)); + assert_param(IS_FSMC_SETUP_TIME(FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_SetupTime)); + assert_param(IS_FSMC_WAIT_TIME(FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_WaitSetupTime)); + assert_param(IS_FSMC_HOLD_TIME(FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_HoldSetupTime)); + assert_param(IS_FSMC_HIZ_TIME(FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_HiZSetupTime)); + + /* Set the PCR4 register value according to FSMC_PCCARDInitStruct parameters */ + FSMC_Bank4->PCR4 = (uint32_t)FSMC_PCCARDInitStruct->FSMC_Waitfeature | + FSMC_MemoryDataWidth_16b | + (FSMC_PCCARDInitStruct->FSMC_TCLRSetupTime << 9) | + (FSMC_PCCARDInitStruct->FSMC_TARSetupTime << 13); + + /* Set PMEM4 register value according to FSMC_CommonSpaceTimingStructure parameters */ + FSMC_Bank4->PMEM4 = (uint32_t)FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_SetupTime | + (FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_WaitSetupTime << 8) | + (FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HoldSetupTime << 16)| + (FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HiZSetupTime << 24); + + /* Set PATT4 register value according to FSMC_AttributeSpaceTimingStructure parameters */ + FSMC_Bank4->PATT4 = (uint32_t)FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_SetupTime | + (FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_WaitSetupTime << 8) | + (FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HoldSetupTime << 16)| + (FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HiZSetupTime << 24); + + /* Set PIO4 register value according to FSMC_IOSpaceTimingStructure parameters */ + FSMC_Bank4->PIO4 = (uint32_t)FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_SetupTime | + (FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_WaitSetupTime << 8) | + (FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_HoldSetupTime << 16)| + (FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_HiZSetupTime << 24); +} + +/** + * @brief Fills each FSMC_NORSRAMInitStruct member with its default value. + * @param FSMC_NORSRAMInitStruct: pointer to a FSMC_NORSRAMInitTypeDef + * structure which will be initialized. + * @retval None + */ +void FSMC_NORSRAMStructInit(FSMC_NORSRAMInitTypeDef* FSMC_NORSRAMInitStruct) +{ + /* Reset NOR/SRAM Init structure parameters values */ + FSMC_NORSRAMInitStruct->FSMC_Bank = FSMC_Bank1_NORSRAM1; + FSMC_NORSRAMInitStruct->FSMC_DataAddressMux = FSMC_DataAddressMux_Enable; + FSMC_NORSRAMInitStruct->FSMC_MemoryType = FSMC_MemoryType_SRAM; + FSMC_NORSRAMInitStruct->FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b; + FSMC_NORSRAMInitStruct->FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStruct->FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStruct->FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStruct->FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStruct->FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStruct->FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStruct->FSMC_WaitSignal = FSMC_WaitSignal_Enable; + FSMC_NORSRAMInitStruct->FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStruct->FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_AddressSetupTime = 0xF; + FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_AddressHoldTime = 0xF; + FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_DataSetupTime = 0xFF; + FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_BusTurnAroundDuration = 0xF; + FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_CLKDivision = 0xF; + FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_DataLatency = 0xF; + FSMC_NORSRAMInitStruct->FSMC_ReadWriteTimingStruct->FSMC_AccessMode = FSMC_AccessMode_A; + FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_AddressSetupTime = 0xF; + FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_AddressHoldTime = 0xF; + FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_DataSetupTime = 0xFF; + FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_BusTurnAroundDuration = 0xF; + FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_CLKDivision = 0xF; + FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_DataLatency = 0xF; + FSMC_NORSRAMInitStruct->FSMC_WriteTimingStruct->FSMC_AccessMode = FSMC_AccessMode_A; +} + +/** + * @brief Fills each FSMC_NANDInitStruct member with its default value. + * @param FSMC_NANDInitStruct: pointer to a FSMC_NANDInitTypeDef + * structure which will be initialized. + * @retval None + */ +void FSMC_NANDStructInit(FSMC_NANDInitTypeDef* FSMC_NANDInitStruct) +{ + /* Reset NAND Init structure parameters values */ + FSMC_NANDInitStruct->FSMC_Bank = FSMC_Bank2_NAND; + FSMC_NANDInitStruct->FSMC_Waitfeature = FSMC_Waitfeature_Disable; + FSMC_NANDInitStruct->FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b; + FSMC_NANDInitStruct->FSMC_ECC = FSMC_ECC_Disable; + FSMC_NANDInitStruct->FSMC_ECCPageSize = FSMC_ECCPageSize_256Bytes; + FSMC_NANDInitStruct->FSMC_TCLRSetupTime = 0x0; + FSMC_NANDInitStruct->FSMC_TARSetupTime = 0x0; + FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_SetupTime = 0xFC; + FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_WaitSetupTime = 0xFC; + FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HoldSetupTime = 0xFC; + FSMC_NANDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HiZSetupTime = 0xFC; + FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_SetupTime = 0xFC; + FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_WaitSetupTime = 0xFC; + FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HoldSetupTime = 0xFC; + FSMC_NANDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HiZSetupTime = 0xFC; +} + +/** + * @brief Fills each FSMC_PCCARDInitStruct member with its default value. + * @param FSMC_PCCARDInitStruct: pointer to a FSMC_PCCARDInitTypeDef + * structure which will be initialized. + * @retval None + */ +void FSMC_PCCARDStructInit(FSMC_PCCARDInitTypeDef* FSMC_PCCARDInitStruct) +{ + /* Reset PCCARD Init structure parameters values */ + FSMC_PCCARDInitStruct->FSMC_Waitfeature = FSMC_Waitfeature_Disable; + FSMC_PCCARDInitStruct->FSMC_TCLRSetupTime = 0x0; + FSMC_PCCARDInitStruct->FSMC_TARSetupTime = 0x0; + FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_SetupTime = 0xFC; + FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_WaitSetupTime = 0xFC; + FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HoldSetupTime = 0xFC; + FSMC_PCCARDInitStruct->FSMC_CommonSpaceTimingStruct->FSMC_HiZSetupTime = 0xFC; + FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_SetupTime = 0xFC; + FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_WaitSetupTime = 0xFC; + FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HoldSetupTime = 0xFC; + FSMC_PCCARDInitStruct->FSMC_AttributeSpaceTimingStruct->FSMC_HiZSetupTime = 0xFC; + FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_SetupTime = 0xFC; + FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_WaitSetupTime = 0xFC; + FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_HoldSetupTime = 0xFC; + FSMC_PCCARDInitStruct->FSMC_IOSpaceTimingStruct->FSMC_HiZSetupTime = 0xFC; +} + +/** + * @brief Enables or disables the specified NOR/SRAM Memory Bank. + * @param FSMC_Bank: specifies the FSMC Bank to be used + * This parameter can be one of the following values: + * @arg FSMC_Bank1_NORSRAM1: FSMC Bank1 NOR/SRAM1 + * @arg FSMC_Bank1_NORSRAM2: FSMC Bank1 NOR/SRAM2 + * @arg FSMC_Bank1_NORSRAM3: FSMC Bank1 NOR/SRAM3 + * @arg FSMC_Bank1_NORSRAM4: FSMC Bank1 NOR/SRAM4 + * @param NewState: new state of the FSMC_Bank. This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void FSMC_NORSRAMCmd(uint32_t FSMC_Bank, FunctionalState NewState) +{ + assert_param(IS_FSMC_NORSRAM_BANK(FSMC_Bank)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the selected NOR/SRAM Bank by setting the PBKEN bit in the BCRx register */ + FSMC_Bank1->BTCR[FSMC_Bank] |= BCR_MBKEN_Set; + } + else + { + /* Disable the selected NOR/SRAM Bank by clearing the PBKEN bit in the BCRx register */ + FSMC_Bank1->BTCR[FSMC_Bank] &= BCR_MBKEN_Reset; + } +} + +/** + * @brief Enables or disables the specified NAND Memory Bank. + * @param FSMC_Bank: specifies the FSMC Bank to be used + * This parameter can be one of the following values: + * @arg FSMC_Bank2_NAND: FSMC Bank2 NAND + * @arg FSMC_Bank3_NAND: FSMC Bank3 NAND + * @param NewState: new state of the FSMC_Bank. This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void FSMC_NANDCmd(uint32_t FSMC_Bank, FunctionalState NewState) +{ + assert_param(IS_FSMC_NAND_BANK(FSMC_Bank)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the selected NAND Bank by setting the PBKEN bit in the PCRx register */ + if(FSMC_Bank == FSMC_Bank2_NAND) + { + FSMC_Bank2->PCR2 |= PCR_PBKEN_Set; + } + else + { + FSMC_Bank3->PCR3 |= PCR_PBKEN_Set; + } + } + else + { + /* Disable the selected NAND Bank by clearing the PBKEN bit in the PCRx register */ + if(FSMC_Bank == FSMC_Bank2_NAND) + { + FSMC_Bank2->PCR2 &= PCR_PBKEN_Reset; + } + else + { + FSMC_Bank3->PCR3 &= PCR_PBKEN_Reset; + } + } +} + +/** + * @brief Enables or disables the PCCARD Memory Bank. + * @param NewState: new state of the PCCARD Memory Bank. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void FSMC_PCCARDCmd(FunctionalState NewState) +{ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the PCCARD Bank by setting the PBKEN bit in the PCR4 register */ + FSMC_Bank4->PCR4 |= PCR_PBKEN_Set; + } + else + { + /* Disable the PCCARD Bank by clearing the PBKEN bit in the PCR4 register */ + FSMC_Bank4->PCR4 &= PCR_PBKEN_Reset; + } +} + +/** + * @brief Enables or disables the FSMC NAND ECC feature. + * @param FSMC_Bank: specifies the FSMC Bank to be used + * This parameter can be one of the following values: + * @arg FSMC_Bank2_NAND: FSMC Bank2 NAND + * @arg FSMC_Bank3_NAND: FSMC Bank3 NAND + * @param NewState: new state of the FSMC NAND ECC feature. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void FSMC_NANDECCCmd(uint32_t FSMC_Bank, FunctionalState NewState) +{ + assert_param(IS_FSMC_NAND_BANK(FSMC_Bank)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the selected NAND Bank ECC function by setting the ECCEN bit in the PCRx register */ + if(FSMC_Bank == FSMC_Bank2_NAND) + { + FSMC_Bank2->PCR2 |= PCR_ECCEN_Set; + } + else + { + FSMC_Bank3->PCR3 |= PCR_ECCEN_Set; + } + } + else + { + /* Disable the selected NAND Bank ECC function by clearing the ECCEN bit in the PCRx register */ + if(FSMC_Bank == FSMC_Bank2_NAND) + { + FSMC_Bank2->PCR2 &= PCR_ECCEN_Reset; + } + else + { + FSMC_Bank3->PCR3 &= PCR_ECCEN_Reset; + } + } +} + +/** + * @brief Returns the error correction code register value. + * @param FSMC_Bank: specifies the FSMC Bank to be used + * This parameter can be one of the following values: + * @arg FSMC_Bank2_NAND: FSMC Bank2 NAND + * @arg FSMC_Bank3_NAND: FSMC Bank3 NAND + * @retval The Error Correction Code (ECC) value. + */ +uint32_t FSMC_GetECC(uint32_t FSMC_Bank) +{ + uint32_t eccval = 0x00000000; + + if(FSMC_Bank == FSMC_Bank2_NAND) + { + /* Get the ECCR2 register value */ + eccval = FSMC_Bank2->ECCR2; + } + else + { + /* Get the ECCR3 register value */ + eccval = FSMC_Bank3->ECCR3; + } + /* Return the error correction code value */ + return(eccval); +} + +/** + * @brief Enables or disables the specified FSMC interrupts. + * @param FSMC_Bank: specifies the FSMC Bank to be used + * This parameter can be one of the following values: + * @arg FSMC_Bank2_NAND: FSMC Bank2 NAND + * @arg FSMC_Bank3_NAND: FSMC Bank3 NAND + * @arg FSMC_Bank4_PCCARD: FSMC Bank4 PCCARD + * @param FSMC_IT: specifies the FSMC interrupt sources to be enabled or disabled. + * This parameter can be any combination of the following values: + * @arg FSMC_IT_RisingEdge: Rising edge detection interrupt. + * @arg FSMC_IT_Level: Level edge detection interrupt. + * @arg FSMC_IT_FallingEdge: Falling edge detection interrupt. + * @param NewState: new state of the specified FSMC interrupts. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void FSMC_ITConfig(uint32_t FSMC_Bank, uint32_t FSMC_IT, FunctionalState NewState) +{ + assert_param(IS_FSMC_IT_BANK(FSMC_Bank)); + assert_param(IS_FSMC_IT(FSMC_IT)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the selected FSMC_Bank2 interrupts */ + if(FSMC_Bank == FSMC_Bank2_NAND) + { + FSMC_Bank2->SR2 |= FSMC_IT; + } + /* Enable the selected FSMC_Bank3 interrupts */ + else if (FSMC_Bank == FSMC_Bank3_NAND) + { + FSMC_Bank3->SR3 |= FSMC_IT; + } + /* Enable the selected FSMC_Bank4 interrupts */ + else + { + FSMC_Bank4->SR4 |= FSMC_IT; + } + } + else + { + /* Disable the selected FSMC_Bank2 interrupts */ + if(FSMC_Bank == FSMC_Bank2_NAND) + { + + FSMC_Bank2->SR2 &= (uint32_t)~FSMC_IT; + } + /* Disable the selected FSMC_Bank3 interrupts */ + else if (FSMC_Bank == FSMC_Bank3_NAND) + { + FSMC_Bank3->SR3 &= (uint32_t)~FSMC_IT; + } + /* Disable the selected FSMC_Bank4 interrupts */ + else + { + FSMC_Bank4->SR4 &= (uint32_t)~FSMC_IT; + } + } +} + +/** + * @brief Checks whether the specified FSMC flag is set or not. + * @param FSMC_Bank: specifies the FSMC Bank to be used + * This parameter can be one of the following values: + * @arg FSMC_Bank2_NAND: FSMC Bank2 NAND + * @arg FSMC_Bank3_NAND: FSMC Bank3 NAND + * @arg FSMC_Bank4_PCCARD: FSMC Bank4 PCCARD + * @param FSMC_FLAG: specifies the flag to check. + * This parameter can be one of the following values: + * @arg FSMC_FLAG_RisingEdge: Rising egde detection Flag. + * @arg FSMC_FLAG_Level: Level detection Flag. + * @arg FSMC_FLAG_FallingEdge: Falling egde detection Flag. + * @arg FSMC_FLAG_FEMPT: Fifo empty Flag. + * @retval The new state of FSMC_FLAG (SET or RESET). + */ +FlagStatus FSMC_GetFlagStatus(uint32_t FSMC_Bank, uint32_t FSMC_FLAG) +{ + FlagStatus bitstatus = RESET; + uint32_t tmpsr = 0x00000000; + + /* Check the parameters */ + assert_param(IS_FSMC_GETFLAG_BANK(FSMC_Bank)); + assert_param(IS_FSMC_GET_FLAG(FSMC_FLAG)); + + if(FSMC_Bank == FSMC_Bank2_NAND) + { + tmpsr = FSMC_Bank2->SR2; + } + else if(FSMC_Bank == FSMC_Bank3_NAND) + { + tmpsr = FSMC_Bank3->SR3; + } + /* FSMC_Bank4_PCCARD*/ + else + { + tmpsr = FSMC_Bank4->SR4; + } + + /* Get the flag status */ + if ((tmpsr & FSMC_FLAG) != (uint16_t)RESET ) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + /* Return the flag status */ + return bitstatus; +} + +/** + * @brief Clears the FSMC's pending flags. + * @param FSMC_Bank: specifies the FSMC Bank to be used + * This parameter can be one of the following values: + * @arg FSMC_Bank2_NAND: FSMC Bank2 NAND + * @arg FSMC_Bank3_NAND: FSMC Bank3 NAND + * @arg FSMC_Bank4_PCCARD: FSMC Bank4 PCCARD + * @param FSMC_FLAG: specifies the flag to clear. + * This parameter can be any combination of the following values: + * @arg FSMC_FLAG_RisingEdge: Rising egde detection Flag. + * @arg FSMC_FLAG_Level: Level detection Flag. + * @arg FSMC_FLAG_FallingEdge: Falling egde detection Flag. + * @retval None + */ +void FSMC_ClearFlag(uint32_t FSMC_Bank, uint32_t FSMC_FLAG) +{ + /* Check the parameters */ + assert_param(IS_FSMC_GETFLAG_BANK(FSMC_Bank)); + assert_param(IS_FSMC_CLEAR_FLAG(FSMC_FLAG)) ; + + if(FSMC_Bank == FSMC_Bank2_NAND) + { + FSMC_Bank2->SR2 &= ~FSMC_FLAG; + } + else if(FSMC_Bank == FSMC_Bank3_NAND) + { + FSMC_Bank3->SR3 &= ~FSMC_FLAG; + } + /* FSMC_Bank4_PCCARD*/ + else + { + FSMC_Bank4->SR4 &= ~FSMC_FLAG; + } +} + +/** + * @brief Checks whether the specified FSMC interrupt has occurred or not. + * @param FSMC_Bank: specifies the FSMC Bank to be used + * This parameter can be one of the following values: + * @arg FSMC_Bank2_NAND: FSMC Bank2 NAND + * @arg FSMC_Bank3_NAND: FSMC Bank3 NAND + * @arg FSMC_Bank4_PCCARD: FSMC Bank4 PCCARD + * @param FSMC_IT: specifies the FSMC interrupt source to check. + * This parameter can be one of the following values: + * @arg FSMC_IT_RisingEdge: Rising edge detection interrupt. + * @arg FSMC_IT_Level: Level edge detection interrupt. + * @arg FSMC_IT_FallingEdge: Falling edge detection interrupt. + * @retval The new state of FSMC_IT (SET or RESET). + */ +ITStatus FSMC_GetITStatus(uint32_t FSMC_Bank, uint32_t FSMC_IT) +{ + ITStatus bitstatus = RESET; + uint32_t tmpsr = 0x0, itstatus = 0x0, itenable = 0x0; + + /* Check the parameters */ + assert_param(IS_FSMC_IT_BANK(FSMC_Bank)); + assert_param(IS_FSMC_GET_IT(FSMC_IT)); + + if(FSMC_Bank == FSMC_Bank2_NAND) + { + tmpsr = FSMC_Bank2->SR2; + } + else if(FSMC_Bank == FSMC_Bank3_NAND) + { + tmpsr = FSMC_Bank3->SR3; + } + /* FSMC_Bank4_PCCARD*/ + else + { + tmpsr = FSMC_Bank4->SR4; + } + + itstatus = tmpsr & FSMC_IT; + + itenable = tmpsr & (FSMC_IT >> 3); + if ((itstatus != (uint32_t)RESET) && (itenable != (uint32_t)RESET)) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + return bitstatus; +} + +/** + * @brief Clears the FSMC's interrupt pending bits. + * @param FSMC_Bank: specifies the FSMC Bank to be used + * This parameter can be one of the following values: + * @arg FSMC_Bank2_NAND: FSMC Bank2 NAND + * @arg FSMC_Bank3_NAND: FSMC Bank3 NAND + * @arg FSMC_Bank4_PCCARD: FSMC Bank4 PCCARD + * @param FSMC_IT: specifies the interrupt pending bit to clear. + * This parameter can be any combination of the following values: + * @arg FSMC_IT_RisingEdge: Rising edge detection interrupt. + * @arg FSMC_IT_Level: Level edge detection interrupt. + * @arg FSMC_IT_FallingEdge: Falling edge detection interrupt. + * @retval None + */ +void FSMC_ClearITPendingBit(uint32_t FSMC_Bank, uint32_t FSMC_IT) +{ + /* Check the parameters */ + assert_param(IS_FSMC_IT_BANK(FSMC_Bank)); + assert_param(IS_FSMC_IT(FSMC_IT)); + + if(FSMC_Bank == FSMC_Bank2_NAND) + { + FSMC_Bank2->SR2 &= ~(FSMC_IT >> 3); + } + else if(FSMC_Bank == FSMC_Bank3_NAND) + { + FSMC_Bank3->SR3 &= ~(FSMC_IT >> 3); + } + /* FSMC_Bank4_PCCARD*/ + else + { + FSMC_Bank4->SR4 &= ~(FSMC_IT >> 3); + } +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_gpio.c b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_gpio.c new file mode 100644 index 0000000..457ff11 --- /dev/null +++ b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_gpio.c @@ -0,0 +1,650 @@ +/** + ****************************************************************************** + * @file stm32f10x_gpio.c + * @author MCD Application Team + * @version V3.5.0 + * @date 11-March-2011 + * @brief This file provides all the GPIO firmware functions. + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

    © COPYRIGHT 2011 STMicroelectronics

    + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f10x_gpio.h" +#include "stm32f10x_rcc.h" + +/** @addtogroup STM32F10x_StdPeriph_Driver + * @{ + */ + +/** @defgroup GPIO + * @brief GPIO driver modules + * @{ + */ + +/** @defgroup GPIO_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @defgroup GPIO_Private_Defines + * @{ + */ + +/* ------------ RCC registers bit address in the alias region ----------------*/ +#define AFIO_OFFSET (AFIO_BASE - PERIPH_BASE) + +/* --- EVENTCR Register -----*/ + +/* Alias word address of EVOE bit */ +#define EVCR_OFFSET (AFIO_OFFSET + 0x00) +#define EVOE_BitNumber ((uint8_t)0x07) +#define EVCR_EVOE_BB (PERIPH_BB_BASE + (EVCR_OFFSET * 32) + (EVOE_BitNumber * 4)) + + +/* --- MAPR Register ---*/ +/* Alias word address of MII_RMII_SEL bit */ +#define MAPR_OFFSET (AFIO_OFFSET + 0x04) +#define MII_RMII_SEL_BitNumber ((u8)0x17) +#define MAPR_MII_RMII_SEL_BB (PERIPH_BB_BASE + (MAPR_OFFSET * 32) + (MII_RMII_SEL_BitNumber * 4)) + + +#define EVCR_PORTPINCONFIG_MASK ((uint16_t)0xFF80) +#define LSB_MASK ((uint16_t)0xFFFF) +#define DBGAFR_POSITION_MASK ((uint32_t)0x000F0000) +#define DBGAFR_SWJCFG_MASK ((uint32_t)0xF0FFFFFF) +#define DBGAFR_LOCATION_MASK ((uint32_t)0x00200000) +#define DBGAFR_NUMBITS_MASK ((uint32_t)0x00100000) +/** + * @} + */ + +/** @defgroup GPIO_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup GPIO_Private_Variables + * @{ + */ + +/** + * @} + */ + +/** @defgroup GPIO_Private_FunctionPrototypes + * @{ + */ + +/** + * @} + */ + +/** @defgroup GPIO_Private_Functions + * @{ + */ + +/** + * @brief Deinitializes the GPIOx peripheral registers to their default reset values. + * @param GPIOx: where x can be (A..G) to select the GPIO peripheral. + * @retval None + */ +void GPIO_DeInit(GPIO_TypeDef* GPIOx) +{ + /* Check the parameters */ + assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); + + if (GPIOx == GPIOA) + { + RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOA, ENABLE); + RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOA, DISABLE); + } + else if (GPIOx == GPIOB) + { + RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOB, ENABLE); + RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOB, DISABLE); + } + else if (GPIOx == GPIOC) + { + RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOC, ENABLE); + RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOC, DISABLE); + } + else if (GPIOx == GPIOD) + { + RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOD, ENABLE); + RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOD, DISABLE); + } + else if (GPIOx == GPIOE) + { + RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOE, ENABLE); + RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOE, DISABLE); + } + else if (GPIOx == GPIOF) + { + RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOF, ENABLE); + RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOF, DISABLE); + } + else + { + if (GPIOx == GPIOG) + { + RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOG, ENABLE); + RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOG, DISABLE); + } + } +} + +/** + * @brief Deinitializes the Alternate Functions (remap, event control + * and EXTI configuration) registers to their default reset values. + * @param None + * @retval None + */ +void GPIO_AFIODeInit(void) +{ + RCC_APB2PeriphResetCmd(RCC_APB2Periph_AFIO, ENABLE); + RCC_APB2PeriphResetCmd(RCC_APB2Periph_AFIO, DISABLE); +} + +/** + * @brief Initializes the GPIOx peripheral according to the specified + * parameters in the GPIO_InitStruct. + * @param GPIOx: where x can be (A..G) to select the GPIO peripheral. + * @param GPIO_InitStruct: pointer to a GPIO_InitTypeDef structure that + * contains the configuration information for the specified GPIO peripheral. + * @retval None + */ +void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct) +{ + uint32_t currentmode = 0x00, currentpin = 0x00, pinpos = 0x00, pos = 0x00; + uint32_t tmpreg = 0x00, pinmask = 0x00; + /* Check the parameters */ + assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); + assert_param(IS_GPIO_MODE(GPIO_InitStruct->GPIO_Mode)); + assert_param(IS_GPIO_PIN(GPIO_InitStruct->GPIO_Pin)); + +/*---------------------------- GPIO Mode Configuration -----------------------*/ + currentmode = ((uint32_t)GPIO_InitStruct->GPIO_Mode) & ((uint32_t)0x0F); + if ((((uint32_t)GPIO_InitStruct->GPIO_Mode) & ((uint32_t)0x10)) != 0x00) + { + /* Check the parameters */ + assert_param(IS_GPIO_SPEED(GPIO_InitStruct->GPIO_Speed)); + /* Output mode */ + currentmode |= (uint32_t)GPIO_InitStruct->GPIO_Speed; + } +/*---------------------------- GPIO CRL Configuration ------------------------*/ + /* Configure the eight low port pins */ + if (((uint32_t)GPIO_InitStruct->GPIO_Pin & ((uint32_t)0x00FF)) != 0x00) + { + tmpreg = GPIOx->CRL; + for (pinpos = 0x00; pinpos < 0x08; pinpos++) + { + pos = ((uint32_t)0x01) << pinpos; + /* Get the port pins position */ + currentpin = (GPIO_InitStruct->GPIO_Pin) & pos; + if (currentpin == pos) + { + pos = pinpos << 2; + /* Clear the corresponding low control register bits */ + pinmask = ((uint32_t)0x0F) << pos; + tmpreg &= ~pinmask; + /* Write the mode configuration in the corresponding bits */ + tmpreg |= (currentmode << pos); + /* Reset the corresponding ODR bit */ + if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPD) + { + GPIOx->BRR = (((uint32_t)0x01) << pinpos); + } + else + { + /* Set the corresponding ODR bit */ + if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPU) + { + GPIOx->BSRR = (((uint32_t)0x01) << pinpos); + } + } + } + } + GPIOx->CRL = tmpreg; + } +/*---------------------------- GPIO CRH Configuration ------------------------*/ + /* Configure the eight high port pins */ + if (GPIO_InitStruct->GPIO_Pin > 0x00FF) + { + tmpreg = GPIOx->CRH; + for (pinpos = 0x00; pinpos < 0x08; pinpos++) + { + pos = (((uint32_t)0x01) << (pinpos + 0x08)); + /* Get the port pins position */ + currentpin = ((GPIO_InitStruct->GPIO_Pin) & pos); + if (currentpin == pos) + { + pos = pinpos << 2; + /* Clear the corresponding high control register bits */ + pinmask = ((uint32_t)0x0F) << pos; + tmpreg &= ~pinmask; + /* Write the mode configuration in the corresponding bits */ + tmpreg |= (currentmode << pos); + /* Reset the corresponding ODR bit */ + if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPD) + { + GPIOx->BRR = (((uint32_t)0x01) << (pinpos + 0x08)); + } + /* Set the corresponding ODR bit */ + if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPU) + { + GPIOx->BSRR = (((uint32_t)0x01) << (pinpos + 0x08)); + } + } + } + GPIOx->CRH = tmpreg; + } +} + +/** + * @brief Fills each GPIO_InitStruct member with its default value. + * @param GPIO_InitStruct : pointer to a GPIO_InitTypeDef structure which will + * be initialized. + * @retval None + */ +void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct) +{ + /* Reset GPIO init structure parameters values */ + GPIO_InitStruct->GPIO_Pin = GPIO_Pin_All; + GPIO_InitStruct->GPIO_Speed = GPIO_Speed_2MHz; + GPIO_InitStruct->GPIO_Mode = GPIO_Mode_IN_FLOATING; +} + +/** + * @brief Reads the specified input port pin. + * @param GPIOx: where x can be (A..G) to select the GPIO peripheral. + * @param GPIO_Pin: specifies the port bit to read. + * This parameter can be GPIO_Pin_x where x can be (0..15). + * @retval The input port pin value. + */ +uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) +{ + uint8_t bitstatus = 0x00; + + /* Check the parameters */ + assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); + assert_param(IS_GET_GPIO_PIN(GPIO_Pin)); + + if ((GPIOx->IDR & GPIO_Pin) != (uint32_t)Bit_RESET) + { + bitstatus = (uint8_t)Bit_SET; + } + else + { + bitstatus = (uint8_t)Bit_RESET; + } + return bitstatus; +} + +/** + * @brief Reads the specified GPIO input data port. + * @param GPIOx: where x can be (A..G) to select the GPIO peripheral. + * @retval GPIO input data port value. + */ +uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx) +{ + /* Check the parameters */ + assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); + + return ((uint16_t)GPIOx->IDR); +} + +/** + * @brief Reads the specified output data port bit. + * @param GPIOx: where x can be (A..G) to select the GPIO peripheral. + * @param GPIO_Pin: specifies the port bit to read. + * This parameter can be GPIO_Pin_x where x can be (0..15). + * @retval The output port pin value. + */ +uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) +{ + uint8_t bitstatus = 0x00; + /* Check the parameters */ + assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); + assert_param(IS_GET_GPIO_PIN(GPIO_Pin)); + + if ((GPIOx->ODR & GPIO_Pin) != (uint32_t)Bit_RESET) + { + bitstatus = (uint8_t)Bit_SET; + } + else + { + bitstatus = (uint8_t)Bit_RESET; + } + return bitstatus; +} + +/** + * @brief Reads the specified GPIO output data port. + * @param GPIOx: where x can be (A..G) to select the GPIO peripheral. + * @retval GPIO output data port value. + */ +uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx) +{ + /* Check the parameters */ + assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); + + return ((uint16_t)GPIOx->ODR); +} + +/** + * @brief Sets the selected data port bits. + * @param GPIOx: where x can be (A..G) to select the GPIO peripheral. + * @param GPIO_Pin: specifies the port bits to be written. + * This parameter can be any combination of GPIO_Pin_x where x can be (0..15). + * @retval None + */ +void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) +{ + /* Check the parameters */ + assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); + assert_param(IS_GPIO_PIN(GPIO_Pin)); + + GPIOx->BSRR = GPIO_Pin; +} + +/** + * @brief Clears the selected data port bits. + * @param GPIOx: where x can be (A..G) to select the GPIO peripheral. + * @param GPIO_Pin: specifies the port bits to be written. + * This parameter can be any combination of GPIO_Pin_x where x can be (0..15). + * @retval None + */ +void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) +{ + /* Check the parameters */ + assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); + assert_param(IS_GPIO_PIN(GPIO_Pin)); + + GPIOx->BRR = GPIO_Pin; +} + +/** + * @brief Sets or clears the selected data port bit. + * @param GPIOx: where x can be (A..G) to select the GPIO peripheral. + * @param GPIO_Pin: specifies the port bit to be written. + * This parameter can be one of GPIO_Pin_x where x can be (0..15). + * @param BitVal: specifies the value to be written to the selected bit. + * This parameter can be one of the BitAction enum values: + * @arg Bit_RESET: to clear the port pin + * @arg Bit_SET: to set the port pin + * @retval None + */ +void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal) +{ + /* Check the parameters */ + assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); + assert_param(IS_GET_GPIO_PIN(GPIO_Pin)); + assert_param(IS_GPIO_BIT_ACTION(BitVal)); + + if (BitVal != Bit_RESET) + { + GPIOx->BSRR = GPIO_Pin; + } + else + { + GPIOx->BRR = GPIO_Pin; + } +} + +/** + * @brief Writes data to the specified GPIO data port. + * @param GPIOx: where x can be (A..G) to select the GPIO peripheral. + * @param PortVal: specifies the value to be written to the port output data register. + * @retval None + */ +void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal) +{ + /* Check the parameters */ + assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); + + GPIOx->ODR = PortVal; +} + +/** + * @brief Locks GPIO Pins configuration registers. + * @param GPIOx: where x can be (A..G) to select the GPIO peripheral. + * @param GPIO_Pin: specifies the port bit to be written. + * This parameter can be any combination of GPIO_Pin_x where x can be (0..15). + * @retval None + */ +void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) +{ + uint32_t tmp = 0x00010000; + + /* Check the parameters */ + assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); + assert_param(IS_GPIO_PIN(GPIO_Pin)); + + tmp |= GPIO_Pin; + /* Set LCKK bit */ + GPIOx->LCKR = tmp; + /* Reset LCKK bit */ + GPIOx->LCKR = GPIO_Pin; + /* Set LCKK bit */ + GPIOx->LCKR = tmp; + /* Read LCKK bit*/ + tmp = GPIOx->LCKR; + /* Read LCKK bit*/ + tmp = GPIOx->LCKR; +} + +/** + * @brief Selects the GPIO pin used as Event output. + * @param GPIO_PortSource: selects the GPIO port to be used as source + * for Event output. + * This parameter can be GPIO_PortSourceGPIOx where x can be (A..E). + * @param GPIO_PinSource: specifies the pin for the Event output. + * This parameter can be GPIO_PinSourcex where x can be (0..15). + * @retval None + */ +void GPIO_EventOutputConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource) +{ + uint32_t tmpreg = 0x00; + /* Check the parameters */ + assert_param(IS_GPIO_EVENTOUT_PORT_SOURCE(GPIO_PortSource)); + assert_param(IS_GPIO_PIN_SOURCE(GPIO_PinSource)); + + tmpreg = AFIO->EVCR; + /* Clear the PORT[6:4] and PIN[3:0] bits */ + tmpreg &= EVCR_PORTPINCONFIG_MASK; + tmpreg |= (uint32_t)GPIO_PortSource << 0x04; + tmpreg |= GPIO_PinSource; + AFIO->EVCR = tmpreg; +} + +/** + * @brief Enables or disables the Event Output. + * @param NewState: new state of the Event output. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void GPIO_EventOutputCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + *(__IO uint32_t *) EVCR_EVOE_BB = (uint32_t)NewState; +} + +/** + * @brief Changes the mapping of the specified pin. + * @param GPIO_Remap: selects the pin to remap. + * This parameter can be one of the following values: + * @arg GPIO_Remap_SPI1 : SPI1 Alternate Function mapping + * @arg GPIO_Remap_I2C1 : I2C1 Alternate Function mapping + * @arg GPIO_Remap_USART1 : USART1 Alternate Function mapping + * @arg GPIO_Remap_USART2 : USART2 Alternate Function mapping + * @arg GPIO_PartialRemap_USART3 : USART3 Partial Alternate Function mapping + * @arg GPIO_FullRemap_USART3 : USART3 Full Alternate Function mapping + * @arg GPIO_PartialRemap_TIM1 : TIM1 Partial Alternate Function mapping + * @arg GPIO_FullRemap_TIM1 : TIM1 Full Alternate Function mapping + * @arg GPIO_PartialRemap1_TIM2 : TIM2 Partial1 Alternate Function mapping + * @arg GPIO_PartialRemap2_TIM2 : TIM2 Partial2 Alternate Function mapping + * @arg GPIO_FullRemap_TIM2 : TIM2 Full Alternate Function mapping + * @arg GPIO_PartialRemap_TIM3 : TIM3 Partial Alternate Function mapping + * @arg GPIO_FullRemap_TIM3 : TIM3 Full Alternate Function mapping + * @arg GPIO_Remap_TIM4 : TIM4 Alternate Function mapping + * @arg GPIO_Remap1_CAN1 : CAN1 Alternate Function mapping + * @arg GPIO_Remap2_CAN1 : CAN1 Alternate Function mapping + * @arg GPIO_Remap_PD01 : PD01 Alternate Function mapping + * @arg GPIO_Remap_TIM5CH4_LSI : LSI connected to TIM5 Channel4 input capture for calibration + * @arg GPIO_Remap_ADC1_ETRGINJ : ADC1 External Trigger Injected Conversion remapping + * @arg GPIO_Remap_ADC1_ETRGREG : ADC1 External Trigger Regular Conversion remapping + * @arg GPIO_Remap_ADC2_ETRGINJ : ADC2 External Trigger Injected Conversion remapping + * @arg GPIO_Remap_ADC2_ETRGREG : ADC2 External Trigger Regular Conversion remapping + * @arg GPIO_Remap_ETH : Ethernet remapping (only for Connectivity line devices) + * @arg GPIO_Remap_CAN2 : CAN2 remapping (only for Connectivity line devices) + * @arg GPIO_Remap_SWJ_NoJTRST : Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRST + * @arg GPIO_Remap_SWJ_JTAGDisable : JTAG-DP Disabled and SW-DP Enabled + * @arg GPIO_Remap_SWJ_Disable : Full SWJ Disabled (JTAG-DP + SW-DP) + * @arg GPIO_Remap_SPI3 : SPI3/I2S3 Alternate Function mapping (only for Connectivity line devices) + * When the SPI3/I2S3 is remapped using this function, the SWJ is configured + * to Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRST. + * @arg GPIO_Remap_TIM2ITR1_PTP_SOF : Ethernet PTP output or USB OTG SOF (Start of Frame) connected + * to TIM2 Internal Trigger 1 for calibration (only for Connectivity line devices) + * If the GPIO_Remap_TIM2ITR1_PTP_SOF is enabled the TIM2 ITR1 is connected to + * Ethernet PTP output. When Reset TIM2 ITR1 is connected to USB OTG SOF output. + * @arg GPIO_Remap_PTP_PPS : Ethernet MAC PPS_PTS output on PB05 (only for Connectivity line devices) + * @arg GPIO_Remap_TIM15 : TIM15 Alternate Function mapping (only for Value line devices) + * @arg GPIO_Remap_TIM16 : TIM16 Alternate Function mapping (only for Value line devices) + * @arg GPIO_Remap_TIM17 : TIM17 Alternate Function mapping (only for Value line devices) + * @arg GPIO_Remap_CEC : CEC Alternate Function mapping (only for Value line devices) + * @arg GPIO_Remap_TIM1_DMA : TIM1 DMA requests mapping (only for Value line devices) + * @arg GPIO_Remap_TIM9 : TIM9 Alternate Function mapping (only for XL-density devices) + * @arg GPIO_Remap_TIM10 : TIM10 Alternate Function mapping (only for XL-density devices) + * @arg GPIO_Remap_TIM11 : TIM11 Alternate Function mapping (only for XL-density devices) + * @arg GPIO_Remap_TIM13 : TIM13 Alternate Function mapping (only for High density Value line and XL-density devices) + * @arg GPIO_Remap_TIM14 : TIM14 Alternate Function mapping (only for High density Value line and XL-density devices) + * @arg GPIO_Remap_FSMC_NADV : FSMC_NADV Alternate Function mapping (only for High density Value line and XL-density devices) + * @arg GPIO_Remap_TIM67_DAC_DMA : TIM6/TIM7 and DAC DMA requests remapping (only for High density Value line devices) + * @arg GPIO_Remap_TIM12 : TIM12 Alternate Function mapping (only for High density Value line devices) + * @arg GPIO_Remap_MISC : Miscellaneous Remap (DMA2 Channel5 Position and DAC Trigger remapping, + * only for High density Value line devices) + * @param NewState: new state of the port pin remapping. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState) +{ + uint32_t tmp = 0x00, tmp1 = 0x00, tmpreg = 0x00, tmpmask = 0x00; + + /* Check the parameters */ + assert_param(IS_GPIO_REMAP(GPIO_Remap)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if((GPIO_Remap & 0x80000000) == 0x80000000) + { + tmpreg = AFIO->MAPR2; + } + else + { + tmpreg = AFIO->MAPR; + } + + tmpmask = (GPIO_Remap & DBGAFR_POSITION_MASK) >> 0x10; + tmp = GPIO_Remap & LSB_MASK; + + if ((GPIO_Remap & (DBGAFR_LOCATION_MASK | DBGAFR_NUMBITS_MASK)) == (DBGAFR_LOCATION_MASK | DBGAFR_NUMBITS_MASK)) + { + tmpreg &= DBGAFR_SWJCFG_MASK; + AFIO->MAPR &= DBGAFR_SWJCFG_MASK; + } + else if ((GPIO_Remap & DBGAFR_NUMBITS_MASK) == DBGAFR_NUMBITS_MASK) + { + tmp1 = ((uint32_t)0x03) << tmpmask; + tmpreg &= ~tmp1; + tmpreg |= ~DBGAFR_SWJCFG_MASK; + } + else + { + tmpreg &= ~(tmp << ((GPIO_Remap >> 0x15)*0x10)); + tmpreg |= ~DBGAFR_SWJCFG_MASK; + } + + if (NewState != DISABLE) + { + tmpreg |= (tmp << ((GPIO_Remap >> 0x15)*0x10)); + } + + if((GPIO_Remap & 0x80000000) == 0x80000000) + { + AFIO->MAPR2 = tmpreg; + } + else + { + AFIO->MAPR = tmpreg; + } +} + +/** + * @brief Selects the GPIO pin used as EXTI Line. + * @param GPIO_PortSource: selects the GPIO port to be used as source for EXTI lines. + * This parameter can be GPIO_PortSourceGPIOx where x can be (A..G). + * @param GPIO_PinSource: specifies the EXTI line to be configured. + * This parameter can be GPIO_PinSourcex where x can be (0..15). + * @retval None + */ +void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource) +{ + uint32_t tmp = 0x00; + /* Check the parameters */ + assert_param(IS_GPIO_EXTI_PORT_SOURCE(GPIO_PortSource)); + assert_param(IS_GPIO_PIN_SOURCE(GPIO_PinSource)); + + tmp = ((uint32_t)0x0F) << (0x04 * (GPIO_PinSource & (uint8_t)0x03)); + AFIO->EXTICR[GPIO_PinSource >> 0x02] &= ~tmp; + AFIO->EXTICR[GPIO_PinSource >> 0x02] |= (((uint32_t)GPIO_PortSource) << (0x04 * (GPIO_PinSource & (uint8_t)0x03))); +} + +/** + * @brief Selects the Ethernet media interface. + * @note This function applies only to STM32 Connectivity line devices. + * @param GPIO_ETH_MediaInterface: specifies the Media Interface mode. + * This parameter can be one of the following values: + * @arg GPIO_ETH_MediaInterface_MII: MII mode + * @arg GPIO_ETH_MediaInterface_RMII: RMII mode + * @retval None + */ +void GPIO_ETH_MediaInterfaceConfig(uint32_t GPIO_ETH_MediaInterface) +{ + assert_param(IS_GPIO_ETH_MEDIA_INTERFACE(GPIO_ETH_MediaInterface)); + + /* Configure MII_RMII selection bit */ + *(__IO uint32_t *) MAPR_MII_RMII_SEL_BB = GPIO_ETH_MediaInterface; +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_i2c.c b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_i2c.c new file mode 100644 index 0000000..4ea321c --- /dev/null +++ b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_i2c.c @@ -0,0 +1,1331 @@ +/** + ****************************************************************************** + * @file stm32f10x_i2c.c + * @author MCD Application Team + * @version V3.5.0 + * @date 11-March-2011 + * @brief This file provides all the I2C firmware functions. + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

    © COPYRIGHT 2011 STMicroelectronics

    + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f10x_i2c.h" +#include "stm32f10x_rcc.h" + + +/** @addtogroup STM32F10x_StdPeriph_Driver + * @{ + */ + +/** @defgroup I2C + * @brief I2C driver modules + * @{ + */ + +/** @defgroup I2C_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @defgroup I2C_Private_Defines + * @{ + */ + +/* I2C SPE mask */ +#define CR1_PE_Set ((uint16_t)0x0001) +#define CR1_PE_Reset ((uint16_t)0xFFFE) + +/* I2C START mask */ +#define CR1_START_Set ((uint16_t)0x0100) +#define CR1_START_Reset ((uint16_t)0xFEFF) + +/* I2C STOP mask */ +#define CR1_STOP_Set ((uint16_t)0x0200) +#define CR1_STOP_Reset ((uint16_t)0xFDFF) + +/* I2C ACK mask */ +#define CR1_ACK_Set ((uint16_t)0x0400) +#define CR1_ACK_Reset ((uint16_t)0xFBFF) + +/* I2C ENGC mask */ +#define CR1_ENGC_Set ((uint16_t)0x0040) +#define CR1_ENGC_Reset ((uint16_t)0xFFBF) + +/* I2C SWRST mask */ +#define CR1_SWRST_Set ((uint16_t)0x8000) +#define CR1_SWRST_Reset ((uint16_t)0x7FFF) + +/* I2C PEC mask */ +#define CR1_PEC_Set ((uint16_t)0x1000) +#define CR1_PEC_Reset ((uint16_t)0xEFFF) + +/* I2C ENPEC mask */ +#define CR1_ENPEC_Set ((uint16_t)0x0020) +#define CR1_ENPEC_Reset ((uint16_t)0xFFDF) + +/* I2C ENARP mask */ +#define CR1_ENARP_Set ((uint16_t)0x0010) +#define CR1_ENARP_Reset ((uint16_t)0xFFEF) + +/* I2C NOSTRETCH mask */ +#define CR1_NOSTRETCH_Set ((uint16_t)0x0080) +#define CR1_NOSTRETCH_Reset ((uint16_t)0xFF7F) + +/* I2C registers Masks */ +#define CR1_CLEAR_Mask ((uint16_t)0xFBF5) + +/* I2C DMAEN mask */ +#define CR2_DMAEN_Set ((uint16_t)0x0800) +#define CR2_DMAEN_Reset ((uint16_t)0xF7FF) + +/* I2C LAST mask */ +#define CR2_LAST_Set ((uint16_t)0x1000) +#define CR2_LAST_Reset ((uint16_t)0xEFFF) + +/* I2C FREQ mask */ +#define CR2_FREQ_Reset ((uint16_t)0xFFC0) + +/* I2C ADD0 mask */ +#define OAR1_ADD0_Set ((uint16_t)0x0001) +#define OAR1_ADD0_Reset ((uint16_t)0xFFFE) + +/* I2C ENDUAL mask */ +#define OAR2_ENDUAL_Set ((uint16_t)0x0001) +#define OAR2_ENDUAL_Reset ((uint16_t)0xFFFE) + +/* I2C ADD2 mask */ +#define OAR2_ADD2_Reset ((uint16_t)0xFF01) + +/* I2C F/S mask */ +#define CCR_FS_Set ((uint16_t)0x8000) + +/* I2C CCR mask */ +#define CCR_CCR_Set ((uint16_t)0x0FFF) + +/* I2C FLAG mask */ +#define FLAG_Mask ((uint32_t)0x00FFFFFF) + +/* I2C Interrupt Enable mask */ +#define ITEN_Mask ((uint32_t)0x07000000) + +/** + * @} + */ + +/** @defgroup I2C_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup I2C_Private_Variables + * @{ + */ + +/** + * @} + */ + +/** @defgroup I2C_Private_FunctionPrototypes + * @{ + */ + +/** + * @} + */ + +/** @defgroup I2C_Private_Functions + * @{ + */ + +/** + * @brief Deinitializes the I2Cx peripheral registers to their default reset values. + * @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. + * @retval None + */ +void I2C_DeInit(I2C_TypeDef* I2Cx) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + + if (I2Cx == I2C1) + { + /* Enable I2C1 reset state */ + RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2C1, ENABLE); + /* Release I2C1 from reset state */ + RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2C1, DISABLE); + } + else + { + /* Enable I2C2 reset state */ + RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2C2, ENABLE); + /* Release I2C2 from reset state */ + RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2C2, DISABLE); + } +} + +/** + * @brief Initializes the I2Cx peripheral according to the specified + * parameters in the I2C_InitStruct. + * @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. + * @param I2C_InitStruct: pointer to a I2C_InitTypeDef structure that + * contains the configuration information for the specified I2C peripheral. + * @retval None + */ +void I2C_Init(I2C_TypeDef* I2Cx, I2C_InitTypeDef* I2C_InitStruct) +{ + uint16_t tmpreg = 0, freqrange = 0; + uint16_t result = 0x04; + uint32_t pclk1 = 8000000; + RCC_ClocksTypeDef rcc_clocks; + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_I2C_CLOCK_SPEED(I2C_InitStruct->I2C_ClockSpeed)); + assert_param(IS_I2C_MODE(I2C_InitStruct->I2C_Mode)); + assert_param(IS_I2C_DUTY_CYCLE(I2C_InitStruct->I2C_DutyCycle)); + assert_param(IS_I2C_OWN_ADDRESS1(I2C_InitStruct->I2C_OwnAddress1)); + assert_param(IS_I2C_ACK_STATE(I2C_InitStruct->I2C_Ack)); + assert_param(IS_I2C_ACKNOWLEDGE_ADDRESS(I2C_InitStruct->I2C_AcknowledgedAddress)); + +/*---------------------------- I2Cx CR2 Configuration ------------------------*/ + /* Get the I2Cx CR2 value */ + tmpreg = I2Cx->CR2; + /* Clear frequency FREQ[5:0] bits */ + tmpreg &= CR2_FREQ_Reset; + /* Get pclk1 frequency value */ + RCC_GetClocksFreq(&rcc_clocks); + pclk1 = rcc_clocks.PCLK1_Frequency; + /* Set frequency bits depending on pclk1 value */ + freqrange = (uint16_t)(pclk1 / 1000000); + tmpreg |= freqrange; + /* Write to I2Cx CR2 */ + I2Cx->CR2 = tmpreg; + +/*---------------------------- I2Cx CCR Configuration ------------------------*/ + /* Disable the selected I2C peripheral to configure TRISE */ + I2Cx->CR1 &= CR1_PE_Reset; + /* Reset tmpreg value */ + /* Clear F/S, DUTY and CCR[11:0] bits */ + tmpreg = 0; + + /* Configure speed in standard mode */ + if (I2C_InitStruct->I2C_ClockSpeed <= 100000) + { + /* Standard mode speed calculate */ + result = (uint16_t)(pclk1 / (I2C_InitStruct->I2C_ClockSpeed << 1)); + /* Test if CCR value is under 0x4*/ + if (result < 0x04) + { + /* Set minimum allowed value */ + result = 0x04; + } + /* Set speed value for standard mode */ + tmpreg |= result; + /* Set Maximum Rise Time for standard mode */ + I2Cx->TRISE = freqrange + 1; + } + /* Configure speed in fast mode */ + else /*(I2C_InitStruct->I2C_ClockSpeed <= 400000)*/ + { + if (I2C_InitStruct->I2C_DutyCycle == I2C_DutyCycle_2) + { + /* Fast mode speed calculate: Tlow/Thigh = 2 */ + result = (uint16_t)(pclk1 / (I2C_InitStruct->I2C_ClockSpeed * 3)); + } + else /*I2C_InitStruct->I2C_DutyCycle == I2C_DutyCycle_16_9*/ + { + /* Fast mode speed calculate: Tlow/Thigh = 16/9 */ + result = (uint16_t)(pclk1 / (I2C_InitStruct->I2C_ClockSpeed * 25)); + /* Set DUTY bit */ + result |= I2C_DutyCycle_16_9; + } + + /* Test if CCR value is under 0x1*/ + if ((result & CCR_CCR_Set) == 0) + { + /* Set minimum allowed value */ + result |= (uint16_t)0x0001; + } + /* Set speed value and set F/S bit for fast mode */ + tmpreg |= (uint16_t)(result | CCR_FS_Set); + /* Set Maximum Rise Time for fast mode */ + I2Cx->TRISE = (uint16_t)(((freqrange * (uint16_t)300) / (uint16_t)1000) + (uint16_t)1); + } + + /* Write to I2Cx CCR */ + I2Cx->CCR = tmpreg; + /* Enable the selected I2C peripheral */ + I2Cx->CR1 |= CR1_PE_Set; + +/*---------------------------- I2Cx CR1 Configuration ------------------------*/ + /* Get the I2Cx CR1 value */ + tmpreg = I2Cx->CR1; + /* Clear ACK, SMBTYPE and SMBUS bits */ + tmpreg &= CR1_CLEAR_Mask; + /* Configure I2Cx: mode and acknowledgement */ + /* Set SMBTYPE and SMBUS bits according to I2C_Mode value */ + /* Set ACK bit according to I2C_Ack value */ + tmpreg |= (uint16_t)((uint32_t)I2C_InitStruct->I2C_Mode | I2C_InitStruct->I2C_Ack); + /* Write to I2Cx CR1 */ + I2Cx->CR1 = tmpreg; + +/*---------------------------- I2Cx OAR1 Configuration -----------------------*/ + /* Set I2Cx Own Address1 and acknowledged address */ + I2Cx->OAR1 = (I2C_InitStruct->I2C_AcknowledgedAddress | I2C_InitStruct->I2C_OwnAddress1); +} + +/** + * @brief Fills each I2C_InitStruct member with its default value. + * @param I2C_InitStruct: pointer to an I2C_InitTypeDef structure which will be initialized. + * @retval None + */ +void I2C_StructInit(I2C_InitTypeDef* I2C_InitStruct) +{ +/*---------------- Reset I2C init structure parameters values ----------------*/ + /* initialize the I2C_ClockSpeed member */ + I2C_InitStruct->I2C_ClockSpeed = 5000; + /* Initialize the I2C_Mode member */ + I2C_InitStruct->I2C_Mode = I2C_Mode_I2C; + /* Initialize the I2C_DutyCycle member */ + I2C_InitStruct->I2C_DutyCycle = I2C_DutyCycle_2; + /* Initialize the I2C_OwnAddress1 member */ + I2C_InitStruct->I2C_OwnAddress1 = 0; + /* Initialize the I2C_Ack member */ + I2C_InitStruct->I2C_Ack = I2C_Ack_Disable; + /* Initialize the I2C_AcknowledgedAddress member */ + I2C_InitStruct->I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; +} + +/** + * @brief Enables or disables the specified I2C peripheral. + * @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. + * @param NewState: new state of the I2Cx peripheral. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void I2C_Cmd(I2C_TypeDef* I2Cx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the selected I2C peripheral */ + I2Cx->CR1 |= CR1_PE_Set; + } + else + { + /* Disable the selected I2C peripheral */ + I2Cx->CR1 &= CR1_PE_Reset; + } +} + +/** + * @brief Enables or disables the specified I2C DMA requests. + * @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. + * @param NewState: new state of the I2C DMA transfer. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void I2C_DMACmd(I2C_TypeDef* I2Cx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the selected I2C DMA requests */ + I2Cx->CR2 |= CR2_DMAEN_Set; + } + else + { + /* Disable the selected I2C DMA requests */ + I2Cx->CR2 &= CR2_DMAEN_Reset; + } +} + +/** + * @brief Specifies if the next DMA transfer will be the last one. + * @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. + * @param NewState: new state of the I2C DMA last transfer. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void I2C_DMALastTransferCmd(I2C_TypeDef* I2Cx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Next DMA transfer is the last transfer */ + I2Cx->CR2 |= CR2_LAST_Set; + } + else + { + /* Next DMA transfer is not the last transfer */ + I2Cx->CR2 &= CR2_LAST_Reset; + } +} + +/** + * @brief Generates I2Cx communication START condition. + * @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. + * @param NewState: new state of the I2C START condition generation. + * This parameter can be: ENABLE or DISABLE. + * @retval None. + */ +void I2C_GenerateSTART(I2C_TypeDef* I2Cx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Generate a START condition */ + I2Cx->CR1 |= CR1_START_Set; + } + else + { + /* Disable the START condition generation */ + I2Cx->CR1 &= CR1_START_Reset; + } +} + +/** + * @brief Generates I2Cx communication STOP condition. + * @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. + * @param NewState: new state of the I2C STOP condition generation. + * This parameter can be: ENABLE or DISABLE. + * @retval None. + */ +void I2C_GenerateSTOP(I2C_TypeDef* I2Cx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Generate a STOP condition */ + I2Cx->CR1 |= CR1_STOP_Set; + } + else + { + /* Disable the STOP condition generation */ + I2Cx->CR1 &= CR1_STOP_Reset; + } +} + +/** + * @brief Enables or disables the specified I2C acknowledge feature. + * @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. + * @param NewState: new state of the I2C Acknowledgement. + * This parameter can be: ENABLE or DISABLE. + * @retval None. + */ +void I2C_AcknowledgeConfig(I2C_TypeDef* I2Cx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the acknowledgement */ + I2Cx->CR1 |= CR1_ACK_Set; + } + else + { + /* Disable the acknowledgement */ + I2Cx->CR1 &= CR1_ACK_Reset; + } +} + +/** + * @brief Configures the specified I2C own address2. + * @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. + * @param Address: specifies the 7bit I2C own address2. + * @retval None. + */ +void I2C_OwnAddress2Config(I2C_TypeDef* I2Cx, uint8_t Address) +{ + uint16_t tmpreg = 0; + + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + + /* Get the old register value */ + tmpreg = I2Cx->OAR2; + + /* Reset I2Cx Own address2 bit [7:1] */ + tmpreg &= OAR2_ADD2_Reset; + + /* Set I2Cx Own address2 */ + tmpreg |= (uint16_t)((uint16_t)Address & (uint16_t)0x00FE); + + /* Store the new register value */ + I2Cx->OAR2 = tmpreg; +} + +/** + * @brief Enables or disables the specified I2C dual addressing mode. + * @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. + * @param NewState: new state of the I2C dual addressing mode. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void I2C_DualAddressCmd(I2C_TypeDef* I2Cx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable dual addressing mode */ + I2Cx->OAR2 |= OAR2_ENDUAL_Set; + } + else + { + /* Disable dual addressing mode */ + I2Cx->OAR2 &= OAR2_ENDUAL_Reset; + } +} + +/** + * @brief Enables or disables the specified I2C general call feature. + * @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. + * @param NewState: new state of the I2C General call. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void I2C_GeneralCallCmd(I2C_TypeDef* I2Cx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable generall call */ + I2Cx->CR1 |= CR1_ENGC_Set; + } + else + { + /* Disable generall call */ + I2Cx->CR1 &= CR1_ENGC_Reset; + } +} + +/** + * @brief Enables or disables the specified I2C interrupts. + * @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. + * @param I2C_IT: specifies the I2C interrupts sources to be enabled or disabled. + * This parameter can be any combination of the following values: + * @arg I2C_IT_BUF: Buffer interrupt mask + * @arg I2C_IT_EVT: Event interrupt mask + * @arg I2C_IT_ERR: Error interrupt mask + * @param NewState: new state of the specified I2C interrupts. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void I2C_ITConfig(I2C_TypeDef* I2Cx, uint16_t I2C_IT, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + assert_param(IS_I2C_CONFIG_IT(I2C_IT)); + + if (NewState != DISABLE) + { + /* Enable the selected I2C interrupts */ + I2Cx->CR2 |= I2C_IT; + } + else + { + /* Disable the selected I2C interrupts */ + I2Cx->CR2 &= (uint16_t)~I2C_IT; + } +} + +/** + * @brief Sends a data byte through the I2Cx peripheral. + * @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. + * @param Data: Byte to be transmitted.. + * @retval None + */ +void I2C_SendData(I2C_TypeDef* I2Cx, uint8_t Data) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + /* Write in the DR register the data to be sent */ + I2Cx->DR = Data; +} + +/** + * @brief Returns the most recent received data by the I2Cx peripheral. + * @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. + * @retval The value of the received data. + */ +uint8_t I2C_ReceiveData(I2C_TypeDef* I2Cx) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + /* Return the data in the DR register */ + return (uint8_t)I2Cx->DR; +} + +/** + * @brief Transmits the address byte to select the slave device. + * @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. + * @param Address: specifies the slave address which will be transmitted + * @param I2C_Direction: specifies whether the I2C device will be a + * Transmitter or a Receiver. This parameter can be one of the following values + * @arg I2C_Direction_Transmitter: Transmitter mode + * @arg I2C_Direction_Receiver: Receiver mode + * @retval None. + */ +void I2C_Send7bitAddress(I2C_TypeDef* I2Cx, uint8_t Address, uint8_t I2C_Direction) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_I2C_DIRECTION(I2C_Direction)); + /* Test on the direction to set/reset the read/write bit */ + if (I2C_Direction != I2C_Direction_Transmitter) + { + /* Set the address bit0 for read */ + Address |= OAR1_ADD0_Set; + } + else + { + /* Reset the address bit0 for write */ + Address &= OAR1_ADD0_Reset; + } + /* Send the address */ + I2Cx->DR = Address; +} + +/** + * @brief Reads the specified I2C register and returns its value. + * @param I2C_Register: specifies the register to read. + * This parameter can be one of the following values: + * @arg I2C_Register_CR1: CR1 register. + * @arg I2C_Register_CR2: CR2 register. + * @arg I2C_Register_OAR1: OAR1 register. + * @arg I2C_Register_OAR2: OAR2 register. + * @arg I2C_Register_DR: DR register. + * @arg I2C_Register_SR1: SR1 register. + * @arg I2C_Register_SR2: SR2 register. + * @arg I2C_Register_CCR: CCR register. + * @arg I2C_Register_TRISE: TRISE register. + * @retval The value of the read register. + */ +uint16_t I2C_ReadRegister(I2C_TypeDef* I2Cx, uint8_t I2C_Register) +{ + __IO uint32_t tmp = 0; + + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_I2C_REGISTER(I2C_Register)); + + tmp = (uint32_t) I2Cx; + tmp += I2C_Register; + + /* Return the selected register value */ + return (*(__IO uint16_t *) tmp); +} + +/** + * @brief Enables or disables the specified I2C software reset. + * @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. + * @param NewState: new state of the I2C software reset. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void I2C_SoftwareResetCmd(I2C_TypeDef* I2Cx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Peripheral under reset */ + I2Cx->CR1 |= CR1_SWRST_Set; + } + else + { + /* Peripheral not under reset */ + I2Cx->CR1 &= CR1_SWRST_Reset; + } +} + +/** + * @brief Selects the specified I2C NACK position in master receiver mode. + * This function is useful in I2C Master Receiver mode when the number + * of data to be received is equal to 2. In this case, this function + * should be called (with parameter I2C_NACKPosition_Next) before data + * reception starts,as described in the 2-byte reception procedure + * recommended in Reference Manual in Section: Master receiver. + * @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. + * @param I2C_NACKPosition: specifies the NACK position. + * This parameter can be one of the following values: + * @arg I2C_NACKPosition_Next: indicates that the next byte will be the last + * received byte. + * @arg I2C_NACKPosition_Current: indicates that current byte is the last + * received byte. + * + * @note This function configures the same bit (POS) as I2C_PECPositionConfig() + * but is intended to be used in I2C mode while I2C_PECPositionConfig() + * is intended to used in SMBUS mode. + * + * @retval None + */ +void I2C_NACKPositionConfig(I2C_TypeDef* I2Cx, uint16_t I2C_NACKPosition) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_I2C_NACK_POSITION(I2C_NACKPosition)); + + /* Check the input parameter */ + if (I2C_NACKPosition == I2C_NACKPosition_Next) + { + /* Next byte in shift register is the last received byte */ + I2Cx->CR1 |= I2C_NACKPosition_Next; + } + else + { + /* Current byte in shift register is the last received byte */ + I2Cx->CR1 &= I2C_NACKPosition_Current; + } +} + +/** + * @brief Drives the SMBusAlert pin high or low for the specified I2C. + * @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. + * @param I2C_SMBusAlert: specifies SMBAlert pin level. + * This parameter can be one of the following values: + * @arg I2C_SMBusAlert_Low: SMBAlert pin driven low + * @arg I2C_SMBusAlert_High: SMBAlert pin driven high + * @retval None + */ +void I2C_SMBusAlertConfig(I2C_TypeDef* I2Cx, uint16_t I2C_SMBusAlert) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_I2C_SMBUS_ALERT(I2C_SMBusAlert)); + if (I2C_SMBusAlert == I2C_SMBusAlert_Low) + { + /* Drive the SMBusAlert pin Low */ + I2Cx->CR1 |= I2C_SMBusAlert_Low; + } + else + { + /* Drive the SMBusAlert pin High */ + I2Cx->CR1 &= I2C_SMBusAlert_High; + } +} + +/** + * @brief Enables or disables the specified I2C PEC transfer. + * @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. + * @param NewState: new state of the I2C PEC transmission. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void I2C_TransmitPEC(I2C_TypeDef* I2Cx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the selected I2C PEC transmission */ + I2Cx->CR1 |= CR1_PEC_Set; + } + else + { + /* Disable the selected I2C PEC transmission */ + I2Cx->CR1 &= CR1_PEC_Reset; + } +} + +/** + * @brief Selects the specified I2C PEC position. + * @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. + * @param I2C_PECPosition: specifies the PEC position. + * This parameter can be one of the following values: + * @arg I2C_PECPosition_Next: indicates that the next byte is PEC + * @arg I2C_PECPosition_Current: indicates that current byte is PEC + * + * @note This function configures the same bit (POS) as I2C_NACKPositionConfig() + * but is intended to be used in SMBUS mode while I2C_NACKPositionConfig() + * is intended to used in I2C mode. + * + * @retval None + */ +void I2C_PECPositionConfig(I2C_TypeDef* I2Cx, uint16_t I2C_PECPosition) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_I2C_PEC_POSITION(I2C_PECPosition)); + if (I2C_PECPosition == I2C_PECPosition_Next) + { + /* Next byte in shift register is PEC */ + I2Cx->CR1 |= I2C_PECPosition_Next; + } + else + { + /* Current byte in shift register is PEC */ + I2Cx->CR1 &= I2C_PECPosition_Current; + } +} + +/** + * @brief Enables or disables the PEC value calculation of the transferred bytes. + * @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. + * @param NewState: new state of the I2Cx PEC value calculation. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void I2C_CalculatePEC(I2C_TypeDef* I2Cx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the selected I2C PEC calculation */ + I2Cx->CR1 |= CR1_ENPEC_Set; + } + else + { + /* Disable the selected I2C PEC calculation */ + I2Cx->CR1 &= CR1_ENPEC_Reset; + } +} + +/** + * @brief Returns the PEC value for the specified I2C. + * @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. + * @retval The PEC value. + */ +uint8_t I2C_GetPEC(I2C_TypeDef* I2Cx) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + /* Return the selected I2C PEC value */ + return ((I2Cx->SR2) >> 8); +} + +/** + * @brief Enables or disables the specified I2C ARP. + * @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. + * @param NewState: new state of the I2Cx ARP. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void I2C_ARPCmd(I2C_TypeDef* I2Cx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the selected I2C ARP */ + I2Cx->CR1 |= CR1_ENARP_Set; + } + else + { + /* Disable the selected I2C ARP */ + I2Cx->CR1 &= CR1_ENARP_Reset; + } +} + +/** + * @brief Enables or disables the specified I2C Clock stretching. + * @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. + * @param NewState: new state of the I2Cx Clock stretching. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void I2C_StretchClockCmd(I2C_TypeDef* I2Cx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState == DISABLE) + { + /* Enable the selected I2C Clock stretching */ + I2Cx->CR1 |= CR1_NOSTRETCH_Set; + } + else + { + /* Disable the selected I2C Clock stretching */ + I2Cx->CR1 &= CR1_NOSTRETCH_Reset; + } +} + +/** + * @brief Selects the specified I2C fast mode duty cycle. + * @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. + * @param I2C_DutyCycle: specifies the fast mode duty cycle. + * This parameter can be one of the following values: + * @arg I2C_DutyCycle_2: I2C fast mode Tlow/Thigh = 2 + * @arg I2C_DutyCycle_16_9: I2C fast mode Tlow/Thigh = 16/9 + * @retval None + */ +void I2C_FastModeDutyCycleConfig(I2C_TypeDef* I2Cx, uint16_t I2C_DutyCycle) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_I2C_DUTY_CYCLE(I2C_DutyCycle)); + if (I2C_DutyCycle != I2C_DutyCycle_16_9) + { + /* I2C fast mode Tlow/Thigh=2 */ + I2Cx->CCR &= I2C_DutyCycle_2; + } + else + { + /* I2C fast mode Tlow/Thigh=16/9 */ + I2Cx->CCR |= I2C_DutyCycle_16_9; + } +} + + + +/** + * @brief + **************************************************************************************** + * + * I2C State Monitoring Functions + * + **************************************************************************************** + * This I2C driver provides three different ways for I2C state monitoring + * depending on the application requirements and constraints: + * + * + * 1) Basic state monitoring: + * Using I2C_CheckEvent() function: + * It compares the status registers (SR1 and SR2) content to a given event + * (can be the combination of one or more flags). + * It returns SUCCESS if the current status includes the given flags + * and returns ERROR if one or more flags are missing in the current status. + * - When to use: + * - This function is suitable for most applications as well as for startup + * activity since the events are fully described in the product reference manual + * (RM0008). + * - It is also suitable for users who need to define their own events. + * - Limitations: + * - If an error occurs (ie. error flags are set besides to the monitored flags), + * the I2C_CheckEvent() function may return SUCCESS despite the communication + * hold or corrupted real state. + * In this case, it is advised to use error interrupts to monitor the error + * events and handle them in the interrupt IRQ handler. + * + * @note + * For error management, it is advised to use the following functions: + * - I2C_ITConfig() to configure and enable the error interrupts (I2C_IT_ERR). + * - I2Cx_ER_IRQHandler() which is called when the error interrupt occurs. + * Where x is the peripheral instance (I2C1, I2C2 ...) + * - I2C_GetFlagStatus() or I2C_GetITStatus() to be called into I2Cx_ER_IRQHandler() + * in order to determine which error occured. + * - I2C_ClearFlag() or I2C_ClearITPendingBit() and/or I2C_SoftwareResetCmd() + * and/or I2C_GenerateStop() in order to clear the error flag and source, + * and return to correct communication status. + * + * + * 2) Advanced state monitoring: + * Using the function I2C_GetLastEvent() which returns the image of both status + * registers in a single word (uint32_t) (Status Register 2 value is shifted left + * by 16 bits and concatenated to Status Register 1). + * - When to use: + * - This function is suitable for the same applications above but it allows to + * overcome the mentioned limitation of I2C_GetFlagStatus() function. + * The returned value could be compared to events already defined in the + * library (stm32f10x_i2c.h) or to custom values defined by user. + * - This function is suitable when multiple flags are monitored at the same time. + * - At the opposite of I2C_CheckEvent() function, this function allows user to + * choose when an event is accepted (when all events flags are set and no + * other flags are set or just when the needed flags are set like + * I2C_CheckEvent() function). + * - Limitations: + * - User may need to define his own events. + * - Same remark concerning the error management is applicable for this + * function if user decides to check only regular communication flags (and + * ignores error flags). + * + * + * 3) Flag-based state monitoring: + * Using the function I2C_GetFlagStatus() which simply returns the status of + * one single flag (ie. I2C_FLAG_RXNE ...). + * - When to use: + * - This function could be used for specific applications or in debug phase. + * - It is suitable when only one flag checking is needed (most I2C events + * are monitored through multiple flags). + * - Limitations: + * - When calling this function, the Status register is accessed. Some flags are + * cleared when the status register is accessed. So checking the status + * of one Flag, may clear other ones. + * - Function may need to be called twice or more in order to monitor one + * single event. + * + * For detailed description of Events, please refer to section I2C_Events in + * stm32f10x_i2c.h file. + * + */ + +/** + * + * 1) Basic state monitoring + ******************************************************************************* + */ + +/** + * @brief Checks whether the last I2Cx Event is equal to the one passed + * as parameter. + * @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. + * @param I2C_EVENT: specifies the event to be checked. + * This parameter can be one of the following values: + * @arg I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED : EV1 + * @arg I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED : EV1 + * @arg I2C_EVENT_SLAVE_TRANSMITTER_SECONDADDRESS_MATCHED : EV1 + * @arg I2C_EVENT_SLAVE_RECEIVER_SECONDADDRESS_MATCHED : EV1 + * @arg I2C_EVENT_SLAVE_GENERALCALLADDRESS_MATCHED : EV1 + * @arg I2C_EVENT_SLAVE_BYTE_RECEIVED : EV2 + * @arg (I2C_EVENT_SLAVE_BYTE_RECEIVED | I2C_FLAG_DUALF) : EV2 + * @arg (I2C_EVENT_SLAVE_BYTE_RECEIVED | I2C_FLAG_GENCALL) : EV2 + * @arg I2C_EVENT_SLAVE_BYTE_TRANSMITTED : EV3 + * @arg (I2C_EVENT_SLAVE_BYTE_TRANSMITTED | I2C_FLAG_DUALF) : EV3 + * @arg (I2C_EVENT_SLAVE_BYTE_TRANSMITTED | I2C_FLAG_GENCALL) : EV3 + * @arg I2C_EVENT_SLAVE_ACK_FAILURE : EV3_2 + * @arg I2C_EVENT_SLAVE_STOP_DETECTED : EV4 + * @arg I2C_EVENT_MASTER_MODE_SELECT : EV5 + * @arg I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED : EV6 + * @arg I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED : EV6 + * @arg I2C_EVENT_MASTER_BYTE_RECEIVED : EV7 + * @arg I2C_EVENT_MASTER_BYTE_TRANSMITTING : EV8 + * @arg I2C_EVENT_MASTER_BYTE_TRANSMITTED : EV8_2 + * @arg I2C_EVENT_MASTER_MODE_ADDRESS10 : EV9 + * + * @note: For detailed description of Events, please refer to section + * I2C_Events in stm32f10x_i2c.h file. + * + * @retval An ErrorStatus enumeration value: + * - SUCCESS: Last event is equal to the I2C_EVENT + * - ERROR: Last event is different from the I2C_EVENT + */ +ErrorStatus I2C_CheckEvent(I2C_TypeDef* I2Cx, uint32_t I2C_EVENT) +{ + uint32_t lastevent = 0; + uint32_t flag1 = 0, flag2 = 0; + ErrorStatus status = ERROR; + + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_I2C_EVENT(I2C_EVENT)); + + /* Read the I2Cx status register */ + flag1 = I2Cx->SR1; + flag2 = I2Cx->SR2; + flag2 = flag2 << 16; + + /* Get the last event value from I2C status register */ + lastevent = (flag1 | flag2) & FLAG_Mask; + + /* Check whether the last event contains the I2C_EVENT */ + if ((lastevent & I2C_EVENT) == I2C_EVENT) + { + /* SUCCESS: last event is equal to I2C_EVENT */ + status = SUCCESS; + } + else + { + /* ERROR: last event is different from I2C_EVENT */ + status = ERROR; + } + /* Return status */ + return status; +} + +/** + * + * 2) Advanced state monitoring + ******************************************************************************* + */ + +/** + * @brief Returns the last I2Cx Event. + * @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. + * + * @note: For detailed description of Events, please refer to section + * I2C_Events in stm32f10x_i2c.h file. + * + * @retval The last event + */ +uint32_t I2C_GetLastEvent(I2C_TypeDef* I2Cx) +{ + uint32_t lastevent = 0; + uint32_t flag1 = 0, flag2 = 0; + + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + + /* Read the I2Cx status register */ + flag1 = I2Cx->SR1; + flag2 = I2Cx->SR2; + flag2 = flag2 << 16; + + /* Get the last event value from I2C status register */ + lastevent = (flag1 | flag2) & FLAG_Mask; + + /* Return status */ + return lastevent; +} + +/** + * + * 3) Flag-based state monitoring + ******************************************************************************* + */ + +/** + * @brief Checks whether the specified I2C flag is set or not. + * @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. + * @param I2C_FLAG: specifies the flag to check. + * This parameter can be one of the following values: + * @arg I2C_FLAG_DUALF: Dual flag (Slave mode) + * @arg I2C_FLAG_SMBHOST: SMBus host header (Slave mode) + * @arg I2C_FLAG_SMBDEFAULT: SMBus default header (Slave mode) + * @arg I2C_FLAG_GENCALL: General call header flag (Slave mode) + * @arg I2C_FLAG_TRA: Transmitter/Receiver flag + * @arg I2C_FLAG_BUSY: Bus busy flag + * @arg I2C_FLAG_MSL: Master/Slave flag + * @arg I2C_FLAG_SMBALERT: SMBus Alert flag + * @arg I2C_FLAG_TIMEOUT: Timeout or Tlow error flag + * @arg I2C_FLAG_PECERR: PEC error in reception flag + * @arg I2C_FLAG_OVR: Overrun/Underrun flag (Slave mode) + * @arg I2C_FLAG_AF: Acknowledge failure flag + * @arg I2C_FLAG_ARLO: Arbitration lost flag (Master mode) + * @arg I2C_FLAG_BERR: Bus error flag + * @arg I2C_FLAG_TXE: Data register empty flag (Transmitter) + * @arg I2C_FLAG_RXNE: Data register not empty (Receiver) flag + * @arg I2C_FLAG_STOPF: Stop detection flag (Slave mode) + * @arg I2C_FLAG_ADD10: 10-bit header sent flag (Master mode) + * @arg I2C_FLAG_BTF: Byte transfer finished flag + * @arg I2C_FLAG_ADDR: Address sent flag (Master mode) "ADSL" + * Address matched flag (Slave mode)"ENDA" + * @arg I2C_FLAG_SB: Start bit flag (Master mode) + * @retval The new state of I2C_FLAG (SET or RESET). + */ +FlagStatus I2C_GetFlagStatus(I2C_TypeDef* I2Cx, uint32_t I2C_FLAG) +{ + FlagStatus bitstatus = RESET; + __IO uint32_t i2creg = 0, i2cxbase = 0; + + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_I2C_GET_FLAG(I2C_FLAG)); + + /* Get the I2Cx peripheral base address */ + i2cxbase = (uint32_t)I2Cx; + + /* Read flag register index */ + i2creg = I2C_FLAG >> 28; + + /* Get bit[23:0] of the flag */ + I2C_FLAG &= FLAG_Mask; + + if(i2creg != 0) + { + /* Get the I2Cx SR1 register address */ + i2cxbase += 0x14; + } + else + { + /* Flag in I2Cx SR2 Register */ + I2C_FLAG = (uint32_t)(I2C_FLAG >> 16); + /* Get the I2Cx SR2 register address */ + i2cxbase += 0x18; + } + + if(((*(__IO uint32_t *)i2cxbase) & I2C_FLAG) != (uint32_t)RESET) + { + /* I2C_FLAG is set */ + bitstatus = SET; + } + else + { + /* I2C_FLAG is reset */ + bitstatus = RESET; + } + + /* Return the I2C_FLAG status */ + return bitstatus; +} + + + +/** + * @brief Clears the I2Cx's pending flags. + * @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. + * @param I2C_FLAG: specifies the flag to clear. + * This parameter can be any combination of the following values: + * @arg I2C_FLAG_SMBALERT: SMBus Alert flag + * @arg I2C_FLAG_TIMEOUT: Timeout or Tlow error flag + * @arg I2C_FLAG_PECERR: PEC error in reception flag + * @arg I2C_FLAG_OVR: Overrun/Underrun flag (Slave mode) + * @arg I2C_FLAG_AF: Acknowledge failure flag + * @arg I2C_FLAG_ARLO: Arbitration lost flag (Master mode) + * @arg I2C_FLAG_BERR: Bus error flag + * + * @note + * - STOPF (STOP detection) is cleared by software sequence: a read operation + * to I2C_SR1 register (I2C_GetFlagStatus()) followed by a write operation + * to I2C_CR1 register (I2C_Cmd() to re-enable the I2C peripheral). + * - ADD10 (10-bit header sent) is cleared by software sequence: a read + * operation to I2C_SR1 (I2C_GetFlagStatus()) followed by writing the + * second byte of the address in DR register. + * - BTF (Byte Transfer Finished) is cleared by software sequence: a read + * operation to I2C_SR1 register (I2C_GetFlagStatus()) followed by a + * read/write to I2C_DR register (I2C_SendData()). + * - ADDR (Address sent) is cleared by software sequence: a read operation to + * I2C_SR1 register (I2C_GetFlagStatus()) followed by a read operation to + * I2C_SR2 register ((void)(I2Cx->SR2)). + * - SB (Start Bit) is cleared software sequence: a read operation to I2C_SR1 + * register (I2C_GetFlagStatus()) followed by a write operation to I2C_DR + * register (I2C_SendData()). + * @retval None + */ +void I2C_ClearFlag(I2C_TypeDef* I2Cx, uint32_t I2C_FLAG) +{ + uint32_t flagpos = 0; + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_I2C_CLEAR_FLAG(I2C_FLAG)); + /* Get the I2C flag position */ + flagpos = I2C_FLAG & FLAG_Mask; + /* Clear the selected I2C flag */ + I2Cx->SR1 = (uint16_t)~flagpos; +} + +/** + * @brief Checks whether the specified I2C interrupt has occurred or not. + * @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. + * @param I2C_IT: specifies the interrupt source to check. + * This parameter can be one of the following values: + * @arg I2C_IT_SMBALERT: SMBus Alert flag + * @arg I2C_IT_TIMEOUT: Timeout or Tlow error flag + * @arg I2C_IT_PECERR: PEC error in reception flag + * @arg I2C_IT_OVR: Overrun/Underrun flag (Slave mode) + * @arg I2C_IT_AF: Acknowledge failure flag + * @arg I2C_IT_ARLO: Arbitration lost flag (Master mode) + * @arg I2C_IT_BERR: Bus error flag + * @arg I2C_IT_TXE: Data register empty flag (Transmitter) + * @arg I2C_IT_RXNE: Data register not empty (Receiver) flag + * @arg I2C_IT_STOPF: Stop detection flag (Slave mode) + * @arg I2C_IT_ADD10: 10-bit header sent flag (Master mode) + * @arg I2C_IT_BTF: Byte transfer finished flag + * @arg I2C_IT_ADDR: Address sent flag (Master mode) "ADSL" + * Address matched flag (Slave mode)"ENDAD" + * @arg I2C_IT_SB: Start bit flag (Master mode) + * @retval The new state of I2C_IT (SET or RESET). + */ +ITStatus I2C_GetITStatus(I2C_TypeDef* I2Cx, uint32_t I2C_IT) +{ + ITStatus bitstatus = RESET; + uint32_t enablestatus = 0; + + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_I2C_GET_IT(I2C_IT)); + + /* Check if the interrupt source is enabled or not */ + enablestatus = (uint32_t)(((I2C_IT & ITEN_Mask) >> 16) & (I2Cx->CR2)) ; + + /* Get bit[23:0] of the flag */ + I2C_IT &= FLAG_Mask; + + /* Check the status of the specified I2C flag */ + if (((I2Cx->SR1 & I2C_IT) != (uint32_t)RESET) && enablestatus) + { + /* I2C_IT is set */ + bitstatus = SET; + } + else + { + /* I2C_IT is reset */ + bitstatus = RESET; + } + /* Return the I2C_IT status */ + return bitstatus; +} + +/** + * @brief Clears the I2Cxs interrupt pending bits. + * @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. + * @param I2C_IT: specifies the interrupt pending bit to clear. + * This parameter can be any combination of the following values: + * @arg I2C_IT_SMBALERT: SMBus Alert interrupt + * @arg I2C_IT_TIMEOUT: Timeout or Tlow error interrupt + * @arg I2C_IT_PECERR: PEC error in reception interrupt + * @arg I2C_IT_OVR: Overrun/Underrun interrupt (Slave mode) + * @arg I2C_IT_AF: Acknowledge failure interrupt + * @arg I2C_IT_ARLO: Arbitration lost interrupt (Master mode) + * @arg I2C_IT_BERR: Bus error interrupt + * + * @note + * - STOPF (STOP detection) is cleared by software sequence: a read operation + * to I2C_SR1 register (I2C_GetITStatus()) followed by a write operation to + * I2C_CR1 register (I2C_Cmd() to re-enable the I2C peripheral). + * - ADD10 (10-bit header sent) is cleared by software sequence: a read + * operation to I2C_SR1 (I2C_GetITStatus()) followed by writing the second + * byte of the address in I2C_DR register. + * - BTF (Byte Transfer Finished) is cleared by software sequence: a read + * operation to I2C_SR1 register (I2C_GetITStatus()) followed by a + * read/write to I2C_DR register (I2C_SendData()). + * - ADDR (Address sent) is cleared by software sequence: a read operation to + * I2C_SR1 register (I2C_GetITStatus()) followed by a read operation to + * I2C_SR2 register ((void)(I2Cx->SR2)). + * - SB (Start Bit) is cleared by software sequence: a read operation to + * I2C_SR1 register (I2C_GetITStatus()) followed by a write operation to + * I2C_DR register (I2C_SendData()). + * @retval None + */ +void I2C_ClearITPendingBit(I2C_TypeDef* I2Cx, uint32_t I2C_IT) +{ + uint32_t flagpos = 0; + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_I2C_CLEAR_IT(I2C_IT)); + /* Get the I2C flag position */ + flagpos = I2C_IT & FLAG_Mask; + /* Clear the selected I2C flag */ + I2Cx->SR1 = (uint16_t)~flagpos; +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_iwdg.c b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_iwdg.c new file mode 100644 index 0000000..c7cbf7e --- /dev/null +++ b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_iwdg.c @@ -0,0 +1,190 @@ +/** + ****************************************************************************** + * @file stm32f10x_iwdg.c + * @author MCD Application Team + * @version V3.5.0 + * @date 11-March-2011 + * @brief This file provides all the IWDG firmware functions. + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

    © COPYRIGHT 2011 STMicroelectronics

    + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f10x_iwdg.h" + +/** @addtogroup STM32F10x_StdPeriph_Driver + * @{ + */ + +/** @defgroup IWDG + * @brief IWDG driver modules + * @{ + */ + +/** @defgroup IWDG_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @defgroup IWDG_Private_Defines + * @{ + */ + +/* ---------------------- IWDG registers bit mask ----------------------------*/ + +/* KR register bit mask */ +#define KR_KEY_Reload ((uint16_t)0xAAAA) +#define KR_KEY_Enable ((uint16_t)0xCCCC) + +/** + * @} + */ + +/** @defgroup IWDG_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup IWDG_Private_Variables + * @{ + */ + +/** + * @} + */ + +/** @defgroup IWDG_Private_FunctionPrototypes + * @{ + */ + +/** + * @} + */ + +/** @defgroup IWDG_Private_Functions + * @{ + */ + +/** + * @brief Enables or disables write access to IWDG_PR and IWDG_RLR registers. + * @param IWDG_WriteAccess: new state of write access to IWDG_PR and IWDG_RLR registers. + * This parameter can be one of the following values: + * @arg IWDG_WriteAccess_Enable: Enable write access to IWDG_PR and IWDG_RLR registers + * @arg IWDG_WriteAccess_Disable: Disable write access to IWDG_PR and IWDG_RLR registers + * @retval None + */ +void IWDG_WriteAccessCmd(uint16_t IWDG_WriteAccess) +{ + /* Check the parameters */ + assert_param(IS_IWDG_WRITE_ACCESS(IWDG_WriteAccess)); + IWDG->KR = IWDG_WriteAccess; +} + +/** + * @brief Sets IWDG Prescaler value. + * @param IWDG_Prescaler: specifies the IWDG Prescaler value. + * This parameter can be one of the following values: + * @arg IWDG_Prescaler_4: IWDG prescaler set to 4 + * @arg IWDG_Prescaler_8: IWDG prescaler set to 8 + * @arg IWDG_Prescaler_16: IWDG prescaler set to 16 + * @arg IWDG_Prescaler_32: IWDG prescaler set to 32 + * @arg IWDG_Prescaler_64: IWDG prescaler set to 64 + * @arg IWDG_Prescaler_128: IWDG prescaler set to 128 + * @arg IWDG_Prescaler_256: IWDG prescaler set to 256 + * @retval None + */ +void IWDG_SetPrescaler(uint8_t IWDG_Prescaler) +{ + /* Check the parameters */ + assert_param(IS_IWDG_PRESCALER(IWDG_Prescaler)); + IWDG->PR = IWDG_Prescaler; +} + +/** + * @brief Sets IWDG Reload value. + * @param Reload: specifies the IWDG Reload value. + * This parameter must be a number between 0 and 0x0FFF. + * @retval None + */ +void IWDG_SetReload(uint16_t Reload) +{ + /* Check the parameters */ + assert_param(IS_IWDG_RELOAD(Reload)); + IWDG->RLR = Reload; +} + +/** + * @brief Reloads IWDG counter with value defined in the reload register + * (write access to IWDG_PR and IWDG_RLR registers disabled). + * @param None + * @retval None + */ +void IWDG_ReloadCounter(void) +{ + IWDG->KR = KR_KEY_Reload; +} + +/** + * @brief Enables IWDG (write access to IWDG_PR and IWDG_RLR registers disabled). + * @param None + * @retval None + */ +void IWDG_Enable(void) +{ + IWDG->KR = KR_KEY_Enable; +} + +/** + * @brief Checks whether the specified IWDG flag is set or not. + * @param IWDG_FLAG: specifies the flag to check. + * This parameter can be one of the following values: + * @arg IWDG_FLAG_PVU: Prescaler Value Update on going + * @arg IWDG_FLAG_RVU: Reload Value Update on going + * @retval The new state of IWDG_FLAG (SET or RESET). + */ +FlagStatus IWDG_GetFlagStatus(uint16_t IWDG_FLAG) +{ + FlagStatus bitstatus = RESET; + /* Check the parameters */ + assert_param(IS_IWDG_FLAG(IWDG_FLAG)); + if ((IWDG->SR & IWDG_FLAG) != (uint32_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + /* Return the flag status */ + return bitstatus; +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_pwr.c b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_pwr.c new file mode 100644 index 0000000000000000000000000000000000000000..29950e0c449588994958a3e5e43ec84844d254cf GIT binary patch literal 16384 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
    © COPYRIGHT 2011 STMicroelectronics
    + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f10x_rcc.h" + +/** @addtogroup STM32F10x_StdPeriph_Driver + * @{ + */ + +/** @defgroup RCC + * @brief RCC driver modules + * @{ + */ + +/** @defgroup RCC_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @defgroup RCC_Private_Defines + * @{ + */ + +/* ------------ RCC registers bit address in the alias region ----------- */ +#define RCC_OFFSET (RCC_BASE - PERIPH_BASE) + +/* --- CR Register ---*/ + +/* Alias word address of HSION bit */ +#define CR_OFFSET (RCC_OFFSET + 0x00) +#define HSION_BitNumber 0x00 +#define CR_HSION_BB (PERIPH_BB_BASE + (CR_OFFSET * 32) + (HSION_BitNumber * 4)) + +/* Alias word address of PLLON bit */ +#define PLLON_BitNumber 0x18 +#define CR_PLLON_BB (PERIPH_BB_BASE + (CR_OFFSET * 32) + (PLLON_BitNumber * 4)) + +#ifdef STM32F10X_CL + /* Alias word address of PLL2ON bit */ + #define PLL2ON_BitNumber 0x1A + #define CR_PLL2ON_BB (PERIPH_BB_BASE + (CR_OFFSET * 32) + (PLL2ON_BitNumber * 4)) + + /* Alias word address of PLL3ON bit */ + #define PLL3ON_BitNumber 0x1C + #define CR_PLL3ON_BB (PERIPH_BB_BASE + (CR_OFFSET * 32) + (PLL3ON_BitNumber * 4)) +#endif /* STM32F10X_CL */ + +/* Alias word address of CSSON bit */ +#define CSSON_BitNumber 0x13 +#define CR_CSSON_BB (PERIPH_BB_BASE + (CR_OFFSET * 32) + (CSSON_BitNumber * 4)) + +/* --- CFGR Register ---*/ + +/* Alias word address of USBPRE bit */ +#define CFGR_OFFSET (RCC_OFFSET + 0x04) + +#ifndef STM32F10X_CL + #define USBPRE_BitNumber 0x16 + #define CFGR_USBPRE_BB (PERIPH_BB_BASE + (CFGR_OFFSET * 32) + (USBPRE_BitNumber * 4)) +#else + #define OTGFSPRE_BitNumber 0x16 + #define CFGR_OTGFSPRE_BB (PERIPH_BB_BASE + (CFGR_OFFSET * 32) + (OTGFSPRE_BitNumber * 4)) +#endif /* STM32F10X_CL */ + +/* --- BDCR Register ---*/ + +/* Alias word address of RTCEN bit */ +#define BDCR_OFFSET (RCC_OFFSET + 0x20) +#define RTCEN_BitNumber 0x0F +#define BDCR_RTCEN_BB (PERIPH_BB_BASE + (BDCR_OFFSET * 32) + (RTCEN_BitNumber * 4)) + +/* Alias word address of BDRST bit */ +#define BDRST_BitNumber 0x10 +#define BDCR_BDRST_BB (PERIPH_BB_BASE + (BDCR_OFFSET * 32) + (BDRST_BitNumber * 4)) + +/* --- CSR Register ---*/ + +/* Alias word address of LSION bit */ +#define CSR_OFFSET (RCC_OFFSET + 0x24) +#define LSION_BitNumber 0x00 +#define CSR_LSION_BB (PERIPH_BB_BASE + (CSR_OFFSET * 32) + (LSION_BitNumber * 4)) + +#ifdef STM32F10X_CL +/* --- CFGR2 Register ---*/ + + /* Alias word address of I2S2SRC bit */ + #define CFGR2_OFFSET (RCC_OFFSET + 0x2C) + #define I2S2SRC_BitNumber 0x11 + #define CFGR2_I2S2SRC_BB (PERIPH_BB_BASE + (CFGR2_OFFSET * 32) + (I2S2SRC_BitNumber * 4)) + + /* Alias word address of I2S3SRC bit */ + #define I2S3SRC_BitNumber 0x12 + #define CFGR2_I2S3SRC_BB (PERIPH_BB_BASE + (CFGR2_OFFSET * 32) + (I2S3SRC_BitNumber * 4)) +#endif /* STM32F10X_CL */ + +/* ---------------------- RCC registers bit mask ------------------------ */ + +/* CR register bit mask */ +#define CR_HSEBYP_Reset ((uint32_t)0xFFFBFFFF) +#define CR_HSEBYP_Set ((uint32_t)0x00040000) +#define CR_HSEON_Reset ((uint32_t)0xFFFEFFFF) +#define CR_HSEON_Set ((uint32_t)0x00010000) +#define CR_HSITRIM_Mask ((uint32_t)0xFFFFFF07) + +/* CFGR register bit mask */ +#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL) || defined (STM32F10X_CL) + #define CFGR_PLL_Mask ((uint32_t)0xFFC2FFFF) +#else + #define CFGR_PLL_Mask ((uint32_t)0xFFC0FFFF) +#endif /* STM32F10X_CL */ + +#define CFGR_PLLMull_Mask ((uint32_t)0x003C0000) +#define CFGR_PLLSRC_Mask ((uint32_t)0x00010000) +#define CFGR_PLLXTPRE_Mask ((uint32_t)0x00020000) +#define CFGR_SWS_Mask ((uint32_t)0x0000000C) +#define CFGR_SW_Mask ((uint32_t)0xFFFFFFFC) +#define CFGR_HPRE_Reset_Mask ((uint32_t)0xFFFFFF0F) +#define CFGR_HPRE_Set_Mask ((uint32_t)0x000000F0) +#define CFGR_PPRE1_Reset_Mask ((uint32_t)0xFFFFF8FF) +#define CFGR_PPRE1_Set_Mask ((uint32_t)0x00000700) +#define CFGR_PPRE2_Reset_Mask ((uint32_t)0xFFFFC7FF) +#define CFGR_PPRE2_Set_Mask ((uint32_t)0x00003800) +#define CFGR_ADCPRE_Reset_Mask ((uint32_t)0xFFFF3FFF) +#define CFGR_ADCPRE_Set_Mask ((uint32_t)0x0000C000) + +/* CSR register bit mask */ +#define CSR_RMVF_Set ((uint32_t)0x01000000) + +#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL) || defined (STM32F10X_CL) +/* CFGR2 register bit mask */ + #define CFGR2_PREDIV1SRC ((uint32_t)0x00010000) + #define CFGR2_PREDIV1 ((uint32_t)0x0000000F) +#endif +#ifdef STM32F10X_CL + #define CFGR2_PREDIV2 ((uint32_t)0x000000F0) + #define CFGR2_PLL2MUL ((uint32_t)0x00000F00) + #define CFGR2_PLL3MUL ((uint32_t)0x0000F000) +#endif /* STM32F10X_CL */ + +/* RCC Flag Mask */ +#define FLAG_Mask ((uint8_t)0x1F) + +/* CIR register byte 2 (Bits[15:8]) base address */ +#define CIR_BYTE2_ADDRESS ((uint32_t)0x40021009) + +/* CIR register byte 3 (Bits[23:16]) base address */ +#define CIR_BYTE3_ADDRESS ((uint32_t)0x4002100A) + +/* CFGR register byte 4 (Bits[31:24]) base address */ +#define CFGR_BYTE4_ADDRESS ((uint32_t)0x40021007) + +/* BDCR register base address */ +#define BDCR_ADDRESS (PERIPH_BASE + BDCR_OFFSET) + +/** + * @} + */ + +/** @defgroup RCC_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup RCC_Private_Variables + * @{ + */ + +static __I uint8_t APBAHBPrescTable[16] = {0, 0, 0, 0, 1, 2, 3, 4, 1, 2, 3, 4, 6, 7, 8, 9}; +static __I uint8_t ADCPrescTable[4] = {2, 4, 6, 8}; + +/** + * @} + */ + +/** @defgroup RCC_Private_FunctionPrototypes + * @{ + */ + +/** + * @} + */ + +/** @defgroup RCC_Private_Functions + * @{ + */ + +/** + * @brief Resets the RCC clock configuration to the default reset state. + * @param None + * @retval None + */ +void RCC_DeInit(void) +{ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */ +#ifndef STM32F10X_CL + RCC->CFGR &= (uint32_t)0xF8FF0000; +#else + RCC->CFGR &= (uint32_t)0xF0FF0000; +#endif /* STM32F10X_CL */ + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */ + RCC->CFGR &= (uint32_t)0xFF80FFFF; + +#ifdef STM32F10X_CL + /* Reset PLL2ON and PLL3ON bits */ + RCC->CR &= (uint32_t)0xEBFFFFFF; + + /* Disable all interrupts and clear pending bits */ + RCC->CIR = 0x00FF0000; + + /* Reset CFGR2 register */ + RCC->CFGR2 = 0x00000000; +#elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL) + /* Disable all interrupts and clear pending bits */ + RCC->CIR = 0x009F0000; + + /* Reset CFGR2 register */ + RCC->CFGR2 = 0x00000000; +#else + /* Disable all interrupts and clear pending bits */ + RCC->CIR = 0x009F0000; +#endif /* STM32F10X_CL */ + +} + +/** + * @brief Configures the External High Speed oscillator (HSE). + * @note HSE can not be stopped if it is used directly or through the PLL as system clock. + * @param RCC_HSE: specifies the new state of the HSE. + * This parameter can be one of the following values: + * @arg RCC_HSE_OFF: HSE oscillator OFF + * @arg RCC_HSE_ON: HSE oscillator ON + * @arg RCC_HSE_Bypass: HSE oscillator bypassed with external clock + * @retval None + */ +void RCC_HSEConfig(uint32_t RCC_HSE) +{ + /* Check the parameters */ + assert_param(IS_RCC_HSE(RCC_HSE)); + /* Reset HSEON and HSEBYP bits before configuring the HSE ------------------*/ + /* Reset HSEON bit */ + RCC->CR &= CR_HSEON_Reset; + /* Reset HSEBYP bit */ + RCC->CR &= CR_HSEBYP_Reset; + /* Configure HSE (RCC_HSE_OFF is already covered by the code section above) */ + switch(RCC_HSE) + { + case RCC_HSE_ON: + /* Set HSEON bit */ + RCC->CR |= CR_HSEON_Set; + break; + + case RCC_HSE_Bypass: + /* Set HSEBYP and HSEON bits */ + RCC->CR |= CR_HSEBYP_Set | CR_HSEON_Set; + break; + + default: + break; + } +} + +/** + * @brief Waits for HSE start-up. + * @param None + * @retval An ErrorStatus enumuration value: + * - SUCCESS: HSE oscillator is stable and ready to use + * - ERROR: HSE oscillator not yet ready + */ +ErrorStatus RCC_WaitForHSEStartUp(void) +{ + __IO uint32_t StartUpCounter = 0; + ErrorStatus status = ERROR; + FlagStatus HSEStatus = RESET; + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC_GetFlagStatus(RCC_FLAG_HSERDY); + StartUpCounter++; + } while((StartUpCounter != HSE_STARTUP_TIMEOUT) && (HSEStatus == RESET)); + + if (RCC_GetFlagStatus(RCC_FLAG_HSERDY) != RESET) + { + status = SUCCESS; + } + else + { + status = ERROR; + } + return (status); +} + +/** + * @brief Adjusts the Internal High Speed oscillator (HSI) calibration value. + * @param HSICalibrationValue: specifies the calibration trimming value. + * This parameter must be a number between 0 and 0x1F. + * @retval None + */ +void RCC_AdjustHSICalibrationValue(uint8_t HSICalibrationValue) +{ + uint32_t tmpreg = 0; + /* Check the parameters */ + assert_param(IS_RCC_CALIBRATION_VALUE(HSICalibrationValue)); + tmpreg = RCC->CR; + /* Clear HSITRIM[4:0] bits */ + tmpreg &= CR_HSITRIM_Mask; + /* Set the HSITRIM[4:0] bits according to HSICalibrationValue value */ + tmpreg |= (uint32_t)HSICalibrationValue << 3; + /* Store the new value */ + RCC->CR = tmpreg; +} + +/** + * @brief Enables or disables the Internal High Speed oscillator (HSI). + * @note HSI can not be stopped if it is used directly or through the PLL as system clock. + * @param NewState: new state of the HSI. This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void RCC_HSICmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + *(__IO uint32_t *) CR_HSION_BB = (uint32_t)NewState; +} + +/** + * @brief Configures the PLL clock source and multiplication factor. + * @note This function must be used only when the PLL is disabled. + * @param RCC_PLLSource: specifies the PLL entry clock source. + * For @b STM32_Connectivity_line_devices or @b STM32_Value_line_devices, + * this parameter can be one of the following values: + * @arg RCC_PLLSource_HSI_Div2: HSI oscillator clock divided by 2 selected as PLL clock entry + * @arg RCC_PLLSource_PREDIV1: PREDIV1 clock selected as PLL clock entry + * For @b other_STM32_devices, this parameter can be one of the following values: + * @arg RCC_PLLSource_HSI_Div2: HSI oscillator clock divided by 2 selected as PLL clock entry + * @arg RCC_PLLSource_HSE_Div1: HSE oscillator clock selected as PLL clock entry + * @arg RCC_PLLSource_HSE_Div2: HSE oscillator clock divided by 2 selected as PLL clock entry + * @param RCC_PLLMul: specifies the PLL multiplication factor. + * For @b STM32_Connectivity_line_devices, this parameter can be RCC_PLLMul_x where x:{[4,9], 6_5} + * For @b other_STM32_devices, this parameter can be RCC_PLLMul_x where x:[2,16] + * @retval None + */ +void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul) +{ + uint32_t tmpreg = 0; + + /* Check the parameters */ + assert_param(IS_RCC_PLL_SOURCE(RCC_PLLSource)); + assert_param(IS_RCC_PLL_MUL(RCC_PLLMul)); + + tmpreg = RCC->CFGR; + /* Clear PLLSRC, PLLXTPRE and PLLMUL[3:0] bits */ + tmpreg &= CFGR_PLL_Mask; + /* Set the PLL configuration bits */ + tmpreg |= RCC_PLLSource | RCC_PLLMul; + /* Store the new value */ + RCC->CFGR = tmpreg; +} + +/** + * @brief Enables or disables the PLL. + * @note The PLL can not be disabled if it is used as system clock. + * @param NewState: new state of the PLL. This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void RCC_PLLCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + *(__IO uint32_t *) CR_PLLON_BB = (uint32_t)NewState; +} + +#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL) || defined (STM32F10X_CL) +/** + * @brief Configures the PREDIV1 division factor. + * @note + * - This function must be used only when the PLL is disabled. + * - This function applies only to STM32 Connectivity line and Value line + * devices. + * @param RCC_PREDIV1_Source: specifies the PREDIV1 clock source. + * This parameter can be one of the following values: + * @arg RCC_PREDIV1_Source_HSE: HSE selected as PREDIV1 clock + * @arg RCC_PREDIV1_Source_PLL2: PLL2 selected as PREDIV1 clock + * @note + * For @b STM32_Value_line_devices this parameter is always RCC_PREDIV1_Source_HSE + * @param RCC_PREDIV1_Div: specifies the PREDIV1 clock division factor. + * This parameter can be RCC_PREDIV1_Divx where x:[1,16] + * @retval None + */ +void RCC_PREDIV1Config(uint32_t RCC_PREDIV1_Source, uint32_t RCC_PREDIV1_Div) +{ + uint32_t tmpreg = 0; + + /* Check the parameters */ + assert_param(IS_RCC_PREDIV1_SOURCE(RCC_PREDIV1_Source)); + assert_param(IS_RCC_PREDIV1(RCC_PREDIV1_Div)); + + tmpreg = RCC->CFGR2; + /* Clear PREDIV1[3:0] and PREDIV1SRC bits */ + tmpreg &= ~(CFGR2_PREDIV1 | CFGR2_PREDIV1SRC); + /* Set the PREDIV1 clock source and division factor */ + tmpreg |= RCC_PREDIV1_Source | RCC_PREDIV1_Div ; + /* Store the new value */ + RCC->CFGR2 = tmpreg; +} +#endif + +#ifdef STM32F10X_CL +/** + * @brief Configures the PREDIV2 division factor. + * @note + * - This function must be used only when both PLL2 and PLL3 are disabled. + * - This function applies only to STM32 Connectivity line devices. + * @param RCC_PREDIV2_Div: specifies the PREDIV2 clock division factor. + * This parameter can be RCC_PREDIV2_Divx where x:[1,16] + * @retval None + */ +void RCC_PREDIV2Config(uint32_t RCC_PREDIV2_Div) +{ + uint32_t tmpreg = 0; + + /* Check the parameters */ + assert_param(IS_RCC_PREDIV2(RCC_PREDIV2_Div)); + + tmpreg = RCC->CFGR2; + /* Clear PREDIV2[3:0] bits */ + tmpreg &= ~CFGR2_PREDIV2; + /* Set the PREDIV2 division factor */ + tmpreg |= RCC_PREDIV2_Div; + /* Store the new value */ + RCC->CFGR2 = tmpreg; +} + +/** + * @brief Configures the PLL2 multiplication factor. + * @note + * - This function must be used only when the PLL2 is disabled. + * - This function applies only to STM32 Connectivity line devices. + * @param RCC_PLL2Mul: specifies the PLL2 multiplication factor. + * This parameter can be RCC_PLL2Mul_x where x:{[8,14], 16, 20} + * @retval None + */ +void RCC_PLL2Config(uint32_t RCC_PLL2Mul) +{ + uint32_t tmpreg = 0; + + /* Check the parameters */ + assert_param(IS_RCC_PLL2_MUL(RCC_PLL2Mul)); + + tmpreg = RCC->CFGR2; + /* Clear PLL2Mul[3:0] bits */ + tmpreg &= ~CFGR2_PLL2MUL; + /* Set the PLL2 configuration bits */ + tmpreg |= RCC_PLL2Mul; + /* Store the new value */ + RCC->CFGR2 = tmpreg; +} + + +/** + * @brief Enables or disables the PLL2. + * @note + * - The PLL2 can not be disabled if it is used indirectly as system clock + * (i.e. it is used as PLL clock entry that is used as System clock). + * - This function applies only to STM32 Connectivity line devices. + * @param NewState: new state of the PLL2. This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void RCC_PLL2Cmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + *(__IO uint32_t *) CR_PLL2ON_BB = (uint32_t)NewState; +} + + +/** + * @brief Configures the PLL3 multiplication factor. + * @note + * - This function must be used only when the PLL3 is disabled. + * - This function applies only to STM32 Connectivity line devices. + * @param RCC_PLL3Mul: specifies the PLL3 multiplication factor. + * This parameter can be RCC_PLL3Mul_x where x:{[8,14], 16, 20} + * @retval None + */ +void RCC_PLL3Config(uint32_t RCC_PLL3Mul) +{ + uint32_t tmpreg = 0; + + /* Check the parameters */ + assert_param(IS_RCC_PLL3_MUL(RCC_PLL3Mul)); + + tmpreg = RCC->CFGR2; + /* Clear PLL3Mul[3:0] bits */ + tmpreg &= ~CFGR2_PLL3MUL; + /* Set the PLL3 configuration bits */ + tmpreg |= RCC_PLL3Mul; + /* Store the new value */ + RCC->CFGR2 = tmpreg; +} + + +/** + * @brief Enables or disables the PLL3. + * @note This function applies only to STM32 Connectivity line devices. + * @param NewState: new state of the PLL3. This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void RCC_PLL3Cmd(FunctionalState NewState) +{ + /* Check the parameters */ + + assert_param(IS_FUNCTIONAL_STATE(NewState)); + *(__IO uint32_t *) CR_PLL3ON_BB = (uint32_t)NewState; +} +#endif /* STM32F10X_CL */ + +/** + * @brief Configures the system clock (SYSCLK). + * @param RCC_SYSCLKSource: specifies the clock source used as system clock. + * This parameter can be one of the following values: + * @arg RCC_SYSCLKSource_HSI: HSI selected as system clock + * @arg RCC_SYSCLKSource_HSE: HSE selected as system clock + * @arg RCC_SYSCLKSource_PLLCLK: PLL selected as system clock + * @retval None + */ +void RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource) +{ + uint32_t tmpreg = 0; + /* Check the parameters */ + assert_param(IS_RCC_SYSCLK_SOURCE(RCC_SYSCLKSource)); + tmpreg = RCC->CFGR; + /* Clear SW[1:0] bits */ + tmpreg &= CFGR_SW_Mask; + /* Set SW[1:0] bits according to RCC_SYSCLKSource value */ + tmpreg |= RCC_SYSCLKSource; + /* Store the new value */ + RCC->CFGR = tmpreg; +} + +/** + * @brief Returns the clock source used as system clock. + * @param None + * @retval The clock source used as system clock. The returned value can + * be one of the following: + * - 0x00: HSI used as system clock + * - 0x04: HSE used as system clock + * - 0x08: PLL used as system clock + */ +uint8_t RCC_GetSYSCLKSource(void) +{ + return ((uint8_t)(RCC->CFGR & CFGR_SWS_Mask)); +} + +/** + * @brief Configures the AHB clock (HCLK). + * @param RCC_SYSCLK: defines the AHB clock divider. This clock is derived from + * the system clock (SYSCLK). + * This parameter can be one of the following values: + * @arg RCC_SYSCLK_Div1: AHB clock = SYSCLK + * @arg RCC_SYSCLK_Div2: AHB clock = SYSCLK/2 + * @arg RCC_SYSCLK_Div4: AHB clock = SYSCLK/4 + * @arg RCC_SYSCLK_Div8: AHB clock = SYSCLK/8 + * @arg RCC_SYSCLK_Div16: AHB clock = SYSCLK/16 + * @arg RCC_SYSCLK_Div64: AHB clock = SYSCLK/64 + * @arg RCC_SYSCLK_Div128: AHB clock = SYSCLK/128 + * @arg RCC_SYSCLK_Div256: AHB clock = SYSCLK/256 + * @arg RCC_SYSCLK_Div512: AHB clock = SYSCLK/512 + * @retval None + */ +void RCC_HCLKConfig(uint32_t RCC_SYSCLK) +{ + uint32_t tmpreg = 0; + /* Check the parameters */ + assert_param(IS_RCC_HCLK(RCC_SYSCLK)); + tmpreg = RCC->CFGR; + /* Clear HPRE[3:0] bits */ + tmpreg &= CFGR_HPRE_Reset_Mask; + /* Set HPRE[3:0] bits according to RCC_SYSCLK value */ + tmpreg |= RCC_SYSCLK; + /* Store the new value */ + RCC->CFGR = tmpreg; +} + +/** + * @brief Configures the Low Speed APB clock (PCLK1). + * @param RCC_HCLK: defines the APB1 clock divider. This clock is derived from + * the AHB clock (HCLK). + * This parameter can be one of the following values: + * @arg RCC_HCLK_Div1: APB1 clock = HCLK + * @arg RCC_HCLK_Div2: APB1 clock = HCLK/2 + * @arg RCC_HCLK_Div4: APB1 clock = HCLK/4 + * @arg RCC_HCLK_Div8: APB1 clock = HCLK/8 + * @arg RCC_HCLK_Div16: APB1 clock = HCLK/16 + * @retval None + */ +void RCC_PCLK1Config(uint32_t RCC_HCLK) +{ + uint32_t tmpreg = 0; + /* Check the parameters */ + assert_param(IS_RCC_PCLK(RCC_HCLK)); + tmpreg = RCC->CFGR; + /* Clear PPRE1[2:0] bits */ + tmpreg &= CFGR_PPRE1_Reset_Mask; + /* Set PPRE1[2:0] bits according to RCC_HCLK value */ + tmpreg |= RCC_HCLK; + /* Store the new value */ + RCC->CFGR = tmpreg; +} + +/** + * @brief Configures the High Speed APB clock (PCLK2). + * @param RCC_HCLK: defines the APB2 clock divider. This clock is derived from + * the AHB clock (HCLK). + * This parameter can be one of the following values: + * @arg RCC_HCLK_Div1: APB2 clock = HCLK + * @arg RCC_HCLK_Div2: APB2 clock = HCLK/2 + * @arg RCC_HCLK_Div4: APB2 clock = HCLK/4 + * @arg RCC_HCLK_Div8: APB2 clock = HCLK/8 + * @arg RCC_HCLK_Div16: APB2 clock = HCLK/16 + * @retval None + */ +void RCC_PCLK2Config(uint32_t RCC_HCLK) +{ + uint32_t tmpreg = 0; + /* Check the parameters */ + assert_param(IS_RCC_PCLK(RCC_HCLK)); + tmpreg = RCC->CFGR; + /* Clear PPRE2[2:0] bits */ + tmpreg &= CFGR_PPRE2_Reset_Mask; + /* Set PPRE2[2:0] bits according to RCC_HCLK value */ + tmpreg |= RCC_HCLK << 3; + /* Store the new value */ + RCC->CFGR = tmpreg; +} + +/** + * @brief Enables or disables the specified RCC interrupts. + * @param RCC_IT: specifies the RCC interrupt sources to be enabled or disabled. + * + * For @b STM32_Connectivity_line_devices, this parameter can be any combination + * of the following values + * @arg RCC_IT_LSIRDY: LSI ready interrupt + * @arg RCC_IT_LSERDY: LSE ready interrupt + * @arg RCC_IT_HSIRDY: HSI ready interrupt + * @arg RCC_IT_HSERDY: HSE ready interrupt + * @arg RCC_IT_PLLRDY: PLL ready interrupt + * @arg RCC_IT_PLL2RDY: PLL2 ready interrupt + * @arg RCC_IT_PLL3RDY: PLL3 ready interrupt + * + * For @b other_STM32_devices, this parameter can be any combination of the + * following values + * @arg RCC_IT_LSIRDY: LSI ready interrupt + * @arg RCC_IT_LSERDY: LSE ready interrupt + * @arg RCC_IT_HSIRDY: HSI ready interrupt + * @arg RCC_IT_HSERDY: HSE ready interrupt + * @arg RCC_IT_PLLRDY: PLL ready interrupt + * + * @param NewState: new state of the specified RCC interrupts. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void RCC_ITConfig(uint8_t RCC_IT, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_RCC_IT(RCC_IT)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Perform Byte access to RCC_CIR bits to enable the selected interrupts */ + *(__IO uint8_t *) CIR_BYTE2_ADDRESS |= RCC_IT; + } + else + { + /* Perform Byte access to RCC_CIR bits to disable the selected interrupts */ + *(__IO uint8_t *) CIR_BYTE2_ADDRESS &= (uint8_t)~RCC_IT; + } +} + +#ifndef STM32F10X_CL +/** + * @brief Configures the USB clock (USBCLK). + * @param RCC_USBCLKSource: specifies the USB clock source. This clock is + * derived from the PLL output. + * This parameter can be one of the following values: + * @arg RCC_USBCLKSource_PLLCLK_1Div5: PLL clock divided by 1,5 selected as USB + * clock source + * @arg RCC_USBCLKSource_PLLCLK_Div1: PLL clock selected as USB clock source + * @retval None + */ +void RCC_USBCLKConfig(uint32_t RCC_USBCLKSource) +{ + /* Check the parameters */ + assert_param(IS_RCC_USBCLK_SOURCE(RCC_USBCLKSource)); + + *(__IO uint32_t *) CFGR_USBPRE_BB = RCC_USBCLKSource; +} +#else +/** + * @brief Configures the USB OTG FS clock (OTGFSCLK). + * This function applies only to STM32 Connectivity line devices. + * @param RCC_OTGFSCLKSource: specifies the USB OTG FS clock source. + * This clock is derived from the PLL output. + * This parameter can be one of the following values: + * @arg RCC_OTGFSCLKSource_PLLVCO_Div3: PLL VCO clock divided by 2 selected as USB OTG FS clock source + * @arg RCC_OTGFSCLKSource_PLLVCO_Div2: PLL VCO clock divided by 2 selected as USB OTG FS clock source + * @retval None + */ +void RCC_OTGFSCLKConfig(uint32_t RCC_OTGFSCLKSource) +{ + /* Check the parameters */ + assert_param(IS_RCC_OTGFSCLK_SOURCE(RCC_OTGFSCLKSource)); + + *(__IO uint32_t *) CFGR_OTGFSPRE_BB = RCC_OTGFSCLKSource; +} +#endif /* STM32F10X_CL */ + +/** + * @brief Configures the ADC clock (ADCCLK). + * @param RCC_PCLK2: defines the ADC clock divider. This clock is derived from + * the APB2 clock (PCLK2). + * This parameter can be one of the following values: + * @arg RCC_PCLK2_Div2: ADC clock = PCLK2/2 + * @arg RCC_PCLK2_Div4: ADC clock = PCLK2/4 + * @arg RCC_PCLK2_Div6: ADC clock = PCLK2/6 + * @arg RCC_PCLK2_Div8: ADC clock = PCLK2/8 + * @retval None + */ +void RCC_ADCCLKConfig(uint32_t RCC_PCLK2) +{ + uint32_t tmpreg = 0; + /* Check the parameters */ + assert_param(IS_RCC_ADCCLK(RCC_PCLK2)); + tmpreg = RCC->CFGR; + /* Clear ADCPRE[1:0] bits */ + tmpreg &= CFGR_ADCPRE_Reset_Mask; + /* Set ADCPRE[1:0] bits according to RCC_PCLK2 value */ + tmpreg |= RCC_PCLK2; + /* Store the new value */ + RCC->CFGR = tmpreg; +} + +#ifdef STM32F10X_CL +/** + * @brief Configures the I2S2 clock source(I2S2CLK). + * @note + * - This function must be called before enabling I2S2 APB clock. + * - This function applies only to STM32 Connectivity line devices. + * @param RCC_I2S2CLKSource: specifies the I2S2 clock source. + * This parameter can be one of the following values: + * @arg RCC_I2S2CLKSource_SYSCLK: system clock selected as I2S2 clock entry + * @arg RCC_I2S2CLKSource_PLL3_VCO: PLL3 VCO clock selected as I2S2 clock entry + * @retval None + */ +void RCC_I2S2CLKConfig(uint32_t RCC_I2S2CLKSource) +{ + /* Check the parameters */ + assert_param(IS_RCC_I2S2CLK_SOURCE(RCC_I2S2CLKSource)); + + *(__IO uint32_t *) CFGR2_I2S2SRC_BB = RCC_I2S2CLKSource; +} + +/** + * @brief Configures the I2S3 clock source(I2S2CLK). + * @note + * - This function must be called before enabling I2S3 APB clock. + * - This function applies only to STM32 Connectivity line devices. + * @param RCC_I2S3CLKSource: specifies the I2S3 clock source. + * This parameter can be one of the following values: + * @arg RCC_I2S3CLKSource_SYSCLK: system clock selected as I2S3 clock entry + * @arg RCC_I2S3CLKSource_PLL3_VCO: PLL3 VCO clock selected as I2S3 clock entry + * @retval None + */ +void RCC_I2S3CLKConfig(uint32_t RCC_I2S3CLKSource) +{ + /* Check the parameters */ + assert_param(IS_RCC_I2S3CLK_SOURCE(RCC_I2S3CLKSource)); + + *(__IO uint32_t *) CFGR2_I2S3SRC_BB = RCC_I2S3CLKSource; +} +#endif /* STM32F10X_CL */ + +/** + * @brief Configures the External Low Speed oscillator (LSE). + * @param RCC_LSE: specifies the new state of the LSE. + * This parameter can be one of the following values: + * @arg RCC_LSE_OFF: LSE oscillator OFF + * @arg RCC_LSE_ON: LSE oscillator ON + * @arg RCC_LSE_Bypass: LSE oscillator bypassed with external clock + * @retval None + */ +void RCC_LSEConfig(uint8_t RCC_LSE) +{ + /* Check the parameters */ + assert_param(IS_RCC_LSE(RCC_LSE)); + /* Reset LSEON and LSEBYP bits before configuring the LSE ------------------*/ + /* Reset LSEON bit */ + *(__IO uint8_t *) BDCR_ADDRESS = RCC_LSE_OFF; + /* Reset LSEBYP bit */ + *(__IO uint8_t *) BDCR_ADDRESS = RCC_LSE_OFF; + /* Configure LSE (RCC_LSE_OFF is already covered by the code section above) */ + switch(RCC_LSE) + { + case RCC_LSE_ON: + /* Set LSEON bit */ + *(__IO uint8_t *) BDCR_ADDRESS = RCC_LSE_ON; + break; + + case RCC_LSE_Bypass: + /* Set LSEBYP and LSEON bits */ + *(__IO uint8_t *) BDCR_ADDRESS = RCC_LSE_Bypass | RCC_LSE_ON; + break; + + default: + break; + } +} + +/** + * @brief Enables or disables the Internal Low Speed oscillator (LSI). + * @note LSI can not be disabled if the IWDG is running. + * @param NewState: new state of the LSI. This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void RCC_LSICmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + *(__IO uint32_t *) CSR_LSION_BB = (uint32_t)NewState; +} + +/** + * @brief Configures the RTC clock (RTCCLK). + * @note Once the RTC clock is selected it can't be changed unless the Backup domain is reset. + * @param RCC_RTCCLKSource: specifies the RTC clock source. + * This parameter can be one of the following values: + * @arg RCC_RTCCLKSource_LSE: LSE selected as RTC clock + * @arg RCC_RTCCLKSource_LSI: LSI selected as RTC clock + * @arg RCC_RTCCLKSource_HSE_Div128: HSE clock divided by 128 selected as RTC clock + * @retval None + */ +void RCC_RTCCLKConfig(uint32_t RCC_RTCCLKSource) +{ + /* Check the parameters */ + assert_param(IS_RCC_RTCCLK_SOURCE(RCC_RTCCLKSource)); + /* Select the RTC clock source */ + RCC->BDCR |= RCC_RTCCLKSource; +} + +/** + * @brief Enables or disables the RTC clock. + * @note This function must be used only after the RTC clock was selected using the RCC_RTCCLKConfig function. + * @param NewState: new state of the RTC clock. This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void RCC_RTCCLKCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + *(__IO uint32_t *) BDCR_RTCEN_BB = (uint32_t)NewState; +} + +/** + * @brief Returns the frequencies of different on chip clocks. + * @param RCC_Clocks: pointer to a RCC_ClocksTypeDef structure which will hold + * the clocks frequencies. + * @note The result of this function could be not correct when using + * fractional value for HSE crystal. + * @retval None + */ +void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks) +{ + uint32_t tmp = 0, pllmull = 0, pllsource = 0, presc = 0; + +#ifdef STM32F10X_CL + uint32_t prediv1source = 0, prediv1factor = 0, prediv2factor = 0, pll2mull = 0; +#endif /* STM32F10X_CL */ + +#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL) + uint32_t prediv1factor = 0; +#endif + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & CFGR_SWS_Mask; + + switch (tmp) + { + case 0x00: /* HSI used as system clock */ + RCC_Clocks->SYSCLK_Frequency = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock */ + RCC_Clocks->SYSCLK_Frequency = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock */ + + /* Get PLL clock source and multiplication factor ----------------------*/ + pllmull = RCC->CFGR & CFGR_PLLMull_Mask; + pllsource = RCC->CFGR & CFGR_PLLSRC_Mask; + +#ifndef STM32F10X_CL + pllmull = ( pllmull >> 18) + 2; + + if (pllsource == 0x00) + {/* HSI oscillator clock divided by 2 selected as PLL clock entry */ + RCC_Clocks->SYSCLK_Frequency = (HSI_VALUE >> 1) * pllmull; + } + else + { + #if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL) + prediv1factor = (RCC->CFGR2 & CFGR2_PREDIV1) + 1; + /* HSE oscillator clock selected as PREDIV1 clock entry */ + RCC_Clocks->SYSCLK_Frequency = (HSE_VALUE / prediv1factor) * pllmull; + #else + /* HSE selected as PLL clock entry */ + if ((RCC->CFGR & CFGR_PLLXTPRE_Mask) != (uint32_t)RESET) + {/* HSE oscillator clock divided by 2 */ + RCC_Clocks->SYSCLK_Frequency = (HSE_VALUE >> 1) * pllmull; + } + else + { + RCC_Clocks->SYSCLK_Frequency = HSE_VALUE * pllmull; + } + #endif + } +#else + pllmull = pllmull >> 18; + + if (pllmull != 0x0D) + { + pllmull += 2; + } + else + { /* PLL multiplication factor = PLL input clock * 6.5 */ + pllmull = 13 / 2; + } + + if (pllsource == 0x00) + {/* HSI oscillator clock divided by 2 selected as PLL clock entry */ + RCC_Clocks->SYSCLK_Frequency = (HSI_VALUE >> 1) * pllmull; + } + else + {/* PREDIV1 selected as PLL clock entry */ + + /* Get PREDIV1 clock source and division factor */ + prediv1source = RCC->CFGR2 & CFGR2_PREDIV1SRC; + prediv1factor = (RCC->CFGR2 & CFGR2_PREDIV1) + 1; + + if (prediv1source == 0) + { /* HSE oscillator clock selected as PREDIV1 clock entry */ + RCC_Clocks->SYSCLK_Frequency = (HSE_VALUE / prediv1factor) * pllmull; + } + else + {/* PLL2 clock selected as PREDIV1 clock entry */ + + /* Get PREDIV2 division factor and PLL2 multiplication factor */ + prediv2factor = ((RCC->CFGR2 & CFGR2_PREDIV2) >> 4) + 1; + pll2mull = ((RCC->CFGR2 & CFGR2_PLL2MUL) >> 8 ) + 2; + RCC_Clocks->SYSCLK_Frequency = (((HSE_VALUE / prediv2factor) * pll2mull) / prediv1factor) * pllmull; + } + } +#endif /* STM32F10X_CL */ + break; + + default: + RCC_Clocks->SYSCLK_Frequency = HSI_VALUE; + break; + } + + /* Compute HCLK, PCLK1, PCLK2 and ADCCLK clocks frequencies ----------------*/ + /* Get HCLK prescaler */ + tmp = RCC->CFGR & CFGR_HPRE_Set_Mask; + tmp = tmp >> 4; + presc = APBAHBPrescTable[tmp]; + /* HCLK clock frequency */ + RCC_Clocks->HCLK_Frequency = RCC_Clocks->SYSCLK_Frequency >> presc; + /* Get PCLK1 prescaler */ + tmp = RCC->CFGR & CFGR_PPRE1_Set_Mask; + tmp = tmp >> 8; + presc = APBAHBPrescTable[tmp]; + /* PCLK1 clock frequency */ + RCC_Clocks->PCLK1_Frequency = RCC_Clocks->HCLK_Frequency >> presc; + /* Get PCLK2 prescaler */ + tmp = RCC->CFGR & CFGR_PPRE2_Set_Mask; + tmp = tmp >> 11; + presc = APBAHBPrescTable[tmp]; + /* PCLK2 clock frequency */ + RCC_Clocks->PCLK2_Frequency = RCC_Clocks->HCLK_Frequency >> presc; + /* Get ADCCLK prescaler */ + tmp = RCC->CFGR & CFGR_ADCPRE_Set_Mask; + tmp = tmp >> 14; + presc = ADCPrescTable[tmp]; + /* ADCCLK clock frequency */ + RCC_Clocks->ADCCLK_Frequency = RCC_Clocks->PCLK2_Frequency / presc; +} + +/** + * @brief Enables or disables the AHB peripheral clock. + * @param RCC_AHBPeriph: specifies the AHB peripheral to gates its clock. + * + * For @b STM32_Connectivity_line_devices, this parameter can be any combination + * of the following values: + * @arg RCC_AHBPeriph_DMA1 + * @arg RCC_AHBPeriph_DMA2 + * @arg RCC_AHBPeriph_SRAM + * @arg RCC_AHBPeriph_FLITF + * @arg RCC_AHBPeriph_CRC + * @arg RCC_AHBPeriph_OTG_FS + * @arg RCC_AHBPeriph_ETH_MAC + * @arg RCC_AHBPeriph_ETH_MAC_Tx + * @arg RCC_AHBPeriph_ETH_MAC_Rx + * + * For @b other_STM32_devices, this parameter can be any combination of the + * following values: + * @arg RCC_AHBPeriph_DMA1 + * @arg RCC_AHBPeriph_DMA2 + * @arg RCC_AHBPeriph_SRAM + * @arg RCC_AHBPeriph_FLITF + * @arg RCC_AHBPeriph_CRC + * @arg RCC_AHBPeriph_FSMC + * @arg RCC_AHBPeriph_SDIO + * + * @note SRAM and FLITF clock can be disabled only during sleep mode. + * @param NewState: new state of the specified peripheral clock. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_RCC_AHB_PERIPH(RCC_AHBPeriph)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + RCC->AHBENR |= RCC_AHBPeriph; + } + else + { + RCC->AHBENR &= ~RCC_AHBPeriph; + } +} + +/** + * @brief Enables or disables the High Speed APB (APB2) peripheral clock. + * @param RCC_APB2Periph: specifies the APB2 peripheral to gates its clock. + * This parameter can be any combination of the following values: + * @arg RCC_APB2Periph_AFIO, RCC_APB2Periph_GPIOA, RCC_APB2Periph_GPIOB, + * RCC_APB2Periph_GPIOC, RCC_APB2Periph_GPIOD, RCC_APB2Periph_GPIOE, + * RCC_APB2Periph_GPIOF, RCC_APB2Periph_GPIOG, RCC_APB2Periph_ADC1, + * RCC_APB2Periph_ADC2, RCC_APB2Periph_TIM1, RCC_APB2Periph_SPI1, + * RCC_APB2Periph_TIM8, RCC_APB2Periph_USART1, RCC_APB2Periph_ADC3, + * RCC_APB2Periph_TIM15, RCC_APB2Periph_TIM16, RCC_APB2Periph_TIM17, + * RCC_APB2Periph_TIM9, RCC_APB2Periph_TIM10, RCC_APB2Periph_TIM11 + * @param NewState: new state of the specified peripheral clock. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_RCC_APB2_PERIPH(RCC_APB2Periph)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + RCC->APB2ENR |= RCC_APB2Periph; + } + else + { + RCC->APB2ENR &= ~RCC_APB2Periph; + } +} + +/** + * @brief Enables or disables the Low Speed APB (APB1) peripheral clock. + * @param RCC_APB1Periph: specifies the APB1 peripheral to gates its clock. + * This parameter can be any combination of the following values: + * @arg RCC_APB1Periph_TIM2, RCC_APB1Periph_TIM3, RCC_APB1Periph_TIM4, + * RCC_APB1Periph_TIM5, RCC_APB1Periph_TIM6, RCC_APB1Periph_TIM7, + * RCC_APB1Periph_WWDG, RCC_APB1Periph_SPI2, RCC_APB1Periph_SPI3, + * RCC_APB1Periph_USART2, RCC_APB1Periph_USART3, RCC_APB1Periph_USART4, + * RCC_APB1Periph_USART5, RCC_APB1Periph_I2C1, RCC_APB1Periph_I2C2, + * RCC_APB1Periph_USB, RCC_APB1Periph_CAN1, RCC_APB1Periph_BKP, + * RCC_APB1Periph_PWR, RCC_APB1Periph_DAC, RCC_APB1Periph_CEC, + * RCC_APB1Periph_TIM12, RCC_APB1Periph_TIM13, RCC_APB1Periph_TIM14 + * @param NewState: new state of the specified peripheral clock. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_RCC_APB1_PERIPH(RCC_APB1Periph)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + RCC->APB1ENR |= RCC_APB1Periph; + } + else + { + RCC->APB1ENR &= ~RCC_APB1Periph; + } +} + +#ifdef STM32F10X_CL +/** + * @brief Forces or releases AHB peripheral reset. + * @note This function applies only to STM32 Connectivity line devices. + * @param RCC_AHBPeriph: specifies the AHB peripheral to reset. + * This parameter can be any combination of the following values: + * @arg RCC_AHBPeriph_OTG_FS + * @arg RCC_AHBPeriph_ETH_MAC + * @param NewState: new state of the specified peripheral reset. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void RCC_AHBPeriphResetCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_RCC_AHB_PERIPH_RESET(RCC_AHBPeriph)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + RCC->AHBRSTR |= RCC_AHBPeriph; + } + else + { + RCC->AHBRSTR &= ~RCC_AHBPeriph; + } +} +#endif /* STM32F10X_CL */ + +/** + * @brief Forces or releases High Speed APB (APB2) peripheral reset. + * @param RCC_APB2Periph: specifies the APB2 peripheral to reset. + * This parameter can be any combination of the following values: + * @arg RCC_APB2Periph_AFIO, RCC_APB2Periph_GPIOA, RCC_APB2Periph_GPIOB, + * RCC_APB2Periph_GPIOC, RCC_APB2Periph_GPIOD, RCC_APB2Periph_GPIOE, + * RCC_APB2Periph_GPIOF, RCC_APB2Periph_GPIOG, RCC_APB2Periph_ADC1, + * RCC_APB2Periph_ADC2, RCC_APB2Periph_TIM1, RCC_APB2Periph_SPI1, + * RCC_APB2Periph_TIM8, RCC_APB2Periph_USART1, RCC_APB2Periph_ADC3, + * RCC_APB2Periph_TIM15, RCC_APB2Periph_TIM16, RCC_APB2Periph_TIM17, + * RCC_APB2Periph_TIM9, RCC_APB2Periph_TIM10, RCC_APB2Periph_TIM11 + * @param NewState: new state of the specified peripheral reset. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_RCC_APB2_PERIPH(RCC_APB2Periph)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + RCC->APB2RSTR |= RCC_APB2Periph; + } + else + { + RCC->APB2RSTR &= ~RCC_APB2Periph; + } +} + +/** + * @brief Forces or releases Low Speed APB (APB1) peripheral reset. + * @param RCC_APB1Periph: specifies the APB1 peripheral to reset. + * This parameter can be any combination of the following values: + * @arg RCC_APB1Periph_TIM2, RCC_APB1Periph_TIM3, RCC_APB1Periph_TIM4, + * RCC_APB1Periph_TIM5, RCC_APB1Periph_TIM6, RCC_APB1Periph_TIM7, + * RCC_APB1Periph_WWDG, RCC_APB1Periph_SPI2, RCC_APB1Periph_SPI3, + * RCC_APB1Periph_USART2, RCC_APB1Periph_USART3, RCC_APB1Periph_USART4, + * RCC_APB1Periph_USART5, RCC_APB1Periph_I2C1, RCC_APB1Periph_I2C2, + * RCC_APB1Periph_USB, RCC_APB1Periph_CAN1, RCC_APB1Periph_BKP, + * RCC_APB1Periph_PWR, RCC_APB1Periph_DAC, RCC_APB1Periph_CEC, + * RCC_APB1Periph_TIM12, RCC_APB1Periph_TIM13, RCC_APB1Periph_TIM14 + * @param NewState: new state of the specified peripheral clock. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void RCC_APB1PeriphResetCmd(uint32_t RCC_APB1Periph, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_RCC_APB1_PERIPH(RCC_APB1Periph)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + RCC->APB1RSTR |= RCC_APB1Periph; + } + else + { + RCC->APB1RSTR &= ~RCC_APB1Periph; + } +} + +/** + * @brief Forces or releases the Backup domain reset. + * @param NewState: new state of the Backup domain reset. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void RCC_BackupResetCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + *(__IO uint32_t *) BDCR_BDRST_BB = (uint32_t)NewState; +} + +/** + * @brief Enables or disables the Clock Security System. + * @param NewState: new state of the Clock Security System.. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void RCC_ClockSecuritySystemCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + *(__IO uint32_t *) CR_CSSON_BB = (uint32_t)NewState; +} + +/** + * @brief Selects the clock source to output on MCO pin. + * @param RCC_MCO: specifies the clock source to output. + * + * For @b STM32_Connectivity_line_devices, this parameter can be one of the + * following values: + * @arg RCC_MCO_NoClock: No clock selected + * @arg RCC_MCO_SYSCLK: System clock selected + * @arg RCC_MCO_HSI: HSI oscillator clock selected + * @arg RCC_MCO_HSE: HSE oscillator clock selected + * @arg RCC_MCO_PLLCLK_Div2: PLL clock divided by 2 selected + * @arg RCC_MCO_PLL2CLK: PLL2 clock selected + * @arg RCC_MCO_PLL3CLK_Div2: PLL3 clock divided by 2 selected + * @arg RCC_MCO_XT1: External 3-25 MHz oscillator clock selected + * @arg RCC_MCO_PLL3CLK: PLL3 clock selected + * + * For @b other_STM32_devices, this parameter can be one of the following values: + * @arg RCC_MCO_NoClock: No clock selected + * @arg RCC_MCO_SYSCLK: System clock selected + * @arg RCC_MCO_HSI: HSI oscillator clock selected + * @arg RCC_MCO_HSE: HSE oscillator clock selected + * @arg RCC_MCO_PLLCLK_Div2: PLL clock divided by 2 selected + * + * @retval None + */ +void RCC_MCOConfig(uint8_t RCC_MCO) +{ + /* Check the parameters */ + assert_param(IS_RCC_MCO(RCC_MCO)); + + /* Perform Byte access to MCO bits to select the MCO source */ + *(__IO uint8_t *) CFGR_BYTE4_ADDRESS = RCC_MCO; +} + +/** + * @brief Checks whether the specified RCC flag is set or not. + * @param RCC_FLAG: specifies the flag to check. + * + * For @b STM32_Connectivity_line_devices, this parameter can be one of the + * following values: + * @arg RCC_FLAG_HSIRDY: HSI oscillator clock ready + * @arg RCC_FLAG_HSERDY: HSE oscillator clock ready + * @arg RCC_FLAG_PLLRDY: PLL clock ready + * @arg RCC_FLAG_PLL2RDY: PLL2 clock ready + * @arg RCC_FLAG_PLL3RDY: PLL3 clock ready + * @arg RCC_FLAG_LSERDY: LSE oscillator clock ready + * @arg RCC_FLAG_LSIRDY: LSI oscillator clock ready + * @arg RCC_FLAG_PINRST: Pin reset + * @arg RCC_FLAG_PORRST: POR/PDR reset + * @arg RCC_FLAG_SFTRST: Software reset + * @arg RCC_FLAG_IWDGRST: Independent Watchdog reset + * @arg RCC_FLAG_WWDGRST: Window Watchdog reset + * @arg RCC_FLAG_LPWRRST: Low Power reset + * + * For @b other_STM32_devices, this parameter can be one of the following values: + * @arg RCC_FLAG_HSIRDY: HSI oscillator clock ready + * @arg RCC_FLAG_HSERDY: HSE oscillator clock ready + * @arg RCC_FLAG_PLLRDY: PLL clock ready + * @arg RCC_FLAG_LSERDY: LSE oscillator clock ready + * @arg RCC_FLAG_LSIRDY: LSI oscillator clock ready + * @arg RCC_FLAG_PINRST: Pin reset + * @arg RCC_FLAG_PORRST: POR/PDR reset + * @arg RCC_FLAG_SFTRST: Software reset + * @arg RCC_FLAG_IWDGRST: Independent Watchdog reset + * @arg RCC_FLAG_WWDGRST: Window Watchdog reset + * @arg RCC_FLAG_LPWRRST: Low Power reset + * + * @retval The new state of RCC_FLAG (SET or RESET). + */ +FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG) +{ + uint32_t tmp = 0; + uint32_t statusreg = 0; + FlagStatus bitstatus = RESET; + /* Check the parameters */ + assert_param(IS_RCC_FLAG(RCC_FLAG)); + + /* Get the RCC register index */ + tmp = RCC_FLAG >> 5; + if (tmp == 1) /* The flag to check is in CR register */ + { + statusreg = RCC->CR; + } + else if (tmp == 2) /* The flag to check is in BDCR register */ + { + statusreg = RCC->BDCR; + } + else /* The flag to check is in CSR register */ + { + statusreg = RCC->CSR; + } + + /* Get the flag position */ + tmp = RCC_FLAG & FLAG_Mask; + if ((statusreg & ((uint32_t)1 << tmp)) != (uint32_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + + /* Return the flag status */ + return bitstatus; +} + +/** + * @brief Clears the RCC reset flags. + * @note The reset flags are: RCC_FLAG_PINRST, RCC_FLAG_PORRST, RCC_FLAG_SFTRST, + * RCC_FLAG_IWDGRST, RCC_FLAG_WWDGRST, RCC_FLAG_LPWRRST + * @param None + * @retval None + */ +void RCC_ClearFlag(void) +{ + /* Set RMVF bit to clear the reset flags */ + RCC->CSR |= CSR_RMVF_Set; +} + +/** + * @brief Checks whether the specified RCC interrupt has occurred or not. + * @param RCC_IT: specifies the RCC interrupt source to check. + * + * For @b STM32_Connectivity_line_devices, this parameter can be one of the + * following values: + * @arg RCC_IT_LSIRDY: LSI ready interrupt + * @arg RCC_IT_LSERDY: LSE ready interrupt + * @arg RCC_IT_HSIRDY: HSI ready interrupt + * @arg RCC_IT_HSERDY: HSE ready interrupt + * @arg RCC_IT_PLLRDY: PLL ready interrupt + * @arg RCC_IT_PLL2RDY: PLL2 ready interrupt + * @arg RCC_IT_PLL3RDY: PLL3 ready interrupt + * @arg RCC_IT_CSS: Clock Security System interrupt + * + * For @b other_STM32_devices, this parameter can be one of the following values: + * @arg RCC_IT_LSIRDY: LSI ready interrupt + * @arg RCC_IT_LSERDY: LSE ready interrupt + * @arg RCC_IT_HSIRDY: HSI ready interrupt + * @arg RCC_IT_HSERDY: HSE ready interrupt + * @arg RCC_IT_PLLRDY: PLL ready interrupt + * @arg RCC_IT_CSS: Clock Security System interrupt + * + * @retval The new state of RCC_IT (SET or RESET). + */ +ITStatus RCC_GetITStatus(uint8_t RCC_IT) +{ + ITStatus bitstatus = RESET; + /* Check the parameters */ + assert_param(IS_RCC_GET_IT(RCC_IT)); + + /* Check the status of the specified RCC interrupt */ + if ((RCC->CIR & RCC_IT) != (uint32_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + + /* Return the RCC_IT status */ + return bitstatus; +} + +/** + * @brief Clears the RCC's interrupt pending bits. + * @param RCC_IT: specifies the interrupt pending bit to clear. + * + * For @b STM32_Connectivity_line_devices, this parameter can be any combination + * of the following values: + * @arg RCC_IT_LSIRDY: LSI ready interrupt + * @arg RCC_IT_LSERDY: LSE ready interrupt + * @arg RCC_IT_HSIRDY: HSI ready interrupt + * @arg RCC_IT_HSERDY: HSE ready interrupt + * @arg RCC_IT_PLLRDY: PLL ready interrupt + * @arg RCC_IT_PLL2RDY: PLL2 ready interrupt + * @arg RCC_IT_PLL3RDY: PLL3 ready interrupt + * @arg RCC_IT_CSS: Clock Security System interrupt + * + * For @b other_STM32_devices, this parameter can be any combination of the + * following values: + * @arg RCC_IT_LSIRDY: LSI ready interrupt + * @arg RCC_IT_LSERDY: LSE ready interrupt + * @arg RCC_IT_HSIRDY: HSI ready interrupt + * @arg RCC_IT_HSERDY: HSE ready interrupt + * @arg RCC_IT_PLLRDY: PLL ready interrupt + * + * @arg RCC_IT_CSS: Clock Security System interrupt + * @retval None + */ +void RCC_ClearITPendingBit(uint8_t RCC_IT) +{ + /* Check the parameters */ + assert_param(IS_RCC_CLEAR_IT(RCC_IT)); + + /* Perform Byte access to RCC_CIR[23:16] bits to clear the selected interrupt + pending bits */ + *(__IO uint8_t *) CIR_BYTE3_ADDRESS = RCC_IT; +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_rtc.c b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_rtc.c new file mode 100644 index 0000000..f05aef5 --- /dev/null +++ b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_rtc.c @@ -0,0 +1,339 @@ +/** + ****************************************************************************** + * @file stm32f10x_rtc.c + * @author MCD Application Team + * @version V3.5.0 + * @date 11-March-2011 + * @brief This file provides all the RTC firmware functions. + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

    © COPYRIGHT 2011 STMicroelectronics

    + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f10x_rtc.h" + +/** @addtogroup STM32F10x_StdPeriph_Driver + * @{ + */ + +/** @defgroup RTC + * @brief RTC driver modules + * @{ + */ + +/** @defgroup RTC_Private_TypesDefinitions + * @{ + */ +/** + * @} + */ + +/** @defgroup RTC_Private_Defines + * @{ + */ +#define RTC_LSB_MASK ((uint32_t)0x0000FFFF) /*!< RTC LSB Mask */ +#define PRLH_MSB_MASK ((uint32_t)0x000F0000) /*!< RTC Prescaler MSB Mask */ + +/** + * @} + */ + +/** @defgroup RTC_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup RTC_Private_Variables + * @{ + */ + +/** + * @} + */ + +/** @defgroup RTC_Private_FunctionPrototypes + * @{ + */ + +/** + * @} + */ + +/** @defgroup RTC_Private_Functions + * @{ + */ + +/** + * @brief Enables or disables the specified RTC interrupts. + * @param RTC_IT: specifies the RTC interrupts sources to be enabled or disabled. + * This parameter can be any combination of the following values: + * @arg RTC_IT_OW: Overflow interrupt + * @arg RTC_IT_ALR: Alarm interrupt + * @arg RTC_IT_SEC: Second interrupt + * @param NewState: new state of the specified RTC interrupts. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void RTC_ITConfig(uint16_t RTC_IT, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_RTC_IT(RTC_IT)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + RTC->CRH |= RTC_IT; + } + else + { + RTC->CRH &= (uint16_t)~RTC_IT; + } +} + +/** + * @brief Enters the RTC configuration mode. + * @param None + * @retval None + */ +void RTC_EnterConfigMode(void) +{ + /* Set the CNF flag to enter in the Configuration Mode */ + RTC->CRL |= RTC_CRL_CNF; +} + +/** + * @brief Exits from the RTC configuration mode. + * @param None + * @retval None + */ +void RTC_ExitConfigMode(void) +{ + /* Reset the CNF flag to exit from the Configuration Mode */ + RTC->CRL &= (uint16_t)~((uint16_t)RTC_CRL_CNF); +} + +/** + * @brief Gets the RTC counter value. + * @param None + * @retval RTC counter value. + */ +uint32_t RTC_GetCounter(void) +{ + uint16_t tmp = 0; + tmp = RTC->CNTL; + return (((uint32_t)RTC->CNTH << 16 ) | tmp) ; +} + +/** + * @brief Sets the RTC counter value. + * @param CounterValue: RTC counter new value. + * @retval None + */ +void RTC_SetCounter(uint32_t CounterValue) +{ + RTC_EnterConfigMode(); + /* Set RTC COUNTER MSB word */ + RTC->CNTH = CounterValue >> 16; + /* Set RTC COUNTER LSB word */ + RTC->CNTL = (CounterValue & RTC_LSB_MASK); + RTC_ExitConfigMode(); +} + +/** + * @brief Sets the RTC prescaler value. + * @param PrescalerValue: RTC prescaler new value. + * @retval None + */ +void RTC_SetPrescaler(uint32_t PrescalerValue) +{ + /* Check the parameters */ + assert_param(IS_RTC_PRESCALER(PrescalerValue)); + + RTC_EnterConfigMode(); + /* Set RTC PRESCALER MSB word */ + RTC->PRLH = (PrescalerValue & PRLH_MSB_MASK) >> 16; + /* Set RTC PRESCALER LSB word */ + RTC->PRLL = (PrescalerValue & RTC_LSB_MASK); + RTC_ExitConfigMode(); +} + +/** + * @brief Sets the RTC alarm value. + * @param AlarmValue: RTC alarm new value. + * @retval None + */ +void RTC_SetAlarm(uint32_t AlarmValue) +{ + RTC_EnterConfigMode(); + /* Set the ALARM MSB word */ + RTC->ALRH = AlarmValue >> 16; + /* Set the ALARM LSB word */ + RTC->ALRL = (AlarmValue & RTC_LSB_MASK); + RTC_ExitConfigMode(); +} + +/** + * @brief Gets the RTC divider value. + * @param None + * @retval RTC Divider value. + */ +uint32_t RTC_GetDivider(void) +{ + uint32_t tmp = 0x00; + tmp = ((uint32_t)RTC->DIVH & (uint32_t)0x000F) << 16; + tmp |= RTC->DIVL; + return tmp; +} + +/** + * @brief Waits until last write operation on RTC registers has finished. + * @note This function must be called before any write to RTC registers. + * @param None + * @retval None + */ +void RTC_WaitForLastTask(void) +{ + /* Loop until RTOFF flag is set */ + while ((RTC->CRL & RTC_FLAG_RTOFF) == (uint16_t)RESET) + { + } +} + +/** + * @brief Waits until the RTC registers (RTC_CNT, RTC_ALR and RTC_PRL) + * are synchronized with RTC APB clock. + * @note This function must be called before any read operation after an APB reset + * or an APB clock stop. + * @param None + * @retval None + */ +void RTC_WaitForSynchro(void) +{ + /* Clear RSF flag */ + RTC->CRL &= (uint16_t)~RTC_FLAG_RSF; + /* Loop until RSF flag is set */ + while ((RTC->CRL & RTC_FLAG_RSF) == (uint16_t)RESET) + { + } +} + +/** + * @brief Checks whether the specified RTC flag is set or not. + * @param RTC_FLAG: specifies the flag to check. + * This parameter can be one the following values: + * @arg RTC_FLAG_RTOFF: RTC Operation OFF flag + * @arg RTC_FLAG_RSF: Registers Synchronized flag + * @arg RTC_FLAG_OW: Overflow flag + * @arg RTC_FLAG_ALR: Alarm flag + * @arg RTC_FLAG_SEC: Second flag + * @retval The new state of RTC_FLAG (SET or RESET). + */ +FlagStatus RTC_GetFlagStatus(uint16_t RTC_FLAG) +{ + FlagStatus bitstatus = RESET; + + /* Check the parameters */ + assert_param(IS_RTC_GET_FLAG(RTC_FLAG)); + + if ((RTC->CRL & RTC_FLAG) != (uint16_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + return bitstatus; +} + +/** + * @brief Clears the RTC's pending flags. + * @param RTC_FLAG: specifies the flag to clear. + * This parameter can be any combination of the following values: + * @arg RTC_FLAG_RSF: Registers Synchronized flag. This flag is cleared only after + * an APB reset or an APB Clock stop. + * @arg RTC_FLAG_OW: Overflow flag + * @arg RTC_FLAG_ALR: Alarm flag + * @arg RTC_FLAG_SEC: Second flag + * @retval None + */ +void RTC_ClearFlag(uint16_t RTC_FLAG) +{ + /* Check the parameters */ + assert_param(IS_RTC_CLEAR_FLAG(RTC_FLAG)); + + /* Clear the corresponding RTC flag */ + RTC->CRL &= (uint16_t)~RTC_FLAG; +} + +/** + * @brief Checks whether the specified RTC interrupt has occurred or not. + * @param RTC_IT: specifies the RTC interrupts sources to check. + * This parameter can be one of the following values: + * @arg RTC_IT_OW: Overflow interrupt + * @arg RTC_IT_ALR: Alarm interrupt + * @arg RTC_IT_SEC: Second interrupt + * @retval The new state of the RTC_IT (SET or RESET). + */ +ITStatus RTC_GetITStatus(uint16_t RTC_IT) +{ + ITStatus bitstatus = RESET; + /* Check the parameters */ + assert_param(IS_RTC_GET_IT(RTC_IT)); + + bitstatus = (ITStatus)(RTC->CRL & RTC_IT); + if (((RTC->CRH & RTC_IT) != (uint16_t)RESET) && (bitstatus != (uint16_t)RESET)) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + return bitstatus; +} + +/** + * @brief Clears the RTC's interrupt pending bits. + * @param RTC_IT: specifies the interrupt pending bit to clear. + * This parameter can be any combination of the following values: + * @arg RTC_IT_OW: Overflow interrupt + * @arg RTC_IT_ALR: Alarm interrupt + * @arg RTC_IT_SEC: Second interrupt + * @retval None + */ +void RTC_ClearITPendingBit(uint16_t RTC_IT) +{ + /* Check the parameters */ + assert_param(IS_RTC_IT(RTC_IT)); + + /* Clear the corresponding RTC pending bit */ + RTC->CRL &= (uint16_t)~RTC_IT; +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_sdio.c b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_sdio.c new file mode 100644 index 0000000..bc1719d --- /dev/null +++ b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_sdio.c @@ -0,0 +1,799 @@ +/** + ****************************************************************************** + * @file stm32f10x_sdio.c + * @author MCD Application Team + * @version V3.5.0 + * @date 11-March-2011 + * @brief This file provides all the SDIO firmware functions. + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

    © COPYRIGHT 2011 STMicroelectronics

    + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f10x_sdio.h" +#include "stm32f10x_rcc.h" + +/** @addtogroup STM32F10x_StdPeriph_Driver + * @{ + */ + +/** @defgroup SDIO + * @brief SDIO driver modules + * @{ + */ + +/** @defgroup SDIO_Private_TypesDefinitions + * @{ + */ + +/* ------------ SDIO registers bit address in the alias region ----------- */ +#define SDIO_OFFSET (SDIO_BASE - PERIPH_BASE) + +/* --- CLKCR Register ---*/ + +/* Alias word address of CLKEN bit */ +#define CLKCR_OFFSET (SDIO_OFFSET + 0x04) +#define CLKEN_BitNumber 0x08 +#define CLKCR_CLKEN_BB (PERIPH_BB_BASE + (CLKCR_OFFSET * 32) + (CLKEN_BitNumber * 4)) + +/* --- CMD Register ---*/ + +/* Alias word address of SDIOSUSPEND bit */ +#define CMD_OFFSET (SDIO_OFFSET + 0x0C) +#define SDIOSUSPEND_BitNumber 0x0B +#define CMD_SDIOSUSPEND_BB (PERIPH_BB_BASE + (CMD_OFFSET * 32) + (SDIOSUSPEND_BitNumber * 4)) + +/* Alias word address of ENCMDCOMPL bit */ +#define ENCMDCOMPL_BitNumber 0x0C +#define CMD_ENCMDCOMPL_BB (PERIPH_BB_BASE + (CMD_OFFSET * 32) + (ENCMDCOMPL_BitNumber * 4)) + +/* Alias word address of NIEN bit */ +#define NIEN_BitNumber 0x0D +#define CMD_NIEN_BB (PERIPH_BB_BASE + (CMD_OFFSET * 32) + (NIEN_BitNumber * 4)) + +/* Alias word address of ATACMD bit */ +#define ATACMD_BitNumber 0x0E +#define CMD_ATACMD_BB (PERIPH_BB_BASE + (CMD_OFFSET * 32) + (ATACMD_BitNumber * 4)) + +/* --- DCTRL Register ---*/ + +/* Alias word address of DMAEN bit */ +#define DCTRL_OFFSET (SDIO_OFFSET + 0x2C) +#define DMAEN_BitNumber 0x03 +#define DCTRL_DMAEN_BB (PERIPH_BB_BASE + (DCTRL_OFFSET * 32) + (DMAEN_BitNumber * 4)) + +/* Alias word address of RWSTART bit */ +#define RWSTART_BitNumber 0x08 +#define DCTRL_RWSTART_BB (PERIPH_BB_BASE + (DCTRL_OFFSET * 32) + (RWSTART_BitNumber * 4)) + +/* Alias word address of RWSTOP bit */ +#define RWSTOP_BitNumber 0x09 +#define DCTRL_RWSTOP_BB (PERIPH_BB_BASE + (DCTRL_OFFSET * 32) + (RWSTOP_BitNumber * 4)) + +/* Alias word address of RWMOD bit */ +#define RWMOD_BitNumber 0x0A +#define DCTRL_RWMOD_BB (PERIPH_BB_BASE + (DCTRL_OFFSET * 32) + (RWMOD_BitNumber * 4)) + +/* Alias word address of SDIOEN bit */ +#define SDIOEN_BitNumber 0x0B +#define DCTRL_SDIOEN_BB (PERIPH_BB_BASE + (DCTRL_OFFSET * 32) + (SDIOEN_BitNumber * 4)) + +/* ---------------------- SDIO registers bit mask ------------------------ */ + +/* --- CLKCR Register ---*/ + +/* CLKCR register clear mask */ +#define CLKCR_CLEAR_MASK ((uint32_t)0xFFFF8100) + +/* --- PWRCTRL Register ---*/ + +/* SDIO PWRCTRL Mask */ +#define PWR_PWRCTRL_MASK ((uint32_t)0xFFFFFFFC) + +/* --- DCTRL Register ---*/ + +/* SDIO DCTRL Clear Mask */ +#define DCTRL_CLEAR_MASK ((uint32_t)0xFFFFFF08) + +/* --- CMD Register ---*/ + +/* CMD Register clear mask */ +#define CMD_CLEAR_MASK ((uint32_t)0xFFFFF800) + +/* SDIO RESP Registers Address */ +#define SDIO_RESP_ADDR ((uint32_t)(SDIO_BASE + 0x14)) + +/** + * @} + */ + +/** @defgroup SDIO_Private_Defines + * @{ + */ + +/** + * @} + */ + +/** @defgroup SDIO_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup SDIO_Private_Variables + * @{ + */ + +/** + * @} + */ + +/** @defgroup SDIO_Private_FunctionPrototypes + * @{ + */ + +/** + * @} + */ + +/** @defgroup SDIO_Private_Functions + * @{ + */ + +/** + * @brief Deinitializes the SDIO peripheral registers to their default reset values. + * @param None + * @retval None + */ +void SDIO_DeInit(void) +{ + SDIO->POWER = 0x00000000; + SDIO->CLKCR = 0x00000000; + SDIO->ARG = 0x00000000; + SDIO->CMD = 0x00000000; + SDIO->DTIMER = 0x00000000; + SDIO->DLEN = 0x00000000; + SDIO->DCTRL = 0x00000000; + SDIO->ICR = 0x00C007FF; + SDIO->MASK = 0x00000000; +} + +/** + * @brief Initializes the SDIO peripheral according to the specified + * parameters in the SDIO_InitStruct. + * @param SDIO_InitStruct : pointer to a SDIO_InitTypeDef structure + * that contains the configuration information for the SDIO peripheral. + * @retval None + */ +void SDIO_Init(SDIO_InitTypeDef* SDIO_InitStruct) +{ + uint32_t tmpreg = 0; + + /* Check the parameters */ + assert_param(IS_SDIO_CLOCK_EDGE(SDIO_InitStruct->SDIO_ClockEdge)); + assert_param(IS_SDIO_CLOCK_BYPASS(SDIO_InitStruct->SDIO_ClockBypass)); + assert_param(IS_SDIO_CLOCK_POWER_SAVE(SDIO_InitStruct->SDIO_ClockPowerSave)); + assert_param(IS_SDIO_BUS_WIDE(SDIO_InitStruct->SDIO_BusWide)); + assert_param(IS_SDIO_HARDWARE_FLOW_CONTROL(SDIO_InitStruct->SDIO_HardwareFlowControl)); + +/*---------------------------- SDIO CLKCR Configuration ------------------------*/ + /* Get the SDIO CLKCR value */ + tmpreg = SDIO->CLKCR; + + /* Clear CLKDIV, PWRSAV, BYPASS, WIDBUS, NEGEDGE, HWFC_EN bits */ + tmpreg &= CLKCR_CLEAR_MASK; + + /* Set CLKDIV bits according to SDIO_ClockDiv value */ + /* Set PWRSAV bit according to SDIO_ClockPowerSave value */ + /* Set BYPASS bit according to SDIO_ClockBypass value */ + /* Set WIDBUS bits according to SDIO_BusWide value */ + /* Set NEGEDGE bits according to SDIO_ClockEdge value */ + /* Set HWFC_EN bits according to SDIO_HardwareFlowControl value */ + tmpreg |= (SDIO_InitStruct->SDIO_ClockDiv | SDIO_InitStruct->SDIO_ClockPowerSave | + SDIO_InitStruct->SDIO_ClockBypass | SDIO_InitStruct->SDIO_BusWide | + SDIO_InitStruct->SDIO_ClockEdge | SDIO_InitStruct->SDIO_HardwareFlowControl); + + /* Write to SDIO CLKCR */ + SDIO->CLKCR = tmpreg; +} + +/** + * @brief Fills each SDIO_InitStruct member with its default value. + * @param SDIO_InitStruct: pointer to an SDIO_InitTypeDef structure which + * will be initialized. + * @retval None + */ +void SDIO_StructInit(SDIO_InitTypeDef* SDIO_InitStruct) +{ + /* SDIO_InitStruct members default value */ + SDIO_InitStruct->SDIO_ClockDiv = 0x00; + SDIO_InitStruct->SDIO_ClockEdge = SDIO_ClockEdge_Rising; + SDIO_InitStruct->SDIO_ClockBypass = SDIO_ClockBypass_Disable; + SDIO_InitStruct->SDIO_ClockPowerSave = SDIO_ClockPowerSave_Disable; + SDIO_InitStruct->SDIO_BusWide = SDIO_BusWide_1b; + SDIO_InitStruct->SDIO_HardwareFlowControl = SDIO_HardwareFlowControl_Disable; +} + +/** + * @brief Enables or disables the SDIO Clock. + * @param NewState: new state of the SDIO Clock. This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void SDIO_ClockCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + *(__IO uint32_t *) CLKCR_CLKEN_BB = (uint32_t)NewState; +} + +/** + * @brief Sets the power status of the controller. + * @param SDIO_PowerState: new state of the Power state. + * This parameter can be one of the following values: + * @arg SDIO_PowerState_OFF + * @arg SDIO_PowerState_ON + * @retval None + */ +void SDIO_SetPowerState(uint32_t SDIO_PowerState) +{ + /* Check the parameters */ + assert_param(IS_SDIO_POWER_STATE(SDIO_PowerState)); + + SDIO->POWER &= PWR_PWRCTRL_MASK; + SDIO->POWER |= SDIO_PowerState; +} + +/** + * @brief Gets the power status of the controller. + * @param None + * @retval Power status of the controller. The returned value can + * be one of the following: + * - 0x00: Power OFF + * - 0x02: Power UP + * - 0x03: Power ON + */ +uint32_t SDIO_GetPowerState(void) +{ + return (SDIO->POWER & (~PWR_PWRCTRL_MASK)); +} + +/** + * @brief Enables or disables the SDIO interrupts. + * @param SDIO_IT: specifies the SDIO interrupt sources to be enabled or disabled. + * This parameter can be one or a combination of the following values: + * @arg SDIO_IT_CCRCFAIL: Command response received (CRC check failed) interrupt + * @arg SDIO_IT_DCRCFAIL: Data block sent/received (CRC check failed) interrupt + * @arg SDIO_IT_CTIMEOUT: Command response timeout interrupt + * @arg SDIO_IT_DTIMEOUT: Data timeout interrupt + * @arg SDIO_IT_TXUNDERR: Transmit FIFO underrun error interrupt + * @arg SDIO_IT_RXOVERR: Received FIFO overrun error interrupt + * @arg SDIO_IT_CMDREND: Command response received (CRC check passed) interrupt + * @arg SDIO_IT_CMDSENT: Command sent (no response required) interrupt + * @arg SDIO_IT_DATAEND: Data end (data counter, SDIDCOUNT, is zero) interrupt + * @arg SDIO_IT_STBITERR: Start bit not detected on all data signals in wide + * bus mode interrupt + * @arg SDIO_IT_DBCKEND: Data block sent/received (CRC check passed) interrupt + * @arg SDIO_IT_CMDACT: Command transfer in progress interrupt + * @arg SDIO_IT_TXACT: Data transmit in progress interrupt + * @arg SDIO_IT_RXACT: Data receive in progress interrupt + * @arg SDIO_IT_TXFIFOHE: Transmit FIFO Half Empty interrupt + * @arg SDIO_IT_RXFIFOHF: Receive FIFO Half Full interrupt + * @arg SDIO_IT_TXFIFOF: Transmit FIFO full interrupt + * @arg SDIO_IT_RXFIFOF: Receive FIFO full interrupt + * @arg SDIO_IT_TXFIFOE: Transmit FIFO empty interrupt + * @arg SDIO_IT_RXFIFOE: Receive FIFO empty interrupt + * @arg SDIO_IT_TXDAVL: Data available in transmit FIFO interrupt + * @arg SDIO_IT_RXDAVL: Data available in receive FIFO interrupt + * @arg SDIO_IT_SDIOIT: SD I/O interrupt received interrupt + * @arg SDIO_IT_CEATAEND: CE-ATA command completion signal received for CMD61 interrupt + * @param NewState: new state of the specified SDIO interrupts. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void SDIO_ITConfig(uint32_t SDIO_IT, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_SDIO_IT(SDIO_IT)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the SDIO interrupts */ + SDIO->MASK |= SDIO_IT; + } + else + { + /* Disable the SDIO interrupts */ + SDIO->MASK &= ~SDIO_IT; + } +} + +/** + * @brief Enables or disables the SDIO DMA request. + * @param NewState: new state of the selected SDIO DMA request. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void SDIO_DMACmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + *(__IO uint32_t *) DCTRL_DMAEN_BB = (uint32_t)NewState; +} + +/** + * @brief Initializes the SDIO Command according to the specified + * parameters in the SDIO_CmdInitStruct and send the command. + * @param SDIO_CmdInitStruct : pointer to a SDIO_CmdInitTypeDef + * structure that contains the configuration information for the SDIO command. + * @retval None + */ +void SDIO_SendCommand(SDIO_CmdInitTypeDef *SDIO_CmdInitStruct) +{ + uint32_t tmpreg = 0; + + /* Check the parameters */ + assert_param(IS_SDIO_CMD_INDEX(SDIO_CmdInitStruct->SDIO_CmdIndex)); + assert_param(IS_SDIO_RESPONSE(SDIO_CmdInitStruct->SDIO_Response)); + assert_param(IS_SDIO_WAIT(SDIO_CmdInitStruct->SDIO_Wait)); + assert_param(IS_SDIO_CPSM(SDIO_CmdInitStruct->SDIO_CPSM)); + +/*---------------------------- SDIO ARG Configuration ------------------------*/ + /* Set the SDIO Argument value */ + SDIO->ARG = SDIO_CmdInitStruct->SDIO_Argument; + +/*---------------------------- SDIO CMD Configuration ------------------------*/ + /* Get the SDIO CMD value */ + tmpreg = SDIO->CMD; + /* Clear CMDINDEX, WAITRESP, WAITINT, WAITPEND, CPSMEN bits */ + tmpreg &= CMD_CLEAR_MASK; + /* Set CMDINDEX bits according to SDIO_CmdIndex value */ + /* Set WAITRESP bits according to SDIO_Response value */ + /* Set WAITINT and WAITPEND bits according to SDIO_Wait value */ + /* Set CPSMEN bits according to SDIO_CPSM value */ + tmpreg |= (uint32_t)SDIO_CmdInitStruct->SDIO_CmdIndex | SDIO_CmdInitStruct->SDIO_Response + | SDIO_CmdInitStruct->SDIO_Wait | SDIO_CmdInitStruct->SDIO_CPSM; + + /* Write to SDIO CMD */ + SDIO->CMD = tmpreg; +} + +/** + * @brief Fills each SDIO_CmdInitStruct member with its default value. + * @param SDIO_CmdInitStruct: pointer to an SDIO_CmdInitTypeDef + * structure which will be initialized. + * @retval None + */ +void SDIO_CmdStructInit(SDIO_CmdInitTypeDef* SDIO_CmdInitStruct) +{ + /* SDIO_CmdInitStruct members default value */ + SDIO_CmdInitStruct->SDIO_Argument = 0x00; + SDIO_CmdInitStruct->SDIO_CmdIndex = 0x00; + SDIO_CmdInitStruct->SDIO_Response = SDIO_Response_No; + SDIO_CmdInitStruct->SDIO_Wait = SDIO_Wait_No; + SDIO_CmdInitStruct->SDIO_CPSM = SDIO_CPSM_Disable; +} + +/** + * @brief Returns command index of last command for which response received. + * @param None + * @retval Returns the command index of the last command response received. + */ +uint8_t SDIO_GetCommandResponse(void) +{ + return (uint8_t)(SDIO->RESPCMD); +} + +/** + * @brief Returns response received from the card for the last command. + * @param SDIO_RESP: Specifies the SDIO response register. + * This parameter can be one of the following values: + * @arg SDIO_RESP1: Response Register 1 + * @arg SDIO_RESP2: Response Register 2 + * @arg SDIO_RESP3: Response Register 3 + * @arg SDIO_RESP4: Response Register 4 + * @retval The Corresponding response register value. + */ +uint32_t SDIO_GetResponse(uint32_t SDIO_RESP) +{ + __IO uint32_t tmp = 0; + + /* Check the parameters */ + assert_param(IS_SDIO_RESP(SDIO_RESP)); + + tmp = SDIO_RESP_ADDR + SDIO_RESP; + + return (*(__IO uint32_t *) tmp); +} + +/** + * @brief Initializes the SDIO data path according to the specified + * parameters in the SDIO_DataInitStruct. + * @param SDIO_DataInitStruct : pointer to a SDIO_DataInitTypeDef structure that + * contains the configuration information for the SDIO command. + * @retval None + */ +void SDIO_DataConfig(SDIO_DataInitTypeDef* SDIO_DataInitStruct) +{ + uint32_t tmpreg = 0; + + /* Check the parameters */ + assert_param(IS_SDIO_DATA_LENGTH(SDIO_DataInitStruct->SDIO_DataLength)); + assert_param(IS_SDIO_BLOCK_SIZE(SDIO_DataInitStruct->SDIO_DataBlockSize)); + assert_param(IS_SDIO_TRANSFER_DIR(SDIO_DataInitStruct->SDIO_TransferDir)); + assert_param(IS_SDIO_TRANSFER_MODE(SDIO_DataInitStruct->SDIO_TransferMode)); + assert_param(IS_SDIO_DPSM(SDIO_DataInitStruct->SDIO_DPSM)); + +/*---------------------------- SDIO DTIMER Configuration ---------------------*/ + /* Set the SDIO Data TimeOut value */ + SDIO->DTIMER = SDIO_DataInitStruct->SDIO_DataTimeOut; + +/*---------------------------- SDIO DLEN Configuration -----------------------*/ + /* Set the SDIO DataLength value */ + SDIO->DLEN = SDIO_DataInitStruct->SDIO_DataLength; + +/*---------------------------- SDIO DCTRL Configuration ----------------------*/ + /* Get the SDIO DCTRL value */ + tmpreg = SDIO->DCTRL; + /* Clear DEN, DTMODE, DTDIR and DBCKSIZE bits */ + tmpreg &= DCTRL_CLEAR_MASK; + /* Set DEN bit according to SDIO_DPSM value */ + /* Set DTMODE bit according to SDIO_TransferMode value */ + /* Set DTDIR bit according to SDIO_TransferDir value */ + /* Set DBCKSIZE bits according to SDIO_DataBlockSize value */ + tmpreg |= (uint32_t)SDIO_DataInitStruct->SDIO_DataBlockSize | SDIO_DataInitStruct->SDIO_TransferDir + | SDIO_DataInitStruct->SDIO_TransferMode | SDIO_DataInitStruct->SDIO_DPSM; + + /* Write to SDIO DCTRL */ + SDIO->DCTRL = tmpreg; +} + +/** + * @brief Fills each SDIO_DataInitStruct member with its default value. + * @param SDIO_DataInitStruct: pointer to an SDIO_DataInitTypeDef structure which + * will be initialized. + * @retval None + */ +void SDIO_DataStructInit(SDIO_DataInitTypeDef* SDIO_DataInitStruct) +{ + /* SDIO_DataInitStruct members default value */ + SDIO_DataInitStruct->SDIO_DataTimeOut = 0xFFFFFFFF; + SDIO_DataInitStruct->SDIO_DataLength = 0x00; + SDIO_DataInitStruct->SDIO_DataBlockSize = SDIO_DataBlockSize_1b; + SDIO_DataInitStruct->SDIO_TransferDir = SDIO_TransferDir_ToCard; + SDIO_DataInitStruct->SDIO_TransferMode = SDIO_TransferMode_Block; + SDIO_DataInitStruct->SDIO_DPSM = SDIO_DPSM_Disable; +} + +/** + * @brief Returns number of remaining data bytes to be transferred. + * @param None + * @retval Number of remaining data bytes to be transferred + */ +uint32_t SDIO_GetDataCounter(void) +{ + return SDIO->DCOUNT; +} + +/** + * @brief Read one data word from Rx FIFO. + * @param None + * @retval Data received + */ +uint32_t SDIO_ReadData(void) +{ + return SDIO->FIFO; +} + +/** + * @brief Write one data word to Tx FIFO. + * @param Data: 32-bit data word to write. + * @retval None + */ +void SDIO_WriteData(uint32_t Data) +{ + SDIO->FIFO = Data; +} + +/** + * @brief Returns the number of words left to be written to or read from FIFO. + * @param None + * @retval Remaining number of words. + */ +uint32_t SDIO_GetFIFOCount(void) +{ + return SDIO->FIFOCNT; +} + +/** + * @brief Starts the SD I/O Read Wait operation. + * @param NewState: new state of the Start SDIO Read Wait operation. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void SDIO_StartSDIOReadWait(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + *(__IO uint32_t *) DCTRL_RWSTART_BB = (uint32_t) NewState; +} + +/** + * @brief Stops the SD I/O Read Wait operation. + * @param NewState: new state of the Stop SDIO Read Wait operation. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void SDIO_StopSDIOReadWait(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + *(__IO uint32_t *) DCTRL_RWSTOP_BB = (uint32_t) NewState; +} + +/** + * @brief Sets one of the two options of inserting read wait interval. + * @param SDIO_ReadWaitMode: SD I/O Read Wait operation mode. + * This parameter can be: + * @arg SDIO_ReadWaitMode_CLK: Read Wait control by stopping SDIOCLK + * @arg SDIO_ReadWaitMode_DATA2: Read Wait control using SDIO_DATA2 + * @retval None + */ +void SDIO_SetSDIOReadWaitMode(uint32_t SDIO_ReadWaitMode) +{ + /* Check the parameters */ + assert_param(IS_SDIO_READWAIT_MODE(SDIO_ReadWaitMode)); + + *(__IO uint32_t *) DCTRL_RWMOD_BB = SDIO_ReadWaitMode; +} + +/** + * @brief Enables or disables the SD I/O Mode Operation. + * @param NewState: new state of SDIO specific operation. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void SDIO_SetSDIOOperation(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + *(__IO uint32_t *) DCTRL_SDIOEN_BB = (uint32_t)NewState; +} + +/** + * @brief Enables or disables the SD I/O Mode suspend command sending. + * @param NewState: new state of the SD I/O Mode suspend command. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void SDIO_SendSDIOSuspendCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + *(__IO uint32_t *) CMD_SDIOSUSPEND_BB = (uint32_t)NewState; +} + +/** + * @brief Enables or disables the command completion signal. + * @param NewState: new state of command completion signal. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void SDIO_CommandCompletionCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + *(__IO uint32_t *) CMD_ENCMDCOMPL_BB = (uint32_t)NewState; +} + +/** + * @brief Enables or disables the CE-ATA interrupt. + * @param NewState: new state of CE-ATA interrupt. This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void SDIO_CEATAITCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + *(__IO uint32_t *) CMD_NIEN_BB = (uint32_t)((~((uint32_t)NewState)) & ((uint32_t)0x1)); +} + +/** + * @brief Sends CE-ATA command (CMD61). + * @param NewState: new state of CE-ATA command. This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void SDIO_SendCEATACmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + *(__IO uint32_t *) CMD_ATACMD_BB = (uint32_t)NewState; +} + +/** + * @brief Checks whether the specified SDIO flag is set or not. + * @param SDIO_FLAG: specifies the flag to check. + * This parameter can be one of the following values: + * @arg SDIO_FLAG_CCRCFAIL: Command response received (CRC check failed) + * @arg SDIO_FLAG_DCRCFAIL: Data block sent/received (CRC check failed) + * @arg SDIO_FLAG_CTIMEOUT: Command response timeout + * @arg SDIO_FLAG_DTIMEOUT: Data timeout + * @arg SDIO_FLAG_TXUNDERR: Transmit FIFO underrun error + * @arg SDIO_FLAG_RXOVERR: Received FIFO overrun error + * @arg SDIO_FLAG_CMDREND: Command response received (CRC check passed) + * @arg SDIO_FLAG_CMDSENT: Command sent (no response required) + * @arg SDIO_FLAG_DATAEND: Data end (data counter, SDIDCOUNT, is zero) + * @arg SDIO_FLAG_STBITERR: Start bit not detected on all data signals in wide + * bus mode. + * @arg SDIO_FLAG_DBCKEND: Data block sent/received (CRC check passed) + * @arg SDIO_FLAG_CMDACT: Command transfer in progress + * @arg SDIO_FLAG_TXACT: Data transmit in progress + * @arg SDIO_FLAG_RXACT: Data receive in progress + * @arg SDIO_FLAG_TXFIFOHE: Transmit FIFO Half Empty + * @arg SDIO_FLAG_RXFIFOHF: Receive FIFO Half Full + * @arg SDIO_FLAG_TXFIFOF: Transmit FIFO full + * @arg SDIO_FLAG_RXFIFOF: Receive FIFO full + * @arg SDIO_FLAG_TXFIFOE: Transmit FIFO empty + * @arg SDIO_FLAG_RXFIFOE: Receive FIFO empty + * @arg SDIO_FLAG_TXDAVL: Data available in transmit FIFO + * @arg SDIO_FLAG_RXDAVL: Data available in receive FIFO + * @arg SDIO_FLAG_SDIOIT: SD I/O interrupt received + * @arg SDIO_FLAG_CEATAEND: CE-ATA command completion signal received for CMD61 + * @retval The new state of SDIO_FLAG (SET or RESET). + */ +FlagStatus SDIO_GetFlagStatus(uint32_t SDIO_FLAG) +{ + FlagStatus bitstatus = RESET; + + /* Check the parameters */ + assert_param(IS_SDIO_FLAG(SDIO_FLAG)); + + if ((SDIO->STA & SDIO_FLAG) != (uint32_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + return bitstatus; +} + +/** + * @brief Clears the SDIO's pending flags. + * @param SDIO_FLAG: specifies the flag to clear. + * This parameter can be one or a combination of the following values: + * @arg SDIO_FLAG_CCRCFAIL: Command response received (CRC check failed) + * @arg SDIO_FLAG_DCRCFAIL: Data block sent/received (CRC check failed) + * @arg SDIO_FLAG_CTIMEOUT: Command response timeout + * @arg SDIO_FLAG_DTIMEOUT: Data timeout + * @arg SDIO_FLAG_TXUNDERR: Transmit FIFO underrun error + * @arg SDIO_FLAG_RXOVERR: Received FIFO overrun error + * @arg SDIO_FLAG_CMDREND: Command response received (CRC check passed) + * @arg SDIO_FLAG_CMDSENT: Command sent (no response required) + * @arg SDIO_FLAG_DATAEND: Data end (data counter, SDIDCOUNT, is zero) + * @arg SDIO_FLAG_STBITERR: Start bit not detected on all data signals in wide + * bus mode + * @arg SDIO_FLAG_DBCKEND: Data block sent/received (CRC check passed) + * @arg SDIO_FLAG_SDIOIT: SD I/O interrupt received + * @arg SDIO_FLAG_CEATAEND: CE-ATA command completion signal received for CMD61 + * @retval None + */ +void SDIO_ClearFlag(uint32_t SDIO_FLAG) +{ + /* Check the parameters */ + assert_param(IS_SDIO_CLEAR_FLAG(SDIO_FLAG)); + + SDIO->ICR = SDIO_FLAG; +} + +/** + * @brief Checks whether the specified SDIO interrupt has occurred or not. + * @param SDIO_IT: specifies the SDIO interrupt source to check. + * This parameter can be one of the following values: + * @arg SDIO_IT_CCRCFAIL: Command response received (CRC check failed) interrupt + * @arg SDIO_IT_DCRCFAIL: Data block sent/received (CRC check failed) interrupt + * @arg SDIO_IT_CTIMEOUT: Command response timeout interrupt + * @arg SDIO_IT_DTIMEOUT: Data timeout interrupt + * @arg SDIO_IT_TXUNDERR: Transmit FIFO underrun error interrupt + * @arg SDIO_IT_RXOVERR: Received FIFO overrun error interrupt + * @arg SDIO_IT_CMDREND: Command response received (CRC check passed) interrupt + * @arg SDIO_IT_CMDSENT: Command sent (no response required) interrupt + * @arg SDIO_IT_DATAEND: Data end (data counter, SDIDCOUNT, is zero) interrupt + * @arg SDIO_IT_STBITERR: Start bit not detected on all data signals in wide + * bus mode interrupt + * @arg SDIO_IT_DBCKEND: Data block sent/received (CRC check passed) interrupt + * @arg SDIO_IT_CMDACT: Command transfer in progress interrupt + * @arg SDIO_IT_TXACT: Data transmit in progress interrupt + * @arg SDIO_IT_RXACT: Data receive in progress interrupt + * @arg SDIO_IT_TXFIFOHE: Transmit FIFO Half Empty interrupt + * @arg SDIO_IT_RXFIFOHF: Receive FIFO Half Full interrupt + * @arg SDIO_IT_TXFIFOF: Transmit FIFO full interrupt + * @arg SDIO_IT_RXFIFOF: Receive FIFO full interrupt + * @arg SDIO_IT_TXFIFOE: Transmit FIFO empty interrupt + * @arg SDIO_IT_RXFIFOE: Receive FIFO empty interrupt + * @arg SDIO_IT_TXDAVL: Data available in transmit FIFO interrupt + * @arg SDIO_IT_RXDAVL: Data available in receive FIFO interrupt + * @arg SDIO_IT_SDIOIT: SD I/O interrupt received interrupt + * @arg SDIO_IT_CEATAEND: CE-ATA command completion signal received for CMD61 interrupt + * @retval The new state of SDIO_IT (SET or RESET). + */ +ITStatus SDIO_GetITStatus(uint32_t SDIO_IT) +{ + ITStatus bitstatus = RESET; + + /* Check the parameters */ + assert_param(IS_SDIO_GET_IT(SDIO_IT)); + if ((SDIO->STA & SDIO_IT) != (uint32_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + return bitstatus; +} + +/** + * @brief Clears the SDIO's interrupt pending bits. + * @param SDIO_IT: specifies the interrupt pending bit to clear. + * This parameter can be one or a combination of the following values: + * @arg SDIO_IT_CCRCFAIL: Command response received (CRC check failed) interrupt + * @arg SDIO_IT_DCRCFAIL: Data block sent/received (CRC check failed) interrupt + * @arg SDIO_IT_CTIMEOUT: Command response timeout interrupt + * @arg SDIO_IT_DTIMEOUT: Data timeout interrupt + * @arg SDIO_IT_TXUNDERR: Transmit FIFO underrun error interrupt + * @arg SDIO_IT_RXOVERR: Received FIFO overrun error interrupt + * @arg SDIO_IT_CMDREND: Command response received (CRC check passed) interrupt + * @arg SDIO_IT_CMDSENT: Command sent (no response required) interrupt + * @arg SDIO_IT_DATAEND: Data end (data counter, SDIDCOUNT, is zero) interrupt + * @arg SDIO_IT_STBITERR: Start bit not detected on all data signals in wide + * bus mode interrupt + * @arg SDIO_IT_SDIOIT: SD I/O interrupt received interrupt + * @arg SDIO_IT_CEATAEND: CE-ATA command completion signal received for CMD61 + * @retval None + */ +void SDIO_ClearITPendingBit(uint32_t SDIO_IT) +{ + /* Check the parameters */ + assert_param(IS_SDIO_CLEAR_IT(SDIO_IT)); + + SDIO->ICR = SDIO_IT; +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_spi.c b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_spi.c new file mode 100644 index 0000000..4ec65b2 --- /dev/null +++ b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_spi.c @@ -0,0 +1,908 @@ +/** + ****************************************************************************** + * @file stm32f10x_spi.c + * @author MCD Application Team + * @version V3.5.0 + * @date 11-March-2011 + * @brief This file provides all the SPI firmware functions. + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

    © COPYRIGHT 2011 STMicroelectronics

    + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f10x_spi.h" +#include "stm32f10x_rcc.h" + +/** @addtogroup STM32F10x_StdPeriph_Driver + * @{ + */ + +/** @defgroup SPI + * @brief SPI driver modules + * @{ + */ + +/** @defgroup SPI_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + + +/** @defgroup SPI_Private_Defines + * @{ + */ + +/* SPI SPE mask */ +#define CR1_SPE_Set ((uint16_t)0x0040) +#define CR1_SPE_Reset ((uint16_t)0xFFBF) + +/* I2S I2SE mask */ +#define I2SCFGR_I2SE_Set ((uint16_t)0x0400) +#define I2SCFGR_I2SE_Reset ((uint16_t)0xFBFF) + +/* SPI CRCNext mask */ +#define CR1_CRCNext_Set ((uint16_t)0x1000) + +/* SPI CRCEN mask */ +#define CR1_CRCEN_Set ((uint16_t)0x2000) +#define CR1_CRCEN_Reset ((uint16_t)0xDFFF) + +/* SPI SSOE mask */ +#define CR2_SSOE_Set ((uint16_t)0x0004) +#define CR2_SSOE_Reset ((uint16_t)0xFFFB) + +/* SPI registers Masks */ +#define CR1_CLEAR_Mask ((uint16_t)0x3040) +#define I2SCFGR_CLEAR_Mask ((uint16_t)0xF040) + +/* SPI or I2S mode selection masks */ +#define SPI_Mode_Select ((uint16_t)0xF7FF) +#define I2S_Mode_Select ((uint16_t)0x0800) + +/* I2S clock source selection masks */ +#define I2S2_CLOCK_SRC ((uint32_t)(0x00020000)) +#define I2S3_CLOCK_SRC ((uint32_t)(0x00040000)) +#define I2S_MUL_MASK ((uint32_t)(0x0000F000)) +#define I2S_DIV_MASK ((uint32_t)(0x000000F0)) + +/** + * @} + */ + +/** @defgroup SPI_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup SPI_Private_Variables + * @{ + */ + +/** + * @} + */ + +/** @defgroup SPI_Private_FunctionPrototypes + * @{ + */ + +/** + * @} + */ + +/** @defgroup SPI_Private_Functions + * @{ + */ + +/** + * @brief Deinitializes the SPIx peripheral registers to their default + * reset values (Affects also the I2Ss). + * @param SPIx: where x can be 1, 2 or 3 to select the SPI peripheral. + * @retval None + */ +void SPI_I2S_DeInit(SPI_TypeDef* SPIx) +{ + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + + if (SPIx == SPI1) + { + /* Enable SPI1 reset state */ + RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1, ENABLE); + /* Release SPI1 from reset state */ + RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1, DISABLE); + } + else if (SPIx == SPI2) + { + /* Enable SPI2 reset state */ + RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI2, ENABLE); + /* Release SPI2 from reset state */ + RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI2, DISABLE); + } + else + { + if (SPIx == SPI3) + { + /* Enable SPI3 reset state */ + RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI3, ENABLE); + /* Release SPI3 from reset state */ + RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI3, DISABLE); + } + } +} + +/** + * @brief Initializes the SPIx peripheral according to the specified + * parameters in the SPI_InitStruct. + * @param SPIx: where x can be 1, 2 or 3 to select the SPI peripheral. + * @param SPI_InitStruct: pointer to a SPI_InitTypeDef structure that + * contains the configuration information for the specified SPI peripheral. + * @retval None + */ +void SPI_Init(SPI_TypeDef* SPIx, SPI_InitTypeDef* SPI_InitStruct) +{ + uint16_t tmpreg = 0; + + /* check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + + /* Check the SPI parameters */ + assert_param(IS_SPI_DIRECTION_MODE(SPI_InitStruct->SPI_Direction)); + assert_param(IS_SPI_MODE(SPI_InitStruct->SPI_Mode)); + assert_param(IS_SPI_DATASIZE(SPI_InitStruct->SPI_DataSize)); + assert_param(IS_SPI_CPOL(SPI_InitStruct->SPI_CPOL)); + assert_param(IS_SPI_CPHA(SPI_InitStruct->SPI_CPHA)); + assert_param(IS_SPI_NSS(SPI_InitStruct->SPI_NSS)); + assert_param(IS_SPI_BAUDRATE_PRESCALER(SPI_InitStruct->SPI_BaudRatePrescaler)); + assert_param(IS_SPI_FIRST_BIT(SPI_InitStruct->SPI_FirstBit)); + assert_param(IS_SPI_CRC_POLYNOMIAL(SPI_InitStruct->SPI_CRCPolynomial)); + +/*---------------------------- SPIx CR1 Configuration ------------------------*/ + /* Get the SPIx CR1 value */ + tmpreg = SPIx->CR1; + /* Clear BIDIMode, BIDIOE, RxONLY, SSM, SSI, LSBFirst, BR, MSTR, CPOL and CPHA bits */ + tmpreg &= CR1_CLEAR_Mask; + /* Configure SPIx: direction, NSS management, first transmitted bit, BaudRate prescaler + master/salve mode, CPOL and CPHA */ + /* Set BIDImode, BIDIOE and RxONLY bits according to SPI_Direction value */ + /* Set SSM, SSI and MSTR bits according to SPI_Mode and SPI_NSS values */ + /* Set LSBFirst bit according to SPI_FirstBit value */ + /* Set BR bits according to SPI_BaudRatePrescaler value */ + /* Set CPOL bit according to SPI_CPOL value */ + /* Set CPHA bit according to SPI_CPHA value */ + tmpreg |= (uint16_t)((uint32_t)SPI_InitStruct->SPI_Direction | SPI_InitStruct->SPI_Mode | + SPI_InitStruct->SPI_DataSize | SPI_InitStruct->SPI_CPOL | + SPI_InitStruct->SPI_CPHA | SPI_InitStruct->SPI_NSS | + SPI_InitStruct->SPI_BaudRatePrescaler | SPI_InitStruct->SPI_FirstBit); + /* Write to SPIx CR1 */ + SPIx->CR1 = tmpreg; + + /* Activate the SPI mode (Reset I2SMOD bit in I2SCFGR register) */ + SPIx->I2SCFGR &= SPI_Mode_Select; + +/*---------------------------- SPIx CRCPOLY Configuration --------------------*/ + /* Write to SPIx CRCPOLY */ + SPIx->CRCPR = SPI_InitStruct->SPI_CRCPolynomial; +} + +/** + * @brief Initializes the SPIx peripheral according to the specified + * parameters in the I2S_InitStruct. + * @param SPIx: where x can be 2 or 3 to select the SPI peripheral + * (configured in I2S mode). + * @param I2S_InitStruct: pointer to an I2S_InitTypeDef structure that + * contains the configuration information for the specified SPI peripheral + * configured in I2S mode. + * @note + * The function calculates the optimal prescaler needed to obtain the most + * accurate audio frequency (depending on the I2S clock source, the PLL values + * and the product configuration). But in case the prescaler value is greater + * than 511, the default value (0x02) will be configured instead. * + * @retval None + */ +void I2S_Init(SPI_TypeDef* SPIx, I2S_InitTypeDef* I2S_InitStruct) +{ + uint16_t tmpreg = 0, i2sdiv = 2, i2sodd = 0, packetlength = 1; + uint32_t tmp = 0; + RCC_ClocksTypeDef RCC_Clocks; + uint32_t sourceclock = 0; + + /* Check the I2S parameters */ + assert_param(IS_SPI_23_PERIPH(SPIx)); + assert_param(IS_I2S_MODE(I2S_InitStruct->I2S_Mode)); + assert_param(IS_I2S_STANDARD(I2S_InitStruct->I2S_Standard)); + assert_param(IS_I2S_DATA_FORMAT(I2S_InitStruct->I2S_DataFormat)); + assert_param(IS_I2S_MCLK_OUTPUT(I2S_InitStruct->I2S_MCLKOutput)); + assert_param(IS_I2S_AUDIO_FREQ(I2S_InitStruct->I2S_AudioFreq)); + assert_param(IS_I2S_CPOL(I2S_InitStruct->I2S_CPOL)); + +/*----------------------- SPIx I2SCFGR & I2SPR Configuration -----------------*/ + /* Clear I2SMOD, I2SE, I2SCFG, PCMSYNC, I2SSTD, CKPOL, DATLEN and CHLEN bits */ + SPIx->I2SCFGR &= I2SCFGR_CLEAR_Mask; + SPIx->I2SPR = 0x0002; + + /* Get the I2SCFGR register value */ + tmpreg = SPIx->I2SCFGR; + + /* If the default value has to be written, reinitialize i2sdiv and i2sodd*/ + if(I2S_InitStruct->I2S_AudioFreq == I2S_AudioFreq_Default) + { + i2sodd = (uint16_t)0; + i2sdiv = (uint16_t)2; + } + /* If the requested audio frequency is not the default, compute the prescaler */ + else + { + /* Check the frame length (For the Prescaler computing) */ + if(I2S_InitStruct->I2S_DataFormat == I2S_DataFormat_16b) + { + /* Packet length is 16 bits */ + packetlength = 1; + } + else + { + /* Packet length is 32 bits */ + packetlength = 2; + } + + /* Get the I2S clock source mask depending on the peripheral number */ + if(((uint32_t)SPIx) == SPI2_BASE) + { + /* The mask is relative to I2S2 */ + tmp = I2S2_CLOCK_SRC; + } + else + { + /* The mask is relative to I2S3 */ + tmp = I2S3_CLOCK_SRC; + } + + /* Check the I2S clock source configuration depending on the Device: + Only Connectivity line devices have the PLL3 VCO clock */ +#ifdef STM32F10X_CL + if((RCC->CFGR2 & tmp) != 0) + { + /* Get the configuration bits of RCC PLL3 multiplier */ + tmp = (uint32_t)((RCC->CFGR2 & I2S_MUL_MASK) >> 12); + + /* Get the value of the PLL3 multiplier */ + if((tmp > 5) && (tmp < 15)) + { + /* Multiplier is between 8 and 14 (value 15 is forbidden) */ + tmp += 2; + } + else + { + if (tmp == 15) + { + /* Multiplier is 20 */ + tmp = 20; + } + } + /* Get the PREDIV2 value */ + sourceclock = (uint32_t)(((RCC->CFGR2 & I2S_DIV_MASK) >> 4) + 1); + + /* Calculate the Source Clock frequency based on PLL3 and PREDIV2 values */ + sourceclock = (uint32_t) ((HSE_Value / sourceclock) * tmp * 2); + } + else + { + /* I2S Clock source is System clock: Get System Clock frequency */ + RCC_GetClocksFreq(&RCC_Clocks); + + /* Get the source clock value: based on System Clock value */ + sourceclock = RCC_Clocks.SYSCLK_Frequency; + } +#else /* STM32F10X_HD */ + /* I2S Clock source is System clock: Get System Clock frequency */ + RCC_GetClocksFreq(&RCC_Clocks); + + /* Get the source clock value: based on System Clock value */ + sourceclock = RCC_Clocks.SYSCLK_Frequency; +#endif /* STM32F10X_CL */ + + /* Compute the Real divider depending on the MCLK output state with a floating point */ + if(I2S_InitStruct->I2S_MCLKOutput == I2S_MCLKOutput_Enable) + { + /* MCLK output is enabled */ + tmp = (uint16_t)(((((sourceclock / 256) * 10) / I2S_InitStruct->I2S_AudioFreq)) + 5); + } + else + { + /* MCLK output is disabled */ + tmp = (uint16_t)(((((sourceclock / (32 * packetlength)) *10 ) / I2S_InitStruct->I2S_AudioFreq)) + 5); + } + + /* Remove the floating point */ + tmp = tmp / 10; + + /* Check the parity of the divider */ + i2sodd = (uint16_t)(tmp & (uint16_t)0x0001); + + /* Compute the i2sdiv prescaler */ + i2sdiv = (uint16_t)((tmp - i2sodd) / 2); + + /* Get the Mask for the Odd bit (SPI_I2SPR[8]) register */ + i2sodd = (uint16_t) (i2sodd << 8); + } + + /* Test if the divider is 1 or 0 or greater than 0xFF */ + if ((i2sdiv < 2) || (i2sdiv > 0xFF)) + { + /* Set the default values */ + i2sdiv = 2; + i2sodd = 0; + } + + /* Write to SPIx I2SPR register the computed value */ + SPIx->I2SPR = (uint16_t)(i2sdiv | (uint16_t)(i2sodd | (uint16_t)I2S_InitStruct->I2S_MCLKOutput)); + + /* Configure the I2S with the SPI_InitStruct values */ + tmpreg |= (uint16_t)(I2S_Mode_Select | (uint16_t)(I2S_InitStruct->I2S_Mode | \ + (uint16_t)(I2S_InitStruct->I2S_Standard | (uint16_t)(I2S_InitStruct->I2S_DataFormat | \ + (uint16_t)I2S_InitStruct->I2S_CPOL)))); + + /* Write to SPIx I2SCFGR */ + SPIx->I2SCFGR = tmpreg; +} + +/** + * @brief Fills each SPI_InitStruct member with its default value. + * @param SPI_InitStruct : pointer to a SPI_InitTypeDef structure which will be initialized. + * @retval None + */ +void SPI_StructInit(SPI_InitTypeDef* SPI_InitStruct) +{ +/*--------------- Reset SPI init structure parameters values -----------------*/ + /* Initialize the SPI_Direction member */ + SPI_InitStruct->SPI_Direction = SPI_Direction_2Lines_FullDuplex; + /* initialize the SPI_Mode member */ + SPI_InitStruct->SPI_Mode = SPI_Mode_Slave; + /* initialize the SPI_DataSize member */ + SPI_InitStruct->SPI_DataSize = SPI_DataSize_8b; + /* Initialize the SPI_CPOL member */ + SPI_InitStruct->SPI_CPOL = SPI_CPOL_Low; + /* Initialize the SPI_CPHA member */ + SPI_InitStruct->SPI_CPHA = SPI_CPHA_1Edge; + /* Initialize the SPI_NSS member */ + SPI_InitStruct->SPI_NSS = SPI_NSS_Hard; + /* Initialize the SPI_BaudRatePrescaler member */ + SPI_InitStruct->SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2; + /* Initialize the SPI_FirstBit member */ + SPI_InitStruct->SPI_FirstBit = SPI_FirstBit_MSB; + /* Initialize the SPI_CRCPolynomial member */ + SPI_InitStruct->SPI_CRCPolynomial = 7; +} + +/** + * @brief Fills each I2S_InitStruct member with its default value. + * @param I2S_InitStruct : pointer to a I2S_InitTypeDef structure which will be initialized. + * @retval None + */ +void I2S_StructInit(I2S_InitTypeDef* I2S_InitStruct) +{ +/*--------------- Reset I2S init structure parameters values -----------------*/ + /* Initialize the I2S_Mode member */ + I2S_InitStruct->I2S_Mode = I2S_Mode_SlaveTx; + + /* Initialize the I2S_Standard member */ + I2S_InitStruct->I2S_Standard = I2S_Standard_Phillips; + + /* Initialize the I2S_DataFormat member */ + I2S_InitStruct->I2S_DataFormat = I2S_DataFormat_16b; + + /* Initialize the I2S_MCLKOutput member */ + I2S_InitStruct->I2S_MCLKOutput = I2S_MCLKOutput_Disable; + + /* Initialize the I2S_AudioFreq member */ + I2S_InitStruct->I2S_AudioFreq = I2S_AudioFreq_Default; + + /* Initialize the I2S_CPOL member */ + I2S_InitStruct->I2S_CPOL = I2S_CPOL_Low; +} + +/** + * @brief Enables or disables the specified SPI peripheral. + * @param SPIx: where x can be 1, 2 or 3 to select the SPI peripheral. + * @param NewState: new state of the SPIx peripheral. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void SPI_Cmd(SPI_TypeDef* SPIx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the selected SPI peripheral */ + SPIx->CR1 |= CR1_SPE_Set; + } + else + { + /* Disable the selected SPI peripheral */ + SPIx->CR1 &= CR1_SPE_Reset; + } +} + +/** + * @brief Enables or disables the specified SPI peripheral (in I2S mode). + * @param SPIx: where x can be 2 or 3 to select the SPI peripheral. + * @param NewState: new state of the SPIx peripheral. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void I2S_Cmd(SPI_TypeDef* SPIx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_SPI_23_PERIPH(SPIx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the selected SPI peripheral (in I2S mode) */ + SPIx->I2SCFGR |= I2SCFGR_I2SE_Set; + } + else + { + /* Disable the selected SPI peripheral (in I2S mode) */ + SPIx->I2SCFGR &= I2SCFGR_I2SE_Reset; + } +} + +/** + * @brief Enables or disables the specified SPI/I2S interrupts. + * @param SPIx: where x can be + * - 1, 2 or 3 in SPI mode + * - 2 or 3 in I2S mode + * @param SPI_I2S_IT: specifies the SPI/I2S interrupt source to be enabled or disabled. + * This parameter can be one of the following values: + * @arg SPI_I2S_IT_TXE: Tx buffer empty interrupt mask + * @arg SPI_I2S_IT_RXNE: Rx buffer not empty interrupt mask + * @arg SPI_I2S_IT_ERR: Error interrupt mask + * @param NewState: new state of the specified SPI/I2S interrupt. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void SPI_I2S_ITConfig(SPI_TypeDef* SPIx, uint8_t SPI_I2S_IT, FunctionalState NewState) +{ + uint16_t itpos = 0, itmask = 0 ; + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + assert_param(IS_SPI_I2S_CONFIG_IT(SPI_I2S_IT)); + + /* Get the SPI/I2S IT index */ + itpos = SPI_I2S_IT >> 4; + + /* Set the IT mask */ + itmask = (uint16_t)1 << (uint16_t)itpos; + + if (NewState != DISABLE) + { + /* Enable the selected SPI/I2S interrupt */ + SPIx->CR2 |= itmask; + } + else + { + /* Disable the selected SPI/I2S interrupt */ + SPIx->CR2 &= (uint16_t)~itmask; + } +} + +/** + * @brief Enables or disables the SPIx/I2Sx DMA interface. + * @param SPIx: where x can be + * - 1, 2 or 3 in SPI mode + * - 2 or 3 in I2S mode + * @param SPI_I2S_DMAReq: specifies the SPI/I2S DMA transfer request to be enabled or disabled. + * This parameter can be any combination of the following values: + * @arg SPI_I2S_DMAReq_Tx: Tx buffer DMA transfer request + * @arg SPI_I2S_DMAReq_Rx: Rx buffer DMA transfer request + * @param NewState: new state of the selected SPI/I2S DMA transfer request. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void SPI_I2S_DMACmd(SPI_TypeDef* SPIx, uint16_t SPI_I2S_DMAReq, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + assert_param(IS_SPI_I2S_DMAREQ(SPI_I2S_DMAReq)); + if (NewState != DISABLE) + { + /* Enable the selected SPI/I2S DMA requests */ + SPIx->CR2 |= SPI_I2S_DMAReq; + } + else + { + /* Disable the selected SPI/I2S DMA requests */ + SPIx->CR2 &= (uint16_t)~SPI_I2S_DMAReq; + } +} + +/** + * @brief Transmits a Data through the SPIx/I2Sx peripheral. + * @param SPIx: where x can be + * - 1, 2 or 3 in SPI mode + * - 2 or 3 in I2S mode + * @param Data : Data to be transmitted. + * @retval None + */ +void SPI_I2S_SendData(SPI_TypeDef* SPIx, uint16_t Data) +{ + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + + /* Write in the DR register the data to be sent */ + SPIx->DR = Data; +} + +/** + * @brief Returns the most recent received data by the SPIx/I2Sx peripheral. + * @param SPIx: where x can be + * - 1, 2 or 3 in SPI mode + * - 2 or 3 in I2S mode + * @retval The value of the received data. + */ +uint16_t SPI_I2S_ReceiveData(SPI_TypeDef* SPIx) +{ + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + + /* Return the data in the DR register */ + return SPIx->DR; +} + +/** + * @brief Configures internally by software the NSS pin for the selected SPI. + * @param SPIx: where x can be 1, 2 or 3 to select the SPI peripheral. + * @param SPI_NSSInternalSoft: specifies the SPI NSS internal state. + * This parameter can be one of the following values: + * @arg SPI_NSSInternalSoft_Set: Set NSS pin internally + * @arg SPI_NSSInternalSoft_Reset: Reset NSS pin internally + * @retval None + */ +void SPI_NSSInternalSoftwareConfig(SPI_TypeDef* SPIx, uint16_t SPI_NSSInternalSoft) +{ + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + assert_param(IS_SPI_NSS_INTERNAL(SPI_NSSInternalSoft)); + if (SPI_NSSInternalSoft != SPI_NSSInternalSoft_Reset) + { + /* Set NSS pin internally by software */ + SPIx->CR1 |= SPI_NSSInternalSoft_Set; + } + else + { + /* Reset NSS pin internally by software */ + SPIx->CR1 &= SPI_NSSInternalSoft_Reset; + } +} + +/** + * @brief Enables or disables the SS output for the selected SPI. + * @param SPIx: where x can be 1, 2 or 3 to select the SPI peripheral. + * @param NewState: new state of the SPIx SS output. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void SPI_SSOutputCmd(SPI_TypeDef* SPIx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the selected SPI SS output */ + SPIx->CR2 |= CR2_SSOE_Set; + } + else + { + /* Disable the selected SPI SS output */ + SPIx->CR2 &= CR2_SSOE_Reset; + } +} + +/** + * @brief Configures the data size for the selected SPI. + * @param SPIx: where x can be 1, 2 or 3 to select the SPI peripheral. + * @param SPI_DataSize: specifies the SPI data size. + * This parameter can be one of the following values: + * @arg SPI_DataSize_16b: Set data frame format to 16bit + * @arg SPI_DataSize_8b: Set data frame format to 8bit + * @retval None + */ +void SPI_DataSizeConfig(SPI_TypeDef* SPIx, uint16_t SPI_DataSize) +{ + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + assert_param(IS_SPI_DATASIZE(SPI_DataSize)); + /* Clear DFF bit */ + SPIx->CR1 &= (uint16_t)~SPI_DataSize_16b; + /* Set new DFF bit value */ + SPIx->CR1 |= SPI_DataSize; +} + +/** + * @brief Transmit the SPIx CRC value. + * @param SPIx: where x can be 1, 2 or 3 to select the SPI peripheral. + * @retval None + */ +void SPI_TransmitCRC(SPI_TypeDef* SPIx) +{ + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + + /* Enable the selected SPI CRC transmission */ + SPIx->CR1 |= CR1_CRCNext_Set; +} + +/** + * @brief Enables or disables the CRC value calculation of the transferred bytes. + * @param SPIx: where x can be 1, 2 or 3 to select the SPI peripheral. + * @param NewState: new state of the SPIx CRC value calculation. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void SPI_CalculateCRC(SPI_TypeDef* SPIx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the selected SPI CRC calculation */ + SPIx->CR1 |= CR1_CRCEN_Set; + } + else + { + /* Disable the selected SPI CRC calculation */ + SPIx->CR1 &= CR1_CRCEN_Reset; + } +} + +/** + * @brief Returns the transmit or the receive CRC register value for the specified SPI. + * @param SPIx: where x can be 1, 2 or 3 to select the SPI peripheral. + * @param SPI_CRC: specifies the CRC register to be read. + * This parameter can be one of the following values: + * @arg SPI_CRC_Tx: Selects Tx CRC register + * @arg SPI_CRC_Rx: Selects Rx CRC register + * @retval The selected CRC register value.. + */ +uint16_t SPI_GetCRC(SPI_TypeDef* SPIx, uint8_t SPI_CRC) +{ + uint16_t crcreg = 0; + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + assert_param(IS_SPI_CRC(SPI_CRC)); + if (SPI_CRC != SPI_CRC_Rx) + { + /* Get the Tx CRC register */ + crcreg = SPIx->TXCRCR; + } + else + { + /* Get the Rx CRC register */ + crcreg = SPIx->RXCRCR; + } + /* Return the selected CRC register */ + return crcreg; +} + +/** + * @brief Returns the CRC Polynomial register value for the specified SPI. + * @param SPIx: where x can be 1, 2 or 3 to select the SPI peripheral. + * @retval The CRC Polynomial register value. + */ +uint16_t SPI_GetCRCPolynomial(SPI_TypeDef* SPIx) +{ + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + + /* Return the CRC polynomial register */ + return SPIx->CRCPR; +} + +/** + * @brief Selects the data transfer direction in bi-directional mode for the specified SPI. + * @param SPIx: where x can be 1, 2 or 3 to select the SPI peripheral. + * @param SPI_Direction: specifies the data transfer direction in bi-directional mode. + * This parameter can be one of the following values: + * @arg SPI_Direction_Tx: Selects Tx transmission direction + * @arg SPI_Direction_Rx: Selects Rx receive direction + * @retval None + */ +void SPI_BiDirectionalLineConfig(SPI_TypeDef* SPIx, uint16_t SPI_Direction) +{ + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + assert_param(IS_SPI_DIRECTION(SPI_Direction)); + if (SPI_Direction == SPI_Direction_Tx) + { + /* Set the Tx only mode */ + SPIx->CR1 |= SPI_Direction_Tx; + } + else + { + /* Set the Rx only mode */ + SPIx->CR1 &= SPI_Direction_Rx; + } +} + +/** + * @brief Checks whether the specified SPI/I2S flag is set or not. + * @param SPIx: where x can be + * - 1, 2 or 3 in SPI mode + * - 2 or 3 in I2S mode + * @param SPI_I2S_FLAG: specifies the SPI/I2S flag to check. + * This parameter can be one of the following values: + * @arg SPI_I2S_FLAG_TXE: Transmit buffer empty flag. + * @arg SPI_I2S_FLAG_RXNE: Receive buffer not empty flag. + * @arg SPI_I2S_FLAG_BSY: Busy flag. + * @arg SPI_I2S_FLAG_OVR: Overrun flag. + * @arg SPI_FLAG_MODF: Mode Fault flag. + * @arg SPI_FLAG_CRCERR: CRC Error flag. + * @arg I2S_FLAG_UDR: Underrun Error flag. + * @arg I2S_FLAG_CHSIDE: Channel Side flag. + * @retval The new state of SPI_I2S_FLAG (SET or RESET). + */ +FlagStatus SPI_I2S_GetFlagStatus(SPI_TypeDef* SPIx, uint16_t SPI_I2S_FLAG) +{ + FlagStatus bitstatus = RESET; + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + assert_param(IS_SPI_I2S_GET_FLAG(SPI_I2S_FLAG)); + /* Check the status of the specified SPI/I2S flag */ + if ((SPIx->SR & SPI_I2S_FLAG) != (uint16_t)RESET) + { + /* SPI_I2S_FLAG is set */ + bitstatus = SET; + } + else + { + /* SPI_I2S_FLAG is reset */ + bitstatus = RESET; + } + /* Return the SPI_I2S_FLAG status */ + return bitstatus; +} + +/** + * @brief Clears the SPIx CRC Error (CRCERR) flag. + * @param SPIx: where x can be + * - 1, 2 or 3 in SPI mode + * @param SPI_I2S_FLAG: specifies the SPI flag to clear. + * This function clears only CRCERR flag. + * @note + * - OVR (OverRun error) flag is cleared by software sequence: a read + * operation to SPI_DR register (SPI_I2S_ReceiveData()) followed by a read + * operation to SPI_SR register (SPI_I2S_GetFlagStatus()). + * - UDR (UnderRun error) flag is cleared by a read operation to + * SPI_SR register (SPI_I2S_GetFlagStatus()). + * - MODF (Mode Fault) flag is cleared by software sequence: a read/write + * operation to SPI_SR register (SPI_I2S_GetFlagStatus()) followed by a + * write operation to SPI_CR1 register (SPI_Cmd() to enable the SPI). + * @retval None + */ +void SPI_I2S_ClearFlag(SPI_TypeDef* SPIx, uint16_t SPI_I2S_FLAG) +{ + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + assert_param(IS_SPI_I2S_CLEAR_FLAG(SPI_I2S_FLAG)); + + /* Clear the selected SPI CRC Error (CRCERR) flag */ + SPIx->SR = (uint16_t)~SPI_I2S_FLAG; +} + +/** + * @brief Checks whether the specified SPI/I2S interrupt has occurred or not. + * @param SPIx: where x can be + * - 1, 2 or 3 in SPI mode + * - 2 or 3 in I2S mode + * @param SPI_I2S_IT: specifies the SPI/I2S interrupt source to check. + * This parameter can be one of the following values: + * @arg SPI_I2S_IT_TXE: Transmit buffer empty interrupt. + * @arg SPI_I2S_IT_RXNE: Receive buffer not empty interrupt. + * @arg SPI_I2S_IT_OVR: Overrun interrupt. + * @arg SPI_IT_MODF: Mode Fault interrupt. + * @arg SPI_IT_CRCERR: CRC Error interrupt. + * @arg I2S_IT_UDR: Underrun Error interrupt. + * @retval The new state of SPI_I2S_IT (SET or RESET). + */ +ITStatus SPI_I2S_GetITStatus(SPI_TypeDef* SPIx, uint8_t SPI_I2S_IT) +{ + ITStatus bitstatus = RESET; + uint16_t itpos = 0, itmask = 0, enablestatus = 0; + + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + assert_param(IS_SPI_I2S_GET_IT(SPI_I2S_IT)); + + /* Get the SPI/I2S IT index */ + itpos = 0x01 << (SPI_I2S_IT & 0x0F); + + /* Get the SPI/I2S IT mask */ + itmask = SPI_I2S_IT >> 4; + + /* Set the IT mask */ + itmask = 0x01 << itmask; + + /* Get the SPI_I2S_IT enable bit status */ + enablestatus = (SPIx->CR2 & itmask) ; + + /* Check the status of the specified SPI/I2S interrupt */ + if (((SPIx->SR & itpos) != (uint16_t)RESET) && enablestatus) + { + /* SPI_I2S_IT is set */ + bitstatus = SET; + } + else + { + /* SPI_I2S_IT is reset */ + bitstatus = RESET; + } + /* Return the SPI_I2S_IT status */ + return bitstatus; +} + +/** + * @brief Clears the SPIx CRC Error (CRCERR) interrupt pending bit. + * @param SPIx: where x can be + * - 1, 2 or 3 in SPI mode + * @param SPI_I2S_IT: specifies the SPI interrupt pending bit to clear. + * This function clears only CRCERR interrupt pending bit. + * @note + * - OVR (OverRun Error) interrupt pending bit is cleared by software + * sequence: a read operation to SPI_DR register (SPI_I2S_ReceiveData()) + * followed by a read operation to SPI_SR register (SPI_I2S_GetITStatus()). + * - UDR (UnderRun Error) interrupt pending bit is cleared by a read + * operation to SPI_SR register (SPI_I2S_GetITStatus()). + * - MODF (Mode Fault) interrupt pending bit is cleared by software sequence: + * a read/write operation to SPI_SR register (SPI_I2S_GetITStatus()) + * followed by a write operation to SPI_CR1 register (SPI_Cmd() to enable + * the SPI). + * @retval None + */ +void SPI_I2S_ClearITPendingBit(SPI_TypeDef* SPIx, uint8_t SPI_I2S_IT) +{ + uint16_t itpos = 0; + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + assert_param(IS_SPI_I2S_CLEAR_IT(SPI_I2S_IT)); + + /* Get the SPI IT index */ + itpos = 0x01 << (SPI_I2S_IT & 0x0F); + + /* Clear the selected SPI CRC Error (CRCERR) interrupt pending bit */ + SPIx->SR = (uint16_t)~itpos; +} +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_tim.c b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_tim.c new file mode 100644 index 0000000..bfb4dd1 --- /dev/null +++ b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_tim.c @@ -0,0 +1,2890 @@ +/** + ****************************************************************************** + * @file stm32f10x_tim.c + * @author MCD Application Team + * @version V3.5.0 + * @date 11-March-2011 + * @brief This file provides all the TIM firmware functions. + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

    © COPYRIGHT 2011 STMicroelectronics

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

    © COPYRIGHT 2011 STMicroelectronics

    + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f10x_usart.h" +#include "stm32f10x_rcc.h" + +/** @addtogroup STM32F10x_StdPeriph_Driver + * @{ + */ + +/** @defgroup USART + * @brief USART driver modules + * @{ + */ + +/** @defgroup USART_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @defgroup USART_Private_Defines + * @{ + */ + +#define CR1_UE_Set ((uint16_t)0x2000) /*!< USART Enable Mask */ +#define CR1_UE_Reset ((uint16_t)0xDFFF) /*!< USART Disable Mask */ + +#define CR1_WAKE_Mask ((uint16_t)0xF7FF) /*!< USART WakeUp Method Mask */ + +#define CR1_RWU_Set ((uint16_t)0x0002) /*!< USART mute mode Enable Mask */ +#define CR1_RWU_Reset ((uint16_t)0xFFFD) /*!< USART mute mode Enable Mask */ +#define CR1_SBK_Set ((uint16_t)0x0001) /*!< USART Break Character send Mask */ +#define CR1_CLEAR_Mask ((uint16_t)0xE9F3) /*!< USART CR1 Mask */ +#define CR2_Address_Mask ((uint16_t)0xFFF0) /*!< USART address Mask */ + +#define CR2_LINEN_Set ((uint16_t)0x4000) /*!< USART LIN Enable Mask */ +#define CR2_LINEN_Reset ((uint16_t)0xBFFF) /*!< USART LIN Disable Mask */ + +#define CR2_LBDL_Mask ((uint16_t)0xFFDF) /*!< USART LIN Break detection Mask */ +#define CR2_STOP_CLEAR_Mask ((uint16_t)0xCFFF) /*!< USART CR2 STOP Bits Mask */ +#define CR2_CLOCK_CLEAR_Mask ((uint16_t)0xF0FF) /*!< USART CR2 Clock Mask */ + +#define CR3_SCEN_Set ((uint16_t)0x0020) /*!< USART SC Enable Mask */ +#define CR3_SCEN_Reset ((uint16_t)0xFFDF) /*!< USART SC Disable Mask */ + +#define CR3_NACK_Set ((uint16_t)0x0010) /*!< USART SC NACK Enable Mask */ +#define CR3_NACK_Reset ((uint16_t)0xFFEF) /*!< USART SC NACK Disable Mask */ + +#define CR3_HDSEL_Set ((uint16_t)0x0008) /*!< USART Half-Duplex Enable Mask */ +#define CR3_HDSEL_Reset ((uint16_t)0xFFF7) /*!< USART Half-Duplex Disable Mask */ + +#define CR3_IRLP_Mask ((uint16_t)0xFFFB) /*!< USART IrDA LowPower mode Mask */ +#define CR3_CLEAR_Mask ((uint16_t)0xFCFF) /*!< USART CR3 Mask */ + +#define CR3_IREN_Set ((uint16_t)0x0002) /*!< USART IrDA Enable Mask */ +#define CR3_IREN_Reset ((uint16_t)0xFFFD) /*!< USART IrDA Disable Mask */ +#define GTPR_LSB_Mask ((uint16_t)0x00FF) /*!< Guard Time Register LSB Mask */ +#define GTPR_MSB_Mask ((uint16_t)0xFF00) /*!< Guard Time Register MSB Mask */ +#define IT_Mask ((uint16_t)0x001F) /*!< USART Interrupt Mask */ + +/* USART OverSampling-8 Mask */ +#define CR1_OVER8_Set ((u16)0x8000) /* USART OVER8 mode Enable Mask */ +#define CR1_OVER8_Reset ((u16)0x7FFF) /* USART OVER8 mode Disable Mask */ + +/* USART One Bit Sampling Mask */ +#define CR3_ONEBITE_Set ((u16)0x0800) /* USART ONEBITE mode Enable Mask */ +#define CR3_ONEBITE_Reset ((u16)0xF7FF) /* USART ONEBITE mode Disable Mask */ + +/** + * @} + */ + +/** @defgroup USART_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup USART_Private_Variables + * @{ + */ + +/** + * @} + */ + +/** @defgroup USART_Private_FunctionPrototypes + * @{ + */ + +/** + * @} + */ + +/** @defgroup USART_Private_Functions + * @{ + */ + +/** + * @brief Deinitializes the USARTx peripheral registers to their default reset values. + * @param USARTx: Select the USART or the UART peripheral. + * This parameter can be one of the following values: + * USART1, USART2, USART3, UART4 or UART5. + * @retval None + */ +void USART_DeInit(USART_TypeDef* USARTx) +{ + /* Check the parameters */ + assert_param(IS_USART_ALL_PERIPH(USARTx)); + + if (USARTx == USART1) + { + RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, ENABLE); + RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, DISABLE); + } + else if (USARTx == USART2) + { + RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2, ENABLE); + RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2, DISABLE); + } + else if (USARTx == USART3) + { + RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3, ENABLE); + RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3, DISABLE); + } + else if (USARTx == UART4) + { + RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART4, ENABLE); + RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART4, DISABLE); + } + else + { + if (USARTx == UART5) + { + RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART5, ENABLE); + RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART5, DISABLE); + } + } +} + +/** + * @brief Initializes the USARTx peripheral according to the specified + * parameters in the USART_InitStruct . + * @param USARTx: Select the USART or the UART peripheral. + * This parameter can be one of the following values: + * USART1, USART2, USART3, UART4 or UART5. + * @param USART_InitStruct: pointer to a USART_InitTypeDef structure + * that contains the configuration information for the specified USART + * peripheral. + * @retval None + */ +void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct) +{ + uint32_t tmpreg = 0x00, apbclock = 0x00; + uint32_t integerdivider = 0x00; + uint32_t fractionaldivider = 0x00; + uint32_t usartxbase = 0; + RCC_ClocksTypeDef RCC_ClocksStatus; + /* Check the parameters */ + assert_param(IS_USART_ALL_PERIPH(USARTx)); + assert_param(IS_USART_BAUDRATE(USART_InitStruct->USART_BaudRate)); + assert_param(IS_USART_WORD_LENGTH(USART_InitStruct->USART_WordLength)); + assert_param(IS_USART_STOPBITS(USART_InitStruct->USART_StopBits)); + assert_param(IS_USART_PARITY(USART_InitStruct->USART_Parity)); + assert_param(IS_USART_MODE(USART_InitStruct->USART_Mode)); + assert_param(IS_USART_HARDWARE_FLOW_CONTROL(USART_InitStruct->USART_HardwareFlowControl)); + /* The hardware flow control is available only for USART1, USART2 and USART3 */ + if (USART_InitStruct->USART_HardwareFlowControl != USART_HardwareFlowControl_None) + { + assert_param(IS_USART_123_PERIPH(USARTx)); + } + + usartxbase = (uint32_t)USARTx; + +/*---------------------------- USART CR2 Configuration -----------------------*/ + tmpreg = USARTx->CR2; + /* Clear STOP[13:12] bits */ + tmpreg &= CR2_STOP_CLEAR_Mask; + /* Configure the USART Stop Bits, Clock, CPOL, CPHA and LastBit ------------*/ + /* Set STOP[13:12] bits according to USART_StopBits value */ + tmpreg |= (uint32_t)USART_InitStruct->USART_StopBits; + + /* Write to USART CR2 */ + USARTx->CR2 = (uint16_t)tmpreg; + +/*---------------------------- USART CR1 Configuration -----------------------*/ + tmpreg = USARTx->CR1; + /* Clear M, PCE, PS, TE and RE bits */ + tmpreg &= CR1_CLEAR_Mask; + /* Configure the USART Word Length, Parity and mode ----------------------- */ + /* Set the M bits according to USART_WordLength value */ + /* Set PCE and PS bits according to USART_Parity value */ + /* Set TE and RE bits according to USART_Mode value */ + tmpreg |= (uint32_t)USART_InitStruct->USART_WordLength | USART_InitStruct->USART_Parity | + USART_InitStruct->USART_Mode; + /* Write to USART CR1 */ + USARTx->CR1 = (uint16_t)tmpreg; + +/*---------------------------- USART CR3 Configuration -----------------------*/ + tmpreg = USARTx->CR3; + /* Clear CTSE and RTSE bits */ + tmpreg &= CR3_CLEAR_Mask; + /* Configure the USART HFC -------------------------------------------------*/ + /* Set CTSE and RTSE bits according to USART_HardwareFlowControl value */ + tmpreg |= USART_InitStruct->USART_HardwareFlowControl; + /* Write to USART CR3 */ + USARTx->CR3 = (uint16_t)tmpreg; + +/*---------------------------- USART BRR Configuration -----------------------*/ + /* Configure the USART Baud Rate -------------------------------------------*/ + RCC_GetClocksFreq(&RCC_ClocksStatus); + if (usartxbase == USART1_BASE) + { + apbclock = RCC_ClocksStatus.PCLK2_Frequency; + } + else + { + apbclock = RCC_ClocksStatus.PCLK1_Frequency; + } + + /* Determine the integer part */ + if ((USARTx->CR1 & CR1_OVER8_Set) != 0) + { + /* Integer part computing in case Oversampling mode is 8 Samples */ + integerdivider = ((25 * apbclock) / (2 * (USART_InitStruct->USART_BaudRate))); + } + else /* if ((USARTx->CR1 & CR1_OVER8_Set) == 0) */ + { + /* Integer part computing in case Oversampling mode is 16 Samples */ + integerdivider = ((25 * apbclock) / (4 * (USART_InitStruct->USART_BaudRate))); + } + tmpreg = (integerdivider / 100) << 4; + + /* Determine the fractional part */ + fractionaldivider = integerdivider - (100 * (tmpreg >> 4)); + + /* Implement the fractional part in the register */ + if ((USARTx->CR1 & CR1_OVER8_Set) != 0) + { + tmpreg |= ((((fractionaldivider * 8) + 50) / 100)) & ((uint8_t)0x07); + } + else /* if ((USARTx->CR1 & CR1_OVER8_Set) == 0) */ + { + tmpreg |= ((((fractionaldivider * 16) + 50) / 100)) & ((uint8_t)0x0F); + } + + /* Write to USART BRR */ + USARTx->BRR = (uint16_t)tmpreg; +} + +/** + * @brief Fills each USART_InitStruct member with its default value. + * @param USART_InitStruct: pointer to a USART_InitTypeDef structure + * which will be initialized. + * @retval None + */ +void USART_StructInit(USART_InitTypeDef* USART_InitStruct) +{ + /* USART_InitStruct members default value */ + USART_InitStruct->USART_BaudRate = 9600; + USART_InitStruct->USART_WordLength = USART_WordLength_8b; + USART_InitStruct->USART_StopBits = USART_StopBits_1; + USART_InitStruct->USART_Parity = USART_Parity_No ; + USART_InitStruct->USART_Mode = USART_Mode_Rx | USART_Mode_Tx; + USART_InitStruct->USART_HardwareFlowControl = USART_HardwareFlowControl_None; +} + +/** + * @brief Initializes the USARTx peripheral Clock according to the + * specified parameters in the USART_ClockInitStruct . + * @param USARTx: where x can be 1, 2, 3 to select the USART peripheral. + * @param USART_ClockInitStruct: pointer to a USART_ClockInitTypeDef + * structure that contains the configuration information for the specified + * USART peripheral. + * @note The Smart Card and Synchronous modes are not available for UART4 and UART5. + * @retval None + */ +void USART_ClockInit(USART_TypeDef* USARTx, USART_ClockInitTypeDef* USART_ClockInitStruct) +{ + uint32_t tmpreg = 0x00; + /* Check the parameters */ + assert_param(IS_USART_123_PERIPH(USARTx)); + assert_param(IS_USART_CLOCK(USART_ClockInitStruct->USART_Clock)); + assert_param(IS_USART_CPOL(USART_ClockInitStruct->USART_CPOL)); + assert_param(IS_USART_CPHA(USART_ClockInitStruct->USART_CPHA)); + assert_param(IS_USART_LASTBIT(USART_ClockInitStruct->USART_LastBit)); + +/*---------------------------- USART CR2 Configuration -----------------------*/ + tmpreg = USARTx->CR2; + /* Clear CLKEN, CPOL, CPHA and LBCL bits */ + tmpreg &= CR2_CLOCK_CLEAR_Mask; + /* Configure the USART Clock, CPOL, CPHA and LastBit ------------*/ + /* Set CLKEN bit according to USART_Clock value */ + /* Set CPOL bit according to USART_CPOL value */ + /* Set CPHA bit according to USART_CPHA value */ + /* Set LBCL bit according to USART_LastBit value */ + tmpreg |= (uint32_t)USART_ClockInitStruct->USART_Clock | USART_ClockInitStruct->USART_CPOL | + USART_ClockInitStruct->USART_CPHA | USART_ClockInitStruct->USART_LastBit; + /* Write to USART CR2 */ + USARTx->CR2 = (uint16_t)tmpreg; +} + +/** + * @brief Fills each USART_ClockInitStruct member with its default value. + * @param USART_ClockInitStruct: pointer to a USART_ClockInitTypeDef + * structure which will be initialized. + * @retval None + */ +void USART_ClockStructInit(USART_ClockInitTypeDef* USART_ClockInitStruct) +{ + /* USART_ClockInitStruct members default value */ + USART_ClockInitStruct->USART_Clock = USART_Clock_Disable; + USART_ClockInitStruct->USART_CPOL = USART_CPOL_Low; + USART_ClockInitStruct->USART_CPHA = USART_CPHA_1Edge; + USART_ClockInitStruct->USART_LastBit = USART_LastBit_Disable; +} + +/** + * @brief Enables or disables the specified USART peripheral. + * @param USARTx: Select the USART or the UART peripheral. + * This parameter can be one of the following values: + * USART1, USART2, USART3, UART4 or UART5. + * @param NewState: new state of the USARTx peripheral. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void USART_Cmd(USART_TypeDef* USARTx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_USART_ALL_PERIPH(USARTx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the selected USART by setting the UE bit in the CR1 register */ + USARTx->CR1 |= CR1_UE_Set; + } + else + { + /* Disable the selected USART by clearing the UE bit in the CR1 register */ + USARTx->CR1 &= CR1_UE_Reset; + } +} + +/** + * @brief Enables or disables the specified USART interrupts. + * @param USARTx: Select the USART or the UART peripheral. + * This parameter can be one of the following values: + * USART1, USART2, USART3, UART4 or UART5. + * @param USART_IT: specifies the USART interrupt sources to be enabled or disabled. + * This parameter can be one of the following values: + * @arg USART_IT_CTS: CTS change interrupt (not available for UART4 and UART5) + * @arg USART_IT_LBD: LIN Break detection interrupt + * @arg USART_IT_TXE: Transmit Data Register empty interrupt + * @arg USART_IT_TC: Transmission complete interrupt + * @arg USART_IT_RXNE: Receive Data register not empty interrupt + * @arg USART_IT_IDLE: Idle line detection interrupt + * @arg USART_IT_PE: Parity Error interrupt + * @arg USART_IT_ERR: Error interrupt(Frame error, noise error, overrun error) + * @param NewState: new state of the specified USARTx interrupts. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, FunctionalState NewState) +{ + uint32_t usartreg = 0x00, itpos = 0x00, itmask = 0x00; + uint32_t usartxbase = 0x00; + /* Check the parameters */ + assert_param(IS_USART_ALL_PERIPH(USARTx)); + assert_param(IS_USART_CONFIG_IT(USART_IT)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + /* The CTS interrupt is not available for UART4 and UART5 */ + if (USART_IT == USART_IT_CTS) + { + assert_param(IS_USART_123_PERIPH(USARTx)); + } + + usartxbase = (uint32_t)USARTx; + + /* Get the USART register index */ + usartreg = (((uint8_t)USART_IT) >> 0x05); + + /* Get the interrupt position */ + itpos = USART_IT & IT_Mask; + itmask = (((uint32_t)0x01) << itpos); + + if (usartreg == 0x01) /* The IT is in CR1 register */ + { + usartxbase += 0x0C; + } + else if (usartreg == 0x02) /* The IT is in CR2 register */ + { + usartxbase += 0x10; + } + else /* The IT is in CR3 register */ + { + usartxbase += 0x14; + } + if (NewState != DISABLE) + { + *(__IO uint32_t*)usartxbase |= itmask; + } + else + { + *(__IO uint32_t*)usartxbase &= ~itmask; + } +} + +/** + * @brief Enables or disables the USARTs DMA interface. + * @param USARTx: Select the USART or the UART peripheral. + * This parameter can be one of the following values: + * USART1, USART2, USART3, UART4 or UART5. + * @param USART_DMAReq: specifies the DMA request. + * This parameter can be any combination of the following values: + * @arg USART_DMAReq_Tx: USART DMA transmit request + * @arg USART_DMAReq_Rx: USART DMA receive request + * @param NewState: new state of the DMA Request sources. + * This parameter can be: ENABLE or DISABLE. + * @note The DMA mode is not available for UART5 except in the STM32 + * High density value line devices(STM32F10X_HD_VL). + * @retval None + */ +void USART_DMACmd(USART_TypeDef* USARTx, uint16_t USART_DMAReq, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_USART_ALL_PERIPH(USARTx)); + assert_param(IS_USART_DMAREQ(USART_DMAReq)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the DMA transfer for selected requests by setting the DMAT and/or + DMAR bits in the USART CR3 register */ + USARTx->CR3 |= USART_DMAReq; + } + else + { + /* Disable the DMA transfer for selected requests by clearing the DMAT and/or + DMAR bits in the USART CR3 register */ + USARTx->CR3 &= (uint16_t)~USART_DMAReq; + } +} + +/** + * @brief Sets the address of the USART node. + * @param USARTx: Select the USART or the UART peripheral. + * This parameter can be one of the following values: + * USART1, USART2, USART3, UART4 or UART5. + * @param USART_Address: Indicates the address of the USART node. + * @retval None + */ +void USART_SetAddress(USART_TypeDef* USARTx, uint8_t USART_Address) +{ + /* Check the parameters */ + assert_param(IS_USART_ALL_PERIPH(USARTx)); + assert_param(IS_USART_ADDRESS(USART_Address)); + + /* Clear the USART address */ + USARTx->CR2 &= CR2_Address_Mask; + /* Set the USART address node */ + USARTx->CR2 |= USART_Address; +} + +/** + * @brief Selects the USART WakeUp method. + * @param USARTx: Select the USART or the UART peripheral. + * This parameter can be one of the following values: + * USART1, USART2, USART3, UART4 or UART5. + * @param USART_WakeUp: specifies the USART wakeup method. + * This parameter can be one of the following values: + * @arg USART_WakeUp_IdleLine: WakeUp by an idle line detection + * @arg USART_WakeUp_AddressMark: WakeUp by an address mark + * @retval None + */ +void USART_WakeUpConfig(USART_TypeDef* USARTx, uint16_t USART_WakeUp) +{ + /* Check the parameters */ + assert_param(IS_USART_ALL_PERIPH(USARTx)); + assert_param(IS_USART_WAKEUP(USART_WakeUp)); + + USARTx->CR1 &= CR1_WAKE_Mask; + USARTx->CR1 |= USART_WakeUp; +} + +/** + * @brief Determines if the USART is in mute mode or not. + * @param USARTx: Select the USART or the UART peripheral. + * This parameter can be one of the following values: + * USART1, USART2, USART3, UART4 or UART5. + * @param NewState: new state of the USART mute mode. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void USART_ReceiverWakeUpCmd(USART_TypeDef* USARTx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_USART_ALL_PERIPH(USARTx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the USART mute mode by setting the RWU bit in the CR1 register */ + USARTx->CR1 |= CR1_RWU_Set; + } + else + { + /* Disable the USART mute mode by clearing the RWU bit in the CR1 register */ + USARTx->CR1 &= CR1_RWU_Reset; + } +} + +/** + * @brief Sets the USART LIN Break detection length. + * @param USARTx: Select the USART or the UART peripheral. + * This parameter can be one of the following values: + * USART1, USART2, USART3, UART4 or UART5. + * @param USART_LINBreakDetectLength: specifies the LIN break detection length. + * This parameter can be one of the following values: + * @arg USART_LINBreakDetectLength_10b: 10-bit break detection + * @arg USART_LINBreakDetectLength_11b: 11-bit break detection + * @retval None + */ +void USART_LINBreakDetectLengthConfig(USART_TypeDef* USARTx, uint16_t USART_LINBreakDetectLength) +{ + /* Check the parameters */ + assert_param(IS_USART_ALL_PERIPH(USARTx)); + assert_param(IS_USART_LIN_BREAK_DETECT_LENGTH(USART_LINBreakDetectLength)); + + USARTx->CR2 &= CR2_LBDL_Mask; + USARTx->CR2 |= USART_LINBreakDetectLength; +} + +/** + * @brief Enables or disables the USARTs LIN mode. + * @param USARTx: Select the USART or the UART peripheral. + * This parameter can be one of the following values: + * USART1, USART2, USART3, UART4 or UART5. + * @param NewState: new state of the USART LIN mode. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void USART_LINCmd(USART_TypeDef* USARTx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_USART_ALL_PERIPH(USARTx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the LIN mode by setting the LINEN bit in the CR2 register */ + USARTx->CR2 |= CR2_LINEN_Set; + } + else + { + /* Disable the LIN mode by clearing the LINEN bit in the CR2 register */ + USARTx->CR2 &= CR2_LINEN_Reset; + } +} + +/** + * @brief Transmits single data through the USARTx peripheral. + * @param USARTx: Select the USART or the UART peripheral. + * This parameter can be one of the following values: + * USART1, USART2, USART3, UART4 or UART5. + * @param Data: the data to transmit. + * @retval None + */ +void USART_SendData(USART_TypeDef* USARTx, uint16_t Data) +{ + /* Check the parameters */ + assert_param(IS_USART_ALL_PERIPH(USARTx)); + assert_param(IS_USART_DATA(Data)); + + /* Transmit Data */ + USARTx->DR = (Data & (uint16_t)0x01FF); +} + +/** + * @brief Returns the most recent received data by the USARTx peripheral. + * @param USARTx: Select the USART or the UART peripheral. + * This parameter can be one of the following values: + * USART1, USART2, USART3, UART4 or UART5. + * @retval The received data. + */ +uint16_t USART_ReceiveData(USART_TypeDef* USARTx) +{ + /* Check the parameters */ + assert_param(IS_USART_ALL_PERIPH(USARTx)); + + /* Receive Data */ + return (uint16_t)(USARTx->DR & (uint16_t)0x01FF); +} + +/** + * @brief Transmits break characters. + * @param USARTx: Select the USART or the UART peripheral. + * This parameter can be one of the following values: + * USART1, USART2, USART3, UART4 or UART5. + * @retval None + */ +void USART_SendBreak(USART_TypeDef* USARTx) +{ + /* Check the parameters */ + assert_param(IS_USART_ALL_PERIPH(USARTx)); + + /* Send break characters */ + USARTx->CR1 |= CR1_SBK_Set; +} + +/** + * @brief Sets the specified USART guard time. + * @param USARTx: where x can be 1, 2 or 3 to select the USART peripheral. + * @param USART_GuardTime: specifies the guard time. + * @note The guard time bits are not available for UART4 and UART5. + * @retval None + */ +void USART_SetGuardTime(USART_TypeDef* USARTx, uint8_t USART_GuardTime) +{ + /* Check the parameters */ + assert_param(IS_USART_123_PERIPH(USARTx)); + + /* Clear the USART Guard time */ + USARTx->GTPR &= GTPR_LSB_Mask; + /* Set the USART guard time */ + USARTx->GTPR |= (uint16_t)((uint16_t)USART_GuardTime << 0x08); +} + +/** + * @brief Sets the system clock prescaler. + * @param USARTx: Select the USART or the UART peripheral. + * This parameter can be one of the following values: + * USART1, USART2, USART3, UART4 or UART5. + * @param USART_Prescaler: specifies the prescaler clock. + * @note The function is used for IrDA mode with UART4 and UART5. + * @retval None + */ +void USART_SetPrescaler(USART_TypeDef* USARTx, uint8_t USART_Prescaler) +{ + /* Check the parameters */ + assert_param(IS_USART_ALL_PERIPH(USARTx)); + + /* Clear the USART prescaler */ + USARTx->GTPR &= GTPR_MSB_Mask; + /* Set the USART prescaler */ + USARTx->GTPR |= USART_Prescaler; +} + +/** + * @brief Enables or disables the USARTs Smart Card mode. + * @param USARTx: where x can be 1, 2 or 3 to select the USART peripheral. + * @param NewState: new state of the Smart Card mode. + * This parameter can be: ENABLE or DISABLE. + * @note The Smart Card mode is not available for UART4 and UART5. + * @retval None + */ +void USART_SmartCardCmd(USART_TypeDef* USARTx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_USART_123_PERIPH(USARTx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the SC mode by setting the SCEN bit in the CR3 register */ + USARTx->CR3 |= CR3_SCEN_Set; + } + else + { + /* Disable the SC mode by clearing the SCEN bit in the CR3 register */ + USARTx->CR3 &= CR3_SCEN_Reset; + } +} + +/** + * @brief Enables or disables NACK transmission. + * @param USARTx: where x can be 1, 2 or 3 to select the USART peripheral. + * @param NewState: new state of the NACK transmission. + * This parameter can be: ENABLE or DISABLE. + * @note The Smart Card mode is not available for UART4 and UART5. + * @retval None + */ +void USART_SmartCardNACKCmd(USART_TypeDef* USARTx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_USART_123_PERIPH(USARTx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the NACK transmission by setting the NACK bit in the CR3 register */ + USARTx->CR3 |= CR3_NACK_Set; + } + else + { + /* Disable the NACK transmission by clearing the NACK bit in the CR3 register */ + USARTx->CR3 &= CR3_NACK_Reset; + } +} + +/** + * @brief Enables or disables the USARTs Half Duplex communication. + * @param USARTx: Select the USART or the UART peripheral. + * This parameter can be one of the following values: + * USART1, USART2, USART3, UART4 or UART5. + * @param NewState: new state of the USART Communication. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void USART_HalfDuplexCmd(USART_TypeDef* USARTx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_USART_ALL_PERIPH(USARTx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the Half-Duplex mode by setting the HDSEL bit in the CR3 register */ + USARTx->CR3 |= CR3_HDSEL_Set; + } + else + { + /* Disable the Half-Duplex mode by clearing the HDSEL bit in the CR3 register */ + USARTx->CR3 &= CR3_HDSEL_Reset; + } +} + + +/** + * @brief Enables or disables the USART's 8x oversampling mode. + * @param USARTx: Select the USART or the UART peripheral. + * This parameter can be one of the following values: + * USART1, USART2, USART3, UART4 or UART5. + * @param NewState: new state of the USART one bit sampling method. + * This parameter can be: ENABLE or DISABLE. + * @note + * This function has to be called before calling USART_Init() + * function in order to have correct baudrate Divider value. + * @retval None + */ +void USART_OverSampling8Cmd(USART_TypeDef* USARTx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_USART_ALL_PERIPH(USARTx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the 8x Oversampling mode by setting the OVER8 bit in the CR1 register */ + USARTx->CR1 |= CR1_OVER8_Set; + } + else + { + /* Disable the 8x Oversampling mode by clearing the OVER8 bit in the CR1 register */ + USARTx->CR1 &= CR1_OVER8_Reset; + } +} + +/** + * @brief Enables or disables the USART's one bit sampling method. + * @param USARTx: Select the USART or the UART peripheral. + * This parameter can be one of the following values: + * USART1, USART2, USART3, UART4 or UART5. + * @param NewState: new state of the USART one bit sampling method. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void USART_OneBitMethodCmd(USART_TypeDef* USARTx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_USART_ALL_PERIPH(USARTx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the one bit method by setting the ONEBITE bit in the CR3 register */ + USARTx->CR3 |= CR3_ONEBITE_Set; + } + else + { + /* Disable tthe one bit method by clearing the ONEBITE bit in the CR3 register */ + USARTx->CR3 &= CR3_ONEBITE_Reset; + } +} + +/** + * @brief Configures the USART's IrDA interface. + * @param USARTx: Select the USART or the UART peripheral. + * This parameter can be one of the following values: + * USART1, USART2, USART3, UART4 or UART5. + * @param USART_IrDAMode: specifies the IrDA mode. + * This parameter can be one of the following values: + * @arg USART_IrDAMode_LowPower + * @arg USART_IrDAMode_Normal + * @retval None + */ +void USART_IrDAConfig(USART_TypeDef* USARTx, uint16_t USART_IrDAMode) +{ + /* Check the parameters */ + assert_param(IS_USART_ALL_PERIPH(USARTx)); + assert_param(IS_USART_IRDA_MODE(USART_IrDAMode)); + + USARTx->CR3 &= CR3_IRLP_Mask; + USARTx->CR3 |= USART_IrDAMode; +} + +/** + * @brief Enables or disables the USART's IrDA interface. + * @param USARTx: Select the USART or the UART peripheral. + * This parameter can be one of the following values: + * USART1, USART2, USART3, UART4 or UART5. + * @param NewState: new state of the IrDA mode. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void USART_IrDACmd(USART_TypeDef* USARTx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_USART_ALL_PERIPH(USARTx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the IrDA mode by setting the IREN bit in the CR3 register */ + USARTx->CR3 |= CR3_IREN_Set; + } + else + { + /* Disable the IrDA mode by clearing the IREN bit in the CR3 register */ + USARTx->CR3 &= CR3_IREN_Reset; + } +} + +/** + * @brief Checks whether the specified USART flag is set or not. + * @param USARTx: Select the USART or the UART peripheral. + * This parameter can be one of the following values: + * USART1, USART2, USART3, UART4 or UART5. + * @param USART_FLAG: specifies the flag to check. + * This parameter can be one of the following values: + * @arg USART_FLAG_CTS: CTS Change flag (not available for UART4 and UART5) + * @arg USART_FLAG_LBD: LIN Break detection flag + * @arg USART_FLAG_TXE: Transmit data register empty flag + * @arg USART_FLAG_TC: Transmission Complete flag + * @arg USART_FLAG_RXNE: Receive data register not empty flag + * @arg USART_FLAG_IDLE: Idle Line detection flag + * @arg USART_FLAG_ORE: OverRun Error flag + * @arg USART_FLAG_NE: Noise Error flag + * @arg USART_FLAG_FE: Framing Error flag + * @arg USART_FLAG_PE: Parity Error flag + * @retval The new state of USART_FLAG (SET or RESET). + */ +FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG) +{ + FlagStatus bitstatus = RESET; + /* Check the parameters */ + assert_param(IS_USART_ALL_PERIPH(USARTx)); + assert_param(IS_USART_FLAG(USART_FLAG)); + /* The CTS flag is not available for UART4 and UART5 */ + if (USART_FLAG == USART_FLAG_CTS) + { + assert_param(IS_USART_123_PERIPH(USARTx)); + } + + if ((USARTx->SR & USART_FLAG) != (uint16_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + return bitstatus; +} + +/** + * @brief Clears the USARTx's pending flags. + * @param USARTx: Select the USART or the UART peripheral. + * This parameter can be one of the following values: + * USART1, USART2, USART3, UART4 or UART5. + * @param USART_FLAG: specifies the flag to clear. + * This parameter can be any combination of the following values: + * @arg USART_FLAG_CTS: CTS Change flag (not available for UART4 and UART5). + * @arg USART_FLAG_LBD: LIN Break detection flag. + * @arg USART_FLAG_TC: Transmission Complete flag. + * @arg USART_FLAG_RXNE: Receive data register not empty flag. + * + * @note + * - PE (Parity error), FE (Framing error), NE (Noise error), ORE (OverRun + * error) and IDLE (Idle line detected) flags are cleared by software + * sequence: a read operation to USART_SR register (USART_GetFlagStatus()) + * followed by a read operation to USART_DR register (USART_ReceiveData()). + * - RXNE flag can be also cleared by a read to the USART_DR register + * (USART_ReceiveData()). + * - TC flag can be also cleared by software sequence: a read operation to + * USART_SR register (USART_GetFlagStatus()) followed by a write operation + * to USART_DR register (USART_SendData()). + * - TXE flag is cleared only by a write to the USART_DR register + * (USART_SendData()). + * @retval None + */ +void USART_ClearFlag(USART_TypeDef* USARTx, uint16_t USART_FLAG) +{ + /* Check the parameters */ + assert_param(IS_USART_ALL_PERIPH(USARTx)); + assert_param(IS_USART_CLEAR_FLAG(USART_FLAG)); + /* The CTS flag is not available for UART4 and UART5 */ + if ((USART_FLAG & USART_FLAG_CTS) == USART_FLAG_CTS) + { + assert_param(IS_USART_123_PERIPH(USARTx)); + } + + USARTx->SR = (uint16_t)~USART_FLAG; +} + +/** + * @brief Checks whether the specified USART interrupt has occurred or not. + * @param USARTx: Select the USART or the UART peripheral. + * This parameter can be one of the following values: + * USART1, USART2, USART3, UART4 or UART5. + * @param USART_IT: specifies the USART interrupt source to check. + * This parameter can be one of the following values: + * @arg USART_IT_CTS: CTS change interrupt (not available for UART4 and UART5) + * @arg USART_IT_LBD: LIN Break detection interrupt + * @arg USART_IT_TXE: Tansmit Data Register empty interrupt + * @arg USART_IT_TC: Transmission complete interrupt + * @arg USART_IT_RXNE: Receive Data register not empty interrupt + * @arg USART_IT_IDLE: Idle line detection interrupt + * @arg USART_IT_ORE: OverRun Error interrupt + * @arg USART_IT_NE: Noise Error interrupt + * @arg USART_IT_FE: Framing Error interrupt + * @arg USART_IT_PE: Parity Error interrupt + * @retval The new state of USART_IT (SET or RESET). + */ +ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT) +{ + uint32_t bitpos = 0x00, itmask = 0x00, usartreg = 0x00; + ITStatus bitstatus = RESET; + /* Check the parameters */ + assert_param(IS_USART_ALL_PERIPH(USARTx)); + assert_param(IS_USART_GET_IT(USART_IT)); + /* The CTS interrupt is not available for UART4 and UART5 */ + if (USART_IT == USART_IT_CTS) + { + assert_param(IS_USART_123_PERIPH(USARTx)); + } + + /* Get the USART register index */ + usartreg = (((uint8_t)USART_IT) >> 0x05); + /* Get the interrupt position */ + itmask = USART_IT & IT_Mask; + itmask = (uint32_t)0x01 << itmask; + + if (usartreg == 0x01) /* The IT is in CR1 register */ + { + itmask &= USARTx->CR1; + } + else if (usartreg == 0x02) /* The IT is in CR2 register */ + { + itmask &= USARTx->CR2; + } + else /* The IT is in CR3 register */ + { + itmask &= USARTx->CR3; + } + + bitpos = USART_IT >> 0x08; + bitpos = (uint32_t)0x01 << bitpos; + bitpos &= USARTx->SR; + if ((itmask != (uint16_t)RESET)&&(bitpos != (uint16_t)RESET)) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + + return bitstatus; +} + +/** + * @brief Clears the USARTx's interrupt pending bits. + * @param USARTx: Select the USART or the UART peripheral. + * This parameter can be one of the following values: + * USART1, USART2, USART3, UART4 or UART5. + * @param USART_IT: specifies the interrupt pending bit to clear. + * This parameter can be one of the following values: + * @arg USART_IT_CTS: CTS change interrupt (not available for UART4 and UART5) + * @arg USART_IT_LBD: LIN Break detection interrupt + * @arg USART_IT_TC: Transmission complete interrupt. + * @arg USART_IT_RXNE: Receive Data register not empty interrupt. + * + * @note + * - PE (Parity error), FE (Framing error), NE (Noise error), ORE (OverRun + * error) and IDLE (Idle line detected) pending bits are cleared by + * software sequence: a read operation to USART_SR register + * (USART_GetITStatus()) followed by a read operation to USART_DR register + * (USART_ReceiveData()). + * - RXNE pending bit can be also cleared by a read to the USART_DR register + * (USART_ReceiveData()). + * - TC pending bit can be also cleared by software sequence: a read + * operation to USART_SR register (USART_GetITStatus()) followed by a write + * operation to USART_DR register (USART_SendData()). + * - TXE pending bit is cleared only by a write to the USART_DR register + * (USART_SendData()). + * @retval None + */ +void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT) +{ + uint16_t bitpos = 0x00, itmask = 0x00; + /* Check the parameters */ + assert_param(IS_USART_ALL_PERIPH(USARTx)); + assert_param(IS_USART_CLEAR_IT(USART_IT)); + /* The CTS interrupt is not available for UART4 and UART5 */ + if (USART_IT == USART_IT_CTS) + { + assert_param(IS_USART_123_PERIPH(USARTx)); + } + + bitpos = USART_IT >> 0x08; + itmask = ((uint16_t)0x01 << (uint16_t)bitpos); + USARTx->SR = (uint16_t)~itmask; +} +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_wwdg.c b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_wwdg.c new file mode 100644 index 0000000..4a901e4 --- /dev/null +++ b/boot_source/platform/Chip_peripheral_dev/STM32F10x_FWLib/src/stm32f10x_wwdg.c @@ -0,0 +1,224 @@ +/** + ****************************************************************************** + * @file stm32f10x_wwdg.c + * @author MCD Application Team + * @version V3.5.0 + * @date 11-March-2011 + * @brief This file provides all the WWDG firmware functions. + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

    © COPYRIGHT 2011 STMicroelectronics

    + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f10x_wwdg.h" +#include "stm32f10x_rcc.h" + +/** @addtogroup STM32F10x_StdPeriph_Driver + * @{ + */ + +/** @defgroup WWDG + * @brief WWDG driver modules + * @{ + */ + +/** @defgroup WWDG_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @defgroup WWDG_Private_Defines + * @{ + */ + +/* ----------- WWDG registers bit address in the alias region ----------- */ +#define WWDG_OFFSET (WWDG_BASE - PERIPH_BASE) + +/* Alias word address of EWI bit */ +#define CFR_OFFSET (WWDG_OFFSET + 0x04) +#define EWI_BitNumber 0x09 +#define CFR_EWI_BB (PERIPH_BB_BASE + (CFR_OFFSET * 32) + (EWI_BitNumber * 4)) + +/* --------------------- WWDG registers bit mask ------------------------ */ + +/* CR register bit mask */ +#define CR_WDGA_Set ((uint32_t)0x00000080) + +/* CFR register bit mask */ +#define CFR_WDGTB_Mask ((uint32_t)0xFFFFFE7F) +#define CFR_W_Mask ((uint32_t)0xFFFFFF80) +#define BIT_Mask ((uint8_t)0x7F) + +/** + * @} + */ + +/** @defgroup WWDG_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup WWDG_Private_Variables + * @{ + */ + +/** + * @} + */ + +/** @defgroup WWDG_Private_FunctionPrototypes + * @{ + */ + +/** + * @} + */ + +/** @defgroup WWDG_Private_Functions + * @{ + */ + +/** + * @brief Deinitializes the WWDG peripheral registers to their default reset values. + * @param None + * @retval None + */ +void WWDG_DeInit(void) +{ + RCC_APB1PeriphResetCmd(RCC_APB1Periph_WWDG, ENABLE); + RCC_APB1PeriphResetCmd(RCC_APB1Periph_WWDG, DISABLE); +} + +/** + * @brief Sets the WWDG Prescaler. + * @param WWDG_Prescaler: specifies the WWDG Prescaler. + * This parameter can be one of the following values: + * @arg WWDG_Prescaler_1: WWDG counter clock = (PCLK1/4096)/1 + * @arg WWDG_Prescaler_2: WWDG counter clock = (PCLK1/4096)/2 + * @arg WWDG_Prescaler_4: WWDG counter clock = (PCLK1/4096)/4 + * @arg WWDG_Prescaler_8: WWDG counter clock = (PCLK1/4096)/8 + * @retval None + */ +void WWDG_SetPrescaler(uint32_t WWDG_Prescaler) +{ + uint32_t tmpreg = 0; + /* Check the parameters */ + assert_param(IS_WWDG_PRESCALER(WWDG_Prescaler)); + /* Clear WDGTB[1:0] bits */ + tmpreg = WWDG->CFR & CFR_WDGTB_Mask; + /* Set WDGTB[1:0] bits according to WWDG_Prescaler value */ + tmpreg |= WWDG_Prescaler; + /* Store the new value */ + WWDG->CFR = tmpreg; +} + +/** + * @brief Sets the WWDG window value. + * @param WindowValue: specifies the window value to be compared to the downcounter. + * This parameter value must be lower than 0x80. + * @retval None + */ +void WWDG_SetWindowValue(uint8_t WindowValue) +{ + __IO uint32_t tmpreg = 0; + + /* Check the parameters */ + assert_param(IS_WWDG_WINDOW_VALUE(WindowValue)); + /* Clear W[6:0] bits */ + + tmpreg = WWDG->CFR & CFR_W_Mask; + + /* Set W[6:0] bits according to WindowValue value */ + tmpreg |= WindowValue & (uint32_t) BIT_Mask; + + /* Store the new value */ + WWDG->CFR = tmpreg; +} + +/** + * @brief Enables the WWDG Early Wakeup interrupt(EWI). + * @param None + * @retval None + */ +void WWDG_EnableIT(void) +{ + *(__IO uint32_t *) CFR_EWI_BB = (uint32_t)ENABLE; +} + +/** + * @brief Sets the WWDG counter value. + * @param Counter: specifies the watchdog counter value. + * This parameter must be a number between 0x40 and 0x7F. + * @retval None + */ +void WWDG_SetCounter(uint8_t Counter) +{ + /* Check the parameters */ + assert_param(IS_WWDG_COUNTER(Counter)); + /* Write to T[6:0] bits to configure the counter value, no need to do + a read-modify-write; writing a 0 to WDGA bit does nothing */ + WWDG->CR = Counter & BIT_Mask; +} + +/** + * @brief Enables WWDG and load the counter value. + * @param Counter: specifies the watchdog counter value. + * This parameter must be a number between 0x40 and 0x7F. + * @retval None + */ +void WWDG_Enable(uint8_t Counter) +{ + /* Check the parameters */ + assert_param(IS_WWDG_COUNTER(Counter)); + WWDG->CR = CR_WDGA_Set | Counter; +} + +/** + * @brief Checks whether the Early Wakeup interrupt flag is set or not. + * @param None + * @retval The new state of the Early Wakeup interrupt flag (SET or RESET) + */ +FlagStatus WWDG_GetFlagStatus(void) +{ + return (FlagStatus)(WWDG->SR); +} + +/** + * @brief Clears Early Wakeup interrupt flag. + * @param None + * @retval None + */ +void WWDG_ClearFlag(void) +{ + WWDG->SR = (uint32_t)RESET; +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/boot_source/platform/drivers/inc/24cxx.h b/boot_source/platform/drivers/inc/24cxx.h new file mode 100644 index 0000000000000000000000000000000000000000..03192583b6e1208b550c4faf4041b75c08899556 GIT binary patch literal 8192 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 X$5$&k*efI4yrCe)UT^#(4fFp1{mfl& literal 0 HcmV?d00001 diff --git a/boot_source/platform/drivers/inc/bsp_i2c_gpio.h b/boot_source/platform/drivers/inc/bsp_i2c_gpio.h new file mode 100644 index 0000000..0939659 --- /dev/null +++ b/boot_source/platform/drivers/inc/bsp_i2c_gpio.h @@ -0,0 +1,30 @@ +/* +********************************************************************************************************* +* +* ģ : I2Cģ +* ļ : bsp_i2c_gpio.h +* : V1.0 +* ˵ : ͷļ +* +* Copyright (C), 2012-2013, www.armfly.com +* +********************************************************************************************************* +*/ + +#ifndef _BSP_I2C_GPIO_H +#define _BSP_I2C_GPIO_H +#include "stm32f10x.h" +#define I2C_WR 0 /* дbit */ +#define I2C_RD 1 /* bit */ + +void bsp_InitI2C(void); +void IIC_Start(void); +void IIC_Stop(void); +void IIC_Send_Byte(uint8_t _ucByte); +u8 IIC_Read_Byte(unsigned char ack); +uint8_t IIC_Wait_Ack(void); +void IIC_Ack(void); +void IIC_NAck(void); +// u8 AD1015_Check(u8 i2cAddress); + +#endif diff --git a/boot_source/platform/drivers/inc/can.h b/boot_source/platform/drivers/inc/can.h new file mode 100644 index 0000000000000000000000000000000000000000..bd0397a2cb3e00cb53059e7e224e58c00a7b273b GIT binary patch literal 16384 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 literal 0 HcmV?d00001 diff --git a/boot_source/platform/drivers/inc/can2.h b/boot_source/platform/drivers/inc/can2.h new file mode 100644 index 0000000000000000000000000000000000000000..7f79300ac91be2340c7261437cc2c8eba521a343 GIT binary patch literal 8192 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 bLJZ?`G$nx?%Kcf`9eF%}#~1mn+N03({`c(R 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 F@jnCIbOHbX literal 0 HcmV?d00001 diff --git a/boot_source/platform/drivers/inc/led.h b/boot_source/platform/drivers/inc/led.h new file mode 100644 index 0000000000000000000000000000000000000000..dcfb8caa4efc91800f9a785e0d6f9f36ed98bfd0 GIT binary patch literal 8192 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 V_?9(je1oOB%fNyns5?{Ze*oRsNnii~ literal 0 HcmV?d00001 diff --git a/boot_source/platform/drivers/inc/pin_mux.h b/boot_source/platform/drivers/inc/pin_mux.h new file mode 100644 index 0000000..f142db3 --- /dev/null +++ b/boot_source/platform/drivers/inc/pin_mux.h @@ -0,0 +1,1590 @@ +/* ################################################################### +** This component module is generated by Processor Expert. Do not modify it. +** Filename : pin_mux.h +** Project : sss +** Processor : S32K144_100 +** Component : PinSettings +** Version : Component 1.2.0, Driver 1.4, CPU db: 3.00.000 +** Repository : SDK_S32K14x_09 +** Compiler : GNU C Compiler +** Date/Time : 2018-05-17, 11:43, # CodeGen: 2 +** Abstract : +** +** Settings : +** Component name : pin_mux +** PinSettings IP Block : PinSettings +** Processor : S32K144_100 +** Pin settings : +** Routing : +** Peripheral Type ADC : +** Custom name : ADC0 +** ADC0 : +** Channel 0 : +** Channel 1 : +** Channel 2 : +** Channel 3 : +** Channel 4 : +** Channel 5 : +** Channel 6 : +** Channel 7 : +** Channel 8 : +** Channel 9 : +** Channel 10 : +** Channel 11 : +** Channel 12 : +** Channel 13 : +** Channel 14 : +** Channel 15 : +** Custom name : ADC1 +** ADC1 : +** Channel 0 : +** Channel 1 : +** Channel 2 : +** Channel 3 : +** Channel 4 : +** Channel 5 : +** Channel 6 : +** Channel 7 : +** Channel 8 : +** Channel 9 : +** Channel 10 : +** Channel 11 : +** Channel 12 : +** Channel 13 : +** Channel 14 : +** Channel 15 : +** Peripheral Type AIPS : +** Custom name : AIPS +** Peripheral Type CAN : +** Custom name : CAN0 +** CAN0 : +** Receiver Input : +** Transmitter Output : +** Custom name : CAN1 +** CAN1 : +** Receiver Input : +** Transmitter Output : +** Custom name : CAN2 +** CAN2 : +** Receiver Input : +** Transmitter Output : +** Peripheral Type CMP : +** Custom name : CMP0 +** CMP0 : +** Analog Input 0 : +** Analog Input 1 : +** Analog Input 2 : +** Analog Input 3 : +** Analog Input 4 : +** Analog Input 5 : +** Analog Input 6 : +** Analog Input 7 : +** Analog Output : +** Peripheral Type CRC : +** Custom name : CRC +** Peripheral Type CSE_PRAM : +** Custom name : CSE_PRAM +** Peripheral Type DMA : +** Custom name : DMA +** Peripheral Type DMAMUX : +** Custom name : DMAMUX +** Peripheral Type EIM : +** Custom name : EIM +** Peripheral Type ERM : +** Custom name : ERM +** Peripheral Type EWM : +** Custom name : EWM +** EWM : +** Input : +** Output : +** Peripheral Type FLEXIO : +** Custom name : FLEXIO +** FLEXIO : +** Data Pin 0 : +** Data Pin 1 : +** Data Pin 2 : +** Data Pin 3 : +** Data Pin 4 : +** Data Pin 5 : +** Data Pin 6 : +** Data Pin 7 : +** Peripheral Type FTFC : +** Custom name : FTFC +** Peripheral Type FTM : +** Custom name : FTM0 +** FTM0 : +** External Clock 0 : +** Channel 0 : +** Direction : +** Channel 1 : +** Direction : +** Channel 2 : +** Direction : +** Channel 3 : +** Direction : +** Channel 4 : +** Direction : +** Channel 5 : +** Direction : +** Channel 6 : +** Direction : +** Channel 7 : +** Direction : +** Fault Input 0 : +** Fault Input 1 : +** Fault Input 2 : +** Fault Input 3 : +** Custom name : FTM1 +** FTM1 : +** External Clock 1 : +** Quadrature Decoder Phase A Input : +** Quadrature Decoder Phase B Input : +** Channel 0 : +** Direction : +** Channel 1 : +** Direction : +** Channel 2 : +** Direction : +** Channel 3 : +** Direction : +** Channel 4 : +** Direction : +** Channel 5 : +** Direction : +** Channel 6 : +** Direction : +** Channel 7 : +** Direction : +** Fault Input 0 : +** Fault Input 1 : +** Fault Input 2 : +** Fault Input 3 : +** Custom name : FTM2 +** FTM2 : +** External Clock 2 : +** Quadrature Decoder Phase A Input : +** Quadrature Decoder Phase B Input : +** Channel 0 : +** Direction : +** Channel 1 : +** Direction : +** Channel 2 : +** Direction : +** Channel 3 : +** Direction : +** Channel 4 : +** Direction : +** Channel 5 : +** Direction : +** Channel 6 : +** Direction : +** Channel 7 : +** Direction : +** Fault Input 0 : +** Fault Input 1 : +** Fault Input 2 : +** Fault Input 3 : +** Custom name : FTM3 +** FTM3 : +** Channel 0 : +** Direction : +** Channel 1 : +** Direction : +** Channel 2 : +** Direction : +** Channel 3 : +** Direction : +** Channel 4 : +** Direction : +** Channel 5 : +** Direction : +** Channel 6 : +** Direction : +** Channel 7 : +** Direction : +** Fault Input 0 : +** Fault Input 1 : +** Fault Input 2 : +** Fault Input 3 : +** Peripheral Type GPIO : +** Custom name : PTA +** PTA : +** Pin 0 : +** Direction : +** Pin 1 : +** Direction : +** Pin 2 : +** Direction : +** Pin 3 : +** Direction : +** Pin 4 : +** Direction : +** Pin 5 : +** Direction : +** Pin 6 : +** Direction : +** Pin 7 : +** Direction : +** Pin 8 : +** Direction : +** Pin 9 : +** Direction : +** Pin 10 : +** Direction : +** Pin 11 : +** Direction : +** Pin 12 : +** Direction : +** Pin 13 : +** Direction : +** Pin 14 : +** Direction : +** Pin 15 : +** Direction : +** Pin 16 : +** Direction : +** Pin 17 : +** Direction : +** Custom name : PTB +** PTB : +** Pin 0 : +** Direction : +** Pin 1 : +** Direction : +** Pin 2 : +** Direction : +** Pin 3 : +** Direction : +** Pin 4 : +** Direction : +** Pin 5 : +** Direction : +** Pin 6 : +** Direction : +** Pin 7 : +** Direction : +** Pin 8 : +** Direction : +** Pin 9 : +** Direction : +** Pin 10 : +** Direction : +** Pin 11 : +** Direction : +** Pin 12 : +** Direction : +** Pin 13 : +** Direction : +** Pin 14 : +** Direction : +** Pin 15 : +** Direction : +** Pin 16 : +** Direction : +** Pin 17 : +** Direction : +** Custom name : PTC +** PTC : +** Pin 0 : +** Direction : +** Pin 1 : +** Direction : +** Pin 2 : +** Direction : +** Pin 3 : +** Direction : +** Pin 4 : +** Direction : +** Pin 5 : +** Direction : +** Pin 6 : +** Direction : +** Pin 7 : +** Direction : +** Pin 8 : +** Direction : +** Pin 9 : +** Direction : +** Pin 10 : +** Direction : +** Pin 11 : +** Direction : +** Pin 12 : +** Direction : +** Pin 13 : +** Direction : +** Pin 14 : +** Direction : +** Pin 15 : +** Direction : +** Pin 16 : +** Direction : +** Pin 17 : +** Direction : +** Custom name : PTD +** PTD : +** Pin 0 : PTD0 +** Direction : Output +** Pin 1 : +** Direction : +** Pin 2 : +** Direction : +** Pin 3 : +** Direction : +** Pin 4 : +** Direction : +** Pin 5 : +** Direction : +** Pin 6 : +** Direction : +** Pin 7 : +** Direction : +** Pin 8 : +** Direction : +** Pin 9 : +** Direction : +** Pin 10 : +** Direction : +** Pin 11 : +** Direction : +** Pin 12 : +** Direction : +** Pin 13 : +** Direction : +** Pin 14 : +** Direction : +** Pin 15 : PTD15 +** Direction : Output +** Pin 16 : PTD16 +** Direction : Output +** Pin 17 : +** Direction : +** Custom name : PTE +** PTE : +** Pin 0 : +** Direction : +** Pin 1 : +** Direction : +** Pin 2 : +** Direction : +** Pin 3 : +** Direction : +** Pin 4 : +** Direction : +** Pin 5 : +** Direction : +** Pin 6 : +** Direction : +** Pin 7 : +** Direction : +** Pin 8 : +** Direction : +** Pin 9 : +** Direction : +** Pin 10 : +** Direction : +** Pin 11 : +** Direction : +** Pin 12 : +** Direction : +** Pin 13 : +** Direction : +** Pin 14 : +** Direction : +** Pin 15 : +** Direction : +** Pin 16 : +** Direction : +** Peripheral Type JTAG : +** JTAG : +** Test Clock : +** Test Data Input : +** Test Data Output : +** Test Mode Selection : +** Peripheral Type LMEM : +** Custom name : LMEM +** Peripheral Type LPI2C : +** Custom name : LPI2C0 +** LPI2C0 : +** Host Request : +** Serial Clock Line : +** Secondary Clock line : +** Serial Data Line : +** Secondary Data Line : +** Peripheral Type LPIT : +** Custom name : LPIT0 +** Peripheral Type LPSPI : +** Custom name : LPSPI0 +** LPSPI0 : +** Peripheral Chip Select 0 : +** Direction : +** Peripheral Chip Select 1 : +** Direction : +** Peripheral Chip Select 2 : +** Direction : +** Peripheral Chip Select 3 : +** Direction : +** Serial Clock : +** Direction : +** Serial Data Input : +** Direction : +** Serial Data Output : +** Direction : +** Custom name : LPSPI1 +** LPSPI1 : +** Peripheral Chip Select 0 : +** Direction : +** Peripheral Chip Select 1 : +** Direction : +** Peripheral Chip Select 2 : +** Direction : +** Peripheral Chip Select 3 : +** Direction : +** Serial Clock : +** Direction : +** Serial Data Input : +** Direction : +** Serial Data Output : +** Direction : +** Custom name : LPSPI2 +** LPSPI2 : +** Peripheral Chip Select 0 : +** Direction : +** Peripheral Chip Select 1 : +** Direction : +** Peripheral Chip Select 2 : +** Direction : +** Peripheral Chip Select 3 : +** Direction : +** Serial Clock : +** Direction : +** Serial Data Input : +** Direction : +** Serial Data Output : +** Direction : +** Peripheral Type LPTMR : +** Custom name : LPTMR0 +** LPTMR0 : +** Pulse counter input 1 : +** Pulse counter input 2 : +** Pulse counter input 3 : +** Peripheral Type LPUART : +** Custom name : LPUART0 +** LPUART0 : +** Clear to Send : +** Request to Send : +** Receive Data : +** Transmit Data : +** Direction : +** Custom name : LPUART1 +** LPUART1 : +** Clear to Send : +** Request to Send : +** Receive Data : +** Transmit Data : +** Direction : +** Custom name : LPUART2 +** LPUART2 : +** Clear to Send : +** Request to Send : +** Receive Data : +** Transmit Data : +** Direction : +** Peripheral Type MCM : +** Custom name : MCM +** Peripheral Type MPU : +** Custom name : MPU +** Peripheral Type MSCM : +** Custom name : MSCM +** Peripheral Type PCC : +** Custom name : PCC +** Peripheral Type PDB : +** Custom name : PDB0 +** Custom name : PDB1 +** Peripheral Type PMC : +** Custom name : PMC +** Peripheral Type PORT : +** Custom name : PORTA +** Custom name : PORTB +** Custom name : PORTC +** Custom name : PORTD +** Custom name : PORTE +** Peripheral Type Platform : +** Platform : +** Clock Output : +** Clock Output : +** Clock Output : +** Non-Maskable Interrupt : +** Reset : +** Voltage Reference High : VREFH +** Voltage Reference Low : VREFL +** EXTAL : +** XTAL : +** Peripheral Type PowerAndGround : +** PowerAndGround : +** VDD Pin : VDD10 +** VDD Pin : VDD38 +** VDD Pin : VDD61 +** VDD Pin : VDD87 +** Analog Power Supply : VDDA +** VSS Pin : VSS14 +** VSS Pin : VSS37 +** VSS Pin : VSS60 +** VSS Pin : VSS86 +** Peripheral Type RCM : +** Custom name : RCM +** Peripheral Type RTC : +** Custom name : RTC +** RTC : +** Clock Input : +** Clock Output : +** Peripheral Type S32_NVIC : +** Custom name : S32_NVIC +** Peripheral Type S32_SCB : +** Custom name : S32_SCB +** Peripheral Type S32_SysTick : +** Custom name : S32_SysTick +** Peripheral Type SCG : +** Custom name : SCG +** Peripheral Type SIM : +** Custom name : SIM +** Peripheral Type SMC : +** Custom name : SMC +** Peripheral Type SWD : +** SWD : +** Clock : +** Data Input/Output : +** Peripheral Type TRGMUX : +** Custom name : TRGMUX +** TRGMUX : +** Input 0 : +** Input 1 : +** Input 2 : +** Input 3 : +** Input 4 : +** Input 5 : +** Input 6 : +** Input 7 : +** Input 8 : +** Input 9 : +** Input 10 : +** Input 11 : +** Output 0 : +** Output 1 : +** Output 2 : +** Output 3 : +** Output 4 : +** Output 5 : +** Output 6 : +** Output 7 : +** Peripheral Type WDOG : +** Custom name : WDOG +** Non-peripheral pins : +** Electrical properties : +** Pin 1: PTE16 : +** Custom name, Signal name : PTE16 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 2: PTE15 : +** Custom name, Signal name : PTE15 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 3: PTD1 : +** Custom name, Signal name : PTD1 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Drive Strength Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 4: PTD0 : +** Custom name, Signal name : PTD0 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Drive Strength Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 5: PTE11 : +** Custom name, Signal name : PTE11 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 6: PTE10 : +** Custom name, Signal name : PTE10 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 7: PTE13 : +** Custom name, Signal name : PTE13 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 8: PTE5 : +** Custom name, Signal name : PTE5 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 9: PTE4 : +** Custom name, Signal name : PTE4 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Drive Strength Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 10: VDD10 : +** Custom name, Signal name : VDD10 +** Pin 11: VDDA : +** Custom name, Signal name : VDDA +** Pin 12: VREFH : +** Custom name, Signal name : VREFH +** Pin 13: VREFL : +** Custom name, Signal name : VREFL +** Pin 14: VSS14 : +** Custom name, Signal name : VSS14 +** Pin 15: PTB7 : +** Custom name, Signal name : PTB7 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 16: PTB6 : +** Custom name, Signal name : PTB6 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Drive Strength Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 17: PTE14 : +** Custom name, Signal name : PTE14 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 18: PTE3 : +** Custom name, Signal name : PTE3 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 19: PTE12 : +** Custom name, Signal name : PTE12 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 20: PTD17 : +** Custom name, Signal name : PTD17 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 21: PTD16 : +** Custom name, Signal name : PTD16 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Drive Strength Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 22: PTD15 : +** Custom name, Signal name : PTD15 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Drive Strength Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 23: PTE9 : +** Custom name, Signal name : PTE9 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 24: PTD14 : +** Custom name, Signal name : PTD14 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 25: PTD13 : +** Custom name, Signal name : PTD13 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 26: PTE8 : +** Custom name, Signal name : PTE8 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 27: PTB5 : +** Custom name, Signal name : PTB5 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Drive Strength Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 28: PTB4 : +** Custom name, Signal name : PTB4 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Drive Strength Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 29: PTC3 : +** Custom name, Signal name : PTC3 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 30: PTC2 : +** Custom name, Signal name : PTC2 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 31: PTD7 : +** Custom name, Signal name : PTD7 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 32: PTD6 : +** Custom name, Signal name : PTD6 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 33: PTD5 : +** Custom name, Signal name : PTD5 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 34: PTD12 : +** Custom name, Signal name : PTD12 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 35: PTD11 : +** Custom name, Signal name : PTD11 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 36: PTD10 : +** Custom name, Signal name : PTD10 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 37: VSS37 : +** Custom name, Signal name : VSS37 +** Pin 38: VDD38 : +** Custom name, Signal name : VDD38 +** Pin 39: PTC1 : +** Custom name, Signal name : PTC1 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 40: PTC0 : +** Custom name, Signal name : PTC0 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 41: PTD9 : +** Custom name, Signal name : PTD9 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 42: PTD8 : +** Custom name, Signal name : PTD8 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 43: PTC17 : +** Custom name, Signal name : PTC17 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 44: PTC16 : +** Custom name, Signal name : PTC16 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 45: PTC15 : +** Custom name, Signal name : PTC15 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 46: PTC14 : +** Custom name, Signal name : PTC14 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 47: PTB3 : +** Custom name, Signal name : PTB3 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 48: PTB2 : +** Custom name, Signal name : PTB2 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 49: PTC13 : +** Custom name, Signal name : PTC13 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 50: PTC12 : +** Custom name, Signal name : PTC12 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 51: PTC11 : +** Custom name, Signal name : PTC11 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 52: PTC10 : +** Custom name, Signal name : PTC10 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 53: PTB1 : +** Custom name, Signal name : PTB1 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 54: PTB0 : +** Custom name, Signal name : PTB0 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 55: PTC9 : +** Custom name, Signal name : PTC9 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 56: PTC8 : +** Custom name, Signal name : PTC8 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 57: PTA7 : +** Custom name, Signal name : PTA7 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 58: PTA6 : +** Custom name, Signal name : PTA6 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 59: PTE7 : +** Custom name, Signal name : PTE7 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 60: VSS60 : +** Custom name, Signal name : VSS60 +** Pin 61: VDD61 : +** Custom name, Signal name : VDD61 +** Pin 62: PTA17 : +** Custom name, Signal name : PTA17 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 63: PTB17 : +** Custom name, Signal name : PTB17 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 64: PTB16 : +** Custom name, Signal name : PTB16 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 65: PTB15 : +** Custom name, Signal name : PTB15 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 66: PTB14 : +** Custom name, Signal name : PTB14 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 67: PTB13 : +** Custom name, Signal name : PTB13 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 68: PTB12 : +** Custom name, Signal name : PTB12 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 69: PTD4 : +** Custom name, Signal name : PTD4 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 70: PTD3 : +** Custom name, Signal name : PTD3 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Passive Filter Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 71: PTD2 : +** Custom name, Signal name : PTD2 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 72: PTA3 : +** Custom name, Signal name : PTA3 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 73: PTA2 : +** Custom name, Signal name : PTA2 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 74: PTB11 : +** Custom name, Signal name : PTB11 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 75: PTB10 : +** Custom name, Signal name : PTB10 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 76: PTB9 : +** Custom name, Signal name : PTB9 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 77: PTB8 : +** Custom name, Signal name : PTB8 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 78: PTA1 : +** Custom name, Signal name : PTA1 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 79: PTA0 : +** Custom name, Signal name : PTA0 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 80: PTC7 : +** Custom name, Signal name : PTC7 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 81: PTC6 : +** Custom name, Signal name : PTC6 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 82: PTA16 : +** Custom name, Signal name : PTA16 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 83: PTA15 : +** Custom name, Signal name : PTA15 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 84: PTE6 : +** Custom name, Signal name : PTE6 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 85: PTE2 : +** Custom name, Signal name : PTE2 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 86: VSS86 : +** Custom name, Signal name : VSS86 +** Pin 87: VDD87 : +** Custom name, Signal name : VDD87 +** Pin 88: PTA14 : +** Custom name, Signal name : PTA14 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 89: PTA13 : +** Custom name, Signal name : PTA13 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 90: PTA12 : +** Custom name, Signal name : PTA12 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 91: PTA11 : +** Custom name, Signal name : PTA11 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 92: PTA10 : +** Custom name, Signal name : PTA10 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Drive Strength Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 93: PTE1 : +** Custom name, Signal name : PTE1 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Drive Strength Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 94: PTE0 : +** Custom name, Signal name : PTE0 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Drive Strength Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 95: PTC5 : +** Custom name, Signal name : PTC5 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 96: PTC4 : +** Custom name, Signal name : PTC4 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 97: PTA5 : +** Custom name, Signal name : PTA5 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Passive Filter Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 98: PTA4 : +** Custom name, Signal name : PTA4 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 99: PTA9 : +** Custom name, Signal name : PTA9 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Pin 100: PTA8 : +** Custom name, Signal name : PTA8 +** Interrupt Status Field : +** Interrupt Configuration Field : +** Pin Mux Field : +** Lock Field : +** Pull Enable Field : +** Pull Select Field : +** Initial Value Field : +** Digital Filter Field : +** Settings : +** Shared components : +** clock_manager : clockMan1 +** Contents : +** PINS_DRV_Init - status_t PINS_DRV_Init(uint32_t pinCount,const pin_settings_config_t config[]); +** PINS_DRV_SetPullSel - void PINS_DRV_SetPullSel(PORT_Type * const base,uint32_t... +** PINS_DRV_SetMuxModeSel - void PINS_DRV_SetMuxModeSel(PORT_Type * const base,uint32_t pin,port_mux_t mux); +** PINS_DRV_SetPinIntSel - void PINS_DRV_SetPinIntSel(PORT_Type * const base,uint32_t... +** PINS_DRV_GetPinIntSel - port_interrupt_config_t PINS_DRV_GetPinIntSel(const PORT_Type * const... +** PINS_DRV_ClearPinIntFlagCmd - void PINS_DRV_ClearPinIntFlagCmd(PORT_Type * const base,uint32_t pin); +** PINS_DRV_EnableDigitalFilter - void PINS_DRV_EnableDigitalFilter(PORT_Type * const base,uint32_t pin); +** PINS_DRV_DisableDigitalFilter - void PINS_DRV_DisableDigitalFilter(PORT_Type * const base,uint32_t pin); +** PINS_DRV_ConfigDigitalFilter - void PINS_DRV_ConfigDigitalFilter(PORT_Type * const base,const... +** PINS_DRV_GetPortIntFlag - uint32_t PINS_DRV_GetPortIntFlag(const PORT_Type * const base); +** PINS_DRV_ClearPortIntFlagCmd - void PINS_DRV_ClearPortIntFlagCmd(PORT_Type * const base); +** PINS_DRV_SetGlobalPinControl - void PINS_DRV_SetGlobalPinControl(PORT_Type * const base, uint16_t pins,... +** PINS_DRV_SetGlobalIntControl - void PINS_DRV_SetGlobalIntControl(PORT_Type * const base, uint16_t pins,... +** PINS_DRV_GetPinsDirection - pins_channel_type_t PINS_DRV_GetPinsDirection(const GPIO_Type * const base); +** PINS_DRV_SetPinDirection - void PINS_DRV_SetPinDirection(GPIO_Type * const base,pins_channel_type_t... +** PINS_DRV_SetPinsDirection - void PINS_DRV_SetPinsDirection(GPIO_Type * const base,pins_channel_type_t pins); +** PINS_DRV_SetPortInputDisable - void PINS_DRV_SetPortInputDisable(GPIO_Type * const base,pins_channel_type_t... +** PINS_DRV_GetPortInputDisable - pins_channel_type_t PINS_DRV_GetPortInputDisable(const GPIO_Type * const base); +** PINS_DRV_WritePin - void PINS_DRV_WritePin(GPIO_Type * const base,pins_channel_type_t... +** PINS_DRV_WritePins - void PINS_DRV_WritePins(GPIO_Type * const base,pins_channel_type_t pins); +** PINS_DRV_GetPinsOutput - pins_channel_type_t PINS_DRV_GetPinsOutput(const GPIO_Type * const base); +** PINS_DRV_SetPins - void PINS_DRV_SetPins(GPIO_Type * const base,pins_channel_type_t pins); +** PINS_DRV_ClearPins - void PINS_DRV_ClearPins(GPIO_Type * const base,pins_channel_type_t pins); +** PINS_DRV_TogglePins - void PINS_DRV_TogglePins(GPIO_Type * const base,pins_channel_type_t pins); +** PINS_DRV_ReadPins - pins_channel_type_t PINS_DRV_ReadPins(const GPIO_Type * const base); +** +** Copyright 1997 - 2015 Freescale Semiconductor, Inc. +** Copyright 2016-2017 NXP +** All Rights Reserved. +** +** THIS SOFTWARE IS PROVIDED BY NXP "AS IS" AND ANY EXPRESSED OR +** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +** IN NO EVENT SHALL NXP OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +** INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +** SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +** HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +** STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +** IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +** THE POSSIBILITY OF SUCH DAMAGE. +** ###################################################################*/ +/*! +** @file pin_mux.h +** @version 1.4 +** @brief +** +*/ +/*! +** @addtogroup pin_mux_module pin_mux module documentation +** @{ +*/ + +#ifndef pin_mux_H +#define pin_mux_H + +/* MODULE pin_mux. */ +#include "pins_driver.h" + +/*! @brief User number of configured pins */ +#define NUM_OF_CONFIGURED_PINS 52//88 + +/*! @brief User configuration structure */ +extern const pin_settings_config_t g_pin_mux_InitConfigArr[NUM_OF_CONFIGURED_PINS]; + +/* END pin_mux. */ +#endif /* #ifndef pin_mux_H */ +/*! +** @} +*/ +/* +** ################################################################### +** +** This file was created by Processor Expert 10.1 [05.21] +** for the Freescale S32K series of microcontrollers. +** +** ################################################################### +*/ diff --git a/boot_source/platform/drivers/inc/platform_driver_inc_all.h b/boot_source/platform/drivers/inc/platform_driver_inc_all.h new file mode 100644 index 0000000000000000000000000000000000000000..49f1a784df299860e9524f6d939ded3d6caaebb2 GIT binary patch literal 8192 zcmeIu3<-6Q4acA1Y55cZ)D5ttk^APT{31mqTpxS;!)L
    &B!CD5)yHNz+)W9r-!NS=Q`dh%!Z3uaFLr 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 YDKXuf4HO0}!98OCeqx00dG1R52j=xy*8l(j literal 0 HcmV?d00001 diff --git a/boot_source/platform/drivers/inc/platform_eerom_address_def.h b/boot_source/platform/drivers/inc/platform_eerom_address_def.h new file mode 100644 index 0000000000000000000000000000000000000000..a579059eca2d1b1f99140263d3dcf2a2d60083b8 GIT binary patch literal 8192 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 literal 0 HcmV?d00001 diff --git a/boot_source/platform/drivers/inc/status.h b/boot_source/platform/drivers/inc/status.h new file mode 100644 index 0000000..3d08a98 --- /dev/null +++ b/boot_source/platform/drivers/inc/status.h @@ -0,0 +1,173 @@ +/* + * Copyright (c) 2016, Freescale Semiconductor, Inc. + * Copyright 2016-2017 NXP + * All rights reserved. + * + * THIS SOFTWARE IS PROVIDED BY NXP "AS IS" AND ANY EXPRESSED OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL NXP OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef STATUS_H +#define STATUS_H + +/** + * @page misra_violations MISRA-C:2012 violations + * + * @section [global] + * Violates MISRA 2012 Advisory Rule 2.3, Global typedef not referenced. + * status_t is referenced from all drivers. + * + * @section [global] + * Violates MISRA 2012 Advisory Rule 2.5, Local macro not referenced. + * The defined macro is used as include guard. + * + */ + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @brief Status return codes. + * Common error codes will be a unified enumeration (C enum) that will contain all error codes + * (common and specific). There will be separate "error values spaces" (or slots), each of 256 + * positions, allocated per functionality. + */ +typedef enum +{ + /* Generic error codes */ + STATUS_SUCCESS = 0x000U, /*!< Generic operation success status */ + STATUS_ERROR = 0x001U, /*!< Generic operation failure status */ + STATUS_BUSY = 0x002U, /*!< Generic operation busy status */ + STATUS_TIMEOUT = 0x003U, /*!< Generic operation timeout status */ + STATUS_UNSUPPORTED = 0x004U, /*!< Generic operation unsupported status */ + /* MCU specific error codes */ + STATUS_MCU_GATED_OFF = 0x100U, /*!< Module is gated off */ + STATUS_MCU_TRANSITION_FAILED = 0x101U, /*!< Error occurs during transition. */ + STATUS_MCU_INVALID_STATE = 0x102U, /*!< Unsupported in current state. */ + STATUS_MCU_NOTIFY_BEFORE_ERROR = 0x103U, /*!< Error occurs during send "BEFORE" notification. */ + STATUS_MCU_NOTIFY_AFTER_ERROR = 0x104U, /*!< Error occurs during send "AFTER" notification. */ + /* I2C specific error codes */ + STATUS_I2C_RECEIVED_NACK = 0x200U, /*!< NACK signal received */ + STATUS_I2C_TX_UNDERRUN = 0x201U, /*!< TX underrun error */ + STATUS_I2C_RX_OVERRUN = 0x202U, /*!< RX overrun error */ + STATUS_I2C_ARBITRATION_LOST = 0x203U, /*!< Arbitration lost */ + STATUS_I2C_ABORTED = 0x204U, /*!< A transfer was aborted */ + STATUS_I2C_BUS_BUSY = 0x205U, /*!< I2C bus is busy, cannot start transfer */ + /* CAN specific error codes */ + STATUS_CAN_BUFF_OUT_OF_RANGE = 0x300U, /*!< The specified MB index is out of the configurable range */ + STATUS_CAN_NO_TRANSFER_IN_PROGRESS = 0x301U, /*!< There is no transmission or reception in progress */ + /* Security specific error codes */ + STATUS_SEC_SEQUENCE_ERROR = 0x402U, /*!< The sequence of commands or subcommands is out of + sequence */ + STATUS_SEC_KEY_NOT_AVAILABLE = 0x403U, /*!< A key is locked due to failed boot measurement or + an active debugger */ + STATUS_SEC_KEY_INVALID = 0x404U, /*!< A function is called to perform an operation with + a key that is not allowed for the given operation */ + STATUS_SEC_KEY_EMPTY = 0x405U, /*!< Attempt to use a key that has not been initialized yet */ + STATUS_SEC_NO_SECURE_BOOT = 0x406U, /*!< The conditions for a secure boot process are not met */ + STATUS_SEC_KEY_WRITE_PROTECTED = 0x407U, /*!< Request for updating a write protected key slot, + or activating debugger with write protected key(s) */ + STATUS_SEC_KEY_UPDATE_ERROR = 0x408U, /*!< Key update did not succeed due to errors in + verification of the messages */ + STATUS_SEC_RNG_SEED = 0x409U, /*!< Returned by CMD_RND and CMD_DEBUG if the seed has not + been initialized before */ + STATUS_SEC_NO_DEBUGGING = 0x40AU, /*!< DEBUG command authentication failed */ + STATUS_SEC_MEMORY_FAILURE = 0x40CU, /*!< General memory technology failure + (multibit ECC error, common fault detected) */ + STATUS_SEC_HSM_INTERNAL_MEMORY_ERROR = 0x410U, /*!< An internal memory error encountered while + executing the command */ + STATUS_SEC_INVALID_COMMAND = 0x411U, /*!< Command value out of range */ + STATUS_SEC_TRNG_ERROR = 0x412U, /*!< One or more statistical tests run on the TRNG output failed */ + STATUS_SEC_HSM_FLASH_BLOCK_ERROR = 0x413U, /*!< Error reading, programming or erasing one of the HSM flash blocks */ + STATUS_SEC_INTERNAL_CMD_ERROR = 0x414U, /*!< An internal command processor error while executing a command */ + STATUS_SEC_MAC_LENGTH_ERROR = 0x415U, /*!< MAC/Message length out of range */ + STATUS_SEC_INVALID_ARG = 0x421U, /*!< Invalid command argument */ + STATUS_SEC_TRNG_CLOCK_ERROR = 0x423U, /*!< TRNG not provided with a stable clock */ + /* SPI specific error codes */ + STATUS_SPI_TX_UNDERRUN = 0x500U, /*!< TX underrun error */ + STATUS_SPI_RX_OVERRUN = 0x501U, /*!< RX overrun error */ + STATUS_SPI_ABORTED = 0x502U, /*!< A transfer was aborted */ + /* UART specific error codes */ + STATUS_UART_TX_UNDERRUN = 0x600U, /*!< TX underrun error */ + STATUS_UART_RX_OVERRUN = 0x601U, /*!< RX overrun error */ + STATUS_UART_ABORTED = 0x602U, /*!< A transfer was aborted */ + STATUS_UART_FRAMING_ERROR = 0x603U, /*!< Framing error */ + STATUS_UART_PARITY_ERROR = 0x604U, /*!< Parity error */ + STATUS_UART_NOISE_ERROR = 0x605U, /*!< Noise error */ + /* I2S specific error codes */ + STATUS_I2S_TX_UNDERRUN = 0x700U, /*!< TX underrun error */ + STATUS_I2S_RX_OVERRUN = 0x701U, /*!< RX overrun error */ + STATUS_I2S_ABORTED = 0x702U, /*!< A transfer was aborted */ + /* SBC specific error codes */ + SBC_NVN_ERROR = 0x801U, /*!< Unsuccessful attempt writing to non volatile memory + (0x73 and 0x74). Set device to factory settings. */ + SBC_COMM_ERROR = 0x802U, /*!< Data transfer was aborted */ + SBC_CMD_ERROR = 0x804U, /*!< Wrong command. */ + SBC_ERR_NA = 0x808U, /*!< Feature/device not available */ + SBC_MTPNV_LOCKED = 0x810U, /*!< Unable to write MTPNV cells, NVMPS = 0 */ + + /* FLASH specific error codes */ + STATUS_FLASH_ERROR_ENABLE = 0x901U, /*!< It's impossible to enable an operation */ + STATUS_FLASH_ERROR_NO_BLOCK = 0x902U, /*!< No blocks have been enabled for Array Integrity check */ + STATUS_FLASH_INPROGRESS = 0x903U, /*!< InProgress status */ + + /* SAI specific error codes */ + STATUS_SAI_ABORTED = 0xA00U, /*!< SAI aborted status */ + + /* ENET specific error codes */ + STATUS_ENET_RX_QUEUE_EMPTY = 0xA01U, /*!< There is no available frame in the receive queue */ + STATUS_ENET_TX_QUEUE_FULL = 0xA02U, /*!< There is no available space for the frame in the transmit queue */ + STATUS_ENET_BUFF_NOT_FOUND = 0xA03U, /*!< The specified buffer was not found in the queue */ + + /* FCCU specific error codes */ + STATUS_FCCU_ERROR_CONFIG_TIMEOUT = 0xB01U, /*!< FCCU triggers TimeOut when try to enter in Config State */ + STATUS_FCCU_ERROR_INIT_FCCU = 0xB02U, /*!< FCCU Initializing FCCU Module */ + STATUS_FCCU_ERROR_SET_CONFIG = 0xB03U, /*!< FCCU Fail to Enter in Config Mode */ + STATUS_FCCU_ERROR_SET_NORMAL = 0xB04U, /*!< FCCU Fail to Enter in Normal Mode */ + STATUS_FCCU_ERROR_APPLY_NCF_CONFIG = 0xB05U, /*!< FCCU Fail to set NoCritical Faults */ + STATUS_FCCU_ERROR_UPDATE_FREEZE = 0xB06U, /*!< FCCU Fail to update Freez Status registers */ + STATUS_FCCU_ERROR_CLEAR_FREEZE = 0xB07U, /*!< FCCU Fail to Clear Freez Status registers */ + STATUS_FCCU_ERROR_SET_EOUT = 0xB08U, /*!< FCCU Fail to Set Eout Configuration */ + STATUS_FCCU_ERROR_FAULT_DETECTED = 0xB09U, /*!< FCCU Faults Detected */ + STATUS_FCCU_ERROR_OTHER = 0xB0AU, /*!< FCCU other Error */ + + /* EMIOS specific error codes */ + STATUS_EMIOS_WRONG_MODE = 0xC00U, /*!< EMIOS unsuccessful attempt selecting wrong mode. */ + STATUS_EMIOS_CNT_BUS_OVERFLOW = 0xC01U, /*!< EMIOS counter bus overflow. */ + STATUS_EMIOS_WRONG_CNT_BUS = 0xC02U, /*!< EMIOS unsuccessful attempt selecting wrong counter bus. */ + STATUS_EMIOS_ENABLE_GLOBAL_FRZ = 0xC03U, /*!< EMIOS must set global allow enter debug mode first. */ + + /* EEE specific error codes */ + STATUS_EEE_ERROR_NO_ENOUGH_SPACE = 0xD00U, /*!< The data is too big to fit in any of the block */ + STATUS_EEE_ERROR_NO_ENOUGH_BLOCK = 0xD01U, /*!< The block numbers is not enough for round robin */ + STATUS_EEE_ERROR_DATA_NOT_FOUND = 0xD02U, /*!< The required data is not found in the EEPROM emulation */ + STATUS_EEE_ERROR_NOT_IN_CACHE = 0xD03U, /*!< The required data is not in the cache table */ + STATUS_EEE_ERROR_PROGRAM_INDICATOR = 0xD04U, /*!< Failed to make block indicator to non-blank for several times */ + STATUS_EEE_HVOP_INPROGRESS = 0xD05U, /*!< The high voltage operation is in progress */ + + /* uSDHC specific error codes */ + STATUS_USDHC_OUT_OF_RANGE = 0xE00U, /*!< The size of data to be sent is larger than maximum size of ADMA table */ + STATUS_USDHC_PREPARE_ADMA_FAILED = 0xE01U, /*!< Failed to prepare the ADMA table */ + + /* TDM specific error codes */ + STATUS_TDM_DIARY_FULL = 0xF01U, /*!< No empty flash left in diary region */ + + /* PHY specific error codes */ + STATUS_PHY_ACCESS_FAILED = 0x1001U, /*!< Could not access PHY registers */ + STATUS_PHY_INCOMPATIBLE_DEVICE = 0x1002U /*!< The selected PHY driver is not compatible with the device */ +} status_t; + +#endif /* STATUS_H */ + +/******************************************************************************* + * EOF + ******************************************************************************/ diff --git a/boot_source/platform/drivers/src/CAN2/can2.c b/boot_source/platform/drivers/src/CAN2/can2.c new file mode 100644 index 0000000000000000000000000000000000000000..382ad33e4699b7e4e1c3d3341a43fae3f274b5b0 GIT binary patch literal 28672 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

    )S|5HVj673Z<}qB^5k=c&w<1!f6wavvZ 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 Qcaxn>hb}^P6My&|B){eOZ2$lO literal 0 HcmV?d00001 diff --git a/boot_source/platform/drivers/src/EEROM/24cxx.c b/boot_source/platform/drivers/src/EEROM/24cxx.c new file mode 100644 index 0000000000000000000000000000000000000000..51ff96335c1e2af92529c581bb12fb06846edf9f GIT binary patch literal 12288 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 literal 0 HcmV?d00001 diff --git a/boot_source/platform/drivers/src/GPIO/pin_mux.c b/boot_source/platform/drivers/src/GPIO/pin_mux.c new file mode 100644 index 0000000..7597bfd --- /dev/null +++ b/boot_source/platform/drivers/src/GPIO/pin_mux.c @@ -0,0 +1,862 @@ +/* ################################################################### +** This component module is generated by Processor Expert. Do not modify it. +** Filename : pin_mux.c +** Project : sss +** Processor : S32K144_100 +** Component : PinSettings +** Version : Component 1.2.0, Driver 1.4, CPU db: 3.00.000 +** Repository : SDK_S32K14x_09 +** Compiler : GNU C Compiler +** Date/Time : 2018-05-17, 11:43, # CodeGen: 2 +** Abstract : +** +** +** Copyright 1997 - 2015 Freescale Semiconductor, Inc. +** Copyright 2016-2017 NXP +** All Rights Reserved. +** +** THIS SOFTWARE IS PROVIDED BY NXP "AS IS" AND ANY EXPRESSED OR +** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +** IN NO EVENT SHALL NXP OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +** INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +** SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +** HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +** STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +** IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +** THE POSSIBILITY OF SUCH DAMAGE. +** ###################################################################*/ +/*! +** @file pin_mux.c +** @version 1.4 +** @brief +** +*/ +/*! +** @addtogroup pin_mux_module pin_mux module documentation +** @{ +*/ + +/* MODULE pin_mux. */ +#include "device_registers.h" +#include "pin_mux.h" +//#include "ChargSel.h" + +/** + * @page misra_violations MISRA-C:2012 violations + * + * + * @section [global] + * Violates MISRA 2012 Advisory Rule 11.4, A conversion should not be performed + * between a pointer to object and an integer type. + * The cast is required to initialize a pointer with an unsigned int define, + * representing an address. + * + * @section [global] + * Violates MISRA 2012 Required Rule 11.6, A cast shall not be performed + * between pointer to void and an arithmetic type. + * The cast is required to initialize a pointer with an unsigned int define, + * representing an address. + * + * @section [global] + * Violates MISRA 2012 Advisory Rule 8.7, External variable could be made static. + * The external variables will be used in other source files in application code. + * + */ + +/*! @brief Array of pin configuration structures */ +#define YC_DISABLE_UART 0 + +/*! @brief Array of pin configuration structures */ +const pin_settings_config_t g_pin_mux_InitConfigArr[NUM_OF_CONFIGURED_PINS] = +{ + + /**************************************************/ + + { + .base = PORTE, + .pinPortIdx = 11u,//PEPS_IN + .pullConfig = PORT_INTERNAL_PULL_UP_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_LOW_DRIVE_STRENGTH, + .mux = PORT_MUX_AS_GPIO, + .pinLock = false, + .intConfig = PORT_INT_RISING_EDGE, + .clearIntFlag = false, + .gpioBase = PTE, + .direction = GPIO_INPUT_DIRECTION, + .digitalFilter = false, + }, + { + .base = PORTE, + .pinPortIdx = 10u,//CLK8M_OUT + .pullConfig = PORT_INTERNAL_PULL_UP_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_LOW_DRIVE_STRENGTH, + .mux = PORT_MUX_ALT2, + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = PTE, + .direction = GPIO_OUTPUT_DIRECTION, + .digitalFilter = false, + }, + { + .base = PORTE, + .pinPortIdx = 9u,//CLK8M_OUT + .pullConfig = PORT_INTERNAL_PULL_UP_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_LOW_DRIVE_STRENGTH, + .mux = PORT_MUX_AS_GPIO, + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = PTE, + .direction = GPIO_OUTPUT_DIRECTION, + .digitalFilter = false, + .initValue = 1u, + }, + { + .base = PORTE, + .pinPortIdx = 7u,//8100_INT + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_HIGH_DRIVE_STRENGTH, + .mux = PORT_MUX_AS_GPIO, + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = PTE, + .direction = GPIO_OUTPUT_DIRECTION, + .digitalFilter = false, + .initValue = 0u, + }, + { + .base = PORTE,/*NFC CS*/ + .pinPortIdx = 6u, + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_LOW_DRIVE_STRENGTH, + .mux = PORT_PIN_DISABLED, + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = NULL, + .digitalFilter = false, + }, + { + .base = PORTE, + .pinPortIdx = 5u,//8701_PWM + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_LOW_DRIVE_STRENGTH, + .mux = PORT_MUX_ALT4, + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .digitalFilter = false, + .gpioBase = NULL, + }, + { + .base = PORTE, + .pinPortIdx = 4u,//8100_VDD_EN + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_LOW_DRIVE_STRENGTH, + .mux = PORT_MUX_AS_GPIO, + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = PTE, + .direction = GPIO_OUTPUT_DIRECTION, + .digitalFilter = false, + .initValue = 1u, + }, + { + .base = PORTE,//8060_EN + .pinPortIdx = 3u, + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_LOW_DRIVE_STRENGTH, + .mux = PORT_MUX_AS_GPIO, + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = PTE, + .direction = GPIO_OUTPUT_DIRECTION, + .digitalFilter = false, + .initValue = 0u, + }, + { + .base = PORTE,/*NFC MOSI*/ + .pinPortIdx = 2u, + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_LOW_DRIVE_STRENGTH, + .mux = PORT_PIN_DISABLED,//PORT_MUX_AS_GPIO,// + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = NULL,//PTE,// + //.direction = GPIO_OUTPUT_DIRECTION, + .digitalFilter = false, + }, + { + .base = PORTE,/*NFC MISO*/ + .pinPortIdx = 1u, + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_LOW_DRIVE_STRENGTH, + .mux = PORT_PIN_DISABLED, + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = NULL, + .digitalFilter = false, + }, + { + .base = PORTE,/*NFC SCLK*/ + .pinPortIdx = 0u, + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_LOW_DRIVE_STRENGTH, + .mux = PORT_PIN_DISABLED, + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = NULL, + .digitalFilter = false, + }, + { + .base = PORTD, + .pinPortIdx = 16u,//CAN_ERR + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_LOW_DRIVE_STRENGTH, + .mux = PORT_MUX_AS_GPIO,// + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = PTD, + .direction = GPIO_INPUT_DIRECTION, + .digitalFilter = false, + }, + { + .base = PORTD, + .pinPortIdx = 15u,//CAN_EN + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_HIGH_DRIVE_STRENGTH, + .mux = PORT_MUX_AS_GPIO,// + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = PTD, + .direction = GPIO_OUTPUT_DIRECTION, + .digitalFilter = false, + .initValue = 1u, + }, + { + .base = PORTD, + .pinPortIdx = 7u,//8060_VDD_EN + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_LOW_DRIVE_STRENGTH, + .mux = PORT_MUX_AS_GPIO, + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = PTD, + .direction = GPIO_OUTPUT_DIRECTION, + .digitalFilter = false, + .initValue = 0u, + }, + { + .base = PORTD, + .pinPortIdx = 6u,//MCU_SEL1_COIL_C + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_LOW_DRIVE_STRENGTH, + .mux = PORT_MUX_AS_GPIO, + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = PTD, + .direction = GPIO_OUTPUT_DIRECTION, + .digitalFilter = false, + .initValue = 0u, + }, + { + .base = PORTD, + .pinPortIdx = 5u,//MCU_SEL1_COIL_A + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_LOW_DRIVE_STRENGTH, + .mux = PORT_MUX_AS_GPIO, + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = PTD, + .direction = GPIO_OUTPUT_DIRECTION, + .digitalFilter = false, + .initValue = 0u, + }, + { + .base = PORTD, + .pinPortIdx = 4u,//MCU_SEL1_COIL_B + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_LOW_DRIVE_STRENGTH, + .mux = PORT_MUX_AS_GPIO, + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = PTD, + .direction = GPIO_OUTPUT_DIRECTION, + .digitalFilter = false, + .initValue = 0u, + }, + { + .base = PORTD, + .pinPortIdx = 3u,//FAN_FG1 + .pullConfig = PORT_INTERNAL_PULL_UP_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_LOW_DRIVE_STRENGTH, + .mux = PORT_MUX_AS_GPIO, + .pinLock = false, + .intConfig = PORT_INT_RISING_EDGE, + .clearIntFlag = false, + .gpioBase = PTD, + .direction = GPIO_INPUT_DIRECTION, + .digitalFilter = false, + .initValue = 1u, + }, + { + .base = PORTD, + .pinPortIdx = 2u,//FAN_PWM1 + .pullConfig = PORT_INTERNAL_PULL_UP_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_LOW_DRIVE_STRENGTH, + .mux = PORT_MUX_AS_GPIO,//LSPI1_PCS + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = PTD, + .direction = GPIO_OUTPUT_DIRECTION, + .digitalFilter = false, + .initValue = 0u, + }, + { + .base = PORTD,//IDLE + .pinPortIdx = 1u, + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_LOW_DRIVE_STRENGTH, + .mux = PORT_MUX_AS_GPIO, + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = PTD, + .direction = GPIO_INPUT_DIRECTION, + .digitalFilter = false, + }, + { + .base = PORTD, + .pinPortIdx = 0u,//POWER_EN + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_LOW_DRIVE_STRENGTH, + .mux = PORT_MUX_AS_GPIO, + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = PTD, + .direction = GPIO_OUTPUT_DIRECTION, + .digitalFilter = false, + }, + { + .base = PORTC, + .pinPortIdx = 17u,//VSENS1 + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_STRENGTH_DISABLED, + .mux = PORT_PIN_DISABLED, + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = NULL, + .digitalFilter = false, + }, + { + .base = PORTC, + .pinPortIdx = 16u,//MCU_COIL_VS_AI1 + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_STRENGTH_DISABLED, + .mux = PORT_PIN_DISABLED, + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = NULL, + .digitalFilter = false, + }, + { + .base = PORTC, + .pinPortIdx = 15u, + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_LOW_DRIVE_STRENGTH, + .mux = PORT_MUX_ALT2, + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = NULL, + .digitalFilter = false, + }, + { + .base = PORTC, + .pinPortIdx = 14u, + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_LOW_DRIVE_STRENGTH, + .mux = PORT_MUX_ALT2, + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = NULL, + .digitalFilter = false, + }, + { + .base = PORTC, + .pinPortIdx = 9u,//SEC_SCL + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_LOW_DRIVE_STRENGTH, + .mux = PORT_PIN_DISABLED, + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = NULL, + .digitalFilter = false, + + }, + { + .base = PORTC, + .pinPortIdx = 8u,//SEC_SDA + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_LOW_DRIVE_STRENGTH, + .mux = PORT_PIN_DISABLED,//PORT_MUX_ALT3, //LPI2C0_SDA + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = NULL, + .digitalFilter = false, + + }, + { + .base = PORTC,///FDTX + .pinPortIdx = 7u, + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_LOW_DRIVE_STRENGTH, + .mux = PORT_MUX_ALT2, + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = NULL, + .digitalFilter = false, + }, + { + .base = PORTC,///FDRX + .pinPortIdx = 6u, + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_LOW_DRIVE_STRENGTH, + .mux = PORT_MUX_ALT2, + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = NULL, + .digitalFilter = false, + }, + { + .base = PORTC,/*WP*/ + .pinPortIdx = 5u, + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_LOW_DRIVE_STRENGTH, + .mux = PORT_MUX_AS_GPIO, + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = PTC, + .direction = GPIO_OUTPUT_DIRECTION, + .digitalFilter = false, + .initValue = 1u, + }, + { + .base = PORTC, + .pinPortIdx = 3u,//CANFD_TX + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_LOW_DRIVE_STRENGTH, + .mux = PORT_MUX_ALT3, + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .digitalFilter = false, + .gpioBase = NULL, + }, + { + .base = PORTC, + .pinPortIdx = 2u,//CANFD_TX + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_LOW_DRIVE_STRENGTH, + .mux = PORT_MUX_ALT3, + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .digitalFilter = false, + .gpioBase = NULL, + }, + { + .base = PORTC, + .pinPortIdx = 1u,//MCU_PWM0_CH1 + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_LOW_DRIVE_STRENGTH, + .mux = PORT_MUX_ALT2,//LPUART1_RX + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = NULL, + .digitalFilter = false, + }, + { + .base = PORTC, + .pinPortIdx = 0u,//MCU_PWM0_CH0 + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_LOW_DRIVE_STRENGTH, + .mux = PORT_MUX_ALT2,//LPUART1_RX + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = NULL, + .digitalFilter = false, + }, + { + .base = PORTB, + .pinPortIdx = 13u,//ACC DET + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_LOW_DRIVE_STRENGTH, + .mux = PORT_MUX_AS_GPIO, + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = PTB, + .direction = GPIO_INPUT_DIRECTION, + .digitalFilter = false, + }, + { + .base = PORTB, + .pinPortIdx = 12u,//MCU_SEL1_P + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_HIGH_DRIVE_STRENGTH, + .mux = PORT_MUX_AS_GPIO, + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = PTB, + .direction = GPIO_OUTPUT_DIRECTION, + .digitalFilter = false, + .initValue = 0u, + }, + { + .base = PORTB, + .pinPortIdx = 5u,//8701_EN + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_HIGH_DRIVE_STRENGTH, + .mux = PORT_MUX_AS_GPIO, + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = PTB, + .direction = GPIO_OUTPUT_DIRECTION, + .digitalFilter = false, + .initValue = 0u, + }, + { + .base = PORTB, + .pinPortIdx = 4u,//BUZZER io sim + .pullConfig = PORT_INTERNAL_PULL_UP_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_HIGH_DRIVE_STRENGTH, + .mux = PORT_MUX_AS_GPIO, + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = PTB, + .direction = GPIO_OUTPUT_DIRECTION, + .digitalFilter = false, + .initValue = 0u, + }, + { + .base = PORTB, + .pinPortIdx = 3u,//MCU_NU80XX_ISNS_AI + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_STRENGTH_DISABLED, + .mux = PORT_PIN_DISABLED, + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = NULL, + .digitalFilter = false, + }, + { + .base = PORTB, + .pinPortIdx = 2u,//B+_DET + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_STRENGTH_DISABLED, + .mux = PORT_PIN_DISABLED, + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = NULL, + .digitalFilter = false, + }, + { + #if(RUN_YC_ONLY == 0) + .base = PORTB, + .pinPortIdx = 1u,//QI_TXD + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_LOW_DRIVE_STRENGTH, + .mux = PORT_MUX_ALT2,//FAN_PWM1 FTM2_CH1 + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = NULL, + .digitalFilter = false, + #else + .base = PORTB, + .pinPortIdx = 1u,//B+_DET + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_LOW_DRIVE_STRENGTH, + .mux = PORT_MUX_AS_GPIO, + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = PTB, + .direction = GPIO_INPUT_DIRECTION, + .digitalFilter = false, + #endif + }, + { + #if(RUN_YC_ONLY == 0) + .base = PORTB, + .pinPortIdx = 0u,//QI_RXD + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_LOW_DRIVE_STRENGTH, + .mux = PORT_MUX_ALT2,//FAN_PWM1 FTM2_CH1 + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = NULL, + .digitalFilter = false, + #else + .base = PORTB, + .pinPortIdx = 0u,//B+_DET + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_LOW_DRIVE_STRENGTH, + .mux = PORT_MUX_AS_GPIO, + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = PTB, + .direction = GPIO_INPUT_DIRECTION, + .digitalFilter = false, + #endif + }, + { + .base = PORTA, + .pinPortIdx = 13u, + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_LOW_DRIVE_STRENGTH, + .mux = PORT_MUX_ALT3,//CAN1_TX + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = NULL, + .digitalFilter = false, + }, + { + .base = PORTA, + .pinPortIdx = 12u, + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_LOW_DRIVE_STRENGTH, + .mux = PORT_MUX_ALT3,//CAN0_RX + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = NULL, + .digitalFilter = false, + }, + { + .base = PORTA, + .pinPortIdx = 11u,//SEC_RST + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_LOW_DRIVE_STRENGTH, + .mux = PORT_MUX_AS_GPIO, + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = PTA, + .direction = GPIO_OUTPUT_DIRECTION, + .digitalFilter = false, + .initValue = 0u, + }, + { + .base = PORTA, + .pinPortIdx = 10u,//INTR_NFC + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_LOW_DRIVE_STRENGTH, + .mux = PORT_PIN_DISABLED, + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = NULL, + .digitalFilter = false, + }, + { + .base = PORTA, + .pinPortIdx = 7u,//ADC_T1 + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_STRENGTH_DISABLED, + .mux = PORT_MUX_AS_GPIO, + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = PTA, + .direction = GPIO_INPUT_DIRECTION, + .digitalFilter = false, + }, + { + .base = PORTA, + .pinPortIdx = 6u,//ADC_T4 + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_STRENGTH_DISABLED, + .mux = PORT_PIN_DISABLED, + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = NULL, + .digitalFilter = false, + }, + { + .base = PORTA, + .pinPortIdx = 3u, + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_LOW_DRIVE_STRENGTH, + #if USE_SOFTWARE_I2C + .mux = PORT_MUX_AS_GPIO,//PORT_MUX_ALT3, //LPI2C0_SCL + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = PTA, + .direction = GPIO_OUTPUT_DIRECTION, + .digitalFilter = false, + .initValue = 0u, + #else + .mux = PORT_MUX_ALT3, //LPI2C0_SCL + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = NULL, + .digitalFilter = false, + #endif + }, + { + .base = PORTA, + .pinPortIdx = 2u, + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_LOW_DRIVE_STRENGTH, + #if USE_SOFTWARE_I2C + .mux = PORT_MUX_AS_GPIO,//PORT_MUX_ALT3, //LPI2C0_SDA + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = PTA, + .direction = GPIO_OUTPUT_DIRECTION, + .digitalFilter = false, + .initValue = 0u, + #else + .mux = PORT_MUX_ALT3, //LPI2C0_SCL + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = NULL, + .digitalFilter = false, + #endif + }, + { + .base = PORTA, + .pinPortIdx = 1u,//ADC_T2 + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_STRENGTH_DISABLED, + .mux = PORT_MUX_AS_GPIO, + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = PTA, + .direction = GPIO_INPUT_DIRECTION, + .digitalFilter = false, + }, + { + .base = PORTA, + .pinPortIdx = 0u,//ADC_T3 + .pullConfig = PORT_INTERNAL_PULL_NOT_ENABLED, + .passiveFilter = false, + .driveSelect = PORT_STRENGTH_DISABLED, + .mux = PORT_MUX_AS_GPIO, + .pinLock = false, + .intConfig = PORT_DMA_INT_DISABLED, + .clearIntFlag = false, + .gpioBase = PTA, + .direction = GPIO_INPUT_DIRECTION, + .digitalFilter = false, + }, + +}; +/* END pin_mux. */ +/*! +** @} +*/ +/* +** ################################################################### +** +** This file was created by Processor Expert 10.1 [05.21] +** for the Freescale S32K series of microcontrollers. +** +** ################################################################### +*/ diff --git a/boot_source/platform/drivers/src/LED/led.c b/boot_source/platform/drivers/src/LED/led.c new file mode 100644 index 0000000000000000000000000000000000000000..35ee3233299f305ad6b48a79e3e24fb7e7273c45 GIT binary patch literal 12288 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 K(rU(SQ~w9e0Xw(= literal 0 HcmV?d00001 diff --git a/boot_source/platform/drivers/src/flash/ecual_flash.c b/boot_source/platform/drivers/src/flash/ecual_flash.c new file mode 100644 index 0000000000000000000000000000000000000000..b9b56b1ec81e1f84659bc9844c4a281b6e6e7911 GIT binary patch literal 16384 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