From ea93b5bb4952d1ff18ac833658ff4f9a82dcc201 Mon Sep 17 00:00:00 2001 From: zhanli <719901725@qq.com> Date: Sat, 9 Dec 2023 21:03:01 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=9C=BA=E5=99=A8=E4=BA=BA?= =?UTF-8?q?=E4=B8=BB=E6=8E=A7=E6=9D=BF=E5=92=8C=E7=9B=B4=E6=B5=81=E7=94=B5?= =?UTF-8?q?=E6=9C=BA=E9=A9=B1=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 5 + .../GeekRobotTinyFirmware v1.0/DRV/bsp_GPIO.c | 55 + .../GeekRobotTinyFirmware v1.0/DRV/bsp_GPIO.h | 49 + .../GeekRobotTinyFirmware v1.0/DRV/bsp_NVIC.C | 43 + .../GeekRobotTinyFirmware v1.0/DRV/bsp_NVIC.h | 11 + .../GeekRobotTinyFirmware v1.0/DRV/bsp_iic.c | 248 + .../GeekRobotTinyFirmware v1.0/DRV/bsp_iic.h | 65 + .../GeekRobotTinyFirmware v1.0/DRV/bsp_sys.c | 53 + .../GeekRobotTinyFirmware v1.0/DRV/bsp_sys.h | 29 + .../DRV/bsp_timer.c | 229 + .../DRV/bsp_timer.h | 19 + .../DRV/bsp_usart.c | 162 + .../DRV/bsp_usart.h | 16 + .../GeekRobotTinyFirmware v1.0/DRV/delay.c | 96 + .../GeekRobotTinyFirmware v1.0/DRV/delay.h | 38 + .../HARDWARE/MOTO/bluetooth.c | 127 + .../HARDWARE/MOTO/bluetooth.h | 31 + .../HARDWARE/MOTO/car.c | 97 + .../HARDWARE/MOTO/car.h | 9 + .../HARDWARE/MOTO/moto.c | 126 + .../HARDWARE/MOTO/moto.h | 25 + .../HARDWARE/OLED/bmp.h | 80 + .../HARDWARE/OLED/oled.c | 302 + .../HARDWARE/OLED/oled.h | 59 + .../HARDWARE/OLED/oledfont.h | 251 + .../HARDWARE/PID/pid.c | 71 + .../HARDWARE/PID/pid.h | 10 + .../Libraries/CMSIS/core_cm3.c | 784 ++ .../Libraries/CMSIS/core_cm3.h | 1818 ++++ .../CMSIS/startup/startup_stm32f10x_cl.s | 368 + .../CMSIS/startup/startup_stm32f10x_hd.s | 358 + .../CMSIS/startup/startup_stm32f10x_hd_vl.s | 346 + .../CMSIS/startup/startup_stm32f10x_ld.s | 297 + .../CMSIS/startup/startup_stm32f10x_ld_vl.s | 304 + .../CMSIS/startup/startup_stm32f10x_md.s | 307 + .../CMSIS/startup/startup_stm32f10x_md_vl.s | 315 + .../CMSIS/startup/startup_stm32f10x_xl.s | 358 + .../Libraries/CMSIS/stm32f10x.h | 8337 +++++++++++++++++ .../Libraries/CMSIS/system_stm32f10x.c | 1094 +++ .../Libraries/CMSIS/system_stm32f10x.h | 98 + .../Libraries/FWlib/inc/misc.h | 220 + .../Libraries/FWlib/inc/stm32f10x_adc.h | 484 + .../Libraries/FWlib/inc/stm32f10x_bkp.h | 195 + .../Libraries/FWlib/inc/stm32f10x_can.h | 697 ++ .../Libraries/FWlib/inc/stm32f10x_cec.h | 210 + .../Libraries/FWlib/inc/stm32f10x_crc.h | 94 + .../Libraries/FWlib/inc/stm32f10x_dac.h | 317 + .../Libraries/FWlib/inc/stm32f10x_dbgmcu.h | 119 + .../Libraries/FWlib/inc/stm32f10x_dma.h | 439 + .../Libraries/FWlib/inc/stm32f10x_exti.h | 184 + .../Libraries/FWlib/inc/stm32f10x_flash.h | 426 + .../Libraries/FWlib/inc/stm32f10x_fsmc.h | 733 ++ .../Libraries/FWlib/inc/stm32f10x_gpio.h | 385 + .../Libraries/FWlib/inc/stm32f10x_i2c.h | 684 ++ .../Libraries/FWlib/inc/stm32f10x_iwdg.h | 140 + .../Libraries/FWlib/inc/stm32f10x_pwr.h | 156 + .../Libraries/FWlib/inc/stm32f10x_rcc.h | 727 ++ .../Libraries/FWlib/inc/stm32f10x_rtc.h | 135 + .../Libraries/FWlib/inc/stm32f10x_sdio.h | 531 ++ .../Libraries/FWlib/inc/stm32f10x_spi.h | 487 + .../Libraries/FWlib/inc/stm32f10x_tim.h | 1164 +++ .../Libraries/FWlib/inc/stm32f10x_usart.h | 412 + .../Libraries/FWlib/inc/stm32f10x_wwdg.h | 115 + .../Libraries/FWlib/src/misc.c | 225 + .../Libraries/FWlib/src/stm32f10x_adc.c | 1307 +++ .../Libraries/FWlib/src/stm32f10x_bkp.c | 308 + .../Libraries/FWlib/src/stm32f10x_can.c | 1415 +++ .../Libraries/FWlib/src/stm32f10x_cec.c | 433 + .../Libraries/FWlib/src/stm32f10x_crc.c | 160 + .../Libraries/FWlib/src/stm32f10x_dac.c | 571 ++ .../Libraries/FWlib/src/stm32f10x_dbgmcu.c | 162 + .../Libraries/FWlib/src/stm32f10x_dma.c | 714 ++ .../Libraries/FWlib/src/stm32f10x_exti.c | 269 + .../Libraries/FWlib/src/stm32f10x_flash.c | 1684 ++++ .../Libraries/FWlib/src/stm32f10x_fsmc.c | 866 ++ .../Libraries/FWlib/src/stm32f10x_gpio.c | 650 ++ .../Libraries/FWlib/src/stm32f10x_i2c.c | 1331 +++ .../Libraries/FWlib/src/stm32f10x_iwdg.c | 190 + .../Libraries/FWlib/src/stm32f10x_pwr.c | 307 + .../Libraries/FWlib/src/stm32f10x_rcc.c | 1470 +++ .../Libraries/FWlib/src/stm32f10x_rtc.c | 339 + .../Libraries/FWlib/src/stm32f10x_sdio.c | 799 ++ .../Libraries/FWlib/src/stm32f10x_spi.c | 908 ++ .../Libraries/FWlib/src/stm32f10x_tim.c | 2890 ++++++ .../Libraries/FWlib/src/stm32f10x_usart.c | 1058 +++ .../Libraries/FWlib/src/stm32f10x_wwdg.c | 224 + .../Listing/Project.map | 1426 +++ .../Listing/startup_stm32f10x_hd.lst | 1469 +++ .../Listing/startup_stm32f10x_ld.lst | 1140 +++ .../Listing/startup_stm32f10x_md.lst | 1210 +++ .../Output/24cxx.crf | Bin 0 -> 345791 bytes .../Output/24l01.crf | Bin 0 -> 342466 bytes .../Output/ExtDll.iex | 2 + .../Output/Project.axf | Bin 0 -> 406084 bytes .../Output/Project.build_log.htm | 40 + .../Output/Project.hex | 1356 +++ .../Output/Project.htm | 2089 +++++ .../Output/Project.lnp | 45 + .../Output/Project.plg | 529 ++ .../Output/Project.sct | 15 + .../Output/Project_PROJECT.dep | 1153 +++ .../Output/Project_sct.Bak | 15 + .../Output/anbt_dmp_driver.crf | Bin 0 -> 395168 bytes .../Output/anbt_dmp_mpu6050.crf | Bin 0 -> 409942 bytes .../Output/anbt_i2c.crf | Bin 0 -> 354613 bytes .../Output/balance.crf | Bin 0 -> 368171 bytes .../Output/bluetooth.crf | Bin 0 -> 360139 bytes .../Output/bsp_adc.crf | Bin 0 -> 353413 bytes .../Output/bsp_gpio.crf | Bin 0 -> 339527 bytes .../Output/bsp_iic.crf | Bin 0 -> 347250 bytes .../Output/bsp_nvic.crf | Bin 0 -> 339100 bytes .../Output/bsp_spi.crf | Bin 0 -> 338277 bytes .../Output/bsp_sys.crf | Bin 0 -> 358893 bytes .../Output/bsp_timer.crf | Bin 0 -> 342828 bytes .../Output/bsp_timer3.crf | Bin 0 -> 340416 bytes .../Output/bsp_timer4.crf | Bin 0 -> 341201 bytes .../Output/bsp_timer8.crf | Bin 0 -> 341484 bytes .../Output/bsp_usart.crf | Bin 0 -> 345270 bytes .../GeekRobotTinyFirmware v1.0/Output/car.crf | Bin 0 -> 359455 bytes .../Output/core_cm3.crf | Bin 0 -> 3966 bytes .../Output/data_output.crf | Bin 0 -> 349331 bytes .../Output/delay.crf | Bin 0 -> 339678 bytes .../Output/main.crf | Bin 0 -> 359093 bytes .../Output/misc.crf | Bin 0 -> 339922 bytes .../Output/moto.crf | Bin 0 -> 340182 bytes .../Output/mpu6050.crf | Bin 0 -> 410337 bytes .../Output/oled.crf | Bin 0 -> 354806 bytes .../GeekRobotTinyFirmware v1.0/Output/pid.crf | Bin 0 -> 359412 bytes .../Output/stm32f10x_adc.crf | Bin 0 -> 347081 bytes .../Output/stm32f10x_bkp.crf | Bin 0 -> 340856 bytes .../Output/stm32f10x_can.crf | Bin 0 -> 357682 bytes .../Output/stm32f10x_cec.crf | Bin 0 -> 341394 bytes .../Output/stm32f10x_crc.crf | Bin 0 -> 339475 bytes .../Output/stm32f10x_dac.crf | Bin 0 -> 341543 bytes .../Output/stm32f10x_dbgmcu.crf | Bin 0 -> 339260 bytes .../Output/stm32f10x_dma.crf | Bin 0 -> 343014 bytes .../Output/stm32f10x_exti.crf | Bin 0 -> 340475 bytes .../Output/stm32f10x_flash.crf | Bin 0 -> 346922 bytes .../Output/stm32f10x_fsmc.crf | Bin 0 -> 345431 bytes .../Output/stm32f10x_gpio.crf | Bin 0 -> 343420 bytes .../Output/stm32f10x_i2c.crf | Bin 0 -> 345840 bytes .../Output/stm32f10x_it.crf | Bin 0 -> 339369 bytes .../Output/stm32f10x_iwdg.crf | Bin 0 -> 339566 bytes .../Output/stm32f10x_pwr.crf | Bin 0 -> 340764 bytes .../Output/stm32f10x_rcc.crf | Bin 0 -> 346990 bytes .../Output/stm32f10x_rtc.crf | Bin 0 -> 340769 bytes .../Output/stm32f10x_sdio.crf | Bin 0 -> 344031 bytes .../Output/stm32f10x_spi.crf | Bin 0 -> 343889 bytes .../Output/stm32f10x_tim.crf | Bin 0 -> 362009 bytes .../Output/stm32f10x_usart.crf | Bin 0 -> 345523 bytes .../Output/stm32f10x_wwdg.crf | Bin 0 -> 340022 bytes .../Output/system_stm32f10x.crf | Bin 0 -> 341099 bytes .../PROJECT_STM32F103RB_1.0.0.dbgconf | 97 + .../Project/JLink Regs CM3.txt | 32 + .../Project/JLinkLog.txt | 1284 +++ .../Project/JLinkSettings.ini | 17 + .../Project/Project.plg | 50 + .../Project/Project.uvgui.Administrator | 2711 ++++++ .../Project/Project.uvgui_Administrator.bak | 2684 ++++++ .../Project/Project.uvguix.Administrator | 1771 ++++ .../Project/Project.uvguix.li324 | 2754 ++++++ .../Project/Project.uvopt | 926 ++ .../Project/Project.uvoptx | 800 ++ .../Project/Project.uvproj.saved_uv4 | 621 ++ .../Project/Project.uvprojx | 613 ++ .../Project/Project_PROJECT.dep | 1018 ++ .../Project/Project_Target 1.dep | 1 + .../Project/Project_uvopt.bak | 3513 +++++++ .../Project/Project_uvproj.bak | 582 ++ .../GeekRobotTinyFirmware v1.0/User/main.c | 77 + .../User/stm32f10x_conf.h | 76 + .../User/stm32f10x_it.c | 162 + .../User/stm32f10x_it.h | 54 + Hardware/PCB/README.md | 0 .../GeekRebot.PcbDoc | Bin 0 -> 3653632 bytes .../GeekRebot.PcbLib | Bin 0 -> 1564672 bytes .../GeekRebot_Dri_24V.PrjPCB | 1089 +++ .../GeekRebot_Dri_24V.PrjPCBStructure | 1 + .../GeekRebot_Dri_24V.SCHLIB | Bin 0 -> 76800 bytes .../Main.SchDoc | Bin 0 -> 293888 bytes .../GeekRebot-Driver.PrjPCB | 1072 +++ .../GeekRebot-Driver.PrjPCBStructure | 1 + .../GeekRebot.PcbDoc | Bin 0 -> 8201216 bytes .../GeekRebot.PcbLib | Bin 0 -> 3977216 bytes .../GeekRebot.SchDoc | Bin 0 -> 344576 bytes .../版本和测试说明.md | 13 + 186 files changed, 76932 insertions(+) create mode 100644 .gitignore create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_GPIO.c create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_GPIO.h create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_NVIC.C create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_NVIC.h create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_iic.c create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_iic.h create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_sys.c create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_sys.h create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_timer.c create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_timer.h create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_usart.c create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_usart.h create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/delay.c create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/delay.h create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/HARDWARE/MOTO/bluetooth.c create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/HARDWARE/MOTO/bluetooth.h create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/HARDWARE/MOTO/car.c create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/HARDWARE/MOTO/car.h create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/HARDWARE/MOTO/moto.c create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/HARDWARE/MOTO/moto.h create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/HARDWARE/OLED/bmp.h create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/HARDWARE/OLED/oled.c create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/HARDWARE/OLED/oled.h create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/HARDWARE/OLED/oledfont.h create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/HARDWARE/PID/pid.c create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/HARDWARE/PID/pid.h create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/core_cm3.c create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/core_cm3.h create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/startup/startup_stm32f10x_cl.s create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/startup/startup_stm32f10x_hd.s create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/startup/startup_stm32f10x_hd_vl.s create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/startup/startup_stm32f10x_ld.s create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/startup/startup_stm32f10x_ld_vl.s create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/startup/startup_stm32f10x_md.s create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/startup/startup_stm32f10x_md_vl.s create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/startup/startup_stm32f10x_xl.s create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/stm32f10x.h create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/system_stm32f10x.c create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/system_stm32f10x.h create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/misc.h create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_adc.h create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_bkp.h create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_can.h create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_cec.h create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_crc.h create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_dac.h create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_dbgmcu.h create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_dma.h create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_exti.h create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_flash.h create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_fsmc.h create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_gpio.h create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_i2c.h create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_iwdg.h create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_pwr.h create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_rcc.h create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_rtc.h create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_sdio.h create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_spi.h create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_tim.h create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_usart.h create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_wwdg.h create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/misc.c create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_adc.c create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_bkp.c create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_can.c create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_cec.c create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_crc.c create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_dac.c create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_dbgmcu.c create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_dma.c create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_exti.c create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_flash.c create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_fsmc.c create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_gpio.c create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_i2c.c create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_iwdg.c create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_pwr.c create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_rcc.c create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_rtc.c create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_sdio.c create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_spi.c create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_tim.c create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_usart.c create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_wwdg.c create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Listing/Project.map create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Listing/startup_stm32f10x_hd.lst create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Listing/startup_stm32f10x_ld.lst create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Listing/startup_stm32f10x_md.lst create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/24cxx.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/24l01.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/ExtDll.iex create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/Project.axf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/Project.build_log.htm create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/Project.hex create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/Project.htm create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/Project.lnp create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/Project.plg create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/Project.sct create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/Project_PROJECT.dep create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/Project_sct.Bak create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/anbt_dmp_driver.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/anbt_dmp_mpu6050.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/anbt_i2c.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/balance.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/bluetooth.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/bsp_adc.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/bsp_gpio.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/bsp_iic.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/bsp_nvic.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/bsp_spi.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/bsp_sys.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/bsp_timer.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/bsp_timer3.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/bsp_timer4.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/bsp_timer8.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/bsp_usart.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/car.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/core_cm3.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/data_output.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/delay.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/main.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/misc.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/moto.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/mpu6050.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/oled.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/pid.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/stm32f10x_adc.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/stm32f10x_bkp.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/stm32f10x_can.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/stm32f10x_cec.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/stm32f10x_crc.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/stm32f10x_dac.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/stm32f10x_dbgmcu.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/stm32f10x_dma.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/stm32f10x_exti.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/stm32f10x_flash.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/stm32f10x_fsmc.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/stm32f10x_gpio.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/stm32f10x_i2c.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/stm32f10x_it.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/stm32f10x_iwdg.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/stm32f10x_pwr.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/stm32f10x_rcc.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/stm32f10x_rtc.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/stm32f10x_sdio.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/stm32f10x_spi.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/stm32f10x_tim.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/stm32f10x_usart.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/stm32f10x_wwdg.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/system_stm32f10x.crf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Project/DebugConfig/PROJECT_STM32F103RB_1.0.0.dbgconf create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Project/JLink Regs CM3.txt create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Project/JLinkLog.txt create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Project/JLinkSettings.ini create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Project/Project.plg create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Project/Project.uvgui.Administrator create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Project/Project.uvgui_Administrator.bak create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Project/Project.uvguix.Administrator create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Project/Project.uvguix.li324 create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Project/Project.uvopt create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Project/Project.uvoptx create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Project/Project.uvproj.saved_uv4 create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Project/Project.uvprojx create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Project/Project_PROJECT.dep create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Project/Project_Target 1.dep create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Project/Project_uvopt.bak create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/Project/Project_uvproj.bak create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/User/main.c create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/User/stm32f10x_conf.h create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/User/stm32f10x_it.c create mode 100644 Hardware/Firmware/GeekRobotTinyFirmware v1.0/User/stm32f10x_it.h create mode 100644 Hardware/PCB/README.md create mode 100644 Hardware/PCB/RebotHardwareControl_Medium_v1.0/GeekRebot.PcbDoc create mode 100644 Hardware/PCB/RebotHardwareControl_Medium_v1.0/GeekRebot.PcbLib create mode 100644 Hardware/PCB/RebotHardwareControl_Medium_v1.0/GeekRebot_Dri_24V.PrjPCB create mode 100644 Hardware/PCB/RebotHardwareControl_Medium_v1.0/GeekRebot_Dri_24V.PrjPCBStructure create mode 100644 Hardware/PCB/RebotHardwareControl_Medium_v1.0/GeekRebot_Dri_24V.SCHLIB create mode 100644 Hardware/PCB/RebotHardwareControl_Medium_v1.0/Main.SchDoc create mode 100644 Hardware/PCB/RebotHardwareControl_Tiny_v1.0/GeekRebot-Driver.PrjPCB create mode 100644 Hardware/PCB/RebotHardwareControl_Tiny_v1.0/GeekRebot-Driver.PrjPCBStructure create mode 100644 Hardware/PCB/RebotHardwareControl_Tiny_v1.0/GeekRebot.PcbDoc create mode 100644 Hardware/PCB/RebotHardwareControl_Tiny_v1.0/GeekRebot.PcbLib create mode 100644 Hardware/PCB/RebotHardwareControl_Tiny_v1.0/GeekRebot.SchDoc create mode 100644 Hardware/PCB/RebotHardwareControl_Tiny_v1.0/版本和测试说明.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..30421d0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +*.d +*.o +*.obj +/History/ +/Output/ \ No newline at end of file diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_GPIO.c b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_GPIO.c new file mode 100644 index 0000000..8af2dc4 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_GPIO.c @@ -0,0 +1,55 @@ +/* +******************************************************************************************************** +ļbsp_GPIO.c + ܣҪͨIO + עðеIOã + https://shop60670850.taobao.com + ߣlilianhe + : 2017-2-6 +********************************************************************************************************* +*/ + +/* +******************************************************************************************************** +GPIO־ +1.2017-2-6дLEDʼ + +********************************************************************************************************* +*/ + +#include "bsp_GPIO.h" + +/* +******************************************************************************************************** +ƣvoid LED_GPIO_Config(void) +ܣʼLED1GPIO +ӲӣLED1----PC13 + ע + : 2017-2-6 +********************************************************************************************************* +*/ +void LED_GPIO_Config(void) +{ + /*һGPIO_InitTypeDef͵Ľṹ*/ + GPIO_InitTypeDef GPIO_InitStructure; + RCC_APB2PeriphClockCmd( LED1_CLK, ENABLE); /*GPIOʱ*/ + GPIO_InitStructure.GPIO_Pin = LED1_Pin; /*ѡҪƵGPIO*/ + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /*ģʽΪͨ*/ + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /*Ϊ50MHz */ + GPIO_Init(LED1_PORT, &GPIO_InitStructure);/*ÿ⺯ʼGPIOC13*/ +} + +//LED˸ +void LED_Flash(int time) +{ + static int temp; + if(++temp==time) + { + GPIO_WriteBit(GPIOC, GPIO_Pin_13, (BitAction) (1 - GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13))) ;//LED ɫɫ״̬ת + temp=0; + } + +} + + +//------------------End of File---------------------------- diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_GPIO.h b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_GPIO.h new file mode 100644 index 0000000..60278ec --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_GPIO.h @@ -0,0 +1,49 @@ +#ifndef __BSP_GPIO_H +#define __BSP_GPIO_H + +#include "stm32f10x.h" + +/** the macro definition to trigger the led on or off + * 1 - off + *0 - on + */ +#define ON 0 +#define OFF 1 +//LED1 +#define LED1_CLK RCC_APB2Periph_GPIOC +#define LED1_PORT GPIOC +#define LED1_Pin GPIO_Pin_13 + + +/* κ꣬һʹ */ +#define LED1(a) if (a) \ + GPIO_SetBits(LED1_PORT,LED1_Pin);\ + else \ + GPIO_ResetBits(LED1_PORT,LED1_Pin) + + + + +///* ֱӲĴķIO */ +//#define digitalHi(p,i) {p->BSRR=i;} //Ϊߵƽ +//#define digitalLo(p,i) {p->BRR=i;} //͵ƽ +//#define digitalToggle(p,i) {p->ODR ^=i;} //ת״̬ +// +// +///* IOĺ */ +//#define LED1_TOGGLE digitalToggle(GPIOB,GPIO_Pin_0) +//#define LED1_OFF digitalHi(GPIOB,GPIO_Pin_0) +//#define LED1_ON digitalLo(GPIOB,GPIO_Pin_0) +// +//#define LED2_TOGGLE digitalToggle(GPIOF,GPIO_Pin_7) +//#define LED2_OFF digitalHi(GPIOF,GPIO_Pin_7) +//#define LED2_ON digitalLo(GPIOF,GPIO_Pin_7) +// +//#define LED3_TOGGLE digitalToggle(GPIOF,GPIO_Pin_8) +//#define LED3_OFF digitalHi(GPIOF,GPIO_Pin_8) +//#define LED3_ON digitalLo(GPIOF,GPIO_Pin_8) + +void LED_GPIO_Config(void); +void LED_Flash(int timer); + +#endif /* __LED_H */ diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_NVIC.C b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_NVIC.C new file mode 100644 index 0000000..2b4513e --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_NVIC.C @@ -0,0 +1,43 @@ +/* +******************************************************************************************************** +ļbsp_NVIC.c + ܣж + ע + https://shop60670850.taobao.com + ߣlilianhe + : 2017-2-6 +********************************************************************************************************* +*/ + +/* +******************************************************************************************************** +־ +1.2017-2-6,дuarttimeж + + +********************************************************************************************************* +*/ + +#include "bsp_nvic.h" + +/* +******************************************************************************************************** +ƣvoid NVIC_Config(void) +ܣøжϵȼ +Ӳӣ + ע + : 2017-2-6 +********************************************************************************************************* +*/ +void NVIC_Config(void) +{ + //NVIC_TIM1_Config(); +} + + +////timer6ж +//void NVIC_TIM6_Config(void) +//{ + +//} + diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_NVIC.h b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_NVIC.h new file mode 100644 index 0000000..e6bf9be --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_NVIC.h @@ -0,0 +1,11 @@ +#ifndef BSP_NVIC_H +#define BSP_NVIC_H + +#include "stm32f10x.h" +void NVIC_Config(void); +void NVIC_uart1_Config(void); +void NVIC_TIM1_Config(void); + + + +#endif diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_iic.c b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_iic.c new file mode 100644 index 0000000..b8c8695 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_iic.c @@ -0,0 +1,248 @@ + +#include "bsp_iic.h" + +/* +********************************************************************************************************* +* : i2c_Delay +* ˵: I2Cλӳ٣400KHz +* Σ +* ֵ: +********************************************************************************************************* +*/ +void i2c_Delay(void) +{ + uint8_t i; + + /* + ʱͨAX-Pro߼DzԵõġ + CPUƵ72MHzʱڲFlash, MDK̲Ż + ѭΪ10ʱSCLƵ = 205KHz + ѭΪ7ʱSCLƵ = 347KHz SCLߵƽʱ1.5usSCL͵ƽʱ2.87us + ѭΪ5ʱSCLƵ = 421KHz SCLߵƽʱ1.25usSCL͵ƽʱ2.375us + + IAṞЧʸߣΪ7 + */ + for (i = 0; i < 10; i++); +} + +/* +********************************************************************************************************* +* : i2c_Start +* ˵: CPUI2Cź +* Σ +* ֵ: +********************************************************************************************************* +*/ +void IIC_Start(void) +{ + /* SCLߵƽʱSDAһرʾI2Cź */ + I2C_SDA_1(); + I2C_SCL_1(); + i2c_Delay(); + I2C_SDA_0(); + i2c_Delay(); + I2C_SCL_0(); + i2c_Delay(); +} + +/* +********************************************************************************************************* +* : i2c_Start +* ˵: CPUI2Cֹͣź +* Σ +* ֵ: +********************************************************************************************************* +*/ +void IIC_Stop(void) +{ + /* SCLߵƽʱSDAһرʾI2Cֹͣź */ + I2C_SDA_0(); + I2C_SCL_1(); + i2c_Delay(); + I2C_SDA_1(); +} + +/* +********************************************************************************************************* +* : i2c_SendByte +* ˵: CPUI2C豸8bit +* Σ_ucByte ȴ͵ֽ +* ֵ: +********************************************************************************************************* +*/ +void IIC_Send_Byte(uint8_t _ucByte) +{ + uint8_t i; + + /* ȷֽڵĸλbit7 */ + for (i = 0; i < 8; i++) + { + if (_ucByte & 0x80) + { + I2C_SDA_1(); + } + else + { + I2C_SDA_0(); + } + i2c_Delay(); + I2C_SCL_1(); + i2c_Delay(); + I2C_SCL_0(); + if (i == 7) + { + I2C_SDA_1(); // ͷ + } + _ucByte <<= 1; /* һbit */ + i2c_Delay(); + } +} + +/* +********************************************************************************************************* +* : i2c_ReadByte +* ˵: CPUI2C豸ȡ8bit +* Σ +* ֵ: +********************************************************************************************************* +*/ +uint8_t IIC_Read_Byte(u8 ack) +{ + uint8_t i; + uint8_t value; + + /* 1bitΪݵbit7 */ + value = 0; + for (i = 0; i < 8; i++) + { + value <<= 1; + I2C_SCL_1(); + i2c_Delay(); + if (I2C_SDA_READ()) + { + value++; + } + I2C_SCL_0(); + i2c_Delay(); + } + if (!ack) + IIC_NAck();//??nACK + else + IIC_Ack(); //??ACK + return value; +} + +/* +********************************************************************************************************* +* : i2c_WaitAck +* ˵: CPUһʱӣȡACKӦź +* Σ +* ֵ: 0ʾȷӦ1ʾӦ +********************************************************************************************************* +*/ +uint8_t IIC_Wait_Ack(void) +{ + uint8_t re; + + I2C_SDA_1(); /* CPUͷSDA */ + i2c_Delay(); + I2C_SCL_1(); /* CPUSCL = 1, ʱ᷵ACKӦ */ + i2c_Delay(); + if (I2C_SDA_READ()) /* CPUȡSDA״̬ */ + { + re = 1; + } + else + { + re = 0; + } + I2C_SCL_0(); + i2c_Delay(); + return re; +} + +/* +********************************************************************************************************* +* : i2c_Ack +* ˵: CPUһACKź +* Σ +* ֵ: +********************************************************************************************************* +*/ +void IIC_Ack(void) +{ + I2C_SDA_0(); /* CPUSDA = 0 */ + i2c_Delay(); + I2C_SCL_1(); /* CPU1ʱ */ + i2c_Delay(); + I2C_SCL_0(); + i2c_Delay(); + I2C_SDA_1(); /* CPUͷSDA */ +} + +/* +********************************************************************************************************* +* : i2c_NAck +* ˵: CPU1NACKź +* Σ +* ֵ: +********************************************************************************************************* +*/ +void IIC_NAck(void) +{ + I2C_SDA_1(); /* CPUSDA = 1 */ + i2c_Delay(); + I2C_SCL_1(); /* CPU1ʱ */ + i2c_Delay(); + I2C_SCL_0(); + i2c_Delay(); +} + +/* +********************************************************************************************************* +* : i2c_CfgGpio +* ˵: I2CߵGPIOģIOķʽʵ +* Σ +* ֵ: +********************************************************************************************************* +*/ +void IIC_Init(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + + RCC_APB2PeriphClockCmd(RCC_I2C_PORT, ENABLE); /* GPIOʱ */ + + GPIO_InitStructure.GPIO_Pin = I2C_SCL_PIN | I2C_SDA_PIN; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; /* © */ + GPIO_Init(GPIO_PORT_I2C, &GPIO_InitStructure); + + /* һֹͣź, λI2Cϵ豸ģʽ */ + IIC_Stop(); +} + +/* +********************************************************************************************************* +* : i2c_CheckDevice +* ˵: I2C豸CPU豸ַȻȡ豸Ӧжϸ豸Ƿ +* Σ_Address豸I2Cߵַ +* ֵ: ֵ 0 ʾȷ 1ʾδ̽⵽ +********************************************************************************************************* +*/ +uint8_t i2c_CheckDevice(uint8_t _Address) +{ + uint8_t ucAck; + + IIC_Init(); /* GPIO */ + + + IIC_Start(); /* ź */ + + /* 豸ַ+дbit0 = w 1 = r) bit7 ȴ */ + IIC_Send_Byte(_Address | I2C_WR); + ucAck = IIC_Wait_Ack(); /* 豸ACKӦ */ + + IIC_Stop(); /* ֹͣź */ + + return ucAck; +} diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_iic.h b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_iic.h new file mode 100644 index 0000000..d3d1a63 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_iic.h @@ -0,0 +1,65 @@ +#ifndef __BSP_IIC_H +#define __BSP_IIC_H +#include "stm32f10x.h" + +/* I2CӵGPIO˿, ûֻҪ޸4д뼴ıSCLSDA */ +#define GPIO_PORT_I2C GPIOB /* GPIO˿ */ +#define RCC_I2C_PORT RCC_APB2Periph_GPIOB /* GPIO˿ʱ */ +#define I2C_SCL_PIN GPIO_Pin_10 /* ӵSCLʱߵGPIO */ +#define I2C_SDA_PIN GPIO_Pin_11 /* ӵSDAߵGPIO */ + +/* дSCLSDAĺ꣬ӴĿֲԺͿĶ */ +#if 1 /* 룺 1 ѡGPIOĿ⺯ʵIOд */ + #define I2C_SCL_1() GPIO_SetBits(GPIO_PORT_I2C, I2C_SCL_PIN) /* SCL = 1 */ + #define I2C_SCL_0() GPIO_ResetBits(GPIO_PORT_I2C, I2C_SCL_PIN) /* SCL = 0 */ + + #define I2C_SDA_1() GPIO_SetBits(GPIO_PORT_I2C, I2C_SDA_PIN) /* SDA = 1 */ + #define I2C_SDA_0() GPIO_ResetBits(GPIO_PORT_I2C, I2C_SDA_PIN) /* SDA = 0 */ + + #define I2C_SDA_READ() GPIO_ReadInputDataBit(GPIO_PORT_I2C, I2C_SDA_PIN) /* SDA״̬ */ +#else /* ֧ѡֱӼĴʵIOд */ + /*ע⣺дIAR߼ŻʱᱻŻ */ + #define I2C_SCL_1() GPIO_PORT_I2C->BSRR = I2C_SCL_PIN /* SCL = 1 */ + #define I2C_SCL_0() GPIO_PORT_I2C->BRR = I2C_SCL_PIN /* SCL = 0 */ + + #define I2C_SDA_1() GPIO_PORT_I2C->BSRR = I2C_SDA_PIN /* SDA = 1 */ + #define I2C_SDA_0() GPIO_PORT_I2C->BRR = I2C_SDA_PIN /* SDA = 0 */ + + #define I2C_SDA_READ() ((GPIO_PORT_I2C->IDR & I2C_SDA_PIN) != 0) /* SDA״̬ */ +#endif + + +#include + +#define I2C_WR 0 /* дbit */ +#define I2C_RD 1 /* bit */ + +void i2c_Delay(void); +void IIC_Init(void); +void IIC_Start(void); +void IIC_Stop(void); +void IIC_Send_Byte(uint8_t _ucByte); +uint8_t IIC_Read_Byte(u8 ack); +uint8_t IIC_Wait_Ack(void); +void IIC_Ack(void); +void IIC_NAck(void); +uint8_t i2c_CheckDevice(uint8_t _Address); + + +#endif + + + + + + + + + + + + + + + + diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_sys.c b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_sys.c new file mode 100644 index 0000000..7bac138 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_sys.c @@ -0,0 +1,53 @@ +/******************** (C) COPYRIGHT 2023 GeekRebot ***************************** +* File Name : bsp_sys.c +* Current Version : V1.0 & ST 3.5.0 +* Author : zhanli 719901725@qq.com +* Date of Issued : 2023.04.06 zhanli: Create +* Comments : ʼ +********************************************************************************/ +#include "bsp_sys.h" + +/**---------------------------------------------------------------------- +* Function : System_Init +* Description : GeekRebotʼ +* Author : zhanli&719901725@qq.com +* Date : 2023/04/22 zhanli +*---------------------------------------------------------------------**/ +void System_Init(void) +{ + Delay_Init(72); // δʱӳʼ + NVIC_Config(); // жóʼ + LED_GPIO_Config(); // LEDʼ + USART1_Init(115200); // ڳʼ + IIC_Init(); // IICģʼ + MOTO_GPIO_Init(); // IO + MOTO_PWM_Init(3599,0); // PWMƵʳʼ20KHz + + OLED_Init(); + OLED_Clear(); + OLED_ShowCHinese(0,0,2); // ʾ + OLED_ShowCHinese(16,0,3); // ʾ + OLED_ShowString(88,0,(u8*)"m/min",16); // OLEDһʾ峵 λm/min + OLED_ShowString(0, 2,(u8*)"Left : RPM",12); // ʾת RλRPM ʾÿӳֵȦ + OLED_ShowString(0, 3,(u8*)"Right: RPM",12); // ʾת RλRPM ʾÿӳֵȦ + OLED_ShowString(0, 4,(u8*)"P: I: D: ",16); // ʾPID + OLED_ShowString(0, 6,(u8*)"Set_C: RPM",12); // õijתٵλRPM + OLED_ShowString(0, 7,(u8*)"Set_P: m/min",12); // õijתٵλRPM + + Encoder_Init_TIM2(); + TIM2 -> CNT=30000; + Encoder_Init_TIM4(); + TIM4 -> CNT=30000; + + MOTO_PWM_Out(100, 100); + + Timer6_Init(); //ʱ6 + Delay_ms(100); //ȴʼ + + int Moto_Left=500; + int Moto_Right=500; + TIM3->CCR3 = Moto_Left; //pwm + TIM3->CCR4 = Moto_Right; //pwm +} + + diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_sys.h b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_sys.h new file mode 100644 index 0000000..f78e371 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_sys.h @@ -0,0 +1,29 @@ +#ifndef _BSP_SYS_H +#define _BSP_SYS_H + +// ̼STM32F103RCT6 64Pin STM32, ûSTM32F10X_HDܻ +// ľ +#ifndef STM32F10X_HD + #define STM32F10X_HD +#endif + +//DRVͷļ +#include "stm32f10x.h" +#include "delay.h" +#include "bsp_GPIO.h" +#include "bsp_nvic.h" +#include "bsp_usart.h" +#include "bsp_timer.h" +#include "bsp_iic.h" + +//HARDWAREͷļ +#include "oled.h" +#include "moto.h" +#include "pid.h" + + +void System_Init(void); + +#endif + + diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_timer.c b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_timer.c new file mode 100644 index 0000000..27bb748 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_timer.c @@ -0,0 +1,229 @@ +/* +******************************************************************************************************** +ļbsp_timer.c + ܣ + עtimer3 pwm,õtimer3ch3ch4 PB0-PB1ӵʹܶPWMA PWMBҵ + timer1 ϵͳ100msʱ + timer2 + timer4 ҵ +********************************************************************************************************* +*/ + + +#include "bsp_timer.h" + +//***************************ʱ3ʼ ṩPWM***************************// +// TIM_Period / Auto Reload Register(ARR) = 1000 TIM_Prescaler--71 +//arrԶװĴpscƵϵ +//PWMƵ = 72MHz/ARR/PCS 20K = 72M/3600/1 = 20K + + +//=====ʼPWM 20KHZ ƵԷֹƵʱļ +// ARR= 3599 ʱƵΪ20Khz +//PB0PWMA--right motoPB1PWMB--left motoSTBYֱ +//arrԶװĴpscƵϵ +//PWMƵ = 72MHz/ARR/PCS 20K = 72M/3600/1 = 20K +void MOTO_PWM_Init(u32 arr, int psc) +{ + TIM_OCInitTypeDef TIM_OCInitSructure; + GPIO_InitTypeDef GPIO_InitStructure; + TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; + + RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); + TIM_TimeBaseStructure.TIM_Period = arr-1; //ԶװؼĴڵֵ壨ֵ) + TIM_TimeBaseStructure.TIM_Prescaler = psc; //ʱӷƵϵ + TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //ⲿʱӽвʱӷƵ + TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //ϼ + TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure); //ʼ + + TIM_ClearFlag(TIM3, TIM_FLAG_Update); + TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE); + //pwm˿ + RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0| GPIO_Pin_1; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_Init(GPIOB, &GPIO_InitStructure); + + //ͨ3 pwm + TIM_OCInitSructure.TIM_OCMode = TIM_OCMode_PWM1; + TIM_OCInitSructure.TIM_OutputState= TIM_OutputState_Enable; + TIM_OCInitSructure.TIM_Pulse = 0;//ռձ= 50/100 + TIM_OCInitSructure.TIM_OCPolarity = TIM_OCPolarity_High;//ʱֵСCCR1_ValʱΪߵƽ + TIM_OC3Init(TIM3, &TIM_OCInitSructure);//ʼ + TIM_OC3PolarityConfig(TIM3, TIM_OCPreload_Enable);//ʼpwm + + //ͨ4 pwm + TIM_OCInitSructure.TIM_OCMode = TIM_OCMode_PWM1; + TIM_OCInitSructure.TIM_OutputState= TIM_OutputState_Enable; + TIM_OCInitSructure.TIM_Pulse = 0;//ռձ= 50/100 + TIM_OCInitSructure.TIM_OCPolarity = TIM_OCPolarity_High;//ʱֵСCCR1_ValʱΪߵƽ + TIM_OC4Init(TIM3, &TIM_OCInitSructure);//ʼ + TIM_OC4PolarityConfig(TIM3, TIM_OCPreload_Enable);//ʼpwm + + TIM_ARRPreloadConfig(TIM3, ENABLE);//Զװ + TIM_Cmd(TIM3, ENABLE);//ʱ +} + + +//ռձ = TIMx_CCRx / TIMx_ARR +//moto_rֵmoto_lֵ. ֵ 0-100 +void MOTO_PWM_Out(u16 moto_l, u16 moto_r) +{ + + TIM_OCInitTypeDef TIM_OCInitSructure; + + TIM_OCInitSructure.TIM_OCMode = TIM_OCMode_PWM1; + TIM_OCInitSructure.TIM_OutputState= TIM_OutputState_Enable; + //CH3 ҵ + TIM_OCInitSructure.TIM_Pulse = moto_l;//ռձ= ccr/100 + TIM_OC3Init(TIM3, &TIM_OCInitSructure);//ʼ + TIM_OC3PolarityConfig(TIM3, TIM_OCPreload_Enable);//ʼpwm + + //CH4 + TIM_OCInitSructure.TIM_Pulse = moto_r;//ռձ= ccr /100 + TIM_OC4Init(TIM3, &TIM_OCInitSructure);//ʼ + TIM_OC4PolarityConfig(TIM3, TIM_OCPreload_Enable);//ʼpwm + + TIM_ARRPreloadConfig(TIM3, ENABLE);//Զװ + +} + +//***************************ʱ1ʼ ϵͳÿ10msһжϣݣpwm***************************// +void Timer6_Init(void) +{ + TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; + + NVIC_InitTypeDef NVIC_InitStructure; + + RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE); + TIM_TimeBaseStructure.TIM_Period = 9999;//ԶװؼĴڵֵ壨ֵ) + TIM_TimeBaseStructure.TIM_Prescaler = 719;//ʱӷƵϵ + TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;//ⲿʱӽвʱӷƵ + TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//ϼ + TIM_TimeBaseStructure.TIM_RepetitionCounter=0; //߼ʱ1öʱſļƵһʼ72mhz ֵעĵط + TIM_TimeBaseInit(TIM6,&TIM_TimeBaseStructure);//ʼ + + TIM_ClearFlag(TIM6, TIM_FLAG_Update); + TIM_ITConfig(TIM6, TIM_IT_Update, ENABLE); + + NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); + NVIC_InitStructure.NVIC_IRQChannel=TIM6_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=5; + NVIC_InitStructure.NVIC_IRQChannelSubPriority=0; + NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; + NVIC_Init(&NVIC_InitStructure); + + TIM_Cmd(TIM6, ENABLE);//ʱ +} + +//***************************ʱ2ʼ ʹñ***************************// +// +//PA0---- A ߵB2Bʶ +//PA1---- B ߵB2Aʶ +void Encoder_Init_TIM2(void) +{ + TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; + TIM_ICInitTypeDef TIM_ICInitStructure; + GPIO_InitTypeDef GPIO_InitStructure; + RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);//ʹܶʱ4ʱ + RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//ʹPB˿ʱ + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1; //˿ + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; // + GPIO_Init(GPIOA, &GPIO_InitStructure); //趨ʼGPIOB + + TIM_TimeBaseStructInit(&TIM_TimeBaseStructure); + TIM_TimeBaseStructure.TIM_Prescaler = 0x0; // ԤƵ + TIM_TimeBaseStructure.TIM_Period = ENCODER_TIM_PERIOD; //趨Զװֵ + TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;//ѡʱӷƵƵ + TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;////TIMϼ + TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); + TIM_EncoderInterfaceConfig(TIM2, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);//ʹñģʽ3 + TIM_ICStructInit(&TIM_ICInitStructure); + TIM_ICInitStructure.TIM_ICFilter = 10; + TIM_ICInit(TIM2, &TIM_ICInitStructure); + TIM_ClearFlag(TIM2, TIM_FLAG_Update);//TIMĸ±־λ + TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); + //Reset counter + TIM_SetCounter(TIM2,0); + TIM_Cmd(TIM2, ENABLE); +} + +//***************************ʱ4ʼ ʹñ***************************// +//ҵ +//PB6---- B ߵB1Aʶ +//PB7---- A ߵB1Bʶ +void Encoder_Init_TIM4(void) +{ + TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; + TIM_ICInitTypeDef TIM_ICInitStructure; + GPIO_InitTypeDef GPIO_InitStructure; + RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);//ʹܶʱ4ʱ + RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//ʹPB˿ʱ + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7; //˿ + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; // + GPIO_Init(GPIOB, &GPIO_InitStructure); //趨ʼGPIOB + + TIM_TimeBaseStructInit(&TIM_TimeBaseStructure); + TIM_TimeBaseStructure.TIM_Prescaler = 0x0; // ԤƵ + TIM_TimeBaseStructure.TIM_Period = ENCODER_TIM_PERIOD; //趨Զװֵ + TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;//ѡʱӷƵƵ + TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;////TIMϼ + TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); + TIM_EncoderInterfaceConfig(TIM4, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);//ʹñģʽ3 + TIM_ICStructInit(&TIM_ICInitStructure); + TIM_ICInitStructure.TIM_ICFilter = 10; + TIM_ICInit(TIM4, &TIM_ICInitStructure); + TIM_ClearFlag(TIM4, TIM_FLAG_Update);//TIMĸ±־λ + TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE); + //Reset counter + TIM_SetCounter(TIM4,0); + TIM_Cmd(TIM4, ENABLE); + + +} + +/************************************************************************** +ܣλʱȡ +ڲʱ + ֵٶֵ +**************************************************************************/ +int Read_Encoder(u8 TIMX) +{ + int Encoder_TIM; + switch(TIMX) + { + case 2: Encoder_TIM= (short)TIM2 -> CNT; TIM2 -> CNT=30000;break; + case 3: Encoder_TIM= (short)TIM3 -> CNT; TIM3 -> CNT=30000;break; + case 4: Encoder_TIM= (short)TIM4 -> CNT; TIM4 -> CNT=30000;break; + default: Encoder_TIM=0; + } + return Encoder_TIM; +} + +/************************************************************************** +ܣTIM4жϷ +ڲ + ֵ +**************************************************************************/ +void TIM4_IRQHandler(void) +{ + if(TIM4->SR&0X0001)//ж + { + } + TIM4->SR&=~(1<<0);//жϱ־λ +} +/************************************************************************** +ܣTIM2жϷ +ڲ + ֵ +**************************************************************************/ +void TIM2_IRQHandler(void) +{ + if(TIM2->SR&0X0001)//ж + { + } + TIM2->SR&=~(1<<0);//жϱ־λ +} diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_timer.h b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_timer.h new file mode 100644 index 0000000..552c914 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_timer.h @@ -0,0 +1,19 @@ +#ifndef __BSP_TIMER3_H +#define __BSP_TIMER3_H + + +#include "stm32f10x.h" + + +#define ENCODER_TIM_PERIOD (u16)(60000) // number of pulses per revolution +void Timer3_Init(u32 arr,int psc); +void MOTO_PWM_Init(u32 arr, int psc); +void MOTO_PWM_Out(u16 moto_r, u16 moto_l); +void Timer6_Init(void); +void Encoder_Init_TIM2(void); +void Encoder_Init_TIM4(void); +int Read_Encoder(u8 TIMX); + + +#endif + diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_usart.c b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_usart.c new file mode 100644 index 0000000..052d521 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_usart.c @@ -0,0 +1,162 @@ +/* +******************************************************************************************************** +ļbsp_usart.c + ܣں + ע + https://shop60670850.taobao.com + ߣlilianhe + : 2017-2-8 +********************************************************************************************************* +*/ + +/* +******************************************************************************************************** +־ +1.2017-2-8дuart1 + +********************************************************************************************************* +*/ +#include "bsp_usart.h" +#include + +volatile unsigned char *rx_address; +volatile unsigned int rx_count; +volatile unsigned int rx_length; + +/* +******************************************************************************************************** +ƣvoid USART1_Init(u32 bound) +ܣ1ʼ +ӲӣPA9----TXDPA10----RXD + עboundΪò + : 2017-2-8 +********************************************************************************************************* +*/ +void USART1_Init(u32 bound) +{ + GPIO_InitTypeDef GPIO_InitStructure; + USART_InitTypeDef USART_InitStructure; + + /* config USART1 clock */ + RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE); + + /* USART1 GPIO config */ + /* Configure USART1 Tx (PA.09) as alternate function push-pull */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_Init(GPIOA, &GPIO_InitStructure); + /* Configure USART1 Rx (PA.10) as input floating */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; + GPIO_Init(GPIOA, &GPIO_InitStructure); + + /* USART1 mode config */ + USART_InitStructure.USART_BaudRate = bound; + USART_InitStructure.USART_WordLength = USART_WordLength_8b; + USART_InitStructure.USART_StopBits = USART_StopBits_1; + USART_InitStructure.USART_Parity = USART_Parity_No ; + USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; + USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; + USART_Init(USART1, &USART_InitStructure); + + /* ʹܴ1ж */ + USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); + + USART_Cmd(USART1, ENABLE); +} + + + + +/// ضc⺯printfUSART1 +int fputc(int ch, FILE *f) +{ + /* һֽݵUSART1 */ + USART_SendData(USART1, (uint8_t) ch); + + /* ȴ */ + while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); + + return (ch); +} + +/// ضc⺯scanfUSART1 +int fgetc(FILE *f) +{ + /* ȴ1 */ + while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET); + + return (int)USART_ReceiveData(USART1); +} +/* +******************************************************************************************************** +ƣvoid USART1_Send(unsigned char *tx_buf, int len) +ܣ1ͺ +ӲӣPA9----TXDPA10----RXD + ע + : 2017-2-8 +********************************************************************************************************* +*/ +void USART1_Send(unsigned char *tx_buf, int len) +{ + USART_ClearFlag(USART1, USART_FLAG_TC); + USART_ClearITPendingBit(USART1, USART_FLAG_TXE); + while(len--) + { + USART_SendData(USART1, *tx_buf); + while(USART_GetFlagStatus(USART1, USART_FLAG_TC) != 1); + USART_ClearFlag(USART1, USART_FLAG_TC); + USART_ClearITPendingBit(USART1, USART_FLAG_TXE); + tx_buf++; + } + +} + +/* +******************************************************************************************************** +ƣvoid USART1_Receive(unsigned char *rx_buf, int len) +ܣ1պ +ӲӣPA9----TXDPA10----RXD + ע + : 2017-2-8 +********************************************************************************************************* +*/ +void USART1_Receive(unsigned char *rx_buf, int len) +{ + rx_count = 0; + rx_length = len; + rx_address = rx_buf; +} +/* +******************************************************************************************************** +ƣvoid USART1_IRQHandler(void) +ܣ1жϷ +ӲӣPA9----TXDPA10----RXD + ע + : 2017-2-8 +********************************************************************************************************* +*/ +void USART1_IRQHandler(void) +{ + unsigned char Res; + //u8 Res; + if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //ж(յݱ0x0d 0x0aβ) + { + + Res = USART_ReceiveData(USART1); + // printf("[USART1_IRQHandler],Rec_data = %x\r\n", Res); + + if(rx_length > rx_count) + { + *rx_address = Res; + rx_address++; + rx_count++; + } + USART_ClearITPendingBit(USART1, USART_IT_RXNE); + + } +} + + +/*********************************************END OF FILE**********************/ diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_usart.h b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_usart.h new file mode 100644 index 0000000..0d606c5 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/bsp_usart.h @@ -0,0 +1,16 @@ +#ifndef __USART_H +#define __USART_H + +#include "stm32f10x.h" +#include + + +void USART1_Init(u32 bound); +void NVIC_Configuration(void); +int fputc(int ch, FILE *f); +int fgetc(FILE *f); +void USART1_Send(unsigned char *tx_buf, int len); +void USART1_Receive(unsigned char *rx_buf, int len); + + +#endif /* __USART1_H */ diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/delay.c b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/delay.c new file mode 100644 index 0000000..e8c213b --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/delay.c @@ -0,0 +1,96 @@ +/* +******************************************************************************************************** +ļdelay.c + ܣʱus ms + ע + https://shop60670850.taobao.com + ߣlilianhe + : 2017-2-6 +********************************************************************************************************* +*/ + +/* +******************************************************************************************************** +־ +1.2017-2-6жеóѭĴ󣬷ֹʱ׼ȷ,do whileṹ! + +********************************************************************************************************* +*/ + +#include "delay.h" + +static u8 fac_us=0;//usʱ +static u16 fac_ms=0;//msʱ + +/* +******************************************************************************************************** +ƣDelay_Init(u8 SYSCLK) +ܣʼӳٺ +ӲӣSYSTICKʱӹ̶ΪHCLKʱӵ1/8SYSCLK:ϵͳʱ + ע + : 2017-2-6 +********************************************************************************************************* +*/ +void Delay_Init(u8 SYSCLK) +{ +// SysTick->CTRL&=0xfffffffb;//bit2,ѡⲿʱ HCLK/8 + SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //ѡⲿʱ HCLK/8 + fac_us=SYSCLK/8; + fac_ms=(u16)fac_us*1000; +} + +/* +******************************************************************************************************** +ƣDelay_ms(u16 nms) +ܣʱnms +Ӳӣ//SysTick->LOADΪ24λĴ,,ʱΪ: + //nms<=0xffffff*8*1000/SYSCLK + //SYSCLKλΪHz,nmsλΪms + //72M,nms<=1864 + ע + : 2017-2-6 +********************************************************************************************************* +*/ +void Delay_ms(u16 nms) +{ + u32 temp; + SysTick->LOAD=(u32)nms*fac_ms;//ʱ(SysTick->LOADΪ24bit) + SysTick->VAL =0x00; //ռ + SysTick->CTRL=0x01 ; //ʼ + do + { + temp=SysTick->CTRL; + } + while(temp&0x01&&!(temp&(1<<16)));//ȴʱ䵽 + SysTick->CTRL=0x00; //رռ + SysTick->VAL =0X00; //ռ +} + +/* +******************************************************************************************************** +ƣvoid Delay_us(u32 nus) +ܣʱnus +Ӳӣ + ע: + : 2017-2-6 +********************************************************************************************************* +*/ +void Delay_us(u32 nus) +{ + u32 temp; + SysTick->LOAD=nus*fac_us; //ʱ + SysTick->VAL=0x00; //ռ + SysTick->CTRL=0x01 ; //ʼ + do + { + temp=SysTick->CTRL; + } + while(temp&0x01&&!(temp&(1<<16)));//ȴʱ䵽 + SysTick->CTRL=0x00; //رռ + SysTick->VAL =0X00; //ռ +} +//------------------End of File---------------------------- + + + + diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/delay.h b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/delay.h new file mode 100644 index 0000000..d7a960a --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/DRV/delay.h @@ -0,0 +1,38 @@ +#ifndef __DELAY_H +#define __DELAY_H +#include "stm32f10x.h" + +void Delay_Init(u8 SYSCLK); +void Delay_ms(u16 nms); +void Delay_us(u32 nus); + +#endif + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/HARDWARE/MOTO/bluetooth.c b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/HARDWARE/MOTO/bluetooth.c new file mode 100644 index 0000000..f451ae3 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/HARDWARE/MOTO/bluetooth.c @@ -0,0 +1,127 @@ +/******************** (C) COPYRIGHT 2023 GeekRebot ***************************** +* File Name : bluetooth.c +* Current Version : V1.0 & ST 3.5.0 +* Author : zhanli 719901725@qq.com +* Date of Issued : 2023.04.06 zhanli: Create +* Comments : GeekRebot ģ,ʹHC05ģ飬͸ܣ + ʹôڲ࣬ʹstm32 uart2ģֻҪ + ӿڣTXDRXD5VGND + 1. PA2 -> RXD 2.PA3 -> TXD +********************************************************************************/ +#include "bluetooth.h" +#include + +volatile unsigned char *rx2_address; +volatile unsigned int rx2_count; +volatile unsigned int rx2_length; + +/**---------------------------------------------------------------------- +* Function : Bluetooth_Init +* Description : 1ʼ,PA2->RXD, PA3->TXD, boundΪò +* Author : zhanli&719901725@qq.com +* Date : 2023/05/20 zhanli +*---------------------------------------------------------------------**/ +void Bluetooth_Init(u32 bound) +{ + GPIO_InitTypeDef GPIO_InitStructure; + USART_InitTypeDef USART_InitStructure; + NVIC_InitTypeDef NVIC_InitStructure; + + /* Config USART2 clock */ + RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); + RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); + + /* USART2 GPIO config */ + /* Configure USART2 Tx (PA.02) as alternate function push-pull */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_Init(GPIOA, &GPIO_InitStructure); + /* Configure USART2 Rx (PA.03) as input floating */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; + GPIO_Init(GPIOA, &GPIO_InitStructure); + + /* USART2 mode config */ + USART_InitStructure.USART_BaudRate = bound; + USART_InitStructure.USART_WordLength = USART_WordLength_8b; + USART_InitStructure.USART_StopBits = USART_StopBits_1; + USART_InitStructure.USART_Parity = USART_Parity_No ; + USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; + USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; + USART_Init(USART2, &USART_InitStructure); + + + /* Configure the NVIC Preemption Priority Bits */ + NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); + + /* Enable the USARTy Interrupt */ + NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); + + /* ʹܴ1ж */ + USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); + USART_Cmd(USART2, ENABLE); +} + +/**---------------------------------------------------------------------- +* Function : USART2_Send +* Description : ͨUSART2͵ֻ +* Author : zhanli&719901725@qq.com +* Date : 2023/05/20 zhanli +*---------------------------------------------------------------------**/ +void USART2_Send(unsigned char *tx_buf, int len) +{ + USART_ClearFlag(USART2, USART_FLAG_TC); + USART_ClearITPendingBit(USART2, USART_FLAG_TXE); + while(len--) + { + USART_SendData(USART2, *tx_buf); + while(USART_GetFlagStatus(USART2, USART_FLAG_TC) != 1); + USART_ClearFlag(USART2, USART_FLAG_TC); + USART_ClearITPendingBit(USART2, USART_FLAG_TXE); + tx_buf++; + } +} + + +/**---------------------------------------------------------------------- +* Function : USART2_Receive +* Description : ܣֻ +* Author : zhanli&719901725@qq.com +* Date : 2023/05/20 zhanli +*---------------------------------------------------------------------**/ +void USART2_Receive(unsigned char *rx_buf, int len) +{ + rx2_count = 0; + rx2_length = len; + rx2_address = rx_buf; +} + + +/**---------------------------------------------------------------------- +* Function : USART2_Receive +* Description : 2жϺ +* Author : zhanli&719901725@qq.com +* Date : 2023/05/20 zhanli +*---------------------------------------------------------------------**/ +void USART2_IRQHandler(void) +{ + unsigned char Res; + // ж(յݱ0x0d 0x0aβ) + if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) + { + Res = USART_ReceiveData(USART2); + + if(rx2_length > rx2_count) + { + *rx2_address = Res; + rx2_address++; + rx2_count++; + } + USART_ClearITPendingBit(USART2, USART_IT_RXNE); + } +} diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/HARDWARE/MOTO/bluetooth.h b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/HARDWARE/MOTO/bluetooth.h new file mode 100644 index 0000000..842c7f7 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/HARDWARE/MOTO/bluetooth.h @@ -0,0 +1,31 @@ +#ifndef __BLUETOOTH_H +#define __BLUETOOTH_H + +#include "bsp_sys.h" +#include "stm32f10x.h" + +/**---------------------------------------------------------------------- +* Function : Bluetooth_Init +* Description : 1ʼ,PA2->RXD, PA3->TXD, boundΪò +* Author : zhanli&719901725@qq.com +* Date : 2023/05/20 zhanli +*---------------------------------------------------------------------**/ +void Bluetooth_Init(u32 bound); + +/**---------------------------------------------------------------------- +* Function : USART2_Send +* Description : ͨUSART2͵ֻ +* Author : zhanli&719901725@qq.com +* Date : 2023/05/20 zhanli +*---------------------------------------------------------------------**/ +void USART2_Send(unsigned char *tx_buf, int len); + +/**---------------------------------------------------------------------- +* Function : USART2_Receive +* Description : ܣֻ +* Author : zhanli&719901725@qq.com +* Date : 2023/05/20 zhanli +*---------------------------------------------------------------------**/ +void USART2_Receive(unsigned char *rx_buf, int len); + +#endif diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/HARDWARE/MOTO/car.c b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/HARDWARE/MOTO/car.c new file mode 100644 index 0000000..a5c2044 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/HARDWARE/MOTO/car.c @@ -0,0 +1,97 @@ +/******************** (C) COPYRIGHT 2023 GeekRebot ***************************** +* File Name : car.c +* Current Version : V1.0 & ST 3.5.0 +* Author : zhanli 719901725@qq.com +* Date of Issued : 2023.04.06 zhanli: Create +* Comments : GeekRebot +********************************************************************************/ + +#include "car.h" +#include "pid.h" + +int Encoder_Left,Encoder_Right; // +int Moto_Left,Moto_Right; +int para_L,para_R;// + +//úҪ +int SetPoint=70;//ĿֵλRPMתٶ = setopint*ܳ = setpoint*3.14*0.065(ֱ65mm) λm/min һҪתٺٵĹϵ + + +//ʹüٱ1120ļ䡣ʵʵļٱȵ޸² +//6240=13*4*12013ߣSTM32ģʽ 4Ƶ1120 +//2496=13*4*4813ߣSTM32ģʽ 4Ƶ148 +#define SetPointL SetPoint*2496/600 //ɱΪpidƵDZ +#define SetPointR SetPoint*2496/600 //ɱΪpidƵDZ + +//ֱ +u32 temp1,temp2; +float temp3,temp4; +char set_speed[5];//ʾС +char speed[5];//ʾС +//Time1ʱ1жϷ +//100msʱ + + +void TIM6_IRQHandler(void) +{ + // ﶨʱ + if(TIM_GetFlagStatus(TIM6, TIM_IT_Update) != RESET) + { + TIM_ClearITPendingBit(TIM6, TIM_FLAG_Update); // ж + + LED_Flash(5); // 500ms˸һ + Encoder_Left = Read_Encoder(2) - 30000; // ȡ + Encoder_Right = Read_Encoder(4) - 30000; // ȡ + + //Сƶٶȣٶ + //㳵٣ֺٶȺͳ2 λ m/min + temp3 = (Encoder_Right + Encoder_Left) / 2*600/2496 *0.065*3.1415; + sprintf(speed,"%2.2f",temp3); + OLED_ShowString(48,0, (u8*)speed,16); //OLEDʾ + + if(Encoder_Left < 0)//ת + { + Encoder_Left = -Encoder_Left; + } + if(Encoder_Right < 0) + { + Encoder_Right = -Encoder_Right; + } + para_L=PID_Calc_Left(Encoder_Left,SetPointL); // õʽPIDֵ + para_R=PID_Calc_Right(Encoder_Right,SetPointR); // ҵõʽPIDֵ + + if((para_L<-3)||(para_L>3)) // PID СʱƵ𵴡 + { + Moto_Left +=para_L; + } + if((para_R<-3)||(para_R>3)) // PID СʱƵ𵴡 + { + Moto_Right += para_R; + } + + if(Moto_Left>3500)Moto_Left=3000; //޷ ֹջٵ + if(Moto_Right>3500)Moto_Right=3000; //޷ + + Moto_Left=1500; + Moto_Right=1500; + TIM3->CCR3=Moto_Left; //pwm + TIM3->CCR4=Moto_Right; //pwm + + //ʾpid + showPID(); + //ʾֵֺת λRPM + temp1 = Encoder_Left*600/2496; + OLED_ShowNum(56,2,temp1,3,12); //ʵʼת λRPM + temp2 = Encoder_Right*600/2496; + OLED_ShowNum(56,3,temp2,3,12); //ʵʼת λRPM + + //趨ֵʾ + OLED_ShowNum(48,6,SetPoint,3,12); //ʾ趨ijת λRPM + //temp4 = SetPoint*3.1415*0.065; //趨ٶ + //sprintf(set_speed,"%2.2f",temp4); + //OLED_ShowString(48,7, set_speed,12); //趨ٶ λm/min + } +} + + + diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/HARDWARE/MOTO/car.h b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/HARDWARE/MOTO/car.h new file mode 100644 index 0000000..049e61d --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/HARDWARE/MOTO/car.h @@ -0,0 +1,9 @@ +#ifndef __CAR_H +#define __CAR_H + +#include "stm32f10x.h" +#include "bsp_sys.h" + + + +#endif diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/HARDWARE/MOTO/moto.c b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/HARDWARE/MOTO/moto.c new file mode 100644 index 0000000..0db28ea --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/HARDWARE/MOTO/moto.c @@ -0,0 +1,126 @@ +/******************** (C) COPYRIGHT 2023 GeekRebot ***************************** +* File Name : moto.c +* Current Version : V1.0 & ST 3.5.0 +* Author : zhanli 719901725@qq.com +* Date of Issued : 2023.04.06 zhanli: Create +* Comments : ֱٵ +********************************************************************************/ +#include "moto.h" + +/**---------------------------------------------------------------------- +Ӳ˵ + +// +PB0 -> R_PWM +PB13-> R_IN2 +PB12-> R_IN1 + +PB1 -> L_PWM +PB14-> L_IN2 +PB15-> L_IN1 + +PA0 -> LA +PA1 -> LB + +// + +// +PA0---- A ߵB2Bʶ +PA1---- B ߵB2Aʶ + +// ҵ +PB6---- B ߵB1Aʶ +PB7---- A ߵB1Bʶ + +TB6612, СͷӦǰ, LeftӦA,RightӦB +*---------------------------------------------------------------------**/ + +//PWMtimer3 +void MOTO_GPIO_Init(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); /*GPIOʱ*/ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; /*ѡҪƵGPIO*/ + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /*ģʽΪͨ*/ + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /*Ϊ50MHz */ + GPIO_Init(GPIOB, &GPIO_InitStructure); /*ÿ⺯ʼGPIO*/ +} + +// +void MOTO_Left(char state) +{ + if(state == GO)//ǰǰ + { + GPIO_SetBits(GPIOB,GPIO_Pin_12); + GPIO_ResetBits(GPIOB,GPIO_Pin_13); + } + if(state == BACK)//ǰ + { + GPIO_SetBits(GPIOB,GPIO_Pin_13); + GPIO_ResetBits(GPIOB,GPIO_Pin_12); + } + if(state == STOP)//ͣת + { + GPIO_ResetBits(GPIOB,GPIO_Pin_12); + GPIO_ResetBits(GPIOB,GPIO_Pin_13); + } +} + +//ҵ +void MOTO_Right(char state) +{ + if(state == GO)//ǰǰ + { + GPIO_SetBits(GPIOB,GPIO_Pin_15); + GPIO_ResetBits(GPIOB,GPIO_Pin_14); + } + if(state == BACK)//ǰ + { + GPIO_SetBits(GPIOB,GPIO_Pin_14); + GPIO_ResetBits(GPIOB,GPIO_Pin_15); + } + if(state == STOP)//ͣת + { + GPIO_ResetBits(GPIOB,GPIO_Pin_14); + GPIO_ResetBits(GPIOB,GPIO_Pin_15); + } +} + +//***************************ǰ***************************// +//ֻҪ()״̬ͿԸıת +void Car_Go(void) +{ + // ǰ //ҵ ǰ + MOTO_Left(GO); MOTO_Right(GO); +} + +void Car_Back(void) +{ + // //ҵ + MOTO_Left(BACK); MOTO_Right(BACK); +} + +//***************************תȦ***************************// +void Car_Turn_Left(void) +{ + // //ҵ ǰ + MOTO_Left(BACK); MOTO_Right(GO); +} + + +//***************************תȦ***************************// +void Car_Turn_Right(void) +{ + // ǰ //ҵ + MOTO_Left(GO); MOTO_Right(BACK); +} + +//***************************ͣ***************************// +void Car_Stop(void) +{ + // ͣ //ҵ ͣ + MOTO_Left(STOP); MOTO_Right(STOP); +} + + + diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/HARDWARE/MOTO/moto.h b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/HARDWARE/MOTO/moto.h new file mode 100644 index 0000000..619740e --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/HARDWARE/MOTO/moto.h @@ -0,0 +1,25 @@ +#ifndef __MOTO_H +#define __MOTO_H + +#include "stm32f10x.h" +//̼ķֵ +//Ӳ˵ +#define GO 0//״̬ ǰ +#define BACK 1// +#define STOP 2//ͣ + + + +// +void MOTO_Left(char state); +//ҵ +void MOTO_Right(char state); + +void MOTO_GPIO_Init(void); + +void Car_Go(void); +void Car_Back(void); +void Car_Turn_Right(void); +void Car_Turn_Left(void); +void Car_Stop(void); +#endif diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/HARDWARE/OLED/bmp.h b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/HARDWARE/OLED/bmp.h new file mode 100644 index 0000000..0775126 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/HARDWARE/OLED/bmp.h @@ -0,0 +1,80 @@ +////////////////////////////////////////////////////////////////////////////////// +// +// +//洢ͼƬݣͼƬСΪ64*32 +// +///////////////////////////////////////////////////////////////////////////////// + +#ifndef __BMP_H +#define __BMP_H +unsigned char BMP1[] = +{0x00,0x06,0x0A,0xFE,0x0A,0xC6,0x00,0xE0,0x00,0xF0,0x00,0xF8,0x00,0x00,0x00,0x00, +0x00,0x00,0xFE,0x7D,0xBB,0xC7,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xC7,0xBB,0x7D, +0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08, +0x0C,0xFE,0xFE,0x0C,0x08,0x20,0x60,0xFE,0xFE,0x60,0x20,0x00,0x00,0x00,0x78,0x48, +0xFE,0x82,0xBA,0xBA,0x82,0xBA,0xBA,0x82,0xBA,0xBA,0x82,0xBA,0xBA,0x82,0xFE,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF, +0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0xFF,0xFF,0x00,0x00,0xFE,0xFF,0x03, +0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0xFF,0xFE,0x00,0x00,0x00,0x00,0xC0,0xC0, +0xC0,0x00,0x00,0x00,0x00,0xFE,0xFF,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, +0xFF,0xFE,0x00,0x00,0xFE,0xFF,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0xFF, +0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x0C, +0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0xFF,0xFF,0x00,0x00,0x00,0x00,0xE1,0xE1, +0xE1,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0xFF, +0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x1F, +0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1F,0x0F,0x00,0x00,0x0F,0x1F,0x18, +0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x0F,0x1F,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +0x1F,0x0F,0x00,0x00,0x0F,0x1F,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1F, +0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x8C,0x42,0x22,0x12,0x0C,0x00,0xFC,0x02,0x02,0x02,0xFC,0x00,0x00,0x04, +0xFE,0x00,0x00,0x00,0x20,0x58,0x44,0xFE,0x40,0x00,0x10,0x10,0x10,0x10,0x10,0x00, +0x00,0x04,0xFE,0x00,0x00,0x00,0xFC,0x02,0x02,0x02,0xFC,0x00,0x10,0x10,0x10,0x10, +0x10,0x00,0xFC,0x02,0x02,0x02,0xFC,0x00,0x00,0x04,0xFE,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x24,0xA4,0x2E,0x24,0xE4,0x24,0x2E,0xA4,0x24,0x00,0x00,0x00,0xF8,0x4A,0x4C, +0x48,0xF8,0x48,0x4C,0x4A,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x01, +0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x20,0x10,0x10, +0x10,0x10,0x20,0xC0,0x00,0x00,0xC0,0x20,0x10,0x10,0x10,0x10,0x20,0xC0,0x00,0x00, +0x00,0x12,0x0A,0x07,0x02,0x7F,0x02,0x07,0x0A,0x12,0x00,0x00,0x00,0x0B,0x0A,0x0A, +0x0A,0x7F,0x0A,0x0A,0x0A,0x0B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x40,0x40, +0x40,0x50,0x20,0x5F,0x80,0x00,0x1F,0x20,0x40,0x40,0x40,0x50,0x20,0x5F,0x80,0x00,/*"C:\Users\evk\Desktop\??2014.bmp",0*/ + +}; + +#endif + + diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/HARDWARE/OLED/oled.c b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/HARDWARE/OLED/oled.c new file mode 100644 index 0000000..fedd293 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/HARDWARE/OLED/oled.c @@ -0,0 +1,302 @@ +/* +******************************************************************************************************** +ļoled.c + ܣolediicʽ + ע + https://shop60670850.taobao.com + ߣlilianhe + : 2017-2-8 +********************************************************************************************************* +*/ + +/* +******************************************************************************************************** +־ +1.2017-2-8޸oledײ㣬ͨok +2.2017-2-8Ӳ޸ģSCL PA10SDA PA11 +********************************************************************************************************* +*/ +#include "oled.h" +#include "stdlib.h" +#include "oledfont.h" +#include "delay.h" +#include "bsp_iic.h" +//OLEDԴ +//Ÿʽ. +//[0]0 1 2 3 ... 127 +//[1]0 1 2 3 ... 127 +//[2]0 1 2 3 ... 127 +//[3]0 1 2 3 ... 127 +//[4]0 1 2 3 ... 127 +//[5]0 1 2 3 ... 127 +//[6]0 1 2 3 ... 127 +//[7]0 1 2 3 ... 127 + +void Write_IIC_Command(unsigned char IIC_Command) +{ + IIC_Start(); + IIC_Send_Byte(0x78); //Slave address,SA0=0 + IIC_Wait_Ack(); + IIC_Send_Byte(0x00); //write command + IIC_Wait_Ack(); + IIC_Send_Byte(IIC_Command); + IIC_Wait_Ack(); + IIC_Stop(); +} +/********************************************** +// IIC Write Data +**********************************************/ +void Write_IIC_Data(unsigned char IIC_Data) +{ + IIC_Start(); + IIC_Send_Byte(0x78); //D/C#=0; R/W#=0 + IIC_Wait_Ack(); + IIC_Send_Byte(0x40); //write data + IIC_Wait_Ack(); + IIC_Send_Byte(IIC_Data); + IIC_Wait_Ack(); + IIC_Stop(); +} +void OLED_WR_Byte(unsigned dat,unsigned cmd) +{ + if(cmd) + { + + Write_IIC_Data(dat); + + } + else { + Write_IIC_Command(dat); + + } + + +} + + +/******************************************** +// fill_Picture +********************************************/ +void fill_picture(unsigned char fill_Data) +{ + unsigned char m,n; + for(m=0;m<8;m++) + { + OLED_WR_Byte(0xb0+m,0); //page0-page1 + OLED_WR_Byte(0x00,0); //low column start address + OLED_WR_Byte(0x10,0); //high column start address + for(n=0;n<128;n++) + { + OLED_WR_Byte(fill_Data,1); + } + } +} + + +/***********************Delay****************************************/ +void Delay_50ms(unsigned int Del_50ms) +{ + unsigned int m; + for(;Del_50ms>0;Del_50ms--) + for(m=6245;m>0;m--); +} + +void Delay_1ms(unsigned int Del_1ms) +{ + unsigned char j; + while(Del_1ms--) + { + for(j=0;j<123;j++); + } +} + +// + +void OLED_Set_Pos(unsigned char x, unsigned char y) +{ + OLED_WR_Byte(0xb0+y,OLED_CMD); + OLED_WR_Byte(((x&0xf0)>>4)|0x10,OLED_CMD); + OLED_WR_Byte((x&0x0f),OLED_CMD); +} +//OLEDʾ +void OLED_Display_On(void) +{ + OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC + OLED_WR_Byte(0X14,OLED_CMD); //DCDC ON + OLED_WR_Byte(0XAF,OLED_CMD); //DISPLAY ON +} +//رOLEDʾ +void OLED_Display_Off(void) +{ + OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC + OLED_WR_Byte(0X10,OLED_CMD); //DCDC OFF + OLED_WR_Byte(0XAE,OLED_CMD); //DISPLAY OFF +} +//,,ĻǺɫ!ûһ!!! +void OLED_Clear(void) +{ + u8 i,n; + for(i=0;i<8;i++) + { + OLED_WR_Byte (0xb0+i,OLED_CMD); //ҳַ0~7 + OLED_WR_Byte (0x00,OLED_CMD); //ʾλáе͵ַ + OLED_WR_Byte (0x10,OLED_CMD); //ʾλáиߵַ + for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA); + } //ʾ +} +void OLED_On(void) +{ + u8 i,n; + for(i=0;i<8;i++) + { + OLED_WR_Byte (0xb0+i,OLED_CMD); //ҳַ0~7 + OLED_WR_Byte (0x00,OLED_CMD); //ʾλáе͵ַ + OLED_WR_Byte (0x10,OLED_CMD); //ʾλáиߵַ + for(n=0;n<128;n++)OLED_WR_Byte(1,OLED_DATA); + } //ʾ +} +//ָλʾһַ,ַ +//x:0~127 +//y:0~63 +//mode:0,ʾ;1,ʾ +//size:ѡ 16/12 +void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size) +{ + unsigned char c=0,i=0; + c=chr-' ';//õƫƺֵ + if(x>Max_Column-1){x=0;y=y+2;} + if(Char_Size ==16) + { + OLED_Set_Pos(x,y); + for(i=0;i<8;i++) + OLED_WR_Byte(F8X16[c*16+i],OLED_DATA); + OLED_Set_Pos(x,y+1); + for(i=0;i<8;i++) + OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA); + } + else { + OLED_Set_Pos(x,y); + for(i=0;i<6;i++) + OLED_WR_Byte(F6x8[c][i],OLED_DATA); + + } +} +//m^n +u32 oled_pow(u8 m,u8 n) +{ + u32 result=1; + while(n--)result*=m; + return result; +} +//ʾ2 +//x,y : +//len :ֵλ +//size:С +//mode:ģʽ 0,ģʽ;1,ģʽ +//num:ֵ(0~4294967295); +void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size2) +{ + u8 t,temp; + u8 enshow=0; + for(t=0;t120){x=0;y+=2;} + j++; + } +} +//ʾ +void OLED_ShowCHinese(u8 x,u8 y,u8 no) +{ + u8 t,adder=0; + OLED_Set_Pos(x,y); + for(t=0;t<16;t++) + { + OLED_WR_Byte(Hzk[2*no][t],OLED_DATA); + adder+=1; + } + OLED_Set_Pos(x,y+1); + for(t=0;t<16;t++) + { + OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA); + adder+=1; + } +} +/***********ʾʾBMPͼƬ12864ʼ(x,y),xķΧ0127yΪҳķΧ07*****************/ +void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[]) +{ + unsigned int j=0; + unsigned char x,y; + if(y1%8==0) y=y1/8; + else y=y1/8+1; + for(y=y0;y +0x00, 0x02, 0x01, 0x51, 0x09, 0x06,// ? +0x00, 0x32, 0x49, 0x59, 0x51, 0x3E,// @ +0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C,// A +0x00, 0x7F, 0x49, 0x49, 0x49, 0x36,// B +0x00, 0x3E, 0x41, 0x41, 0x41, 0x22,// C +0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C,// D +0x00, 0x7F, 0x49, 0x49, 0x49, 0x41,// E +0x00, 0x7F, 0x09, 0x09, 0x09, 0x01,// F +0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A,// G +0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F,// H +0x00, 0x00, 0x41, 0x7F, 0x41, 0x00,// I +0x00, 0x20, 0x40, 0x41, 0x3F, 0x01,// J +0x00, 0x7F, 0x08, 0x14, 0x22, 0x41,// K +0x00, 0x7F, 0x40, 0x40, 0x40, 0x40,// L +0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F,// M +0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F,// N +0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E,// O +0x00, 0x7F, 0x09, 0x09, 0x09, 0x06,// P +0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E,// Q +0x00, 0x7F, 0x09, 0x19, 0x29, 0x46,// R +0x00, 0x46, 0x49, 0x49, 0x49, 0x31,// S +0x00, 0x01, 0x01, 0x7F, 0x01, 0x01,// T +0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F,// U +0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F,// V +0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F,// W +0x00, 0x63, 0x14, 0x08, 0x14, 0x63,// X +0x00, 0x07, 0x08, 0x70, 0x08, 0x07,// Y +0x00, 0x61, 0x51, 0x49, 0x45, 0x43,// Z +0x00, 0x00, 0x7F, 0x41, 0x41, 0x00,// [ +0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55,// 55 +0x00, 0x00, 0x41, 0x41, 0x7F, 0x00,// ] +0x00, 0x04, 0x02, 0x01, 0x02, 0x04,// ^ +0x00, 0x40, 0x40, 0x40, 0x40, 0x40,// _ +0x00, 0x00, 0x01, 0x02, 0x04, 0x00,// ' +0x00, 0x20, 0x54, 0x54, 0x54, 0x78,// a +0x00, 0x7F, 0x48, 0x44, 0x44, 0x38,// b +0x00, 0x38, 0x44, 0x44, 0x44, 0x20,// c +0x00, 0x38, 0x44, 0x44, 0x48, 0x7F,// d +0x00, 0x38, 0x54, 0x54, 0x54, 0x18,// e +0x00, 0x08, 0x7E, 0x09, 0x01, 0x02,// f +0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C,// g +0x00, 0x7F, 0x08, 0x04, 0x04, 0x78,// h +0x00, 0x00, 0x44, 0x7D, 0x40, 0x00,// i +0x00, 0x40, 0x80, 0x84, 0x7D, 0x00,// j +0x00, 0x7F, 0x10, 0x28, 0x44, 0x00,// k +0x00, 0x00, 0x41, 0x7F, 0x40, 0x00,// l +0x00, 0x7C, 0x04, 0x18, 0x04, 0x78,// m +0x00, 0x7C, 0x08, 0x04, 0x04, 0x78,// n +0x00, 0x38, 0x44, 0x44, 0x44, 0x38,// o +0x00, 0xFC, 0x24, 0x24, 0x24, 0x18,// p +0x00, 0x18, 0x24, 0x24, 0x18, 0xFC,// q +0x00, 0x7C, 0x08, 0x04, 0x04, 0x08,// r +0x00, 0x48, 0x54, 0x54, 0x54, 0x20,// s +0x00, 0x04, 0x3F, 0x44, 0x40, 0x20,// t +0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C,// u +0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C,// v +0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C,// w +0x00, 0x44, 0x28, 0x10, 0x28, 0x44,// x +0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C,// y +0x00, 0x44, 0x64, 0x54, 0x4C, 0x44,// z +0x14, 0x14, 0x14, 0x14, 0x14, 0x14,// horiz lines +}; +/****************************************8*16ĵ************************************/ +const unsigned char F8X16[]= +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// 0 + 0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,//! 1 + 0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" 2 + 0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00,//# 3 + 0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00,//$ 4 + 0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00,//% 5 + 0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10,//& 6 + 0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//' 7 + 0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,//( 8 + 0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,//) 9 + 0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,//* 10 + 0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00,//+ 11 + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00,//, 12 + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,//- 13 + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,//. 14 + 0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,/// 15 + 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,//0 16 + 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//1 17 + 0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,//2 18 + 0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,//3 19 + 0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,//4 20 + 0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,//5 21 + 0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,//6 22 + 0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,//7 23 + 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,//8 24 + 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,//9 25 + 0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,//: 26 + 0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,//; 27 + 0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,//< 28 + 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,//= 29 + 0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,//> 30 + 0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00,//? 31 + 0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00,//@ 32 + 0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,//A 33 + 0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,//B 34 + 0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,//C 35 + 0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,//D 36 + 0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,//E 37 + 0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,//F 38 + 0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,//G 39 + 0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,//H 40 + 0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//I 41 + 0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,//J 42 + 0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,//K 43 + 0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,//L 44 + 0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,//M 45 + 0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,//N 46 + 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,//O 47 + 0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,//P 48 + 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,//Q 49 + 0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,//R 50 + 0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,//S 51 + 0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//T 52 + 0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//U 53 + 0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,//V 54 + 0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00,//W 55 + 0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,//X 56 + 0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//Y 57 + 0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,//Z 58 + 0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,//[ 59 + 0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00,//\ 60 + 0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,//] 61 + 0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//^ 62 + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,//_ 63 + 0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//` 64 + 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,//a 65 + 0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,//b 66 + 0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,//c 67 + 0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,//d 68 + 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,//e 69 + 0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//f 70 + 0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,//g 71 + 0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//h 72 + 0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//i 73 + 0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,//j 74 + 0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,//k 75 + 0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//l 76 + 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,//m 77 + 0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//n 78 + 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//o 79 + 0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00,//p 80 + 0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80,//q 81 + 0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,//r 82 + 0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,//s 83 + 0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,//t 84 + 0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,//u 85 + 0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00,//v 86 + 0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,//w 87 + 0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00,//x 88 + 0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00,//y 89 + 0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,//z 90 + 0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,//{ 91 + 0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,//| 92 + 0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00,//} 93 + 0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//~ 94 +}; +char Hzk[][32]={ + +/*-- : --*/ +/*-- 12; ¶ӦĵΪx=16x16 --*/ +{0x40,0x40,0x42,0xCC,0x00,0x40,0xA0,0x9E,0x82,0x82,0x82,0x9E,0xA0,0x20,0x20,0x00}, +{0x00,0x00,0x00,0x3F,0x90,0x88,0x40,0x43,0x2C,0x10,0x28,0x46,0x41,0x80,0x80,0x00}, + +/*-- : --*/ +/*-- 12; ¶ӦĵΪx=16x16 --*/ +{0x10,0x0C,0x44,0x44,0x44,0x44,0x45,0xC6,0x44,0x44,0x44,0x44,0x44,0x14,0x0C,0x00}, +{0x80,0x40,0x20,0x1E,0x20,0x40,0x40,0x7F,0x44,0x44,0x44,0x44,0x44,0x40,0x40,0x00}, + +/*-- : --*/ +/*-- 12; ¶ӦĵΪx=16x16 --*/ +{0x00,0x08,0x88,0x48,0x28,0x18,0x0F,0xE8,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00}, +{0x08,0x08,0x09,0x09,0x09,0x09,0x09,0xFF,0x09,0x09,0x09,0x09,0x09,0x08,0x08,0x00}, + +/*-- : --*/ +/*-- 12; ¶ӦĵΪx=16x16 --*/ +{0x40,0x40,0x42,0xCC,0x00,0x04,0xF4,0x94,0x94,0xFF,0x94,0x94,0xF4,0x04,0x00,0x00}, +{0x00,0x40,0x20,0x1F,0x20,0x48,0x44,0x42,0x41,0x5F,0x41,0x42,0x44,0x48,0x40,0x00}, + +/*-- : --*/ +/*-- 12; ¶ӦĵΪx=16x16 --*/ +{0x08,0x08,0x08,0x08,0x88,0x78,0x0F,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00}, +{0x20,0x10,0x48,0x46,0x41,0x41,0x41,0x41,0x7F,0x41,0x41,0x41,0x41,0x40,0x40,0x00}, + +/*-- : --*/ +/*-- 12; ¶ӦĵΪx=16x16 --*/ +{0x08,0x08,0x08,0x08,0xC8,0x38,0x0F,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00}, +{0x08,0x04,0x02,0x01,0xFF,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0xFF,0x00,0x00,0x00}, + +/*-- : --*/ +/*-- 12; ¶ӦĵΪx=16x16 --*/ +{0xC8,0xB8,0x8F,0xE8,0x88,0xC8,0x20,0x90,0x0C,0x03,0x0C,0x90,0x20,0x40,0x40,0x00}, +{0x08,0x18,0x08,0xFF,0x04,0x04,0x00,0x3F,0x44,0x42,0x41,0x40,0x40,0x70,0x00,0x00}, + +/*-- : --*/ +/*-- 12; ¶ӦĵΪx=16x16 --*/ +{0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0x25,0x26,0x24,0xFC,0x24,0x24,0x24,0x04,0x00}, +{0x40,0x30,0x8F,0x80,0x84,0x4C,0x55,0x25,0x25,0x25,0x55,0x4C,0x80,0x80,0x80,0x00}, + + + +}; + +#endif + + diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/HARDWARE/PID/pid.c b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/HARDWARE/PID/pid.c new file mode 100644 index 0000000..d1d73bb --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/HARDWARE/PID/pid.c @@ -0,0 +1,71 @@ +/******************** (C) COPYRIGHT 2023 GeekRebot ***************************** +* File Name : pid.c +* Current Version : V1.0 & ST 3.5.0 +* Author : zhanli 719901725@qq.com +* Date of Issued : 2023.04.06 zhanli: Create +* Comments : GeekRebotĵPIDƲ +********************************************************************************/ +#include "pid.h" + +/* ʽpid,PIDغ,趨ԵӰdz */ +float Proportion = 0.6; // Proportional Const +float Integral = 0.1; // ֳ Integral Const +float Derivative = 0; // ΢ֳ Derivative Const + +//ʾpidOLED +void showPID(void) +{ + float temp1,temp2,temp3; + char PID_P[3],PID_I[3],PID_D[3]; + temp1 = Proportion; + sprintf(PID_P,"%1.1f",temp1); + OLED_ShowString(16,4, (u8*)PID_P,16); + + temp2 = Integral; + sprintf(PID_I,"%1.1f",temp2); + OLED_ShowString(56,4, (u8*)PID_I,16); + + temp3 = Derivative; + sprintf(PID_D,"%1.1f",temp3); + OLED_ShowString(104,4, (u8*)PID_D,16); +} + +/********************ʽPID************************************/ +//NextPointǰֵ +//SetPoint趨ֵ + +//PID +int PID_Calc_Left(int NextPoint,int SetPoint) +{ + static int LastError; // Error[-1] + static int PrevError; // Error[-2] + int iError,Outpid; // ǰ + + iError=SetPoint-NextPoint; // + Outpid=(Proportion * iError) // E[k] + -(Integral * LastError) // E[k-1] + +(Derivative * PrevError); // E[k-2] + + PrevError=LastError; // 洢´μ + LastError=iError; + return(Outpid); // ֵ +} + + +//PID +int PID_Calc_Right(int NextPoint,int SetPoint) +{ + static int LastError; // Error[-1] + static int PrevError; // Error[-2] + int iError,Outpid; // ǰ + + iError = SetPoint-NextPoint; // + Outpid = (Proportion * iError) // E[k] + -(Integral * LastError) // E[k-1] + +(Derivative * PrevError); // E[k-2] + + PrevError=LastError; // 洢´μ + LastError=iError; + return(Outpid); // ֵ +} + diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/HARDWARE/PID/pid.h b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/HARDWARE/PID/pid.h new file mode 100644 index 0000000..8b7902c --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/HARDWARE/PID/pid.h @@ -0,0 +1,10 @@ +#ifndef __PID_H +#define __PID_H + +#include "stm32f10x.h" +#include "bsp_sys.h" +int PID_Calc_Left(int NextPoint,int Setpoint); +int PID_Calc_Right(int NextPoint,int Setpoint); +void showPID(void); +#endif + diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/core_cm3.c b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/core_cm3.c new file mode 100644 index 0000000..fcff0d1 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/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/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/core_cm3.h b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/core_cm3.h new file mode 100644 index 0000000..7ab7b4b --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/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/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/startup/startup_stm32f10x_cl.s b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/startup/startup_stm32f10x_cl.s new file mode 100644 index 0000000..833ece4 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/startup/startup_stm32f10x_cl.s @@ -0,0 +1,368 @@ +;******************** (C) COPYRIGHT 2011 STMicroelectronics ******************** +;* File Name : startup_stm32f10x_cl.s +;* Author : MCD Application Team +;* Version : V3.5.0 +;* Date : 11-March-2011 +;* 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 >>> +;******************************************************************************* +; 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. +;******************************************************************************* + +; 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 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/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/startup/startup_stm32f10x_hd.s b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/startup/startup_stm32f10x_hd.s new file mode 100644 index 0000000..8a19827 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/startup/startup_stm32f10x_hd.s @@ -0,0 +1,358 @@ +;******************** (C) COPYRIGHT 2011 STMicroelectronics ******************** +;* File Name : startup_stm32f10x_hd.s +;* Author : MCD Application Team +;* Version : V3.5.0 +;* Date : 11-March-2011 +;* 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 >>> +;******************************************************************************* +; 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. +;******************************************************************************* + +; 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 + +;******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE***** diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/startup/startup_stm32f10x_hd_vl.s b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/startup/startup_stm32f10x_hd_vl.s new file mode 100644 index 0000000..2768298 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/startup/startup_stm32f10x_hd_vl.s @@ -0,0 +1,346 @@ +;******************** (C) COPYRIGHT 2011 STMicroelectronics ******************** +;* File Name : startup_stm32f10x_hd_vl.s +;* Author : MCD Application Team +;* Version : V3.5.0 +;* Date : 11-March-2011 +;* 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 >>> +;******************************************************************************* +; 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. +;******************************************************************************* + +; 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 + +;******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE***** diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/startup/startup_stm32f10x_ld.s b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/startup/startup_stm32f10x_ld.s new file mode 100644 index 0000000..f18be4b --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/startup/startup_stm32f10x_ld.s @@ -0,0 +1,297 @@ +;******************** (C) COPYRIGHT 2011 STMicroelectronics ******************** +;* File Name : startup_stm32f10x_ld.s +;* Author : MCD Application Team +;* Version : V3.5.0 +;* Date : 11-March-2011 +;* 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 >>> +;******************************************************************************* +; 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. +;******************************************************************************* + +; 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 + +;******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE***** diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/startup/startup_stm32f10x_ld_vl.s b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/startup/startup_stm32f10x_ld_vl.s new file mode 100644 index 0000000..f7240dc --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/startup/startup_stm32f10x_ld_vl.s @@ -0,0 +1,304 @@ +;******************** (C) COPYRIGHT 2011 STMicroelectronics ******************** +;* File Name : startup_stm32f10x_ld_vl.s +;* Author : MCD Application Team +;* Version : V3.5.0 +;* Date : 11-March-2011 +;* 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 >>> +;******************************************************************************* +; 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. +;******************************************************************************* + +; 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 + +;******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE***** diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/startup/startup_stm32f10x_md.s b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/startup/startup_stm32f10x_md.s new file mode 100644 index 0000000..74da96c --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/startup/startup_stm32f10x_md.s @@ -0,0 +1,307 @@ +;******************** (C) COPYRIGHT 2011 STMicroelectronics ******************** +;* File Name : startup_stm32f10x_md.s +;* Author : MCD Application Team +;* Version : V3.5.0 +;* Date : 11-March-2011 +;* 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 >>> +;******************************************************************************* +; 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. +;******************************************************************************* + +; 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 + +;******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE***** diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/startup/startup_stm32f10x_md_vl.s b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/startup/startup_stm32f10x_md_vl.s new file mode 100644 index 0000000..076aa7f --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/startup/startup_stm32f10x_md_vl.s @@ -0,0 +1,315 @@ +;******************** (C) COPYRIGHT 2011 STMicroelectronics ******************** +;* File Name : startup_stm32f10x_md_vl.s +;* Author : MCD Application Team +;* Version : V3.5.0 +;* Date : 11-March-2011 +;* 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 >>> +;******************************************************************************* +; 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. +;******************************************************************************* + +; 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 + +;******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE***** diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/startup/startup_stm32f10x_xl.s b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/startup/startup_stm32f10x_xl.s new file mode 100644 index 0000000..9fbc640 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/startup/startup_stm32f10x_xl.s @@ -0,0 +1,358 @@ +;******************** (C) COPYRIGHT 2011 STMicroelectronics ******************** +;* File Name : startup_stm32f10x_xl.s +;* Author : MCD Application Team +;* Version : V3.5.0 +;* Date : 11-March-2011 +;* 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 >>> +;******************************************************************************* +; 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. +;******************************************************************************* + +; 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 + +;******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE***** diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/stm32f10x.h b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/stm32f10x.h new file mode 100644 index 0000000..7e3b08d --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/stm32f10x.h @@ -0,0 +1,8337 @@ +/** + ****************************************************************************** + * @file stm32f10x.h + * @author MCD Application Team + * @version V3.5.0 + * @date 11-March-2011 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer Header File. + * This file contains all the peripheral register's definitions, bits + * definitions and memory mapping for STM32F10x Connectivity line, + * High density, High density value line, Medium density, + * Medium density Value line, Low density, Low density Value line + * and XL-density devices. + * + * The file is the unique include file that the application programmer + * is using in the C source code, usually in main.c. This file contains: + * - Configuration section that allows to select: + * - The device used in the target application + * - To use or not the peripherals drivers in application code(i.e. + * code will be based on direct access to peripherals registers + * rather than drivers API), this option is controlled by + * "#define USE_STDPERIPH_DRIVER" + * - To change few application-specific parameters such as the HSE + * crystal frequency + * - Data structures and the address mapping for all peripherals + * - Peripheral's registers declarations and bits definition + * - Macros to access peripherals registers hardware + * + ****************************************************************************** + * @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

+ ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f10x + * @{ + */ + +#ifndef __STM32F10x_H +#define __STM32F10x_H + +#ifdef __cplusplus + extern "C" { +#endif + +/** @addtogroup Library_configuration_section + * @{ + */ + +/* Uncomment the line below according to the target STM32 device used in your + application + */ + + +#if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD) && !defined (STM32F10X_MD_VL) && !defined (STM32F10X_HD) && !defined (STM32F10X_HD_VL) && !defined (STM32F10X_XL) && !defined (STM32F10X_CL) + /* #define STM32F10X_LD */ /*!< STM32F10X_LD: STM32 Low density devices */ + /* #define STM32F10X_LD_VL */ /*!< STM32F10X_LD_VL: STM32 Low density Value Line devices */ + /* #define STM32F10X_MD */ /*!< STM32F10X_MD: STM32 Medium density devices */ + /* #define STM32F10X_MD_VL */ /*!< STM32F10X_MD_VL: STM32 Medium density Value Line devices */ + /* #define STM32F10X_HD */ /*!< STM32F10X_HD: STM32 High density devices */ + /* #define STM32F10X_HD_VL */ /*!< STM32F10X_HD_VL: STM32 High density value line devices */ + /* #define STM32F10X_XL */ /*!< STM32F10X_XL: STM32 XL-density devices */ + /* #define STM32F10X_CL */ /*!< STM32F10X_CL: STM32 Connectivity line devices */ +#endif +/* Tip: To avoid modifying this file each time you need to switch between these + devices, you can define the device in your toolchain compiler preprocessor. + + - Low-density devices are STM32F101xx, STM32F102xx and STM32F103xx microcontrollers + where the Flash memory density ranges between 16 and 32 Kbytes. + - Low-density value line devices are STM32F100xx microcontrollers where the Flash + memory density ranges between 16 and 32 Kbytes. + - Medium-density devices are STM32F101xx, STM32F102xx and STM32F103xx microcontrollers + where the Flash memory density ranges between 64 and 128 Kbytes. + - Medium-density value line devices are STM32F100xx microcontrollers where the + Flash memory density ranges between 64 and 128 Kbytes. + - High-density devices are STM32F101xx and STM32F103xx microcontrollers where + the Flash memory density ranges between 256 and 512 Kbytes. + - High-density value line devices are STM32F100xx microcontrollers where the + Flash memory density ranges between 256 and 512 Kbytes. + - XL-density devices are STM32F101xx and STM32F103xx microcontrollers where + the Flash memory density ranges between 512 and 1024 Kbytes. + - Connectivity line devices are STM32F105xx and STM32F107xx microcontrollers. + */ + +#if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD) && !defined (STM32F10X_MD_VL) && !defined (STM32F10X_HD) && !defined (STM32F10X_HD_VL) && !defined (STM32F10X_XL) && !defined (STM32F10X_CL) + #error "Please select first the target STM32F10x device used in your application (in stm32f10x.h file)" +#endif + +#if !defined USE_STDPERIPH_DRIVER +/** + * @brief Comment the line below if you will not use the peripherals drivers. + In this case, these drivers will not be included and the application code will + be based on direct access to peripherals registers + */ + /*#define USE_STDPERIPH_DRIVER*/ +#endif + +/** + * @brief In the following line adjust the value of External High Speed oscillator (HSE) + used in your application + + Tip: To avoid modifying this file each time you need to use different HSE, you + can define the HSE value in your toolchain compiler preprocessor. + */ +#if !defined HSE_VALUE + #ifdef STM32F10X_CL + #define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */ + #else + #define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */ + #endif /* STM32F10X_CL */ +#endif /* HSE_VALUE */ + + +/** + * @brief In the following line adjust the External High Speed oscillator (HSE) Startup + Timeout value + */ +#define HSE_STARTUP_TIMEOUT ((uint16_t)0x0500) /*!< Time out for HSE start up */ + +#define HSI_VALUE ((uint32_t)8000000) /*!< Value of the Internal oscillator in Hz*/ + +/** + * @brief STM32F10x Standard Peripheral Library version number + */ +#define __STM32F10X_STDPERIPH_VERSION_MAIN (0x03) /*!< [31:24] main version */ +#define __STM32F10X_STDPERIPH_VERSION_SUB1 (0x05) /*!< [23:16] sub1 version */ +#define __STM32F10X_STDPERIPH_VERSION_SUB2 (0x00) /*!< [15:8] sub2 version */ +#define __STM32F10X_STDPERIPH_VERSION_RC (0x00) /*!< [7:0] release candidate */ +#define __STM32F10X_STDPERIPH_VERSION ( (__STM32F10X_STDPERIPH_VERSION_MAIN << 24)\ + |(__STM32F10X_STDPERIPH_VERSION_SUB1 << 16)\ + |(__STM32F10X_STDPERIPH_VERSION_SUB2 << 8)\ + |(__STM32F10X_STDPERIPH_VERSION_RC)) + +/** + * @} + */ + +/** @addtogroup Configuration_section_for_CMSIS + * @{ + */ + +/** + * @brief Configuration of the Cortex-M3 Processor and Core Peripherals + */ +#ifdef STM32F10X_XL + #define __MPU_PRESENT 1 /*!< STM32 XL-density devices provide an MPU */ +#else + #define __MPU_PRESENT 0 /*!< Other STM32 devices does not provide an MPU */ +#endif /* STM32F10X_XL */ +#define __NVIC_PRIO_BITS 4 /*!< STM32 uses 4 Bits for the Priority Levels */ +#define __Vendor_SysTickConfig 0 /*!< Set to 1 if different SysTick Config is used */ + +/** + * @brief STM32F10x Interrupt Number Definition, according to the selected device + * in @ref Library_configuration_section + */ +typedef enum IRQn +{ +/****** Cortex-M3 Processor Exceptions Numbers ***************************************************/ + NonMaskableInt_IRQn = -14, /*!< 2 Non Maskable Interrupt */ + MemoryManagement_IRQn = -12, /*!< 4 Cortex-M3 Memory Management Interrupt */ + BusFault_IRQn = -11, /*!< 5 Cortex-M3 Bus Fault Interrupt */ + UsageFault_IRQn = -10, /*!< 6 Cortex-M3 Usage Fault Interrupt */ + SVCall_IRQn = -5, /*!< 11 Cortex-M3 SV Call Interrupt */ + DebugMonitor_IRQn = -4, /*!< 12 Cortex-M3 Debug Monitor Interrupt */ + PendSV_IRQn = -2, /*!< 14 Cortex-M3 Pend SV Interrupt */ + SysTick_IRQn = -1, /*!< 15 Cortex-M3 System Tick Interrupt */ + +/****** STM32 specific Interrupt Numbers *********************************************************/ + WWDG_IRQn = 0, /*!< Window WatchDog Interrupt */ + PVD_IRQn = 1, /*!< PVD through EXTI Line detection Interrupt */ + TAMPER_IRQn = 2, /*!< Tamper Interrupt */ + RTC_IRQn = 3, /*!< RTC global Interrupt */ + FLASH_IRQn = 4, /*!< FLASH global Interrupt */ + RCC_IRQn = 5, /*!< RCC global Interrupt */ + EXTI0_IRQn = 6, /*!< EXTI Line0 Interrupt */ + EXTI1_IRQn = 7, /*!< EXTI Line1 Interrupt */ + EXTI2_IRQn = 8, /*!< EXTI Line2 Interrupt */ + EXTI3_IRQn = 9, /*!< EXTI Line3 Interrupt */ + EXTI4_IRQn = 10, /*!< EXTI Line4 Interrupt */ + DMA1_Channel1_IRQn = 11, /*!< DMA1 Channel 1 global Interrupt */ + DMA1_Channel2_IRQn = 12, /*!< DMA1 Channel 2 global Interrupt */ + DMA1_Channel3_IRQn = 13, /*!< DMA1 Channel 3 global Interrupt */ + DMA1_Channel4_IRQn = 14, /*!< DMA1 Channel 4 global Interrupt */ + DMA1_Channel5_IRQn = 15, /*!< DMA1 Channel 5 global Interrupt */ + DMA1_Channel6_IRQn = 16, /*!< DMA1 Channel 6 global Interrupt */ + DMA1_Channel7_IRQn = 17, /*!< DMA1 Channel 7 global Interrupt */ + +#ifdef STM32F10X_LD + ADC1_2_IRQn = 18, /*!< ADC1 and ADC2 global Interrupt */ + USB_HP_CAN1_TX_IRQn = 19, /*!< USB Device High Priority or CAN1 TX Interrupts */ + USB_LP_CAN1_RX0_IRQn = 20, /*!< USB Device Low Priority or CAN1 RX0 Interrupts */ + CAN1_RX1_IRQn = 21, /*!< CAN1 RX1 Interrupt */ + CAN1_SCE_IRQn = 22, /*!< CAN1 SCE Interrupt */ + EXTI9_5_IRQn = 23, /*!< External Line[9:5] Interrupts */ + TIM1_BRK_IRQn = 24, /*!< TIM1 Break Interrupt */ + TIM1_UP_IRQn = 25, /*!< TIM1 Update Interrupt */ + TIM1_TRG_COM_IRQn = 26, /*!< TIM1 Trigger and Commutation Interrupt */ + TIM1_CC_IRQn = 27, /*!< TIM1 Capture Compare Interrupt */ + TIM2_IRQn = 28, /*!< TIM2 global Interrupt */ + TIM3_IRQn = 29, /*!< TIM3 global Interrupt */ + I2C1_EV_IRQn = 31, /*!< I2C1 Event Interrupt */ + I2C1_ER_IRQn = 32, /*!< I2C1 Error Interrupt */ + SPI1_IRQn = 35, /*!< SPI1 global Interrupt */ + USART1_IRQn = 37, /*!< USART1 global Interrupt */ + USART2_IRQn = 38, /*!< USART2 global Interrupt */ + EXTI15_10_IRQn = 40, /*!< External Line[15:10] Interrupts */ + RTCAlarm_IRQn = 41, /*!< RTC Alarm through EXTI Line Interrupt */ + USBWakeUp_IRQn = 42 /*!< USB Device WakeUp from suspend through EXTI Line Interrupt */ +#endif /* STM32F10X_LD */ + +#ifdef STM32F10X_LD_VL + ADC1_IRQn = 18, /*!< ADC1 global Interrupt */ + EXTI9_5_IRQn = 23, /*!< External Line[9:5] Interrupts */ + TIM1_BRK_TIM15_IRQn = 24, /*!< TIM1 Break and TIM15 Interrupts */ + TIM1_UP_TIM16_IRQn = 25, /*!< TIM1 Update and TIM16 Interrupts */ + TIM1_TRG_COM_TIM17_IRQn = 26, /*!< TIM1 Trigger and Commutation and TIM17 Interrupt */ + TIM1_CC_IRQn = 27, /*!< TIM1 Capture Compare Interrupt */ + TIM2_IRQn = 28, /*!< TIM2 global Interrupt */ + TIM3_IRQn = 29, /*!< TIM3 global Interrupt */ + I2C1_EV_IRQn = 31, /*!< I2C1 Event Interrupt */ + I2C1_ER_IRQn = 32, /*!< I2C1 Error Interrupt */ + SPI1_IRQn = 35, /*!< SPI1 global Interrupt */ + USART1_IRQn = 37, /*!< USART1 global Interrupt */ + USART2_IRQn = 38, /*!< USART2 global Interrupt */ + EXTI15_10_IRQn = 40, /*!< External Line[15:10] Interrupts */ + RTCAlarm_IRQn = 41, /*!< RTC Alarm through EXTI Line Interrupt */ + CEC_IRQn = 42, /*!< HDMI-CEC Interrupt */ + TIM6_DAC_IRQn = 54, /*!< TIM6 and DAC underrun Interrupt */ + TIM7_IRQn = 55 /*!< TIM7 Interrupt */ +#endif /* STM32F10X_LD_VL */ + +#ifdef STM32F10X_MD + ADC1_2_IRQn = 18, /*!< ADC1 and ADC2 global Interrupt */ + USB_HP_CAN1_TX_IRQn = 19, /*!< USB Device High Priority or CAN1 TX Interrupts */ + USB_LP_CAN1_RX0_IRQn = 20, /*!< USB Device Low Priority or CAN1 RX0 Interrupts */ + CAN1_RX1_IRQn = 21, /*!< CAN1 RX1 Interrupt */ + CAN1_SCE_IRQn = 22, /*!< CAN1 SCE Interrupt */ + EXTI9_5_IRQn = 23, /*!< External Line[9:5] Interrupts */ + TIM1_BRK_IRQn = 24, /*!< TIM1 Break Interrupt */ + TIM1_UP_IRQn = 25, /*!< TIM1 Update Interrupt */ + TIM1_TRG_COM_IRQn = 26, /*!< TIM1 Trigger and Commutation Interrupt */ + TIM1_CC_IRQn = 27, /*!< TIM1 Capture Compare Interrupt */ + TIM2_IRQn = 28, /*!< TIM2 global Interrupt */ + TIM3_IRQn = 29, /*!< TIM3 global Interrupt */ + TIM4_IRQn = 30, /*!< TIM4 global Interrupt */ + I2C1_EV_IRQn = 31, /*!< I2C1 Event Interrupt */ + I2C1_ER_IRQn = 32, /*!< I2C1 Error Interrupt */ + I2C2_EV_IRQn = 33, /*!< I2C2 Event Interrupt */ + I2C2_ER_IRQn = 34, /*!< I2C2 Error Interrupt */ + SPI1_IRQn = 35, /*!< SPI1 global Interrupt */ + SPI2_IRQn = 36, /*!< SPI2 global Interrupt */ + USART1_IRQn = 37, /*!< USART1 global Interrupt */ + USART2_IRQn = 38, /*!< USART2 global Interrupt */ + USART3_IRQn = 39, /*!< USART3 global Interrupt */ + EXTI15_10_IRQn = 40, /*!< External Line[15:10] Interrupts */ + RTCAlarm_IRQn = 41, /*!< RTC Alarm through EXTI Line Interrupt */ + USBWakeUp_IRQn = 42 /*!< USB Device WakeUp from suspend through EXTI Line Interrupt */ +#endif /* STM32F10X_MD */ + +#ifdef STM32F10X_MD_VL + ADC1_IRQn = 18, /*!< ADC1 global Interrupt */ + EXTI9_5_IRQn = 23, /*!< External Line[9:5] Interrupts */ + TIM1_BRK_TIM15_IRQn = 24, /*!< TIM1 Break and TIM15 Interrupts */ + TIM1_UP_TIM16_IRQn = 25, /*!< TIM1 Update and TIM16 Interrupts */ + TIM1_TRG_COM_TIM17_IRQn = 26, /*!< TIM1 Trigger and Commutation and TIM17 Interrupt */ + TIM1_CC_IRQn = 27, /*!< TIM1 Capture Compare Interrupt */ + TIM2_IRQn = 28, /*!< TIM2 global Interrupt */ + TIM3_IRQn = 29, /*!< TIM3 global Interrupt */ + TIM4_IRQn = 30, /*!< TIM4 global Interrupt */ + I2C1_EV_IRQn = 31, /*!< I2C1 Event Interrupt */ + I2C1_ER_IRQn = 32, /*!< I2C1 Error Interrupt */ + I2C2_EV_IRQn = 33, /*!< I2C2 Event Interrupt */ + I2C2_ER_IRQn = 34, /*!< I2C2 Error Interrupt */ + SPI1_IRQn = 35, /*!< SPI1 global Interrupt */ + SPI2_IRQn = 36, /*!< SPI2 global Interrupt */ + USART1_IRQn = 37, /*!< USART1 global Interrupt */ + USART2_IRQn = 38, /*!< USART2 global Interrupt */ + USART3_IRQn = 39, /*!< USART3 global Interrupt */ + EXTI15_10_IRQn = 40, /*!< External Line[15:10] Interrupts */ + RTCAlarm_IRQn = 41, /*!< RTC Alarm through EXTI Line Interrupt */ + CEC_IRQn = 42, /*!< HDMI-CEC Interrupt */ + TIM6_DAC_IRQn = 54, /*!< TIM6 and DAC underrun Interrupt */ + TIM7_IRQn = 55 /*!< TIM7 Interrupt */ +#endif /* STM32F10X_MD_VL */ + +#ifdef STM32F10X_HD + ADC1_2_IRQn = 18, /*!< ADC1 and ADC2 global Interrupt */ + USB_HP_CAN1_TX_IRQn = 19, /*!< USB Device High Priority or CAN1 TX Interrupts */ + USB_LP_CAN1_RX0_IRQn = 20, /*!< USB Device Low Priority or CAN1 RX0 Interrupts */ + CAN1_RX1_IRQn = 21, /*!< CAN1 RX1 Interrupt */ + CAN1_SCE_IRQn = 22, /*!< CAN1 SCE Interrupt */ + EXTI9_5_IRQn = 23, /*!< External Line[9:5] Interrupts */ + TIM1_BRK_IRQn = 24, /*!< TIM1 Break Interrupt */ + TIM1_UP_IRQn = 25, /*!< TIM1 Update Interrupt */ + TIM1_TRG_COM_IRQn = 26, /*!< TIM1 Trigger and Commutation Interrupt */ + TIM1_CC_IRQn = 27, /*!< TIM1 Capture Compare Interrupt */ + TIM2_IRQn = 28, /*!< TIM2 global Interrupt */ + TIM3_IRQn = 29, /*!< TIM3 global Interrupt */ + TIM4_IRQn = 30, /*!< TIM4 global Interrupt */ + I2C1_EV_IRQn = 31, /*!< I2C1 Event Interrupt */ + I2C1_ER_IRQn = 32, /*!< I2C1 Error Interrupt */ + I2C2_EV_IRQn = 33, /*!< I2C2 Event Interrupt */ + I2C2_ER_IRQn = 34, /*!< I2C2 Error Interrupt */ + SPI1_IRQn = 35, /*!< SPI1 global Interrupt */ + SPI2_IRQn = 36, /*!< SPI2 global Interrupt */ + USART1_IRQn = 37, /*!< USART1 global Interrupt */ + USART2_IRQn = 38, /*!< USART2 global Interrupt */ + USART3_IRQn = 39, /*!< USART3 global Interrupt */ + EXTI15_10_IRQn = 40, /*!< External Line[15:10] Interrupts */ + RTCAlarm_IRQn = 41, /*!< RTC Alarm through EXTI Line Interrupt */ + USBWakeUp_IRQn = 42, /*!< USB Device WakeUp from suspend through EXTI Line Interrupt */ + TIM8_BRK_IRQn = 43, /*!< TIM8 Break Interrupt */ + TIM8_UP_IRQn = 44, /*!< TIM8 Update Interrupt */ + TIM8_TRG_COM_IRQn = 45, /*!< TIM8 Trigger and Commutation Interrupt */ + TIM8_CC_IRQn = 46, /*!< TIM8 Capture Compare Interrupt */ + ADC3_IRQn = 47, /*!< ADC3 global Interrupt */ + FSMC_IRQn = 48, /*!< FSMC global Interrupt */ + SDIO_IRQn = 49, /*!< SDIO global Interrupt */ + TIM5_IRQn = 50, /*!< TIM5 global Interrupt */ + SPI3_IRQn = 51, /*!< SPI3 global Interrupt */ + UART4_IRQn = 52, /*!< UART4 global Interrupt */ + UART5_IRQn = 53, /*!< UART5 global Interrupt */ + TIM6_IRQn = 54, /*!< TIM6 global Interrupt */ + TIM7_IRQn = 55, /*!< TIM7 global Interrupt */ + DMA2_Channel1_IRQn = 56, /*!< DMA2 Channel 1 global Interrupt */ + DMA2_Channel2_IRQn = 57, /*!< DMA2 Channel 2 global Interrupt */ + DMA2_Channel3_IRQn = 58, /*!< DMA2 Channel 3 global Interrupt */ + DMA2_Channel4_5_IRQn = 59 /*!< DMA2 Channel 4 and Channel 5 global Interrupt */ +#endif /* STM32F10X_HD */ + +#ifdef STM32F10X_HD_VL + ADC1_IRQn = 18, /*!< ADC1 global Interrupt */ + EXTI9_5_IRQn = 23, /*!< External Line[9:5] Interrupts */ + TIM1_BRK_TIM15_IRQn = 24, /*!< TIM1 Break and TIM15 Interrupts */ + TIM1_UP_TIM16_IRQn = 25, /*!< TIM1 Update and TIM16 Interrupts */ + TIM1_TRG_COM_TIM17_IRQn = 26, /*!< TIM1 Trigger and Commutation and TIM17 Interrupt */ + TIM1_CC_IRQn = 27, /*!< TIM1 Capture Compare Interrupt */ + TIM2_IRQn = 28, /*!< TIM2 global Interrupt */ + TIM3_IRQn = 29, /*!< TIM3 global Interrupt */ + TIM4_IRQn = 30, /*!< TIM4 global Interrupt */ + I2C1_EV_IRQn = 31, /*!< I2C1 Event Interrupt */ + I2C1_ER_IRQn = 32, /*!< I2C1 Error Interrupt */ + I2C2_EV_IRQn = 33, /*!< I2C2 Event Interrupt */ + I2C2_ER_IRQn = 34, /*!< I2C2 Error Interrupt */ + SPI1_IRQn = 35, /*!< SPI1 global Interrupt */ + SPI2_IRQn = 36, /*!< SPI2 global Interrupt */ + USART1_IRQn = 37, /*!< USART1 global Interrupt */ + USART2_IRQn = 38, /*!< USART2 global Interrupt */ + USART3_IRQn = 39, /*!< USART3 global Interrupt */ + EXTI15_10_IRQn = 40, /*!< External Line[15:10] Interrupts */ + RTCAlarm_IRQn = 41, /*!< RTC Alarm through EXTI Line Interrupt */ + CEC_IRQn = 42, /*!< HDMI-CEC Interrupt */ + TIM12_IRQn = 43, /*!< TIM12 global Interrupt */ + TIM13_IRQn = 44, /*!< TIM13 global Interrupt */ + TIM14_IRQn = 45, /*!< TIM14 global Interrupt */ + TIM5_IRQn = 50, /*!< TIM5 global Interrupt */ + SPI3_IRQn = 51, /*!< SPI3 global Interrupt */ + UART4_IRQn = 52, /*!< UART4 global Interrupt */ + UART5_IRQn = 53, /*!< UART5 global Interrupt */ + TIM6_DAC_IRQn = 54, /*!< TIM6 and DAC underrun Interrupt */ + TIM7_IRQn = 55, /*!< TIM7 Interrupt */ + DMA2_Channel1_IRQn = 56, /*!< DMA2 Channel 1 global Interrupt */ + DMA2_Channel2_IRQn = 57, /*!< DMA2 Channel 2 global Interrupt */ + DMA2_Channel3_IRQn = 58, /*!< DMA2 Channel 3 global Interrupt */ + DMA2_Channel4_5_IRQn = 59, /*!< DMA2 Channel 4 and Channel 5 global Interrupt */ + DMA2_Channel5_IRQn = 60 /*!< DMA2 Channel 5 global Interrupt (DMA2 Channel 5 is + mapped at position 60 only if the MISC_REMAP bit in + the AFIO_MAPR2 register is set) */ +#endif /* STM32F10X_HD_VL */ + +#ifdef STM32F10X_XL + ADC1_2_IRQn = 18, /*!< ADC1 and ADC2 global Interrupt */ + USB_HP_CAN1_TX_IRQn = 19, /*!< USB Device High Priority or CAN1 TX Interrupts */ + USB_LP_CAN1_RX0_IRQn = 20, /*!< USB Device Low Priority or CAN1 RX0 Interrupts */ + CAN1_RX1_IRQn = 21, /*!< CAN1 RX1 Interrupt */ + CAN1_SCE_IRQn = 22, /*!< CAN1 SCE Interrupt */ + EXTI9_5_IRQn = 23, /*!< External Line[9:5] Interrupts */ + TIM1_BRK_TIM9_IRQn = 24, /*!< TIM1 Break Interrupt and TIM9 global Interrupt */ + TIM1_UP_TIM10_IRQn = 25, /*!< TIM1 Update Interrupt and TIM10 global Interrupt */ + TIM1_TRG_COM_TIM11_IRQn = 26, /*!< TIM1 Trigger and Commutation Interrupt and TIM11 global interrupt */ + TIM1_CC_IRQn = 27, /*!< TIM1 Capture Compare Interrupt */ + TIM2_IRQn = 28, /*!< TIM2 global Interrupt */ + TIM3_IRQn = 29, /*!< TIM3 global Interrupt */ + TIM4_IRQn = 30, /*!< TIM4 global Interrupt */ + I2C1_EV_IRQn = 31, /*!< I2C1 Event Interrupt */ + I2C1_ER_IRQn = 32, /*!< I2C1 Error Interrupt */ + I2C2_EV_IRQn = 33, /*!< I2C2 Event Interrupt */ + I2C2_ER_IRQn = 34, /*!< I2C2 Error Interrupt */ + SPI1_IRQn = 35, /*!< SPI1 global Interrupt */ + SPI2_IRQn = 36, /*!< SPI2 global Interrupt */ + USART1_IRQn = 37, /*!< USART1 global Interrupt */ + USART2_IRQn = 38, /*!< USART2 global Interrupt */ + USART3_IRQn = 39, /*!< USART3 global Interrupt */ + EXTI15_10_IRQn = 40, /*!< External Line[15:10] Interrupts */ + RTCAlarm_IRQn = 41, /*!< RTC Alarm through EXTI Line Interrupt */ + USBWakeUp_IRQn = 42, /*!< USB Device WakeUp from suspend through EXTI Line Interrupt */ + TIM8_BRK_TIM12_IRQn = 43, /*!< TIM8 Break Interrupt and TIM12 global Interrupt */ + TIM8_UP_TIM13_IRQn = 44, /*!< TIM8 Update Interrupt and TIM13 global Interrupt */ + TIM8_TRG_COM_TIM14_IRQn = 45, /*!< TIM8 Trigger and Commutation Interrupt and TIM14 global interrupt */ + TIM8_CC_IRQn = 46, /*!< TIM8 Capture Compare Interrupt */ + ADC3_IRQn = 47, /*!< ADC3 global Interrupt */ + FSMC_IRQn = 48, /*!< FSMC global Interrupt */ + SDIO_IRQn = 49, /*!< SDIO global Interrupt */ + TIM5_IRQn = 50, /*!< TIM5 global Interrupt */ + SPI3_IRQn = 51, /*!< SPI3 global Interrupt */ + UART4_IRQn = 52, /*!< UART4 global Interrupt */ + UART5_IRQn = 53, /*!< UART5 global Interrupt */ + TIM6_IRQn = 54, /*!< TIM6 global Interrupt */ + TIM7_IRQn = 55, /*!< TIM7 global Interrupt */ + DMA2_Channel1_IRQn = 56, /*!< DMA2 Channel 1 global Interrupt */ + DMA2_Channel2_IRQn = 57, /*!< DMA2 Channel 2 global Interrupt */ + DMA2_Channel3_IRQn = 58, /*!< DMA2 Channel 3 global Interrupt */ + DMA2_Channel4_5_IRQn = 59 /*!< DMA2 Channel 4 and Channel 5 global Interrupt */ +#endif /* STM32F10X_XL */ + +#ifdef STM32F10X_CL + ADC1_2_IRQn = 18, /*!< ADC1 and ADC2 global Interrupt */ + CAN1_TX_IRQn = 19, /*!< USB Device High Priority or CAN1 TX Interrupts */ + CAN1_RX0_IRQn = 20, /*!< USB Device Low Priority or CAN1 RX0 Interrupts */ + CAN1_RX1_IRQn = 21, /*!< CAN1 RX1 Interrupt */ + CAN1_SCE_IRQn = 22, /*!< CAN1 SCE Interrupt */ + EXTI9_5_IRQn = 23, /*!< External Line[9:5] Interrupts */ + TIM1_BRK_IRQn = 24, /*!< TIM1 Break Interrupt */ + TIM1_UP_IRQn = 25, /*!< TIM1 Update Interrupt */ + TIM1_TRG_COM_IRQn = 26, /*!< TIM1 Trigger and Commutation Interrupt */ + TIM1_CC_IRQn = 27, /*!< TIM1 Capture Compare Interrupt */ + TIM2_IRQn = 28, /*!< TIM2 global Interrupt */ + TIM3_IRQn = 29, /*!< TIM3 global Interrupt */ + TIM4_IRQn = 30, /*!< TIM4 global Interrupt */ + I2C1_EV_IRQn = 31, /*!< I2C1 Event Interrupt */ + I2C1_ER_IRQn = 32, /*!< I2C1 Error Interrupt */ + I2C2_EV_IRQn = 33, /*!< I2C2 Event Interrupt */ + I2C2_ER_IRQn = 34, /*!< I2C2 Error Interrupt */ + SPI1_IRQn = 35, /*!< SPI1 global Interrupt */ + SPI2_IRQn = 36, /*!< SPI2 global Interrupt */ + USART1_IRQn = 37, /*!< USART1 global Interrupt */ + USART2_IRQn = 38, /*!< USART2 global Interrupt */ + USART3_IRQn = 39, /*!< USART3 global Interrupt */ + EXTI15_10_IRQn = 40, /*!< External Line[15:10] Interrupts */ + RTCAlarm_IRQn = 41, /*!< RTC Alarm through EXTI Line Interrupt */ + OTG_FS_WKUP_IRQn = 42, /*!< USB OTG FS WakeUp from suspend through EXTI Line Interrupt */ + TIM5_IRQn = 50, /*!< TIM5 global Interrupt */ + SPI3_IRQn = 51, /*!< SPI3 global Interrupt */ + UART4_IRQn = 52, /*!< UART4 global Interrupt */ + UART5_IRQn = 53, /*!< UART5 global Interrupt */ + TIM6_IRQn = 54, /*!< TIM6 global Interrupt */ + TIM7_IRQn = 55, /*!< TIM7 global Interrupt */ + DMA2_Channel1_IRQn = 56, /*!< DMA2 Channel 1 global Interrupt */ + DMA2_Channel2_IRQn = 57, /*!< DMA2 Channel 2 global Interrupt */ + DMA2_Channel3_IRQn = 58, /*!< DMA2 Channel 3 global Interrupt */ + DMA2_Channel4_IRQn = 59, /*!< DMA2 Channel 4 global Interrupt */ + DMA2_Channel5_IRQn = 60, /*!< DMA2 Channel 5 global Interrupt */ + ETH_IRQn = 61, /*!< Ethernet global Interrupt */ + ETH_WKUP_IRQn = 62, /*!< Ethernet Wakeup through EXTI line Interrupt */ + CAN2_TX_IRQn = 63, /*!< CAN2 TX Interrupt */ + CAN2_RX0_IRQn = 64, /*!< CAN2 RX0 Interrupt */ + CAN2_RX1_IRQn = 65, /*!< CAN2 RX1 Interrupt */ + CAN2_SCE_IRQn = 66, /*!< CAN2 SCE Interrupt */ + OTG_FS_IRQn = 67 /*!< USB OTG FS global Interrupt */ +#endif /* STM32F10X_CL */ +} IRQn_Type; + +/** + * @} + */ + +#include "core_cm3.h" +#include "system_stm32f10x.h" +#include + +/** @addtogroup Exported_types + * @{ + */ + +/*!< STM32F10x Standard Peripheral Library old types (maintained for legacy purpose) */ +typedef int32_t s32; +typedef int16_t s16; +typedef int8_t s8; + +typedef const int32_t sc32; /*!< Read Only */ +typedef const int16_t sc16; /*!< Read Only */ +typedef const int8_t sc8; /*!< Read Only */ + +typedef __IO int32_t vs32; +typedef __IO int16_t vs16; +typedef __IO int8_t vs8; + +typedef __I int32_t vsc32; /*!< Read Only */ +typedef __I int16_t vsc16; /*!< Read Only */ +typedef __I int8_t vsc8; /*!< Read Only */ + +typedef uint32_t u32; +typedef uint16_t u16; +typedef uint8_t u8; + +typedef const uint32_t uc32; /*!< Read Only */ +typedef const uint16_t uc16; /*!< Read Only */ +typedef const uint8_t uc8; /*!< Read Only */ + +typedef __IO uint32_t vu32; +typedef __IO uint16_t vu16; +typedef __IO uint8_t vu8; + +typedef __I uint32_t vuc32; /*!< Read Only */ +typedef __I uint16_t vuc16; /*!< Read Only */ +typedef __I uint8_t vuc8; /*!< Read Only */ + +typedef enum {RESET = 0, SET = !RESET} FlagStatus, ITStatus; + +typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState; +#define IS_FUNCTIONAL_STATE(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE)) + +typedef enum {ERROR = 0, SUCCESS = !ERROR} ErrorStatus; + +/*!< STM32F10x Standard Peripheral Library old definitions (maintained for legacy purpose) */ +#define HSEStartUp_TimeOut HSE_STARTUP_TIMEOUT +#define HSE_Value HSE_VALUE +#define HSI_Value HSI_VALUE +/** + * @} + */ + +/** @addtogroup Peripheral_registers_structures + * @{ + */ + +/** + * @brief Analog to Digital Converter + */ + +typedef struct +{ + __IO uint32_t SR; + __IO uint32_t CR1; + __IO uint32_t CR2; + __IO uint32_t SMPR1; + __IO uint32_t SMPR2; + __IO uint32_t JOFR1; + __IO uint32_t JOFR2; + __IO uint32_t JOFR3; + __IO uint32_t JOFR4; + __IO uint32_t HTR; + __IO uint32_t LTR; + __IO uint32_t SQR1; + __IO uint32_t SQR2; + __IO uint32_t SQR3; + __IO uint32_t JSQR; + __IO uint32_t JDR1; + __IO uint32_t JDR2; + __IO uint32_t JDR3; + __IO uint32_t JDR4; + __IO uint32_t DR; +} ADC_TypeDef; + +/** + * @brief Backup Registers + */ + +typedef struct +{ + uint32_t RESERVED0; + __IO uint16_t DR1; + uint16_t RESERVED1; + __IO uint16_t DR2; + uint16_t RESERVED2; + __IO uint16_t DR3; + uint16_t RESERVED3; + __IO uint16_t DR4; + uint16_t RESERVED4; + __IO uint16_t DR5; + uint16_t RESERVED5; + __IO uint16_t DR6; + uint16_t RESERVED6; + __IO uint16_t DR7; + uint16_t RESERVED7; + __IO uint16_t DR8; + uint16_t RESERVED8; + __IO uint16_t DR9; + uint16_t RESERVED9; + __IO uint16_t DR10; + uint16_t RESERVED10; + __IO uint16_t RTCCR; + uint16_t RESERVED11; + __IO uint16_t CR; + uint16_t RESERVED12; + __IO uint16_t CSR; + uint16_t RESERVED13[5]; + __IO uint16_t DR11; + uint16_t RESERVED14; + __IO uint16_t DR12; + uint16_t RESERVED15; + __IO uint16_t DR13; + uint16_t RESERVED16; + __IO uint16_t DR14; + uint16_t RESERVED17; + __IO uint16_t DR15; + uint16_t RESERVED18; + __IO uint16_t DR16; + uint16_t RESERVED19; + __IO uint16_t DR17; + uint16_t RESERVED20; + __IO uint16_t DR18; + uint16_t RESERVED21; + __IO uint16_t DR19; + uint16_t RESERVED22; + __IO uint16_t DR20; + uint16_t RESERVED23; + __IO uint16_t DR21; + uint16_t RESERVED24; + __IO uint16_t DR22; + uint16_t RESERVED25; + __IO uint16_t DR23; + uint16_t RESERVED26; + __IO uint16_t DR24; + uint16_t RESERVED27; + __IO uint16_t DR25; + uint16_t RESERVED28; + __IO uint16_t DR26; + uint16_t RESERVED29; + __IO uint16_t DR27; + uint16_t RESERVED30; + __IO uint16_t DR28; + uint16_t RESERVED31; + __IO uint16_t DR29; + uint16_t RESERVED32; + __IO uint16_t DR30; + uint16_t RESERVED33; + __IO uint16_t DR31; + uint16_t RESERVED34; + __IO uint16_t DR32; + uint16_t RESERVED35; + __IO uint16_t DR33; + uint16_t RESERVED36; + __IO uint16_t DR34; + uint16_t RESERVED37; + __IO uint16_t DR35; + uint16_t RESERVED38; + __IO uint16_t DR36; + uint16_t RESERVED39; + __IO uint16_t DR37; + uint16_t RESERVED40; + __IO uint16_t DR38; + uint16_t RESERVED41; + __IO uint16_t DR39; + uint16_t RESERVED42; + __IO uint16_t DR40; + uint16_t RESERVED43; + __IO uint16_t DR41; + uint16_t RESERVED44; + __IO uint16_t DR42; + uint16_t RESERVED45; +} BKP_TypeDef; + +/** + * @brief Controller Area Network TxMailBox + */ + +typedef struct +{ + __IO uint32_t TIR; + __IO uint32_t TDTR; + __IO uint32_t TDLR; + __IO uint32_t TDHR; +} CAN_TxMailBox_TypeDef; + +/** + * @brief Controller Area Network FIFOMailBox + */ + +typedef struct +{ + __IO uint32_t RIR; + __IO uint32_t RDTR; + __IO uint32_t RDLR; + __IO uint32_t RDHR; +} CAN_FIFOMailBox_TypeDef; + +/** + * @brief Controller Area Network FilterRegister + */ + +typedef struct +{ + __IO uint32_t FR1; + __IO uint32_t FR2; +} CAN_FilterRegister_TypeDef; + +/** + * @brief Controller Area Network + */ + +typedef struct +{ + __IO uint32_t MCR; + __IO uint32_t MSR; + __IO uint32_t TSR; + __IO uint32_t RF0R; + __IO uint32_t RF1R; + __IO uint32_t IER; + __IO uint32_t ESR; + __IO uint32_t BTR; + uint32_t RESERVED0[88]; + CAN_TxMailBox_TypeDef sTxMailBox[3]; + CAN_FIFOMailBox_TypeDef sFIFOMailBox[2]; + uint32_t RESERVED1[12]; + __IO uint32_t FMR; + __IO uint32_t FM1R; + uint32_t RESERVED2; + __IO uint32_t FS1R; + uint32_t RESERVED3; + __IO uint32_t FFA1R; + uint32_t RESERVED4; + __IO uint32_t FA1R; + uint32_t RESERVED5[8]; +#ifndef STM32F10X_CL + CAN_FilterRegister_TypeDef sFilterRegister[14]; +#else + CAN_FilterRegister_TypeDef sFilterRegister[28]; +#endif /* STM32F10X_CL */ +} CAN_TypeDef; + +/** + * @brief Consumer Electronics Control (CEC) + */ +typedef struct +{ + __IO uint32_t CFGR; + __IO uint32_t OAR; + __IO uint32_t PRES; + __IO uint32_t ESR; + __IO uint32_t CSR; + __IO uint32_t TXD; + __IO uint32_t RXD; +} CEC_TypeDef; + +/** + * @brief CRC calculation unit + */ + +typedef struct +{ + __IO uint32_t DR; + __IO uint8_t IDR; + uint8_t RESERVED0; + uint16_t RESERVED1; + __IO uint32_t CR; +} CRC_TypeDef; + +/** + * @brief Digital to Analog Converter + */ + +typedef struct +{ + __IO uint32_t CR; + __IO uint32_t SWTRIGR; + __IO uint32_t DHR12R1; + __IO uint32_t DHR12L1; + __IO uint32_t DHR8R1; + __IO uint32_t DHR12R2; + __IO uint32_t DHR12L2; + __IO uint32_t DHR8R2; + __IO uint32_t DHR12RD; + __IO uint32_t DHR12LD; + __IO uint32_t DHR8RD; + __IO uint32_t DOR1; + __IO uint32_t DOR2; +#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL) + __IO uint32_t SR; +#endif +} DAC_TypeDef; + +/** + * @brief Debug MCU + */ + +typedef struct +{ + __IO uint32_t IDCODE; + __IO uint32_t CR; +}DBGMCU_TypeDef; + +/** + * @brief DMA Controller + */ + +typedef struct +{ + __IO uint32_t CCR; + __IO uint32_t CNDTR; + __IO uint32_t CPAR; + __IO uint32_t CMAR; +} DMA_Channel_TypeDef; + +typedef struct +{ + __IO uint32_t ISR; + __IO uint32_t IFCR; +} DMA_TypeDef; + +/** + * @brief Ethernet MAC + */ + +typedef struct +{ + __IO uint32_t MACCR; + __IO uint32_t MACFFR; + __IO uint32_t MACHTHR; + __IO uint32_t MACHTLR; + __IO uint32_t MACMIIAR; + __IO uint32_t MACMIIDR; + __IO uint32_t MACFCR; + __IO uint32_t MACVLANTR; /* 8 */ + uint32_t RESERVED0[2]; + __IO uint32_t MACRWUFFR; /* 11 */ + __IO uint32_t MACPMTCSR; + uint32_t RESERVED1[2]; + __IO uint32_t MACSR; /* 15 */ + __IO uint32_t MACIMR; + __IO uint32_t MACA0HR; + __IO uint32_t MACA0LR; + __IO uint32_t MACA1HR; + __IO uint32_t MACA1LR; + __IO uint32_t MACA2HR; + __IO uint32_t MACA2LR; + __IO uint32_t MACA3HR; + __IO uint32_t MACA3LR; /* 24 */ + uint32_t RESERVED2[40]; + __IO uint32_t MMCCR; /* 65 */ + __IO uint32_t MMCRIR; + __IO uint32_t MMCTIR; + __IO uint32_t MMCRIMR; + __IO uint32_t MMCTIMR; /* 69 */ + uint32_t RESERVED3[14]; + __IO uint32_t MMCTGFSCCR; /* 84 */ + __IO uint32_t MMCTGFMSCCR; + uint32_t RESERVED4[5]; + __IO uint32_t MMCTGFCR; + uint32_t RESERVED5[10]; + __IO uint32_t MMCRFCECR; + __IO uint32_t MMCRFAECR; + uint32_t RESERVED6[10]; + __IO uint32_t MMCRGUFCR; + uint32_t RESERVED7[334]; + __IO uint32_t PTPTSCR; + __IO uint32_t PTPSSIR; + __IO uint32_t PTPTSHR; + __IO uint32_t PTPTSLR; + __IO uint32_t PTPTSHUR; + __IO uint32_t PTPTSLUR; + __IO uint32_t PTPTSAR; + __IO uint32_t PTPTTHR; + __IO uint32_t PTPTTLR; + uint32_t RESERVED8[567]; + __IO uint32_t DMABMR; + __IO uint32_t DMATPDR; + __IO uint32_t DMARPDR; + __IO uint32_t DMARDLAR; + __IO uint32_t DMATDLAR; + __IO uint32_t DMASR; + __IO uint32_t DMAOMR; + __IO uint32_t DMAIER; + __IO uint32_t DMAMFBOCR; + uint32_t RESERVED9[9]; + __IO uint32_t DMACHTDR; + __IO uint32_t DMACHRDR; + __IO uint32_t DMACHTBAR; + __IO uint32_t DMACHRBAR; +} ETH_TypeDef; + +/** + * @brief External Interrupt/Event Controller + */ + +typedef struct +{ + __IO uint32_t IMR; + __IO uint32_t EMR; + __IO uint32_t RTSR; + __IO uint32_t FTSR; + __IO uint32_t SWIER; + __IO uint32_t PR; +} EXTI_TypeDef; + +/** + * @brief FLASH Registers + */ + +typedef struct +{ + __IO uint32_t ACR; + __IO uint32_t KEYR; + __IO uint32_t OPTKEYR; + __IO uint32_t SR; + __IO uint32_t CR; + __IO uint32_t AR; + __IO uint32_t RESERVED; + __IO uint32_t OBR; + __IO uint32_t WRPR; +#ifdef STM32F10X_XL + uint32_t RESERVED1[8]; + __IO uint32_t KEYR2; + uint32_t RESERVED2; + __IO uint32_t SR2; + __IO uint32_t CR2; + __IO uint32_t AR2; +#endif /* STM32F10X_XL */ +} FLASH_TypeDef; + +/** + * @brief Option Bytes Registers + */ + +typedef struct +{ + __IO uint16_t RDP; + __IO uint16_t USER; + __IO uint16_t Data0; + __IO uint16_t Data1; + __IO uint16_t WRP0; + __IO uint16_t WRP1; + __IO uint16_t WRP2; + __IO uint16_t WRP3; +} OB_TypeDef; + +/** + * @brief Flexible Static Memory Controller + */ + +typedef struct +{ + __IO uint32_t BTCR[8]; +} FSMC_Bank1_TypeDef; + +/** + * @brief Flexible Static Memory Controller Bank1E + */ + +typedef struct +{ + __IO uint32_t BWTR[7]; +} FSMC_Bank1E_TypeDef; + +/** + * @brief Flexible Static Memory Controller Bank2 + */ + +typedef struct +{ + __IO uint32_t PCR2; + __IO uint32_t SR2; + __IO uint32_t PMEM2; + __IO uint32_t PATT2; + uint32_t RESERVED0; + __IO uint32_t ECCR2; +} FSMC_Bank2_TypeDef; + +/** + * @brief Flexible Static Memory Controller Bank3 + */ + +typedef struct +{ + __IO uint32_t PCR3; + __IO uint32_t SR3; + __IO uint32_t PMEM3; + __IO uint32_t PATT3; + uint32_t RESERVED0; + __IO uint32_t ECCR3; +} FSMC_Bank3_TypeDef; + +/** + * @brief Flexible Static Memory Controller Bank4 + */ + +typedef struct +{ + __IO uint32_t PCR4; + __IO uint32_t SR4; + __IO uint32_t PMEM4; + __IO uint32_t PATT4; + __IO uint32_t PIO4; +} FSMC_Bank4_TypeDef; + +/** + * @brief General Purpose I/O + */ + +typedef struct +{ + __IO uint32_t CRL; + __IO uint32_t CRH; + __IO uint32_t IDR; + __IO uint32_t ODR; + __IO uint32_t BSRR; + __IO uint32_t BRR; + __IO uint32_t LCKR; +} GPIO_TypeDef; + +/** + * @brief Alternate Function I/O + */ + +typedef struct +{ + __IO uint32_t EVCR; + __IO uint32_t MAPR; + __IO uint32_t EXTICR[4]; + uint32_t RESERVED0; + __IO uint32_t MAPR2; +} AFIO_TypeDef; +/** + * @brief Inter Integrated Circuit Interface + */ + +typedef struct +{ + __IO uint16_t CR1; + uint16_t RESERVED0; + __IO uint16_t CR2; + uint16_t RESERVED1; + __IO uint16_t OAR1; + uint16_t RESERVED2; + __IO uint16_t OAR2; + uint16_t RESERVED3; + __IO uint16_t DR; + uint16_t RESERVED4; + __IO uint16_t SR1; + uint16_t RESERVED5; + __IO uint16_t SR2; + uint16_t RESERVED6; + __IO uint16_t CCR; + uint16_t RESERVED7; + __IO uint16_t TRISE; + uint16_t RESERVED8; +} I2C_TypeDef; + +/** + * @brief Independent WATCHDOG + */ + +typedef struct +{ + __IO uint32_t KR; + __IO uint32_t PR; + __IO uint32_t RLR; + __IO uint32_t SR; +} IWDG_TypeDef; + +/** + * @brief Power Control + */ + +typedef struct +{ + __IO uint32_t CR; + __IO uint32_t CSR; +} PWR_TypeDef; + +/** + * @brief Reset and Clock Control + */ + +typedef struct +{ + __IO uint32_t CR; + __IO uint32_t CFGR; + __IO uint32_t CIR; + __IO uint32_t APB2RSTR; + __IO uint32_t APB1RSTR; + __IO uint32_t AHBENR; + __IO uint32_t APB2ENR; + __IO uint32_t APB1ENR; + __IO uint32_t BDCR; + __IO uint32_t CSR; + +#ifdef STM32F10X_CL + __IO uint32_t AHBRSTR; + __IO uint32_t CFGR2; +#endif /* STM32F10X_CL */ + +#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL) + uint32_t RESERVED0; + __IO uint32_t CFGR2; +#endif /* STM32F10X_LD_VL || STM32F10X_MD_VL || STM32F10X_HD_VL */ +} RCC_TypeDef; + +/** + * @brief Real-Time Clock + */ + +typedef struct +{ + __IO uint16_t CRH; + uint16_t RESERVED0; + __IO uint16_t CRL; + uint16_t RESERVED1; + __IO uint16_t PRLH; + uint16_t RESERVED2; + __IO uint16_t PRLL; + uint16_t RESERVED3; + __IO uint16_t DIVH; + uint16_t RESERVED4; + __IO uint16_t DIVL; + uint16_t RESERVED5; + __IO uint16_t CNTH; + uint16_t RESERVED6; + __IO uint16_t CNTL; + uint16_t RESERVED7; + __IO uint16_t ALRH; + uint16_t RESERVED8; + __IO uint16_t ALRL; + uint16_t RESERVED9; +} RTC_TypeDef; + +/** + * @brief SD host Interface + */ + +typedef struct +{ + __IO uint32_t POWER; + __IO uint32_t CLKCR; + __IO uint32_t ARG; + __IO uint32_t CMD; + __I uint32_t RESPCMD; + __I uint32_t RESP1; + __I uint32_t RESP2; + __I uint32_t RESP3; + __I uint32_t RESP4; + __IO uint32_t DTIMER; + __IO uint32_t DLEN; + __IO uint32_t DCTRL; + __I uint32_t DCOUNT; + __I uint32_t STA; + __IO uint32_t ICR; + __IO uint32_t MASK; + uint32_t RESERVED0[2]; + __I uint32_t FIFOCNT; + uint32_t RESERVED1[13]; + __IO uint32_t FIFO; +} SDIO_TypeDef; + +/** + * @brief Serial Peripheral Interface + */ + +typedef struct +{ + __IO uint16_t CR1; + uint16_t RESERVED0; + __IO uint16_t CR2; + uint16_t RESERVED1; + __IO uint16_t SR; + uint16_t RESERVED2; + __IO uint16_t DR; + uint16_t RESERVED3; + __IO uint16_t CRCPR; + uint16_t RESERVED4; + __IO uint16_t RXCRCR; + uint16_t RESERVED5; + __IO uint16_t TXCRCR; + uint16_t RESERVED6; + __IO uint16_t I2SCFGR; + uint16_t RESERVED7; + __IO uint16_t I2SPR; + uint16_t RESERVED8; +} SPI_TypeDef; + +/** + * @brief TIM + */ + +typedef struct +{ + __IO uint16_t CR1; + uint16_t RESERVED0; + __IO uint16_t CR2; + uint16_t RESERVED1; + __IO uint16_t SMCR; + uint16_t RESERVED2; + __IO uint16_t DIER; + uint16_t RESERVED3; + __IO uint16_t SR; + uint16_t RESERVED4; + __IO uint16_t EGR; + uint16_t RESERVED5; + __IO uint16_t CCMR1; + uint16_t RESERVED6; + __IO uint16_t CCMR2; + uint16_t RESERVED7; + __IO uint16_t CCER; + uint16_t RESERVED8; + __IO uint16_t CNT; + uint16_t RESERVED9; + __IO uint16_t PSC; + uint16_t RESERVED10; + __IO uint16_t ARR; + uint16_t RESERVED11; + __IO uint16_t RCR; + uint16_t RESERVED12; + __IO uint16_t CCR1; + uint16_t RESERVED13; + __IO uint16_t CCR2; + uint16_t RESERVED14; + __IO uint16_t CCR3; + uint16_t RESERVED15; + __IO uint16_t CCR4; + uint16_t RESERVED16; + __IO uint16_t BDTR; + uint16_t RESERVED17; + __IO uint16_t DCR; + uint16_t RESERVED18; + __IO uint16_t DMAR; + uint16_t RESERVED19; +} TIM_TypeDef; + +/** + * @brief Universal Synchronous Asynchronous Receiver Transmitter + */ + +typedef struct +{ + __IO uint16_t SR; + uint16_t RESERVED0; + __IO uint16_t DR; + uint16_t RESERVED1; + __IO uint16_t BRR; + uint16_t RESERVED2; + __IO uint16_t CR1; + uint16_t RESERVED3; + __IO uint16_t CR2; + uint16_t RESERVED4; + __IO uint16_t CR3; + uint16_t RESERVED5; + __IO uint16_t GTPR; + uint16_t RESERVED6; +} USART_TypeDef; + +/** + * @brief Window WATCHDOG + */ + +typedef struct +{ + __IO uint32_t CR; + __IO uint32_t CFR; + __IO uint32_t SR; +} WWDG_TypeDef; + +/** + * @} + */ + +/** @addtogroup Peripheral_memory_map + * @{ + */ + + +#define FLASH_BASE ((uint32_t)0x08000000) /*!< FLASH base address in the alias region */ +#define SRAM_BASE ((uint32_t)0x20000000) /*!< SRAM base address in the alias region */ +#define PERIPH_BASE ((uint32_t)0x40000000) /*!< Peripheral base address in the alias region */ + +#define SRAM_BB_BASE ((uint32_t)0x22000000) /*!< SRAM base address in the bit-band region */ +#define PERIPH_BB_BASE ((uint32_t)0x42000000) /*!< Peripheral base address in the bit-band region */ + +#define FSMC_R_BASE ((uint32_t)0xA0000000) /*!< FSMC registers base address */ + +/*!< Peripheral memory map */ +#define APB1PERIPH_BASE PERIPH_BASE +#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000) +#define AHBPERIPH_BASE (PERIPH_BASE + 0x20000) + +#define TIM2_BASE (APB1PERIPH_BASE + 0x0000) +#define TIM3_BASE (APB1PERIPH_BASE + 0x0400) +#define TIM4_BASE (APB1PERIPH_BASE + 0x0800) +#define TIM5_BASE (APB1PERIPH_BASE + 0x0C00) +#define TIM6_BASE (APB1PERIPH_BASE + 0x1000) +#define TIM7_BASE (APB1PERIPH_BASE + 0x1400) +#define TIM12_BASE (APB1PERIPH_BASE + 0x1800) +#define TIM13_BASE (APB1PERIPH_BASE + 0x1C00) +#define TIM14_BASE (APB1PERIPH_BASE + 0x2000) +#define RTC_BASE (APB1PERIPH_BASE + 0x2800) +#define WWDG_BASE (APB1PERIPH_BASE + 0x2C00) +#define IWDG_BASE (APB1PERIPH_BASE + 0x3000) +#define SPI2_BASE (APB1PERIPH_BASE + 0x3800) +#define SPI3_BASE (APB1PERIPH_BASE + 0x3C00) +#define USART2_BASE (APB1PERIPH_BASE + 0x4400) +#define USART3_BASE (APB1PERIPH_BASE + 0x4800) +#define UART4_BASE (APB1PERIPH_BASE + 0x4C00) +#define UART5_BASE (APB1PERIPH_BASE + 0x5000) +#define I2C1_BASE (APB1PERIPH_BASE + 0x5400) +#define I2C2_BASE (APB1PERIPH_BASE + 0x5800) +#define CAN1_BASE (APB1PERIPH_BASE + 0x6400) +#define CAN2_BASE (APB1PERIPH_BASE + 0x6800) +#define BKP_BASE (APB1PERIPH_BASE + 0x6C00) +#define PWR_BASE (APB1PERIPH_BASE + 0x7000) +#define DAC_BASE (APB1PERIPH_BASE + 0x7400) +#define CEC_BASE (APB1PERIPH_BASE + 0x7800) + +#define AFIO_BASE (APB2PERIPH_BASE + 0x0000) +#define EXTI_BASE (APB2PERIPH_BASE + 0x0400) +#define GPIOA_BASE (APB2PERIPH_BASE + 0x0800) +#define GPIOB_BASE (APB2PERIPH_BASE + 0x0C00) +#define GPIOC_BASE (APB2PERIPH_BASE + 0x1000) +#define GPIOD_BASE (APB2PERIPH_BASE + 0x1400) +#define GPIOE_BASE (APB2PERIPH_BASE + 0x1800) +#define GPIOF_BASE (APB2PERIPH_BASE + 0x1C00) +#define GPIOG_BASE (APB2PERIPH_BASE + 0x2000) +#define ADC1_BASE (APB2PERIPH_BASE + 0x2400) +#define ADC2_BASE (APB2PERIPH_BASE + 0x2800) +#define TIM1_BASE (APB2PERIPH_BASE + 0x2C00) +#define SPI1_BASE (APB2PERIPH_BASE + 0x3000) +#define TIM8_BASE (APB2PERIPH_BASE + 0x3400) +#define USART1_BASE (APB2PERIPH_BASE + 0x3800) +#define ADC3_BASE (APB2PERIPH_BASE + 0x3C00) +#define TIM15_BASE (APB2PERIPH_BASE + 0x4000) +#define TIM16_BASE (APB2PERIPH_BASE + 0x4400) +#define TIM17_BASE (APB2PERIPH_BASE + 0x4800) +#define TIM9_BASE (APB2PERIPH_BASE + 0x4C00) +#define TIM10_BASE (APB2PERIPH_BASE + 0x5000) +#define TIM11_BASE (APB2PERIPH_BASE + 0x5400) + +#define SDIO_BASE (PERIPH_BASE + 0x18000) + +#define DMA1_BASE (AHBPERIPH_BASE + 0x0000) +#define DMA1_Channel1_BASE (AHBPERIPH_BASE + 0x0008) +#define DMA1_Channel2_BASE (AHBPERIPH_BASE + 0x001C) +#define DMA1_Channel3_BASE (AHBPERIPH_BASE + 0x0030) +#define DMA1_Channel4_BASE (AHBPERIPH_BASE + 0x0044) +#define DMA1_Channel5_BASE (AHBPERIPH_BASE + 0x0058) +#define DMA1_Channel6_BASE (AHBPERIPH_BASE + 0x006C) +#define DMA1_Channel7_BASE (AHBPERIPH_BASE + 0x0080) +#define DMA2_BASE (AHBPERIPH_BASE + 0x0400) +#define DMA2_Channel1_BASE (AHBPERIPH_BASE + 0x0408) +#define DMA2_Channel2_BASE (AHBPERIPH_BASE + 0x041C) +#define DMA2_Channel3_BASE (AHBPERIPH_BASE + 0x0430) +#define DMA2_Channel4_BASE (AHBPERIPH_BASE + 0x0444) +#define DMA2_Channel5_BASE (AHBPERIPH_BASE + 0x0458) +#define RCC_BASE (AHBPERIPH_BASE + 0x1000) +#define CRC_BASE (AHBPERIPH_BASE + 0x3000) + +#define FLASH_R_BASE (AHBPERIPH_BASE + 0x2000) /*!< Flash registers base address */ +#define OB_BASE ((uint32_t)0x1FFFF800) /*!< Flash Option Bytes base address */ + +#define ETH_BASE (AHBPERIPH_BASE + 0x8000) +#define ETH_MAC_BASE (ETH_BASE) +#define ETH_MMC_BASE (ETH_BASE + 0x0100) +#define ETH_PTP_BASE (ETH_BASE + 0x0700) +#define ETH_DMA_BASE (ETH_BASE + 0x1000) + +#define FSMC_Bank1_R_BASE (FSMC_R_BASE + 0x0000) /*!< FSMC Bank1 registers base address */ +#define FSMC_Bank1E_R_BASE (FSMC_R_BASE + 0x0104) /*!< FSMC Bank1E registers base address */ +#define FSMC_Bank2_R_BASE (FSMC_R_BASE + 0x0060) /*!< FSMC Bank2 registers base address */ +#define FSMC_Bank3_R_BASE (FSMC_R_BASE + 0x0080) /*!< FSMC Bank3 registers base address */ +#define FSMC_Bank4_R_BASE (FSMC_R_BASE + 0x00A0) /*!< FSMC Bank4 registers base address */ + +#define DBGMCU_BASE ((uint32_t)0xE0042000) /*!< Debug MCU registers base address */ + +/** + * @} + */ + +/** @addtogroup Peripheral_declaration + * @{ + */ + +#define TIM2 ((TIM_TypeDef *) TIM2_BASE) +#define TIM3 ((TIM_TypeDef *) TIM3_BASE) +#define TIM4 ((TIM_TypeDef *) TIM4_BASE) +#define TIM5 ((TIM_TypeDef *) TIM5_BASE) +#define TIM6 ((TIM_TypeDef *) TIM6_BASE) +#define TIM7 ((TIM_TypeDef *) TIM7_BASE) +#define TIM12 ((TIM_TypeDef *) TIM12_BASE) +#define TIM13 ((TIM_TypeDef *) TIM13_BASE) +#define TIM14 ((TIM_TypeDef *) TIM14_BASE) +#define RTC ((RTC_TypeDef *) RTC_BASE) +#define WWDG ((WWDG_TypeDef *) WWDG_BASE) +#define IWDG ((IWDG_TypeDef *) IWDG_BASE) +#define SPI2 ((SPI_TypeDef *) SPI2_BASE) +#define SPI3 ((SPI_TypeDef *) SPI3_BASE) +#define USART2 ((USART_TypeDef *) USART2_BASE) +#define USART3 ((USART_TypeDef *) USART3_BASE) +#define UART4 ((USART_TypeDef *) UART4_BASE) +#define UART5 ((USART_TypeDef *) UART5_BASE) +#define I2C1 ((I2C_TypeDef *) I2C1_BASE) +#define I2C2 ((I2C_TypeDef *) I2C2_BASE) +#define CAN1 ((CAN_TypeDef *) CAN1_BASE) +#define CAN2 ((CAN_TypeDef *) CAN2_BASE) +#define BKP ((BKP_TypeDef *) BKP_BASE) +#define PWR ((PWR_TypeDef *) PWR_BASE) +#define DAC ((DAC_TypeDef *) DAC_BASE) +#define CEC ((CEC_TypeDef *) CEC_BASE) +#define AFIO ((AFIO_TypeDef *) AFIO_BASE) +#define EXTI ((EXTI_TypeDef *) EXTI_BASE) +#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE) +#define GPIOB ((GPIO_TypeDef *) GPIOB_BASE) +#define GPIOC ((GPIO_TypeDef *) GPIOC_BASE) +#define GPIOD ((GPIO_TypeDef *) GPIOD_BASE) +#define GPIOE ((GPIO_TypeDef *) GPIOE_BASE) +#define GPIOF ((GPIO_TypeDef *) GPIOF_BASE) +#define GPIOG ((GPIO_TypeDef *) GPIOG_BASE) +#define ADC1 ((ADC_TypeDef *) ADC1_BASE) +#define ADC2 ((ADC_TypeDef *) ADC2_BASE) +#define TIM1 ((TIM_TypeDef *) TIM1_BASE) +#define SPI1 ((SPI_TypeDef *) SPI1_BASE) +#define TIM8 ((TIM_TypeDef *) TIM8_BASE) +#define USART1 ((USART_TypeDef *) USART1_BASE) +#define ADC3 ((ADC_TypeDef *) ADC3_BASE) +#define TIM15 ((TIM_TypeDef *) TIM15_BASE) +#define TIM16 ((TIM_TypeDef *) TIM16_BASE) +#define TIM17 ((TIM_TypeDef *) TIM17_BASE) +#define TIM9 ((TIM_TypeDef *) TIM9_BASE) +#define TIM10 ((TIM_TypeDef *) TIM10_BASE) +#define TIM11 ((TIM_TypeDef *) TIM11_BASE) +#define SDIO ((SDIO_TypeDef *) SDIO_BASE) +#define DMA1 ((DMA_TypeDef *) DMA1_BASE) +#define DMA2 ((DMA_TypeDef *) DMA2_BASE) +#define DMA1_Channel1 ((DMA_Channel_TypeDef *) DMA1_Channel1_BASE) +#define DMA1_Channel2 ((DMA_Channel_TypeDef *) DMA1_Channel2_BASE) +#define DMA1_Channel3 ((DMA_Channel_TypeDef *) DMA1_Channel3_BASE) +#define DMA1_Channel4 ((DMA_Channel_TypeDef *) DMA1_Channel4_BASE) +#define DMA1_Channel5 ((DMA_Channel_TypeDef *) DMA1_Channel5_BASE) +#define DMA1_Channel6 ((DMA_Channel_TypeDef *) DMA1_Channel6_BASE) +#define DMA1_Channel7 ((DMA_Channel_TypeDef *) DMA1_Channel7_BASE) +#define DMA2_Channel1 ((DMA_Channel_TypeDef *) DMA2_Channel1_BASE) +#define DMA2_Channel2 ((DMA_Channel_TypeDef *) DMA2_Channel2_BASE) +#define DMA2_Channel3 ((DMA_Channel_TypeDef *) DMA2_Channel3_BASE) +#define DMA2_Channel4 ((DMA_Channel_TypeDef *) DMA2_Channel4_BASE) +#define DMA2_Channel5 ((DMA_Channel_TypeDef *) DMA2_Channel5_BASE) +#define RCC ((RCC_TypeDef *) RCC_BASE) +#define CRC ((CRC_TypeDef *) CRC_BASE) +#define FLASH ((FLASH_TypeDef *) FLASH_R_BASE) +#define OB ((OB_TypeDef *) OB_BASE) +#define ETH ((ETH_TypeDef *) ETH_BASE) +#define FSMC_Bank1 ((FSMC_Bank1_TypeDef *) FSMC_Bank1_R_BASE) +#define FSMC_Bank1E ((FSMC_Bank1E_TypeDef *) FSMC_Bank1E_R_BASE) +#define FSMC_Bank2 ((FSMC_Bank2_TypeDef *) FSMC_Bank2_R_BASE) +#define FSMC_Bank3 ((FSMC_Bank3_TypeDef *) FSMC_Bank3_R_BASE) +#define FSMC_Bank4 ((FSMC_Bank4_TypeDef *) FSMC_Bank4_R_BASE) +#define DBGMCU ((DBGMCU_TypeDef *) DBGMCU_BASE) + +/** + * @} + */ + +/** @addtogroup Exported_constants + * @{ + */ + + /** @addtogroup Peripheral_Registers_Bits_Definition + * @{ + */ + +/******************************************************************************/ +/* Peripheral Registers_Bits_Definition */ +/******************************************************************************/ + +/******************************************************************************/ +/* */ +/* CRC calculation unit */ +/* */ +/******************************************************************************/ + +/******************* Bit definition for CRC_DR register *********************/ +#define CRC_DR_DR ((uint32_t)0xFFFFFFFF) /*!< Data register bits */ + + +/******************* Bit definition for CRC_IDR register ********************/ +#define CRC_IDR_IDR ((uint8_t)0xFF) /*!< General-purpose 8-bit data register bits */ + + +/******************** Bit definition for CRC_CR register ********************/ +#define CRC_CR_RESET ((uint8_t)0x01) /*!< RESET bit */ + +/******************************************************************************/ +/* */ +/* Power Control */ +/* */ +/******************************************************************************/ + +/******************** Bit definition for PWR_CR register ********************/ +#define PWR_CR_LPDS ((uint16_t)0x0001) /*!< Low-Power Deepsleep */ +#define PWR_CR_PDDS ((uint16_t)0x0002) /*!< Power Down Deepsleep */ +#define PWR_CR_CWUF ((uint16_t)0x0004) /*!< Clear Wakeup Flag */ +#define PWR_CR_CSBF ((uint16_t)0x0008) /*!< Clear Standby Flag */ +#define PWR_CR_PVDE ((uint16_t)0x0010) /*!< Power Voltage Detector Enable */ + +#define PWR_CR_PLS ((uint16_t)0x00E0) /*!< PLS[2:0] bits (PVD Level Selection) */ +#define PWR_CR_PLS_0 ((uint16_t)0x0020) /*!< Bit 0 */ +#define PWR_CR_PLS_1 ((uint16_t)0x0040) /*!< Bit 1 */ +#define PWR_CR_PLS_2 ((uint16_t)0x0080) /*!< Bit 2 */ + +/*!< PVD level configuration */ +#define PWR_CR_PLS_2V2 ((uint16_t)0x0000) /*!< PVD level 2.2V */ +#define PWR_CR_PLS_2V3 ((uint16_t)0x0020) /*!< PVD level 2.3V */ +#define PWR_CR_PLS_2V4 ((uint16_t)0x0040) /*!< PVD level 2.4V */ +#define PWR_CR_PLS_2V5 ((uint16_t)0x0060) /*!< PVD level 2.5V */ +#define PWR_CR_PLS_2V6 ((uint16_t)0x0080) /*!< PVD level 2.6V */ +#define PWR_CR_PLS_2V7 ((uint16_t)0x00A0) /*!< PVD level 2.7V */ +#define PWR_CR_PLS_2V8 ((uint16_t)0x00C0) /*!< PVD level 2.8V */ +#define PWR_CR_PLS_2V9 ((uint16_t)0x00E0) /*!< PVD level 2.9V */ + +#define PWR_CR_DBP ((uint16_t)0x0100) /*!< Disable Backup Domain write protection */ + + +/******************* Bit definition for PWR_CSR register ********************/ +#define PWR_CSR_WUF ((uint16_t)0x0001) /*!< Wakeup Flag */ +#define PWR_CSR_SBF ((uint16_t)0x0002) /*!< Standby Flag */ +#define PWR_CSR_PVDO ((uint16_t)0x0004) /*!< PVD Output */ +#define PWR_CSR_EWUP ((uint16_t)0x0100) /*!< Enable WKUP pin */ + +/******************************************************************************/ +/* */ +/* Backup registers */ +/* */ +/******************************************************************************/ + +/******************* Bit definition for BKP_DR1 register ********************/ +#define BKP_DR1_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR2 register ********************/ +#define BKP_DR2_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR3 register ********************/ +#define BKP_DR3_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR4 register ********************/ +#define BKP_DR4_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR5 register ********************/ +#define BKP_DR5_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR6 register ********************/ +#define BKP_DR6_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR7 register ********************/ +#define BKP_DR7_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR8 register ********************/ +#define BKP_DR8_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR9 register ********************/ +#define BKP_DR9_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR10 register *******************/ +#define BKP_DR10_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR11 register *******************/ +#define BKP_DR11_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR12 register *******************/ +#define BKP_DR12_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR13 register *******************/ +#define BKP_DR13_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR14 register *******************/ +#define BKP_DR14_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR15 register *******************/ +#define BKP_DR15_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR16 register *******************/ +#define BKP_DR16_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR17 register *******************/ +#define BKP_DR17_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/****************** Bit definition for BKP_DR18 register ********************/ +#define BKP_DR18_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR19 register *******************/ +#define BKP_DR19_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR20 register *******************/ +#define BKP_DR20_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR21 register *******************/ +#define BKP_DR21_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR22 register *******************/ +#define BKP_DR22_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR23 register *******************/ +#define BKP_DR23_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR24 register *******************/ +#define BKP_DR24_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR25 register *******************/ +#define BKP_DR25_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR26 register *******************/ +#define BKP_DR26_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR27 register *******************/ +#define BKP_DR27_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR28 register *******************/ +#define BKP_DR28_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR29 register *******************/ +#define BKP_DR29_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR30 register *******************/ +#define BKP_DR30_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR31 register *******************/ +#define BKP_DR31_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR32 register *******************/ +#define BKP_DR32_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR33 register *******************/ +#define BKP_DR33_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR34 register *******************/ +#define BKP_DR34_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR35 register *******************/ +#define BKP_DR35_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR36 register *******************/ +#define BKP_DR36_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR37 register *******************/ +#define BKP_DR37_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR38 register *******************/ +#define BKP_DR38_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR39 register *******************/ +#define BKP_DR39_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR40 register *******************/ +#define BKP_DR40_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR41 register *******************/ +#define BKP_DR41_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR42 register *******************/ +#define BKP_DR42_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/****************** Bit definition for BKP_RTCCR register *******************/ +#define BKP_RTCCR_CAL ((uint16_t)0x007F) /*!< Calibration value */ +#define BKP_RTCCR_CCO ((uint16_t)0x0080) /*!< Calibration Clock Output */ +#define BKP_RTCCR_ASOE ((uint16_t)0x0100) /*!< Alarm or Second Output Enable */ +#define BKP_RTCCR_ASOS ((uint16_t)0x0200) /*!< Alarm or Second Output Selection */ + +/******************** Bit definition for BKP_CR register ********************/ +#define BKP_CR_TPE ((uint8_t)0x01) /*!< TAMPER pin enable */ +#define BKP_CR_TPAL ((uint8_t)0x02) /*!< TAMPER pin active level */ + +/******************* Bit definition for BKP_CSR register ********************/ +#define BKP_CSR_CTE ((uint16_t)0x0001) /*!< Clear Tamper event */ +#define BKP_CSR_CTI ((uint16_t)0x0002) /*!< Clear Tamper Interrupt */ +#define BKP_CSR_TPIE ((uint16_t)0x0004) /*!< TAMPER Pin interrupt enable */ +#define BKP_CSR_TEF ((uint16_t)0x0100) /*!< Tamper Event Flag */ +#define BKP_CSR_TIF ((uint16_t)0x0200) /*!< Tamper Interrupt Flag */ + +/******************************************************************************/ +/* */ +/* Reset and Clock Control */ +/* */ +/******************************************************************************/ + +/******************** Bit definition for RCC_CR register ********************/ +#define RCC_CR_HSION ((uint32_t)0x00000001) /*!< Internal High Speed clock enable */ +#define RCC_CR_HSIRDY ((uint32_t)0x00000002) /*!< Internal High Speed clock ready flag */ +#define RCC_CR_HSITRIM ((uint32_t)0x000000F8) /*!< Internal High Speed clock trimming */ +#define RCC_CR_HSICAL ((uint32_t)0x0000FF00) /*!< Internal High Speed clock Calibration */ +#define RCC_CR_HSEON ((uint32_t)0x00010000) /*!< External High Speed clock enable */ +#define RCC_CR_HSERDY ((uint32_t)0x00020000) /*!< External High Speed clock ready flag */ +#define RCC_CR_HSEBYP ((uint32_t)0x00040000) /*!< External High Speed clock Bypass */ +#define RCC_CR_CSSON ((uint32_t)0x00080000) /*!< Clock Security System enable */ +#define RCC_CR_PLLON ((uint32_t)0x01000000) /*!< PLL enable */ +#define RCC_CR_PLLRDY ((uint32_t)0x02000000) /*!< PLL clock ready flag */ + +#ifdef STM32F10X_CL + #define RCC_CR_PLL2ON ((uint32_t)0x04000000) /*!< PLL2 enable */ + #define RCC_CR_PLL2RDY ((uint32_t)0x08000000) /*!< PLL2 clock ready flag */ + #define RCC_CR_PLL3ON ((uint32_t)0x10000000) /*!< PLL3 enable */ + #define RCC_CR_PLL3RDY ((uint32_t)0x20000000) /*!< PLL3 clock ready flag */ +#endif /* STM32F10X_CL */ + +/******************* Bit definition for RCC_CFGR register *******************/ +/*!< SW configuration */ +#define RCC_CFGR_SW ((uint32_t)0x00000003) /*!< SW[1:0] bits (System clock Switch) */ +#define RCC_CFGR_SW_0 ((uint32_t)0x00000001) /*!< Bit 0 */ +#define RCC_CFGR_SW_1 ((uint32_t)0x00000002) /*!< Bit 1 */ + +#define RCC_CFGR_SW_HSI ((uint32_t)0x00000000) /*!< HSI selected as system clock */ +#define RCC_CFGR_SW_HSE ((uint32_t)0x00000001) /*!< HSE selected as system clock */ +#define RCC_CFGR_SW_PLL ((uint32_t)0x00000002) /*!< PLL selected as system clock */ + +/*!< SWS configuration */ +#define RCC_CFGR_SWS ((uint32_t)0x0000000C) /*!< SWS[1:0] bits (System Clock Switch Status) */ +#define RCC_CFGR_SWS_0 ((uint32_t)0x00000004) /*!< Bit 0 */ +#define RCC_CFGR_SWS_1 ((uint32_t)0x00000008) /*!< Bit 1 */ + +#define RCC_CFGR_SWS_HSI ((uint32_t)0x00000000) /*!< HSI oscillator used as system clock */ +#define RCC_CFGR_SWS_HSE ((uint32_t)0x00000004) /*!< HSE oscillator used as system clock */ +#define RCC_CFGR_SWS_PLL ((uint32_t)0x00000008) /*!< PLL used as system clock */ + +/*!< HPRE configuration */ +#define RCC_CFGR_HPRE ((uint32_t)0x000000F0) /*!< HPRE[3:0] bits (AHB prescaler) */ +#define RCC_CFGR_HPRE_0 ((uint32_t)0x00000010) /*!< Bit 0 */ +#define RCC_CFGR_HPRE_1 ((uint32_t)0x00000020) /*!< Bit 1 */ +#define RCC_CFGR_HPRE_2 ((uint32_t)0x00000040) /*!< Bit 2 */ +#define RCC_CFGR_HPRE_3 ((uint32_t)0x00000080) /*!< Bit 3 */ + +#define RCC_CFGR_HPRE_DIV1 ((uint32_t)0x00000000) /*!< SYSCLK not divided */ +#define RCC_CFGR_HPRE_DIV2 ((uint32_t)0x00000080) /*!< SYSCLK divided by 2 */ +#define RCC_CFGR_HPRE_DIV4 ((uint32_t)0x00000090) /*!< SYSCLK divided by 4 */ +#define RCC_CFGR_HPRE_DIV8 ((uint32_t)0x000000A0) /*!< SYSCLK divided by 8 */ +#define RCC_CFGR_HPRE_DIV16 ((uint32_t)0x000000B0) /*!< SYSCLK divided by 16 */ +#define RCC_CFGR_HPRE_DIV64 ((uint32_t)0x000000C0) /*!< SYSCLK divided by 64 */ +#define RCC_CFGR_HPRE_DIV128 ((uint32_t)0x000000D0) /*!< SYSCLK divided by 128 */ +#define RCC_CFGR_HPRE_DIV256 ((uint32_t)0x000000E0) /*!< SYSCLK divided by 256 */ +#define RCC_CFGR_HPRE_DIV512 ((uint32_t)0x000000F0) /*!< SYSCLK divided by 512 */ + +/*!< PPRE1 configuration */ +#define RCC_CFGR_PPRE1 ((uint32_t)0x00000700) /*!< PRE1[2:0] bits (APB1 prescaler) */ +#define RCC_CFGR_PPRE1_0 ((uint32_t)0x00000100) /*!< Bit 0 */ +#define RCC_CFGR_PPRE1_1 ((uint32_t)0x00000200) /*!< Bit 1 */ +#define RCC_CFGR_PPRE1_2 ((uint32_t)0x00000400) /*!< Bit 2 */ + +#define RCC_CFGR_PPRE1_DIV1 ((uint32_t)0x00000000) /*!< HCLK not divided */ +#define RCC_CFGR_PPRE1_DIV2 ((uint32_t)0x00000400) /*!< HCLK divided by 2 */ +#define RCC_CFGR_PPRE1_DIV4 ((uint32_t)0x00000500) /*!< HCLK divided by 4 */ +#define RCC_CFGR_PPRE1_DIV8 ((uint32_t)0x00000600) /*!< HCLK divided by 8 */ +#define RCC_CFGR_PPRE1_DIV16 ((uint32_t)0x00000700) /*!< HCLK divided by 16 */ + +/*!< PPRE2 configuration */ +#define RCC_CFGR_PPRE2 ((uint32_t)0x00003800) /*!< PRE2[2:0] bits (APB2 prescaler) */ +#define RCC_CFGR_PPRE2_0 ((uint32_t)0x00000800) /*!< Bit 0 */ +#define RCC_CFGR_PPRE2_1 ((uint32_t)0x00001000) /*!< Bit 1 */ +#define RCC_CFGR_PPRE2_2 ((uint32_t)0x00002000) /*!< Bit 2 */ + +#define RCC_CFGR_PPRE2_DIV1 ((uint32_t)0x00000000) /*!< HCLK not divided */ +#define RCC_CFGR_PPRE2_DIV2 ((uint32_t)0x00002000) /*!< HCLK divided by 2 */ +#define RCC_CFGR_PPRE2_DIV4 ((uint32_t)0x00002800) /*!< HCLK divided by 4 */ +#define RCC_CFGR_PPRE2_DIV8 ((uint32_t)0x00003000) /*!< HCLK divided by 8 */ +#define RCC_CFGR_PPRE2_DIV16 ((uint32_t)0x00003800) /*!< HCLK divided by 16 */ + +/*!< ADCPPRE configuration */ +#define RCC_CFGR_ADCPRE ((uint32_t)0x0000C000) /*!< ADCPRE[1:0] bits (ADC prescaler) */ +#define RCC_CFGR_ADCPRE_0 ((uint32_t)0x00004000) /*!< Bit 0 */ +#define RCC_CFGR_ADCPRE_1 ((uint32_t)0x00008000) /*!< Bit 1 */ + +#define RCC_CFGR_ADCPRE_DIV2 ((uint32_t)0x00000000) /*!< PCLK2 divided by 2 */ +#define RCC_CFGR_ADCPRE_DIV4 ((uint32_t)0x00004000) /*!< PCLK2 divided by 4 */ +#define RCC_CFGR_ADCPRE_DIV6 ((uint32_t)0x00008000) /*!< PCLK2 divided by 6 */ +#define RCC_CFGR_ADCPRE_DIV8 ((uint32_t)0x0000C000) /*!< PCLK2 divided by 8 */ + +#define RCC_CFGR_PLLSRC ((uint32_t)0x00010000) /*!< PLL entry clock source */ + +#define RCC_CFGR_PLLXTPRE ((uint32_t)0x00020000) /*!< HSE divider for PLL entry */ + +/*!< PLLMUL configuration */ +#define RCC_CFGR_PLLMULL ((uint32_t)0x003C0000) /*!< PLLMUL[3:0] bits (PLL multiplication factor) */ +#define RCC_CFGR_PLLMULL_0 ((uint32_t)0x00040000) /*!< Bit 0 */ +#define RCC_CFGR_PLLMULL_1 ((uint32_t)0x00080000) /*!< Bit 1 */ +#define RCC_CFGR_PLLMULL_2 ((uint32_t)0x00100000) /*!< Bit 2 */ +#define RCC_CFGR_PLLMULL_3 ((uint32_t)0x00200000) /*!< Bit 3 */ + +#ifdef STM32F10X_CL + #define RCC_CFGR_PLLSRC_HSI_Div2 ((uint32_t)0x00000000) /*!< HSI clock divided by 2 selected as PLL entry clock source */ + #define RCC_CFGR_PLLSRC_PREDIV1 ((uint32_t)0x00010000) /*!< PREDIV1 clock selected as PLL entry clock source */ + + #define RCC_CFGR_PLLXTPRE_PREDIV1 ((uint32_t)0x00000000) /*!< PREDIV1 clock not divided for PLL entry */ + #define RCC_CFGR_PLLXTPRE_PREDIV1_Div2 ((uint32_t)0x00020000) /*!< PREDIV1 clock divided by 2 for PLL entry */ + + #define RCC_CFGR_PLLMULL4 ((uint32_t)0x00080000) /*!< PLL input clock * 4 */ + #define RCC_CFGR_PLLMULL5 ((uint32_t)0x000C0000) /*!< PLL input clock * 5 */ + #define RCC_CFGR_PLLMULL6 ((uint32_t)0x00100000) /*!< PLL input clock * 6 */ + #define RCC_CFGR_PLLMULL7 ((uint32_t)0x00140000) /*!< PLL input clock * 7 */ + #define RCC_CFGR_PLLMULL8 ((uint32_t)0x00180000) /*!< PLL input clock * 8 */ + #define RCC_CFGR_PLLMULL9 ((uint32_t)0x001C0000) /*!< PLL input clock * 9 */ + #define RCC_CFGR_PLLMULL6_5 ((uint32_t)0x00340000) /*!< PLL input clock * 6.5 */ + + #define RCC_CFGR_OTGFSPRE ((uint32_t)0x00400000) /*!< USB OTG FS prescaler */ + +/*!< MCO configuration */ + #define RCC_CFGR_MCO ((uint32_t)0x0F000000) /*!< MCO[3:0] bits (Microcontroller Clock Output) */ + #define RCC_CFGR_MCO_0 ((uint32_t)0x01000000) /*!< Bit 0 */ + #define RCC_CFGR_MCO_1 ((uint32_t)0x02000000) /*!< Bit 1 */ + #define RCC_CFGR_MCO_2 ((uint32_t)0x04000000) /*!< Bit 2 */ + #define RCC_CFGR_MCO_3 ((uint32_t)0x08000000) /*!< Bit 3 */ + + #define RCC_CFGR_MCO_NOCLOCK ((uint32_t)0x00000000) /*!< No clock */ + #define RCC_CFGR_MCO_SYSCLK ((uint32_t)0x04000000) /*!< System clock selected as MCO source */ + #define RCC_CFGR_MCO_HSI ((uint32_t)0x05000000) /*!< HSI clock selected as MCO source */ + #define RCC_CFGR_MCO_HSE ((uint32_t)0x06000000) /*!< HSE clock selected as MCO source */ + #define RCC_CFGR_MCO_PLLCLK_Div2 ((uint32_t)0x07000000) /*!< PLL clock divided by 2 selected as MCO source */ + #define RCC_CFGR_MCO_PLL2CLK ((uint32_t)0x08000000) /*!< PLL2 clock selected as MCO source*/ + #define RCC_CFGR_MCO_PLL3CLK_Div2 ((uint32_t)0x09000000) /*!< PLL3 clock divided by 2 selected as MCO source*/ + #define RCC_CFGR_MCO_Ext_HSE ((uint32_t)0x0A000000) /*!< XT1 external 3-25 MHz oscillator clock selected as MCO source */ + #define RCC_CFGR_MCO_PLL3CLK ((uint32_t)0x0B000000) /*!< PLL3 clock selected as MCO source */ +#elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL) + #define RCC_CFGR_PLLSRC_HSI_Div2 ((uint32_t)0x00000000) /*!< HSI clock divided by 2 selected as PLL entry clock source */ + #define RCC_CFGR_PLLSRC_PREDIV1 ((uint32_t)0x00010000) /*!< PREDIV1 clock selected as PLL entry clock source */ + + #define RCC_CFGR_PLLXTPRE_PREDIV1 ((uint32_t)0x00000000) /*!< PREDIV1 clock not divided for PLL entry */ + #define RCC_CFGR_PLLXTPRE_PREDIV1_Div2 ((uint32_t)0x00020000) /*!< PREDIV1 clock divided by 2 for PLL entry */ + + #define RCC_CFGR_PLLMULL2 ((uint32_t)0x00000000) /*!< PLL input clock*2 */ + #define RCC_CFGR_PLLMULL3 ((uint32_t)0x00040000) /*!< PLL input clock*3 */ + #define RCC_CFGR_PLLMULL4 ((uint32_t)0x00080000) /*!< PLL input clock*4 */ + #define RCC_CFGR_PLLMULL5 ((uint32_t)0x000C0000) /*!< PLL input clock*5 */ + #define RCC_CFGR_PLLMULL6 ((uint32_t)0x00100000) /*!< PLL input clock*6 */ + #define RCC_CFGR_PLLMULL7 ((uint32_t)0x00140000) /*!< PLL input clock*7 */ + #define RCC_CFGR_PLLMULL8 ((uint32_t)0x00180000) /*!< PLL input clock*8 */ + #define RCC_CFGR_PLLMULL9 ((uint32_t)0x001C0000) /*!< PLL input clock*9 */ + #define RCC_CFGR_PLLMULL10 ((uint32_t)0x00200000) /*!< PLL input clock10 */ + #define RCC_CFGR_PLLMULL11 ((uint32_t)0x00240000) /*!< PLL input clock*11 */ + #define RCC_CFGR_PLLMULL12 ((uint32_t)0x00280000) /*!< PLL input clock*12 */ + #define RCC_CFGR_PLLMULL13 ((uint32_t)0x002C0000) /*!< PLL input clock*13 */ + #define RCC_CFGR_PLLMULL14 ((uint32_t)0x00300000) /*!< PLL input clock*14 */ + #define RCC_CFGR_PLLMULL15 ((uint32_t)0x00340000) /*!< PLL input clock*15 */ + #define RCC_CFGR_PLLMULL16 ((uint32_t)0x00380000) /*!< PLL input clock*16 */ + +/*!< MCO configuration */ + #define RCC_CFGR_MCO ((uint32_t)0x07000000) /*!< MCO[2:0] bits (Microcontroller Clock Output) */ + #define RCC_CFGR_MCO_0 ((uint32_t)0x01000000) /*!< Bit 0 */ + #define RCC_CFGR_MCO_1 ((uint32_t)0x02000000) /*!< Bit 1 */ + #define RCC_CFGR_MCO_2 ((uint32_t)0x04000000) /*!< Bit 2 */ + + #define RCC_CFGR_MCO_NOCLOCK ((uint32_t)0x00000000) /*!< No clock */ + #define RCC_CFGR_MCO_SYSCLK ((uint32_t)0x04000000) /*!< System clock selected as MCO source */ + #define RCC_CFGR_MCO_HSI ((uint32_t)0x05000000) /*!< HSI clock selected as MCO source */ + #define RCC_CFGR_MCO_HSE ((uint32_t)0x06000000) /*!< HSE clock selected as MCO source */ + #define RCC_CFGR_MCO_PLL ((uint32_t)0x07000000) /*!< PLL clock divided by 2 selected as MCO source */ +#else + #define RCC_CFGR_PLLSRC_HSI_Div2 ((uint32_t)0x00000000) /*!< HSI clock divided by 2 selected as PLL entry clock source */ + #define RCC_CFGR_PLLSRC_HSE ((uint32_t)0x00010000) /*!< HSE clock selected as PLL entry clock source */ + + #define RCC_CFGR_PLLXTPRE_HSE ((uint32_t)0x00000000) /*!< HSE clock not divided for PLL entry */ + #define RCC_CFGR_PLLXTPRE_HSE_Div2 ((uint32_t)0x00020000) /*!< HSE clock divided by 2 for PLL entry */ + + #define RCC_CFGR_PLLMULL2 ((uint32_t)0x00000000) /*!< PLL input clock*2 */ + #define RCC_CFGR_PLLMULL3 ((uint32_t)0x00040000) /*!< PLL input clock*3 */ + #define RCC_CFGR_PLLMULL4 ((uint32_t)0x00080000) /*!< PLL input clock*4 */ + #define RCC_CFGR_PLLMULL5 ((uint32_t)0x000C0000) /*!< PLL input clock*5 */ + #define RCC_CFGR_PLLMULL6 ((uint32_t)0x00100000) /*!< PLL input clock*6 */ + #define RCC_CFGR_PLLMULL7 ((uint32_t)0x00140000) /*!< PLL input clock*7 */ + #define RCC_CFGR_PLLMULL8 ((uint32_t)0x00180000) /*!< PLL input clock*8 */ + #define RCC_CFGR_PLLMULL9 ((uint32_t)0x001C0000) /*!< PLL input clock*9 */ + #define RCC_CFGR_PLLMULL10 ((uint32_t)0x00200000) /*!< PLL input clock10 */ + #define RCC_CFGR_PLLMULL11 ((uint32_t)0x00240000) /*!< PLL input clock*11 */ + #define RCC_CFGR_PLLMULL12 ((uint32_t)0x00280000) /*!< PLL input clock*12 */ + #define RCC_CFGR_PLLMULL13 ((uint32_t)0x002C0000) /*!< PLL input clock*13 */ + #define RCC_CFGR_PLLMULL14 ((uint32_t)0x00300000) /*!< PLL input clock*14 */ + #define RCC_CFGR_PLLMULL15 ((uint32_t)0x00340000) /*!< PLL input clock*15 */ + #define RCC_CFGR_PLLMULL16 ((uint32_t)0x00380000) /*!< PLL input clock*16 */ + #define RCC_CFGR_USBPRE ((uint32_t)0x00400000) /*!< USB Device prescaler */ + +/*!< MCO configuration */ + #define RCC_CFGR_MCO ((uint32_t)0x07000000) /*!< MCO[2:0] bits (Microcontroller Clock Output) */ + #define RCC_CFGR_MCO_0 ((uint32_t)0x01000000) /*!< Bit 0 */ + #define RCC_CFGR_MCO_1 ((uint32_t)0x02000000) /*!< Bit 1 */ + #define RCC_CFGR_MCO_2 ((uint32_t)0x04000000) /*!< Bit 2 */ + + #define RCC_CFGR_MCO_NOCLOCK ((uint32_t)0x00000000) /*!< No clock */ + #define RCC_CFGR_MCO_SYSCLK ((uint32_t)0x04000000) /*!< System clock selected as MCO source */ + #define RCC_CFGR_MCO_HSI ((uint32_t)0x05000000) /*!< HSI clock selected as MCO source */ + #define RCC_CFGR_MCO_HSE ((uint32_t)0x06000000) /*!< HSE clock selected as MCO source */ + #define RCC_CFGR_MCO_PLL ((uint32_t)0x07000000) /*!< PLL clock divided by 2 selected as MCO source */ +#endif /* STM32F10X_CL */ + +/*!<****************** Bit definition for RCC_CIR register ********************/ +#define RCC_CIR_LSIRDYF ((uint32_t)0x00000001) /*!< LSI Ready Interrupt flag */ +#define RCC_CIR_LSERDYF ((uint32_t)0x00000002) /*!< LSE Ready Interrupt flag */ +#define RCC_CIR_HSIRDYF ((uint32_t)0x00000004) /*!< HSI Ready Interrupt flag */ +#define RCC_CIR_HSERDYF ((uint32_t)0x00000008) /*!< HSE Ready Interrupt flag */ +#define RCC_CIR_PLLRDYF ((uint32_t)0x00000010) /*!< PLL Ready Interrupt flag */ +#define RCC_CIR_CSSF ((uint32_t)0x00000080) /*!< Clock Security System Interrupt flag */ +#define RCC_CIR_LSIRDYIE ((uint32_t)0x00000100) /*!< LSI Ready Interrupt Enable */ +#define RCC_CIR_LSERDYIE ((uint32_t)0x00000200) /*!< LSE Ready Interrupt Enable */ +#define RCC_CIR_HSIRDYIE ((uint32_t)0x00000400) /*!< HSI Ready Interrupt Enable */ +#define RCC_CIR_HSERDYIE ((uint32_t)0x00000800) /*!< HSE Ready Interrupt Enable */ +#define RCC_CIR_PLLRDYIE ((uint32_t)0x00001000) /*!< PLL Ready Interrupt Enable */ +#define RCC_CIR_LSIRDYC ((uint32_t)0x00010000) /*!< LSI Ready Interrupt Clear */ +#define RCC_CIR_LSERDYC ((uint32_t)0x00020000) /*!< LSE Ready Interrupt Clear */ +#define RCC_CIR_HSIRDYC ((uint32_t)0x00040000) /*!< HSI Ready Interrupt Clear */ +#define RCC_CIR_HSERDYC ((uint32_t)0x00080000) /*!< HSE Ready Interrupt Clear */ +#define RCC_CIR_PLLRDYC ((uint32_t)0x00100000) /*!< PLL Ready Interrupt Clear */ +#define RCC_CIR_CSSC ((uint32_t)0x00800000) /*!< Clock Security System Interrupt Clear */ + +#ifdef STM32F10X_CL + #define RCC_CIR_PLL2RDYF ((uint32_t)0x00000020) /*!< PLL2 Ready Interrupt flag */ + #define RCC_CIR_PLL3RDYF ((uint32_t)0x00000040) /*!< PLL3 Ready Interrupt flag */ + #define RCC_CIR_PLL2RDYIE ((uint32_t)0x00002000) /*!< PLL2 Ready Interrupt Enable */ + #define RCC_CIR_PLL3RDYIE ((uint32_t)0x00004000) /*!< PLL3 Ready Interrupt Enable */ + #define RCC_CIR_PLL2RDYC ((uint32_t)0x00200000) /*!< PLL2 Ready Interrupt Clear */ + #define RCC_CIR_PLL3RDYC ((uint32_t)0x00400000) /*!< PLL3 Ready Interrupt Clear */ +#endif /* STM32F10X_CL */ + +/***************** Bit definition for RCC_APB2RSTR register *****************/ +#define RCC_APB2RSTR_AFIORST ((uint32_t)0x00000001) /*!< Alternate Function I/O reset */ +#define RCC_APB2RSTR_IOPARST ((uint32_t)0x00000004) /*!< I/O port A reset */ +#define RCC_APB2RSTR_IOPBRST ((uint32_t)0x00000008) /*!< I/O port B reset */ +#define RCC_APB2RSTR_IOPCRST ((uint32_t)0x00000010) /*!< I/O port C reset */ +#define RCC_APB2RSTR_IOPDRST ((uint32_t)0x00000020) /*!< I/O port D reset */ +#define RCC_APB2RSTR_ADC1RST ((uint32_t)0x00000200) /*!< ADC 1 interface reset */ + +#if !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD_VL) && !defined (STM32F10X_HD_VL) +#define RCC_APB2RSTR_ADC2RST ((uint32_t)0x00000400) /*!< ADC 2 interface reset */ +#endif + +#define RCC_APB2RSTR_TIM1RST ((uint32_t)0x00000800) /*!< TIM1 Timer reset */ +#define RCC_APB2RSTR_SPI1RST ((uint32_t)0x00001000) /*!< SPI 1 reset */ +#define RCC_APB2RSTR_USART1RST ((uint32_t)0x00004000) /*!< USART1 reset */ + +#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL) +#define RCC_APB2RSTR_TIM15RST ((uint32_t)0x00010000) /*!< TIM15 Timer reset */ +#define RCC_APB2RSTR_TIM16RST ((uint32_t)0x00020000) /*!< TIM16 Timer reset */ +#define RCC_APB2RSTR_TIM17RST ((uint32_t)0x00040000) /*!< TIM17 Timer reset */ +#endif + +#if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) + #define RCC_APB2RSTR_IOPERST ((uint32_t)0x00000040) /*!< I/O port E reset */ +#endif /* STM32F10X_LD && STM32F10X_LD_VL */ + +#if defined (STM32F10X_HD) || defined (STM32F10X_XL) + #define RCC_APB2RSTR_IOPFRST ((uint32_t)0x00000080) /*!< I/O port F reset */ + #define RCC_APB2RSTR_IOPGRST ((uint32_t)0x00000100) /*!< I/O port G reset */ + #define RCC_APB2RSTR_TIM8RST ((uint32_t)0x00002000) /*!< TIM8 Timer reset */ + #define RCC_APB2RSTR_ADC3RST ((uint32_t)0x00008000) /*!< ADC3 interface reset */ +#endif + +#if defined (STM32F10X_HD_VL) + #define RCC_APB2RSTR_IOPFRST ((uint32_t)0x00000080) /*!< I/O port F reset */ + #define RCC_APB2RSTR_IOPGRST ((uint32_t)0x00000100) /*!< I/O port G reset */ +#endif + +#ifdef STM32F10X_XL + #define RCC_APB2RSTR_TIM9RST ((uint32_t)0x00080000) /*!< TIM9 Timer reset */ + #define RCC_APB2RSTR_TIM10RST ((uint32_t)0x00100000) /*!< TIM10 Timer reset */ + #define RCC_APB2RSTR_TIM11RST ((uint32_t)0x00200000) /*!< TIM11 Timer reset */ +#endif /* STM32F10X_XL */ + +/***************** Bit definition for RCC_APB1RSTR register *****************/ +#define RCC_APB1RSTR_TIM2RST ((uint32_t)0x00000001) /*!< Timer 2 reset */ +#define RCC_APB1RSTR_TIM3RST ((uint32_t)0x00000002) /*!< Timer 3 reset */ +#define RCC_APB1RSTR_WWDGRST ((uint32_t)0x00000800) /*!< Window Watchdog reset */ +#define RCC_APB1RSTR_USART2RST ((uint32_t)0x00020000) /*!< USART 2 reset */ +#define RCC_APB1RSTR_I2C1RST ((uint32_t)0x00200000) /*!< I2C 1 reset */ + +#if !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD_VL) && !defined (STM32F10X_HD_VL) +#define RCC_APB1RSTR_CAN1RST ((uint32_t)0x02000000) /*!< CAN1 reset */ +#endif + +#define RCC_APB1RSTR_BKPRST ((uint32_t)0x08000000) /*!< Backup interface reset */ +#define RCC_APB1RSTR_PWRRST ((uint32_t)0x10000000) /*!< Power interface reset */ + +#if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) + #define RCC_APB1RSTR_TIM4RST ((uint32_t)0x00000004) /*!< Timer 4 reset */ + #define RCC_APB1RSTR_SPI2RST ((uint32_t)0x00004000) /*!< SPI 2 reset */ + #define RCC_APB1RSTR_USART3RST ((uint32_t)0x00040000) /*!< USART 3 reset */ + #define RCC_APB1RSTR_I2C2RST ((uint32_t)0x00400000) /*!< I2C 2 reset */ +#endif /* STM32F10X_LD && STM32F10X_LD_VL */ + +#if defined (STM32F10X_HD) || defined (STM32F10X_MD) || defined (STM32F10X_LD) || defined (STM32F10X_XL) + #define RCC_APB1RSTR_USBRST ((uint32_t)0x00800000) /*!< USB Device reset */ +#endif + +#if defined (STM32F10X_HD) || defined (STM32F10X_CL) || defined (STM32F10X_XL) + #define RCC_APB1RSTR_TIM5RST ((uint32_t)0x00000008) /*!< Timer 5 reset */ + #define RCC_APB1RSTR_TIM6RST ((uint32_t)0x00000010) /*!< Timer 6 reset */ + #define RCC_APB1RSTR_TIM7RST ((uint32_t)0x00000020) /*!< Timer 7 reset */ + #define RCC_APB1RSTR_SPI3RST ((uint32_t)0x00008000) /*!< SPI 3 reset */ + #define RCC_APB1RSTR_UART4RST ((uint32_t)0x00080000) /*!< UART 4 reset */ + #define RCC_APB1RSTR_UART5RST ((uint32_t)0x00100000) /*!< UART 5 reset */ + #define RCC_APB1RSTR_DACRST ((uint32_t)0x20000000) /*!< DAC interface reset */ +#endif + +#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL) + #define RCC_APB1RSTR_TIM6RST ((uint32_t)0x00000010) /*!< Timer 6 reset */ + #define RCC_APB1RSTR_TIM7RST ((uint32_t)0x00000020) /*!< Timer 7 reset */ + #define RCC_APB1RSTR_DACRST ((uint32_t)0x20000000) /*!< DAC interface reset */ + #define RCC_APB1RSTR_CECRST ((uint32_t)0x40000000) /*!< CEC interface reset */ +#endif + +#if defined (STM32F10X_HD_VL) + #define RCC_APB1RSTR_TIM5RST ((uint32_t)0x00000008) /*!< Timer 5 reset */ + #define RCC_APB1RSTR_TIM12RST ((uint32_t)0x00000040) /*!< TIM12 Timer reset */ + #define RCC_APB1RSTR_TIM13RST ((uint32_t)0x00000080) /*!< TIM13 Timer reset */ + #define RCC_APB1RSTR_TIM14RST ((uint32_t)0x00000100) /*!< TIM14 Timer reset */ + #define RCC_APB1RSTR_SPI3RST ((uint32_t)0x00008000) /*!< SPI 3 reset */ + #define RCC_APB1RSTR_UART4RST ((uint32_t)0x00080000) /*!< UART 4 reset */ + #define RCC_APB1RSTR_UART5RST ((uint32_t)0x00100000) /*!< UART 5 reset */ +#endif + +#ifdef STM32F10X_CL + #define RCC_APB1RSTR_CAN2RST ((uint32_t)0x04000000) /*!< CAN2 reset */ +#endif /* STM32F10X_CL */ + +#ifdef STM32F10X_XL + #define RCC_APB1RSTR_TIM12RST ((uint32_t)0x00000040) /*!< TIM12 Timer reset */ + #define RCC_APB1RSTR_TIM13RST ((uint32_t)0x00000080) /*!< TIM13 Timer reset */ + #define RCC_APB1RSTR_TIM14RST ((uint32_t)0x00000100) /*!< TIM14 Timer reset */ +#endif /* STM32F10X_XL */ + +/****************** Bit definition for RCC_AHBENR register ******************/ +#define RCC_AHBENR_DMA1EN ((uint16_t)0x0001) /*!< DMA1 clock enable */ +#define RCC_AHBENR_SRAMEN ((uint16_t)0x0004) /*!< SRAM interface clock enable */ +#define RCC_AHBENR_FLITFEN ((uint16_t)0x0010) /*!< FLITF clock enable */ +#define RCC_AHBENR_CRCEN ((uint16_t)0x0040) /*!< CRC clock enable */ + +#if defined (STM32F10X_HD) || defined (STM32F10X_CL) || defined (STM32F10X_HD_VL) + #define RCC_AHBENR_DMA2EN ((uint16_t)0x0002) /*!< DMA2 clock enable */ +#endif + +#if defined (STM32F10X_HD) || defined (STM32F10X_XL) + #define RCC_AHBENR_FSMCEN ((uint16_t)0x0100) /*!< FSMC clock enable */ + #define RCC_AHBENR_SDIOEN ((uint16_t)0x0400) /*!< SDIO clock enable */ +#endif + +#if defined (STM32F10X_HD_VL) + #define RCC_AHBENR_FSMCEN ((uint16_t)0x0100) /*!< FSMC clock enable */ +#endif + +#ifdef STM32F10X_CL + #define RCC_AHBENR_OTGFSEN ((uint32_t)0x00001000) /*!< USB OTG FS clock enable */ + #define RCC_AHBENR_ETHMACEN ((uint32_t)0x00004000) /*!< ETHERNET MAC clock enable */ + #define RCC_AHBENR_ETHMACTXEN ((uint32_t)0x00008000) /*!< ETHERNET MAC Tx clock enable */ + #define RCC_AHBENR_ETHMACRXEN ((uint32_t)0x00010000) /*!< ETHERNET MAC Rx clock enable */ +#endif /* STM32F10X_CL */ + +/****************** Bit definition for RCC_APB2ENR register *****************/ +#define RCC_APB2ENR_AFIOEN ((uint32_t)0x00000001) /*!< Alternate Function I/O clock enable */ +#define RCC_APB2ENR_IOPAEN ((uint32_t)0x00000004) /*!< I/O port A clock enable */ +#define RCC_APB2ENR_IOPBEN ((uint32_t)0x00000008) /*!< I/O port B clock enable */ +#define RCC_APB2ENR_IOPCEN ((uint32_t)0x00000010) /*!< I/O port C clock enable */ +#define RCC_APB2ENR_IOPDEN ((uint32_t)0x00000020) /*!< I/O port D clock enable */ +#define RCC_APB2ENR_ADC1EN ((uint32_t)0x00000200) /*!< ADC 1 interface clock enable */ + +#if !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD_VL) && !defined (STM32F10X_HD_VL) +#define RCC_APB2ENR_ADC2EN ((uint32_t)0x00000400) /*!< ADC 2 interface clock enable */ +#endif + +#define RCC_APB2ENR_TIM1EN ((uint32_t)0x00000800) /*!< TIM1 Timer clock enable */ +#define RCC_APB2ENR_SPI1EN ((uint32_t)0x00001000) /*!< SPI 1 clock enable */ +#define RCC_APB2ENR_USART1EN ((uint32_t)0x00004000) /*!< USART1 clock enable */ + +#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL) +#define RCC_APB2ENR_TIM15EN ((uint32_t)0x00010000) /*!< TIM15 Timer clock enable */ +#define RCC_APB2ENR_TIM16EN ((uint32_t)0x00020000) /*!< TIM16 Timer clock enable */ +#define RCC_APB2ENR_TIM17EN ((uint32_t)0x00040000) /*!< TIM17 Timer clock enable */ +#endif + +#if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) + #define RCC_APB2ENR_IOPEEN ((uint32_t)0x00000040) /*!< I/O port E clock enable */ +#endif /* STM32F10X_LD && STM32F10X_LD_VL */ + +#if defined (STM32F10X_HD) || defined (STM32F10X_XL) + #define RCC_APB2ENR_IOPFEN ((uint32_t)0x00000080) /*!< I/O port F clock enable */ + #define RCC_APB2ENR_IOPGEN ((uint32_t)0x00000100) /*!< I/O port G clock enable */ + #define RCC_APB2ENR_TIM8EN ((uint32_t)0x00002000) /*!< TIM8 Timer clock enable */ + #define RCC_APB2ENR_ADC3EN ((uint32_t)0x00008000) /*!< DMA1 clock enable */ +#endif + +#if defined (STM32F10X_HD_VL) + #define RCC_APB2ENR_IOPFEN ((uint32_t)0x00000080) /*!< I/O port F clock enable */ + #define RCC_APB2ENR_IOPGEN ((uint32_t)0x00000100) /*!< I/O port G clock enable */ +#endif + +#ifdef STM32F10X_XL + #define RCC_APB2ENR_TIM9EN ((uint32_t)0x00080000) /*!< TIM9 Timer clock enable */ + #define RCC_APB2ENR_TIM10EN ((uint32_t)0x00100000) /*!< TIM10 Timer clock enable */ + #define RCC_APB2ENR_TIM11EN ((uint32_t)0x00200000) /*!< TIM11 Timer clock enable */ +#endif + +/***************** Bit definition for RCC_APB1ENR register ******************/ +#define RCC_APB1ENR_TIM2EN ((uint32_t)0x00000001) /*!< Timer 2 clock enabled*/ +#define RCC_APB1ENR_TIM3EN ((uint32_t)0x00000002) /*!< Timer 3 clock enable */ +#define RCC_APB1ENR_WWDGEN ((uint32_t)0x00000800) /*!< Window Watchdog clock enable */ +#define RCC_APB1ENR_USART2EN ((uint32_t)0x00020000) /*!< USART 2 clock enable */ +#define RCC_APB1ENR_I2C1EN ((uint32_t)0x00200000) /*!< I2C 1 clock enable */ + +#if !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD_VL) && !defined (STM32F10X_HD_VL) +#define RCC_APB1ENR_CAN1EN ((uint32_t)0x02000000) /*!< CAN1 clock enable */ +#endif + +#define RCC_APB1ENR_BKPEN ((uint32_t)0x08000000) /*!< Backup interface clock enable */ +#define RCC_APB1ENR_PWREN ((uint32_t)0x10000000) /*!< Power interface clock enable */ + +#if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) + #define RCC_APB1ENR_TIM4EN ((uint32_t)0x00000004) /*!< Timer 4 clock enable */ + #define RCC_APB1ENR_SPI2EN ((uint32_t)0x00004000) /*!< SPI 2 clock enable */ + #define RCC_APB1ENR_USART3EN ((uint32_t)0x00040000) /*!< USART 3 clock enable */ + #define RCC_APB1ENR_I2C2EN ((uint32_t)0x00400000) /*!< I2C 2 clock enable */ +#endif /* STM32F10X_LD && STM32F10X_LD_VL */ + +#if defined (STM32F10X_HD) || defined (STM32F10X_MD) || defined (STM32F10X_LD) + #define RCC_APB1ENR_USBEN ((uint32_t)0x00800000) /*!< USB Device clock enable */ +#endif + +#if defined (STM32F10X_HD) || defined (STM32F10X_CL) + #define RCC_APB1ENR_TIM5EN ((uint32_t)0x00000008) /*!< Timer 5 clock enable */ + #define RCC_APB1ENR_TIM6EN ((uint32_t)0x00000010) /*!< Timer 6 clock enable */ + #define RCC_APB1ENR_TIM7EN ((uint32_t)0x00000020) /*!< Timer 7 clock enable */ + #define RCC_APB1ENR_SPI3EN ((uint32_t)0x00008000) /*!< SPI 3 clock enable */ + #define RCC_APB1ENR_UART4EN ((uint32_t)0x00080000) /*!< UART 4 clock enable */ + #define RCC_APB1ENR_UART5EN ((uint32_t)0x00100000) /*!< UART 5 clock enable */ + #define RCC_APB1ENR_DACEN ((uint32_t)0x20000000) /*!< DAC interface clock enable */ +#endif + +#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL) + #define RCC_APB1ENR_TIM6EN ((uint32_t)0x00000010) /*!< Timer 6 clock enable */ + #define RCC_APB1ENR_TIM7EN ((uint32_t)0x00000020) /*!< Timer 7 clock enable */ + #define RCC_APB1ENR_DACEN ((uint32_t)0x20000000) /*!< DAC interface clock enable */ + #define RCC_APB1ENR_CECEN ((uint32_t)0x40000000) /*!< CEC interface clock enable */ +#endif + +#ifdef STM32F10X_HD_VL + #define RCC_APB1ENR_TIM5EN ((uint32_t)0x00000008) /*!< Timer 5 clock enable */ + #define RCC_APB1ENR_TIM12EN ((uint32_t)0x00000040) /*!< TIM12 Timer clock enable */ + #define RCC_APB1ENR_TIM13EN ((uint32_t)0x00000080) /*!< TIM13 Timer clock enable */ + #define RCC_APB1ENR_TIM14EN ((uint32_t)0x00000100) /*!< TIM14 Timer clock enable */ + #define RCC_APB1ENR_SPI3EN ((uint32_t)0x00008000) /*!< SPI 3 clock enable */ + #define RCC_APB1ENR_UART4EN ((uint32_t)0x00080000) /*!< UART 4 clock enable */ + #define RCC_APB1ENR_UART5EN ((uint32_t)0x00100000) /*!< UART 5 clock enable */ +#endif /* STM32F10X_HD_VL */ + +#ifdef STM32F10X_CL + #define RCC_APB1ENR_CAN2EN ((uint32_t)0x04000000) /*!< CAN2 clock enable */ +#endif /* STM32F10X_CL */ + +#ifdef STM32F10X_XL + #define RCC_APB1ENR_TIM12EN ((uint32_t)0x00000040) /*!< TIM12 Timer clock enable */ + #define RCC_APB1ENR_TIM13EN ((uint32_t)0x00000080) /*!< TIM13 Timer clock enable */ + #define RCC_APB1ENR_TIM14EN ((uint32_t)0x00000100) /*!< TIM14 Timer clock enable */ +#endif /* STM32F10X_XL */ + +/******************* Bit definition for RCC_BDCR register *******************/ +#define RCC_BDCR_LSEON ((uint32_t)0x00000001) /*!< External Low Speed oscillator enable */ +#define RCC_BDCR_LSERDY ((uint32_t)0x00000002) /*!< External Low Speed oscillator Ready */ +#define RCC_BDCR_LSEBYP ((uint32_t)0x00000004) /*!< External Low Speed oscillator Bypass */ + +#define RCC_BDCR_RTCSEL ((uint32_t)0x00000300) /*!< RTCSEL[1:0] bits (RTC clock source selection) */ +#define RCC_BDCR_RTCSEL_0 ((uint32_t)0x00000100) /*!< Bit 0 */ +#define RCC_BDCR_RTCSEL_1 ((uint32_t)0x00000200) /*!< Bit 1 */ + +/*!< RTC congiguration */ +#define RCC_BDCR_RTCSEL_NOCLOCK ((uint32_t)0x00000000) /*!< No clock */ +#define RCC_BDCR_RTCSEL_LSE ((uint32_t)0x00000100) /*!< LSE oscillator clock used as RTC clock */ +#define RCC_BDCR_RTCSEL_LSI ((uint32_t)0x00000200) /*!< LSI oscillator clock used as RTC clock */ +#define RCC_BDCR_RTCSEL_HSE ((uint32_t)0x00000300) /*!< HSE oscillator clock divided by 128 used as RTC clock */ + +#define RCC_BDCR_RTCEN ((uint32_t)0x00008000) /*!< RTC clock enable */ +#define RCC_BDCR_BDRST ((uint32_t)0x00010000) /*!< Backup domain software reset */ + +/******************* Bit definition for RCC_CSR register ********************/ +#define RCC_CSR_LSION ((uint32_t)0x00000001) /*!< Internal Low Speed oscillator enable */ +#define RCC_CSR_LSIRDY ((uint32_t)0x00000002) /*!< Internal Low Speed oscillator Ready */ +#define RCC_CSR_RMVF ((uint32_t)0x01000000) /*!< Remove reset flag */ +#define RCC_CSR_PINRSTF ((uint32_t)0x04000000) /*!< PIN reset flag */ +#define RCC_CSR_PORRSTF ((uint32_t)0x08000000) /*!< POR/PDR reset flag */ +#define RCC_CSR_SFTRSTF ((uint32_t)0x10000000) /*!< Software Reset flag */ +#define RCC_CSR_IWDGRSTF ((uint32_t)0x20000000) /*!< Independent Watchdog reset flag */ +#define RCC_CSR_WWDGRSTF ((uint32_t)0x40000000) /*!< Window watchdog reset flag */ +#define RCC_CSR_LPWRRSTF ((uint32_t)0x80000000) /*!< Low-Power reset flag */ + +#ifdef STM32F10X_CL +/******************* Bit definition for RCC_AHBRSTR register ****************/ + #define RCC_AHBRSTR_OTGFSRST ((uint32_t)0x00001000) /*!< USB OTG FS reset */ + #define RCC_AHBRSTR_ETHMACRST ((uint32_t)0x00004000) /*!< ETHERNET MAC reset */ + +/******************* Bit definition for RCC_CFGR2 register ******************/ +/*!< PREDIV1 configuration */ + #define RCC_CFGR2_PREDIV1 ((uint32_t)0x0000000F) /*!< PREDIV1[3:0] bits */ + #define RCC_CFGR2_PREDIV1_0 ((uint32_t)0x00000001) /*!< Bit 0 */ + #define RCC_CFGR2_PREDIV1_1 ((uint32_t)0x00000002) /*!< Bit 1 */ + #define RCC_CFGR2_PREDIV1_2 ((uint32_t)0x00000004) /*!< Bit 2 */ + #define RCC_CFGR2_PREDIV1_3 ((uint32_t)0x00000008) /*!< Bit 3 */ + + #define RCC_CFGR2_PREDIV1_DIV1 ((uint32_t)0x00000000) /*!< PREDIV1 input clock not divided */ + #define RCC_CFGR2_PREDIV1_DIV2 ((uint32_t)0x00000001) /*!< PREDIV1 input clock divided by 2 */ + #define RCC_CFGR2_PREDIV1_DIV3 ((uint32_t)0x00000002) /*!< PREDIV1 input clock divided by 3 */ + #define RCC_CFGR2_PREDIV1_DIV4 ((uint32_t)0x00000003) /*!< PREDIV1 input clock divided by 4 */ + #define RCC_CFGR2_PREDIV1_DIV5 ((uint32_t)0x00000004) /*!< PREDIV1 input clock divided by 5 */ + #define RCC_CFGR2_PREDIV1_DIV6 ((uint32_t)0x00000005) /*!< PREDIV1 input clock divided by 6 */ + #define RCC_CFGR2_PREDIV1_DIV7 ((uint32_t)0x00000006) /*!< PREDIV1 input clock divided by 7 */ + #define RCC_CFGR2_PREDIV1_DIV8 ((uint32_t)0x00000007) /*!< PREDIV1 input clock divided by 8 */ + #define RCC_CFGR2_PREDIV1_DIV9 ((uint32_t)0x00000008) /*!< PREDIV1 input clock divided by 9 */ + #define RCC_CFGR2_PREDIV1_DIV10 ((uint32_t)0x00000009) /*!< PREDIV1 input clock divided by 10 */ + #define RCC_CFGR2_PREDIV1_DIV11 ((uint32_t)0x0000000A) /*!< PREDIV1 input clock divided by 11 */ + #define RCC_CFGR2_PREDIV1_DIV12 ((uint32_t)0x0000000B) /*!< PREDIV1 input clock divided by 12 */ + #define RCC_CFGR2_PREDIV1_DIV13 ((uint32_t)0x0000000C) /*!< PREDIV1 input clock divided by 13 */ + #define RCC_CFGR2_PREDIV1_DIV14 ((uint32_t)0x0000000D) /*!< PREDIV1 input clock divided by 14 */ + #define RCC_CFGR2_PREDIV1_DIV15 ((uint32_t)0x0000000E) /*!< PREDIV1 input clock divided by 15 */ + #define RCC_CFGR2_PREDIV1_DIV16 ((uint32_t)0x0000000F) /*!< PREDIV1 input clock divided by 16 */ + +/*!< PREDIV2 configuration */ + #define RCC_CFGR2_PREDIV2 ((uint32_t)0x000000F0) /*!< PREDIV2[3:0] bits */ + #define RCC_CFGR2_PREDIV2_0 ((uint32_t)0x00000010) /*!< Bit 0 */ + #define RCC_CFGR2_PREDIV2_1 ((uint32_t)0x00000020) /*!< Bit 1 */ + #define RCC_CFGR2_PREDIV2_2 ((uint32_t)0x00000040) /*!< Bit 2 */ + #define RCC_CFGR2_PREDIV2_3 ((uint32_t)0x00000080) /*!< Bit 3 */ + + #define RCC_CFGR2_PREDIV2_DIV1 ((uint32_t)0x00000000) /*!< PREDIV2 input clock not divided */ + #define RCC_CFGR2_PREDIV2_DIV2 ((uint32_t)0x00000010) /*!< PREDIV2 input clock divided by 2 */ + #define RCC_CFGR2_PREDIV2_DIV3 ((uint32_t)0x00000020) /*!< PREDIV2 input clock divided by 3 */ + #define RCC_CFGR2_PREDIV2_DIV4 ((uint32_t)0x00000030) /*!< PREDIV2 input clock divided by 4 */ + #define RCC_CFGR2_PREDIV2_DIV5 ((uint32_t)0x00000040) /*!< PREDIV2 input clock divided by 5 */ + #define RCC_CFGR2_PREDIV2_DIV6 ((uint32_t)0x00000050) /*!< PREDIV2 input clock divided by 6 */ + #define RCC_CFGR2_PREDIV2_DIV7 ((uint32_t)0x00000060) /*!< PREDIV2 input clock divided by 7 */ + #define RCC_CFGR2_PREDIV2_DIV8 ((uint32_t)0x00000070) /*!< PREDIV2 input clock divided by 8 */ + #define RCC_CFGR2_PREDIV2_DIV9 ((uint32_t)0x00000080) /*!< PREDIV2 input clock divided by 9 */ + #define RCC_CFGR2_PREDIV2_DIV10 ((uint32_t)0x00000090) /*!< PREDIV2 input clock divided by 10 */ + #define RCC_CFGR2_PREDIV2_DIV11 ((uint32_t)0x000000A0) /*!< PREDIV2 input clock divided by 11 */ + #define RCC_CFGR2_PREDIV2_DIV12 ((uint32_t)0x000000B0) /*!< PREDIV2 input clock divided by 12 */ + #define RCC_CFGR2_PREDIV2_DIV13 ((uint32_t)0x000000C0) /*!< PREDIV2 input clock divided by 13 */ + #define RCC_CFGR2_PREDIV2_DIV14 ((uint32_t)0x000000D0) /*!< PREDIV2 input clock divided by 14 */ + #define RCC_CFGR2_PREDIV2_DIV15 ((uint32_t)0x000000E0) /*!< PREDIV2 input clock divided by 15 */ + #define RCC_CFGR2_PREDIV2_DIV16 ((uint32_t)0x000000F0) /*!< PREDIV2 input clock divided by 16 */ + +/*!< PLL2MUL configuration */ + #define RCC_CFGR2_PLL2MUL ((uint32_t)0x00000F00) /*!< PLL2MUL[3:0] bits */ + #define RCC_CFGR2_PLL2MUL_0 ((uint32_t)0x00000100) /*!< Bit 0 */ + #define RCC_CFGR2_PLL2MUL_1 ((uint32_t)0x00000200) /*!< Bit 1 */ + #define RCC_CFGR2_PLL2MUL_2 ((uint32_t)0x00000400) /*!< Bit 2 */ + #define RCC_CFGR2_PLL2MUL_3 ((uint32_t)0x00000800) /*!< Bit 3 */ + + #define RCC_CFGR2_PLL2MUL8 ((uint32_t)0x00000600) /*!< PLL2 input clock * 8 */ + #define RCC_CFGR2_PLL2MUL9 ((uint32_t)0x00000700) /*!< PLL2 input clock * 9 */ + #define RCC_CFGR2_PLL2MUL10 ((uint32_t)0x00000800) /*!< PLL2 input clock * 10 */ + #define RCC_CFGR2_PLL2MUL11 ((uint32_t)0x00000900) /*!< PLL2 input clock * 11 */ + #define RCC_CFGR2_PLL2MUL12 ((uint32_t)0x00000A00) /*!< PLL2 input clock * 12 */ + #define RCC_CFGR2_PLL2MUL13 ((uint32_t)0x00000B00) /*!< PLL2 input clock * 13 */ + #define RCC_CFGR2_PLL2MUL14 ((uint32_t)0x00000C00) /*!< PLL2 input clock * 14 */ + #define RCC_CFGR2_PLL2MUL16 ((uint32_t)0x00000E00) /*!< PLL2 input clock * 16 */ + #define RCC_CFGR2_PLL2MUL20 ((uint32_t)0x00000F00) /*!< PLL2 input clock * 20 */ + +/*!< PLL3MUL configuration */ + #define RCC_CFGR2_PLL3MUL ((uint32_t)0x0000F000) /*!< PLL3MUL[3:0] bits */ + #define RCC_CFGR2_PLL3MUL_0 ((uint32_t)0x00001000) /*!< Bit 0 */ + #define RCC_CFGR2_PLL3MUL_1 ((uint32_t)0x00002000) /*!< Bit 1 */ + #define RCC_CFGR2_PLL3MUL_2 ((uint32_t)0x00004000) /*!< Bit 2 */ + #define RCC_CFGR2_PLL3MUL_3 ((uint32_t)0x00008000) /*!< Bit 3 */ + + #define RCC_CFGR2_PLL3MUL8 ((uint32_t)0x00006000) /*!< PLL3 input clock * 8 */ + #define RCC_CFGR2_PLL3MUL9 ((uint32_t)0x00007000) /*!< PLL3 input clock * 9 */ + #define RCC_CFGR2_PLL3MUL10 ((uint32_t)0x00008000) /*!< PLL3 input clock * 10 */ + #define RCC_CFGR2_PLL3MUL11 ((uint32_t)0x00009000) /*!< PLL3 input clock * 11 */ + #define RCC_CFGR2_PLL3MUL12 ((uint32_t)0x0000A000) /*!< PLL3 input clock * 12 */ + #define RCC_CFGR2_PLL3MUL13 ((uint32_t)0x0000B000) /*!< PLL3 input clock * 13 */ + #define RCC_CFGR2_PLL3MUL14 ((uint32_t)0x0000C000) /*!< PLL3 input clock * 14 */ + #define RCC_CFGR2_PLL3MUL16 ((uint32_t)0x0000E000) /*!< PLL3 input clock * 16 */ + #define RCC_CFGR2_PLL3MUL20 ((uint32_t)0x0000F000) /*!< PLL3 input clock * 20 */ + + #define RCC_CFGR2_PREDIV1SRC ((uint32_t)0x00010000) /*!< PREDIV1 entry clock source */ + #define RCC_CFGR2_PREDIV1SRC_PLL2 ((uint32_t)0x00010000) /*!< PLL2 selected as PREDIV1 entry clock source */ + #define RCC_CFGR2_PREDIV1SRC_HSE ((uint32_t)0x00000000) /*!< HSE selected as PREDIV1 entry clock source */ + #define RCC_CFGR2_I2S2SRC ((uint32_t)0x00020000) /*!< I2S2 entry clock source */ + #define RCC_CFGR2_I2S3SRC ((uint32_t)0x00040000) /*!< I2S3 clock source */ +#endif /* STM32F10X_CL */ + +#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL) +/******************* Bit definition for RCC_CFGR2 register ******************/ +/*!< PREDIV1 configuration */ + #define RCC_CFGR2_PREDIV1 ((uint32_t)0x0000000F) /*!< PREDIV1[3:0] bits */ + #define RCC_CFGR2_PREDIV1_0 ((uint32_t)0x00000001) /*!< Bit 0 */ + #define RCC_CFGR2_PREDIV1_1 ((uint32_t)0x00000002) /*!< Bit 1 */ + #define RCC_CFGR2_PREDIV1_2 ((uint32_t)0x00000004) /*!< Bit 2 */ + #define RCC_CFGR2_PREDIV1_3 ((uint32_t)0x00000008) /*!< Bit 3 */ + + #define RCC_CFGR2_PREDIV1_DIV1 ((uint32_t)0x00000000) /*!< PREDIV1 input clock not divided */ + #define RCC_CFGR2_PREDIV1_DIV2 ((uint32_t)0x00000001) /*!< PREDIV1 input clock divided by 2 */ + #define RCC_CFGR2_PREDIV1_DIV3 ((uint32_t)0x00000002) /*!< PREDIV1 input clock divided by 3 */ + #define RCC_CFGR2_PREDIV1_DIV4 ((uint32_t)0x00000003) /*!< PREDIV1 input clock divided by 4 */ + #define RCC_CFGR2_PREDIV1_DIV5 ((uint32_t)0x00000004) /*!< PREDIV1 input clock divided by 5 */ + #define RCC_CFGR2_PREDIV1_DIV6 ((uint32_t)0x00000005) /*!< PREDIV1 input clock divided by 6 */ + #define RCC_CFGR2_PREDIV1_DIV7 ((uint32_t)0x00000006) /*!< PREDIV1 input clock divided by 7 */ + #define RCC_CFGR2_PREDIV1_DIV8 ((uint32_t)0x00000007) /*!< PREDIV1 input clock divided by 8 */ + #define RCC_CFGR2_PREDIV1_DIV9 ((uint32_t)0x00000008) /*!< PREDIV1 input clock divided by 9 */ + #define RCC_CFGR2_PREDIV1_DIV10 ((uint32_t)0x00000009) /*!< PREDIV1 input clock divided by 10 */ + #define RCC_CFGR2_PREDIV1_DIV11 ((uint32_t)0x0000000A) /*!< PREDIV1 input clock divided by 11 */ + #define RCC_CFGR2_PREDIV1_DIV12 ((uint32_t)0x0000000B) /*!< PREDIV1 input clock divided by 12 */ + #define RCC_CFGR2_PREDIV1_DIV13 ((uint32_t)0x0000000C) /*!< PREDIV1 input clock divided by 13 */ + #define RCC_CFGR2_PREDIV1_DIV14 ((uint32_t)0x0000000D) /*!< PREDIV1 input clock divided by 14 */ + #define RCC_CFGR2_PREDIV1_DIV15 ((uint32_t)0x0000000E) /*!< PREDIV1 input clock divided by 15 */ + #define RCC_CFGR2_PREDIV1_DIV16 ((uint32_t)0x0000000F) /*!< PREDIV1 input clock divided by 16 */ +#endif + +/******************************************************************************/ +/* */ +/* General Purpose and Alternate Function I/O */ +/* */ +/******************************************************************************/ + +/******************* Bit definition for GPIO_CRL register *******************/ +#define GPIO_CRL_MODE ((uint32_t)0x33333333) /*!< Port x mode bits */ + +#define GPIO_CRL_MODE0 ((uint32_t)0x00000003) /*!< MODE0[1:0] bits (Port x mode bits, pin 0) */ +#define GPIO_CRL_MODE0_0 ((uint32_t)0x00000001) /*!< Bit 0 */ +#define GPIO_CRL_MODE0_1 ((uint32_t)0x00000002) /*!< Bit 1 */ + +#define GPIO_CRL_MODE1 ((uint32_t)0x00000030) /*!< MODE1[1:0] bits (Port x mode bits, pin 1) */ +#define GPIO_CRL_MODE1_0 ((uint32_t)0x00000010) /*!< Bit 0 */ +#define GPIO_CRL_MODE1_1 ((uint32_t)0x00000020) /*!< Bit 1 */ + +#define GPIO_CRL_MODE2 ((uint32_t)0x00000300) /*!< MODE2[1:0] bits (Port x mode bits, pin 2) */ +#define GPIO_CRL_MODE2_0 ((uint32_t)0x00000100) /*!< Bit 0 */ +#define GPIO_CRL_MODE2_1 ((uint32_t)0x00000200) /*!< Bit 1 */ + +#define GPIO_CRL_MODE3 ((uint32_t)0x00003000) /*!< MODE3[1:0] bits (Port x mode bits, pin 3) */ +#define GPIO_CRL_MODE3_0 ((uint32_t)0x00001000) /*!< Bit 0 */ +#define GPIO_CRL_MODE3_1 ((uint32_t)0x00002000) /*!< Bit 1 */ + +#define GPIO_CRL_MODE4 ((uint32_t)0x00030000) /*!< MODE4[1:0] bits (Port x mode bits, pin 4) */ +#define GPIO_CRL_MODE4_0 ((uint32_t)0x00010000) /*!< Bit 0 */ +#define GPIO_CRL_MODE4_1 ((uint32_t)0x00020000) /*!< Bit 1 */ + +#define GPIO_CRL_MODE5 ((uint32_t)0x00300000) /*!< MODE5[1:0] bits (Port x mode bits, pin 5) */ +#define GPIO_CRL_MODE5_0 ((uint32_t)0x00100000) /*!< Bit 0 */ +#define GPIO_CRL_MODE5_1 ((uint32_t)0x00200000) /*!< Bit 1 */ + +#define GPIO_CRL_MODE6 ((uint32_t)0x03000000) /*!< MODE6[1:0] bits (Port x mode bits, pin 6) */ +#define GPIO_CRL_MODE6_0 ((uint32_t)0x01000000) /*!< Bit 0 */ +#define GPIO_CRL_MODE6_1 ((uint32_t)0x02000000) /*!< Bit 1 */ + +#define GPIO_CRL_MODE7 ((uint32_t)0x30000000) /*!< MODE7[1:0] bits (Port x mode bits, pin 7) */ +#define GPIO_CRL_MODE7_0 ((uint32_t)0x10000000) /*!< Bit 0 */ +#define GPIO_CRL_MODE7_1 ((uint32_t)0x20000000) /*!< Bit 1 */ + +#define GPIO_CRL_CNF ((uint32_t)0xCCCCCCCC) /*!< Port x configuration bits */ + +#define GPIO_CRL_CNF0 ((uint32_t)0x0000000C) /*!< CNF0[1:0] bits (Port x configuration bits, pin 0) */ +#define GPIO_CRL_CNF0_0 ((uint32_t)0x00000004) /*!< Bit 0 */ +#define GPIO_CRL_CNF0_1 ((uint32_t)0x00000008) /*!< Bit 1 */ + +#define GPIO_CRL_CNF1 ((uint32_t)0x000000C0) /*!< CNF1[1:0] bits (Port x configuration bits, pin 1) */ +#define GPIO_CRL_CNF1_0 ((uint32_t)0x00000040) /*!< Bit 0 */ +#define GPIO_CRL_CNF1_1 ((uint32_t)0x00000080) /*!< Bit 1 */ + +#define GPIO_CRL_CNF2 ((uint32_t)0x00000C00) /*!< CNF2[1:0] bits (Port x configuration bits, pin 2) */ +#define GPIO_CRL_CNF2_0 ((uint32_t)0x00000400) /*!< Bit 0 */ +#define GPIO_CRL_CNF2_1 ((uint32_t)0x00000800) /*!< Bit 1 */ + +#define GPIO_CRL_CNF3 ((uint32_t)0x0000C000) /*!< CNF3[1:0] bits (Port x configuration bits, pin 3) */ +#define GPIO_CRL_CNF3_0 ((uint32_t)0x00004000) /*!< Bit 0 */ +#define GPIO_CRL_CNF3_1 ((uint32_t)0x00008000) /*!< Bit 1 */ + +#define GPIO_CRL_CNF4 ((uint32_t)0x000C0000) /*!< CNF4[1:0] bits (Port x configuration bits, pin 4) */ +#define GPIO_CRL_CNF4_0 ((uint32_t)0x00040000) /*!< Bit 0 */ +#define GPIO_CRL_CNF4_1 ((uint32_t)0x00080000) /*!< Bit 1 */ + +#define GPIO_CRL_CNF5 ((uint32_t)0x00C00000) /*!< CNF5[1:0] bits (Port x configuration bits, pin 5) */ +#define GPIO_CRL_CNF5_0 ((uint32_t)0x00400000) /*!< Bit 0 */ +#define GPIO_CRL_CNF5_1 ((uint32_t)0x00800000) /*!< Bit 1 */ + +#define GPIO_CRL_CNF6 ((uint32_t)0x0C000000) /*!< CNF6[1:0] bits (Port x configuration bits, pin 6) */ +#define GPIO_CRL_CNF6_0 ((uint32_t)0x04000000) /*!< Bit 0 */ +#define GPIO_CRL_CNF6_1 ((uint32_t)0x08000000) /*!< Bit 1 */ + +#define GPIO_CRL_CNF7 ((uint32_t)0xC0000000) /*!< CNF7[1:0] bits (Port x configuration bits, pin 7) */ +#define GPIO_CRL_CNF7_0 ((uint32_t)0x40000000) /*!< Bit 0 */ +#define GPIO_CRL_CNF7_1 ((uint32_t)0x80000000) /*!< Bit 1 */ + +/******************* Bit definition for GPIO_CRH register *******************/ +#define GPIO_CRH_MODE ((uint32_t)0x33333333) /*!< Port x mode bits */ + +#define GPIO_CRH_MODE8 ((uint32_t)0x00000003) /*!< MODE8[1:0] bits (Port x mode bits, pin 8) */ +#define GPIO_CRH_MODE8_0 ((uint32_t)0x00000001) /*!< Bit 0 */ +#define GPIO_CRH_MODE8_1 ((uint32_t)0x00000002) /*!< Bit 1 */ + +#define GPIO_CRH_MODE9 ((uint32_t)0x00000030) /*!< MODE9[1:0] bits (Port x mode bits, pin 9) */ +#define GPIO_CRH_MODE9_0 ((uint32_t)0x00000010) /*!< Bit 0 */ +#define GPIO_CRH_MODE9_1 ((uint32_t)0x00000020) /*!< Bit 1 */ + +#define GPIO_CRH_MODE10 ((uint32_t)0x00000300) /*!< MODE10[1:0] bits (Port x mode bits, pin 10) */ +#define GPIO_CRH_MODE10_0 ((uint32_t)0x00000100) /*!< Bit 0 */ +#define GPIO_CRH_MODE10_1 ((uint32_t)0x00000200) /*!< Bit 1 */ + +#define GPIO_CRH_MODE11 ((uint32_t)0x00003000) /*!< MODE11[1:0] bits (Port x mode bits, pin 11) */ +#define GPIO_CRH_MODE11_0 ((uint32_t)0x00001000) /*!< Bit 0 */ +#define GPIO_CRH_MODE11_1 ((uint32_t)0x00002000) /*!< Bit 1 */ + +#define GPIO_CRH_MODE12 ((uint32_t)0x00030000) /*!< MODE12[1:0] bits (Port x mode bits, pin 12) */ +#define GPIO_CRH_MODE12_0 ((uint32_t)0x00010000) /*!< Bit 0 */ +#define GPIO_CRH_MODE12_1 ((uint32_t)0x00020000) /*!< Bit 1 */ + +#define GPIO_CRH_MODE13 ((uint32_t)0x00300000) /*!< MODE13[1:0] bits (Port x mode bits, pin 13) */ +#define GPIO_CRH_MODE13_0 ((uint32_t)0x00100000) /*!< Bit 0 */ +#define GPIO_CRH_MODE13_1 ((uint32_t)0x00200000) /*!< Bit 1 */ + +#define GPIO_CRH_MODE14 ((uint32_t)0x03000000) /*!< MODE14[1:0] bits (Port x mode bits, pin 14) */ +#define GPIO_CRH_MODE14_0 ((uint32_t)0x01000000) /*!< Bit 0 */ +#define GPIO_CRH_MODE14_1 ((uint32_t)0x02000000) /*!< Bit 1 */ + +#define GPIO_CRH_MODE15 ((uint32_t)0x30000000) /*!< MODE15[1:0] bits (Port x mode bits, pin 15) */ +#define GPIO_CRH_MODE15_0 ((uint32_t)0x10000000) /*!< Bit 0 */ +#define GPIO_CRH_MODE15_1 ((uint32_t)0x20000000) /*!< Bit 1 */ + +#define GPIO_CRH_CNF ((uint32_t)0xCCCCCCCC) /*!< Port x configuration bits */ + +#define GPIO_CRH_CNF8 ((uint32_t)0x0000000C) /*!< CNF8[1:0] bits (Port x configuration bits, pin 8) */ +#define GPIO_CRH_CNF8_0 ((uint32_t)0x00000004) /*!< Bit 0 */ +#define GPIO_CRH_CNF8_1 ((uint32_t)0x00000008) /*!< Bit 1 */ + +#define GPIO_CRH_CNF9 ((uint32_t)0x000000C0) /*!< CNF9[1:0] bits (Port x configuration bits, pin 9) */ +#define GPIO_CRH_CNF9_0 ((uint32_t)0x00000040) /*!< Bit 0 */ +#define GPIO_CRH_CNF9_1 ((uint32_t)0x00000080) /*!< Bit 1 */ + +#define GPIO_CRH_CNF10 ((uint32_t)0x00000C00) /*!< CNF10[1:0] bits (Port x configuration bits, pin 10) */ +#define GPIO_CRH_CNF10_0 ((uint32_t)0x00000400) /*!< Bit 0 */ +#define GPIO_CRH_CNF10_1 ((uint32_t)0x00000800) /*!< Bit 1 */ + +#define GPIO_CRH_CNF11 ((uint32_t)0x0000C000) /*!< CNF11[1:0] bits (Port x configuration bits, pin 11) */ +#define GPIO_CRH_CNF11_0 ((uint32_t)0x00004000) /*!< Bit 0 */ +#define GPIO_CRH_CNF11_1 ((uint32_t)0x00008000) /*!< Bit 1 */ + +#define GPIO_CRH_CNF12 ((uint32_t)0x000C0000) /*!< CNF12[1:0] bits (Port x configuration bits, pin 12) */ +#define GPIO_CRH_CNF12_0 ((uint32_t)0x00040000) /*!< Bit 0 */ +#define GPIO_CRH_CNF12_1 ((uint32_t)0x00080000) /*!< Bit 1 */ + +#define GPIO_CRH_CNF13 ((uint32_t)0x00C00000) /*!< CNF13[1:0] bits (Port x configuration bits, pin 13) */ +#define GPIO_CRH_CNF13_0 ((uint32_t)0x00400000) /*!< Bit 0 */ +#define GPIO_CRH_CNF13_1 ((uint32_t)0x00800000) /*!< Bit 1 */ + +#define GPIO_CRH_CNF14 ((uint32_t)0x0C000000) /*!< CNF14[1:0] bits (Port x configuration bits, pin 14) */ +#define GPIO_CRH_CNF14_0 ((uint32_t)0x04000000) /*!< Bit 0 */ +#define GPIO_CRH_CNF14_1 ((uint32_t)0x08000000) /*!< Bit 1 */ + +#define GPIO_CRH_CNF15 ((uint32_t)0xC0000000) /*!< CNF15[1:0] bits (Port x configuration bits, pin 15) */ +#define GPIO_CRH_CNF15_0 ((uint32_t)0x40000000) /*!< Bit 0 */ +#define GPIO_CRH_CNF15_1 ((uint32_t)0x80000000) /*!< Bit 1 */ + +/*!<****************** Bit definition for GPIO_IDR register *******************/ +#define GPIO_IDR_IDR0 ((uint16_t)0x0001) /*!< Port input data, bit 0 */ +#define GPIO_IDR_IDR1 ((uint16_t)0x0002) /*!< Port input data, bit 1 */ +#define GPIO_IDR_IDR2 ((uint16_t)0x0004) /*!< Port input data, bit 2 */ +#define GPIO_IDR_IDR3 ((uint16_t)0x0008) /*!< Port input data, bit 3 */ +#define GPIO_IDR_IDR4 ((uint16_t)0x0010) /*!< Port input data, bit 4 */ +#define GPIO_IDR_IDR5 ((uint16_t)0x0020) /*!< Port input data, bit 5 */ +#define GPIO_IDR_IDR6 ((uint16_t)0x0040) /*!< Port input data, bit 6 */ +#define GPIO_IDR_IDR7 ((uint16_t)0x0080) /*!< Port input data, bit 7 */ +#define GPIO_IDR_IDR8 ((uint16_t)0x0100) /*!< Port input data, bit 8 */ +#define GPIO_IDR_IDR9 ((uint16_t)0x0200) /*!< Port input data, bit 9 */ +#define GPIO_IDR_IDR10 ((uint16_t)0x0400) /*!< Port input data, bit 10 */ +#define GPIO_IDR_IDR11 ((uint16_t)0x0800) /*!< Port input data, bit 11 */ +#define GPIO_IDR_IDR12 ((uint16_t)0x1000) /*!< Port input data, bit 12 */ +#define GPIO_IDR_IDR13 ((uint16_t)0x2000) /*!< Port input data, bit 13 */ +#define GPIO_IDR_IDR14 ((uint16_t)0x4000) /*!< Port input data, bit 14 */ +#define GPIO_IDR_IDR15 ((uint16_t)0x8000) /*!< Port input data, bit 15 */ + +/******************* Bit definition for GPIO_ODR register *******************/ +#define GPIO_ODR_ODR0 ((uint16_t)0x0001) /*!< Port output data, bit 0 */ +#define GPIO_ODR_ODR1 ((uint16_t)0x0002) /*!< Port output data, bit 1 */ +#define GPIO_ODR_ODR2 ((uint16_t)0x0004) /*!< Port output data, bit 2 */ +#define GPIO_ODR_ODR3 ((uint16_t)0x0008) /*!< Port output data, bit 3 */ +#define GPIO_ODR_ODR4 ((uint16_t)0x0010) /*!< Port output data, bit 4 */ +#define GPIO_ODR_ODR5 ((uint16_t)0x0020) /*!< Port output data, bit 5 */ +#define GPIO_ODR_ODR6 ((uint16_t)0x0040) /*!< Port output data, bit 6 */ +#define GPIO_ODR_ODR7 ((uint16_t)0x0080) /*!< Port output data, bit 7 */ +#define GPIO_ODR_ODR8 ((uint16_t)0x0100) /*!< Port output data, bit 8 */ +#define GPIO_ODR_ODR9 ((uint16_t)0x0200) /*!< Port output data, bit 9 */ +#define GPIO_ODR_ODR10 ((uint16_t)0x0400) /*!< Port output data, bit 10 */ +#define GPIO_ODR_ODR11 ((uint16_t)0x0800) /*!< Port output data, bit 11 */ +#define GPIO_ODR_ODR12 ((uint16_t)0x1000) /*!< Port output data, bit 12 */ +#define GPIO_ODR_ODR13 ((uint16_t)0x2000) /*!< Port output data, bit 13 */ +#define GPIO_ODR_ODR14 ((uint16_t)0x4000) /*!< Port output data, bit 14 */ +#define GPIO_ODR_ODR15 ((uint16_t)0x8000) /*!< Port output data, bit 15 */ + +/****************** Bit definition for GPIO_BSRR register *******************/ +#define GPIO_BSRR_BS0 ((uint32_t)0x00000001) /*!< Port x Set bit 0 */ +#define GPIO_BSRR_BS1 ((uint32_t)0x00000002) /*!< Port x Set bit 1 */ +#define GPIO_BSRR_BS2 ((uint32_t)0x00000004) /*!< Port x Set bit 2 */ +#define GPIO_BSRR_BS3 ((uint32_t)0x00000008) /*!< Port x Set bit 3 */ +#define GPIO_BSRR_BS4 ((uint32_t)0x00000010) /*!< Port x Set bit 4 */ +#define GPIO_BSRR_BS5 ((uint32_t)0x00000020) /*!< Port x Set bit 5 */ +#define GPIO_BSRR_BS6 ((uint32_t)0x00000040) /*!< Port x Set bit 6 */ +#define GPIO_BSRR_BS7 ((uint32_t)0x00000080) /*!< Port x Set bit 7 */ +#define GPIO_BSRR_BS8 ((uint32_t)0x00000100) /*!< Port x Set bit 8 */ +#define GPIO_BSRR_BS9 ((uint32_t)0x00000200) /*!< Port x Set bit 9 */ +#define GPIO_BSRR_BS10 ((uint32_t)0x00000400) /*!< Port x Set bit 10 */ +#define GPIO_BSRR_BS11 ((uint32_t)0x00000800) /*!< Port x Set bit 11 */ +#define GPIO_BSRR_BS12 ((uint32_t)0x00001000) /*!< Port x Set bit 12 */ +#define GPIO_BSRR_BS13 ((uint32_t)0x00002000) /*!< Port x Set bit 13 */ +#define GPIO_BSRR_BS14 ((uint32_t)0x00004000) /*!< Port x Set bit 14 */ +#define GPIO_BSRR_BS15 ((uint32_t)0x00008000) /*!< Port x Set bit 15 */ + +#define GPIO_BSRR_BR0 ((uint32_t)0x00010000) /*!< Port x Reset bit 0 */ +#define GPIO_BSRR_BR1 ((uint32_t)0x00020000) /*!< Port x Reset bit 1 */ +#define GPIO_BSRR_BR2 ((uint32_t)0x00040000) /*!< Port x Reset bit 2 */ +#define GPIO_BSRR_BR3 ((uint32_t)0x00080000) /*!< Port x Reset bit 3 */ +#define GPIO_BSRR_BR4 ((uint32_t)0x00100000) /*!< Port x Reset bit 4 */ +#define GPIO_BSRR_BR5 ((uint32_t)0x00200000) /*!< Port x Reset bit 5 */ +#define GPIO_BSRR_BR6 ((uint32_t)0x00400000) /*!< Port x Reset bit 6 */ +#define GPIO_BSRR_BR7 ((uint32_t)0x00800000) /*!< Port x Reset bit 7 */ +#define GPIO_BSRR_BR8 ((uint32_t)0x01000000) /*!< Port x Reset bit 8 */ +#define GPIO_BSRR_BR9 ((uint32_t)0x02000000) /*!< Port x Reset bit 9 */ +#define GPIO_BSRR_BR10 ((uint32_t)0x04000000) /*!< Port x Reset bit 10 */ +#define GPIO_BSRR_BR11 ((uint32_t)0x08000000) /*!< Port x Reset bit 11 */ +#define GPIO_BSRR_BR12 ((uint32_t)0x10000000) /*!< Port x Reset bit 12 */ +#define GPIO_BSRR_BR13 ((uint32_t)0x20000000) /*!< Port x Reset bit 13 */ +#define GPIO_BSRR_BR14 ((uint32_t)0x40000000) /*!< Port x Reset bit 14 */ +#define GPIO_BSRR_BR15 ((uint32_t)0x80000000) /*!< Port x Reset bit 15 */ + +/******************* Bit definition for GPIO_BRR register *******************/ +#define GPIO_BRR_BR0 ((uint16_t)0x0001) /*!< Port x Reset bit 0 */ +#define GPIO_BRR_BR1 ((uint16_t)0x0002) /*!< Port x Reset bit 1 */ +#define GPIO_BRR_BR2 ((uint16_t)0x0004) /*!< Port x Reset bit 2 */ +#define GPIO_BRR_BR3 ((uint16_t)0x0008) /*!< Port x Reset bit 3 */ +#define GPIO_BRR_BR4 ((uint16_t)0x0010) /*!< Port x Reset bit 4 */ +#define GPIO_BRR_BR5 ((uint16_t)0x0020) /*!< Port x Reset bit 5 */ +#define GPIO_BRR_BR6 ((uint16_t)0x0040) /*!< Port x Reset bit 6 */ +#define GPIO_BRR_BR7 ((uint16_t)0x0080) /*!< Port x Reset bit 7 */ +#define GPIO_BRR_BR8 ((uint16_t)0x0100) /*!< Port x Reset bit 8 */ +#define GPIO_BRR_BR9 ((uint16_t)0x0200) /*!< Port x Reset bit 9 */ +#define GPIO_BRR_BR10 ((uint16_t)0x0400) /*!< Port x Reset bit 10 */ +#define GPIO_BRR_BR11 ((uint16_t)0x0800) /*!< Port x Reset bit 11 */ +#define GPIO_BRR_BR12 ((uint16_t)0x1000) /*!< Port x Reset bit 12 */ +#define GPIO_BRR_BR13 ((uint16_t)0x2000) /*!< Port x Reset bit 13 */ +#define GPIO_BRR_BR14 ((uint16_t)0x4000) /*!< Port x Reset bit 14 */ +#define GPIO_BRR_BR15 ((uint16_t)0x8000) /*!< Port x Reset bit 15 */ + +/****************** Bit definition for GPIO_LCKR register *******************/ +#define GPIO_LCKR_LCK0 ((uint32_t)0x00000001) /*!< Port x Lock bit 0 */ +#define GPIO_LCKR_LCK1 ((uint32_t)0x00000002) /*!< Port x Lock bit 1 */ +#define GPIO_LCKR_LCK2 ((uint32_t)0x00000004) /*!< Port x Lock bit 2 */ +#define GPIO_LCKR_LCK3 ((uint32_t)0x00000008) /*!< Port x Lock bit 3 */ +#define GPIO_LCKR_LCK4 ((uint32_t)0x00000010) /*!< Port x Lock bit 4 */ +#define GPIO_LCKR_LCK5 ((uint32_t)0x00000020) /*!< Port x Lock bit 5 */ +#define GPIO_LCKR_LCK6 ((uint32_t)0x00000040) /*!< Port x Lock bit 6 */ +#define GPIO_LCKR_LCK7 ((uint32_t)0x00000080) /*!< Port x Lock bit 7 */ +#define GPIO_LCKR_LCK8 ((uint32_t)0x00000100) /*!< Port x Lock bit 8 */ +#define GPIO_LCKR_LCK9 ((uint32_t)0x00000200) /*!< Port x Lock bit 9 */ +#define GPIO_LCKR_LCK10 ((uint32_t)0x00000400) /*!< Port x Lock bit 10 */ +#define GPIO_LCKR_LCK11 ((uint32_t)0x00000800) /*!< Port x Lock bit 11 */ +#define GPIO_LCKR_LCK12 ((uint32_t)0x00001000) /*!< Port x Lock bit 12 */ +#define GPIO_LCKR_LCK13 ((uint32_t)0x00002000) /*!< Port x Lock bit 13 */ +#define GPIO_LCKR_LCK14 ((uint32_t)0x00004000) /*!< Port x Lock bit 14 */ +#define GPIO_LCKR_LCK15 ((uint32_t)0x00008000) /*!< Port x Lock bit 15 */ +#define GPIO_LCKR_LCKK ((uint32_t)0x00010000) /*!< Lock key */ + +/*----------------------------------------------------------------------------*/ + +/****************** Bit definition for AFIO_EVCR register *******************/ +#define AFIO_EVCR_PIN ((uint8_t)0x0F) /*!< PIN[3:0] bits (Pin selection) */ +#define AFIO_EVCR_PIN_0 ((uint8_t)0x01) /*!< Bit 0 */ +#define AFIO_EVCR_PIN_1 ((uint8_t)0x02) /*!< Bit 1 */ +#define AFIO_EVCR_PIN_2 ((uint8_t)0x04) /*!< Bit 2 */ +#define AFIO_EVCR_PIN_3 ((uint8_t)0x08) /*!< Bit 3 */ + +/*!< PIN configuration */ +#define AFIO_EVCR_PIN_PX0 ((uint8_t)0x00) /*!< Pin 0 selected */ +#define AFIO_EVCR_PIN_PX1 ((uint8_t)0x01) /*!< Pin 1 selected */ +#define AFIO_EVCR_PIN_PX2 ((uint8_t)0x02) /*!< Pin 2 selected */ +#define AFIO_EVCR_PIN_PX3 ((uint8_t)0x03) /*!< Pin 3 selected */ +#define AFIO_EVCR_PIN_PX4 ((uint8_t)0x04) /*!< Pin 4 selected */ +#define AFIO_EVCR_PIN_PX5 ((uint8_t)0x05) /*!< Pin 5 selected */ +#define AFIO_EVCR_PIN_PX6 ((uint8_t)0x06) /*!< Pin 6 selected */ +#define AFIO_EVCR_PIN_PX7 ((uint8_t)0x07) /*!< Pin 7 selected */ +#define AFIO_EVCR_PIN_PX8 ((uint8_t)0x08) /*!< Pin 8 selected */ +#define AFIO_EVCR_PIN_PX9 ((uint8_t)0x09) /*!< Pin 9 selected */ +#define AFIO_EVCR_PIN_PX10 ((uint8_t)0x0A) /*!< Pin 10 selected */ +#define AFIO_EVCR_PIN_PX11 ((uint8_t)0x0B) /*!< Pin 11 selected */ +#define AFIO_EVCR_PIN_PX12 ((uint8_t)0x0C) /*!< Pin 12 selected */ +#define AFIO_EVCR_PIN_PX13 ((uint8_t)0x0D) /*!< Pin 13 selected */ +#define AFIO_EVCR_PIN_PX14 ((uint8_t)0x0E) /*!< Pin 14 selected */ +#define AFIO_EVCR_PIN_PX15 ((uint8_t)0x0F) /*!< Pin 15 selected */ + +#define AFIO_EVCR_PORT ((uint8_t)0x70) /*!< PORT[2:0] bits (Port selection) */ +#define AFIO_EVCR_PORT_0 ((uint8_t)0x10) /*!< Bit 0 */ +#define AFIO_EVCR_PORT_1 ((uint8_t)0x20) /*!< Bit 1 */ +#define AFIO_EVCR_PORT_2 ((uint8_t)0x40) /*!< Bit 2 */ + +/*!< PORT configuration */ +#define AFIO_EVCR_PORT_PA ((uint8_t)0x00) /*!< Port A selected */ +#define AFIO_EVCR_PORT_PB ((uint8_t)0x10) /*!< Port B selected */ +#define AFIO_EVCR_PORT_PC ((uint8_t)0x20) /*!< Port C selected */ +#define AFIO_EVCR_PORT_PD ((uint8_t)0x30) /*!< Port D selected */ +#define AFIO_EVCR_PORT_PE ((uint8_t)0x40) /*!< Port E selected */ + +#define AFIO_EVCR_EVOE ((uint8_t)0x80) /*!< Event Output Enable */ + +/****************** Bit definition for AFIO_MAPR register *******************/ +#define AFIO_MAPR_SPI1_REMAP ((uint32_t)0x00000001) /*!< SPI1 remapping */ +#define AFIO_MAPR_I2C1_REMAP ((uint32_t)0x00000002) /*!< I2C1 remapping */ +#define AFIO_MAPR_USART1_REMAP ((uint32_t)0x00000004) /*!< USART1 remapping */ +#define AFIO_MAPR_USART2_REMAP ((uint32_t)0x00000008) /*!< USART2 remapping */ + +#define AFIO_MAPR_USART3_REMAP ((uint32_t)0x00000030) /*!< USART3_REMAP[1:0] bits (USART3 remapping) */ +#define AFIO_MAPR_USART3_REMAP_0 ((uint32_t)0x00000010) /*!< Bit 0 */ +#define AFIO_MAPR_USART3_REMAP_1 ((uint32_t)0x00000020) /*!< Bit 1 */ + +/* USART3_REMAP configuration */ +#define AFIO_MAPR_USART3_REMAP_NOREMAP ((uint32_t)0x00000000) /*!< No remap (TX/PB10, RX/PB11, CK/PB12, CTS/PB13, RTS/PB14) */ +#define AFIO_MAPR_USART3_REMAP_PARTIALREMAP ((uint32_t)0x00000010) /*!< Partial remap (TX/PC10, RX/PC11, CK/PC12, CTS/PB13, RTS/PB14) */ +#define AFIO_MAPR_USART3_REMAP_FULLREMAP ((uint32_t)0x00000030) /*!< Full remap (TX/PD8, RX/PD9, CK/PD10, CTS/PD11, RTS/PD12) */ + +#define AFIO_MAPR_TIM1_REMAP ((uint32_t)0x000000C0) /*!< TIM1_REMAP[1:0] bits (TIM1 remapping) */ +#define AFIO_MAPR_TIM1_REMAP_0 ((uint32_t)0x00000040) /*!< Bit 0 */ +#define AFIO_MAPR_TIM1_REMAP_1 ((uint32_t)0x00000080) /*!< Bit 1 */ + +/*!< TIM1_REMAP configuration */ +#define AFIO_MAPR_TIM1_REMAP_NOREMAP ((uint32_t)0x00000000) /*!< No remap (ETR/PA12, CH1/PA8, CH2/PA9, CH3/PA10, CH4/PA11, BKIN/PB12, CH1N/PB13, CH2N/PB14, CH3N/PB15) */ +#define AFIO_MAPR_TIM1_REMAP_PARTIALREMAP ((uint32_t)0x00000040) /*!< Partial remap (ETR/PA12, CH1/PA8, CH2/PA9, CH3/PA10, CH4/PA11, BKIN/PA6, CH1N/PA7, CH2N/PB0, CH3N/PB1) */ +#define AFIO_MAPR_TIM1_REMAP_FULLREMAP ((uint32_t)0x000000C0) /*!< Full remap (ETR/PE7, CH1/PE9, CH2/PE11, CH3/PE13, CH4/PE14, BKIN/PE15, CH1N/PE8, CH2N/PE10, CH3N/PE12) */ + +#define AFIO_MAPR_TIM2_REMAP ((uint32_t)0x00000300) /*!< TIM2_REMAP[1:0] bits (TIM2 remapping) */ +#define AFIO_MAPR_TIM2_REMAP_0 ((uint32_t)0x00000100) /*!< Bit 0 */ +#define AFIO_MAPR_TIM2_REMAP_1 ((uint32_t)0x00000200) /*!< Bit 1 */ + +/*!< TIM2_REMAP configuration */ +#define AFIO_MAPR_TIM2_REMAP_NOREMAP ((uint32_t)0x00000000) /*!< No remap (CH1/ETR/PA0, CH2/PA1, CH3/PA2, CH4/PA3) */ +#define AFIO_MAPR_TIM2_REMAP_PARTIALREMAP1 ((uint32_t)0x00000100) /*!< Partial remap (CH1/ETR/PA15, CH2/PB3, CH3/PA2, CH4/PA3) */ +#define AFIO_MAPR_TIM2_REMAP_PARTIALREMAP2 ((uint32_t)0x00000200) /*!< Partial remap (CH1/ETR/PA0, CH2/PA1, CH3/PB10, CH4/PB11) */ +#define AFIO_MAPR_TIM2_REMAP_FULLREMAP ((uint32_t)0x00000300) /*!< Full remap (CH1/ETR/PA15, CH2/PB3, CH3/PB10, CH4/PB11) */ + +#define AFIO_MAPR_TIM3_REMAP ((uint32_t)0x00000C00) /*!< TIM3_REMAP[1:0] bits (TIM3 remapping) */ +#define AFIO_MAPR_TIM3_REMAP_0 ((uint32_t)0x00000400) /*!< Bit 0 */ +#define AFIO_MAPR_TIM3_REMAP_1 ((uint32_t)0x00000800) /*!< Bit 1 */ + +/*!< TIM3_REMAP configuration */ +#define AFIO_MAPR_TIM3_REMAP_NOREMAP ((uint32_t)0x00000000) /*!< No remap (CH1/PA6, CH2/PA7, CH3/PB0, CH4/PB1) */ +#define AFIO_MAPR_TIM3_REMAP_PARTIALREMAP ((uint32_t)0x00000800) /*!< Partial remap (CH1/PB4, CH2/PB5, CH3/PB0, CH4/PB1) */ +#define AFIO_MAPR_TIM3_REMAP_FULLREMAP ((uint32_t)0x00000C00) /*!< Full remap (CH1/PC6, CH2/PC7, CH3/PC8, CH4/PC9) */ + +#define AFIO_MAPR_TIM4_REMAP ((uint32_t)0x00001000) /*!< TIM4_REMAP bit (TIM4 remapping) */ + +#define AFIO_MAPR_CAN_REMAP ((uint32_t)0x00006000) /*!< CAN_REMAP[1:0] bits (CAN Alternate function remapping) */ +#define AFIO_MAPR_CAN_REMAP_0 ((uint32_t)0x00002000) /*!< Bit 0 */ +#define AFIO_MAPR_CAN_REMAP_1 ((uint32_t)0x00004000) /*!< Bit 1 */ + +/*!< CAN_REMAP configuration */ +#define AFIO_MAPR_CAN_REMAP_REMAP1 ((uint32_t)0x00000000) /*!< CANRX mapped to PA11, CANTX mapped to PA12 */ +#define AFIO_MAPR_CAN_REMAP_REMAP2 ((uint32_t)0x00004000) /*!< CANRX mapped to PB8, CANTX mapped to PB9 */ +#define AFIO_MAPR_CAN_REMAP_REMAP3 ((uint32_t)0x00006000) /*!< CANRX mapped to PD0, CANTX mapped to PD1 */ + +#define AFIO_MAPR_PD01_REMAP ((uint32_t)0x00008000) /*!< Port D0/Port D1 mapping on OSC_IN/OSC_OUT */ +#define AFIO_MAPR_TIM5CH4_IREMAP ((uint32_t)0x00010000) /*!< TIM5 Channel4 Internal Remap */ +#define AFIO_MAPR_ADC1_ETRGINJ_REMAP ((uint32_t)0x00020000) /*!< ADC 1 External Trigger Injected Conversion remapping */ +#define AFIO_MAPR_ADC1_ETRGREG_REMAP ((uint32_t)0x00040000) /*!< ADC 1 External Trigger Regular Conversion remapping */ +#define AFIO_MAPR_ADC2_ETRGINJ_REMAP ((uint32_t)0x00080000) /*!< ADC 2 External Trigger Injected Conversion remapping */ +#define AFIO_MAPR_ADC2_ETRGREG_REMAP ((uint32_t)0x00100000) /*!< ADC 2 External Trigger Regular Conversion remapping */ + +/*!< SWJ_CFG configuration */ +#define AFIO_MAPR_SWJ_CFG ((uint32_t)0x07000000) /*!< SWJ_CFG[2:0] bits (Serial Wire JTAG configuration) */ +#define AFIO_MAPR_SWJ_CFG_0 ((uint32_t)0x01000000) /*!< Bit 0 */ +#define AFIO_MAPR_SWJ_CFG_1 ((uint32_t)0x02000000) /*!< Bit 1 */ +#define AFIO_MAPR_SWJ_CFG_2 ((uint32_t)0x04000000) /*!< Bit 2 */ + +#define AFIO_MAPR_SWJ_CFG_RESET ((uint32_t)0x00000000) /*!< Full SWJ (JTAG-DP + SW-DP) : Reset State */ +#define AFIO_MAPR_SWJ_CFG_NOJNTRST ((uint32_t)0x01000000) /*!< Full SWJ (JTAG-DP + SW-DP) but without JNTRST */ +#define AFIO_MAPR_SWJ_CFG_JTAGDISABLE ((uint32_t)0x02000000) /*!< JTAG-DP Disabled and SW-DP Enabled */ +#define AFIO_MAPR_SWJ_CFG_DISABLE ((uint32_t)0x04000000) /*!< JTAG-DP Disabled and SW-DP Disabled */ + +#ifdef STM32F10X_CL +/*!< ETH_REMAP configuration */ + #define AFIO_MAPR_ETH_REMAP ((uint32_t)0x00200000) /*!< SPI3_REMAP bit (Ethernet MAC I/O remapping) */ + +/*!< CAN2_REMAP configuration */ + #define AFIO_MAPR_CAN2_REMAP ((uint32_t)0x00400000) /*!< CAN2_REMAP bit (CAN2 I/O remapping) */ + +/*!< MII_RMII_SEL configuration */ + #define AFIO_MAPR_MII_RMII_SEL ((uint32_t)0x00800000) /*!< MII_RMII_SEL bit (Ethernet MII or RMII selection) */ + +/*!< SPI3_REMAP configuration */ + #define AFIO_MAPR_SPI3_REMAP ((uint32_t)0x10000000) /*!< SPI3_REMAP bit (SPI3 remapping) */ + +/*!< TIM2ITR1_IREMAP configuration */ + #define AFIO_MAPR_TIM2ITR1_IREMAP ((uint32_t)0x20000000) /*!< TIM2ITR1_IREMAP bit (TIM2 internal trigger 1 remapping) */ + +/*!< PTP_PPS_REMAP configuration */ + #define AFIO_MAPR_PTP_PPS_REMAP ((uint32_t)0x40000000) /*!< PTP_PPS_REMAP bit (Ethernet PTP PPS remapping) */ +#endif + +/***************** Bit definition for AFIO_EXTICR1 register *****************/ +#define AFIO_EXTICR1_EXTI0 ((uint16_t)0x000F) /*!< EXTI 0 configuration */ +#define AFIO_EXTICR1_EXTI1 ((uint16_t)0x00F0) /*!< EXTI 1 configuration */ +#define AFIO_EXTICR1_EXTI2 ((uint16_t)0x0F00) /*!< EXTI 2 configuration */ +#define AFIO_EXTICR1_EXTI3 ((uint16_t)0xF000) /*!< EXTI 3 configuration */ + +/*!< EXTI0 configuration */ +#define AFIO_EXTICR1_EXTI0_PA ((uint16_t)0x0000) /*!< PA[0] pin */ +#define AFIO_EXTICR1_EXTI0_PB ((uint16_t)0x0001) /*!< PB[0] pin */ +#define AFIO_EXTICR1_EXTI0_PC ((uint16_t)0x0002) /*!< PC[0] pin */ +#define AFIO_EXTICR1_EXTI0_PD ((uint16_t)0x0003) /*!< PD[0] pin */ +#define AFIO_EXTICR1_EXTI0_PE ((uint16_t)0x0004) /*!< PE[0] pin */ +#define AFIO_EXTICR1_EXTI0_PF ((uint16_t)0x0005) /*!< PF[0] pin */ +#define AFIO_EXTICR1_EXTI0_PG ((uint16_t)0x0006) /*!< PG[0] pin */ + +/*!< EXTI1 configuration */ +#define AFIO_EXTICR1_EXTI1_PA ((uint16_t)0x0000) /*!< PA[1] pin */ +#define AFIO_EXTICR1_EXTI1_PB ((uint16_t)0x0010) /*!< PB[1] pin */ +#define AFIO_EXTICR1_EXTI1_PC ((uint16_t)0x0020) /*!< PC[1] pin */ +#define AFIO_EXTICR1_EXTI1_PD ((uint16_t)0x0030) /*!< PD[1] pin */ +#define AFIO_EXTICR1_EXTI1_PE ((uint16_t)0x0040) /*!< PE[1] pin */ +#define AFIO_EXTICR1_EXTI1_PF ((uint16_t)0x0050) /*!< PF[1] pin */ +#define AFIO_EXTICR1_EXTI1_PG ((uint16_t)0x0060) /*!< PG[1] pin */ + +/*!< EXTI2 configuration */ +#define AFIO_EXTICR1_EXTI2_PA ((uint16_t)0x0000) /*!< PA[2] pin */ +#define AFIO_EXTICR1_EXTI2_PB ((uint16_t)0x0100) /*!< PB[2] pin */ +#define AFIO_EXTICR1_EXTI2_PC ((uint16_t)0x0200) /*!< PC[2] pin */ +#define AFIO_EXTICR1_EXTI2_PD ((uint16_t)0x0300) /*!< PD[2] pin */ +#define AFIO_EXTICR1_EXTI2_PE ((uint16_t)0x0400) /*!< PE[2] pin */ +#define AFIO_EXTICR1_EXTI2_PF ((uint16_t)0x0500) /*!< PF[2] pin */ +#define AFIO_EXTICR1_EXTI2_PG ((uint16_t)0x0600) /*!< PG[2] pin */ + +/*!< EXTI3 configuration */ +#define AFIO_EXTICR1_EXTI3_PA ((uint16_t)0x0000) /*!< PA[3] pin */ +#define AFIO_EXTICR1_EXTI3_PB ((uint16_t)0x1000) /*!< PB[3] pin */ +#define AFIO_EXTICR1_EXTI3_PC ((uint16_t)0x2000) /*!< PC[3] pin */ +#define AFIO_EXTICR1_EXTI3_PD ((uint16_t)0x3000) /*!< PD[3] pin */ +#define AFIO_EXTICR1_EXTI3_PE ((uint16_t)0x4000) /*!< PE[3] pin */ +#define AFIO_EXTICR1_EXTI3_PF ((uint16_t)0x5000) /*!< PF[3] pin */ +#define AFIO_EXTICR1_EXTI3_PG ((uint16_t)0x6000) /*!< PG[3] pin */ + +/***************** Bit definition for AFIO_EXTICR2 register *****************/ +#define AFIO_EXTICR2_EXTI4 ((uint16_t)0x000F) /*!< EXTI 4 configuration */ +#define AFIO_EXTICR2_EXTI5 ((uint16_t)0x00F0) /*!< EXTI 5 configuration */ +#define AFIO_EXTICR2_EXTI6 ((uint16_t)0x0F00) /*!< EXTI 6 configuration */ +#define AFIO_EXTICR2_EXTI7 ((uint16_t)0xF000) /*!< EXTI 7 configuration */ + +/*!< EXTI4 configuration */ +#define AFIO_EXTICR2_EXTI4_PA ((uint16_t)0x0000) /*!< PA[4] pin */ +#define AFIO_EXTICR2_EXTI4_PB ((uint16_t)0x0001) /*!< PB[4] pin */ +#define AFIO_EXTICR2_EXTI4_PC ((uint16_t)0x0002) /*!< PC[4] pin */ +#define AFIO_EXTICR2_EXTI4_PD ((uint16_t)0x0003) /*!< PD[4] pin */ +#define AFIO_EXTICR2_EXTI4_PE ((uint16_t)0x0004) /*!< PE[4] pin */ +#define AFIO_EXTICR2_EXTI4_PF ((uint16_t)0x0005) /*!< PF[4] pin */ +#define AFIO_EXTICR2_EXTI4_PG ((uint16_t)0x0006) /*!< PG[4] pin */ + +/* EXTI5 configuration */ +#define AFIO_EXTICR2_EXTI5_PA ((uint16_t)0x0000) /*!< PA[5] pin */ +#define AFIO_EXTICR2_EXTI5_PB ((uint16_t)0x0010) /*!< PB[5] pin */ +#define AFIO_EXTICR2_EXTI5_PC ((uint16_t)0x0020) /*!< PC[5] pin */ +#define AFIO_EXTICR2_EXTI5_PD ((uint16_t)0x0030) /*!< PD[5] pin */ +#define AFIO_EXTICR2_EXTI5_PE ((uint16_t)0x0040) /*!< PE[5] pin */ +#define AFIO_EXTICR2_EXTI5_PF ((uint16_t)0x0050) /*!< PF[5] pin */ +#define AFIO_EXTICR2_EXTI5_PG ((uint16_t)0x0060) /*!< PG[5] pin */ + +/*!< EXTI6 configuration */ +#define AFIO_EXTICR2_EXTI6_PA ((uint16_t)0x0000) /*!< PA[6] pin */ +#define AFIO_EXTICR2_EXTI6_PB ((uint16_t)0x0100) /*!< PB[6] pin */ +#define AFIO_EXTICR2_EXTI6_PC ((uint16_t)0x0200) /*!< PC[6] pin */ +#define AFIO_EXTICR2_EXTI6_PD ((uint16_t)0x0300) /*!< PD[6] pin */ +#define AFIO_EXTICR2_EXTI6_PE ((uint16_t)0x0400) /*!< PE[6] pin */ +#define AFIO_EXTICR2_EXTI6_PF ((uint16_t)0x0500) /*!< PF[6] pin */ +#define AFIO_EXTICR2_EXTI6_PG ((uint16_t)0x0600) /*!< PG[6] pin */ + +/*!< EXTI7 configuration */ +#define AFIO_EXTICR2_EXTI7_PA ((uint16_t)0x0000) /*!< PA[7] pin */ +#define AFIO_EXTICR2_EXTI7_PB ((uint16_t)0x1000) /*!< PB[7] pin */ +#define AFIO_EXTICR2_EXTI7_PC ((uint16_t)0x2000) /*!< PC[7] pin */ +#define AFIO_EXTICR2_EXTI7_PD ((uint16_t)0x3000) /*!< PD[7] pin */ +#define AFIO_EXTICR2_EXTI7_PE ((uint16_t)0x4000) /*!< PE[7] pin */ +#define AFIO_EXTICR2_EXTI7_PF ((uint16_t)0x5000) /*!< PF[7] pin */ +#define AFIO_EXTICR2_EXTI7_PG ((uint16_t)0x6000) /*!< PG[7] pin */ + +/***************** Bit definition for AFIO_EXTICR3 register *****************/ +#define AFIO_EXTICR3_EXTI8 ((uint16_t)0x000F) /*!< EXTI 8 configuration */ +#define AFIO_EXTICR3_EXTI9 ((uint16_t)0x00F0) /*!< EXTI 9 configuration */ +#define AFIO_EXTICR3_EXTI10 ((uint16_t)0x0F00) /*!< EXTI 10 configuration */ +#define AFIO_EXTICR3_EXTI11 ((uint16_t)0xF000) /*!< EXTI 11 configuration */ + +/*!< EXTI8 configuration */ +#define AFIO_EXTICR3_EXTI8_PA ((uint16_t)0x0000) /*!< PA[8] pin */ +#define AFIO_EXTICR3_EXTI8_PB ((uint16_t)0x0001) /*!< PB[8] pin */ +#define AFIO_EXTICR3_EXTI8_PC ((uint16_t)0x0002) /*!< PC[8] pin */ +#define AFIO_EXTICR3_EXTI8_PD ((uint16_t)0x0003) /*!< PD[8] pin */ +#define AFIO_EXTICR3_EXTI8_PE ((uint16_t)0x0004) /*!< PE[8] pin */ +#define AFIO_EXTICR3_EXTI8_PF ((uint16_t)0x0005) /*!< PF[8] pin */ +#define AFIO_EXTICR3_EXTI8_PG ((uint16_t)0x0006) /*!< PG[8] pin */ + +/*!< EXTI9 configuration */ +#define AFIO_EXTICR3_EXTI9_PA ((uint16_t)0x0000) /*!< PA[9] pin */ +#define AFIO_EXTICR3_EXTI9_PB ((uint16_t)0x0010) /*!< PB[9] pin */ +#define AFIO_EXTICR3_EXTI9_PC ((uint16_t)0x0020) /*!< PC[9] pin */ +#define AFIO_EXTICR3_EXTI9_PD ((uint16_t)0x0030) /*!< PD[9] pin */ +#define AFIO_EXTICR3_EXTI9_PE ((uint16_t)0x0040) /*!< PE[9] pin */ +#define AFIO_EXTICR3_EXTI9_PF ((uint16_t)0x0050) /*!< PF[9] pin */ +#define AFIO_EXTICR3_EXTI9_PG ((uint16_t)0x0060) /*!< PG[9] pin */ + +/*!< EXTI10 configuration */ +#define AFIO_EXTICR3_EXTI10_PA ((uint16_t)0x0000) /*!< PA[10] pin */ +#define AFIO_EXTICR3_EXTI10_PB ((uint16_t)0x0100) /*!< PB[10] pin */ +#define AFIO_EXTICR3_EXTI10_PC ((uint16_t)0x0200) /*!< PC[10] pin */ +#define AFIO_EXTICR3_EXTI10_PD ((uint16_t)0x0300) /*!< PD[10] pin */ +#define AFIO_EXTICR3_EXTI10_PE ((uint16_t)0x0400) /*!< PE[10] pin */ +#define AFIO_EXTICR3_EXTI10_PF ((uint16_t)0x0500) /*!< PF[10] pin */ +#define AFIO_EXTICR3_EXTI10_PG ((uint16_t)0x0600) /*!< PG[10] pin */ + +/*!< EXTI11 configuration */ +#define AFIO_EXTICR3_EXTI11_PA ((uint16_t)0x0000) /*!< PA[11] pin */ +#define AFIO_EXTICR3_EXTI11_PB ((uint16_t)0x1000) /*!< PB[11] pin */ +#define AFIO_EXTICR3_EXTI11_PC ((uint16_t)0x2000) /*!< PC[11] pin */ +#define AFIO_EXTICR3_EXTI11_PD ((uint16_t)0x3000) /*!< PD[11] pin */ +#define AFIO_EXTICR3_EXTI11_PE ((uint16_t)0x4000) /*!< PE[11] pin */ +#define AFIO_EXTICR3_EXTI11_PF ((uint16_t)0x5000) /*!< PF[11] pin */ +#define AFIO_EXTICR3_EXTI11_PG ((uint16_t)0x6000) /*!< PG[11] pin */ + +/***************** Bit definition for AFIO_EXTICR4 register *****************/ +#define AFIO_EXTICR4_EXTI12 ((uint16_t)0x000F) /*!< EXTI 12 configuration */ +#define AFIO_EXTICR4_EXTI13 ((uint16_t)0x00F0) /*!< EXTI 13 configuration */ +#define AFIO_EXTICR4_EXTI14 ((uint16_t)0x0F00) /*!< EXTI 14 configuration */ +#define AFIO_EXTICR4_EXTI15 ((uint16_t)0xF000) /*!< EXTI 15 configuration */ + +/* EXTI12 configuration */ +#define AFIO_EXTICR4_EXTI12_PA ((uint16_t)0x0000) /*!< PA[12] pin */ +#define AFIO_EXTICR4_EXTI12_PB ((uint16_t)0x0001) /*!< PB[12] pin */ +#define AFIO_EXTICR4_EXTI12_PC ((uint16_t)0x0002) /*!< PC[12] pin */ +#define AFIO_EXTICR4_EXTI12_PD ((uint16_t)0x0003) /*!< PD[12] pin */ +#define AFIO_EXTICR4_EXTI12_PE ((uint16_t)0x0004) /*!< PE[12] pin */ +#define AFIO_EXTICR4_EXTI12_PF ((uint16_t)0x0005) /*!< PF[12] pin */ +#define AFIO_EXTICR4_EXTI12_PG ((uint16_t)0x0006) /*!< PG[12] pin */ + +/* EXTI13 configuration */ +#define AFIO_EXTICR4_EXTI13_PA ((uint16_t)0x0000) /*!< PA[13] pin */ +#define AFIO_EXTICR4_EXTI13_PB ((uint16_t)0x0010) /*!< PB[13] pin */ +#define AFIO_EXTICR4_EXTI13_PC ((uint16_t)0x0020) /*!< PC[13] pin */ +#define AFIO_EXTICR4_EXTI13_PD ((uint16_t)0x0030) /*!< PD[13] pin */ +#define AFIO_EXTICR4_EXTI13_PE ((uint16_t)0x0040) /*!< PE[13] pin */ +#define AFIO_EXTICR4_EXTI13_PF ((uint16_t)0x0050) /*!< PF[13] pin */ +#define AFIO_EXTICR4_EXTI13_PG ((uint16_t)0x0060) /*!< PG[13] pin */ + +/*!< EXTI14 configuration */ +#define AFIO_EXTICR4_EXTI14_PA ((uint16_t)0x0000) /*!< PA[14] pin */ +#define AFIO_EXTICR4_EXTI14_PB ((uint16_t)0x0100) /*!< PB[14] pin */ +#define AFIO_EXTICR4_EXTI14_PC ((uint16_t)0x0200) /*!< PC[14] pin */ +#define AFIO_EXTICR4_EXTI14_PD ((uint16_t)0x0300) /*!< PD[14] pin */ +#define AFIO_EXTICR4_EXTI14_PE ((uint16_t)0x0400) /*!< PE[14] pin */ +#define AFIO_EXTICR4_EXTI14_PF ((uint16_t)0x0500) /*!< PF[14] pin */ +#define AFIO_EXTICR4_EXTI14_PG ((uint16_t)0x0600) /*!< PG[14] pin */ + +/*!< EXTI15 configuration */ +#define AFIO_EXTICR4_EXTI15_PA ((uint16_t)0x0000) /*!< PA[15] pin */ +#define AFIO_EXTICR4_EXTI15_PB ((uint16_t)0x1000) /*!< PB[15] pin */ +#define AFIO_EXTICR4_EXTI15_PC ((uint16_t)0x2000) /*!< PC[15] pin */ +#define AFIO_EXTICR4_EXTI15_PD ((uint16_t)0x3000) /*!< PD[15] pin */ +#define AFIO_EXTICR4_EXTI15_PE ((uint16_t)0x4000) /*!< PE[15] pin */ +#define AFIO_EXTICR4_EXTI15_PF ((uint16_t)0x5000) /*!< PF[15] pin */ +#define AFIO_EXTICR4_EXTI15_PG ((uint16_t)0x6000) /*!< PG[15] pin */ + +#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL) +/****************** Bit definition for AFIO_MAPR2 register ******************/ +#define AFIO_MAPR2_TIM15_REMAP ((uint32_t)0x00000001) /*!< TIM15 remapping */ +#define AFIO_MAPR2_TIM16_REMAP ((uint32_t)0x00000002) /*!< TIM16 remapping */ +#define AFIO_MAPR2_TIM17_REMAP ((uint32_t)0x00000004) /*!< TIM17 remapping */ +#define AFIO_MAPR2_CEC_REMAP ((uint32_t)0x00000008) /*!< CEC remapping */ +#define AFIO_MAPR2_TIM1_DMA_REMAP ((uint32_t)0x00000010) /*!< TIM1_DMA remapping */ +#endif + +#ifdef STM32F10X_HD_VL +#define AFIO_MAPR2_TIM13_REMAP ((uint32_t)0x00000100) /*!< TIM13 remapping */ +#define AFIO_MAPR2_TIM14_REMAP ((uint32_t)0x00000200) /*!< TIM14 remapping */ +#define AFIO_MAPR2_FSMC_NADV_REMAP ((uint32_t)0x00000400) /*!< FSMC NADV remapping */ +#define AFIO_MAPR2_TIM67_DAC_DMA_REMAP ((uint32_t)0x00000800) /*!< TIM6/TIM7 and DAC DMA remapping */ +#define AFIO_MAPR2_TIM12_REMAP ((uint32_t)0x00001000) /*!< TIM12 remapping */ +#define AFIO_MAPR2_MISC_REMAP ((uint32_t)0x00002000) /*!< Miscellaneous remapping */ +#endif + +#ifdef STM32F10X_XL +/****************** Bit definition for AFIO_MAPR2 register ******************/ +#define AFIO_MAPR2_TIM9_REMAP ((uint32_t)0x00000020) /*!< TIM9 remapping */ +#define AFIO_MAPR2_TIM10_REMAP ((uint32_t)0x00000040) /*!< TIM10 remapping */ +#define AFIO_MAPR2_TIM11_REMAP ((uint32_t)0x00000080) /*!< TIM11 remapping */ +#define AFIO_MAPR2_TIM13_REMAP ((uint32_t)0x00000100) /*!< TIM13 remapping */ +#define AFIO_MAPR2_TIM14_REMAP ((uint32_t)0x00000200) /*!< TIM14 remapping */ +#define AFIO_MAPR2_FSMC_NADV_REMAP ((uint32_t)0x00000400) /*!< FSMC NADV remapping */ +#endif + +/******************************************************************************/ +/* */ +/* SystemTick */ +/* */ +/******************************************************************************/ + +/***************** Bit definition for SysTick_CTRL register *****************/ +#define SysTick_CTRL_ENABLE ((uint32_t)0x00000001) /*!< Counter enable */ +#define SysTick_CTRL_TICKINT ((uint32_t)0x00000002) /*!< Counting down to 0 pends the SysTick handler */ +#define SysTick_CTRL_CLKSOURCE ((uint32_t)0x00000004) /*!< Clock source */ +#define SysTick_CTRL_COUNTFLAG ((uint32_t)0x00010000) /*!< Count Flag */ + +/***************** Bit definition for SysTick_LOAD register *****************/ +#define SysTick_LOAD_RELOAD ((uint32_t)0x00FFFFFF) /*!< Value to load into the SysTick Current Value Register when the counter reaches 0 */ + +/***************** Bit definition for SysTick_VAL register ******************/ +#define SysTick_VAL_CURRENT ((uint32_t)0x00FFFFFF) /*!< Current value at the time the register is accessed */ + +/***************** Bit definition for SysTick_CALIB register ****************/ +#define SysTick_CALIB_TENMS ((uint32_t)0x00FFFFFF) /*!< Reload value to use for 10ms timing */ +#define SysTick_CALIB_SKEW ((uint32_t)0x40000000) /*!< Calibration value is not exactly 10 ms */ +#define SysTick_CALIB_NOREF ((uint32_t)0x80000000) /*!< The reference clock is not provided */ + +/******************************************************************************/ +/* */ +/* Nested Vectored Interrupt Controller */ +/* */ +/******************************************************************************/ + +/****************** Bit definition for NVIC_ISER register *******************/ +#define NVIC_ISER_SETENA ((uint32_t)0xFFFFFFFF) /*!< Interrupt set enable bits */ +#define NVIC_ISER_SETENA_0 ((uint32_t)0x00000001) /*!< bit 0 */ +#define NVIC_ISER_SETENA_1 ((uint32_t)0x00000002) /*!< bit 1 */ +#define NVIC_ISER_SETENA_2 ((uint32_t)0x00000004) /*!< bit 2 */ +#define NVIC_ISER_SETENA_3 ((uint32_t)0x00000008) /*!< bit 3 */ +#define NVIC_ISER_SETENA_4 ((uint32_t)0x00000010) /*!< bit 4 */ +#define NVIC_ISER_SETENA_5 ((uint32_t)0x00000020) /*!< bit 5 */ +#define NVIC_ISER_SETENA_6 ((uint32_t)0x00000040) /*!< bit 6 */ +#define NVIC_ISER_SETENA_7 ((uint32_t)0x00000080) /*!< bit 7 */ +#define NVIC_ISER_SETENA_8 ((uint32_t)0x00000100) /*!< bit 8 */ +#define NVIC_ISER_SETENA_9 ((uint32_t)0x00000200) /*!< bit 9 */ +#define NVIC_ISER_SETENA_10 ((uint32_t)0x00000400) /*!< bit 10 */ +#define NVIC_ISER_SETENA_11 ((uint32_t)0x00000800) /*!< bit 11 */ +#define NVIC_ISER_SETENA_12 ((uint32_t)0x00001000) /*!< bit 12 */ +#define NVIC_ISER_SETENA_13 ((uint32_t)0x00002000) /*!< bit 13 */ +#define NVIC_ISER_SETENA_14 ((uint32_t)0x00004000) /*!< bit 14 */ +#define NVIC_ISER_SETENA_15 ((uint32_t)0x00008000) /*!< bit 15 */ +#define NVIC_ISER_SETENA_16 ((uint32_t)0x00010000) /*!< bit 16 */ +#define NVIC_ISER_SETENA_17 ((uint32_t)0x00020000) /*!< bit 17 */ +#define NVIC_ISER_SETENA_18 ((uint32_t)0x00040000) /*!< bit 18 */ +#define NVIC_ISER_SETENA_19 ((uint32_t)0x00080000) /*!< bit 19 */ +#define NVIC_ISER_SETENA_20 ((uint32_t)0x00100000) /*!< bit 20 */ +#define NVIC_ISER_SETENA_21 ((uint32_t)0x00200000) /*!< bit 21 */ +#define NVIC_ISER_SETENA_22 ((uint32_t)0x00400000) /*!< bit 22 */ +#define NVIC_ISER_SETENA_23 ((uint32_t)0x00800000) /*!< bit 23 */ +#define NVIC_ISER_SETENA_24 ((uint32_t)0x01000000) /*!< bit 24 */ +#define NVIC_ISER_SETENA_25 ((uint32_t)0x02000000) /*!< bit 25 */ +#define NVIC_ISER_SETENA_26 ((uint32_t)0x04000000) /*!< bit 26 */ +#define NVIC_ISER_SETENA_27 ((uint32_t)0x08000000) /*!< bit 27 */ +#define NVIC_ISER_SETENA_28 ((uint32_t)0x10000000) /*!< bit 28 */ +#define NVIC_ISER_SETENA_29 ((uint32_t)0x20000000) /*!< bit 29 */ +#define NVIC_ISER_SETENA_30 ((uint32_t)0x40000000) /*!< bit 30 */ +#define NVIC_ISER_SETENA_31 ((uint32_t)0x80000000) /*!< bit 31 */ + +/****************** Bit definition for NVIC_ICER register *******************/ +#define NVIC_ICER_CLRENA ((uint32_t)0xFFFFFFFF) /*!< Interrupt clear-enable bits */ +#define NVIC_ICER_CLRENA_0 ((uint32_t)0x00000001) /*!< bit 0 */ +#define NVIC_ICER_CLRENA_1 ((uint32_t)0x00000002) /*!< bit 1 */ +#define NVIC_ICER_CLRENA_2 ((uint32_t)0x00000004) /*!< bit 2 */ +#define NVIC_ICER_CLRENA_3 ((uint32_t)0x00000008) /*!< bit 3 */ +#define NVIC_ICER_CLRENA_4 ((uint32_t)0x00000010) /*!< bit 4 */ +#define NVIC_ICER_CLRENA_5 ((uint32_t)0x00000020) /*!< bit 5 */ +#define NVIC_ICER_CLRENA_6 ((uint32_t)0x00000040) /*!< bit 6 */ +#define NVIC_ICER_CLRENA_7 ((uint32_t)0x00000080) /*!< bit 7 */ +#define NVIC_ICER_CLRENA_8 ((uint32_t)0x00000100) /*!< bit 8 */ +#define NVIC_ICER_CLRENA_9 ((uint32_t)0x00000200) /*!< bit 9 */ +#define NVIC_ICER_CLRENA_10 ((uint32_t)0x00000400) /*!< bit 10 */ +#define NVIC_ICER_CLRENA_11 ((uint32_t)0x00000800) /*!< bit 11 */ +#define NVIC_ICER_CLRENA_12 ((uint32_t)0x00001000) /*!< bit 12 */ +#define NVIC_ICER_CLRENA_13 ((uint32_t)0x00002000) /*!< bit 13 */ +#define NVIC_ICER_CLRENA_14 ((uint32_t)0x00004000) /*!< bit 14 */ +#define NVIC_ICER_CLRENA_15 ((uint32_t)0x00008000) /*!< bit 15 */ +#define NVIC_ICER_CLRENA_16 ((uint32_t)0x00010000) /*!< bit 16 */ +#define NVIC_ICER_CLRENA_17 ((uint32_t)0x00020000) /*!< bit 17 */ +#define NVIC_ICER_CLRENA_18 ((uint32_t)0x00040000) /*!< bit 18 */ +#define NVIC_ICER_CLRENA_19 ((uint32_t)0x00080000) /*!< bit 19 */ +#define NVIC_ICER_CLRENA_20 ((uint32_t)0x00100000) /*!< bit 20 */ +#define NVIC_ICER_CLRENA_21 ((uint32_t)0x00200000) /*!< bit 21 */ +#define NVIC_ICER_CLRENA_22 ((uint32_t)0x00400000) /*!< bit 22 */ +#define NVIC_ICER_CLRENA_23 ((uint32_t)0x00800000) /*!< bit 23 */ +#define NVIC_ICER_CLRENA_24 ((uint32_t)0x01000000) /*!< bit 24 */ +#define NVIC_ICER_CLRENA_25 ((uint32_t)0x02000000) /*!< bit 25 */ +#define NVIC_ICER_CLRENA_26 ((uint32_t)0x04000000) /*!< bit 26 */ +#define NVIC_ICER_CLRENA_27 ((uint32_t)0x08000000) /*!< bit 27 */ +#define NVIC_ICER_CLRENA_28 ((uint32_t)0x10000000) /*!< bit 28 */ +#define NVIC_ICER_CLRENA_29 ((uint32_t)0x20000000) /*!< bit 29 */ +#define NVIC_ICER_CLRENA_30 ((uint32_t)0x40000000) /*!< bit 30 */ +#define NVIC_ICER_CLRENA_31 ((uint32_t)0x80000000) /*!< bit 31 */ + +/****************** Bit definition for NVIC_ISPR register *******************/ +#define NVIC_ISPR_SETPEND ((uint32_t)0xFFFFFFFF) /*!< Interrupt set-pending bits */ +#define NVIC_ISPR_SETPEND_0 ((uint32_t)0x00000001) /*!< bit 0 */ +#define NVIC_ISPR_SETPEND_1 ((uint32_t)0x00000002) /*!< bit 1 */ +#define NVIC_ISPR_SETPEND_2 ((uint32_t)0x00000004) /*!< bit 2 */ +#define NVIC_ISPR_SETPEND_3 ((uint32_t)0x00000008) /*!< bit 3 */ +#define NVIC_ISPR_SETPEND_4 ((uint32_t)0x00000010) /*!< bit 4 */ +#define NVIC_ISPR_SETPEND_5 ((uint32_t)0x00000020) /*!< bit 5 */ +#define NVIC_ISPR_SETPEND_6 ((uint32_t)0x00000040) /*!< bit 6 */ +#define NVIC_ISPR_SETPEND_7 ((uint32_t)0x00000080) /*!< bit 7 */ +#define NVIC_ISPR_SETPEND_8 ((uint32_t)0x00000100) /*!< bit 8 */ +#define NVIC_ISPR_SETPEND_9 ((uint32_t)0x00000200) /*!< bit 9 */ +#define NVIC_ISPR_SETPEND_10 ((uint32_t)0x00000400) /*!< bit 10 */ +#define NVIC_ISPR_SETPEND_11 ((uint32_t)0x00000800) /*!< bit 11 */ +#define NVIC_ISPR_SETPEND_12 ((uint32_t)0x00001000) /*!< bit 12 */ +#define NVIC_ISPR_SETPEND_13 ((uint32_t)0x00002000) /*!< bit 13 */ +#define NVIC_ISPR_SETPEND_14 ((uint32_t)0x00004000) /*!< bit 14 */ +#define NVIC_ISPR_SETPEND_15 ((uint32_t)0x00008000) /*!< bit 15 */ +#define NVIC_ISPR_SETPEND_16 ((uint32_t)0x00010000) /*!< bit 16 */ +#define NVIC_ISPR_SETPEND_17 ((uint32_t)0x00020000) /*!< bit 17 */ +#define NVIC_ISPR_SETPEND_18 ((uint32_t)0x00040000) /*!< bit 18 */ +#define NVIC_ISPR_SETPEND_19 ((uint32_t)0x00080000) /*!< bit 19 */ +#define NVIC_ISPR_SETPEND_20 ((uint32_t)0x00100000) /*!< bit 20 */ +#define NVIC_ISPR_SETPEND_21 ((uint32_t)0x00200000) /*!< bit 21 */ +#define NVIC_ISPR_SETPEND_22 ((uint32_t)0x00400000) /*!< bit 22 */ +#define NVIC_ISPR_SETPEND_23 ((uint32_t)0x00800000) /*!< bit 23 */ +#define NVIC_ISPR_SETPEND_24 ((uint32_t)0x01000000) /*!< bit 24 */ +#define NVIC_ISPR_SETPEND_25 ((uint32_t)0x02000000) /*!< bit 25 */ +#define NVIC_ISPR_SETPEND_26 ((uint32_t)0x04000000) /*!< bit 26 */ +#define NVIC_ISPR_SETPEND_27 ((uint32_t)0x08000000) /*!< bit 27 */ +#define NVIC_ISPR_SETPEND_28 ((uint32_t)0x10000000) /*!< bit 28 */ +#define NVIC_ISPR_SETPEND_29 ((uint32_t)0x20000000) /*!< bit 29 */ +#define NVIC_ISPR_SETPEND_30 ((uint32_t)0x40000000) /*!< bit 30 */ +#define NVIC_ISPR_SETPEND_31 ((uint32_t)0x80000000) /*!< bit 31 */ + +/****************** Bit definition for NVIC_ICPR register *******************/ +#define NVIC_ICPR_CLRPEND ((uint32_t)0xFFFFFFFF) /*!< Interrupt clear-pending bits */ +#define NVIC_ICPR_CLRPEND_0 ((uint32_t)0x00000001) /*!< bit 0 */ +#define NVIC_ICPR_CLRPEND_1 ((uint32_t)0x00000002) /*!< bit 1 */ +#define NVIC_ICPR_CLRPEND_2 ((uint32_t)0x00000004) /*!< bit 2 */ +#define NVIC_ICPR_CLRPEND_3 ((uint32_t)0x00000008) /*!< bit 3 */ +#define NVIC_ICPR_CLRPEND_4 ((uint32_t)0x00000010) /*!< bit 4 */ +#define NVIC_ICPR_CLRPEND_5 ((uint32_t)0x00000020) /*!< bit 5 */ +#define NVIC_ICPR_CLRPEND_6 ((uint32_t)0x00000040) /*!< bit 6 */ +#define NVIC_ICPR_CLRPEND_7 ((uint32_t)0x00000080) /*!< bit 7 */ +#define NVIC_ICPR_CLRPEND_8 ((uint32_t)0x00000100) /*!< bit 8 */ +#define NVIC_ICPR_CLRPEND_9 ((uint32_t)0x00000200) /*!< bit 9 */ +#define NVIC_ICPR_CLRPEND_10 ((uint32_t)0x00000400) /*!< bit 10 */ +#define NVIC_ICPR_CLRPEND_11 ((uint32_t)0x00000800) /*!< bit 11 */ +#define NVIC_ICPR_CLRPEND_12 ((uint32_t)0x00001000) /*!< bit 12 */ +#define NVIC_ICPR_CLRPEND_13 ((uint32_t)0x00002000) /*!< bit 13 */ +#define NVIC_ICPR_CLRPEND_14 ((uint32_t)0x00004000) /*!< bit 14 */ +#define NVIC_ICPR_CLRPEND_15 ((uint32_t)0x00008000) /*!< bit 15 */ +#define NVIC_ICPR_CLRPEND_16 ((uint32_t)0x00010000) /*!< bit 16 */ +#define NVIC_ICPR_CLRPEND_17 ((uint32_t)0x00020000) /*!< bit 17 */ +#define NVIC_ICPR_CLRPEND_18 ((uint32_t)0x00040000) /*!< bit 18 */ +#define NVIC_ICPR_CLRPEND_19 ((uint32_t)0x00080000) /*!< bit 19 */ +#define NVIC_ICPR_CLRPEND_20 ((uint32_t)0x00100000) /*!< bit 20 */ +#define NVIC_ICPR_CLRPEND_21 ((uint32_t)0x00200000) /*!< bit 21 */ +#define NVIC_ICPR_CLRPEND_22 ((uint32_t)0x00400000) /*!< bit 22 */ +#define NVIC_ICPR_CLRPEND_23 ((uint32_t)0x00800000) /*!< bit 23 */ +#define NVIC_ICPR_CLRPEND_24 ((uint32_t)0x01000000) /*!< bit 24 */ +#define NVIC_ICPR_CLRPEND_25 ((uint32_t)0x02000000) /*!< bit 25 */ +#define NVIC_ICPR_CLRPEND_26 ((uint32_t)0x04000000) /*!< bit 26 */ +#define NVIC_ICPR_CLRPEND_27 ((uint32_t)0x08000000) /*!< bit 27 */ +#define NVIC_ICPR_CLRPEND_28 ((uint32_t)0x10000000) /*!< bit 28 */ +#define NVIC_ICPR_CLRPEND_29 ((uint32_t)0x20000000) /*!< bit 29 */ +#define NVIC_ICPR_CLRPEND_30 ((uint32_t)0x40000000) /*!< bit 30 */ +#define NVIC_ICPR_CLRPEND_31 ((uint32_t)0x80000000) /*!< bit 31 */ + +/****************** Bit definition for NVIC_IABR register *******************/ +#define NVIC_IABR_ACTIVE ((uint32_t)0xFFFFFFFF) /*!< Interrupt active flags */ +#define NVIC_IABR_ACTIVE_0 ((uint32_t)0x00000001) /*!< bit 0 */ +#define NVIC_IABR_ACTIVE_1 ((uint32_t)0x00000002) /*!< bit 1 */ +#define NVIC_IABR_ACTIVE_2 ((uint32_t)0x00000004) /*!< bit 2 */ +#define NVIC_IABR_ACTIVE_3 ((uint32_t)0x00000008) /*!< bit 3 */ +#define NVIC_IABR_ACTIVE_4 ((uint32_t)0x00000010) /*!< bit 4 */ +#define NVIC_IABR_ACTIVE_5 ((uint32_t)0x00000020) /*!< bit 5 */ +#define NVIC_IABR_ACTIVE_6 ((uint32_t)0x00000040) /*!< bit 6 */ +#define NVIC_IABR_ACTIVE_7 ((uint32_t)0x00000080) /*!< bit 7 */ +#define NVIC_IABR_ACTIVE_8 ((uint32_t)0x00000100) /*!< bit 8 */ +#define NVIC_IABR_ACTIVE_9 ((uint32_t)0x00000200) /*!< bit 9 */ +#define NVIC_IABR_ACTIVE_10 ((uint32_t)0x00000400) /*!< bit 10 */ +#define NVIC_IABR_ACTIVE_11 ((uint32_t)0x00000800) /*!< bit 11 */ +#define NVIC_IABR_ACTIVE_12 ((uint32_t)0x00001000) /*!< bit 12 */ +#define NVIC_IABR_ACTIVE_13 ((uint32_t)0x00002000) /*!< bit 13 */ +#define NVIC_IABR_ACTIVE_14 ((uint32_t)0x00004000) /*!< bit 14 */ +#define NVIC_IABR_ACTIVE_15 ((uint32_t)0x00008000) /*!< bit 15 */ +#define NVIC_IABR_ACTIVE_16 ((uint32_t)0x00010000) /*!< bit 16 */ +#define NVIC_IABR_ACTIVE_17 ((uint32_t)0x00020000) /*!< bit 17 */ +#define NVIC_IABR_ACTIVE_18 ((uint32_t)0x00040000) /*!< bit 18 */ +#define NVIC_IABR_ACTIVE_19 ((uint32_t)0x00080000) /*!< bit 19 */ +#define NVIC_IABR_ACTIVE_20 ((uint32_t)0x00100000) /*!< bit 20 */ +#define NVIC_IABR_ACTIVE_21 ((uint32_t)0x00200000) /*!< bit 21 */ +#define NVIC_IABR_ACTIVE_22 ((uint32_t)0x00400000) /*!< bit 22 */ +#define NVIC_IABR_ACTIVE_23 ((uint32_t)0x00800000) /*!< bit 23 */ +#define NVIC_IABR_ACTIVE_24 ((uint32_t)0x01000000) /*!< bit 24 */ +#define NVIC_IABR_ACTIVE_25 ((uint32_t)0x02000000) /*!< bit 25 */ +#define NVIC_IABR_ACTIVE_26 ((uint32_t)0x04000000) /*!< bit 26 */ +#define NVIC_IABR_ACTIVE_27 ((uint32_t)0x08000000) /*!< bit 27 */ +#define NVIC_IABR_ACTIVE_28 ((uint32_t)0x10000000) /*!< bit 28 */ +#define NVIC_IABR_ACTIVE_29 ((uint32_t)0x20000000) /*!< bit 29 */ +#define NVIC_IABR_ACTIVE_30 ((uint32_t)0x40000000) /*!< bit 30 */ +#define NVIC_IABR_ACTIVE_31 ((uint32_t)0x80000000) /*!< bit 31 */ + +/****************** Bit definition for NVIC_PRI0 register *******************/ +#define NVIC_IPR0_PRI_0 ((uint32_t)0x000000FF) /*!< Priority of interrupt 0 */ +#define NVIC_IPR0_PRI_1 ((uint32_t)0x0000FF00) /*!< Priority of interrupt 1 */ +#define NVIC_IPR0_PRI_2 ((uint32_t)0x00FF0000) /*!< Priority of interrupt 2 */ +#define NVIC_IPR0_PRI_3 ((uint32_t)0xFF000000) /*!< Priority of interrupt 3 */ + +/****************** Bit definition for NVIC_PRI1 register *******************/ +#define NVIC_IPR1_PRI_4 ((uint32_t)0x000000FF) /*!< Priority of interrupt 4 */ +#define NVIC_IPR1_PRI_5 ((uint32_t)0x0000FF00) /*!< Priority of interrupt 5 */ +#define NVIC_IPR1_PRI_6 ((uint32_t)0x00FF0000) /*!< Priority of interrupt 6 */ +#define NVIC_IPR1_PRI_7 ((uint32_t)0xFF000000) /*!< Priority of interrupt 7 */ + +/****************** Bit definition for NVIC_PRI2 register *******************/ +#define NVIC_IPR2_PRI_8 ((uint32_t)0x000000FF) /*!< Priority of interrupt 8 */ +#define NVIC_IPR2_PRI_9 ((uint32_t)0x0000FF00) /*!< Priority of interrupt 9 */ +#define NVIC_IPR2_PRI_10 ((uint32_t)0x00FF0000) /*!< Priority of interrupt 10 */ +#define NVIC_IPR2_PRI_11 ((uint32_t)0xFF000000) /*!< Priority of interrupt 11 */ + +/****************** Bit definition for NVIC_PRI3 register *******************/ +#define NVIC_IPR3_PRI_12 ((uint32_t)0x000000FF) /*!< Priority of interrupt 12 */ +#define NVIC_IPR3_PRI_13 ((uint32_t)0x0000FF00) /*!< Priority of interrupt 13 */ +#define NVIC_IPR3_PRI_14 ((uint32_t)0x00FF0000) /*!< Priority of interrupt 14 */ +#define NVIC_IPR3_PRI_15 ((uint32_t)0xFF000000) /*!< Priority of interrupt 15 */ + +/****************** Bit definition for NVIC_PRI4 register *******************/ +#define NVIC_IPR4_PRI_16 ((uint32_t)0x000000FF) /*!< Priority of interrupt 16 */ +#define NVIC_IPR4_PRI_17 ((uint32_t)0x0000FF00) /*!< Priority of interrupt 17 */ +#define NVIC_IPR4_PRI_18 ((uint32_t)0x00FF0000) /*!< Priority of interrupt 18 */ +#define NVIC_IPR4_PRI_19 ((uint32_t)0xFF000000) /*!< Priority of interrupt 19 */ + +/****************** Bit definition for NVIC_PRI5 register *******************/ +#define NVIC_IPR5_PRI_20 ((uint32_t)0x000000FF) /*!< Priority of interrupt 20 */ +#define NVIC_IPR5_PRI_21 ((uint32_t)0x0000FF00) /*!< Priority of interrupt 21 */ +#define NVIC_IPR5_PRI_22 ((uint32_t)0x00FF0000) /*!< Priority of interrupt 22 */ +#define NVIC_IPR5_PRI_23 ((uint32_t)0xFF000000) /*!< Priority of interrupt 23 */ + +/****************** Bit definition for NVIC_PRI6 register *******************/ +#define NVIC_IPR6_PRI_24 ((uint32_t)0x000000FF) /*!< Priority of interrupt 24 */ +#define NVIC_IPR6_PRI_25 ((uint32_t)0x0000FF00) /*!< Priority of interrupt 25 */ +#define NVIC_IPR6_PRI_26 ((uint32_t)0x00FF0000) /*!< Priority of interrupt 26 */ +#define NVIC_IPR6_PRI_27 ((uint32_t)0xFF000000) /*!< Priority of interrupt 27 */ + +/****************** Bit definition for NVIC_PRI7 register *******************/ +#define NVIC_IPR7_PRI_28 ((uint32_t)0x000000FF) /*!< Priority of interrupt 28 */ +#define NVIC_IPR7_PRI_29 ((uint32_t)0x0000FF00) /*!< Priority of interrupt 29 */ +#define NVIC_IPR7_PRI_30 ((uint32_t)0x00FF0000) /*!< Priority of interrupt 30 */ +#define NVIC_IPR7_PRI_31 ((uint32_t)0xFF000000) /*!< Priority of interrupt 31 */ + +/****************** Bit definition for SCB_CPUID register *******************/ +#define SCB_CPUID_REVISION ((uint32_t)0x0000000F) /*!< Implementation defined revision number */ +#define SCB_CPUID_PARTNO ((uint32_t)0x0000FFF0) /*!< Number of processor within family */ +#define SCB_CPUID_Constant ((uint32_t)0x000F0000) /*!< Reads as 0x0F */ +#define SCB_CPUID_VARIANT ((uint32_t)0x00F00000) /*!< Implementation defined variant number */ +#define SCB_CPUID_IMPLEMENTER ((uint32_t)0xFF000000) /*!< Implementer code. ARM is 0x41 */ + +/******************* Bit definition for SCB_ICSR register *******************/ +#define SCB_ICSR_VECTACTIVE ((uint32_t)0x000001FF) /*!< Active ISR number field */ +#define SCB_ICSR_RETTOBASE ((uint32_t)0x00000800) /*!< All active exceptions minus the IPSR_current_exception yields the empty set */ +#define SCB_ICSR_VECTPENDING ((uint32_t)0x003FF000) /*!< Pending ISR number field */ +#define SCB_ICSR_ISRPENDING ((uint32_t)0x00400000) /*!< Interrupt pending flag */ +#define SCB_ICSR_ISRPREEMPT ((uint32_t)0x00800000) /*!< It indicates that a pending interrupt becomes active in the next running cycle */ +#define SCB_ICSR_PENDSTCLR ((uint32_t)0x02000000) /*!< Clear pending SysTick bit */ +#define SCB_ICSR_PENDSTSET ((uint32_t)0x04000000) /*!< Set pending SysTick bit */ +#define SCB_ICSR_PENDSVCLR ((uint32_t)0x08000000) /*!< Clear pending pendSV bit */ +#define SCB_ICSR_PENDSVSET ((uint32_t)0x10000000) /*!< Set pending pendSV bit */ +#define SCB_ICSR_NMIPENDSET ((uint32_t)0x80000000) /*!< Set pending NMI bit */ + +/******************* Bit definition for SCB_VTOR register *******************/ +#define SCB_VTOR_TBLOFF ((uint32_t)0x1FFFFF80) /*!< Vector table base offset field */ +#define SCB_VTOR_TBLBASE ((uint32_t)0x20000000) /*!< Table base in code(0) or RAM(1) */ + +/*!<***************** Bit definition for SCB_AIRCR register *******************/ +#define SCB_AIRCR_VECTRESET ((uint32_t)0x00000001) /*!< System Reset bit */ +#define SCB_AIRCR_VECTCLRACTIVE ((uint32_t)0x00000002) /*!< Clear active vector bit */ +#define SCB_AIRCR_SYSRESETREQ ((uint32_t)0x00000004) /*!< Requests chip control logic to generate a reset */ + +#define SCB_AIRCR_PRIGROUP ((uint32_t)0x00000700) /*!< PRIGROUP[2:0] bits (Priority group) */ +#define SCB_AIRCR_PRIGROUP_0 ((uint32_t)0x00000100) /*!< Bit 0 */ +#define SCB_AIRCR_PRIGROUP_1 ((uint32_t)0x00000200) /*!< Bit 1 */ +#define SCB_AIRCR_PRIGROUP_2 ((uint32_t)0x00000400) /*!< Bit 2 */ + +/* prority group configuration */ +#define SCB_AIRCR_PRIGROUP0 ((uint32_t)0x00000000) /*!< Priority group=0 (7 bits of pre-emption priority, 1 bit of subpriority) */ +#define SCB_AIRCR_PRIGROUP1 ((uint32_t)0x00000100) /*!< Priority group=1 (6 bits of pre-emption priority, 2 bits of subpriority) */ +#define SCB_AIRCR_PRIGROUP2 ((uint32_t)0x00000200) /*!< Priority group=2 (5 bits of pre-emption priority, 3 bits of subpriority) */ +#define SCB_AIRCR_PRIGROUP3 ((uint32_t)0x00000300) /*!< Priority group=3 (4 bits of pre-emption priority, 4 bits of subpriority) */ +#define SCB_AIRCR_PRIGROUP4 ((uint32_t)0x00000400) /*!< Priority group=4 (3 bits of pre-emption priority, 5 bits of subpriority) */ +#define SCB_AIRCR_PRIGROUP5 ((uint32_t)0x00000500) /*!< Priority group=5 (2 bits of pre-emption priority, 6 bits of subpriority) */ +#define SCB_AIRCR_PRIGROUP6 ((uint32_t)0x00000600) /*!< Priority group=6 (1 bit of pre-emption priority, 7 bits of subpriority) */ +#define SCB_AIRCR_PRIGROUP7 ((uint32_t)0x00000700) /*!< Priority group=7 (no pre-emption priority, 8 bits of subpriority) */ + +#define SCB_AIRCR_ENDIANESS ((uint32_t)0x00008000) /*!< Data endianness bit */ +#define SCB_AIRCR_VECTKEY ((uint32_t)0xFFFF0000) /*!< Register key (VECTKEY) - Reads as 0xFA05 (VECTKEYSTAT) */ + +/******************* Bit definition for SCB_SCR register ********************/ +#define SCB_SCR_SLEEPONEXIT ((uint8_t)0x02) /*!< Sleep on exit bit */ +#define SCB_SCR_SLEEPDEEP ((uint8_t)0x04) /*!< Sleep deep bit */ +#define SCB_SCR_SEVONPEND ((uint8_t)0x10) /*!< Wake up from WFE */ + +/******************** Bit definition for SCB_CCR register *******************/ +#define SCB_CCR_NONBASETHRDENA ((uint16_t)0x0001) /*!< Thread mode can be entered from any level in Handler mode by controlled return value */ +#define SCB_CCR_USERSETMPEND ((uint16_t)0x0002) /*!< Enables user code to write the Software Trigger Interrupt register to trigger (pend) a Main exception */ +#define SCB_CCR_UNALIGN_TRP ((uint16_t)0x0008) /*!< Trap for unaligned access */ +#define SCB_CCR_DIV_0_TRP ((uint16_t)0x0010) /*!< Trap on Divide by 0 */ +#define SCB_CCR_BFHFNMIGN ((uint16_t)0x0100) /*!< Handlers running at priority -1 and -2 */ +#define SCB_CCR_STKALIGN ((uint16_t)0x0200) /*!< On exception entry, the SP used prior to the exception is adjusted to be 8-byte aligned */ + +/******************* Bit definition for SCB_SHPR register ********************/ +#define SCB_SHPR_PRI_N ((uint32_t)0x000000FF) /*!< Priority of system handler 4,8, and 12. Mem Manage, reserved and Debug Monitor */ +#define SCB_SHPR_PRI_N1 ((uint32_t)0x0000FF00) /*!< Priority of system handler 5,9, and 13. Bus Fault, reserved and reserved */ +#define SCB_SHPR_PRI_N2 ((uint32_t)0x00FF0000) /*!< Priority of system handler 6,10, and 14. Usage Fault, reserved and PendSV */ +#define SCB_SHPR_PRI_N3 ((uint32_t)0xFF000000) /*!< Priority of system handler 7,11, and 15. Reserved, SVCall and SysTick */ + +/****************** Bit definition for SCB_SHCSR register *******************/ +#define SCB_SHCSR_MEMFAULTACT ((uint32_t)0x00000001) /*!< MemManage is active */ +#define SCB_SHCSR_BUSFAULTACT ((uint32_t)0x00000002) /*!< BusFault is active */ +#define SCB_SHCSR_USGFAULTACT ((uint32_t)0x00000008) /*!< UsageFault is active */ +#define SCB_SHCSR_SVCALLACT ((uint32_t)0x00000080) /*!< SVCall is active */ +#define SCB_SHCSR_MONITORACT ((uint32_t)0x00000100) /*!< Monitor is active */ +#define SCB_SHCSR_PENDSVACT ((uint32_t)0x00000400) /*!< PendSV is active */ +#define SCB_SHCSR_SYSTICKACT ((uint32_t)0x00000800) /*!< SysTick is active */ +#define SCB_SHCSR_USGFAULTPENDED ((uint32_t)0x00001000) /*!< Usage Fault is pended */ +#define SCB_SHCSR_MEMFAULTPENDED ((uint32_t)0x00002000) /*!< MemManage is pended */ +#define SCB_SHCSR_BUSFAULTPENDED ((uint32_t)0x00004000) /*!< Bus Fault is pended */ +#define SCB_SHCSR_SVCALLPENDED ((uint32_t)0x00008000) /*!< SVCall is pended */ +#define SCB_SHCSR_MEMFAULTENA ((uint32_t)0x00010000) /*!< MemManage enable */ +#define SCB_SHCSR_BUSFAULTENA ((uint32_t)0x00020000) /*!< Bus Fault enable */ +#define SCB_SHCSR_USGFAULTENA ((uint32_t)0x00040000) /*!< UsageFault enable */ + +/******************* Bit definition for SCB_CFSR register *******************/ +/*!< MFSR */ +#define SCB_CFSR_IACCVIOL ((uint32_t)0x00000001) /*!< Instruction access violation */ +#define SCB_CFSR_DACCVIOL ((uint32_t)0x00000002) /*!< Data access violation */ +#define SCB_CFSR_MUNSTKERR ((uint32_t)0x00000008) /*!< Unstacking error */ +#define SCB_CFSR_MSTKERR ((uint32_t)0x00000010) /*!< Stacking error */ +#define SCB_CFSR_MMARVALID ((uint32_t)0x00000080) /*!< Memory Manage Address Register address valid flag */ +/*!< BFSR */ +#define SCB_CFSR_IBUSERR ((uint32_t)0x00000100) /*!< Instruction bus error flag */ +#define SCB_CFSR_PRECISERR ((uint32_t)0x00000200) /*!< Precise data bus error */ +#define SCB_CFSR_IMPRECISERR ((uint32_t)0x00000400) /*!< Imprecise data bus error */ +#define SCB_CFSR_UNSTKERR ((uint32_t)0x00000800) /*!< Unstacking error */ +#define SCB_CFSR_STKERR ((uint32_t)0x00001000) /*!< Stacking error */ +#define SCB_CFSR_BFARVALID ((uint32_t)0x00008000) /*!< Bus Fault Address Register address valid flag */ +/*!< UFSR */ +#define SCB_CFSR_UNDEFINSTR ((uint32_t)0x00010000) /*!< The processor attempt to execute an undefined instruction */ +#define SCB_CFSR_INVSTATE ((uint32_t)0x00020000) /*!< Invalid combination of EPSR and instruction */ +#define SCB_CFSR_INVPC ((uint32_t)0x00040000) /*!< Attempt to load EXC_RETURN into pc illegally */ +#define SCB_CFSR_NOCP ((uint32_t)0x00080000) /*!< Attempt to use a coprocessor instruction */ +#define SCB_CFSR_UNALIGNED ((uint32_t)0x01000000) /*!< Fault occurs when there is an attempt to make an unaligned memory access */ +#define SCB_CFSR_DIVBYZERO ((uint32_t)0x02000000) /*!< Fault occurs when SDIV or DIV instruction is used with a divisor of 0 */ + +/******************* Bit definition for SCB_HFSR register *******************/ +#define SCB_HFSR_VECTTBL ((uint32_t)0x00000002) /*!< Fault occurs because of vector table read on exception processing */ +#define SCB_HFSR_FORCED ((uint32_t)0x40000000) /*!< Hard Fault activated when a configurable Fault was received and cannot activate */ +#define SCB_HFSR_DEBUGEVT ((uint32_t)0x80000000) /*!< Fault related to debug */ + +/******************* Bit definition for SCB_DFSR register *******************/ +#define SCB_DFSR_HALTED ((uint8_t)0x01) /*!< Halt request flag */ +#define SCB_DFSR_BKPT ((uint8_t)0x02) /*!< BKPT flag */ +#define SCB_DFSR_DWTTRAP ((uint8_t)0x04) /*!< Data Watchpoint and Trace (DWT) flag */ +#define SCB_DFSR_VCATCH ((uint8_t)0x08) /*!< Vector catch flag */ +#define SCB_DFSR_EXTERNAL ((uint8_t)0x10) /*!< External debug request flag */ + +/******************* Bit definition for SCB_MMFAR register ******************/ +#define SCB_MMFAR_ADDRESS ((uint32_t)0xFFFFFFFF) /*!< Mem Manage fault address field */ + +/******************* Bit definition for SCB_BFAR register *******************/ +#define SCB_BFAR_ADDRESS ((uint32_t)0xFFFFFFFF) /*!< Bus fault address field */ + +/******************* Bit definition for SCB_afsr register *******************/ +#define SCB_AFSR_IMPDEF ((uint32_t)0xFFFFFFFF) /*!< Implementation defined */ + +/******************************************************************************/ +/* */ +/* External Interrupt/Event Controller */ +/* */ +/******************************************************************************/ + +/******************* Bit definition for EXTI_IMR register *******************/ +#define EXTI_IMR_MR0 ((uint32_t)0x00000001) /*!< Interrupt Mask on line 0 */ +#define EXTI_IMR_MR1 ((uint32_t)0x00000002) /*!< Interrupt Mask on line 1 */ +#define EXTI_IMR_MR2 ((uint32_t)0x00000004) /*!< Interrupt Mask on line 2 */ +#define EXTI_IMR_MR3 ((uint32_t)0x00000008) /*!< Interrupt Mask on line 3 */ +#define EXTI_IMR_MR4 ((uint32_t)0x00000010) /*!< Interrupt Mask on line 4 */ +#define EXTI_IMR_MR5 ((uint32_t)0x00000020) /*!< Interrupt Mask on line 5 */ +#define EXTI_IMR_MR6 ((uint32_t)0x00000040) /*!< Interrupt Mask on line 6 */ +#define EXTI_IMR_MR7 ((uint32_t)0x00000080) /*!< Interrupt Mask on line 7 */ +#define EXTI_IMR_MR8 ((uint32_t)0x00000100) /*!< Interrupt Mask on line 8 */ +#define EXTI_IMR_MR9 ((uint32_t)0x00000200) /*!< Interrupt Mask on line 9 */ +#define EXTI_IMR_MR10 ((uint32_t)0x00000400) /*!< Interrupt Mask on line 10 */ +#define EXTI_IMR_MR11 ((uint32_t)0x00000800) /*!< Interrupt Mask on line 11 */ +#define EXTI_IMR_MR12 ((uint32_t)0x00001000) /*!< Interrupt Mask on line 12 */ +#define EXTI_IMR_MR13 ((uint32_t)0x00002000) /*!< Interrupt Mask on line 13 */ +#define EXTI_IMR_MR14 ((uint32_t)0x00004000) /*!< Interrupt Mask on line 14 */ +#define EXTI_IMR_MR15 ((uint32_t)0x00008000) /*!< Interrupt Mask on line 15 */ +#define EXTI_IMR_MR16 ((uint32_t)0x00010000) /*!< Interrupt Mask on line 16 */ +#define EXTI_IMR_MR17 ((uint32_t)0x00020000) /*!< Interrupt Mask on line 17 */ +#define EXTI_IMR_MR18 ((uint32_t)0x00040000) /*!< Interrupt Mask on line 18 */ +#define EXTI_IMR_MR19 ((uint32_t)0x00080000) /*!< Interrupt Mask on line 19 */ + +/******************* Bit definition for EXTI_EMR register *******************/ +#define EXTI_EMR_MR0 ((uint32_t)0x00000001) /*!< Event Mask on line 0 */ +#define EXTI_EMR_MR1 ((uint32_t)0x00000002) /*!< Event Mask on line 1 */ +#define EXTI_EMR_MR2 ((uint32_t)0x00000004) /*!< Event Mask on line 2 */ +#define EXTI_EMR_MR3 ((uint32_t)0x00000008) /*!< Event Mask on line 3 */ +#define EXTI_EMR_MR4 ((uint32_t)0x00000010) /*!< Event Mask on line 4 */ +#define EXTI_EMR_MR5 ((uint32_t)0x00000020) /*!< Event Mask on line 5 */ +#define EXTI_EMR_MR6 ((uint32_t)0x00000040) /*!< Event Mask on line 6 */ +#define EXTI_EMR_MR7 ((uint32_t)0x00000080) /*!< Event Mask on line 7 */ +#define EXTI_EMR_MR8 ((uint32_t)0x00000100) /*!< Event Mask on line 8 */ +#define EXTI_EMR_MR9 ((uint32_t)0x00000200) /*!< Event Mask on line 9 */ +#define EXTI_EMR_MR10 ((uint32_t)0x00000400) /*!< Event Mask on line 10 */ +#define EXTI_EMR_MR11 ((uint32_t)0x00000800) /*!< Event Mask on line 11 */ +#define EXTI_EMR_MR12 ((uint32_t)0x00001000) /*!< Event Mask on line 12 */ +#define EXTI_EMR_MR13 ((uint32_t)0x00002000) /*!< Event Mask on line 13 */ +#define EXTI_EMR_MR14 ((uint32_t)0x00004000) /*!< Event Mask on line 14 */ +#define EXTI_EMR_MR15 ((uint32_t)0x00008000) /*!< Event Mask on line 15 */ +#define EXTI_EMR_MR16 ((uint32_t)0x00010000) /*!< Event Mask on line 16 */ +#define EXTI_EMR_MR17 ((uint32_t)0x00020000) /*!< Event Mask on line 17 */ +#define EXTI_EMR_MR18 ((uint32_t)0x00040000) /*!< Event Mask on line 18 */ +#define EXTI_EMR_MR19 ((uint32_t)0x00080000) /*!< Event Mask on line 19 */ + +/****************** Bit definition for EXTI_RTSR register *******************/ +#define EXTI_RTSR_TR0 ((uint32_t)0x00000001) /*!< Rising trigger event configuration bit of line 0 */ +#define EXTI_RTSR_TR1 ((uint32_t)0x00000002) /*!< Rising trigger event configuration bit of line 1 */ +#define EXTI_RTSR_TR2 ((uint32_t)0x00000004) /*!< Rising trigger event configuration bit of line 2 */ +#define EXTI_RTSR_TR3 ((uint32_t)0x00000008) /*!< Rising trigger event configuration bit of line 3 */ +#define EXTI_RTSR_TR4 ((uint32_t)0x00000010) /*!< Rising trigger event configuration bit of line 4 */ +#define EXTI_RTSR_TR5 ((uint32_t)0x00000020) /*!< Rising trigger event configuration bit of line 5 */ +#define EXTI_RTSR_TR6 ((uint32_t)0x00000040) /*!< Rising trigger event configuration bit of line 6 */ +#define EXTI_RTSR_TR7 ((uint32_t)0x00000080) /*!< Rising trigger event configuration bit of line 7 */ +#define EXTI_RTSR_TR8 ((uint32_t)0x00000100) /*!< Rising trigger event configuration bit of line 8 */ +#define EXTI_RTSR_TR9 ((uint32_t)0x00000200) /*!< Rising trigger event configuration bit of line 9 */ +#define EXTI_RTSR_TR10 ((uint32_t)0x00000400) /*!< Rising trigger event configuration bit of line 10 */ +#define EXTI_RTSR_TR11 ((uint32_t)0x00000800) /*!< Rising trigger event configuration bit of line 11 */ +#define EXTI_RTSR_TR12 ((uint32_t)0x00001000) /*!< Rising trigger event configuration bit of line 12 */ +#define EXTI_RTSR_TR13 ((uint32_t)0x00002000) /*!< Rising trigger event configuration bit of line 13 */ +#define EXTI_RTSR_TR14 ((uint32_t)0x00004000) /*!< Rising trigger event configuration bit of line 14 */ +#define EXTI_RTSR_TR15 ((uint32_t)0x00008000) /*!< Rising trigger event configuration bit of line 15 */ +#define EXTI_RTSR_TR16 ((uint32_t)0x00010000) /*!< Rising trigger event configuration bit of line 16 */ +#define EXTI_RTSR_TR17 ((uint32_t)0x00020000) /*!< Rising trigger event configuration bit of line 17 */ +#define EXTI_RTSR_TR18 ((uint32_t)0x00040000) /*!< Rising trigger event configuration bit of line 18 */ +#define EXTI_RTSR_TR19 ((uint32_t)0x00080000) /*!< Rising trigger event configuration bit of line 19 */ + +/****************** Bit definition for EXTI_FTSR register *******************/ +#define EXTI_FTSR_TR0 ((uint32_t)0x00000001) /*!< Falling trigger event configuration bit of line 0 */ +#define EXTI_FTSR_TR1 ((uint32_t)0x00000002) /*!< Falling trigger event configuration bit of line 1 */ +#define EXTI_FTSR_TR2 ((uint32_t)0x00000004) /*!< Falling trigger event configuration bit of line 2 */ +#define EXTI_FTSR_TR3 ((uint32_t)0x00000008) /*!< Falling trigger event configuration bit of line 3 */ +#define EXTI_FTSR_TR4 ((uint32_t)0x00000010) /*!< Falling trigger event configuration bit of line 4 */ +#define EXTI_FTSR_TR5 ((uint32_t)0x00000020) /*!< Falling trigger event configuration bit of line 5 */ +#define EXTI_FTSR_TR6 ((uint32_t)0x00000040) /*!< Falling trigger event configuration bit of line 6 */ +#define EXTI_FTSR_TR7 ((uint32_t)0x00000080) /*!< Falling trigger event configuration bit of line 7 */ +#define EXTI_FTSR_TR8 ((uint32_t)0x00000100) /*!< Falling trigger event configuration bit of line 8 */ +#define EXTI_FTSR_TR9 ((uint32_t)0x00000200) /*!< Falling trigger event configuration bit of line 9 */ +#define EXTI_FTSR_TR10 ((uint32_t)0x00000400) /*!< Falling trigger event configuration bit of line 10 */ +#define EXTI_FTSR_TR11 ((uint32_t)0x00000800) /*!< Falling trigger event configuration bit of line 11 */ +#define EXTI_FTSR_TR12 ((uint32_t)0x00001000) /*!< Falling trigger event configuration bit of line 12 */ +#define EXTI_FTSR_TR13 ((uint32_t)0x00002000) /*!< Falling trigger event configuration bit of line 13 */ +#define EXTI_FTSR_TR14 ((uint32_t)0x00004000) /*!< Falling trigger event configuration bit of line 14 */ +#define EXTI_FTSR_TR15 ((uint32_t)0x00008000) /*!< Falling trigger event configuration bit of line 15 */ +#define EXTI_FTSR_TR16 ((uint32_t)0x00010000) /*!< Falling trigger event configuration bit of line 16 */ +#define EXTI_FTSR_TR17 ((uint32_t)0x00020000) /*!< Falling trigger event configuration bit of line 17 */ +#define EXTI_FTSR_TR18 ((uint32_t)0x00040000) /*!< Falling trigger event configuration bit of line 18 */ +#define EXTI_FTSR_TR19 ((uint32_t)0x00080000) /*!< Falling trigger event configuration bit of line 19 */ + +/****************** Bit definition for EXTI_SWIER register ******************/ +#define EXTI_SWIER_SWIER0 ((uint32_t)0x00000001) /*!< Software Interrupt on line 0 */ +#define EXTI_SWIER_SWIER1 ((uint32_t)0x00000002) /*!< Software Interrupt on line 1 */ +#define EXTI_SWIER_SWIER2 ((uint32_t)0x00000004) /*!< Software Interrupt on line 2 */ +#define EXTI_SWIER_SWIER3 ((uint32_t)0x00000008) /*!< Software Interrupt on line 3 */ +#define EXTI_SWIER_SWIER4 ((uint32_t)0x00000010) /*!< Software Interrupt on line 4 */ +#define EXTI_SWIER_SWIER5 ((uint32_t)0x00000020) /*!< Software Interrupt on line 5 */ +#define EXTI_SWIER_SWIER6 ((uint32_t)0x00000040) /*!< Software Interrupt on line 6 */ +#define EXTI_SWIER_SWIER7 ((uint32_t)0x00000080) /*!< Software Interrupt on line 7 */ +#define EXTI_SWIER_SWIER8 ((uint32_t)0x00000100) /*!< Software Interrupt on line 8 */ +#define EXTI_SWIER_SWIER9 ((uint32_t)0x00000200) /*!< Software Interrupt on line 9 */ +#define EXTI_SWIER_SWIER10 ((uint32_t)0x00000400) /*!< Software Interrupt on line 10 */ +#define EXTI_SWIER_SWIER11 ((uint32_t)0x00000800) /*!< Software Interrupt on line 11 */ +#define EXTI_SWIER_SWIER12 ((uint32_t)0x00001000) /*!< Software Interrupt on line 12 */ +#define EXTI_SWIER_SWIER13 ((uint32_t)0x00002000) /*!< Software Interrupt on line 13 */ +#define EXTI_SWIER_SWIER14 ((uint32_t)0x00004000) /*!< Software Interrupt on line 14 */ +#define EXTI_SWIER_SWIER15 ((uint32_t)0x00008000) /*!< Software Interrupt on line 15 */ +#define EXTI_SWIER_SWIER16 ((uint32_t)0x00010000) /*!< Software Interrupt on line 16 */ +#define EXTI_SWIER_SWIER17 ((uint32_t)0x00020000) /*!< Software Interrupt on line 17 */ +#define EXTI_SWIER_SWIER18 ((uint32_t)0x00040000) /*!< Software Interrupt on line 18 */ +#define EXTI_SWIER_SWIER19 ((uint32_t)0x00080000) /*!< Software Interrupt on line 19 */ + +/******************* Bit definition for EXTI_PR register ********************/ +#define EXTI_PR_PR0 ((uint32_t)0x00000001) /*!< Pending bit for line 0 */ +#define EXTI_PR_PR1 ((uint32_t)0x00000002) /*!< Pending bit for line 1 */ +#define EXTI_PR_PR2 ((uint32_t)0x00000004) /*!< Pending bit for line 2 */ +#define EXTI_PR_PR3 ((uint32_t)0x00000008) /*!< Pending bit for line 3 */ +#define EXTI_PR_PR4 ((uint32_t)0x00000010) /*!< Pending bit for line 4 */ +#define EXTI_PR_PR5 ((uint32_t)0x00000020) /*!< Pending bit for line 5 */ +#define EXTI_PR_PR6 ((uint32_t)0x00000040) /*!< Pending bit for line 6 */ +#define EXTI_PR_PR7 ((uint32_t)0x00000080) /*!< Pending bit for line 7 */ +#define EXTI_PR_PR8 ((uint32_t)0x00000100) /*!< Pending bit for line 8 */ +#define EXTI_PR_PR9 ((uint32_t)0x00000200) /*!< Pending bit for line 9 */ +#define EXTI_PR_PR10 ((uint32_t)0x00000400) /*!< Pending bit for line 10 */ +#define EXTI_PR_PR11 ((uint32_t)0x00000800) /*!< Pending bit for line 11 */ +#define EXTI_PR_PR12 ((uint32_t)0x00001000) /*!< Pending bit for line 12 */ +#define EXTI_PR_PR13 ((uint32_t)0x00002000) /*!< Pending bit for line 13 */ +#define EXTI_PR_PR14 ((uint32_t)0x00004000) /*!< Pending bit for line 14 */ +#define EXTI_PR_PR15 ((uint32_t)0x00008000) /*!< Pending bit for line 15 */ +#define EXTI_PR_PR16 ((uint32_t)0x00010000) /*!< Pending bit for line 16 */ +#define EXTI_PR_PR17 ((uint32_t)0x00020000) /*!< Pending bit for line 17 */ +#define EXTI_PR_PR18 ((uint32_t)0x00040000) /*!< Pending bit for line 18 */ +#define EXTI_PR_PR19 ((uint32_t)0x00080000) /*!< Pending bit for line 19 */ + +/******************************************************************************/ +/* */ +/* DMA Controller */ +/* */ +/******************************************************************************/ + +/******************* Bit definition for DMA_ISR register ********************/ +#define DMA_ISR_GIF1 ((uint32_t)0x00000001) /*!< Channel 1 Global interrupt flag */ +#define DMA_ISR_TCIF1 ((uint32_t)0x00000002) /*!< Channel 1 Transfer Complete flag */ +#define DMA_ISR_HTIF1 ((uint32_t)0x00000004) /*!< Channel 1 Half Transfer flag */ +#define DMA_ISR_TEIF1 ((uint32_t)0x00000008) /*!< Channel 1 Transfer Error flag */ +#define DMA_ISR_GIF2 ((uint32_t)0x00000010) /*!< Channel 2 Global interrupt flag */ +#define DMA_ISR_TCIF2 ((uint32_t)0x00000020) /*!< Channel 2 Transfer Complete flag */ +#define DMA_ISR_HTIF2 ((uint32_t)0x00000040) /*!< Channel 2 Half Transfer flag */ +#define DMA_ISR_TEIF2 ((uint32_t)0x00000080) /*!< Channel 2 Transfer Error flag */ +#define DMA_ISR_GIF3 ((uint32_t)0x00000100) /*!< Channel 3 Global interrupt flag */ +#define DMA_ISR_TCIF3 ((uint32_t)0x00000200) /*!< Channel 3 Transfer Complete flag */ +#define DMA_ISR_HTIF3 ((uint32_t)0x00000400) /*!< Channel 3 Half Transfer flag */ +#define DMA_ISR_TEIF3 ((uint32_t)0x00000800) /*!< Channel 3 Transfer Error flag */ +#define DMA_ISR_GIF4 ((uint32_t)0x00001000) /*!< Channel 4 Global interrupt flag */ +#define DMA_ISR_TCIF4 ((uint32_t)0x00002000) /*!< Channel 4 Transfer Complete flag */ +#define DMA_ISR_HTIF4 ((uint32_t)0x00004000) /*!< Channel 4 Half Transfer flag */ +#define DMA_ISR_TEIF4 ((uint32_t)0x00008000) /*!< Channel 4 Transfer Error flag */ +#define DMA_ISR_GIF5 ((uint32_t)0x00010000) /*!< Channel 5 Global interrupt flag */ +#define DMA_ISR_TCIF5 ((uint32_t)0x00020000) /*!< Channel 5 Transfer Complete flag */ +#define DMA_ISR_HTIF5 ((uint32_t)0x00040000) /*!< Channel 5 Half Transfer flag */ +#define DMA_ISR_TEIF5 ((uint32_t)0x00080000) /*!< Channel 5 Transfer Error flag */ +#define DMA_ISR_GIF6 ((uint32_t)0x00100000) /*!< Channel 6 Global interrupt flag */ +#define DMA_ISR_TCIF6 ((uint32_t)0x00200000) /*!< Channel 6 Transfer Complete flag */ +#define DMA_ISR_HTIF6 ((uint32_t)0x00400000) /*!< Channel 6 Half Transfer flag */ +#define DMA_ISR_TEIF6 ((uint32_t)0x00800000) /*!< Channel 6 Transfer Error flag */ +#define DMA_ISR_GIF7 ((uint32_t)0x01000000) /*!< Channel 7 Global interrupt flag */ +#define DMA_ISR_TCIF7 ((uint32_t)0x02000000) /*!< Channel 7 Transfer Complete flag */ +#define DMA_ISR_HTIF7 ((uint32_t)0x04000000) /*!< Channel 7 Half Transfer flag */ +#define DMA_ISR_TEIF7 ((uint32_t)0x08000000) /*!< Channel 7 Transfer Error flag */ + +/******************* Bit definition for DMA_IFCR register *******************/ +#define DMA_IFCR_CGIF1 ((uint32_t)0x00000001) /*!< Channel 1 Global interrupt clear */ +#define DMA_IFCR_CTCIF1 ((uint32_t)0x00000002) /*!< Channel 1 Transfer Complete clear */ +#define DMA_IFCR_CHTIF1 ((uint32_t)0x00000004) /*!< Channel 1 Half Transfer clear */ +#define DMA_IFCR_CTEIF1 ((uint32_t)0x00000008) /*!< Channel 1 Transfer Error clear */ +#define DMA_IFCR_CGIF2 ((uint32_t)0x00000010) /*!< Channel 2 Global interrupt clear */ +#define DMA_IFCR_CTCIF2 ((uint32_t)0x00000020) /*!< Channel 2 Transfer Complete clear */ +#define DMA_IFCR_CHTIF2 ((uint32_t)0x00000040) /*!< Channel 2 Half Transfer clear */ +#define DMA_IFCR_CTEIF2 ((uint32_t)0x00000080) /*!< Channel 2 Transfer Error clear */ +#define DMA_IFCR_CGIF3 ((uint32_t)0x00000100) /*!< Channel 3 Global interrupt clear */ +#define DMA_IFCR_CTCIF3 ((uint32_t)0x00000200) /*!< Channel 3 Transfer Complete clear */ +#define DMA_IFCR_CHTIF3 ((uint32_t)0x00000400) /*!< Channel 3 Half Transfer clear */ +#define DMA_IFCR_CTEIF3 ((uint32_t)0x00000800) /*!< Channel 3 Transfer Error clear */ +#define DMA_IFCR_CGIF4 ((uint32_t)0x00001000) /*!< Channel 4 Global interrupt clear */ +#define DMA_IFCR_CTCIF4 ((uint32_t)0x00002000) /*!< Channel 4 Transfer Complete clear */ +#define DMA_IFCR_CHTIF4 ((uint32_t)0x00004000) /*!< Channel 4 Half Transfer clear */ +#define DMA_IFCR_CTEIF4 ((uint32_t)0x00008000) /*!< Channel 4 Transfer Error clear */ +#define DMA_IFCR_CGIF5 ((uint32_t)0x00010000) /*!< Channel 5 Global interrupt clear */ +#define DMA_IFCR_CTCIF5 ((uint32_t)0x00020000) /*!< Channel 5 Transfer Complete clear */ +#define DMA_IFCR_CHTIF5 ((uint32_t)0x00040000) /*!< Channel 5 Half Transfer clear */ +#define DMA_IFCR_CTEIF5 ((uint32_t)0x00080000) /*!< Channel 5 Transfer Error clear */ +#define DMA_IFCR_CGIF6 ((uint32_t)0x00100000) /*!< Channel 6 Global interrupt clear */ +#define DMA_IFCR_CTCIF6 ((uint32_t)0x00200000) /*!< Channel 6 Transfer Complete clear */ +#define DMA_IFCR_CHTIF6 ((uint32_t)0x00400000) /*!< Channel 6 Half Transfer clear */ +#define DMA_IFCR_CTEIF6 ((uint32_t)0x00800000) /*!< Channel 6 Transfer Error clear */ +#define DMA_IFCR_CGIF7 ((uint32_t)0x01000000) /*!< Channel 7 Global interrupt clear */ +#define DMA_IFCR_CTCIF7 ((uint32_t)0x02000000) /*!< Channel 7 Transfer Complete clear */ +#define DMA_IFCR_CHTIF7 ((uint32_t)0x04000000) /*!< Channel 7 Half Transfer clear */ +#define DMA_IFCR_CTEIF7 ((uint32_t)0x08000000) /*!< Channel 7 Transfer Error clear */ + +/******************* Bit definition for DMA_CCR1 register *******************/ +#define DMA_CCR1_EN ((uint16_t)0x0001) /*!< Channel enable*/ +#define DMA_CCR1_TCIE ((uint16_t)0x0002) /*!< Transfer complete interrupt enable */ +#define DMA_CCR1_HTIE ((uint16_t)0x0004) /*!< Half Transfer interrupt enable */ +#define DMA_CCR1_TEIE ((uint16_t)0x0008) /*!< Transfer error interrupt enable */ +#define DMA_CCR1_DIR ((uint16_t)0x0010) /*!< Data transfer direction */ +#define DMA_CCR1_CIRC ((uint16_t)0x0020) /*!< Circular mode */ +#define DMA_CCR1_PINC ((uint16_t)0x0040) /*!< Peripheral increment mode */ +#define DMA_CCR1_MINC ((uint16_t)0x0080) /*!< Memory increment mode */ + +#define DMA_CCR1_PSIZE ((uint16_t)0x0300) /*!< PSIZE[1:0] bits (Peripheral size) */ +#define DMA_CCR1_PSIZE_0 ((uint16_t)0x0100) /*!< Bit 0 */ +#define DMA_CCR1_PSIZE_1 ((uint16_t)0x0200) /*!< Bit 1 */ + +#define DMA_CCR1_MSIZE ((uint16_t)0x0C00) /*!< MSIZE[1:0] bits (Memory size) */ +#define DMA_CCR1_MSIZE_0 ((uint16_t)0x0400) /*!< Bit 0 */ +#define DMA_CCR1_MSIZE_1 ((uint16_t)0x0800) /*!< Bit 1 */ + +#define DMA_CCR1_PL ((uint16_t)0x3000) /*!< PL[1:0] bits(Channel Priority level) */ +#define DMA_CCR1_PL_0 ((uint16_t)0x1000) /*!< Bit 0 */ +#define DMA_CCR1_PL_1 ((uint16_t)0x2000) /*!< Bit 1 */ + +#define DMA_CCR1_MEM2MEM ((uint16_t)0x4000) /*!< Memory to memory mode */ + +/******************* Bit definition for DMA_CCR2 register *******************/ +#define DMA_CCR2_EN ((uint16_t)0x0001) /*!< Channel enable */ +#define DMA_CCR2_TCIE ((uint16_t)0x0002) /*!< Transfer complete interrupt enable */ +#define DMA_CCR2_HTIE ((uint16_t)0x0004) /*!< Half Transfer interrupt enable */ +#define DMA_CCR2_TEIE ((uint16_t)0x0008) /*!< Transfer error interrupt enable */ +#define DMA_CCR2_DIR ((uint16_t)0x0010) /*!< Data transfer direction */ +#define DMA_CCR2_CIRC ((uint16_t)0x0020) /*!< Circular mode */ +#define DMA_CCR2_PINC ((uint16_t)0x0040) /*!< Peripheral increment mode */ +#define DMA_CCR2_MINC ((uint16_t)0x0080) /*!< Memory increment mode */ + +#define DMA_CCR2_PSIZE ((uint16_t)0x0300) /*!< PSIZE[1:0] bits (Peripheral size) */ +#define DMA_CCR2_PSIZE_0 ((uint16_t)0x0100) /*!< Bit 0 */ +#define DMA_CCR2_PSIZE_1 ((uint16_t)0x0200) /*!< Bit 1 */ + +#define DMA_CCR2_MSIZE ((uint16_t)0x0C00) /*!< MSIZE[1:0] bits (Memory size) */ +#define DMA_CCR2_MSIZE_0 ((uint16_t)0x0400) /*!< Bit 0 */ +#define DMA_CCR2_MSIZE_1 ((uint16_t)0x0800) /*!< Bit 1 */ + +#define DMA_CCR2_PL ((uint16_t)0x3000) /*!< PL[1:0] bits (Channel Priority level) */ +#define DMA_CCR2_PL_0 ((uint16_t)0x1000) /*!< Bit 0 */ +#define DMA_CCR2_PL_1 ((uint16_t)0x2000) /*!< Bit 1 */ + +#define DMA_CCR2_MEM2MEM ((uint16_t)0x4000) /*!< Memory to memory mode */ + +/******************* Bit definition for DMA_CCR3 register *******************/ +#define DMA_CCR3_EN ((uint16_t)0x0001) /*!< Channel enable */ +#define DMA_CCR3_TCIE ((uint16_t)0x0002) /*!< Transfer complete interrupt enable */ +#define DMA_CCR3_HTIE ((uint16_t)0x0004) /*!< Half Transfer interrupt enable */ +#define DMA_CCR3_TEIE ((uint16_t)0x0008) /*!< Transfer error interrupt enable */ +#define DMA_CCR3_DIR ((uint16_t)0x0010) /*!< Data transfer direction */ +#define DMA_CCR3_CIRC ((uint16_t)0x0020) /*!< Circular mode */ +#define DMA_CCR3_PINC ((uint16_t)0x0040) /*!< Peripheral increment mode */ +#define DMA_CCR3_MINC ((uint16_t)0x0080) /*!< Memory increment mode */ + +#define DMA_CCR3_PSIZE ((uint16_t)0x0300) /*!< PSIZE[1:0] bits (Peripheral size) */ +#define DMA_CCR3_PSIZE_0 ((uint16_t)0x0100) /*!< Bit 0 */ +#define DMA_CCR3_PSIZE_1 ((uint16_t)0x0200) /*!< Bit 1 */ + +#define DMA_CCR3_MSIZE ((uint16_t)0x0C00) /*!< MSIZE[1:0] bits (Memory size) */ +#define DMA_CCR3_MSIZE_0 ((uint16_t)0x0400) /*!< Bit 0 */ +#define DMA_CCR3_MSIZE_1 ((uint16_t)0x0800) /*!< Bit 1 */ + +#define DMA_CCR3_PL ((uint16_t)0x3000) /*!< PL[1:0] bits (Channel Priority level) */ +#define DMA_CCR3_PL_0 ((uint16_t)0x1000) /*!< Bit 0 */ +#define DMA_CCR3_PL_1 ((uint16_t)0x2000) /*!< Bit 1 */ + +#define DMA_CCR3_MEM2MEM ((uint16_t)0x4000) /*!< Memory to memory mode */ + +/*!<****************** Bit definition for DMA_CCR4 register *******************/ +#define DMA_CCR4_EN ((uint16_t)0x0001) /*!< Channel enable */ +#define DMA_CCR4_TCIE ((uint16_t)0x0002) /*!< Transfer complete interrupt enable */ +#define DMA_CCR4_HTIE ((uint16_t)0x0004) /*!< Half Transfer interrupt enable */ +#define DMA_CCR4_TEIE ((uint16_t)0x0008) /*!< Transfer error interrupt enable */ +#define DMA_CCR4_DIR ((uint16_t)0x0010) /*!< Data transfer direction */ +#define DMA_CCR4_CIRC ((uint16_t)0x0020) /*!< Circular mode */ +#define DMA_CCR4_PINC ((uint16_t)0x0040) /*!< Peripheral increment mode */ +#define DMA_CCR4_MINC ((uint16_t)0x0080) /*!< Memory increment mode */ + +#define DMA_CCR4_PSIZE ((uint16_t)0x0300) /*!< PSIZE[1:0] bits (Peripheral size) */ +#define DMA_CCR4_PSIZE_0 ((uint16_t)0x0100) /*!< Bit 0 */ +#define DMA_CCR4_PSIZE_1 ((uint16_t)0x0200) /*!< Bit 1 */ + +#define DMA_CCR4_MSIZE ((uint16_t)0x0C00) /*!< MSIZE[1:0] bits (Memory size) */ +#define DMA_CCR4_MSIZE_0 ((uint16_t)0x0400) /*!< Bit 0 */ +#define DMA_CCR4_MSIZE_1 ((uint16_t)0x0800) /*!< Bit 1 */ + +#define DMA_CCR4_PL ((uint16_t)0x3000) /*!< PL[1:0] bits (Channel Priority level) */ +#define DMA_CCR4_PL_0 ((uint16_t)0x1000) /*!< Bit 0 */ +#define DMA_CCR4_PL_1 ((uint16_t)0x2000) /*!< Bit 1 */ + +#define DMA_CCR4_MEM2MEM ((uint16_t)0x4000) /*!< Memory to memory mode */ + +/****************** Bit definition for DMA_CCR5 register *******************/ +#define DMA_CCR5_EN ((uint16_t)0x0001) /*!< Channel enable */ +#define DMA_CCR5_TCIE ((uint16_t)0x0002) /*!< Transfer complete interrupt enable */ +#define DMA_CCR5_HTIE ((uint16_t)0x0004) /*!< Half Transfer interrupt enable */ +#define DMA_CCR5_TEIE ((uint16_t)0x0008) /*!< Transfer error interrupt enable */ +#define DMA_CCR5_DIR ((uint16_t)0x0010) /*!< Data transfer direction */ +#define DMA_CCR5_CIRC ((uint16_t)0x0020) /*!< Circular mode */ +#define DMA_CCR5_PINC ((uint16_t)0x0040) /*!< Peripheral increment mode */ +#define DMA_CCR5_MINC ((uint16_t)0x0080) /*!< Memory increment mode */ + +#define DMA_CCR5_PSIZE ((uint16_t)0x0300) /*!< PSIZE[1:0] bits (Peripheral size) */ +#define DMA_CCR5_PSIZE_0 ((uint16_t)0x0100) /*!< Bit 0 */ +#define DMA_CCR5_PSIZE_1 ((uint16_t)0x0200) /*!< Bit 1 */ + +#define DMA_CCR5_MSIZE ((uint16_t)0x0C00) /*!< MSIZE[1:0] bits (Memory size) */ +#define DMA_CCR5_MSIZE_0 ((uint16_t)0x0400) /*!< Bit 0 */ +#define DMA_CCR5_MSIZE_1 ((uint16_t)0x0800) /*!< Bit 1 */ + +#define DMA_CCR5_PL ((uint16_t)0x3000) /*!< PL[1:0] bits (Channel Priority level) */ +#define DMA_CCR5_PL_0 ((uint16_t)0x1000) /*!< Bit 0 */ +#define DMA_CCR5_PL_1 ((uint16_t)0x2000) /*!< Bit 1 */ + +#define DMA_CCR5_MEM2MEM ((uint16_t)0x4000) /*!< Memory to memory mode enable */ + +/******************* Bit definition for DMA_CCR6 register *******************/ +#define DMA_CCR6_EN ((uint16_t)0x0001) /*!< Channel enable */ +#define DMA_CCR6_TCIE ((uint16_t)0x0002) /*!< Transfer complete interrupt enable */ +#define DMA_CCR6_HTIE ((uint16_t)0x0004) /*!< Half Transfer interrupt enable */ +#define DMA_CCR6_TEIE ((uint16_t)0x0008) /*!< Transfer error interrupt enable */ +#define DMA_CCR6_DIR ((uint16_t)0x0010) /*!< Data transfer direction */ +#define DMA_CCR6_CIRC ((uint16_t)0x0020) /*!< Circular mode */ +#define DMA_CCR6_PINC ((uint16_t)0x0040) /*!< Peripheral increment mode */ +#define DMA_CCR6_MINC ((uint16_t)0x0080) /*!< Memory increment mode */ + +#define DMA_CCR6_PSIZE ((uint16_t)0x0300) /*!< PSIZE[1:0] bits (Peripheral size) */ +#define DMA_CCR6_PSIZE_0 ((uint16_t)0x0100) /*!< Bit 0 */ +#define DMA_CCR6_PSIZE_1 ((uint16_t)0x0200) /*!< Bit 1 */ + +#define DMA_CCR6_MSIZE ((uint16_t)0x0C00) /*!< MSIZE[1:0] bits (Memory size) */ +#define DMA_CCR6_MSIZE_0 ((uint16_t)0x0400) /*!< Bit 0 */ +#define DMA_CCR6_MSIZE_1 ((uint16_t)0x0800) /*!< Bit 1 */ + +#define DMA_CCR6_PL ((uint16_t)0x3000) /*!< PL[1:0] bits (Channel Priority level) */ +#define DMA_CCR6_PL_0 ((uint16_t)0x1000) /*!< Bit 0 */ +#define DMA_CCR6_PL_1 ((uint16_t)0x2000) /*!< Bit 1 */ + +#define DMA_CCR6_MEM2MEM ((uint16_t)0x4000) /*!< Memory to memory mode */ + +/******************* Bit definition for DMA_CCR7 register *******************/ +#define DMA_CCR7_EN ((uint16_t)0x0001) /*!< Channel enable */ +#define DMA_CCR7_TCIE ((uint16_t)0x0002) /*!< Transfer complete interrupt enable */ +#define DMA_CCR7_HTIE ((uint16_t)0x0004) /*!< Half Transfer interrupt enable */ +#define DMA_CCR7_TEIE ((uint16_t)0x0008) /*!< Transfer error interrupt enable */ +#define DMA_CCR7_DIR ((uint16_t)0x0010) /*!< Data transfer direction */ +#define DMA_CCR7_CIRC ((uint16_t)0x0020) /*!< Circular mode */ +#define DMA_CCR7_PINC ((uint16_t)0x0040) /*!< Peripheral increment mode */ +#define DMA_CCR7_MINC ((uint16_t)0x0080) /*!< Memory increment mode */ + +#define DMA_CCR7_PSIZE , ((uint16_t)0x0300) /*!< PSIZE[1:0] bits (Peripheral size) */ +#define DMA_CCR7_PSIZE_0 ((uint16_t)0x0100) /*!< Bit 0 */ +#define DMA_CCR7_PSIZE_1 ((uint16_t)0x0200) /*!< Bit 1 */ + +#define DMA_CCR7_MSIZE ((uint16_t)0x0C00) /*!< MSIZE[1:0] bits (Memory size) */ +#define DMA_CCR7_MSIZE_0 ((uint16_t)0x0400) /*!< Bit 0 */ +#define DMA_CCR7_MSIZE_1 ((uint16_t)0x0800) /*!< Bit 1 */ + +#define DMA_CCR7_PL ((uint16_t)0x3000) /*!< PL[1:0] bits (Channel Priority level) */ +#define DMA_CCR7_PL_0 ((uint16_t)0x1000) /*!< Bit 0 */ +#define DMA_CCR7_PL_1 ((uint16_t)0x2000) /*!< Bit 1 */ + +#define DMA_CCR7_MEM2MEM ((uint16_t)0x4000) /*!< Memory to memory mode enable */ + +/****************** Bit definition for DMA_CNDTR1 register ******************/ +#define DMA_CNDTR1_NDT ((uint16_t)0xFFFF) /*!< Number of data to Transfer */ + +/****************** Bit definition for DMA_CNDTR2 register ******************/ +#define DMA_CNDTR2_NDT ((uint16_t)0xFFFF) /*!< Number of data to Transfer */ + +/****************** Bit definition for DMA_CNDTR3 register ******************/ +#define DMA_CNDTR3_NDT ((uint16_t)0xFFFF) /*!< Number of data to Transfer */ + +/****************** Bit definition for DMA_CNDTR4 register ******************/ +#define DMA_CNDTR4_NDT ((uint16_t)0xFFFF) /*!< Number of data to Transfer */ + +/****************** Bit definition for DMA_CNDTR5 register ******************/ +#define DMA_CNDTR5_NDT ((uint16_t)0xFFFF) /*!< Number of data to Transfer */ + +/****************** Bit definition for DMA_CNDTR6 register ******************/ +#define DMA_CNDTR6_NDT ((uint16_t)0xFFFF) /*!< Number of data to Transfer */ + +/****************** Bit definition for DMA_CNDTR7 register ******************/ +#define DMA_CNDTR7_NDT ((uint16_t)0xFFFF) /*!< Number of data to Transfer */ + +/****************** Bit definition for DMA_CPAR1 register *******************/ +#define DMA_CPAR1_PA ((uint32_t)0xFFFFFFFF) /*!< Peripheral Address */ + +/****************** Bit definition for DMA_CPAR2 register *******************/ +#define DMA_CPAR2_PA ((uint32_t)0xFFFFFFFF) /*!< Peripheral Address */ + +/****************** Bit definition for DMA_CPAR3 register *******************/ +#define DMA_CPAR3_PA ((uint32_t)0xFFFFFFFF) /*!< Peripheral Address */ + + +/****************** Bit definition for DMA_CPAR4 register *******************/ +#define DMA_CPAR4_PA ((uint32_t)0xFFFFFFFF) /*!< Peripheral Address */ + +/****************** Bit definition for DMA_CPAR5 register *******************/ +#define DMA_CPAR5_PA ((uint32_t)0xFFFFFFFF) /*!< Peripheral Address */ + +/****************** Bit definition for DMA_CPAR6 register *******************/ +#define DMA_CPAR6_PA ((uint32_t)0xFFFFFFFF) /*!< Peripheral Address */ + + +/****************** Bit definition for DMA_CPAR7 register *******************/ +#define DMA_CPAR7_PA ((uint32_t)0xFFFFFFFF) /*!< Peripheral Address */ + +/****************** Bit definition for DMA_CMAR1 register *******************/ +#define DMA_CMAR1_MA ((uint32_t)0xFFFFFFFF) /*!< Memory Address */ + +/****************** Bit definition for DMA_CMAR2 register *******************/ +#define DMA_CMAR2_MA ((uint32_t)0xFFFFFFFF) /*!< Memory Address */ + +/****************** Bit definition for DMA_CMAR3 register *******************/ +#define DMA_CMAR3_MA ((uint32_t)0xFFFFFFFF) /*!< Memory Address */ + + +/****************** Bit definition for DMA_CMAR4 register *******************/ +#define DMA_CMAR4_MA ((uint32_t)0xFFFFFFFF) /*!< Memory Address */ + +/****************** Bit definition for DMA_CMAR5 register *******************/ +#define DMA_CMAR5_MA ((uint32_t)0xFFFFFFFF) /*!< Memory Address */ + +/****************** Bit definition for DMA_CMAR6 register *******************/ +#define DMA_CMAR6_MA ((uint32_t)0xFFFFFFFF) /*!< Memory Address */ + +/****************** Bit definition for DMA_CMAR7 register *******************/ +#define DMA_CMAR7_MA ((uint32_t)0xFFFFFFFF) /*!< Memory Address */ + +/******************************************************************************/ +/* */ +/* Analog to Digital Converter */ +/* */ +/******************************************************************************/ + +/******************** Bit definition for ADC_SR register ********************/ +#define ADC_SR_AWD ((uint8_t)0x01) /*!< Analog watchdog flag */ +#define ADC_SR_EOC ((uint8_t)0x02) /*!< End of conversion */ +#define ADC_SR_JEOC ((uint8_t)0x04) /*!< Injected channel end of conversion */ +#define ADC_SR_JSTRT ((uint8_t)0x08) /*!< Injected channel Start flag */ +#define ADC_SR_STRT ((uint8_t)0x10) /*!< Regular channel Start flag */ + +/******************* Bit definition for ADC_CR1 register ********************/ +#define ADC_CR1_AWDCH ((uint32_t)0x0000001F) /*!< AWDCH[4:0] bits (Analog watchdog channel select bits) */ +#define ADC_CR1_AWDCH_0 ((uint32_t)0x00000001) /*!< Bit 0 */ +#define ADC_CR1_AWDCH_1 ((uint32_t)0x00000002) /*!< Bit 1 */ +#define ADC_CR1_AWDCH_2 ((uint32_t)0x00000004) /*!< Bit 2 */ +#define ADC_CR1_AWDCH_3 ((uint32_t)0x00000008) /*!< Bit 3 */ +#define ADC_CR1_AWDCH_4 ((uint32_t)0x00000010) /*!< Bit 4 */ + +#define ADC_CR1_EOCIE ((uint32_t)0x00000020) /*!< Interrupt enable for EOC */ +#define ADC_CR1_AWDIE ((uint32_t)0x00000040) /*!< Analog Watchdog interrupt enable */ +#define ADC_CR1_JEOCIE ((uint32_t)0x00000080) /*!< Interrupt enable for injected channels */ +#define ADC_CR1_SCAN ((uint32_t)0x00000100) /*!< Scan mode */ +#define ADC_CR1_AWDSGL ((uint32_t)0x00000200) /*!< Enable the watchdog on a single channel in scan mode */ +#define ADC_CR1_JAUTO ((uint32_t)0x00000400) /*!< Automatic injected group conversion */ +#define ADC_CR1_DISCEN ((uint32_t)0x00000800) /*!< Discontinuous mode on regular channels */ +#define ADC_CR1_JDISCEN ((uint32_t)0x00001000) /*!< Discontinuous mode on injected channels */ + +#define ADC_CR1_DISCNUM ((uint32_t)0x0000E000) /*!< DISCNUM[2:0] bits (Discontinuous mode channel count) */ +#define ADC_CR1_DISCNUM_0 ((uint32_t)0x00002000) /*!< Bit 0 */ +#define ADC_CR1_DISCNUM_1 ((uint32_t)0x00004000) /*!< Bit 1 */ +#define ADC_CR1_DISCNUM_2 ((uint32_t)0x00008000) /*!< Bit 2 */ + +#define ADC_CR1_DUALMOD ((uint32_t)0x000F0000) /*!< DUALMOD[3:0] bits (Dual mode selection) */ +#define ADC_CR1_DUALMOD_0 ((uint32_t)0x00010000) /*!< Bit 0 */ +#define ADC_CR1_DUALMOD_1 ((uint32_t)0x00020000) /*!< Bit 1 */ +#define ADC_CR1_DUALMOD_2 ((uint32_t)0x00040000) /*!< Bit 2 */ +#define ADC_CR1_DUALMOD_3 ((uint32_t)0x00080000) /*!< Bit 3 */ + +#define ADC_CR1_JAWDEN ((uint32_t)0x00400000) /*!< Analog watchdog enable on injected channels */ +#define ADC_CR1_AWDEN ((uint32_t)0x00800000) /*!< Analog watchdog enable on regular channels */ + + +/******************* Bit definition for ADC_CR2 register ********************/ +#define ADC_CR2_ADON ((uint32_t)0x00000001) /*!< A/D Converter ON / OFF */ +#define ADC_CR2_CONT ((uint32_t)0x00000002) /*!< Continuous Conversion */ +#define ADC_CR2_CAL ((uint32_t)0x00000004) /*!< A/D Calibration */ +#define ADC_CR2_RSTCAL ((uint32_t)0x00000008) /*!< Reset Calibration */ +#define ADC_CR2_DMA ((uint32_t)0x00000100) /*!< Direct Memory access mode */ +#define ADC_CR2_ALIGN ((uint32_t)0x00000800) /*!< Data Alignment */ + +#define ADC_CR2_JEXTSEL ((uint32_t)0x00007000) /*!< JEXTSEL[2:0] bits (External event select for injected group) */ +#define ADC_CR2_JEXTSEL_0 ((uint32_t)0x00001000) /*!< Bit 0 */ +#define ADC_CR2_JEXTSEL_1 ((uint32_t)0x00002000) /*!< Bit 1 */ +#define ADC_CR2_JEXTSEL_2 ((uint32_t)0x00004000) /*!< Bit 2 */ + +#define ADC_CR2_JEXTTRIG ((uint32_t)0x00008000) /*!< External Trigger Conversion mode for injected channels */ + +#define ADC_CR2_EXTSEL ((uint32_t)0x000E0000) /*!< EXTSEL[2:0] bits (External Event Select for regular group) */ +#define ADC_CR2_EXTSEL_0 ((uint32_t)0x00020000) /*!< Bit 0 */ +#define ADC_CR2_EXTSEL_1 ((uint32_t)0x00040000) /*!< Bit 1 */ +#define ADC_CR2_EXTSEL_2 ((uint32_t)0x00080000) /*!< Bit 2 */ + +#define ADC_CR2_EXTTRIG ((uint32_t)0x00100000) /*!< External Trigger Conversion mode for regular channels */ +#define ADC_CR2_JSWSTART ((uint32_t)0x00200000) /*!< Start Conversion of injected channels */ +#define ADC_CR2_SWSTART ((uint32_t)0x00400000) /*!< Start Conversion of regular channels */ +#define ADC_CR2_TSVREFE ((uint32_t)0x00800000) /*!< Temperature Sensor and VREFINT Enable */ + +/****************** Bit definition for ADC_SMPR1 register *******************/ +#define ADC_SMPR1_SMP10 ((uint32_t)0x00000007) /*!< SMP10[2:0] bits (Channel 10 Sample time selection) */ +#define ADC_SMPR1_SMP10_0 ((uint32_t)0x00000001) /*!< Bit 0 */ +#define ADC_SMPR1_SMP10_1 ((uint32_t)0x00000002) /*!< Bit 1 */ +#define ADC_SMPR1_SMP10_2 ((uint32_t)0x00000004) /*!< Bit 2 */ + +#define ADC_SMPR1_SMP11 ((uint32_t)0x00000038) /*!< SMP11[2:0] bits (Channel 11 Sample time selection) */ +#define ADC_SMPR1_SMP11_0 ((uint32_t)0x00000008) /*!< Bit 0 */ +#define ADC_SMPR1_SMP11_1 ((uint32_t)0x00000010) /*!< Bit 1 */ +#define ADC_SMPR1_SMP11_2 ((uint32_t)0x00000020) /*!< Bit 2 */ + +#define ADC_SMPR1_SMP12 ((uint32_t)0x000001C0) /*!< SMP12[2:0] bits (Channel 12 Sample time selection) */ +#define ADC_SMPR1_SMP12_0 ((uint32_t)0x00000040) /*!< Bit 0 */ +#define ADC_SMPR1_SMP12_1 ((uint32_t)0x00000080) /*!< Bit 1 */ +#define ADC_SMPR1_SMP12_2 ((uint32_t)0x00000100) /*!< Bit 2 */ + +#define ADC_SMPR1_SMP13 ((uint32_t)0x00000E00) /*!< SMP13[2:0] bits (Channel 13 Sample time selection) */ +#define ADC_SMPR1_SMP13_0 ((uint32_t)0x00000200) /*!< Bit 0 */ +#define ADC_SMPR1_SMP13_1 ((uint32_t)0x00000400) /*!< Bit 1 */ +#define ADC_SMPR1_SMP13_2 ((uint32_t)0x00000800) /*!< Bit 2 */ + +#define ADC_SMPR1_SMP14 ((uint32_t)0x00007000) /*!< SMP14[2:0] bits (Channel 14 Sample time selection) */ +#define ADC_SMPR1_SMP14_0 ((uint32_t)0x00001000) /*!< Bit 0 */ +#define ADC_SMPR1_SMP14_1 ((uint32_t)0x00002000) /*!< Bit 1 */ +#define ADC_SMPR1_SMP14_2 ((uint32_t)0x00004000) /*!< Bit 2 */ + +#define ADC_SMPR1_SMP15 ((uint32_t)0x00038000) /*!< SMP15[2:0] bits (Channel 15 Sample time selection) */ +#define ADC_SMPR1_SMP15_0 ((uint32_t)0x00008000) /*!< Bit 0 */ +#define ADC_SMPR1_SMP15_1 ((uint32_t)0x00010000) /*!< Bit 1 */ +#define ADC_SMPR1_SMP15_2 ((uint32_t)0x00020000) /*!< Bit 2 */ + +#define ADC_SMPR1_SMP16 ((uint32_t)0x001C0000) /*!< SMP16[2:0] bits (Channel 16 Sample time selection) */ +#define ADC_SMPR1_SMP16_0 ((uint32_t)0x00040000) /*!< Bit 0 */ +#define ADC_SMPR1_SMP16_1 ((uint32_t)0x00080000) /*!< Bit 1 */ +#define ADC_SMPR1_SMP16_2 ((uint32_t)0x00100000) /*!< Bit 2 */ + +#define ADC_SMPR1_SMP17 ((uint32_t)0x00E00000) /*!< SMP17[2:0] bits (Channel 17 Sample time selection) */ +#define ADC_SMPR1_SMP17_0 ((uint32_t)0x00200000) /*!< Bit 0 */ +#define ADC_SMPR1_SMP17_1 ((uint32_t)0x00400000) /*!< Bit 1 */ +#define ADC_SMPR1_SMP17_2 ((uint32_t)0x00800000) /*!< Bit 2 */ + +/****************** Bit definition for ADC_SMPR2 register *******************/ +#define ADC_SMPR2_SMP0 ((uint32_t)0x00000007) /*!< SMP0[2:0] bits (Channel 0 Sample time selection) */ +#define ADC_SMPR2_SMP0_0 ((uint32_t)0x00000001) /*!< Bit 0 */ +#define ADC_SMPR2_SMP0_1 ((uint32_t)0x00000002) /*!< Bit 1 */ +#define ADC_SMPR2_SMP0_2 ((uint32_t)0x00000004) /*!< Bit 2 */ + +#define ADC_SMPR2_SMP1 ((uint32_t)0x00000038) /*!< SMP1[2:0] bits (Channel 1 Sample time selection) */ +#define ADC_SMPR2_SMP1_0 ((uint32_t)0x00000008) /*!< Bit 0 */ +#define ADC_SMPR2_SMP1_1 ((uint32_t)0x00000010) /*!< Bit 1 */ +#define ADC_SMPR2_SMP1_2 ((uint32_t)0x00000020) /*!< Bit 2 */ + +#define ADC_SMPR2_SMP2 ((uint32_t)0x000001C0) /*!< SMP2[2:0] bits (Channel 2 Sample time selection) */ +#define ADC_SMPR2_SMP2_0 ((uint32_t)0x00000040) /*!< Bit 0 */ +#define ADC_SMPR2_SMP2_1 ((uint32_t)0x00000080) /*!< Bit 1 */ +#define ADC_SMPR2_SMP2_2 ((uint32_t)0x00000100) /*!< Bit 2 */ + +#define ADC_SMPR2_SMP3 ((uint32_t)0x00000E00) /*!< SMP3[2:0] bits (Channel 3 Sample time selection) */ +#define ADC_SMPR2_SMP3_0 ((uint32_t)0x00000200) /*!< Bit 0 */ +#define ADC_SMPR2_SMP3_1 ((uint32_t)0x00000400) /*!< Bit 1 */ +#define ADC_SMPR2_SMP3_2 ((uint32_t)0x00000800) /*!< Bit 2 */ + +#define ADC_SMPR2_SMP4 ((uint32_t)0x00007000) /*!< SMP4[2:0] bits (Channel 4 Sample time selection) */ +#define ADC_SMPR2_SMP4_0 ((uint32_t)0x00001000) /*!< Bit 0 */ +#define ADC_SMPR2_SMP4_1 ((uint32_t)0x00002000) /*!< Bit 1 */ +#define ADC_SMPR2_SMP4_2 ((uint32_t)0x00004000) /*!< Bit 2 */ + +#define ADC_SMPR2_SMP5 ((uint32_t)0x00038000) /*!< SMP5[2:0] bits (Channel 5 Sample time selection) */ +#define ADC_SMPR2_SMP5_0 ((uint32_t)0x00008000) /*!< Bit 0 */ +#define ADC_SMPR2_SMP5_1 ((uint32_t)0x00010000) /*!< Bit 1 */ +#define ADC_SMPR2_SMP5_2 ((uint32_t)0x00020000) /*!< Bit 2 */ + +#define ADC_SMPR2_SMP6 ((uint32_t)0x001C0000) /*!< SMP6[2:0] bits (Channel 6 Sample time selection) */ +#define ADC_SMPR2_SMP6_0 ((uint32_t)0x00040000) /*!< Bit 0 */ +#define ADC_SMPR2_SMP6_1 ((uint32_t)0x00080000) /*!< Bit 1 */ +#define ADC_SMPR2_SMP6_2 ((uint32_t)0x00100000) /*!< Bit 2 */ + +#define ADC_SMPR2_SMP7 ((uint32_t)0x00E00000) /*!< SMP7[2:0] bits (Channel 7 Sample time selection) */ +#define ADC_SMPR2_SMP7_0 ((uint32_t)0x00200000) /*!< Bit 0 */ +#define ADC_SMPR2_SMP7_1 ((uint32_t)0x00400000) /*!< Bit 1 */ +#define ADC_SMPR2_SMP7_2 ((uint32_t)0x00800000) /*!< Bit 2 */ + +#define ADC_SMPR2_SMP8 ((uint32_t)0x07000000) /*!< SMP8[2:0] bits (Channel 8 Sample time selection) */ +#define ADC_SMPR2_SMP8_0 ((uint32_t)0x01000000) /*!< Bit 0 */ +#define ADC_SMPR2_SMP8_1 ((uint32_t)0x02000000) /*!< Bit 1 */ +#define ADC_SMPR2_SMP8_2 ((uint32_t)0x04000000) /*!< Bit 2 */ + +#define ADC_SMPR2_SMP9 ((uint32_t)0x38000000) /*!< SMP9[2:0] bits (Channel 9 Sample time selection) */ +#define ADC_SMPR2_SMP9_0 ((uint32_t)0x08000000) /*!< Bit 0 */ +#define ADC_SMPR2_SMP9_1 ((uint32_t)0x10000000) /*!< Bit 1 */ +#define ADC_SMPR2_SMP9_2 ((uint32_t)0x20000000) /*!< Bit 2 */ + +/****************** Bit definition for ADC_JOFR1 register *******************/ +#define ADC_JOFR1_JOFFSET1 ((uint16_t)0x0FFF) /*!< Data offset for injected channel 1 */ + +/****************** Bit definition for ADC_JOFR2 register *******************/ +#define ADC_JOFR2_JOFFSET2 ((uint16_t)0x0FFF) /*!< Data offset for injected channel 2 */ + +/****************** Bit definition for ADC_JOFR3 register *******************/ +#define ADC_JOFR3_JOFFSET3 ((uint16_t)0x0FFF) /*!< Data offset for injected channel 3 */ + +/****************** Bit definition for ADC_JOFR4 register *******************/ +#define ADC_JOFR4_JOFFSET4 ((uint16_t)0x0FFF) /*!< Data offset for injected channel 4 */ + +/******************* Bit definition for ADC_HTR register ********************/ +#define ADC_HTR_HT ((uint16_t)0x0FFF) /*!< Analog watchdog high threshold */ + +/******************* Bit definition for ADC_LTR register ********************/ +#define ADC_LTR_LT ((uint16_t)0x0FFF) /*!< Analog watchdog low threshold */ + +/******************* Bit definition for ADC_SQR1 register *******************/ +#define ADC_SQR1_SQ13 ((uint32_t)0x0000001F) /*!< SQ13[4:0] bits (13th conversion in regular sequence) */ +#define ADC_SQR1_SQ13_0 ((uint32_t)0x00000001) /*!< Bit 0 */ +#define ADC_SQR1_SQ13_1 ((uint32_t)0x00000002) /*!< Bit 1 */ +#define ADC_SQR1_SQ13_2 ((uint32_t)0x00000004) /*!< Bit 2 */ +#define ADC_SQR1_SQ13_3 ((uint32_t)0x00000008) /*!< Bit 3 */ +#define ADC_SQR1_SQ13_4 ((uint32_t)0x00000010) /*!< Bit 4 */ + +#define ADC_SQR1_SQ14 ((uint32_t)0x000003E0) /*!< SQ14[4:0] bits (14th conversion in regular sequence) */ +#define ADC_SQR1_SQ14_0 ((uint32_t)0x00000020) /*!< Bit 0 */ +#define ADC_SQR1_SQ14_1 ((uint32_t)0x00000040) /*!< Bit 1 */ +#define ADC_SQR1_SQ14_2 ((uint32_t)0x00000080) /*!< Bit 2 */ +#define ADC_SQR1_SQ14_3 ((uint32_t)0x00000100) /*!< Bit 3 */ +#define ADC_SQR1_SQ14_4 ((uint32_t)0x00000200) /*!< Bit 4 */ + +#define ADC_SQR1_SQ15 ((uint32_t)0x00007C00) /*!< SQ15[4:0] bits (15th conversion in regular sequence) */ +#define ADC_SQR1_SQ15_0 ((uint32_t)0x00000400) /*!< Bit 0 */ +#define ADC_SQR1_SQ15_1 ((uint32_t)0x00000800) /*!< Bit 1 */ +#define ADC_SQR1_SQ15_2 ((uint32_t)0x00001000) /*!< Bit 2 */ +#define ADC_SQR1_SQ15_3 ((uint32_t)0x00002000) /*!< Bit 3 */ +#define ADC_SQR1_SQ15_4 ((uint32_t)0x00004000) /*!< Bit 4 */ + +#define ADC_SQR1_SQ16 ((uint32_t)0x000F8000) /*!< SQ16[4:0] bits (16th conversion in regular sequence) */ +#define ADC_SQR1_SQ16_0 ((uint32_t)0x00008000) /*!< Bit 0 */ +#define ADC_SQR1_SQ16_1 ((uint32_t)0x00010000) /*!< Bit 1 */ +#define ADC_SQR1_SQ16_2 ((uint32_t)0x00020000) /*!< Bit 2 */ +#define ADC_SQR1_SQ16_3 ((uint32_t)0x00040000) /*!< Bit 3 */ +#define ADC_SQR1_SQ16_4 ((uint32_t)0x00080000) /*!< Bit 4 */ + +#define ADC_SQR1_L ((uint32_t)0x00F00000) /*!< L[3:0] bits (Regular channel sequence length) */ +#define ADC_SQR1_L_0 ((uint32_t)0x00100000) /*!< Bit 0 */ +#define ADC_SQR1_L_1 ((uint32_t)0x00200000) /*!< Bit 1 */ +#define ADC_SQR1_L_2 ((uint32_t)0x00400000) /*!< Bit 2 */ +#define ADC_SQR1_L_3 ((uint32_t)0x00800000) /*!< Bit 3 */ + +/******************* Bit definition for ADC_SQR2 register *******************/ +#define ADC_SQR2_SQ7 ((uint32_t)0x0000001F) /*!< SQ7[4:0] bits (7th conversion in regular sequence) */ +#define ADC_SQR2_SQ7_0 ((uint32_t)0x00000001) /*!< Bit 0 */ +#define ADC_SQR2_SQ7_1 ((uint32_t)0x00000002) /*!< Bit 1 */ +#define ADC_SQR2_SQ7_2 ((uint32_t)0x00000004) /*!< Bit 2 */ +#define ADC_SQR2_SQ7_3 ((uint32_t)0x00000008) /*!< Bit 3 */ +#define ADC_SQR2_SQ7_4 ((uint32_t)0x00000010) /*!< Bit 4 */ + +#define ADC_SQR2_SQ8 ((uint32_t)0x000003E0) /*!< SQ8[4:0] bits (8th conversion in regular sequence) */ +#define ADC_SQR2_SQ8_0 ((uint32_t)0x00000020) /*!< Bit 0 */ +#define ADC_SQR2_SQ8_1 ((uint32_t)0x00000040) /*!< Bit 1 */ +#define ADC_SQR2_SQ8_2 ((uint32_t)0x00000080) /*!< Bit 2 */ +#define ADC_SQR2_SQ8_3 ((uint32_t)0x00000100) /*!< Bit 3 */ +#define ADC_SQR2_SQ8_4 ((uint32_t)0x00000200) /*!< Bit 4 */ + +#define ADC_SQR2_SQ9 ((uint32_t)0x00007C00) /*!< SQ9[4:0] bits (9th conversion in regular sequence) */ +#define ADC_SQR2_SQ9_0 ((uint32_t)0x00000400) /*!< Bit 0 */ +#define ADC_SQR2_SQ9_1 ((uint32_t)0x00000800) /*!< Bit 1 */ +#define ADC_SQR2_SQ9_2 ((uint32_t)0x00001000) /*!< Bit 2 */ +#define ADC_SQR2_SQ9_3 ((uint32_t)0x00002000) /*!< Bit 3 */ +#define ADC_SQR2_SQ9_4 ((uint32_t)0x00004000) /*!< Bit 4 */ + +#define ADC_SQR2_SQ10 ((uint32_t)0x000F8000) /*!< SQ10[4:0] bits (10th conversion in regular sequence) */ +#define ADC_SQR2_SQ10_0 ((uint32_t)0x00008000) /*!< Bit 0 */ +#define ADC_SQR2_SQ10_1 ((uint32_t)0x00010000) /*!< Bit 1 */ +#define ADC_SQR2_SQ10_2 ((uint32_t)0x00020000) /*!< Bit 2 */ +#define ADC_SQR2_SQ10_3 ((uint32_t)0x00040000) /*!< Bit 3 */ +#define ADC_SQR2_SQ10_4 ((uint32_t)0x00080000) /*!< Bit 4 */ + +#define ADC_SQR2_SQ11 ((uint32_t)0x01F00000) /*!< SQ11[4:0] bits (11th conversion in regular sequence) */ +#define ADC_SQR2_SQ11_0 ((uint32_t)0x00100000) /*!< Bit 0 */ +#define ADC_SQR2_SQ11_1 ((uint32_t)0x00200000) /*!< Bit 1 */ +#define ADC_SQR2_SQ11_2 ((uint32_t)0x00400000) /*!< Bit 2 */ +#define ADC_SQR2_SQ11_3 ((uint32_t)0x00800000) /*!< Bit 3 */ +#define ADC_SQR2_SQ11_4 ((uint32_t)0x01000000) /*!< Bit 4 */ + +#define ADC_SQR2_SQ12 ((uint32_t)0x3E000000) /*!< SQ12[4:0] bits (12th conversion in regular sequence) */ +#define ADC_SQR2_SQ12_0 ((uint32_t)0x02000000) /*!< Bit 0 */ +#define ADC_SQR2_SQ12_1 ((uint32_t)0x04000000) /*!< Bit 1 */ +#define ADC_SQR2_SQ12_2 ((uint32_t)0x08000000) /*!< Bit 2 */ +#define ADC_SQR2_SQ12_3 ((uint32_t)0x10000000) /*!< Bit 3 */ +#define ADC_SQR2_SQ12_4 ((uint32_t)0x20000000) /*!< Bit 4 */ + +/******************* Bit definition for ADC_SQR3 register *******************/ +#define ADC_SQR3_SQ1 ((uint32_t)0x0000001F) /*!< SQ1[4:0] bits (1st conversion in regular sequence) */ +#define ADC_SQR3_SQ1_0 ((uint32_t)0x00000001) /*!< Bit 0 */ +#define ADC_SQR3_SQ1_1 ((uint32_t)0x00000002) /*!< Bit 1 */ +#define ADC_SQR3_SQ1_2 ((uint32_t)0x00000004) /*!< Bit 2 */ +#define ADC_SQR3_SQ1_3 ((uint32_t)0x00000008) /*!< Bit 3 */ +#define ADC_SQR3_SQ1_4 ((uint32_t)0x00000010) /*!< Bit 4 */ + +#define ADC_SQR3_SQ2 ((uint32_t)0x000003E0) /*!< SQ2[4:0] bits (2nd conversion in regular sequence) */ +#define ADC_SQR3_SQ2_0 ((uint32_t)0x00000020) /*!< Bit 0 */ +#define ADC_SQR3_SQ2_1 ((uint32_t)0x00000040) /*!< Bit 1 */ +#define ADC_SQR3_SQ2_2 ((uint32_t)0x00000080) /*!< Bit 2 */ +#define ADC_SQR3_SQ2_3 ((uint32_t)0x00000100) /*!< Bit 3 */ +#define ADC_SQR3_SQ2_4 ((uint32_t)0x00000200) /*!< Bit 4 */ + +#define ADC_SQR3_SQ3 ((uint32_t)0x00007C00) /*!< SQ3[4:0] bits (3rd conversion in regular sequence) */ +#define ADC_SQR3_SQ3_0 ((uint32_t)0x00000400) /*!< Bit 0 */ +#define ADC_SQR3_SQ3_1 ((uint32_t)0x00000800) /*!< Bit 1 */ +#define ADC_SQR3_SQ3_2 ((uint32_t)0x00001000) /*!< Bit 2 */ +#define ADC_SQR3_SQ3_3 ((uint32_t)0x00002000) /*!< Bit 3 */ +#define ADC_SQR3_SQ3_4 ((uint32_t)0x00004000) /*!< Bit 4 */ + +#define ADC_SQR3_SQ4 ((uint32_t)0x000F8000) /*!< SQ4[4:0] bits (4th conversion in regular sequence) */ +#define ADC_SQR3_SQ4_0 ((uint32_t)0x00008000) /*!< Bit 0 */ +#define ADC_SQR3_SQ4_1 ((uint32_t)0x00010000) /*!< Bit 1 */ +#define ADC_SQR3_SQ4_2 ((uint32_t)0x00020000) /*!< Bit 2 */ +#define ADC_SQR3_SQ4_3 ((uint32_t)0x00040000) /*!< Bit 3 */ +#define ADC_SQR3_SQ4_4 ((uint32_t)0x00080000) /*!< Bit 4 */ + +#define ADC_SQR3_SQ5 ((uint32_t)0x01F00000) /*!< SQ5[4:0] bits (5th conversion in regular sequence) */ +#define ADC_SQR3_SQ5_0 ((uint32_t)0x00100000) /*!< Bit 0 */ +#define ADC_SQR3_SQ5_1 ((uint32_t)0x00200000) /*!< Bit 1 */ +#define ADC_SQR3_SQ5_2 ((uint32_t)0x00400000) /*!< Bit 2 */ +#define ADC_SQR3_SQ5_3 ((uint32_t)0x00800000) /*!< Bit 3 */ +#define ADC_SQR3_SQ5_4 ((uint32_t)0x01000000) /*!< Bit 4 */ + +#define ADC_SQR3_SQ6 ((uint32_t)0x3E000000) /*!< SQ6[4:0] bits (6th conversion in regular sequence) */ +#define ADC_SQR3_SQ6_0 ((uint32_t)0x02000000) /*!< Bit 0 */ +#define ADC_SQR3_SQ6_1 ((uint32_t)0x04000000) /*!< Bit 1 */ +#define ADC_SQR3_SQ6_2 ((uint32_t)0x08000000) /*!< Bit 2 */ +#define ADC_SQR3_SQ6_3 ((uint32_t)0x10000000) /*!< Bit 3 */ +#define ADC_SQR3_SQ6_4 ((uint32_t)0x20000000) /*!< Bit 4 */ + +/******************* Bit definition for ADC_JSQR register *******************/ +#define ADC_JSQR_JSQ1 ((uint32_t)0x0000001F) /*!< JSQ1[4:0] bits (1st conversion in injected sequence) */ +#define ADC_JSQR_JSQ1_0 ((uint32_t)0x00000001) /*!< Bit 0 */ +#define ADC_JSQR_JSQ1_1 ((uint32_t)0x00000002) /*!< Bit 1 */ +#define ADC_JSQR_JSQ1_2 ((uint32_t)0x00000004) /*!< Bit 2 */ +#define ADC_JSQR_JSQ1_3 ((uint32_t)0x00000008) /*!< Bit 3 */ +#define ADC_JSQR_JSQ1_4 ((uint32_t)0x00000010) /*!< Bit 4 */ + +#define ADC_JSQR_JSQ2 ((uint32_t)0x000003E0) /*!< JSQ2[4:0] bits (2nd conversion in injected sequence) */ +#define ADC_JSQR_JSQ2_0 ((uint32_t)0x00000020) /*!< Bit 0 */ +#define ADC_JSQR_JSQ2_1 ((uint32_t)0x00000040) /*!< Bit 1 */ +#define ADC_JSQR_JSQ2_2 ((uint32_t)0x00000080) /*!< Bit 2 */ +#define ADC_JSQR_JSQ2_3 ((uint32_t)0x00000100) /*!< Bit 3 */ +#define ADC_JSQR_JSQ2_4 ((uint32_t)0x00000200) /*!< Bit 4 */ + +#define ADC_JSQR_JSQ3 ((uint32_t)0x00007C00) /*!< JSQ3[4:0] bits (3rd conversion in injected sequence) */ +#define ADC_JSQR_JSQ3_0 ((uint32_t)0x00000400) /*!< Bit 0 */ +#define ADC_JSQR_JSQ3_1 ((uint32_t)0x00000800) /*!< Bit 1 */ +#define ADC_JSQR_JSQ3_2 ((uint32_t)0x00001000) /*!< Bit 2 */ +#define ADC_JSQR_JSQ3_3 ((uint32_t)0x00002000) /*!< Bit 3 */ +#define ADC_JSQR_JSQ3_4 ((uint32_t)0x00004000) /*!< Bit 4 */ + +#define ADC_JSQR_JSQ4 ((uint32_t)0x000F8000) /*!< JSQ4[4:0] bits (4th conversion in injected sequence) */ +#define ADC_JSQR_JSQ4_0 ((uint32_t)0x00008000) /*!< Bit 0 */ +#define ADC_JSQR_JSQ4_1 ((uint32_t)0x00010000) /*!< Bit 1 */ +#define ADC_JSQR_JSQ4_2 ((uint32_t)0x00020000) /*!< Bit 2 */ +#define ADC_JSQR_JSQ4_3 ((uint32_t)0x00040000) /*!< Bit 3 */ +#define ADC_JSQR_JSQ4_4 ((uint32_t)0x00080000) /*!< Bit 4 */ + +#define ADC_JSQR_JL ((uint32_t)0x00300000) /*!< JL[1:0] bits (Injected Sequence length) */ +#define ADC_JSQR_JL_0 ((uint32_t)0x00100000) /*!< Bit 0 */ +#define ADC_JSQR_JL_1 ((uint32_t)0x00200000) /*!< Bit 1 */ + +/******************* Bit definition for ADC_JDR1 register *******************/ +#define ADC_JDR1_JDATA ((uint16_t)0xFFFF) /*!< Injected data */ + +/******************* Bit definition for ADC_JDR2 register *******************/ +#define ADC_JDR2_JDATA ((uint16_t)0xFFFF) /*!< Injected data */ + +/******************* Bit definition for ADC_JDR3 register *******************/ +#define ADC_JDR3_JDATA ((uint16_t)0xFFFF) /*!< Injected data */ + +/******************* Bit definition for ADC_JDR4 register *******************/ +#define ADC_JDR4_JDATA ((uint16_t)0xFFFF) /*!< Injected data */ + +/******************** Bit definition for ADC_DR register ********************/ +#define ADC_DR_DATA ((uint32_t)0x0000FFFF) /*!< Regular data */ +#define ADC_DR_ADC2DATA ((uint32_t)0xFFFF0000) /*!< ADC2 data */ + +/******************************************************************************/ +/* */ +/* Digital to Analog Converter */ +/* */ +/******************************************************************************/ + +/******************** Bit definition for DAC_CR register ********************/ +#define DAC_CR_EN1 ((uint32_t)0x00000001) /*!< DAC channel1 enable */ +#define DAC_CR_BOFF1 ((uint32_t)0x00000002) /*!< DAC channel1 output buffer disable */ +#define DAC_CR_TEN1 ((uint32_t)0x00000004) /*!< DAC channel1 Trigger enable */ + +#define DAC_CR_TSEL1 ((uint32_t)0x00000038) /*!< TSEL1[2:0] (DAC channel1 Trigger selection) */ +#define DAC_CR_TSEL1_0 ((uint32_t)0x00000008) /*!< Bit 0 */ +#define DAC_CR_TSEL1_1 ((uint32_t)0x00000010) /*!< Bit 1 */ +#define DAC_CR_TSEL1_2 ((uint32_t)0x00000020) /*!< Bit 2 */ + +#define DAC_CR_WAVE1 ((uint32_t)0x000000C0) /*!< WAVE1[1:0] (DAC channel1 noise/triangle wave generation enable) */ +#define DAC_CR_WAVE1_0 ((uint32_t)0x00000040) /*!< Bit 0 */ +#define DAC_CR_WAVE1_1 ((uint32_t)0x00000080) /*!< Bit 1 */ + +#define DAC_CR_MAMP1 ((uint32_t)0x00000F00) /*!< MAMP1[3:0] (DAC channel1 Mask/Amplitude selector) */ +#define DAC_CR_MAMP1_0 ((uint32_t)0x00000100) /*!< Bit 0 */ +#define DAC_CR_MAMP1_1 ((uint32_t)0x00000200) /*!< Bit 1 */ +#define DAC_CR_MAMP1_2 ((uint32_t)0x00000400) /*!< Bit 2 */ +#define DAC_CR_MAMP1_3 ((uint32_t)0x00000800) /*!< Bit 3 */ + +#define DAC_CR_DMAEN1 ((uint32_t)0x00001000) /*!< DAC channel1 DMA enable */ +#define DAC_CR_EN2 ((uint32_t)0x00010000) /*!< DAC channel2 enable */ +#define DAC_CR_BOFF2 ((uint32_t)0x00020000) /*!< DAC channel2 output buffer disable */ +#define DAC_CR_TEN2 ((uint32_t)0x00040000) /*!< DAC channel2 Trigger enable */ + +#define DAC_CR_TSEL2 ((uint32_t)0x00380000) /*!< TSEL2[2:0] (DAC channel2 Trigger selection) */ +#define DAC_CR_TSEL2_0 ((uint32_t)0x00080000) /*!< Bit 0 */ +#define DAC_CR_TSEL2_1 ((uint32_t)0x00100000) /*!< Bit 1 */ +#define DAC_CR_TSEL2_2 ((uint32_t)0x00200000) /*!< Bit 2 */ + +#define DAC_CR_WAVE2 ((uint32_t)0x00C00000) /*!< WAVE2[1:0] (DAC channel2 noise/triangle wave generation enable) */ +#define DAC_CR_WAVE2_0 ((uint32_t)0x00400000) /*!< Bit 0 */ +#define DAC_CR_WAVE2_1 ((uint32_t)0x00800000) /*!< Bit 1 */ + +#define DAC_CR_MAMP2 ((uint32_t)0x0F000000) /*!< MAMP2[3:0] (DAC channel2 Mask/Amplitude selector) */ +#define DAC_CR_MAMP2_0 ((uint32_t)0x01000000) /*!< Bit 0 */ +#define DAC_CR_MAMP2_1 ((uint32_t)0x02000000) /*!< Bit 1 */ +#define DAC_CR_MAMP2_2 ((uint32_t)0x04000000) /*!< Bit 2 */ +#define DAC_CR_MAMP2_3 ((uint32_t)0x08000000) /*!< Bit 3 */ + +#define DAC_CR_DMAEN2 ((uint32_t)0x10000000) /*!< DAC channel2 DMA enabled */ + +/***************** Bit definition for DAC_SWTRIGR register ******************/ +#define DAC_SWTRIGR_SWTRIG1 ((uint8_t)0x01) /*!< DAC channel1 software trigger */ +#define DAC_SWTRIGR_SWTRIG2 ((uint8_t)0x02) /*!< DAC channel2 software trigger */ + +/***************** Bit definition for DAC_DHR12R1 register ******************/ +#define DAC_DHR12R1_DACC1DHR ((uint16_t)0x0FFF) /*!< DAC channel1 12-bit Right aligned data */ + +/***************** Bit definition for DAC_DHR12L1 register ******************/ +#define DAC_DHR12L1_DACC1DHR ((uint16_t)0xFFF0) /*!< DAC channel1 12-bit Left aligned data */ + +/****************** Bit definition for DAC_DHR8R1 register ******************/ +#define DAC_DHR8R1_DACC1DHR ((uint8_t)0xFF) /*!< DAC channel1 8-bit Right aligned data */ + +/***************** Bit definition for DAC_DHR12R2 register ******************/ +#define DAC_DHR12R2_DACC2DHR ((uint16_t)0x0FFF) /*!< DAC channel2 12-bit Right aligned data */ + +/***************** Bit definition for DAC_DHR12L2 register ******************/ +#define DAC_DHR12L2_DACC2DHR ((uint16_t)0xFFF0) /*!< DAC channel2 12-bit Left aligned data */ + +/****************** Bit definition for DAC_DHR8R2 register ******************/ +#define DAC_DHR8R2_DACC2DHR ((uint8_t)0xFF) /*!< DAC channel2 8-bit Right aligned data */ + +/***************** Bit definition for DAC_DHR12RD register ******************/ +#define DAC_DHR12RD_DACC1DHR ((uint32_t)0x00000FFF) /*!< DAC channel1 12-bit Right aligned data */ +#define DAC_DHR12RD_DACC2DHR ((uint32_t)0x0FFF0000) /*!< DAC channel2 12-bit Right aligned data */ + +/***************** Bit definition for DAC_DHR12LD register ******************/ +#define DAC_DHR12LD_DACC1DHR ((uint32_t)0x0000FFF0) /*!< DAC channel1 12-bit Left aligned data */ +#define DAC_DHR12LD_DACC2DHR ((uint32_t)0xFFF00000) /*!< DAC channel2 12-bit Left aligned data */ + +/****************** Bit definition for DAC_DHR8RD register ******************/ +#define DAC_DHR8RD_DACC1DHR ((uint16_t)0x00FF) /*!< DAC channel1 8-bit Right aligned data */ +#define DAC_DHR8RD_DACC2DHR ((uint16_t)0xFF00) /*!< DAC channel2 8-bit Right aligned data */ + +/******************* Bit definition for DAC_DOR1 register *******************/ +#define DAC_DOR1_DACC1DOR ((uint16_t)0x0FFF) /*!< DAC channel1 data output */ + +/******************* Bit definition for DAC_DOR2 register *******************/ +#define DAC_DOR2_DACC2DOR ((uint16_t)0x0FFF) /*!< DAC channel2 data output */ + +/******************** Bit definition for DAC_SR register ********************/ +#define DAC_SR_DMAUDR1 ((uint32_t)0x00002000) /*!< DAC channel1 DMA underrun flag */ +#define DAC_SR_DMAUDR2 ((uint32_t)0x20000000) /*!< DAC channel2 DMA underrun flag */ + +/******************************************************************************/ +/* */ +/* CEC */ +/* */ +/******************************************************************************/ +/******************** Bit definition for CEC_CFGR register ******************/ +#define CEC_CFGR_PE ((uint16_t)0x0001) /*!< Peripheral Enable */ +#define CEC_CFGR_IE ((uint16_t)0x0002) /*!< Interrupt Enable */ +#define CEC_CFGR_BTEM ((uint16_t)0x0004) /*!< Bit Timing Error Mode */ +#define CEC_CFGR_BPEM ((uint16_t)0x0008) /*!< Bit Period Error Mode */ + +/******************** Bit definition for CEC_OAR register ******************/ +#define CEC_OAR_OA ((uint16_t)0x000F) /*!< OA[3:0]: Own Address */ +#define CEC_OAR_OA_0 ((uint16_t)0x0001) /*!< Bit 0 */ +#define CEC_OAR_OA_1 ((uint16_t)0x0002) /*!< Bit 1 */ +#define CEC_OAR_OA_2 ((uint16_t)0x0004) /*!< Bit 2 */ +#define CEC_OAR_OA_3 ((uint16_t)0x0008) /*!< Bit 3 */ + +/******************** Bit definition for CEC_PRES register ******************/ +#define CEC_PRES_PRES ((uint16_t)0x3FFF) /*!< Prescaler Counter Value */ + +/******************** Bit definition for CEC_ESR register ******************/ +#define CEC_ESR_BTE ((uint16_t)0x0001) /*!< Bit Timing Error */ +#define CEC_ESR_BPE ((uint16_t)0x0002) /*!< Bit Period Error */ +#define CEC_ESR_RBTFE ((uint16_t)0x0004) /*!< Rx Block Transfer Finished Error */ +#define CEC_ESR_SBE ((uint16_t)0x0008) /*!< Start Bit Error */ +#define CEC_ESR_ACKE ((uint16_t)0x0010) /*!< Block Acknowledge Error */ +#define CEC_ESR_LINE ((uint16_t)0x0020) /*!< Line Error */ +#define CEC_ESR_TBTFE ((uint16_t)0x0040) /*!< Tx Block Transfer Finished Error */ + +/******************** Bit definition for CEC_CSR register ******************/ +#define CEC_CSR_TSOM ((uint16_t)0x0001) /*!< Tx Start Of Message */ +#define CEC_CSR_TEOM ((uint16_t)0x0002) /*!< Tx End Of Message */ +#define CEC_CSR_TERR ((uint16_t)0x0004) /*!< Tx Error */ +#define CEC_CSR_TBTRF ((uint16_t)0x0008) /*!< Tx Byte Transfer Request or Block Transfer Finished */ +#define CEC_CSR_RSOM ((uint16_t)0x0010) /*!< Rx Start Of Message */ +#define CEC_CSR_REOM ((uint16_t)0x0020) /*!< Rx End Of Message */ +#define CEC_CSR_RERR ((uint16_t)0x0040) /*!< Rx Error */ +#define CEC_CSR_RBTF ((uint16_t)0x0080) /*!< Rx Block Transfer Finished */ + +/******************** Bit definition for CEC_TXD register ******************/ +#define CEC_TXD_TXD ((uint16_t)0x00FF) /*!< Tx Data register */ + +/******************** Bit definition for CEC_RXD register ******************/ +#define CEC_RXD_RXD ((uint16_t)0x00FF) /*!< Rx Data register */ + +/******************************************************************************/ +/* */ +/* TIM */ +/* */ +/******************************************************************************/ + +/******************* Bit definition for TIM_CR1 register ********************/ +#define TIM_CR1_CEN ((uint16_t)0x0001) /*!< Counter enable */ +#define TIM_CR1_UDIS ((uint16_t)0x0002) /*!< Update disable */ +#define TIM_CR1_URS ((uint16_t)0x0004) /*!< Update request source */ +#define TIM_CR1_OPM ((uint16_t)0x0008) /*!< One pulse mode */ +#define TIM_CR1_DIR ((uint16_t)0x0010) /*!< Direction */ + +#define TIM_CR1_CMS ((uint16_t)0x0060) /*!< CMS[1:0] bits (Center-aligned mode selection) */ +#define TIM_CR1_CMS_0 ((uint16_t)0x0020) /*!< Bit 0 */ +#define TIM_CR1_CMS_1 ((uint16_t)0x0040) /*!< Bit 1 */ + +#define TIM_CR1_ARPE ((uint16_t)0x0080) /*!< Auto-reload preload enable */ + +#define TIM_CR1_CKD ((uint16_t)0x0300) /*!< CKD[1:0] bits (clock division) */ +#define TIM_CR1_CKD_0 ((uint16_t)0x0100) /*!< Bit 0 */ +#define TIM_CR1_CKD_1 ((uint16_t)0x0200) /*!< Bit 1 */ + +/******************* Bit definition for TIM_CR2 register ********************/ +#define TIM_CR2_CCPC ((uint16_t)0x0001) /*!< Capture/Compare Preloaded Control */ +#define TIM_CR2_CCUS ((uint16_t)0x0004) /*!< Capture/Compare Control Update Selection */ +#define TIM_CR2_CCDS ((uint16_t)0x0008) /*!< Capture/Compare DMA Selection */ + +#define TIM_CR2_MMS ((uint16_t)0x0070) /*!< MMS[2:0] bits (Master Mode Selection) */ +#define TIM_CR2_MMS_0 ((uint16_t)0x0010) /*!< Bit 0 */ +#define TIM_CR2_MMS_1 ((uint16_t)0x0020) /*!< Bit 1 */ +#define TIM_CR2_MMS_2 ((uint16_t)0x0040) /*!< Bit 2 */ + +#define TIM_CR2_TI1S ((uint16_t)0x0080) /*!< TI1 Selection */ +#define TIM_CR2_OIS1 ((uint16_t)0x0100) /*!< Output Idle state 1 (OC1 output) */ +#define TIM_CR2_OIS1N ((uint16_t)0x0200) /*!< Output Idle state 1 (OC1N output) */ +#define TIM_CR2_OIS2 ((uint16_t)0x0400) /*!< Output Idle state 2 (OC2 output) */ +#define TIM_CR2_OIS2N ((uint16_t)0x0800) /*!< Output Idle state 2 (OC2N output) */ +#define TIM_CR2_OIS3 ((uint16_t)0x1000) /*!< Output Idle state 3 (OC3 output) */ +#define TIM_CR2_OIS3N ((uint16_t)0x2000) /*!< Output Idle state 3 (OC3N output) */ +#define TIM_CR2_OIS4 ((uint16_t)0x4000) /*!< Output Idle state 4 (OC4 output) */ + +/******************* Bit definition for TIM_SMCR register *******************/ +#define TIM_SMCR_SMS ((uint16_t)0x0007) /*!< SMS[2:0] bits (Slave mode selection) */ +#define TIM_SMCR_SMS_0 ((uint16_t)0x0001) /*!< Bit 0 */ +#define TIM_SMCR_SMS_1 ((uint16_t)0x0002) /*!< Bit 1 */ +#define TIM_SMCR_SMS_2 ((uint16_t)0x0004) /*!< Bit 2 */ + +#define TIM_SMCR_TS ((uint16_t)0x0070) /*!< TS[2:0] bits (Trigger selection) */ +#define TIM_SMCR_TS_0 ((uint16_t)0x0010) /*!< Bit 0 */ +#define TIM_SMCR_TS_1 ((uint16_t)0x0020) /*!< Bit 1 */ +#define TIM_SMCR_TS_2 ((uint16_t)0x0040) /*!< Bit 2 */ + +#define TIM_SMCR_MSM ((uint16_t)0x0080) /*!< Master/slave mode */ + +#define TIM_SMCR_ETF ((uint16_t)0x0F00) /*!< ETF[3:0] bits (External trigger filter) */ +#define TIM_SMCR_ETF_0 ((uint16_t)0x0100) /*!< Bit 0 */ +#define TIM_SMCR_ETF_1 ((uint16_t)0x0200) /*!< Bit 1 */ +#define TIM_SMCR_ETF_2 ((uint16_t)0x0400) /*!< Bit 2 */ +#define TIM_SMCR_ETF_3 ((uint16_t)0x0800) /*!< Bit 3 */ + +#define TIM_SMCR_ETPS ((uint16_t)0x3000) /*!< ETPS[1:0] bits (External trigger prescaler) */ +#define TIM_SMCR_ETPS_0 ((uint16_t)0x1000) /*!< Bit 0 */ +#define TIM_SMCR_ETPS_1 ((uint16_t)0x2000) /*!< Bit 1 */ + +#define TIM_SMCR_ECE ((uint16_t)0x4000) /*!< External clock enable */ +#define TIM_SMCR_ETP ((uint16_t)0x8000) /*!< External trigger polarity */ + +/******************* Bit definition for TIM_DIER register *******************/ +#define TIM_DIER_UIE ((uint16_t)0x0001) /*!< Update interrupt enable */ +#define TIM_DIER_CC1IE ((uint16_t)0x0002) /*!< Capture/Compare 1 interrupt enable */ +#define TIM_DIER_CC2IE ((uint16_t)0x0004) /*!< Capture/Compare 2 interrupt enable */ +#define TIM_DIER_CC3IE ((uint16_t)0x0008) /*!< Capture/Compare 3 interrupt enable */ +#define TIM_DIER_CC4IE ((uint16_t)0x0010) /*!< Capture/Compare 4 interrupt enable */ +#define TIM_DIER_COMIE ((uint16_t)0x0020) /*!< COM interrupt enable */ +#define TIM_DIER_TIE ((uint16_t)0x0040) /*!< Trigger interrupt enable */ +#define TIM_DIER_BIE ((uint16_t)0x0080) /*!< Break interrupt enable */ +#define TIM_DIER_UDE ((uint16_t)0x0100) /*!< Update DMA request enable */ +#define TIM_DIER_CC1DE ((uint16_t)0x0200) /*!< Capture/Compare 1 DMA request enable */ +#define TIM_DIER_CC2DE ((uint16_t)0x0400) /*!< Capture/Compare 2 DMA request enable */ +#define TIM_DIER_CC3DE ((uint16_t)0x0800) /*!< Capture/Compare 3 DMA request enable */ +#define TIM_DIER_CC4DE ((uint16_t)0x1000) /*!< Capture/Compare 4 DMA request enable */ +#define TIM_DIER_COMDE ((uint16_t)0x2000) /*!< COM DMA request enable */ +#define TIM_DIER_TDE ((uint16_t)0x4000) /*!< Trigger DMA request enable */ + +/******************** Bit definition for TIM_SR register ********************/ +#define TIM_SR_UIF ((uint16_t)0x0001) /*!< Update interrupt Flag */ +#define TIM_SR_CC1IF ((uint16_t)0x0002) /*!< Capture/Compare 1 interrupt Flag */ +#define TIM_SR_CC2IF ((uint16_t)0x0004) /*!< Capture/Compare 2 interrupt Flag */ +#define TIM_SR_CC3IF ((uint16_t)0x0008) /*!< Capture/Compare 3 interrupt Flag */ +#define TIM_SR_CC4IF ((uint16_t)0x0010) /*!< Capture/Compare 4 interrupt Flag */ +#define TIM_SR_COMIF ((uint16_t)0x0020) /*!< COM interrupt Flag */ +#define TIM_SR_TIF ((uint16_t)0x0040) /*!< Trigger interrupt Flag */ +#define TIM_SR_BIF ((uint16_t)0x0080) /*!< Break interrupt Flag */ +#define TIM_SR_CC1OF ((uint16_t)0x0200) /*!< Capture/Compare 1 Overcapture Flag */ +#define TIM_SR_CC2OF ((uint16_t)0x0400) /*!< Capture/Compare 2 Overcapture Flag */ +#define TIM_SR_CC3OF ((uint16_t)0x0800) /*!< Capture/Compare 3 Overcapture Flag */ +#define TIM_SR_CC4OF ((uint16_t)0x1000) /*!< Capture/Compare 4 Overcapture Flag */ + +/******************* Bit definition for TIM_EGR register ********************/ +#define TIM_EGR_UG ((uint8_t)0x01) /*!< Update Generation */ +#define TIM_EGR_CC1G ((uint8_t)0x02) /*!< Capture/Compare 1 Generation */ +#define TIM_EGR_CC2G ((uint8_t)0x04) /*!< Capture/Compare 2 Generation */ +#define TIM_EGR_CC3G ((uint8_t)0x08) /*!< Capture/Compare 3 Generation */ +#define TIM_EGR_CC4G ((uint8_t)0x10) /*!< Capture/Compare 4 Generation */ +#define TIM_EGR_COMG ((uint8_t)0x20) /*!< Capture/Compare Control Update Generation */ +#define TIM_EGR_TG ((uint8_t)0x40) /*!< Trigger Generation */ +#define TIM_EGR_BG ((uint8_t)0x80) /*!< Break Generation */ + +/****************** Bit definition for TIM_CCMR1 register *******************/ +#define TIM_CCMR1_CC1S ((uint16_t)0x0003) /*!< CC1S[1:0] bits (Capture/Compare 1 Selection) */ +#define TIM_CCMR1_CC1S_0 ((uint16_t)0x0001) /*!< Bit 0 */ +#define TIM_CCMR1_CC1S_1 ((uint16_t)0x0002) /*!< Bit 1 */ + +#define TIM_CCMR1_OC1FE ((uint16_t)0x0004) /*!< Output Compare 1 Fast enable */ +#define TIM_CCMR1_OC1PE ((uint16_t)0x0008) /*!< Output Compare 1 Preload enable */ + +#define TIM_CCMR1_OC1M ((uint16_t)0x0070) /*!< OC1M[2:0] bits (Output Compare 1 Mode) */ +#define TIM_CCMR1_OC1M_0 ((uint16_t)0x0010) /*!< Bit 0 */ +#define TIM_CCMR1_OC1M_1 ((uint16_t)0x0020) /*!< Bit 1 */ +#define TIM_CCMR1_OC1M_2 ((uint16_t)0x0040) /*!< Bit 2 */ + +#define TIM_CCMR1_OC1CE ((uint16_t)0x0080) /*!< Output Compare 1Clear Enable */ + +#define TIM_CCMR1_CC2S ((uint16_t)0x0300) /*!< CC2S[1:0] bits (Capture/Compare 2 Selection) */ +#define TIM_CCMR1_CC2S_0 ((uint16_t)0x0100) /*!< Bit 0 */ +#define TIM_CCMR1_CC2S_1 ((uint16_t)0x0200) /*!< Bit 1 */ + +#define TIM_CCMR1_OC2FE ((uint16_t)0x0400) /*!< Output Compare 2 Fast enable */ +#define TIM_CCMR1_OC2PE ((uint16_t)0x0800) /*!< Output Compare 2 Preload enable */ + +#define TIM_CCMR1_OC2M ((uint16_t)0x7000) /*!< OC2M[2:0] bits (Output Compare 2 Mode) */ +#define TIM_CCMR1_OC2M_0 ((uint16_t)0x1000) /*!< Bit 0 */ +#define TIM_CCMR1_OC2M_1 ((uint16_t)0x2000) /*!< Bit 1 */ +#define TIM_CCMR1_OC2M_2 ((uint16_t)0x4000) /*!< Bit 2 */ + +#define TIM_CCMR1_OC2CE ((uint16_t)0x8000) /*!< Output Compare 2 Clear Enable */ + +/*----------------------------------------------------------------------------*/ + +#define TIM_CCMR1_IC1PSC ((uint16_t)0x000C) /*!< IC1PSC[1:0] bits (Input Capture 1 Prescaler) */ +#define TIM_CCMR1_IC1PSC_0 ((uint16_t)0x0004) /*!< Bit 0 */ +#define TIM_CCMR1_IC1PSC_1 ((uint16_t)0x0008) /*!< Bit 1 */ + +#define TIM_CCMR1_IC1F ((uint16_t)0x00F0) /*!< IC1F[3:0] bits (Input Capture 1 Filter) */ +#define TIM_CCMR1_IC1F_0 ((uint16_t)0x0010) /*!< Bit 0 */ +#define TIM_CCMR1_IC1F_1 ((uint16_t)0x0020) /*!< Bit 1 */ +#define TIM_CCMR1_IC1F_2 ((uint16_t)0x0040) /*!< Bit 2 */ +#define TIM_CCMR1_IC1F_3 ((uint16_t)0x0080) /*!< Bit 3 */ + +#define TIM_CCMR1_IC2PSC ((uint16_t)0x0C00) /*!< IC2PSC[1:0] bits (Input Capture 2 Prescaler) */ +#define TIM_CCMR1_IC2PSC_0 ((uint16_t)0x0400) /*!< Bit 0 */ +#define TIM_CCMR1_IC2PSC_1 ((uint16_t)0x0800) /*!< Bit 1 */ + +#define TIM_CCMR1_IC2F ((uint16_t)0xF000) /*!< IC2F[3:0] bits (Input Capture 2 Filter) */ +#define TIM_CCMR1_IC2F_0 ((uint16_t)0x1000) /*!< Bit 0 */ +#define TIM_CCMR1_IC2F_1 ((uint16_t)0x2000) /*!< Bit 1 */ +#define TIM_CCMR1_IC2F_2 ((uint16_t)0x4000) /*!< Bit 2 */ +#define TIM_CCMR1_IC2F_3 ((uint16_t)0x8000) /*!< Bit 3 */ + +/****************** Bit definition for TIM_CCMR2 register *******************/ +#define TIM_CCMR2_CC3S ((uint16_t)0x0003) /*!< CC3S[1:0] bits (Capture/Compare 3 Selection) */ +#define TIM_CCMR2_CC3S_0 ((uint16_t)0x0001) /*!< Bit 0 */ +#define TIM_CCMR2_CC3S_1 ((uint16_t)0x0002) /*!< Bit 1 */ + +#define TIM_CCMR2_OC3FE ((uint16_t)0x0004) /*!< Output Compare 3 Fast enable */ +#define TIM_CCMR2_OC3PE ((uint16_t)0x0008) /*!< Output Compare 3 Preload enable */ + +#define TIM_CCMR2_OC3M ((uint16_t)0x0070) /*!< OC3M[2:0] bits (Output Compare 3 Mode) */ +#define TIM_CCMR2_OC3M_0 ((uint16_t)0x0010) /*!< Bit 0 */ +#define TIM_CCMR2_OC3M_1 ((uint16_t)0x0020) /*!< Bit 1 */ +#define TIM_CCMR2_OC3M_2 ((uint16_t)0x0040) /*!< Bit 2 */ + +#define TIM_CCMR2_OC3CE ((uint16_t)0x0080) /*!< Output Compare 3 Clear Enable */ + +#define TIM_CCMR2_CC4S ((uint16_t)0x0300) /*!< CC4S[1:0] bits (Capture/Compare 4 Selection) */ +#define TIM_CCMR2_CC4S_0 ((uint16_t)0x0100) /*!< Bit 0 */ +#define TIM_CCMR2_CC4S_1 ((uint16_t)0x0200) /*!< Bit 1 */ + +#define TIM_CCMR2_OC4FE ((uint16_t)0x0400) /*!< Output Compare 4 Fast enable */ +#define TIM_CCMR2_OC4PE ((uint16_t)0x0800) /*!< Output Compare 4 Preload enable */ + +#define TIM_CCMR2_OC4M ((uint16_t)0x7000) /*!< OC4M[2:0] bits (Output Compare 4 Mode) */ +#define TIM_CCMR2_OC4M_0 ((uint16_t)0x1000) /*!< Bit 0 */ +#define TIM_CCMR2_OC4M_1 ((uint16_t)0x2000) /*!< Bit 1 */ +#define TIM_CCMR2_OC4M_2 ((uint16_t)0x4000) /*!< Bit 2 */ + +#define TIM_CCMR2_OC4CE ((uint16_t)0x8000) /*!< Output Compare 4 Clear Enable */ + +/*----------------------------------------------------------------------------*/ + +#define TIM_CCMR2_IC3PSC ((uint16_t)0x000C) /*!< IC3PSC[1:0] bits (Input Capture 3 Prescaler) */ +#define TIM_CCMR2_IC3PSC_0 ((uint16_t)0x0004) /*!< Bit 0 */ +#define TIM_CCMR2_IC3PSC_1 ((uint16_t)0x0008) /*!< Bit 1 */ + +#define TIM_CCMR2_IC3F ((uint16_t)0x00F0) /*!< IC3F[3:0] bits (Input Capture 3 Filter) */ +#define TIM_CCMR2_IC3F_0 ((uint16_t)0x0010) /*!< Bit 0 */ +#define TIM_CCMR2_IC3F_1 ((uint16_t)0x0020) /*!< Bit 1 */ +#define TIM_CCMR2_IC3F_2 ((uint16_t)0x0040) /*!< Bit 2 */ +#define TIM_CCMR2_IC3F_3 ((uint16_t)0x0080) /*!< Bit 3 */ + +#define TIM_CCMR2_IC4PSC ((uint16_t)0x0C00) /*!< IC4PSC[1:0] bits (Input Capture 4 Prescaler) */ +#define TIM_CCMR2_IC4PSC_0 ((uint16_t)0x0400) /*!< Bit 0 */ +#define TIM_CCMR2_IC4PSC_1 ((uint16_t)0x0800) /*!< Bit 1 */ + +#define TIM_CCMR2_IC4F ((uint16_t)0xF000) /*!< IC4F[3:0] bits (Input Capture 4 Filter) */ +#define TIM_CCMR2_IC4F_0 ((uint16_t)0x1000) /*!< Bit 0 */ +#define TIM_CCMR2_IC4F_1 ((uint16_t)0x2000) /*!< Bit 1 */ +#define TIM_CCMR2_IC4F_2 ((uint16_t)0x4000) /*!< Bit 2 */ +#define TIM_CCMR2_IC4F_3 ((uint16_t)0x8000) /*!< Bit 3 */ + +/******************* Bit definition for TIM_CCER register *******************/ +#define TIM_CCER_CC1E ((uint16_t)0x0001) /*!< Capture/Compare 1 output enable */ +#define TIM_CCER_CC1P ((uint16_t)0x0002) /*!< Capture/Compare 1 output Polarity */ +#define TIM_CCER_CC1NE ((uint16_t)0x0004) /*!< Capture/Compare 1 Complementary output enable */ +#define TIM_CCER_CC1NP ((uint16_t)0x0008) /*!< Capture/Compare 1 Complementary output Polarity */ +#define TIM_CCER_CC2E ((uint16_t)0x0010) /*!< Capture/Compare 2 output enable */ +#define TIM_CCER_CC2P ((uint16_t)0x0020) /*!< Capture/Compare 2 output Polarity */ +#define TIM_CCER_CC2NE ((uint16_t)0x0040) /*!< Capture/Compare 2 Complementary output enable */ +#define TIM_CCER_CC2NP ((uint16_t)0x0080) /*!< Capture/Compare 2 Complementary output Polarity */ +#define TIM_CCER_CC3E ((uint16_t)0x0100) /*!< Capture/Compare 3 output enable */ +#define TIM_CCER_CC3P ((uint16_t)0x0200) /*!< Capture/Compare 3 output Polarity */ +#define TIM_CCER_CC3NE ((uint16_t)0x0400) /*!< Capture/Compare 3 Complementary output enable */ +#define TIM_CCER_CC3NP ((uint16_t)0x0800) /*!< Capture/Compare 3 Complementary output Polarity */ +#define TIM_CCER_CC4E ((uint16_t)0x1000) /*!< Capture/Compare 4 output enable */ +#define TIM_CCER_CC4P ((uint16_t)0x2000) /*!< Capture/Compare 4 output Polarity */ +#define TIM_CCER_CC4NP ((uint16_t)0x8000) /*!< Capture/Compare 4 Complementary output Polarity */ + +/******************* Bit definition for TIM_CNT register ********************/ +#define TIM_CNT_CNT ((uint16_t)0xFFFF) /*!< Counter Value */ + +/******************* Bit definition for TIM_PSC register ********************/ +#define TIM_PSC_PSC ((uint16_t)0xFFFF) /*!< Prescaler Value */ + +/******************* Bit definition for TIM_ARR register ********************/ +#define TIM_ARR_ARR ((uint16_t)0xFFFF) /*!< actual auto-reload Value */ + +/******************* Bit definition for TIM_RCR register ********************/ +#define TIM_RCR_REP ((uint8_t)0xFF) /*!< Repetition Counter Value */ + +/******************* Bit definition for TIM_CCR1 register *******************/ +#define TIM_CCR1_CCR1 ((uint16_t)0xFFFF) /*!< Capture/Compare 1 Value */ + +/******************* Bit definition for TIM_CCR2 register *******************/ +#define TIM_CCR2_CCR2 ((uint16_t)0xFFFF) /*!< Capture/Compare 2 Value */ + +/******************* Bit definition for TIM_CCR3 register *******************/ +#define TIM_CCR3_CCR3 ((uint16_t)0xFFFF) /*!< Capture/Compare 3 Value */ + +/******************* Bit definition for TIM_CCR4 register *******************/ +#define TIM_CCR4_CCR4 ((uint16_t)0xFFFF) /*!< Capture/Compare 4 Value */ + +/******************* Bit definition for TIM_BDTR register *******************/ +#define TIM_BDTR_DTG ((uint16_t)0x00FF) /*!< DTG[0:7] bits (Dead-Time Generator set-up) */ +#define TIM_BDTR_DTG_0 ((uint16_t)0x0001) /*!< Bit 0 */ +#define TIM_BDTR_DTG_1 ((uint16_t)0x0002) /*!< Bit 1 */ +#define TIM_BDTR_DTG_2 ((uint16_t)0x0004) /*!< Bit 2 */ +#define TIM_BDTR_DTG_3 ((uint16_t)0x0008) /*!< Bit 3 */ +#define TIM_BDTR_DTG_4 ((uint16_t)0x0010) /*!< Bit 4 */ +#define TIM_BDTR_DTG_5 ((uint16_t)0x0020) /*!< Bit 5 */ +#define TIM_BDTR_DTG_6 ((uint16_t)0x0040) /*!< Bit 6 */ +#define TIM_BDTR_DTG_7 ((uint16_t)0x0080) /*!< Bit 7 */ + +#define TIM_BDTR_LOCK ((uint16_t)0x0300) /*!< LOCK[1:0] bits (Lock Configuration) */ +#define TIM_BDTR_LOCK_0 ((uint16_t)0x0100) /*!< Bit 0 */ +#define TIM_BDTR_LOCK_1 ((uint16_t)0x0200) /*!< Bit 1 */ + +#define TIM_BDTR_OSSI ((uint16_t)0x0400) /*!< Off-State Selection for Idle mode */ +#define TIM_BDTR_OSSR ((uint16_t)0x0800) /*!< Off-State Selection for Run mode */ +#define TIM_BDTR_BKE ((uint16_t)0x1000) /*!< Break enable */ +#define TIM_BDTR_BKP ((uint16_t)0x2000) /*!< Break Polarity */ +#define TIM_BDTR_AOE ((uint16_t)0x4000) /*!< Automatic Output enable */ +#define TIM_BDTR_MOE ((uint16_t)0x8000) /*!< Main Output enable */ + +/******************* Bit definition for TIM_DCR register ********************/ +#define TIM_DCR_DBA ((uint16_t)0x001F) /*!< DBA[4:0] bits (DMA Base Address) */ +#define TIM_DCR_DBA_0 ((uint16_t)0x0001) /*!< Bit 0 */ +#define TIM_DCR_DBA_1 ((uint16_t)0x0002) /*!< Bit 1 */ +#define TIM_DCR_DBA_2 ((uint16_t)0x0004) /*!< Bit 2 */ +#define TIM_DCR_DBA_3 ((uint16_t)0x0008) /*!< Bit 3 */ +#define TIM_DCR_DBA_4 ((uint16_t)0x0010) /*!< Bit 4 */ + +#define TIM_DCR_DBL ((uint16_t)0x1F00) /*!< DBL[4:0] bits (DMA Burst Length) */ +#define TIM_DCR_DBL_0 ((uint16_t)0x0100) /*!< Bit 0 */ +#define TIM_DCR_DBL_1 ((uint16_t)0x0200) /*!< Bit 1 */ +#define TIM_DCR_DBL_2 ((uint16_t)0x0400) /*!< Bit 2 */ +#define TIM_DCR_DBL_3 ((uint16_t)0x0800) /*!< Bit 3 */ +#define TIM_DCR_DBL_4 ((uint16_t)0x1000) /*!< Bit 4 */ + +/******************* Bit definition for TIM_DMAR register *******************/ +#define TIM_DMAR_DMAB ((uint16_t)0xFFFF) /*!< DMA register for burst accesses */ + +/******************************************************************************/ +/* */ +/* Real-Time Clock */ +/* */ +/******************************************************************************/ + +/******************* Bit definition for RTC_CRH register ********************/ +#define RTC_CRH_SECIE ((uint8_t)0x01) /*!< Second Interrupt Enable */ +#define RTC_CRH_ALRIE ((uint8_t)0x02) /*!< Alarm Interrupt Enable */ +#define RTC_CRH_OWIE ((uint8_t)0x04) /*!< OverfloW Interrupt Enable */ + +/******************* Bit definition for RTC_CRL register ********************/ +#define RTC_CRL_SECF ((uint8_t)0x01) /*!< Second Flag */ +#define RTC_CRL_ALRF ((uint8_t)0x02) /*!< Alarm Flag */ +#define RTC_CRL_OWF ((uint8_t)0x04) /*!< OverfloW Flag */ +#define RTC_CRL_RSF ((uint8_t)0x08) /*!< Registers Synchronized Flag */ +#define RTC_CRL_CNF ((uint8_t)0x10) /*!< Configuration Flag */ +#define RTC_CRL_RTOFF ((uint8_t)0x20) /*!< RTC operation OFF */ + +/******************* Bit definition for RTC_PRLH register *******************/ +#define RTC_PRLH_PRL ((uint16_t)0x000F) /*!< RTC Prescaler Reload Value High */ + +/******************* Bit definition for RTC_PRLL register *******************/ +#define RTC_PRLL_PRL ((uint16_t)0xFFFF) /*!< RTC Prescaler Reload Value Low */ + +/******************* Bit definition for RTC_DIVH register *******************/ +#define RTC_DIVH_RTC_DIV ((uint16_t)0x000F) /*!< RTC Clock Divider High */ + +/******************* Bit definition for RTC_DIVL register *******************/ +#define RTC_DIVL_RTC_DIV ((uint16_t)0xFFFF) /*!< RTC Clock Divider Low */ + +/******************* Bit definition for RTC_CNTH register *******************/ +#define RTC_CNTH_RTC_CNT ((uint16_t)0xFFFF) /*!< RTC Counter High */ + +/******************* Bit definition for RTC_CNTL register *******************/ +#define RTC_CNTL_RTC_CNT ((uint16_t)0xFFFF) /*!< RTC Counter Low */ + +/******************* Bit definition for RTC_ALRH register *******************/ +#define RTC_ALRH_RTC_ALR ((uint16_t)0xFFFF) /*!< RTC Alarm High */ + +/******************* Bit definition for RTC_ALRL register *******************/ +#define RTC_ALRL_RTC_ALR ((uint16_t)0xFFFF) /*!< RTC Alarm Low */ + +/******************************************************************************/ +/* */ +/* Independent WATCHDOG */ +/* */ +/******************************************************************************/ + +/******************* Bit definition for IWDG_KR register ********************/ +#define IWDG_KR_KEY ((uint16_t)0xFFFF) /*!< Key value (write only, read 0000h) */ + +/******************* Bit definition for IWDG_PR register ********************/ +#define IWDG_PR_PR ((uint8_t)0x07) /*!< PR[2:0] (Prescaler divider) */ +#define IWDG_PR_PR_0 ((uint8_t)0x01) /*!< Bit 0 */ +#define IWDG_PR_PR_1 ((uint8_t)0x02) /*!< Bit 1 */ +#define IWDG_PR_PR_2 ((uint8_t)0x04) /*!< Bit 2 */ + +/******************* Bit definition for IWDG_RLR register *******************/ +#define IWDG_RLR_RL ((uint16_t)0x0FFF) /*!< Watchdog counter reload value */ + +/******************* Bit definition for IWDG_SR register ********************/ +#define IWDG_SR_PVU ((uint8_t)0x01) /*!< Watchdog prescaler value update */ +#define IWDG_SR_RVU ((uint8_t)0x02) /*!< Watchdog counter reload value update */ + +/******************************************************************************/ +/* */ +/* Window WATCHDOG */ +/* */ +/******************************************************************************/ + +/******************* Bit definition for WWDG_CR register ********************/ +#define WWDG_CR_T ((uint8_t)0x7F) /*!< T[6:0] bits (7-Bit counter (MSB to LSB)) */ +#define WWDG_CR_T0 ((uint8_t)0x01) /*!< Bit 0 */ +#define WWDG_CR_T1 ((uint8_t)0x02) /*!< Bit 1 */ +#define WWDG_CR_T2 ((uint8_t)0x04) /*!< Bit 2 */ +#define WWDG_CR_T3 ((uint8_t)0x08) /*!< Bit 3 */ +#define WWDG_CR_T4 ((uint8_t)0x10) /*!< Bit 4 */ +#define WWDG_CR_T5 ((uint8_t)0x20) /*!< Bit 5 */ +#define WWDG_CR_T6 ((uint8_t)0x40) /*!< Bit 6 */ + +#define WWDG_CR_WDGA ((uint8_t)0x80) /*!< Activation bit */ + +/******************* Bit definition for WWDG_CFR register *******************/ +#define WWDG_CFR_W ((uint16_t)0x007F) /*!< W[6:0] bits (7-bit window value) */ +#define WWDG_CFR_W0 ((uint16_t)0x0001) /*!< Bit 0 */ +#define WWDG_CFR_W1 ((uint16_t)0x0002) /*!< Bit 1 */ +#define WWDG_CFR_W2 ((uint16_t)0x0004) /*!< Bit 2 */ +#define WWDG_CFR_W3 ((uint16_t)0x0008) /*!< Bit 3 */ +#define WWDG_CFR_W4 ((uint16_t)0x0010) /*!< Bit 4 */ +#define WWDG_CFR_W5 ((uint16_t)0x0020) /*!< Bit 5 */ +#define WWDG_CFR_W6 ((uint16_t)0x0040) /*!< Bit 6 */ + +#define WWDG_CFR_WDGTB ((uint16_t)0x0180) /*!< WDGTB[1:0] bits (Timer Base) */ +#define WWDG_CFR_WDGTB0 ((uint16_t)0x0080) /*!< Bit 0 */ +#define WWDG_CFR_WDGTB1 ((uint16_t)0x0100) /*!< Bit 1 */ + +#define WWDG_CFR_EWI ((uint16_t)0x0200) /*!< Early Wakeup Interrupt */ + +/******************* Bit definition for WWDG_SR register ********************/ +#define WWDG_SR_EWIF ((uint8_t)0x01) /*!< Early Wakeup Interrupt Flag */ + +/******************************************************************************/ +/* */ +/* Flexible Static Memory Controller */ +/* */ +/******************************************************************************/ + +/****************** Bit definition for FSMC_BCR1 register *******************/ +#define FSMC_BCR1_MBKEN ((uint32_t)0x00000001) /*!< Memory bank enable bit */ +#define FSMC_BCR1_MUXEN ((uint32_t)0x00000002) /*!< Address/data multiplexing enable bit */ + +#define FSMC_BCR1_MTYP ((uint32_t)0x0000000C) /*!< MTYP[1:0] bits (Memory type) */ +#define FSMC_BCR1_MTYP_0 ((uint32_t)0x00000004) /*!< Bit 0 */ +#define FSMC_BCR1_MTYP_1 ((uint32_t)0x00000008) /*!< Bit 1 */ + +#define FSMC_BCR1_MWID ((uint32_t)0x00000030) /*!< MWID[1:0] bits (Memory data bus width) */ +#define FSMC_BCR1_MWID_0 ((uint32_t)0x00000010) /*!< Bit 0 */ +#define FSMC_BCR1_MWID_1 ((uint32_t)0x00000020) /*!< Bit 1 */ + +#define FSMC_BCR1_FACCEN ((uint32_t)0x00000040) /*!< Flash access enable */ +#define FSMC_BCR1_BURSTEN ((uint32_t)0x00000100) /*!< Burst enable bit */ +#define FSMC_BCR1_WAITPOL ((uint32_t)0x00000200) /*!< Wait signal polarity bit */ +#define FSMC_BCR1_WRAPMOD ((uint32_t)0x00000400) /*!< Wrapped burst mode support */ +#define FSMC_BCR1_WAITCFG ((uint32_t)0x00000800) /*!< Wait timing configuration */ +#define FSMC_BCR1_WREN ((uint32_t)0x00001000) /*!< Write enable bit */ +#define FSMC_BCR1_WAITEN ((uint32_t)0x00002000) /*!< Wait enable bit */ +#define FSMC_BCR1_EXTMOD ((uint32_t)0x00004000) /*!< Extended mode enable */ +#define FSMC_BCR1_ASYNCWAIT ((uint32_t)0x00008000) /*!< Asynchronous wait */ +#define FSMC_BCR1_CBURSTRW ((uint32_t)0x00080000) /*!< Write burst enable */ + +/****************** Bit definition for FSMC_BCR2 register *******************/ +#define FSMC_BCR2_MBKEN ((uint32_t)0x00000001) /*!< Memory bank enable bit */ +#define FSMC_BCR2_MUXEN ((uint32_t)0x00000002) /*!< Address/data multiplexing enable bit */ + +#define FSMC_BCR2_MTYP ((uint32_t)0x0000000C) /*!< MTYP[1:0] bits (Memory type) */ +#define FSMC_BCR2_MTYP_0 ((uint32_t)0x00000004) /*!< Bit 0 */ +#define FSMC_BCR2_MTYP_1 ((uint32_t)0x00000008) /*!< Bit 1 */ + +#define FSMC_BCR2_MWID ((uint32_t)0x00000030) /*!< MWID[1:0] bits (Memory data bus width) */ +#define FSMC_BCR2_MWID_0 ((uint32_t)0x00000010) /*!< Bit 0 */ +#define FSMC_BCR2_MWID_1 ((uint32_t)0x00000020) /*!< Bit 1 */ + +#define FSMC_BCR2_FACCEN ((uint32_t)0x00000040) /*!< Flash access enable */ +#define FSMC_BCR2_BURSTEN ((uint32_t)0x00000100) /*!< Burst enable bit */ +#define FSMC_BCR2_WAITPOL ((uint32_t)0x00000200) /*!< Wait signal polarity bit */ +#define FSMC_BCR2_WRAPMOD ((uint32_t)0x00000400) /*!< Wrapped burst mode support */ +#define FSMC_BCR2_WAITCFG ((uint32_t)0x00000800) /*!< Wait timing configuration */ +#define FSMC_BCR2_WREN ((uint32_t)0x00001000) /*!< Write enable bit */ +#define FSMC_BCR2_WAITEN ((uint32_t)0x00002000) /*!< Wait enable bit */ +#define FSMC_BCR2_EXTMOD ((uint32_t)0x00004000) /*!< Extended mode enable */ +#define FSMC_BCR2_ASYNCWAIT ((uint32_t)0x00008000) /*!< Asynchronous wait */ +#define FSMC_BCR2_CBURSTRW ((uint32_t)0x00080000) /*!< Write burst enable */ + +/****************** Bit definition for FSMC_BCR3 register *******************/ +#define FSMC_BCR3_MBKEN ((uint32_t)0x00000001) /*!< Memory bank enable bit */ +#define FSMC_BCR3_MUXEN ((uint32_t)0x00000002) /*!< Address/data multiplexing enable bit */ + +#define FSMC_BCR3_MTYP ((uint32_t)0x0000000C) /*!< MTYP[1:0] bits (Memory type) */ +#define FSMC_BCR3_MTYP_0 ((uint32_t)0x00000004) /*!< Bit 0 */ +#define FSMC_BCR3_MTYP_1 ((uint32_t)0x00000008) /*!< Bit 1 */ + +#define FSMC_BCR3_MWID ((uint32_t)0x00000030) /*!< MWID[1:0] bits (Memory data bus width) */ +#define FSMC_BCR3_MWID_0 ((uint32_t)0x00000010) /*!< Bit 0 */ +#define FSMC_BCR3_MWID_1 ((uint32_t)0x00000020) /*!< Bit 1 */ + +#define FSMC_BCR3_FACCEN ((uint32_t)0x00000040) /*!< Flash access enable */ +#define FSMC_BCR3_BURSTEN ((uint32_t)0x00000100) /*!< Burst enable bit */ +#define FSMC_BCR3_WAITPOL ((uint32_t)0x00000200) /*!< Wait signal polarity bit. */ +#define FSMC_BCR3_WRAPMOD ((uint32_t)0x00000400) /*!< Wrapped burst mode support */ +#define FSMC_BCR3_WAITCFG ((uint32_t)0x00000800) /*!< Wait timing configuration */ +#define FSMC_BCR3_WREN ((uint32_t)0x00001000) /*!< Write enable bit */ +#define FSMC_BCR3_WAITEN ((uint32_t)0x00002000) /*!< Wait enable bit */ +#define FSMC_BCR3_EXTMOD ((uint32_t)0x00004000) /*!< Extended mode enable */ +#define FSMC_BCR3_ASYNCWAIT ((uint32_t)0x00008000) /*!< Asynchronous wait */ +#define FSMC_BCR3_CBURSTRW ((uint32_t)0x00080000) /*!< Write burst enable */ + +/****************** Bit definition for FSMC_BCR4 register *******************/ +#define FSMC_BCR4_MBKEN ((uint32_t)0x00000001) /*!< Memory bank enable bit */ +#define FSMC_BCR4_MUXEN ((uint32_t)0x00000002) /*!< Address/data multiplexing enable bit */ + +#define FSMC_BCR4_MTYP ((uint32_t)0x0000000C) /*!< MTYP[1:0] bits (Memory type) */ +#define FSMC_BCR4_MTYP_0 ((uint32_t)0x00000004) /*!< Bit 0 */ +#define FSMC_BCR4_MTYP_1 ((uint32_t)0x00000008) /*!< Bit 1 */ + +#define FSMC_BCR4_MWID ((uint32_t)0x00000030) /*!< MWID[1:0] bits (Memory data bus width) */ +#define FSMC_BCR4_MWID_0 ((uint32_t)0x00000010) /*!< Bit 0 */ +#define FSMC_BCR4_MWID_1 ((uint32_t)0x00000020) /*!< Bit 1 */ + +#define FSMC_BCR4_FACCEN ((uint32_t)0x00000040) /*!< Flash access enable */ +#define FSMC_BCR4_BURSTEN ((uint32_t)0x00000100) /*!< Burst enable bit */ +#define FSMC_BCR4_WAITPOL ((uint32_t)0x00000200) /*!< Wait signal polarity bit */ +#define FSMC_BCR4_WRAPMOD ((uint32_t)0x00000400) /*!< Wrapped burst mode support */ +#define FSMC_BCR4_WAITCFG ((uint32_t)0x00000800) /*!< Wait timing configuration */ +#define FSMC_BCR4_WREN ((uint32_t)0x00001000) /*!< Write enable bit */ +#define FSMC_BCR4_WAITEN ((uint32_t)0x00002000) /*!< Wait enable bit */ +#define FSMC_BCR4_EXTMOD ((uint32_t)0x00004000) /*!< Extended mode enable */ +#define FSMC_BCR4_ASYNCWAIT ((uint32_t)0x00008000) /*!< Asynchronous wait */ +#define FSMC_BCR4_CBURSTRW ((uint32_t)0x00080000) /*!< Write burst enable */ + +/****************** Bit definition for FSMC_BTR1 register ******************/ +#define FSMC_BTR1_ADDSET ((uint32_t)0x0000000F) /*!< ADDSET[3:0] bits (Address setup phase duration) */ +#define FSMC_BTR1_ADDSET_0 ((uint32_t)0x00000001) /*!< Bit 0 */ +#define FSMC_BTR1_ADDSET_1 ((uint32_t)0x00000002) /*!< Bit 1 */ +#define FSMC_BTR1_ADDSET_2 ((uint32_t)0x00000004) /*!< Bit 2 */ +#define FSMC_BTR1_ADDSET_3 ((uint32_t)0x00000008) /*!< Bit 3 */ + +#define FSMC_BTR1_ADDHLD ((uint32_t)0x000000F0) /*!< ADDHLD[3:0] bits (Address-hold phase duration) */ +#define FSMC_BTR1_ADDHLD_0 ((uint32_t)0x00000010) /*!< Bit 0 */ +#define FSMC_BTR1_ADDHLD_1 ((uint32_t)0x00000020) /*!< Bit 1 */ +#define FSMC_BTR1_ADDHLD_2 ((uint32_t)0x00000040) /*!< Bit 2 */ +#define FSMC_BTR1_ADDHLD_3 ((uint32_t)0x00000080) /*!< Bit 3 */ + +#define FSMC_BTR1_DATAST ((uint32_t)0x0000FF00) /*!< DATAST [3:0] bits (Data-phase duration) */ +#define FSMC_BTR1_DATAST_0 ((uint32_t)0x00000100) /*!< Bit 0 */ +#define FSMC_BTR1_DATAST_1 ((uint32_t)0x00000200) /*!< Bit 1 */ +#define FSMC_BTR1_DATAST_2 ((uint32_t)0x00000400) /*!< Bit 2 */ +#define FSMC_BTR1_DATAST_3 ((uint32_t)0x00000800) /*!< Bit 3 */ + +#define FSMC_BTR1_BUSTURN ((uint32_t)0x000F0000) /*!< BUSTURN[3:0] bits (Bus turnaround phase duration) */ +#define FSMC_BTR1_BUSTURN_0 ((uint32_t)0x00010000) /*!< Bit 0 */ +#define FSMC_BTR1_BUSTURN_1 ((uint32_t)0x00020000) /*!< Bit 1 */ +#define FSMC_BTR1_BUSTURN_2 ((uint32_t)0x00040000) /*!< Bit 2 */ +#define FSMC_BTR1_BUSTURN_3 ((uint32_t)0x00080000) /*!< Bit 3 */ + +#define FSMC_BTR1_CLKDIV ((uint32_t)0x00F00000) /*!< CLKDIV[3:0] bits (Clock divide ratio) */ +#define FSMC_BTR1_CLKDIV_0 ((uint32_t)0x00100000) /*!< Bit 0 */ +#define FSMC_BTR1_CLKDIV_1 ((uint32_t)0x00200000) /*!< Bit 1 */ +#define FSMC_BTR1_CLKDIV_2 ((uint32_t)0x00400000) /*!< Bit 2 */ +#define FSMC_BTR1_CLKDIV_3 ((uint32_t)0x00800000) /*!< Bit 3 */ + +#define FSMC_BTR1_DATLAT ((uint32_t)0x0F000000) /*!< DATLA[3:0] bits (Data latency) */ +#define FSMC_BTR1_DATLAT_0 ((uint32_t)0x01000000) /*!< Bit 0 */ +#define FSMC_BTR1_DATLAT_1 ((uint32_t)0x02000000) /*!< Bit 1 */ +#define FSMC_BTR1_DATLAT_2 ((uint32_t)0x04000000) /*!< Bit 2 */ +#define FSMC_BTR1_DATLAT_3 ((uint32_t)0x08000000) /*!< Bit 3 */ + +#define FSMC_BTR1_ACCMOD ((uint32_t)0x30000000) /*!< ACCMOD[1:0] bits (Access mode) */ +#define FSMC_BTR1_ACCMOD_0 ((uint32_t)0x10000000) /*!< Bit 0 */ +#define FSMC_BTR1_ACCMOD_1 ((uint32_t)0x20000000) /*!< Bit 1 */ + +/****************** Bit definition for FSMC_BTR2 register *******************/ +#define FSMC_BTR2_ADDSET ((uint32_t)0x0000000F) /*!< ADDSET[3:0] bits (Address setup phase duration) */ +#define FSMC_BTR2_ADDSET_0 ((uint32_t)0x00000001) /*!< Bit 0 */ +#define FSMC_BTR2_ADDSET_1 ((uint32_t)0x00000002) /*!< Bit 1 */ +#define FSMC_BTR2_ADDSET_2 ((uint32_t)0x00000004) /*!< Bit 2 */ +#define FSMC_BTR2_ADDSET_3 ((uint32_t)0x00000008) /*!< Bit 3 */ + +#define FSMC_BTR2_ADDHLD ((uint32_t)0x000000F0) /*!< ADDHLD[3:0] bits (Address-hold phase duration) */ +#define FSMC_BTR2_ADDHLD_0 ((uint32_t)0x00000010) /*!< Bit 0 */ +#define FSMC_BTR2_ADDHLD_1 ((uint32_t)0x00000020) /*!< Bit 1 */ +#define FSMC_BTR2_ADDHLD_2 ((uint32_t)0x00000040) /*!< Bit 2 */ +#define FSMC_BTR2_ADDHLD_3 ((uint32_t)0x00000080) /*!< Bit 3 */ + +#define FSMC_BTR2_DATAST ((uint32_t)0x0000FF00) /*!< DATAST [3:0] bits (Data-phase duration) */ +#define FSMC_BTR2_DATAST_0 ((uint32_t)0x00000100) /*!< Bit 0 */ +#define FSMC_BTR2_DATAST_1 ((uint32_t)0x00000200) /*!< Bit 1 */ +#define FSMC_BTR2_DATAST_2 ((uint32_t)0x00000400) /*!< Bit 2 */ +#define FSMC_BTR2_DATAST_3 ((uint32_t)0x00000800) /*!< Bit 3 */ + +#define FSMC_BTR2_BUSTURN ((uint32_t)0x000F0000) /*!< BUSTURN[3:0] bits (Bus turnaround phase duration) */ +#define FSMC_BTR2_BUSTURN_0 ((uint32_t)0x00010000) /*!< Bit 0 */ +#define FSMC_BTR2_BUSTURN_1 ((uint32_t)0x00020000) /*!< Bit 1 */ +#define FSMC_BTR2_BUSTURN_2 ((uint32_t)0x00040000) /*!< Bit 2 */ +#define FSMC_BTR2_BUSTURN_3 ((uint32_t)0x00080000) /*!< Bit 3 */ + +#define FSMC_BTR2_CLKDIV ((uint32_t)0x00F00000) /*!< CLKDIV[3:0] bits (Clock divide ratio) */ +#define FSMC_BTR2_CLKDIV_0 ((uint32_t)0x00100000) /*!< Bit 0 */ +#define FSMC_BTR2_CLKDIV_1 ((uint32_t)0x00200000) /*!< Bit 1 */ +#define FSMC_BTR2_CLKDIV_2 ((uint32_t)0x00400000) /*!< Bit 2 */ +#define FSMC_BTR2_CLKDIV_3 ((uint32_t)0x00800000) /*!< Bit 3 */ + +#define FSMC_BTR2_DATLAT ((uint32_t)0x0F000000) /*!< DATLA[3:0] bits (Data latency) */ +#define FSMC_BTR2_DATLAT_0 ((uint32_t)0x01000000) /*!< Bit 0 */ +#define FSMC_BTR2_DATLAT_1 ((uint32_t)0x02000000) /*!< Bit 1 */ +#define FSMC_BTR2_DATLAT_2 ((uint32_t)0x04000000) /*!< Bit 2 */ +#define FSMC_BTR2_DATLAT_3 ((uint32_t)0x08000000) /*!< Bit 3 */ + +#define FSMC_BTR2_ACCMOD ((uint32_t)0x30000000) /*!< ACCMOD[1:0] bits (Access mode) */ +#define FSMC_BTR2_ACCMOD_0 ((uint32_t)0x10000000) /*!< Bit 0 */ +#define FSMC_BTR2_ACCMOD_1 ((uint32_t)0x20000000) /*!< Bit 1 */ + +/******************* Bit definition for FSMC_BTR3 register *******************/ +#define FSMC_BTR3_ADDSET ((uint32_t)0x0000000F) /*!< ADDSET[3:0] bits (Address setup phase duration) */ +#define FSMC_BTR3_ADDSET_0 ((uint32_t)0x00000001) /*!< Bit 0 */ +#define FSMC_BTR3_ADDSET_1 ((uint32_t)0x00000002) /*!< Bit 1 */ +#define FSMC_BTR3_ADDSET_2 ((uint32_t)0x00000004) /*!< Bit 2 */ +#define FSMC_BTR3_ADDSET_3 ((uint32_t)0x00000008) /*!< Bit 3 */ + +#define FSMC_BTR3_ADDHLD ((uint32_t)0x000000F0) /*!< ADDHLD[3:0] bits (Address-hold phase duration) */ +#define FSMC_BTR3_ADDHLD_0 ((uint32_t)0x00000010) /*!< Bit 0 */ +#define FSMC_BTR3_ADDHLD_1 ((uint32_t)0x00000020) /*!< Bit 1 */ +#define FSMC_BTR3_ADDHLD_2 ((uint32_t)0x00000040) /*!< Bit 2 */ +#define FSMC_BTR3_ADDHLD_3 ((uint32_t)0x00000080) /*!< Bit 3 */ + +#define FSMC_BTR3_DATAST ((uint32_t)0x0000FF00) /*!< DATAST [3:0] bits (Data-phase duration) */ +#define FSMC_BTR3_DATAST_0 ((uint32_t)0x00000100) /*!< Bit 0 */ +#define FSMC_BTR3_DATAST_1 ((uint32_t)0x00000200) /*!< Bit 1 */ +#define FSMC_BTR3_DATAST_2 ((uint32_t)0x00000400) /*!< Bit 2 */ +#define FSMC_BTR3_DATAST_3 ((uint32_t)0x00000800) /*!< Bit 3 */ + +#define FSMC_BTR3_BUSTURN ((uint32_t)0x000F0000) /*!< BUSTURN[3:0] bits (Bus turnaround phase duration) */ +#define FSMC_BTR3_BUSTURN_0 ((uint32_t)0x00010000) /*!< Bit 0 */ +#define FSMC_BTR3_BUSTURN_1 ((uint32_t)0x00020000) /*!< Bit 1 */ +#define FSMC_BTR3_BUSTURN_2 ((uint32_t)0x00040000) /*!< Bit 2 */ +#define FSMC_BTR3_BUSTURN_3 ((uint32_t)0x00080000) /*!< Bit 3 */ + +#define FSMC_BTR3_CLKDIV ((uint32_t)0x00F00000) /*!< CLKDIV[3:0] bits (Clock divide ratio) */ +#define FSMC_BTR3_CLKDIV_0 ((uint32_t)0x00100000) /*!< Bit 0 */ +#define FSMC_BTR3_CLKDIV_1 ((uint32_t)0x00200000) /*!< Bit 1 */ +#define FSMC_BTR3_CLKDIV_2 ((uint32_t)0x00400000) /*!< Bit 2 */ +#define FSMC_BTR3_CLKDIV_3 ((uint32_t)0x00800000) /*!< Bit 3 */ + +#define FSMC_BTR3_DATLAT ((uint32_t)0x0F000000) /*!< DATLA[3:0] bits (Data latency) */ +#define FSMC_BTR3_DATLAT_0 ((uint32_t)0x01000000) /*!< Bit 0 */ +#define FSMC_BTR3_DATLAT_1 ((uint32_t)0x02000000) /*!< Bit 1 */ +#define FSMC_BTR3_DATLAT_2 ((uint32_t)0x04000000) /*!< Bit 2 */ +#define FSMC_BTR3_DATLAT_3 ((uint32_t)0x08000000) /*!< Bit 3 */ + +#define FSMC_BTR3_ACCMOD ((uint32_t)0x30000000) /*!< ACCMOD[1:0] bits (Access mode) */ +#define FSMC_BTR3_ACCMOD_0 ((uint32_t)0x10000000) /*!< Bit 0 */ +#define FSMC_BTR3_ACCMOD_1 ((uint32_t)0x20000000) /*!< Bit 1 */ + +/****************** Bit definition for FSMC_BTR4 register *******************/ +#define FSMC_BTR4_ADDSET ((uint32_t)0x0000000F) /*!< ADDSET[3:0] bits (Address setup phase duration) */ +#define FSMC_BTR4_ADDSET_0 ((uint32_t)0x00000001) /*!< Bit 0 */ +#define FSMC_BTR4_ADDSET_1 ((uint32_t)0x00000002) /*!< Bit 1 */ +#define FSMC_BTR4_ADDSET_2 ((uint32_t)0x00000004) /*!< Bit 2 */ +#define FSMC_BTR4_ADDSET_3 ((uint32_t)0x00000008) /*!< Bit 3 */ + +#define FSMC_BTR4_ADDHLD ((uint32_t)0x000000F0) /*!< ADDHLD[3:0] bits (Address-hold phase duration) */ +#define FSMC_BTR4_ADDHLD_0 ((uint32_t)0x00000010) /*!< Bit 0 */ +#define FSMC_BTR4_ADDHLD_1 ((uint32_t)0x00000020) /*!< Bit 1 */ +#define FSMC_BTR4_ADDHLD_2 ((uint32_t)0x00000040) /*!< Bit 2 */ +#define FSMC_BTR4_ADDHLD_3 ((uint32_t)0x00000080) /*!< Bit 3 */ + +#define FSMC_BTR4_DATAST ((uint32_t)0x0000FF00) /*!< DATAST [3:0] bits (Data-phase duration) */ +#define FSMC_BTR4_DATAST_0 ((uint32_t)0x00000100) /*!< Bit 0 */ +#define FSMC_BTR4_DATAST_1 ((uint32_t)0x00000200) /*!< Bit 1 */ +#define FSMC_BTR4_DATAST_2 ((uint32_t)0x00000400) /*!< Bit 2 */ +#define FSMC_BTR4_DATAST_3 ((uint32_t)0x00000800) /*!< Bit 3 */ + +#define FSMC_BTR4_BUSTURN ((uint32_t)0x000F0000) /*!< BUSTURN[3:0] bits (Bus turnaround phase duration) */ +#define FSMC_BTR4_BUSTURN_0 ((uint32_t)0x00010000) /*!< Bit 0 */ +#define FSMC_BTR4_BUSTURN_1 ((uint32_t)0x00020000) /*!< Bit 1 */ +#define FSMC_BTR4_BUSTURN_2 ((uint32_t)0x00040000) /*!< Bit 2 */ +#define FSMC_BTR4_BUSTURN_3 ((uint32_t)0x00080000) /*!< Bit 3 */ + +#define FSMC_BTR4_CLKDIV ((uint32_t)0x00F00000) /*!< CLKDIV[3:0] bits (Clock divide ratio) */ +#define FSMC_BTR4_CLKDIV_0 ((uint32_t)0x00100000) /*!< Bit 0 */ +#define FSMC_BTR4_CLKDIV_1 ((uint32_t)0x00200000) /*!< Bit 1 */ +#define FSMC_BTR4_CLKDIV_2 ((uint32_t)0x00400000) /*!< Bit 2 */ +#define FSMC_BTR4_CLKDIV_3 ((uint32_t)0x00800000) /*!< Bit 3 */ + +#define FSMC_BTR4_DATLAT ((uint32_t)0x0F000000) /*!< DATLA[3:0] bits (Data latency) */ +#define FSMC_BTR4_DATLAT_0 ((uint32_t)0x01000000) /*!< Bit 0 */ +#define FSMC_BTR4_DATLAT_1 ((uint32_t)0x02000000) /*!< Bit 1 */ +#define FSMC_BTR4_DATLAT_2 ((uint32_t)0x04000000) /*!< Bit 2 */ +#define FSMC_BTR4_DATLAT_3 ((uint32_t)0x08000000) /*!< Bit 3 */ + +#define FSMC_BTR4_ACCMOD ((uint32_t)0x30000000) /*!< ACCMOD[1:0] bits (Access mode) */ +#define FSMC_BTR4_ACCMOD_0 ((uint32_t)0x10000000) /*!< Bit 0 */ +#define FSMC_BTR4_ACCMOD_1 ((uint32_t)0x20000000) /*!< Bit 1 */ + +/****************** Bit definition for FSMC_BWTR1 register ******************/ +#define FSMC_BWTR1_ADDSET ((uint32_t)0x0000000F) /*!< ADDSET[3:0] bits (Address setup phase duration) */ +#define FSMC_BWTR1_ADDSET_0 ((uint32_t)0x00000001) /*!< Bit 0 */ +#define FSMC_BWTR1_ADDSET_1 ((uint32_t)0x00000002) /*!< Bit 1 */ +#define FSMC_BWTR1_ADDSET_2 ((uint32_t)0x00000004) /*!< Bit 2 */ +#define FSMC_BWTR1_ADDSET_3 ((uint32_t)0x00000008) /*!< Bit 3 */ + +#define FSMC_BWTR1_ADDHLD ((uint32_t)0x000000F0) /*!< ADDHLD[3:0] bits (Address-hold phase duration) */ +#define FSMC_BWTR1_ADDHLD_0 ((uint32_t)0x00000010) /*!< Bit 0 */ +#define FSMC_BWTR1_ADDHLD_1 ((uint32_t)0x00000020) /*!< Bit 1 */ +#define FSMC_BWTR1_ADDHLD_2 ((uint32_t)0x00000040) /*!< Bit 2 */ +#define FSMC_BWTR1_ADDHLD_3 ((uint32_t)0x00000080) /*!< Bit 3 */ + +#define FSMC_BWTR1_DATAST ((uint32_t)0x0000FF00) /*!< DATAST [3:0] bits (Data-phase duration) */ +#define FSMC_BWTR1_DATAST_0 ((uint32_t)0x00000100) /*!< Bit 0 */ +#define FSMC_BWTR1_DATAST_1 ((uint32_t)0x00000200) /*!< Bit 1 */ +#define FSMC_BWTR1_DATAST_2 ((uint32_t)0x00000400) /*!< Bit 2 */ +#define FSMC_BWTR1_DATAST_3 ((uint32_t)0x00000800) /*!< Bit 3 */ + +#define FSMC_BWTR1_CLKDIV ((uint32_t)0x00F00000) /*!< CLKDIV[3:0] bits (Clock divide ratio) */ +#define FSMC_BWTR1_CLKDIV_0 ((uint32_t)0x00100000) /*!< Bit 0 */ +#define FSMC_BWTR1_CLKDIV_1 ((uint32_t)0x00200000) /*!< Bit 1 */ +#define FSMC_BWTR1_CLKDIV_2 ((uint32_t)0x00400000) /*!< Bit 2 */ +#define FSMC_BWTR1_CLKDIV_3 ((uint32_t)0x00800000) /*!< Bit 3 */ + +#define FSMC_BWTR1_DATLAT ((uint32_t)0x0F000000) /*!< DATLA[3:0] bits (Data latency) */ +#define FSMC_BWTR1_DATLAT_0 ((uint32_t)0x01000000) /*!< Bit 0 */ +#define FSMC_BWTR1_DATLAT_1 ((uint32_t)0x02000000) /*!< Bit 1 */ +#define FSMC_BWTR1_DATLAT_2 ((uint32_t)0x04000000) /*!< Bit 2 */ +#define FSMC_BWTR1_DATLAT_3 ((uint32_t)0x08000000) /*!< Bit 3 */ + +#define FSMC_BWTR1_ACCMOD ((uint32_t)0x30000000) /*!< ACCMOD[1:0] bits (Access mode) */ +#define FSMC_BWTR1_ACCMOD_0 ((uint32_t)0x10000000) /*!< Bit 0 */ +#define FSMC_BWTR1_ACCMOD_1 ((uint32_t)0x20000000) /*!< Bit 1 */ + +/****************** Bit definition for FSMC_BWTR2 register ******************/ +#define FSMC_BWTR2_ADDSET ((uint32_t)0x0000000F) /*!< ADDSET[3:0] bits (Address setup phase duration) */ +#define FSMC_BWTR2_ADDSET_0 ((uint32_t)0x00000001) /*!< Bit 0 */ +#define FSMC_BWTR2_ADDSET_1 ((uint32_t)0x00000002) /*!< Bit 1 */ +#define FSMC_BWTR2_ADDSET_2 ((uint32_t)0x00000004) /*!< Bit 2 */ +#define FSMC_BWTR2_ADDSET_3 ((uint32_t)0x00000008) /*!< Bit 3 */ + +#define FSMC_BWTR2_ADDHLD ((uint32_t)0x000000F0) /*!< ADDHLD[3:0] bits (Address-hold phase duration) */ +#define FSMC_BWTR2_ADDHLD_0 ((uint32_t)0x00000010) /*!< Bit 0 */ +#define FSMC_BWTR2_ADDHLD_1 ((uint32_t)0x00000020) /*!< Bit 1 */ +#define FSMC_BWTR2_ADDHLD_2 ((uint32_t)0x00000040) /*!< Bit 2 */ +#define FSMC_BWTR2_ADDHLD_3 ((uint32_t)0x00000080) /*!< Bit 3 */ + +#define FSMC_BWTR2_DATAST ((uint32_t)0x0000FF00) /*!< DATAST [3:0] bits (Data-phase duration) */ +#define FSMC_BWTR2_DATAST_0 ((uint32_t)0x00000100) /*!< Bit 0 */ +#define FSMC_BWTR2_DATAST_1 ((uint32_t)0x00000200) /*!< Bit 1 */ +#define FSMC_BWTR2_DATAST_2 ((uint32_t)0x00000400) /*!< Bit 2 */ +#define FSMC_BWTR2_DATAST_3 ((uint32_t)0x00000800) /*!< Bit 3 */ + +#define FSMC_BWTR2_CLKDIV ((uint32_t)0x00F00000) /*!< CLKDIV[3:0] bits (Clock divide ratio) */ +#define FSMC_BWTR2_CLKDIV_0 ((uint32_t)0x00100000) /*!< Bit 0 */ +#define FSMC_BWTR2_CLKDIV_1 ((uint32_t)0x00200000) /*!< Bit 1*/ +#define FSMC_BWTR2_CLKDIV_2 ((uint32_t)0x00400000) /*!< Bit 2 */ +#define FSMC_BWTR2_CLKDIV_3 ((uint32_t)0x00800000) /*!< Bit 3 */ + +#define FSMC_BWTR2_DATLAT ((uint32_t)0x0F000000) /*!< DATLA[3:0] bits (Data latency) */ +#define FSMC_BWTR2_DATLAT_0 ((uint32_t)0x01000000) /*!< Bit 0 */ +#define FSMC_BWTR2_DATLAT_1 ((uint32_t)0x02000000) /*!< Bit 1 */ +#define FSMC_BWTR2_DATLAT_2 ((uint32_t)0x04000000) /*!< Bit 2 */ +#define FSMC_BWTR2_DATLAT_3 ((uint32_t)0x08000000) /*!< Bit 3 */ + +#define FSMC_BWTR2_ACCMOD ((uint32_t)0x30000000) /*!< ACCMOD[1:0] bits (Access mode) */ +#define FSMC_BWTR2_ACCMOD_0 ((uint32_t)0x10000000) /*!< Bit 0 */ +#define FSMC_BWTR2_ACCMOD_1 ((uint32_t)0x20000000) /*!< Bit 1 */ + +/****************** Bit definition for FSMC_BWTR3 register ******************/ +#define FSMC_BWTR3_ADDSET ((uint32_t)0x0000000F) /*!< ADDSET[3:0] bits (Address setup phase duration) */ +#define FSMC_BWTR3_ADDSET_0 ((uint32_t)0x00000001) /*!< Bit 0 */ +#define FSMC_BWTR3_ADDSET_1 ((uint32_t)0x00000002) /*!< Bit 1 */ +#define FSMC_BWTR3_ADDSET_2 ((uint32_t)0x00000004) /*!< Bit 2 */ +#define FSMC_BWTR3_ADDSET_3 ((uint32_t)0x00000008) /*!< Bit 3 */ + +#define FSMC_BWTR3_ADDHLD ((uint32_t)0x000000F0) /*!< ADDHLD[3:0] bits (Address-hold phase duration) */ +#define FSMC_BWTR3_ADDHLD_0 ((uint32_t)0x00000010) /*!< Bit 0 */ +#define FSMC_BWTR3_ADDHLD_1 ((uint32_t)0x00000020) /*!< Bit 1 */ +#define FSMC_BWTR3_ADDHLD_2 ((uint32_t)0x00000040) /*!< Bit 2 */ +#define FSMC_BWTR3_ADDHLD_3 ((uint32_t)0x00000080) /*!< Bit 3 */ + +#define FSMC_BWTR3_DATAST ((uint32_t)0x0000FF00) /*!< DATAST [3:0] bits (Data-phase duration) */ +#define FSMC_BWTR3_DATAST_0 ((uint32_t)0x00000100) /*!< Bit 0 */ +#define FSMC_BWTR3_DATAST_1 ((uint32_t)0x00000200) /*!< Bit 1 */ +#define FSMC_BWTR3_DATAST_2 ((uint32_t)0x00000400) /*!< Bit 2 */ +#define FSMC_BWTR3_DATAST_3 ((uint32_t)0x00000800) /*!< Bit 3 */ + +#define FSMC_BWTR3_CLKDIV ((uint32_t)0x00F00000) /*!< CLKDIV[3:0] bits (Clock divide ratio) */ +#define FSMC_BWTR3_CLKDIV_0 ((uint32_t)0x00100000) /*!< Bit 0 */ +#define FSMC_BWTR3_CLKDIV_1 ((uint32_t)0x00200000) /*!< Bit 1 */ +#define FSMC_BWTR3_CLKDIV_2 ((uint32_t)0x00400000) /*!< Bit 2 */ +#define FSMC_BWTR3_CLKDIV_3 ((uint32_t)0x00800000) /*!< Bit 3 */ + +#define FSMC_BWTR3_DATLAT ((uint32_t)0x0F000000) /*!< DATLA[3:0] bits (Data latency) */ +#define FSMC_BWTR3_DATLAT_0 ((uint32_t)0x01000000) /*!< Bit 0 */ +#define FSMC_BWTR3_DATLAT_1 ((uint32_t)0x02000000) /*!< Bit 1 */ +#define FSMC_BWTR3_DATLAT_2 ((uint32_t)0x04000000) /*!< Bit 2 */ +#define FSMC_BWTR3_DATLAT_3 ((uint32_t)0x08000000) /*!< Bit 3 */ + +#define FSMC_BWTR3_ACCMOD ((uint32_t)0x30000000) /*!< ACCMOD[1:0] bits (Access mode) */ +#define FSMC_BWTR3_ACCMOD_0 ((uint32_t)0x10000000) /*!< Bit 0 */ +#define FSMC_BWTR3_ACCMOD_1 ((uint32_t)0x20000000) /*!< Bit 1 */ + +/****************** Bit definition for FSMC_BWTR4 register ******************/ +#define FSMC_BWTR4_ADDSET ((uint32_t)0x0000000F) /*!< ADDSET[3:0] bits (Address setup phase duration) */ +#define FSMC_BWTR4_ADDSET_0 ((uint32_t)0x00000001) /*!< Bit 0 */ +#define FSMC_BWTR4_ADDSET_1 ((uint32_t)0x00000002) /*!< Bit 1 */ +#define FSMC_BWTR4_ADDSET_2 ((uint32_t)0x00000004) /*!< Bit 2 */ +#define FSMC_BWTR4_ADDSET_3 ((uint32_t)0x00000008) /*!< Bit 3 */ + +#define FSMC_BWTR4_ADDHLD ((uint32_t)0x000000F0) /*!< ADDHLD[3:0] bits (Address-hold phase duration) */ +#define FSMC_BWTR4_ADDHLD_0 ((uint32_t)0x00000010) /*!< Bit 0 */ +#define FSMC_BWTR4_ADDHLD_1 ((uint32_t)0x00000020) /*!< Bit 1 */ +#define FSMC_BWTR4_ADDHLD_2 ((uint32_t)0x00000040) /*!< Bit 2 */ +#define FSMC_BWTR4_ADDHLD_3 ((uint32_t)0x00000080) /*!< Bit 3 */ + +#define FSMC_BWTR4_DATAST ((uint32_t)0x0000FF00) /*!< DATAST [3:0] bits (Data-phase duration) */ +#define FSMC_BWTR4_DATAST_0 ((uint32_t)0x00000100) /*!< Bit 0 */ +#define FSMC_BWTR4_DATAST_1 ((uint32_t)0x00000200) /*!< Bit 1 */ +#define FSMC_BWTR4_DATAST_2 ((uint32_t)0x00000400) /*!< Bit 2 */ +#define FSMC_BWTR4_DATAST_3 ((uint32_t)0x00000800) /*!< Bit 3 */ + +#define FSMC_BWTR4_CLKDIV ((uint32_t)0x00F00000) /*!< CLKDIV[3:0] bits (Clock divide ratio) */ +#define FSMC_BWTR4_CLKDIV_0 ((uint32_t)0x00100000) /*!< Bit 0 */ +#define FSMC_BWTR4_CLKDIV_1 ((uint32_t)0x00200000) /*!< Bit 1 */ +#define FSMC_BWTR4_CLKDIV_2 ((uint32_t)0x00400000) /*!< Bit 2 */ +#define FSMC_BWTR4_CLKDIV_3 ((uint32_t)0x00800000) /*!< Bit 3 */ + +#define FSMC_BWTR4_DATLAT ((uint32_t)0x0F000000) /*!< DATLA[3:0] bits (Data latency) */ +#define FSMC_BWTR4_DATLAT_0 ((uint32_t)0x01000000) /*!< Bit 0 */ +#define FSMC_BWTR4_DATLAT_1 ((uint32_t)0x02000000) /*!< Bit 1 */ +#define FSMC_BWTR4_DATLAT_2 ((uint32_t)0x04000000) /*!< Bit 2 */ +#define FSMC_BWTR4_DATLAT_3 ((uint32_t)0x08000000) /*!< Bit 3 */ + +#define FSMC_BWTR4_ACCMOD ((uint32_t)0x30000000) /*!< ACCMOD[1:0] bits (Access mode) */ +#define FSMC_BWTR4_ACCMOD_0 ((uint32_t)0x10000000) /*!< Bit 0 */ +#define FSMC_BWTR4_ACCMOD_1 ((uint32_t)0x20000000) /*!< Bit 1 */ + +/****************** Bit definition for FSMC_PCR2 register *******************/ +#define FSMC_PCR2_PWAITEN ((uint32_t)0x00000002) /*!< Wait feature enable bit */ +#define FSMC_PCR2_PBKEN ((uint32_t)0x00000004) /*!< PC Card/NAND Flash memory bank enable bit */ +#define FSMC_PCR2_PTYP ((uint32_t)0x00000008) /*!< Memory type */ + +#define FSMC_PCR2_PWID ((uint32_t)0x00000030) /*!< PWID[1:0] bits (NAND Flash databus width) */ +#define FSMC_PCR2_PWID_0 ((uint32_t)0x00000010) /*!< Bit 0 */ +#define FSMC_PCR2_PWID_1 ((uint32_t)0x00000020) /*!< Bit 1 */ + +#define FSMC_PCR2_ECCEN ((uint32_t)0x00000040) /*!< ECC computation logic enable bit */ + +#define FSMC_PCR2_TCLR ((uint32_t)0x00001E00) /*!< TCLR[3:0] bits (CLE to RE delay) */ +#define FSMC_PCR2_TCLR_0 ((uint32_t)0x00000200) /*!< Bit 0 */ +#define FSMC_PCR2_TCLR_1 ((uint32_t)0x00000400) /*!< Bit 1 */ +#define FSMC_PCR2_TCLR_2 ((uint32_t)0x00000800) /*!< Bit 2 */ +#define FSMC_PCR2_TCLR_3 ((uint32_t)0x00001000) /*!< Bit 3 */ + +#define FSMC_PCR2_TAR ((uint32_t)0x0001E000) /*!< TAR[3:0] bits (ALE to RE delay) */ +#define FSMC_PCR2_TAR_0 ((uint32_t)0x00002000) /*!< Bit 0 */ +#define FSMC_PCR2_TAR_1 ((uint32_t)0x00004000) /*!< Bit 1 */ +#define FSMC_PCR2_TAR_2 ((uint32_t)0x00008000) /*!< Bit 2 */ +#define FSMC_PCR2_TAR_3 ((uint32_t)0x00010000) /*!< Bit 3 */ + +#define FSMC_PCR2_ECCPS ((uint32_t)0x000E0000) /*!< ECCPS[1:0] bits (ECC page size) */ +#define FSMC_PCR2_ECCPS_0 ((uint32_t)0x00020000) /*!< Bit 0 */ +#define FSMC_PCR2_ECCPS_1 ((uint32_t)0x00040000) /*!< Bit 1 */ +#define FSMC_PCR2_ECCPS_2 ((uint32_t)0x00080000) /*!< Bit 2 */ + +/****************** Bit definition for FSMC_PCR3 register *******************/ +#define FSMC_PCR3_PWAITEN ((uint32_t)0x00000002) /*!< Wait feature enable bit */ +#define FSMC_PCR3_PBKEN ((uint32_t)0x00000004) /*!< PC Card/NAND Flash memory bank enable bit */ +#define FSMC_PCR3_PTYP ((uint32_t)0x00000008) /*!< Memory type */ + +#define FSMC_PCR3_PWID ((uint32_t)0x00000030) /*!< PWID[1:0] bits (NAND Flash databus width) */ +#define FSMC_PCR3_PWID_0 ((uint32_t)0x00000010) /*!< Bit 0 */ +#define FSMC_PCR3_PWID_1 ((uint32_t)0x00000020) /*!< Bit 1 */ + +#define FSMC_PCR3_ECCEN ((uint32_t)0x00000040) /*!< ECC computation logic enable bit */ + +#define FSMC_PCR3_TCLR ((uint32_t)0x00001E00) /*!< TCLR[3:0] bits (CLE to RE delay) */ +#define FSMC_PCR3_TCLR_0 ((uint32_t)0x00000200) /*!< Bit 0 */ +#define FSMC_PCR3_TCLR_1 ((uint32_t)0x00000400) /*!< Bit 1 */ +#define FSMC_PCR3_TCLR_2 ((uint32_t)0x00000800) /*!< Bit 2 */ +#define FSMC_PCR3_TCLR_3 ((uint32_t)0x00001000) /*!< Bit 3 */ + +#define FSMC_PCR3_TAR ((uint32_t)0x0001E000) /*!< TAR[3:0] bits (ALE to RE delay) */ +#define FSMC_PCR3_TAR_0 ((uint32_t)0x00002000) /*!< Bit 0 */ +#define FSMC_PCR3_TAR_1 ((uint32_t)0x00004000) /*!< Bit 1 */ +#define FSMC_PCR3_TAR_2 ((uint32_t)0x00008000) /*!< Bit 2 */ +#define FSMC_PCR3_TAR_3 ((uint32_t)0x00010000) /*!< Bit 3 */ + +#define FSMC_PCR3_ECCPS ((uint32_t)0x000E0000) /*!< ECCPS[2:0] bits (ECC page size) */ +#define FSMC_PCR3_ECCPS_0 ((uint32_t)0x00020000) /*!< Bit 0 */ +#define FSMC_PCR3_ECCPS_1 ((uint32_t)0x00040000) /*!< Bit 1 */ +#define FSMC_PCR3_ECCPS_2 ((uint32_t)0x00080000) /*!< Bit 2 */ + +/****************** Bit definition for FSMC_PCR4 register *******************/ +#define FSMC_PCR4_PWAITEN ((uint32_t)0x00000002) /*!< Wait feature enable bit */ +#define FSMC_PCR4_PBKEN ((uint32_t)0x00000004) /*!< PC Card/NAND Flash memory bank enable bit */ +#define FSMC_PCR4_PTYP ((uint32_t)0x00000008) /*!< Memory type */ + +#define FSMC_PCR4_PWID ((uint32_t)0x00000030) /*!< PWID[1:0] bits (NAND Flash databus width) */ +#define FSMC_PCR4_PWID_0 ((uint32_t)0x00000010) /*!< Bit 0 */ +#define FSMC_PCR4_PWID_1 ((uint32_t)0x00000020) /*!< Bit 1 */ + +#define FSMC_PCR4_ECCEN ((uint32_t)0x00000040) /*!< ECC computation logic enable bit */ + +#define FSMC_PCR4_TCLR ((uint32_t)0x00001E00) /*!< TCLR[3:0] bits (CLE to RE delay) */ +#define FSMC_PCR4_TCLR_0 ((uint32_t)0x00000200) /*!< Bit 0 */ +#define FSMC_PCR4_TCLR_1 ((uint32_t)0x00000400) /*!< Bit 1 */ +#define FSMC_PCR4_TCLR_2 ((uint32_t)0x00000800) /*!< Bit 2 */ +#define FSMC_PCR4_TCLR_3 ((uint32_t)0x00001000) /*!< Bit 3 */ + +#define FSMC_PCR4_TAR ((uint32_t)0x0001E000) /*!< TAR[3:0] bits (ALE to RE delay) */ +#define FSMC_PCR4_TAR_0 ((uint32_t)0x00002000) /*!< Bit 0 */ +#define FSMC_PCR4_TAR_1 ((uint32_t)0x00004000) /*!< Bit 1 */ +#define FSMC_PCR4_TAR_2 ((uint32_t)0x00008000) /*!< Bit 2 */ +#define FSMC_PCR4_TAR_3 ((uint32_t)0x00010000) /*!< Bit 3 */ + +#define FSMC_PCR4_ECCPS ((uint32_t)0x000E0000) /*!< ECCPS[2:0] bits (ECC page size) */ +#define FSMC_PCR4_ECCPS_0 ((uint32_t)0x00020000) /*!< Bit 0 */ +#define FSMC_PCR4_ECCPS_1 ((uint32_t)0x00040000) /*!< Bit 1 */ +#define FSMC_PCR4_ECCPS_2 ((uint32_t)0x00080000) /*!< Bit 2 */ + +/******************* Bit definition for FSMC_SR2 register *******************/ +#define FSMC_SR2_IRS ((uint8_t)0x01) /*!< Interrupt Rising Edge status */ +#define FSMC_SR2_ILS ((uint8_t)0x02) /*!< Interrupt Level status */ +#define FSMC_SR2_IFS ((uint8_t)0x04) /*!< Interrupt Falling Edge status */ +#define FSMC_SR2_IREN ((uint8_t)0x08) /*!< Interrupt Rising Edge detection Enable bit */ +#define FSMC_SR2_ILEN ((uint8_t)0x10) /*!< Interrupt Level detection Enable bit */ +#define FSMC_SR2_IFEN ((uint8_t)0x20) /*!< Interrupt Falling Edge detection Enable bit */ +#define FSMC_SR2_FEMPT ((uint8_t)0x40) /*!< FIFO empty */ + +/******************* Bit definition for FSMC_SR3 register *******************/ +#define FSMC_SR3_IRS ((uint8_t)0x01) /*!< Interrupt Rising Edge status */ +#define FSMC_SR3_ILS ((uint8_t)0x02) /*!< Interrupt Level status */ +#define FSMC_SR3_IFS ((uint8_t)0x04) /*!< Interrupt Falling Edge status */ +#define FSMC_SR3_IREN ((uint8_t)0x08) /*!< Interrupt Rising Edge detection Enable bit */ +#define FSMC_SR3_ILEN ((uint8_t)0x10) /*!< Interrupt Level detection Enable bit */ +#define FSMC_SR3_IFEN ((uint8_t)0x20) /*!< Interrupt Falling Edge detection Enable bit */ +#define FSMC_SR3_FEMPT ((uint8_t)0x40) /*!< FIFO empty */ + +/******************* Bit definition for FSMC_SR4 register *******************/ +#define FSMC_SR4_IRS ((uint8_t)0x01) /*!< Interrupt Rising Edge status */ +#define FSMC_SR4_ILS ((uint8_t)0x02) /*!< Interrupt Level status */ +#define FSMC_SR4_IFS ((uint8_t)0x04) /*!< Interrupt Falling Edge status */ +#define FSMC_SR4_IREN ((uint8_t)0x08) /*!< Interrupt Rising Edge detection Enable bit */ +#define FSMC_SR4_ILEN ((uint8_t)0x10) /*!< Interrupt Level detection Enable bit */ +#define FSMC_SR4_IFEN ((uint8_t)0x20) /*!< Interrupt Falling Edge detection Enable bit */ +#define FSMC_SR4_FEMPT ((uint8_t)0x40) /*!< FIFO empty */ + +/****************** Bit definition for FSMC_PMEM2 register ******************/ +#define FSMC_PMEM2_MEMSET2 ((uint32_t)0x000000FF) /*!< MEMSET2[7:0] bits (Common memory 2 setup time) */ +#define FSMC_PMEM2_MEMSET2_0 ((uint32_t)0x00000001) /*!< Bit 0 */ +#define FSMC_PMEM2_MEMSET2_1 ((uint32_t)0x00000002) /*!< Bit 1 */ +#define FSMC_PMEM2_MEMSET2_2 ((uint32_t)0x00000004) /*!< Bit 2 */ +#define FSMC_PMEM2_MEMSET2_3 ((uint32_t)0x00000008) /*!< Bit 3 */ +#define FSMC_PMEM2_MEMSET2_4 ((uint32_t)0x00000010) /*!< Bit 4 */ +#define FSMC_PMEM2_MEMSET2_5 ((uint32_t)0x00000020) /*!< Bit 5 */ +#define FSMC_PMEM2_MEMSET2_6 ((uint32_t)0x00000040) /*!< Bit 6 */ +#define FSMC_PMEM2_MEMSET2_7 ((uint32_t)0x00000080) /*!< Bit 7 */ + +#define FSMC_PMEM2_MEMWAIT2 ((uint32_t)0x0000FF00) /*!< MEMWAIT2[7:0] bits (Common memory 2 wait time) */ +#define FSMC_PMEM2_MEMWAIT2_0 ((uint32_t)0x00000100) /*!< Bit 0 */ +#define FSMC_PMEM2_MEMWAIT2_1 ((uint32_t)0x00000200) /*!< Bit 1 */ +#define FSMC_PMEM2_MEMWAIT2_2 ((uint32_t)0x00000400) /*!< Bit 2 */ +#define FSMC_PMEM2_MEMWAIT2_3 ((uint32_t)0x00000800) /*!< Bit 3 */ +#define FSMC_PMEM2_MEMWAIT2_4 ((uint32_t)0x00001000) /*!< Bit 4 */ +#define FSMC_PMEM2_MEMWAIT2_5 ((uint32_t)0x00002000) /*!< Bit 5 */ +#define FSMC_PMEM2_MEMWAIT2_6 ((uint32_t)0x00004000) /*!< Bit 6 */ +#define FSMC_PMEM2_MEMWAIT2_7 ((uint32_t)0x00008000) /*!< Bit 7 */ + +#define FSMC_PMEM2_MEMHOLD2 ((uint32_t)0x00FF0000) /*!< MEMHOLD2[7:0] bits (Common memory 2 hold time) */ +#define FSMC_PMEM2_MEMHOLD2_0 ((uint32_t)0x00010000) /*!< Bit 0 */ +#define FSMC_PMEM2_MEMHOLD2_1 ((uint32_t)0x00020000) /*!< Bit 1 */ +#define FSMC_PMEM2_MEMHOLD2_2 ((uint32_t)0x00040000) /*!< Bit 2 */ +#define FSMC_PMEM2_MEMHOLD2_3 ((uint32_t)0x00080000) /*!< Bit 3 */ +#define FSMC_PMEM2_MEMHOLD2_4 ((uint32_t)0x00100000) /*!< Bit 4 */ +#define FSMC_PMEM2_MEMHOLD2_5 ((uint32_t)0x00200000) /*!< Bit 5 */ +#define FSMC_PMEM2_MEMHOLD2_6 ((uint32_t)0x00400000) /*!< Bit 6 */ +#define FSMC_PMEM2_MEMHOLD2_7 ((uint32_t)0x00800000) /*!< Bit 7 */ + +#define FSMC_PMEM2_MEMHIZ2 ((uint32_t)0xFF000000) /*!< MEMHIZ2[7:0] bits (Common memory 2 databus HiZ time) */ +#define FSMC_PMEM2_MEMHIZ2_0 ((uint32_t)0x01000000) /*!< Bit 0 */ +#define FSMC_PMEM2_MEMHIZ2_1 ((uint32_t)0x02000000) /*!< Bit 1 */ +#define FSMC_PMEM2_MEMHIZ2_2 ((uint32_t)0x04000000) /*!< Bit 2 */ +#define FSMC_PMEM2_MEMHIZ2_3 ((uint32_t)0x08000000) /*!< Bit 3 */ +#define FSMC_PMEM2_MEMHIZ2_4 ((uint32_t)0x10000000) /*!< Bit 4 */ +#define FSMC_PMEM2_MEMHIZ2_5 ((uint32_t)0x20000000) /*!< Bit 5 */ +#define FSMC_PMEM2_MEMHIZ2_6 ((uint32_t)0x40000000) /*!< Bit 6 */ +#define FSMC_PMEM2_MEMHIZ2_7 ((uint32_t)0x80000000) /*!< Bit 7 */ + +/****************** Bit definition for FSMC_PMEM3 register ******************/ +#define FSMC_PMEM3_MEMSET3 ((uint32_t)0x000000FF) /*!< MEMSET3[7:0] bits (Common memory 3 setup time) */ +#define FSMC_PMEM3_MEMSET3_0 ((uint32_t)0x00000001) /*!< Bit 0 */ +#define FSMC_PMEM3_MEMSET3_1 ((uint32_t)0x00000002) /*!< Bit 1 */ +#define FSMC_PMEM3_MEMSET3_2 ((uint32_t)0x00000004) /*!< Bit 2 */ +#define FSMC_PMEM3_MEMSET3_3 ((uint32_t)0x00000008) /*!< Bit 3 */ +#define FSMC_PMEM3_MEMSET3_4 ((uint32_t)0x00000010) /*!< Bit 4 */ +#define FSMC_PMEM3_MEMSET3_5 ((uint32_t)0x00000020) /*!< Bit 5 */ +#define FSMC_PMEM3_MEMSET3_6 ((uint32_t)0x00000040) /*!< Bit 6 */ +#define FSMC_PMEM3_MEMSET3_7 ((uint32_t)0x00000080) /*!< Bit 7 */ + +#define FSMC_PMEM3_MEMWAIT3 ((uint32_t)0x0000FF00) /*!< MEMWAIT3[7:0] bits (Common memory 3 wait time) */ +#define FSMC_PMEM3_MEMWAIT3_0 ((uint32_t)0x00000100) /*!< Bit 0 */ +#define FSMC_PMEM3_MEMWAIT3_1 ((uint32_t)0x00000200) /*!< Bit 1 */ +#define FSMC_PMEM3_MEMWAIT3_2 ((uint32_t)0x00000400) /*!< Bit 2 */ +#define FSMC_PMEM3_MEMWAIT3_3 ((uint32_t)0x00000800) /*!< Bit 3 */ +#define FSMC_PMEM3_MEMWAIT3_4 ((uint32_t)0x00001000) /*!< Bit 4 */ +#define FSMC_PMEM3_MEMWAIT3_5 ((uint32_t)0x00002000) /*!< Bit 5 */ +#define FSMC_PMEM3_MEMWAIT3_6 ((uint32_t)0x00004000) /*!< Bit 6 */ +#define FSMC_PMEM3_MEMWAIT3_7 ((uint32_t)0x00008000) /*!< Bit 7 */ + +#define FSMC_PMEM3_MEMHOLD3 ((uint32_t)0x00FF0000) /*!< MEMHOLD3[7:0] bits (Common memory 3 hold time) */ +#define FSMC_PMEM3_MEMHOLD3_0 ((uint32_t)0x00010000) /*!< Bit 0 */ +#define FSMC_PMEM3_MEMHOLD3_1 ((uint32_t)0x00020000) /*!< Bit 1 */ +#define FSMC_PMEM3_MEMHOLD3_2 ((uint32_t)0x00040000) /*!< Bit 2 */ +#define FSMC_PMEM3_MEMHOLD3_3 ((uint32_t)0x00080000) /*!< Bit 3 */ +#define FSMC_PMEM3_MEMHOLD3_4 ((uint32_t)0x00100000) /*!< Bit 4 */ +#define FSMC_PMEM3_MEMHOLD3_5 ((uint32_t)0x00200000) /*!< Bit 5 */ +#define FSMC_PMEM3_MEMHOLD3_6 ((uint32_t)0x00400000) /*!< Bit 6 */ +#define FSMC_PMEM3_MEMHOLD3_7 ((uint32_t)0x00800000) /*!< Bit 7 */ + +#define FSMC_PMEM3_MEMHIZ3 ((uint32_t)0xFF000000) /*!< MEMHIZ3[7:0] bits (Common memory 3 databus HiZ time) */ +#define FSMC_PMEM3_MEMHIZ3_0 ((uint32_t)0x01000000) /*!< Bit 0 */ +#define FSMC_PMEM3_MEMHIZ3_1 ((uint32_t)0x02000000) /*!< Bit 1 */ +#define FSMC_PMEM3_MEMHIZ3_2 ((uint32_t)0x04000000) /*!< Bit 2 */ +#define FSMC_PMEM3_MEMHIZ3_3 ((uint32_t)0x08000000) /*!< Bit 3 */ +#define FSMC_PMEM3_MEMHIZ3_4 ((uint32_t)0x10000000) /*!< Bit 4 */ +#define FSMC_PMEM3_MEMHIZ3_5 ((uint32_t)0x20000000) /*!< Bit 5 */ +#define FSMC_PMEM3_MEMHIZ3_6 ((uint32_t)0x40000000) /*!< Bit 6 */ +#define FSMC_PMEM3_MEMHIZ3_7 ((uint32_t)0x80000000) /*!< Bit 7 */ + +/****************** Bit definition for FSMC_PMEM4 register ******************/ +#define FSMC_PMEM4_MEMSET4 ((uint32_t)0x000000FF) /*!< MEMSET4[7:0] bits (Common memory 4 setup time) */ +#define FSMC_PMEM4_MEMSET4_0 ((uint32_t)0x00000001) /*!< Bit 0 */ +#define FSMC_PMEM4_MEMSET4_1 ((uint32_t)0x00000002) /*!< Bit 1 */ +#define FSMC_PMEM4_MEMSET4_2 ((uint32_t)0x00000004) /*!< Bit 2 */ +#define FSMC_PMEM4_MEMSET4_3 ((uint32_t)0x00000008) /*!< Bit 3 */ +#define FSMC_PMEM4_MEMSET4_4 ((uint32_t)0x00000010) /*!< Bit 4 */ +#define FSMC_PMEM4_MEMSET4_5 ((uint32_t)0x00000020) /*!< Bit 5 */ +#define FSMC_PMEM4_MEMSET4_6 ((uint32_t)0x00000040) /*!< Bit 6 */ +#define FSMC_PMEM4_MEMSET4_7 ((uint32_t)0x00000080) /*!< Bit 7 */ + +#define FSMC_PMEM4_MEMWAIT4 ((uint32_t)0x0000FF00) /*!< MEMWAIT4[7:0] bits (Common memory 4 wait time) */ +#define FSMC_PMEM4_MEMWAIT4_0 ((uint32_t)0x00000100) /*!< Bit 0 */ +#define FSMC_PMEM4_MEMWAIT4_1 ((uint32_t)0x00000200) /*!< Bit 1 */ +#define FSMC_PMEM4_MEMWAIT4_2 ((uint32_t)0x00000400) /*!< Bit 2 */ +#define FSMC_PMEM4_MEMWAIT4_3 ((uint32_t)0x00000800) /*!< Bit 3 */ +#define FSMC_PMEM4_MEMWAIT4_4 ((uint32_t)0x00001000) /*!< Bit 4 */ +#define FSMC_PMEM4_MEMWAIT4_5 ((uint32_t)0x00002000) /*!< Bit 5 */ +#define FSMC_PMEM4_MEMWAIT4_6 ((uint32_t)0x00004000) /*!< Bit 6 */ +#define FSMC_PMEM4_MEMWAIT4_7 ((uint32_t)0x00008000) /*!< Bit 7 */ + +#define FSMC_PMEM4_MEMHOLD4 ((uint32_t)0x00FF0000) /*!< MEMHOLD4[7:0] bits (Common memory 4 hold time) */ +#define FSMC_PMEM4_MEMHOLD4_0 ((uint32_t)0x00010000) /*!< Bit 0 */ +#define FSMC_PMEM4_MEMHOLD4_1 ((uint32_t)0x00020000) /*!< Bit 1 */ +#define FSMC_PMEM4_MEMHOLD4_2 ((uint32_t)0x00040000) /*!< Bit 2 */ +#define FSMC_PMEM4_MEMHOLD4_3 ((uint32_t)0x00080000) /*!< Bit 3 */ +#define FSMC_PMEM4_MEMHOLD4_4 ((uint32_t)0x00100000) /*!< Bit 4 */ +#define FSMC_PMEM4_MEMHOLD4_5 ((uint32_t)0x00200000) /*!< Bit 5 */ +#define FSMC_PMEM4_MEMHOLD4_6 ((uint32_t)0x00400000) /*!< Bit 6 */ +#define FSMC_PMEM4_MEMHOLD4_7 ((uint32_t)0x00800000) /*!< Bit 7 */ + +#define FSMC_PMEM4_MEMHIZ4 ((uint32_t)0xFF000000) /*!< MEMHIZ4[7:0] bits (Common memory 4 databus HiZ time) */ +#define FSMC_PMEM4_MEMHIZ4_0 ((uint32_t)0x01000000) /*!< Bit 0 */ +#define FSMC_PMEM4_MEMHIZ4_1 ((uint32_t)0x02000000) /*!< Bit 1 */ +#define FSMC_PMEM4_MEMHIZ4_2 ((uint32_t)0x04000000) /*!< Bit 2 */ +#define FSMC_PMEM4_MEMHIZ4_3 ((uint32_t)0x08000000) /*!< Bit 3 */ +#define FSMC_PMEM4_MEMHIZ4_4 ((uint32_t)0x10000000) /*!< Bit 4 */ +#define FSMC_PMEM4_MEMHIZ4_5 ((uint32_t)0x20000000) /*!< Bit 5 */ +#define FSMC_PMEM4_MEMHIZ4_6 ((uint32_t)0x40000000) /*!< Bit 6 */ +#define FSMC_PMEM4_MEMHIZ4_7 ((uint32_t)0x80000000) /*!< Bit 7 */ + +/****************** Bit definition for FSMC_PATT2 register ******************/ +#define FSMC_PATT2_ATTSET2 ((uint32_t)0x000000FF) /*!< ATTSET2[7:0] bits (Attribute memory 2 setup time) */ +#define FSMC_PATT2_ATTSET2_0 ((uint32_t)0x00000001) /*!< Bit 0 */ +#define FSMC_PATT2_ATTSET2_1 ((uint32_t)0x00000002) /*!< Bit 1 */ +#define FSMC_PATT2_ATTSET2_2 ((uint32_t)0x00000004) /*!< Bit 2 */ +#define FSMC_PATT2_ATTSET2_3 ((uint32_t)0x00000008) /*!< Bit 3 */ +#define FSMC_PATT2_ATTSET2_4 ((uint32_t)0x00000010) /*!< Bit 4 */ +#define FSMC_PATT2_ATTSET2_5 ((uint32_t)0x00000020) /*!< Bit 5 */ +#define FSMC_PATT2_ATTSET2_6 ((uint32_t)0x00000040) /*!< Bit 6 */ +#define FSMC_PATT2_ATTSET2_7 ((uint32_t)0x00000080) /*!< Bit 7 */ + +#define FSMC_PATT2_ATTWAIT2 ((uint32_t)0x0000FF00) /*!< ATTWAIT2[7:0] bits (Attribute memory 2 wait time) */ +#define FSMC_PATT2_ATTWAIT2_0 ((uint32_t)0x00000100) /*!< Bit 0 */ +#define FSMC_PATT2_ATTWAIT2_1 ((uint32_t)0x00000200) /*!< Bit 1 */ +#define FSMC_PATT2_ATTWAIT2_2 ((uint32_t)0x00000400) /*!< Bit 2 */ +#define FSMC_PATT2_ATTWAIT2_3 ((uint32_t)0x00000800) /*!< Bit 3 */ +#define FSMC_PATT2_ATTWAIT2_4 ((uint32_t)0x00001000) /*!< Bit 4 */ +#define FSMC_PATT2_ATTWAIT2_5 ((uint32_t)0x00002000) /*!< Bit 5 */ +#define FSMC_PATT2_ATTWAIT2_6 ((uint32_t)0x00004000) /*!< Bit 6 */ +#define FSMC_PATT2_ATTWAIT2_7 ((uint32_t)0x00008000) /*!< Bit 7 */ + +#define FSMC_PATT2_ATTHOLD2 ((uint32_t)0x00FF0000) /*!< ATTHOLD2[7:0] bits (Attribute memory 2 hold time) */ +#define FSMC_PATT2_ATTHOLD2_0 ((uint32_t)0x00010000) /*!< Bit 0 */ +#define FSMC_PATT2_ATTHOLD2_1 ((uint32_t)0x00020000) /*!< Bit 1 */ +#define FSMC_PATT2_ATTHOLD2_2 ((uint32_t)0x00040000) /*!< Bit 2 */ +#define FSMC_PATT2_ATTHOLD2_3 ((uint32_t)0x00080000) /*!< Bit 3 */ +#define FSMC_PATT2_ATTHOLD2_4 ((uint32_t)0x00100000) /*!< Bit 4 */ +#define FSMC_PATT2_ATTHOLD2_5 ((uint32_t)0x00200000) /*!< Bit 5 */ +#define FSMC_PATT2_ATTHOLD2_6 ((uint32_t)0x00400000) /*!< Bit 6 */ +#define FSMC_PATT2_ATTHOLD2_7 ((uint32_t)0x00800000) /*!< Bit 7 */ + +#define FSMC_PATT2_ATTHIZ2 ((uint32_t)0xFF000000) /*!< ATTHIZ2[7:0] bits (Attribute memory 2 databus HiZ time) */ +#define FSMC_PATT2_ATTHIZ2_0 ((uint32_t)0x01000000) /*!< Bit 0 */ +#define FSMC_PATT2_ATTHIZ2_1 ((uint32_t)0x02000000) /*!< Bit 1 */ +#define FSMC_PATT2_ATTHIZ2_2 ((uint32_t)0x04000000) /*!< Bit 2 */ +#define FSMC_PATT2_ATTHIZ2_3 ((uint32_t)0x08000000) /*!< Bit 3 */ +#define FSMC_PATT2_ATTHIZ2_4 ((uint32_t)0x10000000) /*!< Bit 4 */ +#define FSMC_PATT2_ATTHIZ2_5 ((uint32_t)0x20000000) /*!< Bit 5 */ +#define FSMC_PATT2_ATTHIZ2_6 ((uint32_t)0x40000000) /*!< Bit 6 */ +#define FSMC_PATT2_ATTHIZ2_7 ((uint32_t)0x80000000) /*!< Bit 7 */ + +/****************** Bit definition for FSMC_PATT3 register ******************/ +#define FSMC_PATT3_ATTSET3 ((uint32_t)0x000000FF) /*!< ATTSET3[7:0] bits (Attribute memory 3 setup time) */ +#define FSMC_PATT3_ATTSET3_0 ((uint32_t)0x00000001) /*!< Bit 0 */ +#define FSMC_PATT3_ATTSET3_1 ((uint32_t)0x00000002) /*!< Bit 1 */ +#define FSMC_PATT3_ATTSET3_2 ((uint32_t)0x00000004) /*!< Bit 2 */ +#define FSMC_PATT3_ATTSET3_3 ((uint32_t)0x00000008) /*!< Bit 3 */ +#define FSMC_PATT3_ATTSET3_4 ((uint32_t)0x00000010) /*!< Bit 4 */ +#define FSMC_PATT3_ATTSET3_5 ((uint32_t)0x00000020) /*!< Bit 5 */ +#define FSMC_PATT3_ATTSET3_6 ((uint32_t)0x00000040) /*!< Bit 6 */ +#define FSMC_PATT3_ATTSET3_7 ((uint32_t)0x00000080) /*!< Bit 7 */ + +#define FSMC_PATT3_ATTWAIT3 ((uint32_t)0x0000FF00) /*!< ATTWAIT3[7:0] bits (Attribute memory 3 wait time) */ +#define FSMC_PATT3_ATTWAIT3_0 ((uint32_t)0x00000100) /*!< Bit 0 */ +#define FSMC_PATT3_ATTWAIT3_1 ((uint32_t)0x00000200) /*!< Bit 1 */ +#define FSMC_PATT3_ATTWAIT3_2 ((uint32_t)0x00000400) /*!< Bit 2 */ +#define FSMC_PATT3_ATTWAIT3_3 ((uint32_t)0x00000800) /*!< Bit 3 */ +#define FSMC_PATT3_ATTWAIT3_4 ((uint32_t)0x00001000) /*!< Bit 4 */ +#define FSMC_PATT3_ATTWAIT3_5 ((uint32_t)0x00002000) /*!< Bit 5 */ +#define FSMC_PATT3_ATTWAIT3_6 ((uint32_t)0x00004000) /*!< Bit 6 */ +#define FSMC_PATT3_ATTWAIT3_7 ((uint32_t)0x00008000) /*!< Bit 7 */ + +#define FSMC_PATT3_ATTHOLD3 ((uint32_t)0x00FF0000) /*!< ATTHOLD3[7:0] bits (Attribute memory 3 hold time) */ +#define FSMC_PATT3_ATTHOLD3_0 ((uint32_t)0x00010000) /*!< Bit 0 */ +#define FSMC_PATT3_ATTHOLD3_1 ((uint32_t)0x00020000) /*!< Bit 1 */ +#define FSMC_PATT3_ATTHOLD3_2 ((uint32_t)0x00040000) /*!< Bit 2 */ +#define FSMC_PATT3_ATTHOLD3_3 ((uint32_t)0x00080000) /*!< Bit 3 */ +#define FSMC_PATT3_ATTHOLD3_4 ((uint32_t)0x00100000) /*!< Bit 4 */ +#define FSMC_PATT3_ATTHOLD3_5 ((uint32_t)0x00200000) /*!< Bit 5 */ +#define FSMC_PATT3_ATTHOLD3_6 ((uint32_t)0x00400000) /*!< Bit 6 */ +#define FSMC_PATT3_ATTHOLD3_7 ((uint32_t)0x00800000) /*!< Bit 7 */ + +#define FSMC_PATT3_ATTHIZ3 ((uint32_t)0xFF000000) /*!< ATTHIZ3[7:0] bits (Attribute memory 3 databus HiZ time) */ +#define FSMC_PATT3_ATTHIZ3_0 ((uint32_t)0x01000000) /*!< Bit 0 */ +#define FSMC_PATT3_ATTHIZ3_1 ((uint32_t)0x02000000) /*!< Bit 1 */ +#define FSMC_PATT3_ATTHIZ3_2 ((uint32_t)0x04000000) /*!< Bit 2 */ +#define FSMC_PATT3_ATTHIZ3_3 ((uint32_t)0x08000000) /*!< Bit 3 */ +#define FSMC_PATT3_ATTHIZ3_4 ((uint32_t)0x10000000) /*!< Bit 4 */ +#define FSMC_PATT3_ATTHIZ3_5 ((uint32_t)0x20000000) /*!< Bit 5 */ +#define FSMC_PATT3_ATTHIZ3_6 ((uint32_t)0x40000000) /*!< Bit 6 */ +#define FSMC_PATT3_ATTHIZ3_7 ((uint32_t)0x80000000) /*!< Bit 7 */ + +/****************** Bit definition for FSMC_PATT4 register ******************/ +#define FSMC_PATT4_ATTSET4 ((uint32_t)0x000000FF) /*!< ATTSET4[7:0] bits (Attribute memory 4 setup time) */ +#define FSMC_PATT4_ATTSET4_0 ((uint32_t)0x00000001) /*!< Bit 0 */ +#define FSMC_PATT4_ATTSET4_1 ((uint32_t)0x00000002) /*!< Bit 1 */ +#define FSMC_PATT4_ATTSET4_2 ((uint32_t)0x00000004) /*!< Bit 2 */ +#define FSMC_PATT4_ATTSET4_3 ((uint32_t)0x00000008) /*!< Bit 3 */ +#define FSMC_PATT4_ATTSET4_4 ((uint32_t)0x00000010) /*!< Bit 4 */ +#define FSMC_PATT4_ATTSET4_5 ((uint32_t)0x00000020) /*!< Bit 5 */ +#define FSMC_PATT4_ATTSET4_6 ((uint32_t)0x00000040) /*!< Bit 6 */ +#define FSMC_PATT4_ATTSET4_7 ((uint32_t)0x00000080) /*!< Bit 7 */ + +#define FSMC_PATT4_ATTWAIT4 ((uint32_t)0x0000FF00) /*!< ATTWAIT4[7:0] bits (Attribute memory 4 wait time) */ +#define FSMC_PATT4_ATTWAIT4_0 ((uint32_t)0x00000100) /*!< Bit 0 */ +#define FSMC_PATT4_ATTWAIT4_1 ((uint32_t)0x00000200) /*!< Bit 1 */ +#define FSMC_PATT4_ATTWAIT4_2 ((uint32_t)0x00000400) /*!< Bit 2 */ +#define FSMC_PATT4_ATTWAIT4_3 ((uint32_t)0x00000800) /*!< Bit 3 */ +#define FSMC_PATT4_ATTWAIT4_4 ((uint32_t)0x00001000) /*!< Bit 4 */ +#define FSMC_PATT4_ATTWAIT4_5 ((uint32_t)0x00002000) /*!< Bit 5 */ +#define FSMC_PATT4_ATTWAIT4_6 ((uint32_t)0x00004000) /*!< Bit 6 */ +#define FSMC_PATT4_ATTWAIT4_7 ((uint32_t)0x00008000) /*!< Bit 7 */ + +#define FSMC_PATT4_ATTHOLD4 ((uint32_t)0x00FF0000) /*!< ATTHOLD4[7:0] bits (Attribute memory 4 hold time) */ +#define FSMC_PATT4_ATTHOLD4_0 ((uint32_t)0x00010000) /*!< Bit 0 */ +#define FSMC_PATT4_ATTHOLD4_1 ((uint32_t)0x00020000) /*!< Bit 1 */ +#define FSMC_PATT4_ATTHOLD4_2 ((uint32_t)0x00040000) /*!< Bit 2 */ +#define FSMC_PATT4_ATTHOLD4_3 ((uint32_t)0x00080000) /*!< Bit 3 */ +#define FSMC_PATT4_ATTHOLD4_4 ((uint32_t)0x00100000) /*!< Bit 4 */ +#define FSMC_PATT4_ATTHOLD4_5 ((uint32_t)0x00200000) /*!< Bit 5 */ +#define FSMC_PATT4_ATTHOLD4_6 ((uint32_t)0x00400000) /*!< Bit 6 */ +#define FSMC_PATT4_ATTHOLD4_7 ((uint32_t)0x00800000) /*!< Bit 7 */ + +#define FSMC_PATT4_ATTHIZ4 ((uint32_t)0xFF000000) /*!< ATTHIZ4[7:0] bits (Attribute memory 4 databus HiZ time) */ +#define FSMC_PATT4_ATTHIZ4_0 ((uint32_t)0x01000000) /*!< Bit 0 */ +#define FSMC_PATT4_ATTHIZ4_1 ((uint32_t)0x02000000) /*!< Bit 1 */ +#define FSMC_PATT4_ATTHIZ4_2 ((uint32_t)0x04000000) /*!< Bit 2 */ +#define FSMC_PATT4_ATTHIZ4_3 ((uint32_t)0x08000000) /*!< Bit 3 */ +#define FSMC_PATT4_ATTHIZ4_4 ((uint32_t)0x10000000) /*!< Bit 4 */ +#define FSMC_PATT4_ATTHIZ4_5 ((uint32_t)0x20000000) /*!< Bit 5 */ +#define FSMC_PATT4_ATTHIZ4_6 ((uint32_t)0x40000000) /*!< Bit 6 */ +#define FSMC_PATT4_ATTHIZ4_7 ((uint32_t)0x80000000) /*!< Bit 7 */ + +/****************** Bit definition for FSMC_PIO4 register *******************/ +#define FSMC_PIO4_IOSET4 ((uint32_t)0x000000FF) /*!< IOSET4[7:0] bits (I/O 4 setup time) */ +#define FSMC_PIO4_IOSET4_0 ((uint32_t)0x00000001) /*!< Bit 0 */ +#define FSMC_PIO4_IOSET4_1 ((uint32_t)0x00000002) /*!< Bit 1 */ +#define FSMC_PIO4_IOSET4_2 ((uint32_t)0x00000004) /*!< Bit 2 */ +#define FSMC_PIO4_IOSET4_3 ((uint32_t)0x00000008) /*!< Bit 3 */ +#define FSMC_PIO4_IOSET4_4 ((uint32_t)0x00000010) /*!< Bit 4 */ +#define FSMC_PIO4_IOSET4_5 ((uint32_t)0x00000020) /*!< Bit 5 */ +#define FSMC_PIO4_IOSET4_6 ((uint32_t)0x00000040) /*!< Bit 6 */ +#define FSMC_PIO4_IOSET4_7 ((uint32_t)0x00000080) /*!< Bit 7 */ + +#define FSMC_PIO4_IOWAIT4 ((uint32_t)0x0000FF00) /*!< IOWAIT4[7:0] bits (I/O 4 wait time) */ +#define FSMC_PIO4_IOWAIT4_0 ((uint32_t)0x00000100) /*!< Bit 0 */ +#define FSMC_PIO4_IOWAIT4_1 ((uint32_t)0x00000200) /*!< Bit 1 */ +#define FSMC_PIO4_IOWAIT4_2 ((uint32_t)0x00000400) /*!< Bit 2 */ +#define FSMC_PIO4_IOWAIT4_3 ((uint32_t)0x00000800) /*!< Bit 3 */ +#define FSMC_PIO4_IOWAIT4_4 ((uint32_t)0x00001000) /*!< Bit 4 */ +#define FSMC_PIO4_IOWAIT4_5 ((uint32_t)0x00002000) /*!< Bit 5 */ +#define FSMC_PIO4_IOWAIT4_6 ((uint32_t)0x00004000) /*!< Bit 6 */ +#define FSMC_PIO4_IOWAIT4_7 ((uint32_t)0x00008000) /*!< Bit 7 */ + +#define FSMC_PIO4_IOHOLD4 ((uint32_t)0x00FF0000) /*!< IOHOLD4[7:0] bits (I/O 4 hold time) */ +#define FSMC_PIO4_IOHOLD4_0 ((uint32_t)0x00010000) /*!< Bit 0 */ +#define FSMC_PIO4_IOHOLD4_1 ((uint32_t)0x00020000) /*!< Bit 1 */ +#define FSMC_PIO4_IOHOLD4_2 ((uint32_t)0x00040000) /*!< Bit 2 */ +#define FSMC_PIO4_IOHOLD4_3 ((uint32_t)0x00080000) /*!< Bit 3 */ +#define FSMC_PIO4_IOHOLD4_4 ((uint32_t)0x00100000) /*!< Bit 4 */ +#define FSMC_PIO4_IOHOLD4_5 ((uint32_t)0x00200000) /*!< Bit 5 */ +#define FSMC_PIO4_IOHOLD4_6 ((uint32_t)0x00400000) /*!< Bit 6 */ +#define FSMC_PIO4_IOHOLD4_7 ((uint32_t)0x00800000) /*!< Bit 7 */ + +#define FSMC_PIO4_IOHIZ4 ((uint32_t)0xFF000000) /*!< IOHIZ4[7:0] bits (I/O 4 databus HiZ time) */ +#define FSMC_PIO4_IOHIZ4_0 ((uint32_t)0x01000000) /*!< Bit 0 */ +#define FSMC_PIO4_IOHIZ4_1 ((uint32_t)0x02000000) /*!< Bit 1 */ +#define FSMC_PIO4_IOHIZ4_2 ((uint32_t)0x04000000) /*!< Bit 2 */ +#define FSMC_PIO4_IOHIZ4_3 ((uint32_t)0x08000000) /*!< Bit 3 */ +#define FSMC_PIO4_IOHIZ4_4 ((uint32_t)0x10000000) /*!< Bit 4 */ +#define FSMC_PIO4_IOHIZ4_5 ((uint32_t)0x20000000) /*!< Bit 5 */ +#define FSMC_PIO4_IOHIZ4_6 ((uint32_t)0x40000000) /*!< Bit 6 */ +#define FSMC_PIO4_IOHIZ4_7 ((uint32_t)0x80000000) /*!< Bit 7 */ + +/****************** Bit definition for FSMC_ECCR2 register ******************/ +#define FSMC_ECCR2_ECC2 ((uint32_t)0xFFFFFFFF) /*!< ECC result */ + +/****************** Bit definition for FSMC_ECCR3 register ******************/ +#define FSMC_ECCR3_ECC3 ((uint32_t)0xFFFFFFFF) /*!< ECC result */ + +/******************************************************************************/ +/* */ +/* SD host Interface */ +/* */ +/******************************************************************************/ + +/****************** Bit definition for SDIO_POWER register ******************/ +#define SDIO_POWER_PWRCTRL ((uint8_t)0x03) /*!< PWRCTRL[1:0] bits (Power supply control bits) */ +#define SDIO_POWER_PWRCTRL_0 ((uint8_t)0x01) /*!< Bit 0 */ +#define SDIO_POWER_PWRCTRL_1 ((uint8_t)0x02) /*!< Bit 1 */ + +/****************** Bit definition for SDIO_CLKCR register ******************/ +#define SDIO_CLKCR_CLKDIV ((uint16_t)0x00FF) /*!< Clock divide factor */ +#define SDIO_CLKCR_CLKEN ((uint16_t)0x0100) /*!< Clock enable bit */ +#define SDIO_CLKCR_PWRSAV ((uint16_t)0x0200) /*!< Power saving configuration bit */ +#define SDIO_CLKCR_BYPASS ((uint16_t)0x0400) /*!< Clock divider bypass enable bit */ + +#define SDIO_CLKCR_WIDBUS ((uint16_t)0x1800) /*!< WIDBUS[1:0] bits (Wide bus mode enable bit) */ +#define SDIO_CLKCR_WIDBUS_0 ((uint16_t)0x0800) /*!< Bit 0 */ +#define SDIO_CLKCR_WIDBUS_1 ((uint16_t)0x1000) /*!< Bit 1 */ + +#define SDIO_CLKCR_NEGEDGE ((uint16_t)0x2000) /*!< SDIO_CK dephasing selection bit */ +#define SDIO_CLKCR_HWFC_EN ((uint16_t)0x4000) /*!< HW Flow Control enable */ + +/******************* Bit definition for SDIO_ARG register *******************/ +#define SDIO_ARG_CMDARG ((uint32_t)0xFFFFFFFF) /*!< Command argument */ + +/******************* Bit definition for SDIO_CMD register *******************/ +#define SDIO_CMD_CMDINDEX ((uint16_t)0x003F) /*!< Command Index */ + +#define SDIO_CMD_WAITRESP ((uint16_t)0x00C0) /*!< WAITRESP[1:0] bits (Wait for response bits) */ +#define SDIO_CMD_WAITRESP_0 ((uint16_t)0x0040) /*!< Bit 0 */ +#define SDIO_CMD_WAITRESP_1 ((uint16_t)0x0080) /*!< Bit 1 */ + +#define SDIO_CMD_WAITINT ((uint16_t)0x0100) /*!< CPSM Waits for Interrupt Request */ +#define SDIO_CMD_WAITPEND ((uint16_t)0x0200) /*!< CPSM Waits for ends of data transfer (CmdPend internal signal) */ +#define SDIO_CMD_CPSMEN ((uint16_t)0x0400) /*!< Command path state machine (CPSM) Enable bit */ +#define SDIO_CMD_SDIOSUSPEND ((uint16_t)0x0800) /*!< SD I/O suspend command */ +#define SDIO_CMD_ENCMDCOMPL ((uint16_t)0x1000) /*!< Enable CMD completion */ +#define SDIO_CMD_NIEN ((uint16_t)0x2000) /*!< Not Interrupt Enable */ +#define SDIO_CMD_CEATACMD ((uint16_t)0x4000) /*!< CE-ATA command */ + +/***************** Bit definition for SDIO_RESPCMD register *****************/ +#define SDIO_RESPCMD_RESPCMD ((uint8_t)0x3F) /*!< Response command index */ + +/****************** Bit definition for SDIO_RESP0 register ******************/ +#define SDIO_RESP0_CARDSTATUS0 ((uint32_t)0xFFFFFFFF) /*!< Card Status */ + +/****************** Bit definition for SDIO_RESP1 register ******************/ +#define SDIO_RESP1_CARDSTATUS1 ((uint32_t)0xFFFFFFFF) /*!< Card Status */ + +/****************** Bit definition for SDIO_RESP2 register ******************/ +#define SDIO_RESP2_CARDSTATUS2 ((uint32_t)0xFFFFFFFF) /*!< Card Status */ + +/****************** Bit definition for SDIO_RESP3 register ******************/ +#define SDIO_RESP3_CARDSTATUS3 ((uint32_t)0xFFFFFFFF) /*!< Card Status */ + +/****************** Bit definition for SDIO_RESP4 register ******************/ +#define SDIO_RESP4_CARDSTATUS4 ((uint32_t)0xFFFFFFFF) /*!< Card Status */ + +/****************** Bit definition for SDIO_DTIMER register *****************/ +#define SDIO_DTIMER_DATATIME ((uint32_t)0xFFFFFFFF) /*!< Data timeout period. */ + +/****************** Bit definition for SDIO_DLEN register *******************/ +#define SDIO_DLEN_DATALENGTH ((uint32_t)0x01FFFFFF) /*!< Data length value */ + +/****************** Bit definition for SDIO_DCTRL register ******************/ +#define SDIO_DCTRL_DTEN ((uint16_t)0x0001) /*!< Data transfer enabled bit */ +#define SDIO_DCTRL_DTDIR ((uint16_t)0x0002) /*!< Data transfer direction selection */ +#define SDIO_DCTRL_DTMODE ((uint16_t)0x0004) /*!< Data transfer mode selection */ +#define SDIO_DCTRL_DMAEN ((uint16_t)0x0008) /*!< DMA enabled bit */ + +#define SDIO_DCTRL_DBLOCKSIZE ((uint16_t)0x00F0) /*!< DBLOCKSIZE[3:0] bits (Data block size) */ +#define SDIO_DCTRL_DBLOCKSIZE_0 ((uint16_t)0x0010) /*!< Bit 0 */ +#define SDIO_DCTRL_DBLOCKSIZE_1 ((uint16_t)0x0020) /*!< Bit 1 */ +#define SDIO_DCTRL_DBLOCKSIZE_2 ((uint16_t)0x0040) /*!< Bit 2 */ +#define SDIO_DCTRL_DBLOCKSIZE_3 ((uint16_t)0x0080) /*!< Bit 3 */ + +#define SDIO_DCTRL_RWSTART ((uint16_t)0x0100) /*!< Read wait start */ +#define SDIO_DCTRL_RWSTOP ((uint16_t)0x0200) /*!< Read wait stop */ +#define SDIO_DCTRL_RWMOD ((uint16_t)0x0400) /*!< Read wait mode */ +#define SDIO_DCTRL_SDIOEN ((uint16_t)0x0800) /*!< SD I/O enable functions */ + +/****************** Bit definition for SDIO_DCOUNT register *****************/ +#define SDIO_DCOUNT_DATACOUNT ((uint32_t)0x01FFFFFF) /*!< Data count value */ + +/****************** Bit definition for SDIO_STA register ********************/ +#define SDIO_STA_CCRCFAIL ((uint32_t)0x00000001) /*!< Command response received (CRC check failed) */ +#define SDIO_STA_DCRCFAIL ((uint32_t)0x00000002) /*!< Data block sent/received (CRC check failed) */ +#define SDIO_STA_CTIMEOUT ((uint32_t)0x00000004) /*!< Command response timeout */ +#define SDIO_STA_DTIMEOUT ((uint32_t)0x00000008) /*!< Data timeout */ +#define SDIO_STA_TXUNDERR ((uint32_t)0x00000010) /*!< Transmit FIFO underrun error */ +#define SDIO_STA_RXOVERR ((uint32_t)0x00000020) /*!< Received FIFO overrun error */ +#define SDIO_STA_CMDREND ((uint32_t)0x00000040) /*!< Command response received (CRC check passed) */ +#define SDIO_STA_CMDSENT ((uint32_t)0x00000080) /*!< Command sent (no response required) */ +#define SDIO_STA_DATAEND ((uint32_t)0x00000100) /*!< Data end (data counter, SDIDCOUNT, is zero) */ +#define SDIO_STA_STBITERR ((uint32_t)0x00000200) /*!< Start bit not detected on all data signals in wide bus mode */ +#define SDIO_STA_DBCKEND ((uint32_t)0x00000400) /*!< Data block sent/received (CRC check passed) */ +#define SDIO_STA_CMDACT ((uint32_t)0x00000800) /*!< Command transfer in progress */ +#define SDIO_STA_TXACT ((uint32_t)0x00001000) /*!< Data transmit in progress */ +#define SDIO_STA_RXACT ((uint32_t)0x00002000) /*!< Data receive in progress */ +#define SDIO_STA_TXFIFOHE ((uint32_t)0x00004000) /*!< Transmit FIFO Half Empty: at least 8 words can be written into the FIFO */ +#define SDIO_STA_RXFIFOHF ((uint32_t)0x00008000) /*!< Receive FIFO Half Full: there are at least 8 words in the FIFO */ +#define SDIO_STA_TXFIFOF ((uint32_t)0x00010000) /*!< Transmit FIFO full */ +#define SDIO_STA_RXFIFOF ((uint32_t)0x00020000) /*!< Receive FIFO full */ +#define SDIO_STA_TXFIFOE ((uint32_t)0x00040000) /*!< Transmit FIFO empty */ +#define SDIO_STA_RXFIFOE ((uint32_t)0x00080000) /*!< Receive FIFO empty */ +#define SDIO_STA_TXDAVL ((uint32_t)0x00100000) /*!< Data available in transmit FIFO */ +#define SDIO_STA_RXDAVL ((uint32_t)0x00200000) /*!< Data available in receive FIFO */ +#define SDIO_STA_SDIOIT ((uint32_t)0x00400000) /*!< SDIO interrupt received */ +#define SDIO_STA_CEATAEND ((uint32_t)0x00800000) /*!< CE-ATA command completion signal received for CMD61 */ + +/******************* Bit definition for SDIO_ICR register *******************/ +#define SDIO_ICR_CCRCFAILC ((uint32_t)0x00000001) /*!< CCRCFAIL flag clear bit */ +#define SDIO_ICR_DCRCFAILC ((uint32_t)0x00000002) /*!< DCRCFAIL flag clear bit */ +#define SDIO_ICR_CTIMEOUTC ((uint32_t)0x00000004) /*!< CTIMEOUT flag clear bit */ +#define SDIO_ICR_DTIMEOUTC ((uint32_t)0x00000008) /*!< DTIMEOUT flag clear bit */ +#define SDIO_ICR_TXUNDERRC ((uint32_t)0x00000010) /*!< TXUNDERR flag clear bit */ +#define SDIO_ICR_RXOVERRC ((uint32_t)0x00000020) /*!< RXOVERR flag clear bit */ +#define SDIO_ICR_CMDRENDC ((uint32_t)0x00000040) /*!< CMDREND flag clear bit */ +#define SDIO_ICR_CMDSENTC ((uint32_t)0x00000080) /*!< CMDSENT flag clear bit */ +#define SDIO_ICR_DATAENDC ((uint32_t)0x00000100) /*!< DATAEND flag clear bit */ +#define SDIO_ICR_STBITERRC ((uint32_t)0x00000200) /*!< STBITERR flag clear bit */ +#define SDIO_ICR_DBCKENDC ((uint32_t)0x00000400) /*!< DBCKEND flag clear bit */ +#define SDIO_ICR_SDIOITC ((uint32_t)0x00400000) /*!< SDIOIT flag clear bit */ +#define SDIO_ICR_CEATAENDC ((uint32_t)0x00800000) /*!< CEATAEND flag clear bit */ + +/****************** Bit definition for SDIO_MASK register *******************/ +#define SDIO_MASK_CCRCFAILIE ((uint32_t)0x00000001) /*!< Command CRC Fail Interrupt Enable */ +#define SDIO_MASK_DCRCFAILIE ((uint32_t)0x00000002) /*!< Data CRC Fail Interrupt Enable */ +#define SDIO_MASK_CTIMEOUTIE ((uint32_t)0x00000004) /*!< Command TimeOut Interrupt Enable */ +#define SDIO_MASK_DTIMEOUTIE ((uint32_t)0x00000008) /*!< Data TimeOut Interrupt Enable */ +#define SDIO_MASK_TXUNDERRIE ((uint32_t)0x00000010) /*!< Tx FIFO UnderRun Error Interrupt Enable */ +#define SDIO_MASK_RXOVERRIE ((uint32_t)0x00000020) /*!< Rx FIFO OverRun Error Interrupt Enable */ +#define SDIO_MASK_CMDRENDIE ((uint32_t)0x00000040) /*!< Command Response Received Interrupt Enable */ +#define SDIO_MASK_CMDSENTIE ((uint32_t)0x00000080) /*!< Command Sent Interrupt Enable */ +#define SDIO_MASK_DATAENDIE ((uint32_t)0x00000100) /*!< Data End Interrupt Enable */ +#define SDIO_MASK_STBITERRIE ((uint32_t)0x00000200) /*!< Start Bit Error Interrupt Enable */ +#define SDIO_MASK_DBCKENDIE ((uint32_t)0x00000400) /*!< Data Block End Interrupt Enable */ +#define SDIO_MASK_CMDACTIE ((uint32_t)0x00000800) /*!< Command Acting Interrupt Enable */ +#define SDIO_MASK_TXACTIE ((uint32_t)0x00001000) /*!< Data Transmit Acting Interrupt Enable */ +#define SDIO_MASK_RXACTIE ((uint32_t)0x00002000) /*!< Data receive acting interrupt enabled */ +#define SDIO_MASK_TXFIFOHEIE ((uint32_t)0x00004000) /*!< Tx FIFO Half Empty interrupt Enable */ +#define SDIO_MASK_RXFIFOHFIE ((uint32_t)0x00008000) /*!< Rx FIFO Half Full interrupt Enable */ +#define SDIO_MASK_TXFIFOFIE ((uint32_t)0x00010000) /*!< Tx FIFO Full interrupt Enable */ +#define SDIO_MASK_RXFIFOFIE ((uint32_t)0x00020000) /*!< Rx FIFO Full interrupt Enable */ +#define SDIO_MASK_TXFIFOEIE ((uint32_t)0x00040000) /*!< Tx FIFO Empty interrupt Enable */ +#define SDIO_MASK_RXFIFOEIE ((uint32_t)0x00080000) /*!< Rx FIFO Empty interrupt Enable */ +#define SDIO_MASK_TXDAVLIE ((uint32_t)0x00100000) /*!< Data available in Tx FIFO interrupt Enable */ +#define SDIO_MASK_RXDAVLIE ((uint32_t)0x00200000) /*!< Data available in Rx FIFO interrupt Enable */ +#define SDIO_MASK_SDIOITIE ((uint32_t)0x00400000) /*!< SDIO Mode Interrupt Received interrupt Enable */ +#define SDIO_MASK_CEATAENDIE ((uint32_t)0x00800000) /*!< CE-ATA command completion signal received Interrupt Enable */ + +/***************** Bit definition for SDIO_FIFOCNT register *****************/ +#define SDIO_FIFOCNT_FIFOCOUNT ((uint32_t)0x00FFFFFF) /*!< Remaining number of words to be written to or read from the FIFO */ + +/****************** Bit definition for SDIO_FIFO register *******************/ +#define SDIO_FIFO_FIFODATA ((uint32_t)0xFFFFFFFF) /*!< Receive and transmit FIFO data */ + +/******************************************************************************/ +/* */ +/* USB Device FS */ +/* */ +/******************************************************************************/ + +/*!< Endpoint-specific registers */ +/******************* Bit definition for USB_EP0R register *******************/ +#define USB_EP0R_EA ((uint16_t)0x000F) /*!< Endpoint Address */ + +#define USB_EP0R_STAT_TX ((uint16_t)0x0030) /*!< STAT_TX[1:0] bits (Status bits, for transmission transfers) */ +#define USB_EP0R_STAT_TX_0 ((uint16_t)0x0010) /*!< Bit 0 */ +#define USB_EP0R_STAT_TX_1 ((uint16_t)0x0020) /*!< Bit 1 */ + +#define USB_EP0R_DTOG_TX ((uint16_t)0x0040) /*!< Data Toggle, for transmission transfers */ +#define USB_EP0R_CTR_TX ((uint16_t)0x0080) /*!< Correct Transfer for transmission */ +#define USB_EP0R_EP_KIND ((uint16_t)0x0100) /*!< Endpoint Kind */ + +#define USB_EP0R_EP_TYPE ((uint16_t)0x0600) /*!< EP_TYPE[1:0] bits (Endpoint type) */ +#define USB_EP0R_EP_TYPE_0 ((uint16_t)0x0200) /*!< Bit 0 */ +#define USB_EP0R_EP_TYPE_1 ((uint16_t)0x0400) /*!< Bit 1 */ + +#define USB_EP0R_SETUP ((uint16_t)0x0800) /*!< Setup transaction completed */ + +#define USB_EP0R_STAT_RX ((uint16_t)0x3000) /*!< STAT_RX[1:0] bits (Status bits, for reception transfers) */ +#define USB_EP0R_STAT_RX_0 ((uint16_t)0x1000) /*!< Bit 0 */ +#define USB_EP0R_STAT_RX_1 ((uint16_t)0x2000) /*!< Bit 1 */ + +#define USB_EP0R_DTOG_RX ((uint16_t)0x4000) /*!< Data Toggle, for reception transfers */ +#define USB_EP0R_CTR_RX ((uint16_t)0x8000) /*!< Correct Transfer for reception */ + +/******************* Bit definition for USB_EP1R register *******************/ +#define USB_EP1R_EA ((uint16_t)0x000F) /*!< Endpoint Address */ + +#define USB_EP1R_STAT_TX ((uint16_t)0x0030) /*!< STAT_TX[1:0] bits (Status bits, for transmission transfers) */ +#define USB_EP1R_STAT_TX_0 ((uint16_t)0x0010) /*!< Bit 0 */ +#define USB_EP1R_STAT_TX_1 ((uint16_t)0x0020) /*!< Bit 1 */ + +#define USB_EP1R_DTOG_TX ((uint16_t)0x0040) /*!< Data Toggle, for transmission transfers */ +#define USB_EP1R_CTR_TX ((uint16_t)0x0080) /*!< Correct Transfer for transmission */ +#define USB_EP1R_EP_KIND ((uint16_t)0x0100) /*!< Endpoint Kind */ + +#define USB_EP1R_EP_TYPE ((uint16_t)0x0600) /*!< EP_TYPE[1:0] bits (Endpoint type) */ +#define USB_EP1R_EP_TYPE_0 ((uint16_t)0x0200) /*!< Bit 0 */ +#define USB_EP1R_EP_TYPE_1 ((uint16_t)0x0400) /*!< Bit 1 */ + +#define USB_EP1R_SETUP ((uint16_t)0x0800) /*!< Setup transaction completed */ + +#define USB_EP1R_STAT_RX ((uint16_t)0x3000) /*!< STAT_RX[1:0] bits (Status bits, for reception transfers) */ +#define USB_EP1R_STAT_RX_0 ((uint16_t)0x1000) /*!< Bit 0 */ +#define USB_EP1R_STAT_RX_1 ((uint16_t)0x2000) /*!< Bit 1 */ + +#define USB_EP1R_DTOG_RX ((uint16_t)0x4000) /*!< Data Toggle, for reception transfers */ +#define USB_EP1R_CTR_RX ((uint16_t)0x8000) /*!< Correct Transfer for reception */ + +/******************* Bit definition for USB_EP2R register *******************/ +#define USB_EP2R_EA ((uint16_t)0x000F) /*!< Endpoint Address */ + +#define USB_EP2R_STAT_TX ((uint16_t)0x0030) /*!< STAT_TX[1:0] bits (Status bits, for transmission transfers) */ +#define USB_EP2R_STAT_TX_0 ((uint16_t)0x0010) /*!< Bit 0 */ +#define USB_EP2R_STAT_TX_1 ((uint16_t)0x0020) /*!< Bit 1 */ + +#define USB_EP2R_DTOG_TX ((uint16_t)0x0040) /*!< Data Toggle, for transmission transfers */ +#define USB_EP2R_CTR_TX ((uint16_t)0x0080) /*!< Correct Transfer for transmission */ +#define USB_EP2R_EP_KIND ((uint16_t)0x0100) /*!< Endpoint Kind */ + +#define USB_EP2R_EP_TYPE ((uint16_t)0x0600) /*!< EP_TYPE[1:0] bits (Endpoint type) */ +#define USB_EP2R_EP_TYPE_0 ((uint16_t)0x0200) /*!< Bit 0 */ +#define USB_EP2R_EP_TYPE_1 ((uint16_t)0x0400) /*!< Bit 1 */ + +#define USB_EP2R_SETUP ((uint16_t)0x0800) /*!< Setup transaction completed */ + +#define USB_EP2R_STAT_RX ((uint16_t)0x3000) /*!< STAT_RX[1:0] bits (Status bits, for reception transfers) */ +#define USB_EP2R_STAT_RX_0 ((uint16_t)0x1000) /*!< Bit 0 */ +#define USB_EP2R_STAT_RX_1 ((uint16_t)0x2000) /*!< Bit 1 */ + +#define USB_EP2R_DTOG_RX ((uint16_t)0x4000) /*!< Data Toggle, for reception transfers */ +#define USB_EP2R_CTR_RX ((uint16_t)0x8000) /*!< Correct Transfer for reception */ + +/******************* Bit definition for USB_EP3R register *******************/ +#define USB_EP3R_EA ((uint16_t)0x000F) /*!< Endpoint Address */ + +#define USB_EP3R_STAT_TX ((uint16_t)0x0030) /*!< STAT_TX[1:0] bits (Status bits, for transmission transfers) */ +#define USB_EP3R_STAT_TX_0 ((uint16_t)0x0010) /*!< Bit 0 */ +#define USB_EP3R_STAT_TX_1 ((uint16_t)0x0020) /*!< Bit 1 */ + +#define USB_EP3R_DTOG_TX ((uint16_t)0x0040) /*!< Data Toggle, for transmission transfers */ +#define USB_EP3R_CTR_TX ((uint16_t)0x0080) /*!< Correct Transfer for transmission */ +#define USB_EP3R_EP_KIND ((uint16_t)0x0100) /*!< Endpoint Kind */ + +#define USB_EP3R_EP_TYPE ((uint16_t)0x0600) /*!< EP_TYPE[1:0] bits (Endpoint type) */ +#define USB_EP3R_EP_TYPE_0 ((uint16_t)0x0200) /*!< Bit 0 */ +#define USB_EP3R_EP_TYPE_1 ((uint16_t)0x0400) /*!< Bit 1 */ + +#define USB_EP3R_SETUP ((uint16_t)0x0800) /*!< Setup transaction completed */ + +#define USB_EP3R_STAT_RX ((uint16_t)0x3000) /*!< STAT_RX[1:0] bits (Status bits, for reception transfers) */ +#define USB_EP3R_STAT_RX_0 ((uint16_t)0x1000) /*!< Bit 0 */ +#define USB_EP3R_STAT_RX_1 ((uint16_t)0x2000) /*!< Bit 1 */ + +#define USB_EP3R_DTOG_RX ((uint16_t)0x4000) /*!< Data Toggle, for reception transfers */ +#define USB_EP3R_CTR_RX ((uint16_t)0x8000) /*!< Correct Transfer for reception */ + +/******************* Bit definition for USB_EP4R register *******************/ +#define USB_EP4R_EA ((uint16_t)0x000F) /*!< Endpoint Address */ + +#define USB_EP4R_STAT_TX ((uint16_t)0x0030) /*!< STAT_TX[1:0] bits (Status bits, for transmission transfers) */ +#define USB_EP4R_STAT_TX_0 ((uint16_t)0x0010) /*!< Bit 0 */ +#define USB_EP4R_STAT_TX_1 ((uint16_t)0x0020) /*!< Bit 1 */ + +#define USB_EP4R_DTOG_TX ((uint16_t)0x0040) /*!< Data Toggle, for transmission transfers */ +#define USB_EP4R_CTR_TX ((uint16_t)0x0080) /*!< Correct Transfer for transmission */ +#define USB_EP4R_EP_KIND ((uint16_t)0x0100) /*!< Endpoint Kind */ + +#define USB_EP4R_EP_TYPE ((uint16_t)0x0600) /*!< EP_TYPE[1:0] bits (Endpoint type) */ +#define USB_EP4R_EP_TYPE_0 ((uint16_t)0x0200) /*!< Bit 0 */ +#define USB_EP4R_EP_TYPE_1 ((uint16_t)0x0400) /*!< Bit 1 */ + +#define USB_EP4R_SETUP ((uint16_t)0x0800) /*!< Setup transaction completed */ + +#define USB_EP4R_STAT_RX ((uint16_t)0x3000) /*!< STAT_RX[1:0] bits (Status bits, for reception transfers) */ +#define USB_EP4R_STAT_RX_0 ((uint16_t)0x1000) /*!< Bit 0 */ +#define USB_EP4R_STAT_RX_1 ((uint16_t)0x2000) /*!< Bit 1 */ + +#define USB_EP4R_DTOG_RX ((uint16_t)0x4000) /*!< Data Toggle, for reception transfers */ +#define USB_EP4R_CTR_RX ((uint16_t)0x8000) /*!< Correct Transfer for reception */ + +/******************* Bit definition for USB_EP5R register *******************/ +#define USB_EP5R_EA ((uint16_t)0x000F) /*!< Endpoint Address */ + +#define USB_EP5R_STAT_TX ((uint16_t)0x0030) /*!< STAT_TX[1:0] bits (Status bits, for transmission transfers) */ +#define USB_EP5R_STAT_TX_0 ((uint16_t)0x0010) /*!< Bit 0 */ +#define USB_EP5R_STAT_TX_1 ((uint16_t)0x0020) /*!< Bit 1 */ + +#define USB_EP5R_DTOG_TX ((uint16_t)0x0040) /*!< Data Toggle, for transmission transfers */ +#define USB_EP5R_CTR_TX ((uint16_t)0x0080) /*!< Correct Transfer for transmission */ +#define USB_EP5R_EP_KIND ((uint16_t)0x0100) /*!< Endpoint Kind */ + +#define USB_EP5R_EP_TYPE ((uint16_t)0x0600) /*!< EP_TYPE[1:0] bits (Endpoint type) */ +#define USB_EP5R_EP_TYPE_0 ((uint16_t)0x0200) /*!< Bit 0 */ +#define USB_EP5R_EP_TYPE_1 ((uint16_t)0x0400) /*!< Bit 1 */ + +#define USB_EP5R_SETUP ((uint16_t)0x0800) /*!< Setup transaction completed */ + +#define USB_EP5R_STAT_RX ((uint16_t)0x3000) /*!< STAT_RX[1:0] bits (Status bits, for reception transfers) */ +#define USB_EP5R_STAT_RX_0 ((uint16_t)0x1000) /*!< Bit 0 */ +#define USB_EP5R_STAT_RX_1 ((uint16_t)0x2000) /*!< Bit 1 */ + +#define USB_EP5R_DTOG_RX ((uint16_t)0x4000) /*!< Data Toggle, for reception transfers */ +#define USB_EP5R_CTR_RX ((uint16_t)0x8000) /*!< Correct Transfer for reception */ + +/******************* Bit definition for USB_EP6R register *******************/ +#define USB_EP6R_EA ((uint16_t)0x000F) /*!< Endpoint Address */ + +#define USB_EP6R_STAT_TX ((uint16_t)0x0030) /*!< STAT_TX[1:0] bits (Status bits, for transmission transfers) */ +#define USB_EP6R_STAT_TX_0 ((uint16_t)0x0010) /*!< Bit 0 */ +#define USB_EP6R_STAT_TX_1 ((uint16_t)0x0020) /*!< Bit 1 */ + +#define USB_EP6R_DTOG_TX ((uint16_t)0x0040) /*!< Data Toggle, for transmission transfers */ +#define USB_EP6R_CTR_TX ((uint16_t)0x0080) /*!< Correct Transfer for transmission */ +#define USB_EP6R_EP_KIND ((uint16_t)0x0100) /*!< Endpoint Kind */ + +#define USB_EP6R_EP_TYPE ((uint16_t)0x0600) /*!< EP_TYPE[1:0] bits (Endpoint type) */ +#define USB_EP6R_EP_TYPE_0 ((uint16_t)0x0200) /*!< Bit 0 */ +#define USB_EP6R_EP_TYPE_1 ((uint16_t)0x0400) /*!< Bit 1 */ + +#define USB_EP6R_SETUP ((uint16_t)0x0800) /*!< Setup transaction completed */ + +#define USB_EP6R_STAT_RX ((uint16_t)0x3000) /*!< STAT_RX[1:0] bits (Status bits, for reception transfers) */ +#define USB_EP6R_STAT_RX_0 ((uint16_t)0x1000) /*!< Bit 0 */ +#define USB_EP6R_STAT_RX_1 ((uint16_t)0x2000) /*!< Bit 1 */ + +#define USB_EP6R_DTOG_RX ((uint16_t)0x4000) /*!< Data Toggle, for reception transfers */ +#define USB_EP6R_CTR_RX ((uint16_t)0x8000) /*!< Correct Transfer for reception */ + +/******************* Bit definition for USB_EP7R register *******************/ +#define USB_EP7R_EA ((uint16_t)0x000F) /*!< Endpoint Address */ + +#define USB_EP7R_STAT_TX ((uint16_t)0x0030) /*!< STAT_TX[1:0] bits (Status bits, for transmission transfers) */ +#define USB_EP7R_STAT_TX_0 ((uint16_t)0x0010) /*!< Bit 0 */ +#define USB_EP7R_STAT_TX_1 ((uint16_t)0x0020) /*!< Bit 1 */ + +#define USB_EP7R_DTOG_TX ((uint16_t)0x0040) /*!< Data Toggle, for transmission transfers */ +#define USB_EP7R_CTR_TX ((uint16_t)0x0080) /*!< Correct Transfer for transmission */ +#define USB_EP7R_EP_KIND ((uint16_t)0x0100) /*!< Endpoint Kind */ + +#define USB_EP7R_EP_TYPE ((uint16_t)0x0600) /*!< EP_TYPE[1:0] bits (Endpoint type) */ +#define USB_EP7R_EP_TYPE_0 ((uint16_t)0x0200) /*!< Bit 0 */ +#define USB_EP7R_EP_TYPE_1 ((uint16_t)0x0400) /*!< Bit 1 */ + +#define USB_EP7R_SETUP ((uint16_t)0x0800) /*!< Setup transaction completed */ + +#define USB_EP7R_STAT_RX ((uint16_t)0x3000) /*!< STAT_RX[1:0] bits (Status bits, for reception transfers) */ +#define USB_EP7R_STAT_RX_0 ((uint16_t)0x1000) /*!< Bit 0 */ +#define USB_EP7R_STAT_RX_1 ((uint16_t)0x2000) /*!< Bit 1 */ + +#define USB_EP7R_DTOG_RX ((uint16_t)0x4000) /*!< Data Toggle, for reception transfers */ +#define USB_EP7R_CTR_RX ((uint16_t)0x8000) /*!< Correct Transfer for reception */ + +/*!< Common registers */ +/******************* Bit definition for USB_CNTR register *******************/ +#define USB_CNTR_FRES ((uint16_t)0x0001) /*!< Force USB Reset */ +#define USB_CNTR_PDWN ((uint16_t)0x0002) /*!< Power down */ +#define USB_CNTR_LP_MODE ((uint16_t)0x0004) /*!< Low-power mode */ +#define USB_CNTR_FSUSP ((uint16_t)0x0008) /*!< Force suspend */ +#define USB_CNTR_RESUME ((uint16_t)0x0010) /*!< Resume request */ +#define USB_CNTR_ESOFM ((uint16_t)0x0100) /*!< Expected Start Of Frame Interrupt Mask */ +#define USB_CNTR_SOFM ((uint16_t)0x0200) /*!< Start Of Frame Interrupt Mask */ +#define USB_CNTR_RESETM ((uint16_t)0x0400) /*!< RESET Interrupt Mask */ +#define USB_CNTR_SUSPM ((uint16_t)0x0800) /*!< Suspend mode Interrupt Mask */ +#define USB_CNTR_WKUPM ((uint16_t)0x1000) /*!< Wakeup Interrupt Mask */ +#define USB_CNTR_ERRM ((uint16_t)0x2000) /*!< Error Interrupt Mask */ +#define USB_CNTR_PMAOVRM ((uint16_t)0x4000) /*!< Packet Memory Area Over / Underrun Interrupt Mask */ +#define USB_CNTR_CTRM ((uint16_t)0x8000) /*!< Correct Transfer Interrupt Mask */ + +/******************* Bit definition for USB_ISTR register *******************/ +#define USB_ISTR_EP_ID ((uint16_t)0x000F) /*!< Endpoint Identifier */ +#define USB_ISTR_DIR ((uint16_t)0x0010) /*!< Direction of transaction */ +#define USB_ISTR_ESOF ((uint16_t)0x0100) /*!< Expected Start Of Frame */ +#define USB_ISTR_SOF ((uint16_t)0x0200) /*!< Start Of Frame */ +#define USB_ISTR_RESET ((uint16_t)0x0400) /*!< USB RESET request */ +#define USB_ISTR_SUSP ((uint16_t)0x0800) /*!< Suspend mode request */ +#define USB_ISTR_WKUP ((uint16_t)0x1000) /*!< Wake up */ +#define USB_ISTR_ERR ((uint16_t)0x2000) /*!< Error */ +#define USB_ISTR_PMAOVR ((uint16_t)0x4000) /*!< Packet Memory Area Over / Underrun */ +#define USB_ISTR_CTR ((uint16_t)0x8000) /*!< Correct Transfer */ + +/******************* Bit definition for USB_FNR register ********************/ +#define USB_FNR_FN ((uint16_t)0x07FF) /*!< Frame Number */ +#define USB_FNR_LSOF ((uint16_t)0x1800) /*!< Lost SOF */ +#define USB_FNR_LCK ((uint16_t)0x2000) /*!< Locked */ +#define USB_FNR_RXDM ((uint16_t)0x4000) /*!< Receive Data - Line Status */ +#define USB_FNR_RXDP ((uint16_t)0x8000) /*!< Receive Data + Line Status */ + +/****************** Bit definition for USB_DADDR register *******************/ +#define USB_DADDR_ADD ((uint8_t)0x7F) /*!< ADD[6:0] bits (Device Address) */ +#define USB_DADDR_ADD0 ((uint8_t)0x01) /*!< Bit 0 */ +#define USB_DADDR_ADD1 ((uint8_t)0x02) /*!< Bit 1 */ +#define USB_DADDR_ADD2 ((uint8_t)0x04) /*!< Bit 2 */ +#define USB_DADDR_ADD3 ((uint8_t)0x08) /*!< Bit 3 */ +#define USB_DADDR_ADD4 ((uint8_t)0x10) /*!< Bit 4 */ +#define USB_DADDR_ADD5 ((uint8_t)0x20) /*!< Bit 5 */ +#define USB_DADDR_ADD6 ((uint8_t)0x40) /*!< Bit 6 */ + +#define USB_DADDR_EF ((uint8_t)0x80) /*!< Enable Function */ + +/****************** Bit definition for USB_BTABLE register ******************/ +#define USB_BTABLE_BTABLE ((uint16_t)0xFFF8) /*!< Buffer Table */ + +/*!< Buffer descriptor table */ +/***************** Bit definition for USB_ADDR0_TX register *****************/ +#define USB_ADDR0_TX_ADDR0_TX ((uint16_t)0xFFFE) /*!< Transmission Buffer Address 0 */ + +/***************** Bit definition for USB_ADDR1_TX register *****************/ +#define USB_ADDR1_TX_ADDR1_TX ((uint16_t)0xFFFE) /*!< Transmission Buffer Address 1 */ + +/***************** Bit definition for USB_ADDR2_TX register *****************/ +#define USB_ADDR2_TX_ADDR2_TX ((uint16_t)0xFFFE) /*!< Transmission Buffer Address 2 */ + +/***************** Bit definition for USB_ADDR3_TX register *****************/ +#define USB_ADDR3_TX_ADDR3_TX ((uint16_t)0xFFFE) /*!< Transmission Buffer Address 3 */ + +/***************** Bit definition for USB_ADDR4_TX register *****************/ +#define USB_ADDR4_TX_ADDR4_TX ((uint16_t)0xFFFE) /*!< Transmission Buffer Address 4 */ + +/***************** Bit definition for USB_ADDR5_TX register *****************/ +#define USB_ADDR5_TX_ADDR5_TX ((uint16_t)0xFFFE) /*!< Transmission Buffer Address 5 */ + +/***************** Bit definition for USB_ADDR6_TX register *****************/ +#define USB_ADDR6_TX_ADDR6_TX ((uint16_t)0xFFFE) /*!< Transmission Buffer Address 6 */ + +/***************** Bit definition for USB_ADDR7_TX register *****************/ +#define USB_ADDR7_TX_ADDR7_TX ((uint16_t)0xFFFE) /*!< Transmission Buffer Address 7 */ + +/*----------------------------------------------------------------------------*/ + +/***************** Bit definition for USB_COUNT0_TX register ****************/ +#define USB_COUNT0_TX_COUNT0_TX ((uint16_t)0x03FF) /*!< Transmission Byte Count 0 */ + +/***************** Bit definition for USB_COUNT1_TX register ****************/ +#define USB_COUNT1_TX_COUNT1_TX ((uint16_t)0x03FF) /*!< Transmission Byte Count 1 */ + +/***************** Bit definition for USB_COUNT2_TX register ****************/ +#define USB_COUNT2_TX_COUNT2_TX ((uint16_t)0x03FF) /*!< Transmission Byte Count 2 */ + +/***************** Bit definition for USB_COUNT3_TX register ****************/ +#define USB_COUNT3_TX_COUNT3_TX ((uint16_t)0x03FF) /*!< Transmission Byte Count 3 */ + +/***************** Bit definition for USB_COUNT4_TX register ****************/ +#define USB_COUNT4_TX_COUNT4_TX ((uint16_t)0x03FF) /*!< Transmission Byte Count 4 */ + +/***************** Bit definition for USB_COUNT5_TX register ****************/ +#define USB_COUNT5_TX_COUNT5_TX ((uint16_t)0x03FF) /*!< Transmission Byte Count 5 */ + +/***************** Bit definition for USB_COUNT6_TX register ****************/ +#define USB_COUNT6_TX_COUNT6_TX ((uint16_t)0x03FF) /*!< Transmission Byte Count 6 */ + +/***************** Bit definition for USB_COUNT7_TX register ****************/ +#define USB_COUNT7_TX_COUNT7_TX ((uint16_t)0x03FF) /*!< Transmission Byte Count 7 */ + +/*----------------------------------------------------------------------------*/ + +/**************** Bit definition for USB_COUNT0_TX_0 register ***************/ +#define USB_COUNT0_TX_0_COUNT0_TX_0 ((uint32_t)0x000003FF) /*!< Transmission Byte Count 0 (low) */ + +/**************** Bit definition for USB_COUNT0_TX_1 register ***************/ +#define USB_COUNT0_TX_1_COUNT0_TX_1 ((uint32_t)0x03FF0000) /*!< Transmission Byte Count 0 (high) */ + +/**************** Bit definition for USB_COUNT1_TX_0 register ***************/ +#define USB_COUNT1_TX_0_COUNT1_TX_0 ((uint32_t)0x000003FF) /*!< Transmission Byte Count 1 (low) */ + +/**************** Bit definition for USB_COUNT1_TX_1 register ***************/ +#define USB_COUNT1_TX_1_COUNT1_TX_1 ((uint32_t)0x03FF0000) /*!< Transmission Byte Count 1 (high) */ + +/**************** Bit definition for USB_COUNT2_TX_0 register ***************/ +#define USB_COUNT2_TX_0_COUNT2_TX_0 ((uint32_t)0x000003FF) /*!< Transmission Byte Count 2 (low) */ + +/**************** Bit definition for USB_COUNT2_TX_1 register ***************/ +#define USB_COUNT2_TX_1_COUNT2_TX_1 ((uint32_t)0x03FF0000) /*!< Transmission Byte Count 2 (high) */ + +/**************** Bit definition for USB_COUNT3_TX_0 register ***************/ +#define USB_COUNT3_TX_0_COUNT3_TX_0 ((uint16_t)0x000003FF) /*!< Transmission Byte Count 3 (low) */ + +/**************** Bit definition for USB_COUNT3_TX_1 register ***************/ +#define USB_COUNT3_TX_1_COUNT3_TX_1 ((uint16_t)0x03FF0000) /*!< Transmission Byte Count 3 (high) */ + +/**************** Bit definition for USB_COUNT4_TX_0 register ***************/ +#define USB_COUNT4_TX_0_COUNT4_TX_0 ((uint32_t)0x000003FF) /*!< Transmission Byte Count 4 (low) */ + +/**************** Bit definition for USB_COUNT4_TX_1 register ***************/ +#define USB_COUNT4_TX_1_COUNT4_TX_1 ((uint32_t)0x03FF0000) /*!< Transmission Byte Count 4 (high) */ + +/**************** Bit definition for USB_COUNT5_TX_0 register ***************/ +#define USB_COUNT5_TX_0_COUNT5_TX_0 ((uint32_t)0x000003FF) /*!< Transmission Byte Count 5 (low) */ + +/**************** Bit definition for USB_COUNT5_TX_1 register ***************/ +#define USB_COUNT5_TX_1_COUNT5_TX_1 ((uint32_t)0x03FF0000) /*!< Transmission Byte Count 5 (high) */ + +/**************** Bit definition for USB_COUNT6_TX_0 register ***************/ +#define USB_COUNT6_TX_0_COUNT6_TX_0 ((uint32_t)0x000003FF) /*!< Transmission Byte Count 6 (low) */ + +/**************** Bit definition for USB_COUNT6_TX_1 register ***************/ +#define USB_COUNT6_TX_1_COUNT6_TX_1 ((uint32_t)0x03FF0000) /*!< Transmission Byte Count 6 (high) */ + +/**************** Bit definition for USB_COUNT7_TX_0 register ***************/ +#define USB_COUNT7_TX_0_COUNT7_TX_0 ((uint32_t)0x000003FF) /*!< Transmission Byte Count 7 (low) */ + +/**************** Bit definition for USB_COUNT7_TX_1 register ***************/ +#define USB_COUNT7_TX_1_COUNT7_TX_1 ((uint32_t)0x03FF0000) /*!< Transmission Byte Count 7 (high) */ + +/*----------------------------------------------------------------------------*/ + +/***************** Bit definition for USB_ADDR0_RX register *****************/ +#define USB_ADDR0_RX_ADDR0_RX ((uint16_t)0xFFFE) /*!< Reception Buffer Address 0 */ + +/***************** Bit definition for USB_ADDR1_RX register *****************/ +#define USB_ADDR1_RX_ADDR1_RX ((uint16_t)0xFFFE) /*!< Reception Buffer Address 1 */ + +/***************** Bit definition for USB_ADDR2_RX register *****************/ +#define USB_ADDR2_RX_ADDR2_RX ((uint16_t)0xFFFE) /*!< Reception Buffer Address 2 */ + +/***************** Bit definition for USB_ADDR3_RX register *****************/ +#define USB_ADDR3_RX_ADDR3_RX ((uint16_t)0xFFFE) /*!< Reception Buffer Address 3 */ + +/***************** Bit definition for USB_ADDR4_RX register *****************/ +#define USB_ADDR4_RX_ADDR4_RX ((uint16_t)0xFFFE) /*!< Reception Buffer Address 4 */ + +/***************** Bit definition for USB_ADDR5_RX register *****************/ +#define USB_ADDR5_RX_ADDR5_RX ((uint16_t)0xFFFE) /*!< Reception Buffer Address 5 */ + +/***************** Bit definition for USB_ADDR6_RX register *****************/ +#define USB_ADDR6_RX_ADDR6_RX ((uint16_t)0xFFFE) /*!< Reception Buffer Address 6 */ + +/***************** Bit definition for USB_ADDR7_RX register *****************/ +#define USB_ADDR7_RX_ADDR7_RX ((uint16_t)0xFFFE) /*!< Reception Buffer Address 7 */ + +/*----------------------------------------------------------------------------*/ + +/***************** Bit definition for USB_COUNT0_RX register ****************/ +#define USB_COUNT0_RX_COUNT0_RX ((uint16_t)0x03FF) /*!< Reception Byte Count */ + +#define USB_COUNT0_RX_NUM_BLOCK ((uint16_t)0x7C00) /*!< NUM_BLOCK[4:0] bits (Number of blocks) */ +#define USB_COUNT0_RX_NUM_BLOCK_0 ((uint16_t)0x0400) /*!< Bit 0 */ +#define USB_COUNT0_RX_NUM_BLOCK_1 ((uint16_t)0x0800) /*!< Bit 1 */ +#define USB_COUNT0_RX_NUM_BLOCK_2 ((uint16_t)0x1000) /*!< Bit 2 */ +#define USB_COUNT0_RX_NUM_BLOCK_3 ((uint16_t)0x2000) /*!< Bit 3 */ +#define USB_COUNT0_RX_NUM_BLOCK_4 ((uint16_t)0x4000) /*!< Bit 4 */ + +#define USB_COUNT0_RX_BLSIZE ((uint16_t)0x8000) /*!< BLock SIZE */ + +/***************** Bit definition for USB_COUNT1_RX register ****************/ +#define USB_COUNT1_RX_COUNT1_RX ((uint16_t)0x03FF) /*!< Reception Byte Count */ + +#define USB_COUNT1_RX_NUM_BLOCK ((uint16_t)0x7C00) /*!< NUM_BLOCK[4:0] bits (Number of blocks) */ +#define USB_COUNT1_RX_NUM_BLOCK_0 ((uint16_t)0x0400) /*!< Bit 0 */ +#define USB_COUNT1_RX_NUM_BLOCK_1 ((uint16_t)0x0800) /*!< Bit 1 */ +#define USB_COUNT1_RX_NUM_BLOCK_2 ((uint16_t)0x1000) /*!< Bit 2 */ +#define USB_COUNT1_RX_NUM_BLOCK_3 ((uint16_t)0x2000) /*!< Bit 3 */ +#define USB_COUNT1_RX_NUM_BLOCK_4 ((uint16_t)0x4000) /*!< Bit 4 */ + +#define USB_COUNT1_RX_BLSIZE ((uint16_t)0x8000) /*!< BLock SIZE */ + +/***************** Bit definition for USB_COUNT2_RX register ****************/ +#define USB_COUNT2_RX_COUNT2_RX ((uint16_t)0x03FF) /*!< Reception Byte Count */ + +#define USB_COUNT2_RX_NUM_BLOCK ((uint16_t)0x7C00) /*!< NUM_BLOCK[4:0] bits (Number of blocks) */ +#define USB_COUNT2_RX_NUM_BLOCK_0 ((uint16_t)0x0400) /*!< Bit 0 */ +#define USB_COUNT2_RX_NUM_BLOCK_1 ((uint16_t)0x0800) /*!< Bit 1 */ +#define USB_COUNT2_RX_NUM_BLOCK_2 ((uint16_t)0x1000) /*!< Bit 2 */ +#define USB_COUNT2_RX_NUM_BLOCK_3 ((uint16_t)0x2000) /*!< Bit 3 */ +#define USB_COUNT2_RX_NUM_BLOCK_4 ((uint16_t)0x4000) /*!< Bit 4 */ + +#define USB_COUNT2_RX_BLSIZE ((uint16_t)0x8000) /*!< BLock SIZE */ + +/***************** Bit definition for USB_COUNT3_RX register ****************/ +#define USB_COUNT3_RX_COUNT3_RX ((uint16_t)0x03FF) /*!< Reception Byte Count */ + +#define USB_COUNT3_RX_NUM_BLOCK ((uint16_t)0x7C00) /*!< NUM_BLOCK[4:0] bits (Number of blocks) */ +#define USB_COUNT3_RX_NUM_BLOCK_0 ((uint16_t)0x0400) /*!< Bit 0 */ +#define USB_COUNT3_RX_NUM_BLOCK_1 ((uint16_t)0x0800) /*!< Bit 1 */ +#define USB_COUNT3_RX_NUM_BLOCK_2 ((uint16_t)0x1000) /*!< Bit 2 */ +#define USB_COUNT3_RX_NUM_BLOCK_3 ((uint16_t)0x2000) /*!< Bit 3 */ +#define USB_COUNT3_RX_NUM_BLOCK_4 ((uint16_t)0x4000) /*!< Bit 4 */ + +#define USB_COUNT3_RX_BLSIZE ((uint16_t)0x8000) /*!< BLock SIZE */ + +/***************** Bit definition for USB_COUNT4_RX register ****************/ +#define USB_COUNT4_RX_COUNT4_RX ((uint16_t)0x03FF) /*!< Reception Byte Count */ + +#define USB_COUNT4_RX_NUM_BLOCK ((uint16_t)0x7C00) /*!< NUM_BLOCK[4:0] bits (Number of blocks) */ +#define USB_COUNT4_RX_NUM_BLOCK_0 ((uint16_t)0x0400) /*!< Bit 0 */ +#define USB_COUNT4_RX_NUM_BLOCK_1 ((uint16_t)0x0800) /*!< Bit 1 */ +#define USB_COUNT4_RX_NUM_BLOCK_2 ((uint16_t)0x1000) /*!< Bit 2 */ +#define USB_COUNT4_RX_NUM_BLOCK_3 ((uint16_t)0x2000) /*!< Bit 3 */ +#define USB_COUNT4_RX_NUM_BLOCK_4 ((uint16_t)0x4000) /*!< Bit 4 */ + +#define USB_COUNT4_RX_BLSIZE ((uint16_t)0x8000) /*!< BLock SIZE */ + +/***************** Bit definition for USB_COUNT5_RX register ****************/ +#define USB_COUNT5_RX_COUNT5_RX ((uint16_t)0x03FF) /*!< Reception Byte Count */ + +#define USB_COUNT5_RX_NUM_BLOCK ((uint16_t)0x7C00) /*!< NUM_BLOCK[4:0] bits (Number of blocks) */ +#define USB_COUNT5_RX_NUM_BLOCK_0 ((uint16_t)0x0400) /*!< Bit 0 */ +#define USB_COUNT5_RX_NUM_BLOCK_1 ((uint16_t)0x0800) /*!< Bit 1 */ +#define USB_COUNT5_RX_NUM_BLOCK_2 ((uint16_t)0x1000) /*!< Bit 2 */ +#define USB_COUNT5_RX_NUM_BLOCK_3 ((uint16_t)0x2000) /*!< Bit 3 */ +#define USB_COUNT5_RX_NUM_BLOCK_4 ((uint16_t)0x4000) /*!< Bit 4 */ + +#define USB_COUNT5_RX_BLSIZE ((uint16_t)0x8000) /*!< BLock SIZE */ + +/***************** Bit definition for USB_COUNT6_RX register ****************/ +#define USB_COUNT6_RX_COUNT6_RX ((uint16_t)0x03FF) /*!< Reception Byte Count */ + +#define USB_COUNT6_RX_NUM_BLOCK ((uint16_t)0x7C00) /*!< NUM_BLOCK[4:0] bits (Number of blocks) */ +#define USB_COUNT6_RX_NUM_BLOCK_0 ((uint16_t)0x0400) /*!< Bit 0 */ +#define USB_COUNT6_RX_NUM_BLOCK_1 ((uint16_t)0x0800) /*!< Bit 1 */ +#define USB_COUNT6_RX_NUM_BLOCK_2 ((uint16_t)0x1000) /*!< Bit 2 */ +#define USB_COUNT6_RX_NUM_BLOCK_3 ((uint16_t)0x2000) /*!< Bit 3 */ +#define USB_COUNT6_RX_NUM_BLOCK_4 ((uint16_t)0x4000) /*!< Bit 4 */ + +#define USB_COUNT6_RX_BLSIZE ((uint16_t)0x8000) /*!< BLock SIZE */ + +/***************** Bit definition for USB_COUNT7_RX register ****************/ +#define USB_COUNT7_RX_COUNT7_RX ((uint16_t)0x03FF) /*!< Reception Byte Count */ + +#define USB_COUNT7_RX_NUM_BLOCK ((uint16_t)0x7C00) /*!< NUM_BLOCK[4:0] bits (Number of blocks) */ +#define USB_COUNT7_RX_NUM_BLOCK_0 ((uint16_t)0x0400) /*!< Bit 0 */ +#define USB_COUNT7_RX_NUM_BLOCK_1 ((uint16_t)0x0800) /*!< Bit 1 */ +#define USB_COUNT7_RX_NUM_BLOCK_2 ((uint16_t)0x1000) /*!< Bit 2 */ +#define USB_COUNT7_RX_NUM_BLOCK_3 ((uint16_t)0x2000) /*!< Bit 3 */ +#define USB_COUNT7_RX_NUM_BLOCK_4 ((uint16_t)0x4000) /*!< Bit 4 */ + +#define USB_COUNT7_RX_BLSIZE ((uint16_t)0x8000) /*!< BLock SIZE */ + +/*----------------------------------------------------------------------------*/ + +/**************** Bit definition for USB_COUNT0_RX_0 register ***************/ +#define USB_COUNT0_RX_0_COUNT0_RX_0 ((uint32_t)0x000003FF) /*!< Reception Byte Count (low) */ + +#define USB_COUNT0_RX_0_NUM_BLOCK_0 ((uint32_t)0x00007C00) /*!< NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */ +#define USB_COUNT0_RX_0_NUM_BLOCK_0_0 ((uint32_t)0x00000400) /*!< Bit 0 */ +#define USB_COUNT0_RX_0_NUM_BLOCK_0_1 ((uint32_t)0x00000800) /*!< Bit 1 */ +#define USB_COUNT0_RX_0_NUM_BLOCK_0_2 ((uint32_t)0x00001000) /*!< Bit 2 */ +#define USB_COUNT0_RX_0_NUM_BLOCK_0_3 ((uint32_t)0x00002000) /*!< Bit 3 */ +#define USB_COUNT0_RX_0_NUM_BLOCK_0_4 ((uint32_t)0x00004000) /*!< Bit 4 */ + +#define USB_COUNT0_RX_0_BLSIZE_0 ((uint32_t)0x00008000) /*!< BLock SIZE (low) */ + +/**************** Bit definition for USB_COUNT0_RX_1 register ***************/ +#define USB_COUNT0_RX_1_COUNT0_RX_1 ((uint32_t)0x03FF0000) /*!< Reception Byte Count (high) */ + +#define USB_COUNT0_RX_1_NUM_BLOCK_1 ((uint32_t)0x7C000000) /*!< NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */ +#define USB_COUNT0_RX_1_NUM_BLOCK_1_0 ((uint32_t)0x04000000) /*!< Bit 1 */ +#define USB_COUNT0_RX_1_NUM_BLOCK_1_1 ((uint32_t)0x08000000) /*!< Bit 1 */ +#define USB_COUNT0_RX_1_NUM_BLOCK_1_2 ((uint32_t)0x10000000) /*!< Bit 2 */ +#define USB_COUNT0_RX_1_NUM_BLOCK_1_3 ((uint32_t)0x20000000) /*!< Bit 3 */ +#define USB_COUNT0_RX_1_NUM_BLOCK_1_4 ((uint32_t)0x40000000) /*!< Bit 4 */ + +#define USB_COUNT0_RX_1_BLSIZE_1 ((uint32_t)0x80000000) /*!< BLock SIZE (high) */ + +/**************** Bit definition for USB_COUNT1_RX_0 register ***************/ +#define USB_COUNT1_RX_0_COUNT1_RX_0 ((uint32_t)0x000003FF) /*!< Reception Byte Count (low) */ + +#define USB_COUNT1_RX_0_NUM_BLOCK_0 ((uint32_t)0x00007C00) /*!< NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */ +#define USB_COUNT1_RX_0_NUM_BLOCK_0_0 ((uint32_t)0x00000400) /*!< Bit 0 */ +#define USB_COUNT1_RX_0_NUM_BLOCK_0_1 ((uint32_t)0x00000800) /*!< Bit 1 */ +#define USB_COUNT1_RX_0_NUM_BLOCK_0_2 ((uint32_t)0x00001000) /*!< Bit 2 */ +#define USB_COUNT1_RX_0_NUM_BLOCK_0_3 ((uint32_t)0x00002000) /*!< Bit 3 */ +#define USB_COUNT1_RX_0_NUM_BLOCK_0_4 ((uint32_t)0x00004000) /*!< Bit 4 */ + +#define USB_COUNT1_RX_0_BLSIZE_0 ((uint32_t)0x00008000) /*!< BLock SIZE (low) */ + +/**************** Bit definition for USB_COUNT1_RX_1 register ***************/ +#define USB_COUNT1_RX_1_COUNT1_RX_1 ((uint32_t)0x03FF0000) /*!< Reception Byte Count (high) */ + +#define USB_COUNT1_RX_1_NUM_BLOCK_1 ((uint32_t)0x7C000000) /*!< NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */ +#define USB_COUNT1_RX_1_NUM_BLOCK_1_0 ((uint32_t)0x04000000) /*!< Bit 0 */ +#define USB_COUNT1_RX_1_NUM_BLOCK_1_1 ((uint32_t)0x08000000) /*!< Bit 1 */ +#define USB_COUNT1_RX_1_NUM_BLOCK_1_2 ((uint32_t)0x10000000) /*!< Bit 2 */ +#define USB_COUNT1_RX_1_NUM_BLOCK_1_3 ((uint32_t)0x20000000) /*!< Bit 3 */ +#define USB_COUNT1_RX_1_NUM_BLOCK_1_4 ((uint32_t)0x40000000) /*!< Bit 4 */ + +#define USB_COUNT1_RX_1_BLSIZE_1 ((uint32_t)0x80000000) /*!< BLock SIZE (high) */ + +/**************** Bit definition for USB_COUNT2_RX_0 register ***************/ +#define USB_COUNT2_RX_0_COUNT2_RX_0 ((uint32_t)0x000003FF) /*!< Reception Byte Count (low) */ + +#define USB_COUNT2_RX_0_NUM_BLOCK_0 ((uint32_t)0x00007C00) /*!< NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */ +#define USB_COUNT2_RX_0_NUM_BLOCK_0_0 ((uint32_t)0x00000400) /*!< Bit 0 */ +#define USB_COUNT2_RX_0_NUM_BLOCK_0_1 ((uint32_t)0x00000800) /*!< Bit 1 */ +#define USB_COUNT2_RX_0_NUM_BLOCK_0_2 ((uint32_t)0x00001000) /*!< Bit 2 */ +#define USB_COUNT2_RX_0_NUM_BLOCK_0_3 ((uint32_t)0x00002000) /*!< Bit 3 */ +#define USB_COUNT2_RX_0_NUM_BLOCK_0_4 ((uint32_t)0x00004000) /*!< Bit 4 */ + +#define USB_COUNT2_RX_0_BLSIZE_0 ((uint32_t)0x00008000) /*!< BLock SIZE (low) */ + +/**************** Bit definition for USB_COUNT2_RX_1 register ***************/ +#define USB_COUNT2_RX_1_COUNT2_RX_1 ((uint32_t)0x03FF0000) /*!< Reception Byte Count (high) */ + +#define USB_COUNT2_RX_1_NUM_BLOCK_1 ((uint32_t)0x7C000000) /*!< NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */ +#define USB_COUNT2_RX_1_NUM_BLOCK_1_0 ((uint32_t)0x04000000) /*!< Bit 0 */ +#define USB_COUNT2_RX_1_NUM_BLOCK_1_1 ((uint32_t)0x08000000) /*!< Bit 1 */ +#define USB_COUNT2_RX_1_NUM_BLOCK_1_2 ((uint32_t)0x10000000) /*!< Bit 2 */ +#define USB_COUNT2_RX_1_NUM_BLOCK_1_3 ((uint32_t)0x20000000) /*!< Bit 3 */ +#define USB_COUNT2_RX_1_NUM_BLOCK_1_4 ((uint32_t)0x40000000) /*!< Bit 4 */ + +#define USB_COUNT2_RX_1_BLSIZE_1 ((uint32_t)0x80000000) /*!< BLock SIZE (high) */ + +/**************** Bit definition for USB_COUNT3_RX_0 register ***************/ +#define USB_COUNT3_RX_0_COUNT3_RX_0 ((uint32_t)0x000003FF) /*!< Reception Byte Count (low) */ + +#define USB_COUNT3_RX_0_NUM_BLOCK_0 ((uint32_t)0x00007C00) /*!< NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */ +#define USB_COUNT3_RX_0_NUM_BLOCK_0_0 ((uint32_t)0x00000400) /*!< Bit 0 */ +#define USB_COUNT3_RX_0_NUM_BLOCK_0_1 ((uint32_t)0x00000800) /*!< Bit 1 */ +#define USB_COUNT3_RX_0_NUM_BLOCK_0_2 ((uint32_t)0x00001000) /*!< Bit 2 */ +#define USB_COUNT3_RX_0_NUM_BLOCK_0_3 ((uint32_t)0x00002000) /*!< Bit 3 */ +#define USB_COUNT3_RX_0_NUM_BLOCK_0_4 ((uint32_t)0x00004000) /*!< Bit 4 */ + +#define USB_COUNT3_RX_0_BLSIZE_0 ((uint32_t)0x00008000) /*!< BLock SIZE (low) */ + +/**************** Bit definition for USB_COUNT3_RX_1 register ***************/ +#define USB_COUNT3_RX_1_COUNT3_RX_1 ((uint32_t)0x03FF0000) /*!< Reception Byte Count (high) */ + +#define USB_COUNT3_RX_1_NUM_BLOCK_1 ((uint32_t)0x7C000000) /*!< NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */ +#define USB_COUNT3_RX_1_NUM_BLOCK_1_0 ((uint32_t)0x04000000) /*!< Bit 0 */ +#define USB_COUNT3_RX_1_NUM_BLOCK_1_1 ((uint32_t)0x08000000) /*!< Bit 1 */ +#define USB_COUNT3_RX_1_NUM_BLOCK_1_2 ((uint32_t)0x10000000) /*!< Bit 2 */ +#define USB_COUNT3_RX_1_NUM_BLOCK_1_3 ((uint32_t)0x20000000) /*!< Bit 3 */ +#define USB_COUNT3_RX_1_NUM_BLOCK_1_4 ((uint32_t)0x40000000) /*!< Bit 4 */ + +#define USB_COUNT3_RX_1_BLSIZE_1 ((uint32_t)0x80000000) /*!< BLock SIZE (high) */ + +/**************** Bit definition for USB_COUNT4_RX_0 register ***************/ +#define USB_COUNT4_RX_0_COUNT4_RX_0 ((uint32_t)0x000003FF) /*!< Reception Byte Count (low) */ + +#define USB_COUNT4_RX_0_NUM_BLOCK_0 ((uint32_t)0x00007C00) /*!< NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */ +#define USB_COUNT4_RX_0_NUM_BLOCK_0_0 ((uint32_t)0x00000400) /*!< Bit 0 */ +#define USB_COUNT4_RX_0_NUM_BLOCK_0_1 ((uint32_t)0x00000800) /*!< Bit 1 */ +#define USB_COUNT4_RX_0_NUM_BLOCK_0_2 ((uint32_t)0x00001000) /*!< Bit 2 */ +#define USB_COUNT4_RX_0_NUM_BLOCK_0_3 ((uint32_t)0x00002000) /*!< Bit 3 */ +#define USB_COUNT4_RX_0_NUM_BLOCK_0_4 ((uint32_t)0x00004000) /*!< Bit 4 */ + +#define USB_COUNT4_RX_0_BLSIZE_0 ((uint32_t)0x00008000) /*!< BLock SIZE (low) */ + +/**************** Bit definition for USB_COUNT4_RX_1 register ***************/ +#define USB_COUNT4_RX_1_COUNT4_RX_1 ((uint32_t)0x03FF0000) /*!< Reception Byte Count (high) */ + +#define USB_COUNT4_RX_1_NUM_BLOCK_1 ((uint32_t)0x7C000000) /*!< NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */ +#define USB_COUNT4_RX_1_NUM_BLOCK_1_0 ((uint32_t)0x04000000) /*!< Bit 0 */ +#define USB_COUNT4_RX_1_NUM_BLOCK_1_1 ((uint32_t)0x08000000) /*!< Bit 1 */ +#define USB_COUNT4_RX_1_NUM_BLOCK_1_2 ((uint32_t)0x10000000) /*!< Bit 2 */ +#define USB_COUNT4_RX_1_NUM_BLOCK_1_3 ((uint32_t)0x20000000) /*!< Bit 3 */ +#define USB_COUNT4_RX_1_NUM_BLOCK_1_4 ((uint32_t)0x40000000) /*!< Bit 4 */ + +#define USB_COUNT4_RX_1_BLSIZE_1 ((uint32_t)0x80000000) /*!< BLock SIZE (high) */ + +/**************** Bit definition for USB_COUNT5_RX_0 register ***************/ +#define USB_COUNT5_RX_0_COUNT5_RX_0 ((uint32_t)0x000003FF) /*!< Reception Byte Count (low) */ + +#define USB_COUNT5_RX_0_NUM_BLOCK_0 ((uint32_t)0x00007C00) /*!< NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */ +#define USB_COUNT5_RX_0_NUM_BLOCK_0_0 ((uint32_t)0x00000400) /*!< Bit 0 */ +#define USB_COUNT5_RX_0_NUM_BLOCK_0_1 ((uint32_t)0x00000800) /*!< Bit 1 */ +#define USB_COUNT5_RX_0_NUM_BLOCK_0_2 ((uint32_t)0x00001000) /*!< Bit 2 */ +#define USB_COUNT5_RX_0_NUM_BLOCK_0_3 ((uint32_t)0x00002000) /*!< Bit 3 */ +#define USB_COUNT5_RX_0_NUM_BLOCK_0_4 ((uint32_t)0x00004000) /*!< Bit 4 */ + +#define USB_COUNT5_RX_0_BLSIZE_0 ((uint32_t)0x00008000) /*!< BLock SIZE (low) */ + +/**************** Bit definition for USB_COUNT5_RX_1 register ***************/ +#define USB_COUNT5_RX_1_COUNT5_RX_1 ((uint32_t)0x03FF0000) /*!< Reception Byte Count (high) */ + +#define USB_COUNT5_RX_1_NUM_BLOCK_1 ((uint32_t)0x7C000000) /*!< NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */ +#define USB_COUNT5_RX_1_NUM_BLOCK_1_0 ((uint32_t)0x04000000) /*!< Bit 0 */ +#define USB_COUNT5_RX_1_NUM_BLOCK_1_1 ((uint32_t)0x08000000) /*!< Bit 1 */ +#define USB_COUNT5_RX_1_NUM_BLOCK_1_2 ((uint32_t)0x10000000) /*!< Bit 2 */ +#define USB_COUNT5_RX_1_NUM_BLOCK_1_3 ((uint32_t)0x20000000) /*!< Bit 3 */ +#define USB_COUNT5_RX_1_NUM_BLOCK_1_4 ((uint32_t)0x40000000) /*!< Bit 4 */ + +#define USB_COUNT5_RX_1_BLSIZE_1 ((uint32_t)0x80000000) /*!< BLock SIZE (high) */ + +/*************** Bit definition for USB_COUNT6_RX_0 register ***************/ +#define USB_COUNT6_RX_0_COUNT6_RX_0 ((uint32_t)0x000003FF) /*!< Reception Byte Count (low) */ + +#define USB_COUNT6_RX_0_NUM_BLOCK_0 ((uint32_t)0x00007C00) /*!< NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */ +#define USB_COUNT6_RX_0_NUM_BLOCK_0_0 ((uint32_t)0x00000400) /*!< Bit 0 */ +#define USB_COUNT6_RX_0_NUM_BLOCK_0_1 ((uint32_t)0x00000800) /*!< Bit 1 */ +#define USB_COUNT6_RX_0_NUM_BLOCK_0_2 ((uint32_t)0x00001000) /*!< Bit 2 */ +#define USB_COUNT6_RX_0_NUM_BLOCK_0_3 ((uint32_t)0x00002000) /*!< Bit 3 */ +#define USB_COUNT6_RX_0_NUM_BLOCK_0_4 ((uint32_t)0x00004000) /*!< Bit 4 */ + +#define USB_COUNT6_RX_0_BLSIZE_0 ((uint32_t)0x00008000) /*!< BLock SIZE (low) */ + +/**************** Bit definition for USB_COUNT6_RX_1 register ***************/ +#define USB_COUNT6_RX_1_COUNT6_RX_1 ((uint32_t)0x03FF0000) /*!< Reception Byte Count (high) */ + +#define USB_COUNT6_RX_1_NUM_BLOCK_1 ((uint32_t)0x7C000000) /*!< NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */ +#define USB_COUNT6_RX_1_NUM_BLOCK_1_0 ((uint32_t)0x04000000) /*!< Bit 0 */ +#define USB_COUNT6_RX_1_NUM_BLOCK_1_1 ((uint32_t)0x08000000) /*!< Bit 1 */ +#define USB_COUNT6_RX_1_NUM_BLOCK_1_2 ((uint32_t)0x10000000) /*!< Bit 2 */ +#define USB_COUNT6_RX_1_NUM_BLOCK_1_3 ((uint32_t)0x20000000) /*!< Bit 3 */ +#define USB_COUNT6_RX_1_NUM_BLOCK_1_4 ((uint32_t)0x40000000) /*!< Bit 4 */ + +#define USB_COUNT6_RX_1_BLSIZE_1 ((uint32_t)0x80000000) /*!< BLock SIZE (high) */ + +/*************** Bit definition for USB_COUNT7_RX_0 register ****************/ +#define USB_COUNT7_RX_0_COUNT7_RX_0 ((uint32_t)0x000003FF) /*!< Reception Byte Count (low) */ + +#define USB_COUNT7_RX_0_NUM_BLOCK_0 ((uint32_t)0x00007C00) /*!< NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */ +#define USB_COUNT7_RX_0_NUM_BLOCK_0_0 ((uint32_t)0x00000400) /*!< Bit 0 */ +#define USB_COUNT7_RX_0_NUM_BLOCK_0_1 ((uint32_t)0x00000800) /*!< Bit 1 */ +#define USB_COUNT7_RX_0_NUM_BLOCK_0_2 ((uint32_t)0x00001000) /*!< Bit 2 */ +#define USB_COUNT7_RX_0_NUM_BLOCK_0_3 ((uint32_t)0x00002000) /*!< Bit 3 */ +#define USB_COUNT7_RX_0_NUM_BLOCK_0_4 ((uint32_t)0x00004000) /*!< Bit 4 */ + +#define USB_COUNT7_RX_0_BLSIZE_0 ((uint32_t)0x00008000) /*!< BLock SIZE (low) */ + +/*************** Bit definition for USB_COUNT7_RX_1 register ****************/ +#define USB_COUNT7_RX_1_COUNT7_RX_1 ((uint32_t)0x03FF0000) /*!< Reception Byte Count (high) */ + +#define USB_COUNT7_RX_1_NUM_BLOCK_1 ((uint32_t)0x7C000000) /*!< NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */ +#define USB_COUNT7_RX_1_NUM_BLOCK_1_0 ((uint32_t)0x04000000) /*!< Bit 0 */ +#define USB_COUNT7_RX_1_NUM_BLOCK_1_1 ((uint32_t)0x08000000) /*!< Bit 1 */ +#define USB_COUNT7_RX_1_NUM_BLOCK_1_2 ((uint32_t)0x10000000) /*!< Bit 2 */ +#define USB_COUNT7_RX_1_NUM_BLOCK_1_3 ((uint32_t)0x20000000) /*!< Bit 3 */ +#define USB_COUNT7_RX_1_NUM_BLOCK_1_4 ((uint32_t)0x40000000) /*!< Bit 4 */ + +#define USB_COUNT7_RX_1_BLSIZE_1 ((uint32_t)0x80000000) /*!< BLock SIZE (high) */ + +/******************************************************************************/ +/* */ +/* Controller Area Network */ +/* */ +/******************************************************************************/ + +/*!< CAN control and status registers */ +/******************* Bit definition for CAN_MCR register ********************/ +#define CAN_MCR_INRQ ((uint16_t)0x0001) /*!< Initialization Request */ +#define CAN_MCR_SLEEP ((uint16_t)0x0002) /*!< Sleep Mode Request */ +#define CAN_MCR_TXFP ((uint16_t)0x0004) /*!< Transmit FIFO Priority */ +#define CAN_MCR_RFLM ((uint16_t)0x0008) /*!< Receive FIFO Locked Mode */ +#define CAN_MCR_NART ((uint16_t)0x0010) /*!< No Automatic Retransmission */ +#define CAN_MCR_AWUM ((uint16_t)0x0020) /*!< Automatic Wakeup Mode */ +#define CAN_MCR_ABOM ((uint16_t)0x0040) /*!< Automatic Bus-Off Management */ +#define CAN_MCR_TTCM ((uint16_t)0x0080) /*!< Time Triggered Communication Mode */ +#define CAN_MCR_RESET ((uint16_t)0x8000) /*!< CAN software master reset */ + +/******************* Bit definition for CAN_MSR register ********************/ +#define CAN_MSR_INAK ((uint16_t)0x0001) /*!< Initialization Acknowledge */ +#define CAN_MSR_SLAK ((uint16_t)0x0002) /*!< Sleep Acknowledge */ +#define CAN_MSR_ERRI ((uint16_t)0x0004) /*!< Error Interrupt */ +#define CAN_MSR_WKUI ((uint16_t)0x0008) /*!< Wakeup Interrupt */ +#define CAN_MSR_SLAKI ((uint16_t)0x0010) /*!< Sleep Acknowledge Interrupt */ +#define CAN_MSR_TXM ((uint16_t)0x0100) /*!< Transmit Mode */ +#define CAN_MSR_RXM ((uint16_t)0x0200) /*!< Receive Mode */ +#define CAN_MSR_SAMP ((uint16_t)0x0400) /*!< Last Sample Point */ +#define CAN_MSR_RX ((uint16_t)0x0800) /*!< CAN Rx Signal */ + +/******************* Bit definition for CAN_TSR register ********************/ +#define CAN_TSR_RQCP0 ((uint32_t)0x00000001) /*!< Request Completed Mailbox0 */ +#define CAN_TSR_TXOK0 ((uint32_t)0x00000002) /*!< Transmission OK of Mailbox0 */ +#define CAN_TSR_ALST0 ((uint32_t)0x00000004) /*!< Arbitration Lost for Mailbox0 */ +#define CAN_TSR_TERR0 ((uint32_t)0x00000008) /*!< Transmission Error of Mailbox0 */ +#define CAN_TSR_ABRQ0 ((uint32_t)0x00000080) /*!< Abort Request for Mailbox0 */ +#define CAN_TSR_RQCP1 ((uint32_t)0x00000100) /*!< Request Completed Mailbox1 */ +#define CAN_TSR_TXOK1 ((uint32_t)0x00000200) /*!< Transmission OK of Mailbox1 */ +#define CAN_TSR_ALST1 ((uint32_t)0x00000400) /*!< Arbitration Lost for Mailbox1 */ +#define CAN_TSR_TERR1 ((uint32_t)0x00000800) /*!< Transmission Error of Mailbox1 */ +#define CAN_TSR_ABRQ1 ((uint32_t)0x00008000) /*!< Abort Request for Mailbox 1 */ +#define CAN_TSR_RQCP2 ((uint32_t)0x00010000) /*!< Request Completed Mailbox2 */ +#define CAN_TSR_TXOK2 ((uint32_t)0x00020000) /*!< Transmission OK of Mailbox 2 */ +#define CAN_TSR_ALST2 ((uint32_t)0x00040000) /*!< Arbitration Lost for mailbox 2 */ +#define CAN_TSR_TERR2 ((uint32_t)0x00080000) /*!< Transmission Error of Mailbox 2 */ +#define CAN_TSR_ABRQ2 ((uint32_t)0x00800000) /*!< Abort Request for Mailbox 2 */ +#define CAN_TSR_CODE ((uint32_t)0x03000000) /*!< Mailbox Code */ + +#define CAN_TSR_TME ((uint32_t)0x1C000000) /*!< TME[2:0] bits */ +#define CAN_TSR_TME0 ((uint32_t)0x04000000) /*!< Transmit Mailbox 0 Empty */ +#define CAN_TSR_TME1 ((uint32_t)0x08000000) /*!< Transmit Mailbox 1 Empty */ +#define CAN_TSR_TME2 ((uint32_t)0x10000000) /*!< Transmit Mailbox 2 Empty */ + +#define CAN_TSR_LOW ((uint32_t)0xE0000000) /*!< LOW[2:0] bits */ +#define CAN_TSR_LOW0 ((uint32_t)0x20000000) /*!< Lowest Priority Flag for Mailbox 0 */ +#define CAN_TSR_LOW1 ((uint32_t)0x40000000) /*!< Lowest Priority Flag for Mailbox 1 */ +#define CAN_TSR_LOW2 ((uint32_t)0x80000000) /*!< Lowest Priority Flag for Mailbox 2 */ + +/******************* Bit definition for CAN_RF0R register *******************/ +#define CAN_RF0R_FMP0 ((uint8_t)0x03) /*!< FIFO 0 Message Pending */ +#define CAN_RF0R_FULL0 ((uint8_t)0x08) /*!< FIFO 0 Full */ +#define CAN_RF0R_FOVR0 ((uint8_t)0x10) /*!< FIFO 0 Overrun */ +#define CAN_RF0R_RFOM0 ((uint8_t)0x20) /*!< Release FIFO 0 Output Mailbox */ + +/******************* Bit definition for CAN_RF1R register *******************/ +#define CAN_RF1R_FMP1 ((uint8_t)0x03) /*!< FIFO 1 Message Pending */ +#define CAN_RF1R_FULL1 ((uint8_t)0x08) /*!< FIFO 1 Full */ +#define CAN_RF1R_FOVR1 ((uint8_t)0x10) /*!< FIFO 1 Overrun */ +#define CAN_RF1R_RFOM1 ((uint8_t)0x20) /*!< Release FIFO 1 Output Mailbox */ + +/******************** Bit definition for CAN_IER register *******************/ +#define CAN_IER_TMEIE ((uint32_t)0x00000001) /*!< Transmit Mailbox Empty Interrupt Enable */ +#define CAN_IER_FMPIE0 ((uint32_t)0x00000002) /*!< FIFO Message Pending Interrupt Enable */ +#define CAN_IER_FFIE0 ((uint32_t)0x00000004) /*!< FIFO Full Interrupt Enable */ +#define CAN_IER_FOVIE0 ((uint32_t)0x00000008) /*!< FIFO Overrun Interrupt Enable */ +#define CAN_IER_FMPIE1 ((uint32_t)0x00000010) /*!< FIFO Message Pending Interrupt Enable */ +#define CAN_IER_FFIE1 ((uint32_t)0x00000020) /*!< FIFO Full Interrupt Enable */ +#define CAN_IER_FOVIE1 ((uint32_t)0x00000040) /*!< FIFO Overrun Interrupt Enable */ +#define CAN_IER_EWGIE ((uint32_t)0x00000100) /*!< Error Warning Interrupt Enable */ +#define CAN_IER_EPVIE ((uint32_t)0x00000200) /*!< Error Passive Interrupt Enable */ +#define CAN_IER_BOFIE ((uint32_t)0x00000400) /*!< Bus-Off Interrupt Enable */ +#define CAN_IER_LECIE ((uint32_t)0x00000800) /*!< Last Error Code Interrupt Enable */ +#define CAN_IER_ERRIE ((uint32_t)0x00008000) /*!< Error Interrupt Enable */ +#define CAN_IER_WKUIE ((uint32_t)0x00010000) /*!< Wakeup Interrupt Enable */ +#define CAN_IER_SLKIE ((uint32_t)0x00020000) /*!< Sleep Interrupt Enable */ + +/******************** Bit definition for CAN_ESR register *******************/ +#define CAN_ESR_EWGF ((uint32_t)0x00000001) /*!< Error Warning Flag */ +#define CAN_ESR_EPVF ((uint32_t)0x00000002) /*!< Error Passive Flag */ +#define CAN_ESR_BOFF ((uint32_t)0x00000004) /*!< Bus-Off Flag */ + +#define CAN_ESR_LEC ((uint32_t)0x00000070) /*!< LEC[2:0] bits (Last Error Code) */ +#define CAN_ESR_LEC_0 ((uint32_t)0x00000010) /*!< Bit 0 */ +#define CAN_ESR_LEC_1 ((uint32_t)0x00000020) /*!< Bit 1 */ +#define CAN_ESR_LEC_2 ((uint32_t)0x00000040) /*!< Bit 2 */ + +#define CAN_ESR_TEC ((uint32_t)0x00FF0000) /*!< Least significant byte of the 9-bit Transmit Error Counter */ +#define CAN_ESR_REC ((uint32_t)0xFF000000) /*!< Receive Error Counter */ + +/******************* Bit definition for CAN_BTR register ********************/ +#define CAN_BTR_BRP ((uint32_t)0x000003FF) /*!< Baud Rate Prescaler */ +#define CAN_BTR_TS1 ((uint32_t)0x000F0000) /*!< Time Segment 1 */ +#define CAN_BTR_TS2 ((uint32_t)0x00700000) /*!< Time Segment 2 */ +#define CAN_BTR_SJW ((uint32_t)0x03000000) /*!< Resynchronization Jump Width */ +#define CAN_BTR_LBKM ((uint32_t)0x40000000) /*!< Loop Back Mode (Debug) */ +#define CAN_BTR_SILM ((uint32_t)0x80000000) /*!< Silent Mode */ + +/*!< Mailbox registers */ +/****************** Bit definition for CAN_TI0R register ********************/ +#define CAN_TI0R_TXRQ ((uint32_t)0x00000001) /*!< Transmit Mailbox Request */ +#define CAN_TI0R_RTR ((uint32_t)0x00000002) /*!< Remote Transmission Request */ +#define CAN_TI0R_IDE ((uint32_t)0x00000004) /*!< Identifier Extension */ +#define CAN_TI0R_EXID ((uint32_t)0x001FFFF8) /*!< Extended Identifier */ +#define CAN_TI0R_STID ((uint32_t)0xFFE00000) /*!< Standard Identifier or Extended Identifier */ + +/****************** Bit definition for CAN_TDT0R register *******************/ +#define CAN_TDT0R_DLC ((uint32_t)0x0000000F) /*!< Data Length Code */ +#define CAN_TDT0R_TGT ((uint32_t)0x00000100) /*!< Transmit Global Time */ +#define CAN_TDT0R_TIME ((uint32_t)0xFFFF0000) /*!< Message Time Stamp */ + +/****************** Bit definition for CAN_TDL0R register *******************/ +#define CAN_TDL0R_DATA0 ((uint32_t)0x000000FF) /*!< Data byte 0 */ +#define CAN_TDL0R_DATA1 ((uint32_t)0x0000FF00) /*!< Data byte 1 */ +#define CAN_TDL0R_DATA2 ((uint32_t)0x00FF0000) /*!< Data byte 2 */ +#define CAN_TDL0R_DATA3 ((uint32_t)0xFF000000) /*!< Data byte 3 */ + +/****************** Bit definition for CAN_TDH0R register *******************/ +#define CAN_TDH0R_DATA4 ((uint32_t)0x000000FF) /*!< Data byte 4 */ +#define CAN_TDH0R_DATA5 ((uint32_t)0x0000FF00) /*!< Data byte 5 */ +#define CAN_TDH0R_DATA6 ((uint32_t)0x00FF0000) /*!< Data byte 6 */ +#define CAN_TDH0R_DATA7 ((uint32_t)0xFF000000) /*!< Data byte 7 */ + +/******************* Bit definition for CAN_TI1R register *******************/ +#define CAN_TI1R_TXRQ ((uint32_t)0x00000001) /*!< Transmit Mailbox Request */ +#define CAN_TI1R_RTR ((uint32_t)0x00000002) /*!< Remote Transmission Request */ +#define CAN_TI1R_IDE ((uint32_t)0x00000004) /*!< Identifier Extension */ +#define CAN_TI1R_EXID ((uint32_t)0x001FFFF8) /*!< Extended Identifier */ +#define CAN_TI1R_STID ((uint32_t)0xFFE00000) /*!< Standard Identifier or Extended Identifier */ + +/******************* Bit definition for CAN_TDT1R register ******************/ +#define CAN_TDT1R_DLC ((uint32_t)0x0000000F) /*!< Data Length Code */ +#define CAN_TDT1R_TGT ((uint32_t)0x00000100) /*!< Transmit Global Time */ +#define CAN_TDT1R_TIME ((uint32_t)0xFFFF0000) /*!< Message Time Stamp */ + +/******************* Bit definition for CAN_TDL1R register ******************/ +#define CAN_TDL1R_DATA0 ((uint32_t)0x000000FF) /*!< Data byte 0 */ +#define CAN_TDL1R_DATA1 ((uint32_t)0x0000FF00) /*!< Data byte 1 */ +#define CAN_TDL1R_DATA2 ((uint32_t)0x00FF0000) /*!< Data byte 2 */ +#define CAN_TDL1R_DATA3 ((uint32_t)0xFF000000) /*!< Data byte 3 */ + +/******************* Bit definition for CAN_TDH1R register ******************/ +#define CAN_TDH1R_DATA4 ((uint32_t)0x000000FF) /*!< Data byte 4 */ +#define CAN_TDH1R_DATA5 ((uint32_t)0x0000FF00) /*!< Data byte 5 */ +#define CAN_TDH1R_DATA6 ((uint32_t)0x00FF0000) /*!< Data byte 6 */ +#define CAN_TDH1R_DATA7 ((uint32_t)0xFF000000) /*!< Data byte 7 */ + +/******************* Bit definition for CAN_TI2R register *******************/ +#define CAN_TI2R_TXRQ ((uint32_t)0x00000001) /*!< Transmit Mailbox Request */ +#define CAN_TI2R_RTR ((uint32_t)0x00000002) /*!< Remote Transmission Request */ +#define CAN_TI2R_IDE ((uint32_t)0x00000004) /*!< Identifier Extension */ +#define CAN_TI2R_EXID ((uint32_t)0x001FFFF8) /*!< Extended identifier */ +#define CAN_TI2R_STID ((uint32_t)0xFFE00000) /*!< Standard Identifier or Extended Identifier */ + +/******************* Bit definition for CAN_TDT2R register ******************/ +#define CAN_TDT2R_DLC ((uint32_t)0x0000000F) /*!< Data Length Code */ +#define CAN_TDT2R_TGT ((uint32_t)0x00000100) /*!< Transmit Global Time */ +#define CAN_TDT2R_TIME ((uint32_t)0xFFFF0000) /*!< Message Time Stamp */ + +/******************* Bit definition for CAN_TDL2R register ******************/ +#define CAN_TDL2R_DATA0 ((uint32_t)0x000000FF) /*!< Data byte 0 */ +#define CAN_TDL2R_DATA1 ((uint32_t)0x0000FF00) /*!< Data byte 1 */ +#define CAN_TDL2R_DATA2 ((uint32_t)0x00FF0000) /*!< Data byte 2 */ +#define CAN_TDL2R_DATA3 ((uint32_t)0xFF000000) /*!< Data byte 3 */ + +/******************* Bit definition for CAN_TDH2R register ******************/ +#define CAN_TDH2R_DATA4 ((uint32_t)0x000000FF) /*!< Data byte 4 */ +#define CAN_TDH2R_DATA5 ((uint32_t)0x0000FF00) /*!< Data byte 5 */ +#define CAN_TDH2R_DATA6 ((uint32_t)0x00FF0000) /*!< Data byte 6 */ +#define CAN_TDH2R_DATA7 ((uint32_t)0xFF000000) /*!< Data byte 7 */ + +/******************* Bit definition for CAN_RI0R register *******************/ +#define CAN_RI0R_RTR ((uint32_t)0x00000002) /*!< Remote Transmission Request */ +#define CAN_RI0R_IDE ((uint32_t)0x00000004) /*!< Identifier Extension */ +#define CAN_RI0R_EXID ((uint32_t)0x001FFFF8) /*!< Extended Identifier */ +#define CAN_RI0R_STID ((uint32_t)0xFFE00000) /*!< Standard Identifier or Extended Identifier */ + +/******************* Bit definition for CAN_RDT0R register ******************/ +#define CAN_RDT0R_DLC ((uint32_t)0x0000000F) /*!< Data Length Code */ +#define CAN_RDT0R_FMI ((uint32_t)0x0000FF00) /*!< Filter Match Index */ +#define CAN_RDT0R_TIME ((uint32_t)0xFFFF0000) /*!< Message Time Stamp */ + +/******************* Bit definition for CAN_RDL0R register ******************/ +#define CAN_RDL0R_DATA0 ((uint32_t)0x000000FF) /*!< Data byte 0 */ +#define CAN_RDL0R_DATA1 ((uint32_t)0x0000FF00) /*!< Data byte 1 */ +#define CAN_RDL0R_DATA2 ((uint32_t)0x00FF0000) /*!< Data byte 2 */ +#define CAN_RDL0R_DATA3 ((uint32_t)0xFF000000) /*!< Data byte 3 */ + +/******************* Bit definition for CAN_RDH0R register ******************/ +#define CAN_RDH0R_DATA4 ((uint32_t)0x000000FF) /*!< Data byte 4 */ +#define CAN_RDH0R_DATA5 ((uint32_t)0x0000FF00) /*!< Data byte 5 */ +#define CAN_RDH0R_DATA6 ((uint32_t)0x00FF0000) /*!< Data byte 6 */ +#define CAN_RDH0R_DATA7 ((uint32_t)0xFF000000) /*!< Data byte 7 */ + +/******************* Bit definition for CAN_RI1R register *******************/ +#define CAN_RI1R_RTR ((uint32_t)0x00000002) /*!< Remote Transmission Request */ +#define CAN_RI1R_IDE ((uint32_t)0x00000004) /*!< Identifier Extension */ +#define CAN_RI1R_EXID ((uint32_t)0x001FFFF8) /*!< Extended identifier */ +#define CAN_RI1R_STID ((uint32_t)0xFFE00000) /*!< Standard Identifier or Extended Identifier */ + +/******************* Bit definition for CAN_RDT1R register ******************/ +#define CAN_RDT1R_DLC ((uint32_t)0x0000000F) /*!< Data Length Code */ +#define CAN_RDT1R_FMI ((uint32_t)0x0000FF00) /*!< Filter Match Index */ +#define CAN_RDT1R_TIME ((uint32_t)0xFFFF0000) /*!< Message Time Stamp */ + +/******************* Bit definition for CAN_RDL1R register ******************/ +#define CAN_RDL1R_DATA0 ((uint32_t)0x000000FF) /*!< Data byte 0 */ +#define CAN_RDL1R_DATA1 ((uint32_t)0x0000FF00) /*!< Data byte 1 */ +#define CAN_RDL1R_DATA2 ((uint32_t)0x00FF0000) /*!< Data byte 2 */ +#define CAN_RDL1R_DATA3 ((uint32_t)0xFF000000) /*!< Data byte 3 */ + +/******************* Bit definition for CAN_RDH1R register ******************/ +#define CAN_RDH1R_DATA4 ((uint32_t)0x000000FF) /*!< Data byte 4 */ +#define CAN_RDH1R_DATA5 ((uint32_t)0x0000FF00) /*!< Data byte 5 */ +#define CAN_RDH1R_DATA6 ((uint32_t)0x00FF0000) /*!< Data byte 6 */ +#define CAN_RDH1R_DATA7 ((uint32_t)0xFF000000) /*!< Data byte 7 */ + +/*!< CAN filter registers */ +/******************* Bit definition for CAN_FMR register ********************/ +#define CAN_FMR_FINIT ((uint8_t)0x01) /*!< Filter Init Mode */ + +/******************* Bit definition for CAN_FM1R register *******************/ +#define CAN_FM1R_FBM ((uint16_t)0x3FFF) /*!< Filter Mode */ +#define CAN_FM1R_FBM0 ((uint16_t)0x0001) /*!< Filter Init Mode bit 0 */ +#define CAN_FM1R_FBM1 ((uint16_t)0x0002) /*!< Filter Init Mode bit 1 */ +#define CAN_FM1R_FBM2 ((uint16_t)0x0004) /*!< Filter Init Mode bit 2 */ +#define CAN_FM1R_FBM3 ((uint16_t)0x0008) /*!< Filter Init Mode bit 3 */ +#define CAN_FM1R_FBM4 ((uint16_t)0x0010) /*!< Filter Init Mode bit 4 */ +#define CAN_FM1R_FBM5 ((uint16_t)0x0020) /*!< Filter Init Mode bit 5 */ +#define CAN_FM1R_FBM6 ((uint16_t)0x0040) /*!< Filter Init Mode bit 6 */ +#define CAN_FM1R_FBM7 ((uint16_t)0x0080) /*!< Filter Init Mode bit 7 */ +#define CAN_FM1R_FBM8 ((uint16_t)0x0100) /*!< Filter Init Mode bit 8 */ +#define CAN_FM1R_FBM9 ((uint16_t)0x0200) /*!< Filter Init Mode bit 9 */ +#define CAN_FM1R_FBM10 ((uint16_t)0x0400) /*!< Filter Init Mode bit 10 */ +#define CAN_FM1R_FBM11 ((uint16_t)0x0800) /*!< Filter Init Mode bit 11 */ +#define CAN_FM1R_FBM12 ((uint16_t)0x1000) /*!< Filter Init Mode bit 12 */ +#define CAN_FM1R_FBM13 ((uint16_t)0x2000) /*!< Filter Init Mode bit 13 */ + +/******************* Bit definition for CAN_FS1R register *******************/ +#define CAN_FS1R_FSC ((uint16_t)0x3FFF) /*!< Filter Scale Configuration */ +#define CAN_FS1R_FSC0 ((uint16_t)0x0001) /*!< Filter Scale Configuration bit 0 */ +#define CAN_FS1R_FSC1 ((uint16_t)0x0002) /*!< Filter Scale Configuration bit 1 */ +#define CAN_FS1R_FSC2 ((uint16_t)0x0004) /*!< Filter Scale Configuration bit 2 */ +#define CAN_FS1R_FSC3 ((uint16_t)0x0008) /*!< Filter Scale Configuration bit 3 */ +#define CAN_FS1R_FSC4 ((uint16_t)0x0010) /*!< Filter Scale Configuration bit 4 */ +#define CAN_FS1R_FSC5 ((uint16_t)0x0020) /*!< Filter Scale Configuration bit 5 */ +#define CAN_FS1R_FSC6 ((uint16_t)0x0040) /*!< Filter Scale Configuration bit 6 */ +#define CAN_FS1R_FSC7 ((uint16_t)0x0080) /*!< Filter Scale Configuration bit 7 */ +#define CAN_FS1R_FSC8 ((uint16_t)0x0100) /*!< Filter Scale Configuration bit 8 */ +#define CAN_FS1R_FSC9 ((uint16_t)0x0200) /*!< Filter Scale Configuration bit 9 */ +#define CAN_FS1R_FSC10 ((uint16_t)0x0400) /*!< Filter Scale Configuration bit 10 */ +#define CAN_FS1R_FSC11 ((uint16_t)0x0800) /*!< Filter Scale Configuration bit 11 */ +#define CAN_FS1R_FSC12 ((uint16_t)0x1000) /*!< Filter Scale Configuration bit 12 */ +#define CAN_FS1R_FSC13 ((uint16_t)0x2000) /*!< Filter Scale Configuration bit 13 */ + +/****************** Bit definition for CAN_FFA1R register *******************/ +#define CAN_FFA1R_FFA ((uint16_t)0x3FFF) /*!< Filter FIFO Assignment */ +#define CAN_FFA1R_FFA0 ((uint16_t)0x0001) /*!< Filter FIFO Assignment for Filter 0 */ +#define CAN_FFA1R_FFA1 ((uint16_t)0x0002) /*!< Filter FIFO Assignment for Filter 1 */ +#define CAN_FFA1R_FFA2 ((uint16_t)0x0004) /*!< Filter FIFO Assignment for Filter 2 */ +#define CAN_FFA1R_FFA3 ((uint16_t)0x0008) /*!< Filter FIFO Assignment for Filter 3 */ +#define CAN_FFA1R_FFA4 ((uint16_t)0x0010) /*!< Filter FIFO Assignment for Filter 4 */ +#define CAN_FFA1R_FFA5 ((uint16_t)0x0020) /*!< Filter FIFO Assignment for Filter 5 */ +#define CAN_FFA1R_FFA6 ((uint16_t)0x0040) /*!< Filter FIFO Assignment for Filter 6 */ +#define CAN_FFA1R_FFA7 ((uint16_t)0x0080) /*!< Filter FIFO Assignment for Filter 7 */ +#define CAN_FFA1R_FFA8 ((uint16_t)0x0100) /*!< Filter FIFO Assignment for Filter 8 */ +#define CAN_FFA1R_FFA9 ((uint16_t)0x0200) /*!< Filter FIFO Assignment for Filter 9 */ +#define CAN_FFA1R_FFA10 ((uint16_t)0x0400) /*!< Filter FIFO Assignment for Filter 10 */ +#define CAN_FFA1R_FFA11 ((uint16_t)0x0800) /*!< Filter FIFO Assignment for Filter 11 */ +#define CAN_FFA1R_FFA12 ((uint16_t)0x1000) /*!< Filter FIFO Assignment for Filter 12 */ +#define CAN_FFA1R_FFA13 ((uint16_t)0x2000) /*!< Filter FIFO Assignment for Filter 13 */ + +/******************* Bit definition for CAN_FA1R register *******************/ +#define CAN_FA1R_FACT ((uint16_t)0x3FFF) /*!< Filter Active */ +#define CAN_FA1R_FACT0 ((uint16_t)0x0001) /*!< Filter 0 Active */ +#define CAN_FA1R_FACT1 ((uint16_t)0x0002) /*!< Filter 1 Active */ +#define CAN_FA1R_FACT2 ((uint16_t)0x0004) /*!< Filter 2 Active */ +#define CAN_FA1R_FACT3 ((uint16_t)0x0008) /*!< Filter 3 Active */ +#define CAN_FA1R_FACT4 ((uint16_t)0x0010) /*!< Filter 4 Active */ +#define CAN_FA1R_FACT5 ((uint16_t)0x0020) /*!< Filter 5 Active */ +#define CAN_FA1R_FACT6 ((uint16_t)0x0040) /*!< Filter 6 Active */ +#define CAN_FA1R_FACT7 ((uint16_t)0x0080) /*!< Filter 7 Active */ +#define CAN_FA1R_FACT8 ((uint16_t)0x0100) /*!< Filter 8 Active */ +#define CAN_FA1R_FACT9 ((uint16_t)0x0200) /*!< Filter 9 Active */ +#define CAN_FA1R_FACT10 ((uint16_t)0x0400) /*!< Filter 10 Active */ +#define CAN_FA1R_FACT11 ((uint16_t)0x0800) /*!< Filter 11 Active */ +#define CAN_FA1R_FACT12 ((uint16_t)0x1000) /*!< Filter 12 Active */ +#define CAN_FA1R_FACT13 ((uint16_t)0x2000) /*!< Filter 13 Active */ + +/******************* Bit definition for CAN_F0R1 register *******************/ +#define CAN_F0R1_FB0 ((uint32_t)0x00000001) /*!< Filter bit 0 */ +#define CAN_F0R1_FB1 ((uint32_t)0x00000002) /*!< Filter bit 1 */ +#define CAN_F0R1_FB2 ((uint32_t)0x00000004) /*!< Filter bit 2 */ +#define CAN_F0R1_FB3 ((uint32_t)0x00000008) /*!< Filter bit 3 */ +#define CAN_F0R1_FB4 ((uint32_t)0x00000010) /*!< Filter bit 4 */ +#define CAN_F0R1_FB5 ((uint32_t)0x00000020) /*!< Filter bit 5 */ +#define CAN_F0R1_FB6 ((uint32_t)0x00000040) /*!< Filter bit 6 */ +#define CAN_F0R1_FB7 ((uint32_t)0x00000080) /*!< Filter bit 7 */ +#define CAN_F0R1_FB8 ((uint32_t)0x00000100) /*!< Filter bit 8 */ +#define CAN_F0R1_FB9 ((uint32_t)0x00000200) /*!< Filter bit 9 */ +#define CAN_F0R1_FB10 ((uint32_t)0x00000400) /*!< Filter bit 10 */ +#define CAN_F0R1_FB11 ((uint32_t)0x00000800) /*!< Filter bit 11 */ +#define CAN_F0R1_FB12 ((uint32_t)0x00001000) /*!< Filter bit 12 */ +#define CAN_F0R1_FB13 ((uint32_t)0x00002000) /*!< Filter bit 13 */ +#define CAN_F0R1_FB14 ((uint32_t)0x00004000) /*!< Filter bit 14 */ +#define CAN_F0R1_FB15 ((uint32_t)0x00008000) /*!< Filter bit 15 */ +#define CAN_F0R1_FB16 ((uint32_t)0x00010000) /*!< Filter bit 16 */ +#define CAN_F0R1_FB17 ((uint32_t)0x00020000) /*!< Filter bit 17 */ +#define CAN_F0R1_FB18 ((uint32_t)0x00040000) /*!< Filter bit 18 */ +#define CAN_F0R1_FB19 ((uint32_t)0x00080000) /*!< Filter bit 19 */ +#define CAN_F0R1_FB20 ((uint32_t)0x00100000) /*!< Filter bit 20 */ +#define CAN_F0R1_FB21 ((uint32_t)0x00200000) /*!< Filter bit 21 */ +#define CAN_F0R1_FB22 ((uint32_t)0x00400000) /*!< Filter bit 22 */ +#define CAN_F0R1_FB23 ((uint32_t)0x00800000) /*!< Filter bit 23 */ +#define CAN_F0R1_FB24 ((uint32_t)0x01000000) /*!< Filter bit 24 */ +#define CAN_F0R1_FB25 ((uint32_t)0x02000000) /*!< Filter bit 25 */ +#define CAN_F0R1_FB26 ((uint32_t)0x04000000) /*!< Filter bit 26 */ +#define CAN_F0R1_FB27 ((uint32_t)0x08000000) /*!< Filter bit 27 */ +#define CAN_F0R1_FB28 ((uint32_t)0x10000000) /*!< Filter bit 28 */ +#define CAN_F0R1_FB29 ((uint32_t)0x20000000) /*!< Filter bit 29 */ +#define CAN_F0R1_FB30 ((uint32_t)0x40000000) /*!< Filter bit 30 */ +#define CAN_F0R1_FB31 ((uint32_t)0x80000000) /*!< Filter bit 31 */ + +/******************* Bit definition for CAN_F1R1 register *******************/ +#define CAN_F1R1_FB0 ((uint32_t)0x00000001) /*!< Filter bit 0 */ +#define CAN_F1R1_FB1 ((uint32_t)0x00000002) /*!< Filter bit 1 */ +#define CAN_F1R1_FB2 ((uint32_t)0x00000004) /*!< Filter bit 2 */ +#define CAN_F1R1_FB3 ((uint32_t)0x00000008) /*!< Filter bit 3 */ +#define CAN_F1R1_FB4 ((uint32_t)0x00000010) /*!< Filter bit 4 */ +#define CAN_F1R1_FB5 ((uint32_t)0x00000020) /*!< Filter bit 5 */ +#define CAN_F1R1_FB6 ((uint32_t)0x00000040) /*!< Filter bit 6 */ +#define CAN_F1R1_FB7 ((uint32_t)0x00000080) /*!< Filter bit 7 */ +#define CAN_F1R1_FB8 ((uint32_t)0x00000100) /*!< Filter bit 8 */ +#define CAN_F1R1_FB9 ((uint32_t)0x00000200) /*!< Filter bit 9 */ +#define CAN_F1R1_FB10 ((uint32_t)0x00000400) /*!< Filter bit 10 */ +#define CAN_F1R1_FB11 ((uint32_t)0x00000800) /*!< Filter bit 11 */ +#define CAN_F1R1_FB12 ((uint32_t)0x00001000) /*!< Filter bit 12 */ +#define CAN_F1R1_FB13 ((uint32_t)0x00002000) /*!< Filter bit 13 */ +#define CAN_F1R1_FB14 ((uint32_t)0x00004000) /*!< Filter bit 14 */ +#define CAN_F1R1_FB15 ((uint32_t)0x00008000) /*!< Filter bit 15 */ +#define CAN_F1R1_FB16 ((uint32_t)0x00010000) /*!< Filter bit 16 */ +#define CAN_F1R1_FB17 ((uint32_t)0x00020000) /*!< Filter bit 17 */ +#define CAN_F1R1_FB18 ((uint32_t)0x00040000) /*!< Filter bit 18 */ +#define CAN_F1R1_FB19 ((uint32_t)0x00080000) /*!< Filter bit 19 */ +#define CAN_F1R1_FB20 ((uint32_t)0x00100000) /*!< Filter bit 20 */ +#define CAN_F1R1_FB21 ((uint32_t)0x00200000) /*!< Filter bit 21 */ +#define CAN_F1R1_FB22 ((uint32_t)0x00400000) /*!< Filter bit 22 */ +#define CAN_F1R1_FB23 ((uint32_t)0x00800000) /*!< Filter bit 23 */ +#define CAN_F1R1_FB24 ((uint32_t)0x01000000) /*!< Filter bit 24 */ +#define CAN_F1R1_FB25 ((uint32_t)0x02000000) /*!< Filter bit 25 */ +#define CAN_F1R1_FB26 ((uint32_t)0x04000000) /*!< Filter bit 26 */ +#define CAN_F1R1_FB27 ((uint32_t)0x08000000) /*!< Filter bit 27 */ +#define CAN_F1R1_FB28 ((uint32_t)0x10000000) /*!< Filter bit 28 */ +#define CAN_F1R1_FB29 ((uint32_t)0x20000000) /*!< Filter bit 29 */ +#define CAN_F1R1_FB30 ((uint32_t)0x40000000) /*!< Filter bit 30 */ +#define CAN_F1R1_FB31 ((uint32_t)0x80000000) /*!< Filter bit 31 */ + +/******************* Bit definition for CAN_F2R1 register *******************/ +#define CAN_F2R1_FB0 ((uint32_t)0x00000001) /*!< Filter bit 0 */ +#define CAN_F2R1_FB1 ((uint32_t)0x00000002) /*!< Filter bit 1 */ +#define CAN_F2R1_FB2 ((uint32_t)0x00000004) /*!< Filter bit 2 */ +#define CAN_F2R1_FB3 ((uint32_t)0x00000008) /*!< Filter bit 3 */ +#define CAN_F2R1_FB4 ((uint32_t)0x00000010) /*!< Filter bit 4 */ +#define CAN_F2R1_FB5 ((uint32_t)0x00000020) /*!< Filter bit 5 */ +#define CAN_F2R1_FB6 ((uint32_t)0x00000040) /*!< Filter bit 6 */ +#define CAN_F2R1_FB7 ((uint32_t)0x00000080) /*!< Filter bit 7 */ +#define CAN_F2R1_FB8 ((uint32_t)0x00000100) /*!< Filter bit 8 */ +#define CAN_F2R1_FB9 ((uint32_t)0x00000200) /*!< Filter bit 9 */ +#define CAN_F2R1_FB10 ((uint32_t)0x00000400) /*!< Filter bit 10 */ +#define CAN_F2R1_FB11 ((uint32_t)0x00000800) /*!< Filter bit 11 */ +#define CAN_F2R1_FB12 ((uint32_t)0x00001000) /*!< Filter bit 12 */ +#define CAN_F2R1_FB13 ((uint32_t)0x00002000) /*!< Filter bit 13 */ +#define CAN_F2R1_FB14 ((uint32_t)0x00004000) /*!< Filter bit 14 */ +#define CAN_F2R1_FB15 ((uint32_t)0x00008000) /*!< Filter bit 15 */ +#define CAN_F2R1_FB16 ((uint32_t)0x00010000) /*!< Filter bit 16 */ +#define CAN_F2R1_FB17 ((uint32_t)0x00020000) /*!< Filter bit 17 */ +#define CAN_F2R1_FB18 ((uint32_t)0x00040000) /*!< Filter bit 18 */ +#define CAN_F2R1_FB19 ((uint32_t)0x00080000) /*!< Filter bit 19 */ +#define CAN_F2R1_FB20 ((uint32_t)0x00100000) /*!< Filter bit 20 */ +#define CAN_F2R1_FB21 ((uint32_t)0x00200000) /*!< Filter bit 21 */ +#define CAN_F2R1_FB22 ((uint32_t)0x00400000) /*!< Filter bit 22 */ +#define CAN_F2R1_FB23 ((uint32_t)0x00800000) /*!< Filter bit 23 */ +#define CAN_F2R1_FB24 ((uint32_t)0x01000000) /*!< Filter bit 24 */ +#define CAN_F2R1_FB25 ((uint32_t)0x02000000) /*!< Filter bit 25 */ +#define CAN_F2R1_FB26 ((uint32_t)0x04000000) /*!< Filter bit 26 */ +#define CAN_F2R1_FB27 ((uint32_t)0x08000000) /*!< Filter bit 27 */ +#define CAN_F2R1_FB28 ((uint32_t)0x10000000) /*!< Filter bit 28 */ +#define CAN_F2R1_FB29 ((uint32_t)0x20000000) /*!< Filter bit 29 */ +#define CAN_F2R1_FB30 ((uint32_t)0x40000000) /*!< Filter bit 30 */ +#define CAN_F2R1_FB31 ((uint32_t)0x80000000) /*!< Filter bit 31 */ + +/******************* Bit definition for CAN_F3R1 register *******************/ +#define CAN_F3R1_FB0 ((uint32_t)0x00000001) /*!< Filter bit 0 */ +#define CAN_F3R1_FB1 ((uint32_t)0x00000002) /*!< Filter bit 1 */ +#define CAN_F3R1_FB2 ((uint32_t)0x00000004) /*!< Filter bit 2 */ +#define CAN_F3R1_FB3 ((uint32_t)0x00000008) /*!< Filter bit 3 */ +#define CAN_F3R1_FB4 ((uint32_t)0x00000010) /*!< Filter bit 4 */ +#define CAN_F3R1_FB5 ((uint32_t)0x00000020) /*!< Filter bit 5 */ +#define CAN_F3R1_FB6 ((uint32_t)0x00000040) /*!< Filter bit 6 */ +#define CAN_F3R1_FB7 ((uint32_t)0x00000080) /*!< Filter bit 7 */ +#define CAN_F3R1_FB8 ((uint32_t)0x00000100) /*!< Filter bit 8 */ +#define CAN_F3R1_FB9 ((uint32_t)0x00000200) /*!< Filter bit 9 */ +#define CAN_F3R1_FB10 ((uint32_t)0x00000400) /*!< Filter bit 10 */ +#define CAN_F3R1_FB11 ((uint32_t)0x00000800) /*!< Filter bit 11 */ +#define CAN_F3R1_FB12 ((uint32_t)0x00001000) /*!< Filter bit 12 */ +#define CAN_F3R1_FB13 ((uint32_t)0x00002000) /*!< Filter bit 13 */ +#define CAN_F3R1_FB14 ((uint32_t)0x00004000) /*!< Filter bit 14 */ +#define CAN_F3R1_FB15 ((uint32_t)0x00008000) /*!< Filter bit 15 */ +#define CAN_F3R1_FB16 ((uint32_t)0x00010000) /*!< Filter bit 16 */ +#define CAN_F3R1_FB17 ((uint32_t)0x00020000) /*!< Filter bit 17 */ +#define CAN_F3R1_FB18 ((uint32_t)0x00040000) /*!< Filter bit 18 */ +#define CAN_F3R1_FB19 ((uint32_t)0x00080000) /*!< Filter bit 19 */ +#define CAN_F3R1_FB20 ((uint32_t)0x00100000) /*!< Filter bit 20 */ +#define CAN_F3R1_FB21 ((uint32_t)0x00200000) /*!< Filter bit 21 */ +#define CAN_F3R1_FB22 ((uint32_t)0x00400000) /*!< Filter bit 22 */ +#define CAN_F3R1_FB23 ((uint32_t)0x00800000) /*!< Filter bit 23 */ +#define CAN_F3R1_FB24 ((uint32_t)0x01000000) /*!< Filter bit 24 */ +#define CAN_F3R1_FB25 ((uint32_t)0x02000000) /*!< Filter bit 25 */ +#define CAN_F3R1_FB26 ((uint32_t)0x04000000) /*!< Filter bit 26 */ +#define CAN_F3R1_FB27 ((uint32_t)0x08000000) /*!< Filter bit 27 */ +#define CAN_F3R1_FB28 ((uint32_t)0x10000000) /*!< Filter bit 28 */ +#define CAN_F3R1_FB29 ((uint32_t)0x20000000) /*!< Filter bit 29 */ +#define CAN_F3R1_FB30 ((uint32_t)0x40000000) /*!< Filter bit 30 */ +#define CAN_F3R1_FB31 ((uint32_t)0x80000000) /*!< Filter bit 31 */ + +/******************* Bit definition for CAN_F4R1 register *******************/ +#define CAN_F4R1_FB0 ((uint32_t)0x00000001) /*!< Filter bit 0 */ +#define CAN_F4R1_FB1 ((uint32_t)0x00000002) /*!< Filter bit 1 */ +#define CAN_F4R1_FB2 ((uint32_t)0x00000004) /*!< Filter bit 2 */ +#define CAN_F4R1_FB3 ((uint32_t)0x00000008) /*!< Filter bit 3 */ +#define CAN_F4R1_FB4 ((uint32_t)0x00000010) /*!< Filter bit 4 */ +#define CAN_F4R1_FB5 ((uint32_t)0x00000020) /*!< Filter bit 5 */ +#define CAN_F4R1_FB6 ((uint32_t)0x00000040) /*!< Filter bit 6 */ +#define CAN_F4R1_FB7 ((uint32_t)0x00000080) /*!< Filter bit 7 */ +#define CAN_F4R1_FB8 ((uint32_t)0x00000100) /*!< Filter bit 8 */ +#define CAN_F4R1_FB9 ((uint32_t)0x00000200) /*!< Filter bit 9 */ +#define CAN_F4R1_FB10 ((uint32_t)0x00000400) /*!< Filter bit 10 */ +#define CAN_F4R1_FB11 ((uint32_t)0x00000800) /*!< Filter bit 11 */ +#define CAN_F4R1_FB12 ((uint32_t)0x00001000) /*!< Filter bit 12 */ +#define CAN_F4R1_FB13 ((uint32_t)0x00002000) /*!< Filter bit 13 */ +#define CAN_F4R1_FB14 ((uint32_t)0x00004000) /*!< Filter bit 14 */ +#define CAN_F4R1_FB15 ((uint32_t)0x00008000) /*!< Filter bit 15 */ +#define CAN_F4R1_FB16 ((uint32_t)0x00010000) /*!< Filter bit 16 */ +#define CAN_F4R1_FB17 ((uint32_t)0x00020000) /*!< Filter bit 17 */ +#define CAN_F4R1_FB18 ((uint32_t)0x00040000) /*!< Filter bit 18 */ +#define CAN_F4R1_FB19 ((uint32_t)0x00080000) /*!< Filter bit 19 */ +#define CAN_F4R1_FB20 ((uint32_t)0x00100000) /*!< Filter bit 20 */ +#define CAN_F4R1_FB21 ((uint32_t)0x00200000) /*!< Filter bit 21 */ +#define CAN_F4R1_FB22 ((uint32_t)0x00400000) /*!< Filter bit 22 */ +#define CAN_F4R1_FB23 ((uint32_t)0x00800000) /*!< Filter bit 23 */ +#define CAN_F4R1_FB24 ((uint32_t)0x01000000) /*!< Filter bit 24 */ +#define CAN_F4R1_FB25 ((uint32_t)0x02000000) /*!< Filter bit 25 */ +#define CAN_F4R1_FB26 ((uint32_t)0x04000000) /*!< Filter bit 26 */ +#define CAN_F4R1_FB27 ((uint32_t)0x08000000) /*!< Filter bit 27 */ +#define CAN_F4R1_FB28 ((uint32_t)0x10000000) /*!< Filter bit 28 */ +#define CAN_F4R1_FB29 ((uint32_t)0x20000000) /*!< Filter bit 29 */ +#define CAN_F4R1_FB30 ((uint32_t)0x40000000) /*!< Filter bit 30 */ +#define CAN_F4R1_FB31 ((uint32_t)0x80000000) /*!< Filter bit 31 */ + +/******************* Bit definition for CAN_F5R1 register *******************/ +#define CAN_F5R1_FB0 ((uint32_t)0x00000001) /*!< Filter bit 0 */ +#define CAN_F5R1_FB1 ((uint32_t)0x00000002) /*!< Filter bit 1 */ +#define CAN_F5R1_FB2 ((uint32_t)0x00000004) /*!< Filter bit 2 */ +#define CAN_F5R1_FB3 ((uint32_t)0x00000008) /*!< Filter bit 3 */ +#define CAN_F5R1_FB4 ((uint32_t)0x00000010) /*!< Filter bit 4 */ +#define CAN_F5R1_FB5 ((uint32_t)0x00000020) /*!< Filter bit 5 */ +#define CAN_F5R1_FB6 ((uint32_t)0x00000040) /*!< Filter bit 6 */ +#define CAN_F5R1_FB7 ((uint32_t)0x00000080) /*!< Filter bit 7 */ +#define CAN_F5R1_FB8 ((uint32_t)0x00000100) /*!< Filter bit 8 */ +#define CAN_F5R1_FB9 ((uint32_t)0x00000200) /*!< Filter bit 9 */ +#define CAN_F5R1_FB10 ((uint32_t)0x00000400) /*!< Filter bit 10 */ +#define CAN_F5R1_FB11 ((uint32_t)0x00000800) /*!< Filter bit 11 */ +#define CAN_F5R1_FB12 ((uint32_t)0x00001000) /*!< Filter bit 12 */ +#define CAN_F5R1_FB13 ((uint32_t)0x00002000) /*!< Filter bit 13 */ +#define CAN_F5R1_FB14 ((uint32_t)0x00004000) /*!< Filter bit 14 */ +#define CAN_F5R1_FB15 ((uint32_t)0x00008000) /*!< Filter bit 15 */ +#define CAN_F5R1_FB16 ((uint32_t)0x00010000) /*!< Filter bit 16 */ +#define CAN_F5R1_FB17 ((uint32_t)0x00020000) /*!< Filter bit 17 */ +#define CAN_F5R1_FB18 ((uint32_t)0x00040000) /*!< Filter bit 18 */ +#define CAN_F5R1_FB19 ((uint32_t)0x00080000) /*!< Filter bit 19 */ +#define CAN_F5R1_FB20 ((uint32_t)0x00100000) /*!< Filter bit 20 */ +#define CAN_F5R1_FB21 ((uint32_t)0x00200000) /*!< Filter bit 21 */ +#define CAN_F5R1_FB22 ((uint32_t)0x00400000) /*!< Filter bit 22 */ +#define CAN_F5R1_FB23 ((uint32_t)0x00800000) /*!< Filter bit 23 */ +#define CAN_F5R1_FB24 ((uint32_t)0x01000000) /*!< Filter bit 24 */ +#define CAN_F5R1_FB25 ((uint32_t)0x02000000) /*!< Filter bit 25 */ +#define CAN_F5R1_FB26 ((uint32_t)0x04000000) /*!< Filter bit 26 */ +#define CAN_F5R1_FB27 ((uint32_t)0x08000000) /*!< Filter bit 27 */ +#define CAN_F5R1_FB28 ((uint32_t)0x10000000) /*!< Filter bit 28 */ +#define CAN_F5R1_FB29 ((uint32_t)0x20000000) /*!< Filter bit 29 */ +#define CAN_F5R1_FB30 ((uint32_t)0x40000000) /*!< Filter bit 30 */ +#define CAN_F5R1_FB31 ((uint32_t)0x80000000) /*!< Filter bit 31 */ + +/******************* Bit definition for CAN_F6R1 register *******************/ +#define CAN_F6R1_FB0 ((uint32_t)0x00000001) /*!< Filter bit 0 */ +#define CAN_F6R1_FB1 ((uint32_t)0x00000002) /*!< Filter bit 1 */ +#define CAN_F6R1_FB2 ((uint32_t)0x00000004) /*!< Filter bit 2 */ +#define CAN_F6R1_FB3 ((uint32_t)0x00000008) /*!< Filter bit 3 */ +#define CAN_F6R1_FB4 ((uint32_t)0x00000010) /*!< Filter bit 4 */ +#define CAN_F6R1_FB5 ((uint32_t)0x00000020) /*!< Filter bit 5 */ +#define CAN_F6R1_FB6 ((uint32_t)0x00000040) /*!< Filter bit 6 */ +#define CAN_F6R1_FB7 ((uint32_t)0x00000080) /*!< Filter bit 7 */ +#define CAN_F6R1_FB8 ((uint32_t)0x00000100) /*!< Filter bit 8 */ +#define CAN_F6R1_FB9 ((uint32_t)0x00000200) /*!< Filter bit 9 */ +#define CAN_F6R1_FB10 ((uint32_t)0x00000400) /*!< Filter bit 10 */ +#define CAN_F6R1_FB11 ((uint32_t)0x00000800) /*!< Filter bit 11 */ +#define CAN_F6R1_FB12 ((uint32_t)0x00001000) /*!< Filter bit 12 */ +#define CAN_F6R1_FB13 ((uint32_t)0x00002000) /*!< Filter bit 13 */ +#define CAN_F6R1_FB14 ((uint32_t)0x00004000) /*!< Filter bit 14 */ +#define CAN_F6R1_FB15 ((uint32_t)0x00008000) /*!< Filter bit 15 */ +#define CAN_F6R1_FB16 ((uint32_t)0x00010000) /*!< Filter bit 16 */ +#define CAN_F6R1_FB17 ((uint32_t)0x00020000) /*!< Filter bit 17 */ +#define CAN_F6R1_FB18 ((uint32_t)0x00040000) /*!< Filter bit 18 */ +#define CAN_F6R1_FB19 ((uint32_t)0x00080000) /*!< Filter bit 19 */ +#define CAN_F6R1_FB20 ((uint32_t)0x00100000) /*!< Filter bit 20 */ +#define CAN_F6R1_FB21 ((uint32_t)0x00200000) /*!< Filter bit 21 */ +#define CAN_F6R1_FB22 ((uint32_t)0x00400000) /*!< Filter bit 22 */ +#define CAN_F6R1_FB23 ((uint32_t)0x00800000) /*!< Filter bit 23 */ +#define CAN_F6R1_FB24 ((uint32_t)0x01000000) /*!< Filter bit 24 */ +#define CAN_F6R1_FB25 ((uint32_t)0x02000000) /*!< Filter bit 25 */ +#define CAN_F6R1_FB26 ((uint32_t)0x04000000) /*!< Filter bit 26 */ +#define CAN_F6R1_FB27 ((uint32_t)0x08000000) /*!< Filter bit 27 */ +#define CAN_F6R1_FB28 ((uint32_t)0x10000000) /*!< Filter bit 28 */ +#define CAN_F6R1_FB29 ((uint32_t)0x20000000) /*!< Filter bit 29 */ +#define CAN_F6R1_FB30 ((uint32_t)0x40000000) /*!< Filter bit 30 */ +#define CAN_F6R1_FB31 ((uint32_t)0x80000000) /*!< Filter bit 31 */ + +/******************* Bit definition for CAN_F7R1 register *******************/ +#define CAN_F7R1_FB0 ((uint32_t)0x00000001) /*!< Filter bit 0 */ +#define CAN_F7R1_FB1 ((uint32_t)0x00000002) /*!< Filter bit 1 */ +#define CAN_F7R1_FB2 ((uint32_t)0x00000004) /*!< Filter bit 2 */ +#define CAN_F7R1_FB3 ((uint32_t)0x00000008) /*!< Filter bit 3 */ +#define CAN_F7R1_FB4 ((uint32_t)0x00000010) /*!< Filter bit 4 */ +#define CAN_F7R1_FB5 ((uint32_t)0x00000020) /*!< Filter bit 5 */ +#define CAN_F7R1_FB6 ((uint32_t)0x00000040) /*!< Filter bit 6 */ +#define CAN_F7R1_FB7 ((uint32_t)0x00000080) /*!< Filter bit 7 */ +#define CAN_F7R1_FB8 ((uint32_t)0x00000100) /*!< Filter bit 8 */ +#define CAN_F7R1_FB9 ((uint32_t)0x00000200) /*!< Filter bit 9 */ +#define CAN_F7R1_FB10 ((uint32_t)0x00000400) /*!< Filter bit 10 */ +#define CAN_F7R1_FB11 ((uint32_t)0x00000800) /*!< Filter bit 11 */ +#define CAN_F7R1_FB12 ((uint32_t)0x00001000) /*!< Filter bit 12 */ +#define CAN_F7R1_FB13 ((uint32_t)0x00002000) /*!< Filter bit 13 */ +#define CAN_F7R1_FB14 ((uint32_t)0x00004000) /*!< Filter bit 14 */ +#define CAN_F7R1_FB15 ((uint32_t)0x00008000) /*!< Filter bit 15 */ +#define CAN_F7R1_FB16 ((uint32_t)0x00010000) /*!< Filter bit 16 */ +#define CAN_F7R1_FB17 ((uint32_t)0x00020000) /*!< Filter bit 17 */ +#define CAN_F7R1_FB18 ((uint32_t)0x00040000) /*!< Filter bit 18 */ +#define CAN_F7R1_FB19 ((uint32_t)0x00080000) /*!< Filter bit 19 */ +#define CAN_F7R1_FB20 ((uint32_t)0x00100000) /*!< Filter bit 20 */ +#define CAN_F7R1_FB21 ((uint32_t)0x00200000) /*!< Filter bit 21 */ +#define CAN_F7R1_FB22 ((uint32_t)0x00400000) /*!< Filter bit 22 */ +#define CAN_F7R1_FB23 ((uint32_t)0x00800000) /*!< Filter bit 23 */ +#define CAN_F7R1_FB24 ((uint32_t)0x01000000) /*!< Filter bit 24 */ +#define CAN_F7R1_FB25 ((uint32_t)0x02000000) /*!< Filter bit 25 */ +#define CAN_F7R1_FB26 ((uint32_t)0x04000000) /*!< Filter bit 26 */ +#define CAN_F7R1_FB27 ((uint32_t)0x08000000) /*!< Filter bit 27 */ +#define CAN_F7R1_FB28 ((uint32_t)0x10000000) /*!< Filter bit 28 */ +#define CAN_F7R1_FB29 ((uint32_t)0x20000000) /*!< Filter bit 29 */ +#define CAN_F7R1_FB30 ((uint32_t)0x40000000) /*!< Filter bit 30 */ +#define CAN_F7R1_FB31 ((uint32_t)0x80000000) /*!< Filter bit 31 */ + +/******************* Bit definition for CAN_F8R1 register *******************/ +#define CAN_F8R1_FB0 ((uint32_t)0x00000001) /*!< Filter bit 0 */ +#define CAN_F8R1_FB1 ((uint32_t)0x00000002) /*!< Filter bit 1 */ +#define CAN_F8R1_FB2 ((uint32_t)0x00000004) /*!< Filter bit 2 */ +#define CAN_F8R1_FB3 ((uint32_t)0x00000008) /*!< Filter bit 3 */ +#define CAN_F8R1_FB4 ((uint32_t)0x00000010) /*!< Filter bit 4 */ +#define CAN_F8R1_FB5 ((uint32_t)0x00000020) /*!< Filter bit 5 */ +#define CAN_F8R1_FB6 ((uint32_t)0x00000040) /*!< Filter bit 6 */ +#define CAN_F8R1_FB7 ((uint32_t)0x00000080) /*!< Filter bit 7 */ +#define CAN_F8R1_FB8 ((uint32_t)0x00000100) /*!< Filter bit 8 */ +#define CAN_F8R1_FB9 ((uint32_t)0x00000200) /*!< Filter bit 9 */ +#define CAN_F8R1_FB10 ((uint32_t)0x00000400) /*!< Filter bit 10 */ +#define CAN_F8R1_FB11 ((uint32_t)0x00000800) /*!< Filter bit 11 */ +#define CAN_F8R1_FB12 ((uint32_t)0x00001000) /*!< Filter bit 12 */ +#define CAN_F8R1_FB13 ((uint32_t)0x00002000) /*!< Filter bit 13 */ +#define CAN_F8R1_FB14 ((uint32_t)0x00004000) /*!< Filter bit 14 */ +#define CAN_F8R1_FB15 ((uint32_t)0x00008000) /*!< Filter bit 15 */ +#define CAN_F8R1_FB16 ((uint32_t)0x00010000) /*!< Filter bit 16 */ +#define CAN_F8R1_FB17 ((uint32_t)0x00020000) /*!< Filter bit 17 */ +#define CAN_F8R1_FB18 ((uint32_t)0x00040000) /*!< Filter bit 18 */ +#define CAN_F8R1_FB19 ((uint32_t)0x00080000) /*!< Filter bit 19 */ +#define CAN_F8R1_FB20 ((uint32_t)0x00100000) /*!< Filter bit 20 */ +#define CAN_F8R1_FB21 ((uint32_t)0x00200000) /*!< Filter bit 21 */ +#define CAN_F8R1_FB22 ((uint32_t)0x00400000) /*!< Filter bit 22 */ +#define CAN_F8R1_FB23 ((uint32_t)0x00800000) /*!< Filter bit 23 */ +#define CAN_F8R1_FB24 ((uint32_t)0x01000000) /*!< Filter bit 24 */ +#define CAN_F8R1_FB25 ((uint32_t)0x02000000) /*!< Filter bit 25 */ +#define CAN_F8R1_FB26 ((uint32_t)0x04000000) /*!< Filter bit 26 */ +#define CAN_F8R1_FB27 ((uint32_t)0x08000000) /*!< Filter bit 27 */ +#define CAN_F8R1_FB28 ((uint32_t)0x10000000) /*!< Filter bit 28 */ +#define CAN_F8R1_FB29 ((uint32_t)0x20000000) /*!< Filter bit 29 */ +#define CAN_F8R1_FB30 ((uint32_t)0x40000000) /*!< Filter bit 30 */ +#define CAN_F8R1_FB31 ((uint32_t)0x80000000) /*!< Filter bit 31 */ + +/******************* Bit definition for CAN_F9R1 register *******************/ +#define CAN_F9R1_FB0 ((uint32_t)0x00000001) /*!< Filter bit 0 */ +#define CAN_F9R1_FB1 ((uint32_t)0x00000002) /*!< Filter bit 1 */ +#define CAN_F9R1_FB2 ((uint32_t)0x00000004) /*!< Filter bit 2 */ +#define CAN_F9R1_FB3 ((uint32_t)0x00000008) /*!< Filter bit 3 */ +#define CAN_F9R1_FB4 ((uint32_t)0x00000010) /*!< Filter bit 4 */ +#define CAN_F9R1_FB5 ((uint32_t)0x00000020) /*!< Filter bit 5 */ +#define CAN_F9R1_FB6 ((uint32_t)0x00000040) /*!< Filter bit 6 */ +#define CAN_F9R1_FB7 ((uint32_t)0x00000080) /*!< Filter bit 7 */ +#define CAN_F9R1_FB8 ((uint32_t)0x00000100) /*!< Filter bit 8 */ +#define CAN_F9R1_FB9 ((uint32_t)0x00000200) /*!< Filter bit 9 */ +#define CAN_F9R1_FB10 ((uint32_t)0x00000400) /*!< Filter bit 10 */ +#define CAN_F9R1_FB11 ((uint32_t)0x00000800) /*!< Filter bit 11 */ +#define CAN_F9R1_FB12 ((uint32_t)0x00001000) /*!< Filter bit 12 */ +#define CAN_F9R1_FB13 ((uint32_t)0x00002000) /*!< Filter bit 13 */ +#define CAN_F9R1_FB14 ((uint32_t)0x00004000) /*!< Filter bit 14 */ +#define CAN_F9R1_FB15 ((uint32_t)0x00008000) /*!< Filter bit 15 */ +#define CAN_F9R1_FB16 ((uint32_t)0x00010000) /*!< Filter bit 16 */ +#define CAN_F9R1_FB17 ((uint32_t)0x00020000) /*!< Filter bit 17 */ +#define CAN_F9R1_FB18 ((uint32_t)0x00040000) /*!< Filter bit 18 */ +#define CAN_F9R1_FB19 ((uint32_t)0x00080000) /*!< Filter bit 19 */ +#define CAN_F9R1_FB20 ((uint32_t)0x00100000) /*!< Filter bit 20 */ +#define CAN_F9R1_FB21 ((uint32_t)0x00200000) /*!< Filter bit 21 */ +#define CAN_F9R1_FB22 ((uint32_t)0x00400000) /*!< Filter bit 22 */ +#define CAN_F9R1_FB23 ((uint32_t)0x00800000) /*!< Filter bit 23 */ +#define CAN_F9R1_FB24 ((uint32_t)0x01000000) /*!< Filter bit 24 */ +#define CAN_F9R1_FB25 ((uint32_t)0x02000000) /*!< Filter bit 25 */ +#define CAN_F9R1_FB26 ((uint32_t)0x04000000) /*!< Filter bit 26 */ +#define CAN_F9R1_FB27 ((uint32_t)0x08000000) /*!< Filter bit 27 */ +#define CAN_F9R1_FB28 ((uint32_t)0x10000000) /*!< Filter bit 28 */ +#define CAN_F9R1_FB29 ((uint32_t)0x20000000) /*!< Filter bit 29 */ +#define CAN_F9R1_FB30 ((uint32_t)0x40000000) /*!< Filter bit 30 */ +#define CAN_F9R1_FB31 ((uint32_t)0x80000000) /*!< Filter bit 31 */ + +/******************* Bit definition for CAN_F10R1 register ******************/ +#define CAN_F10R1_FB0 ((uint32_t)0x00000001) /*!< Filter bit 0 */ +#define CAN_F10R1_FB1 ((uint32_t)0x00000002) /*!< Filter bit 1 */ +#define CAN_F10R1_FB2 ((uint32_t)0x00000004) /*!< Filter bit 2 */ +#define CAN_F10R1_FB3 ((uint32_t)0x00000008) /*!< Filter bit 3 */ +#define CAN_F10R1_FB4 ((uint32_t)0x00000010) /*!< Filter bit 4 */ +#define CAN_F10R1_FB5 ((uint32_t)0x00000020) /*!< Filter bit 5 */ +#define CAN_F10R1_FB6 ((uint32_t)0x00000040) /*!< Filter bit 6 */ +#define CAN_F10R1_FB7 ((uint32_t)0x00000080) /*!< Filter bit 7 */ +#define CAN_F10R1_FB8 ((uint32_t)0x00000100) /*!< Filter bit 8 */ +#define CAN_F10R1_FB9 ((uint32_t)0x00000200) /*!< Filter bit 9 */ +#define CAN_F10R1_FB10 ((uint32_t)0x00000400) /*!< Filter bit 10 */ +#define CAN_F10R1_FB11 ((uint32_t)0x00000800) /*!< Filter bit 11 */ +#define CAN_F10R1_FB12 ((uint32_t)0x00001000) /*!< Filter bit 12 */ +#define CAN_F10R1_FB13 ((uint32_t)0x00002000) /*!< Filter bit 13 */ +#define CAN_F10R1_FB14 ((uint32_t)0x00004000) /*!< Filter bit 14 */ +#define CAN_F10R1_FB15 ((uint32_t)0x00008000) /*!< Filter bit 15 */ +#define CAN_F10R1_FB16 ((uint32_t)0x00010000) /*!< Filter bit 16 */ +#define CAN_F10R1_FB17 ((uint32_t)0x00020000) /*!< Filter bit 17 */ +#define CAN_F10R1_FB18 ((uint32_t)0x00040000) /*!< Filter bit 18 */ +#define CAN_F10R1_FB19 ((uint32_t)0x00080000) /*!< Filter bit 19 */ +#define CAN_F10R1_FB20 ((uint32_t)0x00100000) /*!< Filter bit 20 */ +#define CAN_F10R1_FB21 ((uint32_t)0x00200000) /*!< Filter bit 21 */ +#define CAN_F10R1_FB22 ((uint32_t)0x00400000) /*!< Filter bit 22 */ +#define CAN_F10R1_FB23 ((uint32_t)0x00800000) /*!< Filter bit 23 */ +#define CAN_F10R1_FB24 ((uint32_t)0x01000000) /*!< Filter bit 24 */ +#define CAN_F10R1_FB25 ((uint32_t)0x02000000) /*!< Filter bit 25 */ +#define CAN_F10R1_FB26 ((uint32_t)0x04000000) /*!< Filter bit 26 */ +#define CAN_F10R1_FB27 ((uint32_t)0x08000000) /*!< Filter bit 27 */ +#define CAN_F10R1_FB28 ((uint32_t)0x10000000) /*!< Filter bit 28 */ +#define CAN_F10R1_FB29 ((uint32_t)0x20000000) /*!< Filter bit 29 */ +#define CAN_F10R1_FB30 ((uint32_t)0x40000000) /*!< Filter bit 30 */ +#define CAN_F10R1_FB31 ((uint32_t)0x80000000) /*!< Filter bit 31 */ + +/******************* Bit definition for CAN_F11R1 register ******************/ +#define CAN_F11R1_FB0 ((uint32_t)0x00000001) /*!< Filter bit 0 */ +#define CAN_F11R1_FB1 ((uint32_t)0x00000002) /*!< Filter bit 1 */ +#define CAN_F11R1_FB2 ((uint32_t)0x00000004) /*!< Filter bit 2 */ +#define CAN_F11R1_FB3 ((uint32_t)0x00000008) /*!< Filter bit 3 */ +#define CAN_F11R1_FB4 ((uint32_t)0x00000010) /*!< Filter bit 4 */ +#define CAN_F11R1_FB5 ((uint32_t)0x00000020) /*!< Filter bit 5 */ +#define CAN_F11R1_FB6 ((uint32_t)0x00000040) /*!< Filter bit 6 */ +#define CAN_F11R1_FB7 ((uint32_t)0x00000080) /*!< Filter bit 7 */ +#define CAN_F11R1_FB8 ((uint32_t)0x00000100) /*!< Filter bit 8 */ +#define CAN_F11R1_FB9 ((uint32_t)0x00000200) /*!< Filter bit 9 */ +#define CAN_F11R1_FB10 ((uint32_t)0x00000400) /*!< Filter bit 10 */ +#define CAN_F11R1_FB11 ((uint32_t)0x00000800) /*!< Filter bit 11 */ +#define CAN_F11R1_FB12 ((uint32_t)0x00001000) /*!< Filter bit 12 */ +#define CAN_F11R1_FB13 ((uint32_t)0x00002000) /*!< Filter bit 13 */ +#define CAN_F11R1_FB14 ((uint32_t)0x00004000) /*!< Filter bit 14 */ +#define CAN_F11R1_FB15 ((uint32_t)0x00008000) /*!< Filter bit 15 */ +#define CAN_F11R1_FB16 ((uint32_t)0x00010000) /*!< Filter bit 16 */ +#define CAN_F11R1_FB17 ((uint32_t)0x00020000) /*!< Filter bit 17 */ +#define CAN_F11R1_FB18 ((uint32_t)0x00040000) /*!< Filter bit 18 */ +#define CAN_F11R1_FB19 ((uint32_t)0x00080000) /*!< Filter bit 19 */ +#define CAN_F11R1_FB20 ((uint32_t)0x00100000) /*!< Filter bit 20 */ +#define CAN_F11R1_FB21 ((uint32_t)0x00200000) /*!< Filter bit 21 */ +#define CAN_F11R1_FB22 ((uint32_t)0x00400000) /*!< Filter bit 22 */ +#define CAN_F11R1_FB23 ((uint32_t)0x00800000) /*!< Filter bit 23 */ +#define CAN_F11R1_FB24 ((uint32_t)0x01000000) /*!< Filter bit 24 */ +#define CAN_F11R1_FB25 ((uint32_t)0x02000000) /*!< Filter bit 25 */ +#define CAN_F11R1_FB26 ((uint32_t)0x04000000) /*!< Filter bit 26 */ +#define CAN_F11R1_FB27 ((uint32_t)0x08000000) /*!< Filter bit 27 */ +#define CAN_F11R1_FB28 ((uint32_t)0x10000000) /*!< Filter bit 28 */ +#define CAN_F11R1_FB29 ((uint32_t)0x20000000) /*!< Filter bit 29 */ +#define CAN_F11R1_FB30 ((uint32_t)0x40000000) /*!< Filter bit 30 */ +#define CAN_F11R1_FB31 ((uint32_t)0x80000000) /*!< Filter bit 31 */ + +/******************* Bit definition for CAN_F12R1 register ******************/ +#define CAN_F12R1_FB0 ((uint32_t)0x00000001) /*!< Filter bit 0 */ +#define CAN_F12R1_FB1 ((uint32_t)0x00000002) /*!< Filter bit 1 */ +#define CAN_F12R1_FB2 ((uint32_t)0x00000004) /*!< Filter bit 2 */ +#define CAN_F12R1_FB3 ((uint32_t)0x00000008) /*!< Filter bit 3 */ +#define CAN_F12R1_FB4 ((uint32_t)0x00000010) /*!< Filter bit 4 */ +#define CAN_F12R1_FB5 ((uint32_t)0x00000020) /*!< Filter bit 5 */ +#define CAN_F12R1_FB6 ((uint32_t)0x00000040) /*!< Filter bit 6 */ +#define CAN_F12R1_FB7 ((uint32_t)0x00000080) /*!< Filter bit 7 */ +#define CAN_F12R1_FB8 ((uint32_t)0x00000100) /*!< Filter bit 8 */ +#define CAN_F12R1_FB9 ((uint32_t)0x00000200) /*!< Filter bit 9 */ +#define CAN_F12R1_FB10 ((uint32_t)0x00000400) /*!< Filter bit 10 */ +#define CAN_F12R1_FB11 ((uint32_t)0x00000800) /*!< Filter bit 11 */ +#define CAN_F12R1_FB12 ((uint32_t)0x00001000) /*!< Filter bit 12 */ +#define CAN_F12R1_FB13 ((uint32_t)0x00002000) /*!< Filter bit 13 */ +#define CAN_F12R1_FB14 ((uint32_t)0x00004000) /*!< Filter bit 14 */ +#define CAN_F12R1_FB15 ((uint32_t)0x00008000) /*!< Filter bit 15 */ +#define CAN_F12R1_FB16 ((uint32_t)0x00010000) /*!< Filter bit 16 */ +#define CAN_F12R1_FB17 ((uint32_t)0x00020000) /*!< Filter bit 17 */ +#define CAN_F12R1_FB18 ((uint32_t)0x00040000) /*!< Filter bit 18 */ +#define CAN_F12R1_FB19 ((uint32_t)0x00080000) /*!< Filter bit 19 */ +#define CAN_F12R1_FB20 ((uint32_t)0x00100000) /*!< Filter bit 20 */ +#define CAN_F12R1_FB21 ((uint32_t)0x00200000) /*!< Filter bit 21 */ +#define CAN_F12R1_FB22 ((uint32_t)0x00400000) /*!< Filter bit 22 */ +#define CAN_F12R1_FB23 ((uint32_t)0x00800000) /*!< Filter bit 23 */ +#define CAN_F12R1_FB24 ((uint32_t)0x01000000) /*!< Filter bit 24 */ +#define CAN_F12R1_FB25 ((uint32_t)0x02000000) /*!< Filter bit 25 */ +#define CAN_F12R1_FB26 ((uint32_t)0x04000000) /*!< Filter bit 26 */ +#define CAN_F12R1_FB27 ((uint32_t)0x08000000) /*!< Filter bit 27 */ +#define CAN_F12R1_FB28 ((uint32_t)0x10000000) /*!< Filter bit 28 */ +#define CAN_F12R1_FB29 ((uint32_t)0x20000000) /*!< Filter bit 29 */ +#define CAN_F12R1_FB30 ((uint32_t)0x40000000) /*!< Filter bit 30 */ +#define CAN_F12R1_FB31 ((uint32_t)0x80000000) /*!< Filter bit 31 */ + +/******************* Bit definition for CAN_F13R1 register ******************/ +#define CAN_F13R1_FB0 ((uint32_t)0x00000001) /*!< Filter bit 0 */ +#define CAN_F13R1_FB1 ((uint32_t)0x00000002) /*!< Filter bit 1 */ +#define CAN_F13R1_FB2 ((uint32_t)0x00000004) /*!< Filter bit 2 */ +#define CAN_F13R1_FB3 ((uint32_t)0x00000008) /*!< Filter bit 3 */ +#define CAN_F13R1_FB4 ((uint32_t)0x00000010) /*!< Filter bit 4 */ +#define CAN_F13R1_FB5 ((uint32_t)0x00000020) /*!< Filter bit 5 */ +#define CAN_F13R1_FB6 ((uint32_t)0x00000040) /*!< Filter bit 6 */ +#define CAN_F13R1_FB7 ((uint32_t)0x00000080) /*!< Filter bit 7 */ +#define CAN_F13R1_FB8 ((uint32_t)0x00000100) /*!< Filter bit 8 */ +#define CAN_F13R1_FB9 ((uint32_t)0x00000200) /*!< Filter bit 9 */ +#define CAN_F13R1_FB10 ((uint32_t)0x00000400) /*!< Filter bit 10 */ +#define CAN_F13R1_FB11 ((uint32_t)0x00000800) /*!< Filter bit 11 */ +#define CAN_F13R1_FB12 ((uint32_t)0x00001000) /*!< Filter bit 12 */ +#define CAN_F13R1_FB13 ((uint32_t)0x00002000) /*!< Filter bit 13 */ +#define CAN_F13R1_FB14 ((uint32_t)0x00004000) /*!< Filter bit 14 */ +#define CAN_F13R1_FB15 ((uint32_t)0x00008000) /*!< Filter bit 15 */ +#define CAN_F13R1_FB16 ((uint32_t)0x00010000) /*!< Filter bit 16 */ +#define CAN_F13R1_FB17 ((uint32_t)0x00020000) /*!< Filter bit 17 */ +#define CAN_F13R1_FB18 ((uint32_t)0x00040000) /*!< Filter bit 18 */ +#define CAN_F13R1_FB19 ((uint32_t)0x00080000) /*!< Filter bit 19 */ +#define CAN_F13R1_FB20 ((uint32_t)0x00100000) /*!< Filter bit 20 */ +#define CAN_F13R1_FB21 ((uint32_t)0x00200000) /*!< Filter bit 21 */ +#define CAN_F13R1_FB22 ((uint32_t)0x00400000) /*!< Filter bit 22 */ +#define CAN_F13R1_FB23 ((uint32_t)0x00800000) /*!< Filter bit 23 */ +#define CAN_F13R1_FB24 ((uint32_t)0x01000000) /*!< Filter bit 24 */ +#define CAN_F13R1_FB25 ((uint32_t)0x02000000) /*!< Filter bit 25 */ +#define CAN_F13R1_FB26 ((uint32_t)0x04000000) /*!< Filter bit 26 */ +#define CAN_F13R1_FB27 ((uint32_t)0x08000000) /*!< Filter bit 27 */ +#define CAN_F13R1_FB28 ((uint32_t)0x10000000) /*!< Filter bit 28 */ +#define CAN_F13R1_FB29 ((uint32_t)0x20000000) /*!< Filter bit 29 */ +#define CAN_F13R1_FB30 ((uint32_t)0x40000000) /*!< Filter bit 30 */ +#define CAN_F13R1_FB31 ((uint32_t)0x80000000) /*!< Filter bit 31 */ + +/******************* Bit definition for CAN_F0R2 register *******************/ +#define CAN_F0R2_FB0 ((uint32_t)0x00000001) /*!< Filter bit 0 */ +#define CAN_F0R2_FB1 ((uint32_t)0x00000002) /*!< Filter bit 1 */ +#define CAN_F0R2_FB2 ((uint32_t)0x00000004) /*!< Filter bit 2 */ +#define CAN_F0R2_FB3 ((uint32_t)0x00000008) /*!< Filter bit 3 */ +#define CAN_F0R2_FB4 ((uint32_t)0x00000010) /*!< Filter bit 4 */ +#define CAN_F0R2_FB5 ((uint32_t)0x00000020) /*!< Filter bit 5 */ +#define CAN_F0R2_FB6 ((uint32_t)0x00000040) /*!< Filter bit 6 */ +#define CAN_F0R2_FB7 ((uint32_t)0x00000080) /*!< Filter bit 7 */ +#define CAN_F0R2_FB8 ((uint32_t)0x00000100) /*!< Filter bit 8 */ +#define CAN_F0R2_FB9 ((uint32_t)0x00000200) /*!< Filter bit 9 */ +#define CAN_F0R2_FB10 ((uint32_t)0x00000400) /*!< Filter bit 10 */ +#define CAN_F0R2_FB11 ((uint32_t)0x00000800) /*!< Filter bit 11 */ +#define CAN_F0R2_FB12 ((uint32_t)0x00001000) /*!< Filter bit 12 */ +#define CAN_F0R2_FB13 ((uint32_t)0x00002000) /*!< Filter bit 13 */ +#define CAN_F0R2_FB14 ((uint32_t)0x00004000) /*!< Filter bit 14 */ +#define CAN_F0R2_FB15 ((uint32_t)0x00008000) /*!< Filter bit 15 */ +#define CAN_F0R2_FB16 ((uint32_t)0x00010000) /*!< Filter bit 16 */ +#define CAN_F0R2_FB17 ((uint32_t)0x00020000) /*!< Filter bit 17 */ +#define CAN_F0R2_FB18 ((uint32_t)0x00040000) /*!< Filter bit 18 */ +#define CAN_F0R2_FB19 ((uint32_t)0x00080000) /*!< Filter bit 19 */ +#define CAN_F0R2_FB20 ((uint32_t)0x00100000) /*!< Filter bit 20 */ +#define CAN_F0R2_FB21 ((uint32_t)0x00200000) /*!< Filter bit 21 */ +#define CAN_F0R2_FB22 ((uint32_t)0x00400000) /*!< Filter bit 22 */ +#define CAN_F0R2_FB23 ((uint32_t)0x00800000) /*!< Filter bit 23 */ +#define CAN_F0R2_FB24 ((uint32_t)0x01000000) /*!< Filter bit 24 */ +#define CAN_F0R2_FB25 ((uint32_t)0x02000000) /*!< Filter bit 25 */ +#define CAN_F0R2_FB26 ((uint32_t)0x04000000) /*!< Filter bit 26 */ +#define CAN_F0R2_FB27 ((uint32_t)0x08000000) /*!< Filter bit 27 */ +#define CAN_F0R2_FB28 ((uint32_t)0x10000000) /*!< Filter bit 28 */ +#define CAN_F0R2_FB29 ((uint32_t)0x20000000) /*!< Filter bit 29 */ +#define CAN_F0R2_FB30 ((uint32_t)0x40000000) /*!< Filter bit 30 */ +#define CAN_F0R2_FB31 ((uint32_t)0x80000000) /*!< Filter bit 31 */ + +/******************* Bit definition for CAN_F1R2 register *******************/ +#define CAN_F1R2_FB0 ((uint32_t)0x00000001) /*!< Filter bit 0 */ +#define CAN_F1R2_FB1 ((uint32_t)0x00000002) /*!< Filter bit 1 */ +#define CAN_F1R2_FB2 ((uint32_t)0x00000004) /*!< Filter bit 2 */ +#define CAN_F1R2_FB3 ((uint32_t)0x00000008) /*!< Filter bit 3 */ +#define CAN_F1R2_FB4 ((uint32_t)0x00000010) /*!< Filter bit 4 */ +#define CAN_F1R2_FB5 ((uint32_t)0x00000020) /*!< Filter bit 5 */ +#define CAN_F1R2_FB6 ((uint32_t)0x00000040) /*!< Filter bit 6 */ +#define CAN_F1R2_FB7 ((uint32_t)0x00000080) /*!< Filter bit 7 */ +#define CAN_F1R2_FB8 ((uint32_t)0x00000100) /*!< Filter bit 8 */ +#define CAN_F1R2_FB9 ((uint32_t)0x00000200) /*!< Filter bit 9 */ +#define CAN_F1R2_FB10 ((uint32_t)0x00000400) /*!< Filter bit 10 */ +#define CAN_F1R2_FB11 ((uint32_t)0x00000800) /*!< Filter bit 11 */ +#define CAN_F1R2_FB12 ((uint32_t)0x00001000) /*!< Filter bit 12 */ +#define CAN_F1R2_FB13 ((uint32_t)0x00002000) /*!< Filter bit 13 */ +#define CAN_F1R2_FB14 ((uint32_t)0x00004000) /*!< Filter bit 14 */ +#define CAN_F1R2_FB15 ((uint32_t)0x00008000) /*!< Filter bit 15 */ +#define CAN_F1R2_FB16 ((uint32_t)0x00010000) /*!< Filter bit 16 */ +#define CAN_F1R2_FB17 ((uint32_t)0x00020000) /*!< Filter bit 17 */ +#define CAN_F1R2_FB18 ((uint32_t)0x00040000) /*!< Filter bit 18 */ +#define CAN_F1R2_FB19 ((uint32_t)0x00080000) /*!< Filter bit 19 */ +#define CAN_F1R2_FB20 ((uint32_t)0x00100000) /*!< Filter bit 20 */ +#define CAN_F1R2_FB21 ((uint32_t)0x00200000) /*!< Filter bit 21 */ +#define CAN_F1R2_FB22 ((uint32_t)0x00400000) /*!< Filter bit 22 */ +#define CAN_F1R2_FB23 ((uint32_t)0x00800000) /*!< Filter bit 23 */ +#define CAN_F1R2_FB24 ((uint32_t)0x01000000) /*!< Filter bit 24 */ +#define CAN_F1R2_FB25 ((uint32_t)0x02000000) /*!< Filter bit 25 */ +#define CAN_F1R2_FB26 ((uint32_t)0x04000000) /*!< Filter bit 26 */ +#define CAN_F1R2_FB27 ((uint32_t)0x08000000) /*!< Filter bit 27 */ +#define CAN_F1R2_FB28 ((uint32_t)0x10000000) /*!< Filter bit 28 */ +#define CAN_F1R2_FB29 ((uint32_t)0x20000000) /*!< Filter bit 29 */ +#define CAN_F1R2_FB30 ((uint32_t)0x40000000) /*!< Filter bit 30 */ +#define CAN_F1R2_FB31 ((uint32_t)0x80000000) /*!< Filter bit 31 */ + +/******************* Bit definition for CAN_F2R2 register *******************/ +#define CAN_F2R2_FB0 ((uint32_t)0x00000001) /*!< Filter bit 0 */ +#define CAN_F2R2_FB1 ((uint32_t)0x00000002) /*!< Filter bit 1 */ +#define CAN_F2R2_FB2 ((uint32_t)0x00000004) /*!< Filter bit 2 */ +#define CAN_F2R2_FB3 ((uint32_t)0x00000008) /*!< Filter bit 3 */ +#define CAN_F2R2_FB4 ((uint32_t)0x00000010) /*!< Filter bit 4 */ +#define CAN_F2R2_FB5 ((uint32_t)0x00000020) /*!< Filter bit 5 */ +#define CAN_F2R2_FB6 ((uint32_t)0x00000040) /*!< Filter bit 6 */ +#define CAN_F2R2_FB7 ((uint32_t)0x00000080) /*!< Filter bit 7 */ +#define CAN_F2R2_FB8 ((uint32_t)0x00000100) /*!< Filter bit 8 */ +#define CAN_F2R2_FB9 ((uint32_t)0x00000200) /*!< Filter bit 9 */ +#define CAN_F2R2_FB10 ((uint32_t)0x00000400) /*!< Filter bit 10 */ +#define CAN_F2R2_FB11 ((uint32_t)0x00000800) /*!< Filter bit 11 */ +#define CAN_F2R2_FB12 ((uint32_t)0x00001000) /*!< Filter bit 12 */ +#define CAN_F2R2_FB13 ((uint32_t)0x00002000) /*!< Filter bit 13 */ +#define CAN_F2R2_FB14 ((uint32_t)0x00004000) /*!< Filter bit 14 */ +#define CAN_F2R2_FB15 ((uint32_t)0x00008000) /*!< Filter bit 15 */ +#define CAN_F2R2_FB16 ((uint32_t)0x00010000) /*!< Filter bit 16 */ +#define CAN_F2R2_FB17 ((uint32_t)0x00020000) /*!< Filter bit 17 */ +#define CAN_F2R2_FB18 ((uint32_t)0x00040000) /*!< Filter bit 18 */ +#define CAN_F2R2_FB19 ((uint32_t)0x00080000) /*!< Filter bit 19 */ +#define CAN_F2R2_FB20 ((uint32_t)0x00100000) /*!< Filter bit 20 */ +#define CAN_F2R2_FB21 ((uint32_t)0x00200000) /*!< Filter bit 21 */ +#define CAN_F2R2_FB22 ((uint32_t)0x00400000) /*!< Filter bit 22 */ +#define CAN_F2R2_FB23 ((uint32_t)0x00800000) /*!< Filter bit 23 */ +#define CAN_F2R2_FB24 ((uint32_t)0x01000000) /*!< Filter bit 24 */ +#define CAN_F2R2_FB25 ((uint32_t)0x02000000) /*!< Filter bit 25 */ +#define CAN_F2R2_FB26 ((uint32_t)0x04000000) /*!< Filter bit 26 */ +#define CAN_F2R2_FB27 ((uint32_t)0x08000000) /*!< Filter bit 27 */ +#define CAN_F2R2_FB28 ((uint32_t)0x10000000) /*!< Filter bit 28 */ +#define CAN_F2R2_FB29 ((uint32_t)0x20000000) /*!< Filter bit 29 */ +#define CAN_F2R2_FB30 ((uint32_t)0x40000000) /*!< Filter bit 30 */ +#define CAN_F2R2_FB31 ((uint32_t)0x80000000) /*!< Filter bit 31 */ + +/******************* Bit definition for CAN_F3R2 register *******************/ +#define CAN_F3R2_FB0 ((uint32_t)0x00000001) /*!< Filter bit 0 */ +#define CAN_F3R2_FB1 ((uint32_t)0x00000002) /*!< Filter bit 1 */ +#define CAN_F3R2_FB2 ((uint32_t)0x00000004) /*!< Filter bit 2 */ +#define CAN_F3R2_FB3 ((uint32_t)0x00000008) /*!< Filter bit 3 */ +#define CAN_F3R2_FB4 ((uint32_t)0x00000010) /*!< Filter bit 4 */ +#define CAN_F3R2_FB5 ((uint32_t)0x00000020) /*!< Filter bit 5 */ +#define CAN_F3R2_FB6 ((uint32_t)0x00000040) /*!< Filter bit 6 */ +#define CAN_F3R2_FB7 ((uint32_t)0x00000080) /*!< Filter bit 7 */ +#define CAN_F3R2_FB8 ((uint32_t)0x00000100) /*!< Filter bit 8 */ +#define CAN_F3R2_FB9 ((uint32_t)0x00000200) /*!< Filter bit 9 */ +#define CAN_F3R2_FB10 ((uint32_t)0x00000400) /*!< Filter bit 10 */ +#define CAN_F3R2_FB11 ((uint32_t)0x00000800) /*!< Filter bit 11 */ +#define CAN_F3R2_FB12 ((uint32_t)0x00001000) /*!< Filter bit 12 */ +#define CAN_F3R2_FB13 ((uint32_t)0x00002000) /*!< Filter bit 13 */ +#define CAN_F3R2_FB14 ((uint32_t)0x00004000) /*!< Filter bit 14 */ +#define CAN_F3R2_FB15 ((uint32_t)0x00008000) /*!< Filter bit 15 */ +#define CAN_F3R2_FB16 ((uint32_t)0x00010000) /*!< Filter bit 16 */ +#define CAN_F3R2_FB17 ((uint32_t)0x00020000) /*!< Filter bit 17 */ +#define CAN_F3R2_FB18 ((uint32_t)0x00040000) /*!< Filter bit 18 */ +#define CAN_F3R2_FB19 ((uint32_t)0x00080000) /*!< Filter bit 19 */ +#define CAN_F3R2_FB20 ((uint32_t)0x00100000) /*!< Filter bit 20 */ +#define CAN_F3R2_FB21 ((uint32_t)0x00200000) /*!< Filter bit 21 */ +#define CAN_F3R2_FB22 ((uint32_t)0x00400000) /*!< Filter bit 22 */ +#define CAN_F3R2_FB23 ((uint32_t)0x00800000) /*!< Filter bit 23 */ +#define CAN_F3R2_FB24 ((uint32_t)0x01000000) /*!< Filter bit 24 */ +#define CAN_F3R2_FB25 ((uint32_t)0x02000000) /*!< Filter bit 25 */ +#define CAN_F3R2_FB26 ((uint32_t)0x04000000) /*!< Filter bit 26 */ +#define CAN_F3R2_FB27 ((uint32_t)0x08000000) /*!< Filter bit 27 */ +#define CAN_F3R2_FB28 ((uint32_t)0x10000000) /*!< Filter bit 28 */ +#define CAN_F3R2_FB29 ((uint32_t)0x20000000) /*!< Filter bit 29 */ +#define CAN_F3R2_FB30 ((uint32_t)0x40000000) /*!< Filter bit 30 */ +#define CAN_F3R2_FB31 ((uint32_t)0x80000000) /*!< Filter bit 31 */ + +/******************* Bit definition for CAN_F4R2 register *******************/ +#define CAN_F4R2_FB0 ((uint32_t)0x00000001) /*!< Filter bit 0 */ +#define CAN_F4R2_FB1 ((uint32_t)0x00000002) /*!< Filter bit 1 */ +#define CAN_F4R2_FB2 ((uint32_t)0x00000004) /*!< Filter bit 2 */ +#define CAN_F4R2_FB3 ((uint32_t)0x00000008) /*!< Filter bit 3 */ +#define CAN_F4R2_FB4 ((uint32_t)0x00000010) /*!< Filter bit 4 */ +#define CAN_F4R2_FB5 ((uint32_t)0x00000020) /*!< Filter bit 5 */ +#define CAN_F4R2_FB6 ((uint32_t)0x00000040) /*!< Filter bit 6 */ +#define CAN_F4R2_FB7 ((uint32_t)0x00000080) /*!< Filter bit 7 */ +#define CAN_F4R2_FB8 ((uint32_t)0x00000100) /*!< Filter bit 8 */ +#define CAN_F4R2_FB9 ((uint32_t)0x00000200) /*!< Filter bit 9 */ +#define CAN_F4R2_FB10 ((uint32_t)0x00000400) /*!< Filter bit 10 */ +#define CAN_F4R2_FB11 ((uint32_t)0x00000800) /*!< Filter bit 11 */ +#define CAN_F4R2_FB12 ((uint32_t)0x00001000) /*!< Filter bit 12 */ +#define CAN_F4R2_FB13 ((uint32_t)0x00002000) /*!< Filter bit 13 */ +#define CAN_F4R2_FB14 ((uint32_t)0x00004000) /*!< Filter bit 14 */ +#define CAN_F4R2_FB15 ((uint32_t)0x00008000) /*!< Filter bit 15 */ +#define CAN_F4R2_FB16 ((uint32_t)0x00010000) /*!< Filter bit 16 */ +#define CAN_F4R2_FB17 ((uint32_t)0x00020000) /*!< Filter bit 17 */ +#define CAN_F4R2_FB18 ((uint32_t)0x00040000) /*!< Filter bit 18 */ +#define CAN_F4R2_FB19 ((uint32_t)0x00080000) /*!< Filter bit 19 */ +#define CAN_F4R2_FB20 ((uint32_t)0x00100000) /*!< Filter bit 20 */ +#define CAN_F4R2_FB21 ((uint32_t)0x00200000) /*!< Filter bit 21 */ +#define CAN_F4R2_FB22 ((uint32_t)0x00400000) /*!< Filter bit 22 */ +#define CAN_F4R2_FB23 ((uint32_t)0x00800000) /*!< Filter bit 23 */ +#define CAN_F4R2_FB24 ((uint32_t)0x01000000) /*!< Filter bit 24 */ +#define CAN_F4R2_FB25 ((uint32_t)0x02000000) /*!< Filter bit 25 */ +#define CAN_F4R2_FB26 ((uint32_t)0x04000000) /*!< Filter bit 26 */ +#define CAN_F4R2_FB27 ((uint32_t)0x08000000) /*!< Filter bit 27 */ +#define CAN_F4R2_FB28 ((uint32_t)0x10000000) /*!< Filter bit 28 */ +#define CAN_F4R2_FB29 ((uint32_t)0x20000000) /*!< Filter bit 29 */ +#define CAN_F4R2_FB30 ((uint32_t)0x40000000) /*!< Filter bit 30 */ +#define CAN_F4R2_FB31 ((uint32_t)0x80000000) /*!< Filter bit 31 */ + +/******************* Bit definition for CAN_F5R2 register *******************/ +#define CAN_F5R2_FB0 ((uint32_t)0x00000001) /*!< Filter bit 0 */ +#define CAN_F5R2_FB1 ((uint32_t)0x00000002) /*!< Filter bit 1 */ +#define CAN_F5R2_FB2 ((uint32_t)0x00000004) /*!< Filter bit 2 */ +#define CAN_F5R2_FB3 ((uint32_t)0x00000008) /*!< Filter bit 3 */ +#define CAN_F5R2_FB4 ((uint32_t)0x00000010) /*!< Filter bit 4 */ +#define CAN_F5R2_FB5 ((uint32_t)0x00000020) /*!< Filter bit 5 */ +#define CAN_F5R2_FB6 ((uint32_t)0x00000040) /*!< Filter bit 6 */ +#define CAN_F5R2_FB7 ((uint32_t)0x00000080) /*!< Filter bit 7 */ +#define CAN_F5R2_FB8 ((uint32_t)0x00000100) /*!< Filter bit 8 */ +#define CAN_F5R2_FB9 ((uint32_t)0x00000200) /*!< Filter bit 9 */ +#define CAN_F5R2_FB10 ((uint32_t)0x00000400) /*!< Filter bit 10 */ +#define CAN_F5R2_FB11 ((uint32_t)0x00000800) /*!< Filter bit 11 */ +#define CAN_F5R2_FB12 ((uint32_t)0x00001000) /*!< Filter bit 12 */ +#define CAN_F5R2_FB13 ((uint32_t)0x00002000) /*!< Filter bit 13 */ +#define CAN_F5R2_FB14 ((uint32_t)0x00004000) /*!< Filter bit 14 */ +#define CAN_F5R2_FB15 ((uint32_t)0x00008000) /*!< Filter bit 15 */ +#define CAN_F5R2_FB16 ((uint32_t)0x00010000) /*!< Filter bit 16 */ +#define CAN_F5R2_FB17 ((uint32_t)0x00020000) /*!< Filter bit 17 */ +#define CAN_F5R2_FB18 ((uint32_t)0x00040000) /*!< Filter bit 18 */ +#define CAN_F5R2_FB19 ((uint32_t)0x00080000) /*!< Filter bit 19 */ +#define CAN_F5R2_FB20 ((uint32_t)0x00100000) /*!< Filter bit 20 */ +#define CAN_F5R2_FB21 ((uint32_t)0x00200000) /*!< Filter bit 21 */ +#define CAN_F5R2_FB22 ((uint32_t)0x00400000) /*!< Filter bit 22 */ +#define CAN_F5R2_FB23 ((uint32_t)0x00800000) /*!< Filter bit 23 */ +#define CAN_F5R2_FB24 ((uint32_t)0x01000000) /*!< Filter bit 24 */ +#define CAN_F5R2_FB25 ((uint32_t)0x02000000) /*!< Filter bit 25 */ +#define CAN_F5R2_FB26 ((uint32_t)0x04000000) /*!< Filter bit 26 */ +#define CAN_F5R2_FB27 ((uint32_t)0x08000000) /*!< Filter bit 27 */ +#define CAN_F5R2_FB28 ((uint32_t)0x10000000) /*!< Filter bit 28 */ +#define CAN_F5R2_FB29 ((uint32_t)0x20000000) /*!< Filter bit 29 */ +#define CAN_F5R2_FB30 ((uint32_t)0x40000000) /*!< Filter bit 30 */ +#define CAN_F5R2_FB31 ((uint32_t)0x80000000) /*!< Filter bit 31 */ + +/******************* Bit definition for CAN_F6R2 register *******************/ +#define CAN_F6R2_FB0 ((uint32_t)0x00000001) /*!< Filter bit 0 */ +#define CAN_F6R2_FB1 ((uint32_t)0x00000002) /*!< Filter bit 1 */ +#define CAN_F6R2_FB2 ((uint32_t)0x00000004) /*!< Filter bit 2 */ +#define CAN_F6R2_FB3 ((uint32_t)0x00000008) /*!< Filter bit 3 */ +#define CAN_F6R2_FB4 ((uint32_t)0x00000010) /*!< Filter bit 4 */ +#define CAN_F6R2_FB5 ((uint32_t)0x00000020) /*!< Filter bit 5 */ +#define CAN_F6R2_FB6 ((uint32_t)0x00000040) /*!< Filter bit 6 */ +#define CAN_F6R2_FB7 ((uint32_t)0x00000080) /*!< Filter bit 7 */ +#define CAN_F6R2_FB8 ((uint32_t)0x00000100) /*!< Filter bit 8 */ +#define CAN_F6R2_FB9 ((uint32_t)0x00000200) /*!< Filter bit 9 */ +#define CAN_F6R2_FB10 ((uint32_t)0x00000400) /*!< Filter bit 10 */ +#define CAN_F6R2_FB11 ((uint32_t)0x00000800) /*!< Filter bit 11 */ +#define CAN_F6R2_FB12 ((uint32_t)0x00001000) /*!< Filter bit 12 */ +#define CAN_F6R2_FB13 ((uint32_t)0x00002000) /*!< Filter bit 13 */ +#define CAN_F6R2_FB14 ((uint32_t)0x00004000) /*!< Filter bit 14 */ +#define CAN_F6R2_FB15 ((uint32_t)0x00008000) /*!< Filter bit 15 */ +#define CAN_F6R2_FB16 ((uint32_t)0x00010000) /*!< Filter bit 16 */ +#define CAN_F6R2_FB17 ((uint32_t)0x00020000) /*!< Filter bit 17 */ +#define CAN_F6R2_FB18 ((uint32_t)0x00040000) /*!< Filter bit 18 */ +#define CAN_F6R2_FB19 ((uint32_t)0x00080000) /*!< Filter bit 19 */ +#define CAN_F6R2_FB20 ((uint32_t)0x00100000) /*!< Filter bit 20 */ +#define CAN_F6R2_FB21 ((uint32_t)0x00200000) /*!< Filter bit 21 */ +#define CAN_F6R2_FB22 ((uint32_t)0x00400000) /*!< Filter bit 22 */ +#define CAN_F6R2_FB23 ((uint32_t)0x00800000) /*!< Filter bit 23 */ +#define CAN_F6R2_FB24 ((uint32_t)0x01000000) /*!< Filter bit 24 */ +#define CAN_F6R2_FB25 ((uint32_t)0x02000000) /*!< Filter bit 25 */ +#define CAN_F6R2_FB26 ((uint32_t)0x04000000) /*!< Filter bit 26 */ +#define CAN_F6R2_FB27 ((uint32_t)0x08000000) /*!< Filter bit 27 */ +#define CAN_F6R2_FB28 ((uint32_t)0x10000000) /*!< Filter bit 28 */ +#define CAN_F6R2_FB29 ((uint32_t)0x20000000) /*!< Filter bit 29 */ +#define CAN_F6R2_FB30 ((uint32_t)0x40000000) /*!< Filter bit 30 */ +#define CAN_F6R2_FB31 ((uint32_t)0x80000000) /*!< Filter bit 31 */ + +/******************* Bit definition for CAN_F7R2 register *******************/ +#define CAN_F7R2_FB0 ((uint32_t)0x00000001) /*!< Filter bit 0 */ +#define CAN_F7R2_FB1 ((uint32_t)0x00000002) /*!< Filter bit 1 */ +#define CAN_F7R2_FB2 ((uint32_t)0x00000004) /*!< Filter bit 2 */ +#define CAN_F7R2_FB3 ((uint32_t)0x00000008) /*!< Filter bit 3 */ +#define CAN_F7R2_FB4 ((uint32_t)0x00000010) /*!< Filter bit 4 */ +#define CAN_F7R2_FB5 ((uint32_t)0x00000020) /*!< Filter bit 5 */ +#define CAN_F7R2_FB6 ((uint32_t)0x00000040) /*!< Filter bit 6 */ +#define CAN_F7R2_FB7 ((uint32_t)0x00000080) /*!< Filter bit 7 */ +#define CAN_F7R2_FB8 ((uint32_t)0x00000100) /*!< Filter bit 8 */ +#define CAN_F7R2_FB9 ((uint32_t)0x00000200) /*!< Filter bit 9 */ +#define CAN_F7R2_FB10 ((uint32_t)0x00000400) /*!< Filter bit 10 */ +#define CAN_F7R2_FB11 ((uint32_t)0x00000800) /*!< Filter bit 11 */ +#define CAN_F7R2_FB12 ((uint32_t)0x00001000) /*!< Filter bit 12 */ +#define CAN_F7R2_FB13 ((uint32_t)0x00002000) /*!< Filter bit 13 */ +#define CAN_F7R2_FB14 ((uint32_t)0x00004000) /*!< Filter bit 14 */ +#define CAN_F7R2_FB15 ((uint32_t)0x00008000) /*!< Filter bit 15 */ +#define CAN_F7R2_FB16 ((uint32_t)0x00010000) /*!< Filter bit 16 */ +#define CAN_F7R2_FB17 ((uint32_t)0x00020000) /*!< Filter bit 17 */ +#define CAN_F7R2_FB18 ((uint32_t)0x00040000) /*!< Filter bit 18 */ +#define CAN_F7R2_FB19 ((uint32_t)0x00080000) /*!< Filter bit 19 */ +#define CAN_F7R2_FB20 ((uint32_t)0x00100000) /*!< Filter bit 20 */ +#define CAN_F7R2_FB21 ((uint32_t)0x00200000) /*!< Filter bit 21 */ +#define CAN_F7R2_FB22 ((uint32_t)0x00400000) /*!< Filter bit 22 */ +#define CAN_F7R2_FB23 ((uint32_t)0x00800000) /*!< Filter bit 23 */ +#define CAN_F7R2_FB24 ((uint32_t)0x01000000) /*!< Filter bit 24 */ +#define CAN_F7R2_FB25 ((uint32_t)0x02000000) /*!< Filter bit 25 */ +#define CAN_F7R2_FB26 ((uint32_t)0x04000000) /*!< Filter bit 26 */ +#define CAN_F7R2_FB27 ((uint32_t)0x08000000) /*!< Filter bit 27 */ +#define CAN_F7R2_FB28 ((uint32_t)0x10000000) /*!< Filter bit 28 */ +#define CAN_F7R2_FB29 ((uint32_t)0x20000000) /*!< Filter bit 29 */ +#define CAN_F7R2_FB30 ((uint32_t)0x40000000) /*!< Filter bit 30 */ +#define CAN_F7R2_FB31 ((uint32_t)0x80000000) /*!< Filter bit 31 */ + +/******************* Bit definition for CAN_F8R2 register *******************/ +#define CAN_F8R2_FB0 ((uint32_t)0x00000001) /*!< Filter bit 0 */ +#define CAN_F8R2_FB1 ((uint32_t)0x00000002) /*!< Filter bit 1 */ +#define CAN_F8R2_FB2 ((uint32_t)0x00000004) /*!< Filter bit 2 */ +#define CAN_F8R2_FB3 ((uint32_t)0x00000008) /*!< Filter bit 3 */ +#define CAN_F8R2_FB4 ((uint32_t)0x00000010) /*!< Filter bit 4 */ +#define CAN_F8R2_FB5 ((uint32_t)0x00000020) /*!< Filter bit 5 */ +#define CAN_F8R2_FB6 ((uint32_t)0x00000040) /*!< Filter bit 6 */ +#define CAN_F8R2_FB7 ((uint32_t)0x00000080) /*!< Filter bit 7 */ +#define CAN_F8R2_FB8 ((uint32_t)0x00000100) /*!< Filter bit 8 */ +#define CAN_F8R2_FB9 ((uint32_t)0x00000200) /*!< Filter bit 9 */ +#define CAN_F8R2_FB10 ((uint32_t)0x00000400) /*!< Filter bit 10 */ +#define CAN_F8R2_FB11 ((uint32_t)0x00000800) /*!< Filter bit 11 */ +#define CAN_F8R2_FB12 ((uint32_t)0x00001000) /*!< Filter bit 12 */ +#define CAN_F8R2_FB13 ((uint32_t)0x00002000) /*!< Filter bit 13 */ +#define CAN_F8R2_FB14 ((uint32_t)0x00004000) /*!< Filter bit 14 */ +#define CAN_F8R2_FB15 ((uint32_t)0x00008000) /*!< Filter bit 15 */ +#define CAN_F8R2_FB16 ((uint32_t)0x00010000) /*!< Filter bit 16 */ +#define CAN_F8R2_FB17 ((uint32_t)0x00020000) /*!< Filter bit 17 */ +#define CAN_F8R2_FB18 ((uint32_t)0x00040000) /*!< Filter bit 18 */ +#define CAN_F8R2_FB19 ((uint32_t)0x00080000) /*!< Filter bit 19 */ +#define CAN_F8R2_FB20 ((uint32_t)0x00100000) /*!< Filter bit 20 */ +#define CAN_F8R2_FB21 ((uint32_t)0x00200000) /*!< Filter bit 21 */ +#define CAN_F8R2_FB22 ((uint32_t)0x00400000) /*!< Filter bit 22 */ +#define CAN_F8R2_FB23 ((uint32_t)0x00800000) /*!< Filter bit 23 */ +#define CAN_F8R2_FB24 ((uint32_t)0x01000000) /*!< Filter bit 24 */ +#define CAN_F8R2_FB25 ((uint32_t)0x02000000) /*!< Filter bit 25 */ +#define CAN_F8R2_FB26 ((uint32_t)0x04000000) /*!< Filter bit 26 */ +#define CAN_F8R2_FB27 ((uint32_t)0x08000000) /*!< Filter bit 27 */ +#define CAN_F8R2_FB28 ((uint32_t)0x10000000) /*!< Filter bit 28 */ +#define CAN_F8R2_FB29 ((uint32_t)0x20000000) /*!< Filter bit 29 */ +#define CAN_F8R2_FB30 ((uint32_t)0x40000000) /*!< Filter bit 30 */ +#define CAN_F8R2_FB31 ((uint32_t)0x80000000) /*!< Filter bit 31 */ + +/******************* Bit definition for CAN_F9R2 register *******************/ +#define CAN_F9R2_FB0 ((uint32_t)0x00000001) /*!< Filter bit 0 */ +#define CAN_F9R2_FB1 ((uint32_t)0x00000002) /*!< Filter bit 1 */ +#define CAN_F9R2_FB2 ((uint32_t)0x00000004) /*!< Filter bit 2 */ +#define CAN_F9R2_FB3 ((uint32_t)0x00000008) /*!< Filter bit 3 */ +#define CAN_F9R2_FB4 ((uint32_t)0x00000010) /*!< Filter bit 4 */ +#define CAN_F9R2_FB5 ((uint32_t)0x00000020) /*!< Filter bit 5 */ +#define CAN_F9R2_FB6 ((uint32_t)0x00000040) /*!< Filter bit 6 */ +#define CAN_F9R2_FB7 ((uint32_t)0x00000080) /*!< Filter bit 7 */ +#define CAN_F9R2_FB8 ((uint32_t)0x00000100) /*!< Filter bit 8 */ +#define CAN_F9R2_FB9 ((uint32_t)0x00000200) /*!< Filter bit 9 */ +#define CAN_F9R2_FB10 ((uint32_t)0x00000400) /*!< Filter bit 10 */ +#define CAN_F9R2_FB11 ((uint32_t)0x00000800) /*!< Filter bit 11 */ +#define CAN_F9R2_FB12 ((uint32_t)0x00001000) /*!< Filter bit 12 */ +#define CAN_F9R2_FB13 ((uint32_t)0x00002000) /*!< Filter bit 13 */ +#define CAN_F9R2_FB14 ((uint32_t)0x00004000) /*!< Filter bit 14 */ +#define CAN_F9R2_FB15 ((uint32_t)0x00008000) /*!< Filter bit 15 */ +#define CAN_F9R2_FB16 ((uint32_t)0x00010000) /*!< Filter bit 16 */ +#define CAN_F9R2_FB17 ((uint32_t)0x00020000) /*!< Filter bit 17 */ +#define CAN_F9R2_FB18 ((uint32_t)0x00040000) /*!< Filter bit 18 */ +#define CAN_F9R2_FB19 ((uint32_t)0x00080000) /*!< Filter bit 19 */ +#define CAN_F9R2_FB20 ((uint32_t)0x00100000) /*!< Filter bit 20 */ +#define CAN_F9R2_FB21 ((uint32_t)0x00200000) /*!< Filter bit 21 */ +#define CAN_F9R2_FB22 ((uint32_t)0x00400000) /*!< Filter bit 22 */ +#define CAN_F9R2_FB23 ((uint32_t)0x00800000) /*!< Filter bit 23 */ +#define CAN_F9R2_FB24 ((uint32_t)0x01000000) /*!< Filter bit 24 */ +#define CAN_F9R2_FB25 ((uint32_t)0x02000000) /*!< Filter bit 25 */ +#define CAN_F9R2_FB26 ((uint32_t)0x04000000) /*!< Filter bit 26 */ +#define CAN_F9R2_FB27 ((uint32_t)0x08000000) /*!< Filter bit 27 */ +#define CAN_F9R2_FB28 ((uint32_t)0x10000000) /*!< Filter bit 28 */ +#define CAN_F9R2_FB29 ((uint32_t)0x20000000) /*!< Filter bit 29 */ +#define CAN_F9R2_FB30 ((uint32_t)0x40000000) /*!< Filter bit 30 */ +#define CAN_F9R2_FB31 ((uint32_t)0x80000000) /*!< Filter bit 31 */ + +/******************* Bit definition for CAN_F10R2 register ******************/ +#define CAN_F10R2_FB0 ((uint32_t)0x00000001) /*!< Filter bit 0 */ +#define CAN_F10R2_FB1 ((uint32_t)0x00000002) /*!< Filter bit 1 */ +#define CAN_F10R2_FB2 ((uint32_t)0x00000004) /*!< Filter bit 2 */ +#define CAN_F10R2_FB3 ((uint32_t)0x00000008) /*!< Filter bit 3 */ +#define CAN_F10R2_FB4 ((uint32_t)0x00000010) /*!< Filter bit 4 */ +#define CAN_F10R2_FB5 ((uint32_t)0x00000020) /*!< Filter bit 5 */ +#define CAN_F10R2_FB6 ((uint32_t)0x00000040) /*!< Filter bit 6 */ +#define CAN_F10R2_FB7 ((uint32_t)0x00000080) /*!< Filter bit 7 */ +#define CAN_F10R2_FB8 ((uint32_t)0x00000100) /*!< Filter bit 8 */ +#define CAN_F10R2_FB9 ((uint32_t)0x00000200) /*!< Filter bit 9 */ +#define CAN_F10R2_FB10 ((uint32_t)0x00000400) /*!< Filter bit 10 */ +#define CAN_F10R2_FB11 ((uint32_t)0x00000800) /*!< Filter bit 11 */ +#define CAN_F10R2_FB12 ((uint32_t)0x00001000) /*!< Filter bit 12 */ +#define CAN_F10R2_FB13 ((uint32_t)0x00002000) /*!< Filter bit 13 */ +#define CAN_F10R2_FB14 ((uint32_t)0x00004000) /*!< Filter bit 14 */ +#define CAN_F10R2_FB15 ((uint32_t)0x00008000) /*!< Filter bit 15 */ +#define CAN_F10R2_FB16 ((uint32_t)0x00010000) /*!< Filter bit 16 */ +#define CAN_F10R2_FB17 ((uint32_t)0x00020000) /*!< Filter bit 17 */ +#define CAN_F10R2_FB18 ((uint32_t)0x00040000) /*!< Filter bit 18 */ +#define CAN_F10R2_FB19 ((uint32_t)0x00080000) /*!< Filter bit 19 */ +#define CAN_F10R2_FB20 ((uint32_t)0x00100000) /*!< Filter bit 20 */ +#define CAN_F10R2_FB21 ((uint32_t)0x00200000) /*!< Filter bit 21 */ +#define CAN_F10R2_FB22 ((uint32_t)0x00400000) /*!< Filter bit 22 */ +#define CAN_F10R2_FB23 ((uint32_t)0x00800000) /*!< Filter bit 23 */ +#define CAN_F10R2_FB24 ((uint32_t)0x01000000) /*!< Filter bit 24 */ +#define CAN_F10R2_FB25 ((uint32_t)0x02000000) /*!< Filter bit 25 */ +#define CAN_F10R2_FB26 ((uint32_t)0x04000000) /*!< Filter bit 26 */ +#define CAN_F10R2_FB27 ((uint32_t)0x08000000) /*!< Filter bit 27 */ +#define CAN_F10R2_FB28 ((uint32_t)0x10000000) /*!< Filter bit 28 */ +#define CAN_F10R2_FB29 ((uint32_t)0x20000000) /*!< Filter bit 29 */ +#define CAN_F10R2_FB30 ((uint32_t)0x40000000) /*!< Filter bit 30 */ +#define CAN_F10R2_FB31 ((uint32_t)0x80000000) /*!< Filter bit 31 */ + +/******************* Bit definition for CAN_F11R2 register ******************/ +#define CAN_F11R2_FB0 ((uint32_t)0x00000001) /*!< Filter bit 0 */ +#define CAN_F11R2_FB1 ((uint32_t)0x00000002) /*!< Filter bit 1 */ +#define CAN_F11R2_FB2 ((uint32_t)0x00000004) /*!< Filter bit 2 */ +#define CAN_F11R2_FB3 ((uint32_t)0x00000008) /*!< Filter bit 3 */ +#define CAN_F11R2_FB4 ((uint32_t)0x00000010) /*!< Filter bit 4 */ +#define CAN_F11R2_FB5 ((uint32_t)0x00000020) /*!< Filter bit 5 */ +#define CAN_F11R2_FB6 ((uint32_t)0x00000040) /*!< Filter bit 6 */ +#define CAN_F11R2_FB7 ((uint32_t)0x00000080) /*!< Filter bit 7 */ +#define CAN_F11R2_FB8 ((uint32_t)0x00000100) /*!< Filter bit 8 */ +#define CAN_F11R2_FB9 ((uint32_t)0x00000200) /*!< Filter bit 9 */ +#define CAN_F11R2_FB10 ((uint32_t)0x00000400) /*!< Filter bit 10 */ +#define CAN_F11R2_FB11 ((uint32_t)0x00000800) /*!< Filter bit 11 */ +#define CAN_F11R2_FB12 ((uint32_t)0x00001000) /*!< Filter bit 12 */ +#define CAN_F11R2_FB13 ((uint32_t)0x00002000) /*!< Filter bit 13 */ +#define CAN_F11R2_FB14 ((uint32_t)0x00004000) /*!< Filter bit 14 */ +#define CAN_F11R2_FB15 ((uint32_t)0x00008000) /*!< Filter bit 15 */ +#define CAN_F11R2_FB16 ((uint32_t)0x00010000) /*!< Filter bit 16 */ +#define CAN_F11R2_FB17 ((uint32_t)0x00020000) /*!< Filter bit 17 */ +#define CAN_F11R2_FB18 ((uint32_t)0x00040000) /*!< Filter bit 18 */ +#define CAN_F11R2_FB19 ((uint32_t)0x00080000) /*!< Filter bit 19 */ +#define CAN_F11R2_FB20 ((uint32_t)0x00100000) /*!< Filter bit 20 */ +#define CAN_F11R2_FB21 ((uint32_t)0x00200000) /*!< Filter bit 21 */ +#define CAN_F11R2_FB22 ((uint32_t)0x00400000) /*!< Filter bit 22 */ +#define CAN_F11R2_FB23 ((uint32_t)0x00800000) /*!< Filter bit 23 */ +#define CAN_F11R2_FB24 ((uint32_t)0x01000000) /*!< Filter bit 24 */ +#define CAN_F11R2_FB25 ((uint32_t)0x02000000) /*!< Filter bit 25 */ +#define CAN_F11R2_FB26 ((uint32_t)0x04000000) /*!< Filter bit 26 */ +#define CAN_F11R2_FB27 ((uint32_t)0x08000000) /*!< Filter bit 27 */ +#define CAN_F11R2_FB28 ((uint32_t)0x10000000) /*!< Filter bit 28 */ +#define CAN_F11R2_FB29 ((uint32_t)0x20000000) /*!< Filter bit 29 */ +#define CAN_F11R2_FB30 ((uint32_t)0x40000000) /*!< Filter bit 30 */ +#define CAN_F11R2_FB31 ((uint32_t)0x80000000) /*!< Filter bit 31 */ + +/******************* Bit definition for CAN_F12R2 register ******************/ +#define CAN_F12R2_FB0 ((uint32_t)0x00000001) /*!< Filter bit 0 */ +#define CAN_F12R2_FB1 ((uint32_t)0x00000002) /*!< Filter bit 1 */ +#define CAN_F12R2_FB2 ((uint32_t)0x00000004) /*!< Filter bit 2 */ +#define CAN_F12R2_FB3 ((uint32_t)0x00000008) /*!< Filter bit 3 */ +#define CAN_F12R2_FB4 ((uint32_t)0x00000010) /*!< Filter bit 4 */ +#define CAN_F12R2_FB5 ((uint32_t)0x00000020) /*!< Filter bit 5 */ +#define CAN_F12R2_FB6 ((uint32_t)0x00000040) /*!< Filter bit 6 */ +#define CAN_F12R2_FB7 ((uint32_t)0x00000080) /*!< Filter bit 7 */ +#define CAN_F12R2_FB8 ((uint32_t)0x00000100) /*!< Filter bit 8 */ +#define CAN_F12R2_FB9 ((uint32_t)0x00000200) /*!< Filter bit 9 */ +#define CAN_F12R2_FB10 ((uint32_t)0x00000400) /*!< Filter bit 10 */ +#define CAN_F12R2_FB11 ((uint32_t)0x00000800) /*!< Filter bit 11 */ +#define CAN_F12R2_FB12 ((uint32_t)0x00001000) /*!< Filter bit 12 */ +#define CAN_F12R2_FB13 ((uint32_t)0x00002000) /*!< Filter bit 13 */ +#define CAN_F12R2_FB14 ((uint32_t)0x00004000) /*!< Filter bit 14 */ +#define CAN_F12R2_FB15 ((uint32_t)0x00008000) /*!< Filter bit 15 */ +#define CAN_F12R2_FB16 ((uint32_t)0x00010000) /*!< Filter bit 16 */ +#define CAN_F12R2_FB17 ((uint32_t)0x00020000) /*!< Filter bit 17 */ +#define CAN_F12R2_FB18 ((uint32_t)0x00040000) /*!< Filter bit 18 */ +#define CAN_F12R2_FB19 ((uint32_t)0x00080000) /*!< Filter bit 19 */ +#define CAN_F12R2_FB20 ((uint32_t)0x00100000) /*!< Filter bit 20 */ +#define CAN_F12R2_FB21 ((uint32_t)0x00200000) /*!< Filter bit 21 */ +#define CAN_F12R2_FB22 ((uint32_t)0x00400000) /*!< Filter bit 22 */ +#define CAN_F12R2_FB23 ((uint32_t)0x00800000) /*!< Filter bit 23 */ +#define CAN_F12R2_FB24 ((uint32_t)0x01000000) /*!< Filter bit 24 */ +#define CAN_F12R2_FB25 ((uint32_t)0x02000000) /*!< Filter bit 25 */ +#define CAN_F12R2_FB26 ((uint32_t)0x04000000) /*!< Filter bit 26 */ +#define CAN_F12R2_FB27 ((uint32_t)0x08000000) /*!< Filter bit 27 */ +#define CAN_F12R2_FB28 ((uint32_t)0x10000000) /*!< Filter bit 28 */ +#define CAN_F12R2_FB29 ((uint32_t)0x20000000) /*!< Filter bit 29 */ +#define CAN_F12R2_FB30 ((uint32_t)0x40000000) /*!< Filter bit 30 */ +#define CAN_F12R2_FB31 ((uint32_t)0x80000000) /*!< Filter bit 31 */ + +/******************* Bit definition for CAN_F13R2 register ******************/ +#define CAN_F13R2_FB0 ((uint32_t)0x00000001) /*!< Filter bit 0 */ +#define CAN_F13R2_FB1 ((uint32_t)0x00000002) /*!< Filter bit 1 */ +#define CAN_F13R2_FB2 ((uint32_t)0x00000004) /*!< Filter bit 2 */ +#define CAN_F13R2_FB3 ((uint32_t)0x00000008) /*!< Filter bit 3 */ +#define CAN_F13R2_FB4 ((uint32_t)0x00000010) /*!< Filter bit 4 */ +#define CAN_F13R2_FB5 ((uint32_t)0x00000020) /*!< Filter bit 5 */ +#define CAN_F13R2_FB6 ((uint32_t)0x00000040) /*!< Filter bit 6 */ +#define CAN_F13R2_FB7 ((uint32_t)0x00000080) /*!< Filter bit 7 */ +#define CAN_F13R2_FB8 ((uint32_t)0x00000100) /*!< Filter bit 8 */ +#define CAN_F13R2_FB9 ((uint32_t)0x00000200) /*!< Filter bit 9 */ +#define CAN_F13R2_FB10 ((uint32_t)0x00000400) /*!< Filter bit 10 */ +#define CAN_F13R2_FB11 ((uint32_t)0x00000800) /*!< Filter bit 11 */ +#define CAN_F13R2_FB12 ((uint32_t)0x00001000) /*!< Filter bit 12 */ +#define CAN_F13R2_FB13 ((uint32_t)0x00002000) /*!< Filter bit 13 */ +#define CAN_F13R2_FB14 ((uint32_t)0x00004000) /*!< Filter bit 14 */ +#define CAN_F13R2_FB15 ((uint32_t)0x00008000) /*!< Filter bit 15 */ +#define CAN_F13R2_FB16 ((uint32_t)0x00010000) /*!< Filter bit 16 */ +#define CAN_F13R2_FB17 ((uint32_t)0x00020000) /*!< Filter bit 17 */ +#define CAN_F13R2_FB18 ((uint32_t)0x00040000) /*!< Filter bit 18 */ +#define CAN_F13R2_FB19 ((uint32_t)0x00080000) /*!< Filter bit 19 */ +#define CAN_F13R2_FB20 ((uint32_t)0x00100000) /*!< Filter bit 20 */ +#define CAN_F13R2_FB21 ((uint32_t)0x00200000) /*!< Filter bit 21 */ +#define CAN_F13R2_FB22 ((uint32_t)0x00400000) /*!< Filter bit 22 */ +#define CAN_F13R2_FB23 ((uint32_t)0x00800000) /*!< Filter bit 23 */ +#define CAN_F13R2_FB24 ((uint32_t)0x01000000) /*!< Filter bit 24 */ +#define CAN_F13R2_FB25 ((uint32_t)0x02000000) /*!< Filter bit 25 */ +#define CAN_F13R2_FB26 ((uint32_t)0x04000000) /*!< Filter bit 26 */ +#define CAN_F13R2_FB27 ((uint32_t)0x08000000) /*!< Filter bit 27 */ +#define CAN_F13R2_FB28 ((uint32_t)0x10000000) /*!< Filter bit 28 */ +#define CAN_F13R2_FB29 ((uint32_t)0x20000000) /*!< Filter bit 29 */ +#define CAN_F13R2_FB30 ((uint32_t)0x40000000) /*!< Filter bit 30 */ +#define CAN_F13R2_FB31 ((uint32_t)0x80000000) /*!< Filter bit 31 */ + +/******************************************************************************/ +/* */ +/* Serial Peripheral Interface */ +/* */ +/******************************************************************************/ + +/******************* Bit definition for SPI_CR1 register ********************/ +#define SPI_CR1_CPHA ((uint16_t)0x0001) /*!< Clock Phase */ +#define SPI_CR1_CPOL ((uint16_t)0x0002) /*!< Clock Polarity */ +#define SPI_CR1_MSTR ((uint16_t)0x0004) /*!< Master Selection */ + +#define SPI_CR1_BR ((uint16_t)0x0038) /*!< BR[2:0] bits (Baud Rate Control) */ +#define SPI_CR1_BR_0 ((uint16_t)0x0008) /*!< Bit 0 */ +#define SPI_CR1_BR_1 ((uint16_t)0x0010) /*!< Bit 1 */ +#define SPI_CR1_BR_2 ((uint16_t)0x0020) /*!< Bit 2 */ + +#define SPI_CR1_SPE ((uint16_t)0x0040) /*!< SPI Enable */ +#define SPI_CR1_LSBFIRST ((uint16_t)0x0080) /*!< Frame Format */ +#define SPI_CR1_SSI ((uint16_t)0x0100) /*!< Internal slave select */ +#define SPI_CR1_SSM ((uint16_t)0x0200) /*!< Software slave management */ +#define SPI_CR1_RXONLY ((uint16_t)0x0400) /*!< Receive only */ +#define SPI_CR1_DFF ((uint16_t)0x0800) /*!< Data Frame Format */ +#define SPI_CR1_CRCNEXT ((uint16_t)0x1000) /*!< Transmit CRC next */ +#define SPI_CR1_CRCEN ((uint16_t)0x2000) /*!< Hardware CRC calculation enable */ +#define SPI_CR1_BIDIOE ((uint16_t)0x4000) /*!< Output enable in bidirectional mode */ +#define SPI_CR1_BIDIMODE ((uint16_t)0x8000) /*!< Bidirectional data mode enable */ + +/******************* Bit definition for SPI_CR2 register ********************/ +#define SPI_CR2_RXDMAEN ((uint8_t)0x01) /*!< Rx Buffer DMA Enable */ +#define SPI_CR2_TXDMAEN ((uint8_t)0x02) /*!< Tx Buffer DMA Enable */ +#define SPI_CR2_SSOE ((uint8_t)0x04) /*!< SS Output Enable */ +#define SPI_CR2_ERRIE ((uint8_t)0x20) /*!< Error Interrupt Enable */ +#define SPI_CR2_RXNEIE ((uint8_t)0x40) /*!< RX buffer Not Empty Interrupt Enable */ +#define SPI_CR2_TXEIE ((uint8_t)0x80) /*!< Tx buffer Empty Interrupt Enable */ + +/******************** Bit definition for SPI_SR register ********************/ +#define SPI_SR_RXNE ((uint8_t)0x01) /*!< Receive buffer Not Empty */ +#define SPI_SR_TXE ((uint8_t)0x02) /*!< Transmit buffer Empty */ +#define SPI_SR_CHSIDE ((uint8_t)0x04) /*!< Channel side */ +#define SPI_SR_UDR ((uint8_t)0x08) /*!< Underrun flag */ +#define SPI_SR_CRCERR ((uint8_t)0x10) /*!< CRC Error flag */ +#define SPI_SR_MODF ((uint8_t)0x20) /*!< Mode fault */ +#define SPI_SR_OVR ((uint8_t)0x40) /*!< Overrun flag */ +#define SPI_SR_BSY ((uint8_t)0x80) /*!< Busy flag */ + +/******************** Bit definition for SPI_DR register ********************/ +#define SPI_DR_DR ((uint16_t)0xFFFF) /*!< Data Register */ + +/******************* Bit definition for SPI_CRCPR register ******************/ +#define SPI_CRCPR_CRCPOLY ((uint16_t)0xFFFF) /*!< CRC polynomial register */ + +/****************** Bit definition for SPI_RXCRCR register ******************/ +#define SPI_RXCRCR_RXCRC ((uint16_t)0xFFFF) /*!< Rx CRC Register */ + +/****************** Bit definition for SPI_TXCRCR register ******************/ +#define SPI_TXCRCR_TXCRC ((uint16_t)0xFFFF) /*!< Tx CRC Register */ + +/****************** Bit definition for SPI_I2SCFGR register *****************/ +#define SPI_I2SCFGR_CHLEN ((uint16_t)0x0001) /*!< Channel length (number of bits per audio channel) */ + +#define SPI_I2SCFGR_DATLEN ((uint16_t)0x0006) /*!< DATLEN[1:0] bits (Data length to be transferred) */ +#define SPI_I2SCFGR_DATLEN_0 ((uint16_t)0x0002) /*!< Bit 0 */ +#define SPI_I2SCFGR_DATLEN_1 ((uint16_t)0x0004) /*!< Bit 1 */ + +#define SPI_I2SCFGR_CKPOL ((uint16_t)0x0008) /*!< steady state clock polarity */ + +#define SPI_I2SCFGR_I2SSTD ((uint16_t)0x0030) /*!< I2SSTD[1:0] bits (I2S standard selection) */ +#define SPI_I2SCFGR_I2SSTD_0 ((uint16_t)0x0010) /*!< Bit 0 */ +#define SPI_I2SCFGR_I2SSTD_1 ((uint16_t)0x0020) /*!< Bit 1 */ + +#define SPI_I2SCFGR_PCMSYNC ((uint16_t)0x0080) /*!< PCM frame synchronization */ + +#define SPI_I2SCFGR_I2SCFG ((uint16_t)0x0300) /*!< I2SCFG[1:0] bits (I2S configuration mode) */ +#define SPI_I2SCFGR_I2SCFG_0 ((uint16_t)0x0100) /*!< Bit 0 */ +#define SPI_I2SCFGR_I2SCFG_1 ((uint16_t)0x0200) /*!< Bit 1 */ + +#define SPI_I2SCFGR_I2SE ((uint16_t)0x0400) /*!< I2S Enable */ +#define SPI_I2SCFGR_I2SMOD ((uint16_t)0x0800) /*!< I2S mode selection */ + +/****************** Bit definition for SPI_I2SPR register *******************/ +#define SPI_I2SPR_I2SDIV ((uint16_t)0x00FF) /*!< I2S Linear prescaler */ +#define SPI_I2SPR_ODD ((uint16_t)0x0100) /*!< Odd factor for the prescaler */ +#define SPI_I2SPR_MCKOE ((uint16_t)0x0200) /*!< Master Clock Output Enable */ + +/******************************************************************************/ +/* */ +/* Inter-integrated Circuit Interface */ +/* */ +/******************************************************************************/ + +/******************* Bit definition for I2C_CR1 register ********************/ +#define I2C_CR1_PE ((uint16_t)0x0001) /*!< Peripheral Enable */ +#define I2C_CR1_SMBUS ((uint16_t)0x0002) /*!< SMBus Mode */ +#define I2C_CR1_SMBTYPE ((uint16_t)0x0008) /*!< SMBus Type */ +#define I2C_CR1_ENARP ((uint16_t)0x0010) /*!< ARP Enable */ +#define I2C_CR1_ENPEC ((uint16_t)0x0020) /*!< PEC Enable */ +#define I2C_CR1_ENGC ((uint16_t)0x0040) /*!< General Call Enable */ +#define I2C_CR1_NOSTRETCH ((uint16_t)0x0080) /*!< Clock Stretching Disable (Slave mode) */ +#define I2C_CR1_START ((uint16_t)0x0100) /*!< Start Generation */ +#define I2C_CR1_STOP ((uint16_t)0x0200) /*!< Stop Generation */ +#define I2C_CR1_ACK ((uint16_t)0x0400) /*!< Acknowledge Enable */ +#define I2C_CR1_POS ((uint16_t)0x0800) /*!< Acknowledge/PEC Position (for data reception) */ +#define I2C_CR1_PEC ((uint16_t)0x1000) /*!< Packet Error Checking */ +#define I2C_CR1_ALERT ((uint16_t)0x2000) /*!< SMBus Alert */ +#define I2C_CR1_SWRST ((uint16_t)0x8000) /*!< Software Reset */ + +/******************* Bit definition for I2C_CR2 register ********************/ +#define I2C_CR2_FREQ ((uint16_t)0x003F) /*!< FREQ[5:0] bits (Peripheral Clock Frequency) */ +#define I2C_CR2_FREQ_0 ((uint16_t)0x0001) /*!< Bit 0 */ +#define I2C_CR2_FREQ_1 ((uint16_t)0x0002) /*!< Bit 1 */ +#define I2C_CR2_FREQ_2 ((uint16_t)0x0004) /*!< Bit 2 */ +#define I2C_CR2_FREQ_3 ((uint16_t)0x0008) /*!< Bit 3 */ +#define I2C_CR2_FREQ_4 ((uint16_t)0x0010) /*!< Bit 4 */ +#define I2C_CR2_FREQ_5 ((uint16_t)0x0020) /*!< Bit 5 */ + +#define I2C_CR2_ITERREN ((uint16_t)0x0100) /*!< Error Interrupt Enable */ +#define I2C_CR2_ITEVTEN ((uint16_t)0x0200) /*!< Event Interrupt Enable */ +#define I2C_CR2_ITBUFEN ((uint16_t)0x0400) /*!< Buffer Interrupt Enable */ +#define I2C_CR2_DMAEN ((uint16_t)0x0800) /*!< DMA Requests Enable */ +#define I2C_CR2_LAST ((uint16_t)0x1000) /*!< DMA Last Transfer */ + +/******************* Bit definition for I2C_OAR1 register *******************/ +#define I2C_OAR1_ADD1_7 ((uint16_t)0x00FE) /*!< Interface Address */ +#define I2C_OAR1_ADD8_9 ((uint16_t)0x0300) /*!< Interface Address */ + +#define I2C_OAR1_ADD0 ((uint16_t)0x0001) /*!< Bit 0 */ +#define I2C_OAR1_ADD1 ((uint16_t)0x0002) /*!< Bit 1 */ +#define I2C_OAR1_ADD2 ((uint16_t)0x0004) /*!< Bit 2 */ +#define I2C_OAR1_ADD3 ((uint16_t)0x0008) /*!< Bit 3 */ +#define I2C_OAR1_ADD4 ((uint16_t)0x0010) /*!< Bit 4 */ +#define I2C_OAR1_ADD5 ((uint16_t)0x0020) /*!< Bit 5 */ +#define I2C_OAR1_ADD6 ((uint16_t)0x0040) /*!< Bit 6 */ +#define I2C_OAR1_ADD7 ((uint16_t)0x0080) /*!< Bit 7 */ +#define I2C_OAR1_ADD8 ((uint16_t)0x0100) /*!< Bit 8 */ +#define I2C_OAR1_ADD9 ((uint16_t)0x0200) /*!< Bit 9 */ + +#define I2C_OAR1_ADDMODE ((uint16_t)0x8000) /*!< Addressing Mode (Slave mode) */ + +/******************* Bit definition for I2C_OAR2 register *******************/ +#define I2C_OAR2_ENDUAL ((uint8_t)0x01) /*!< Dual addressing mode enable */ +#define I2C_OAR2_ADD2 ((uint8_t)0xFE) /*!< Interface address */ + +/******************** Bit definition for I2C_DR register ********************/ +#define I2C_DR_DR ((uint8_t)0xFF) /*!< 8-bit Data Register */ + +/******************* Bit definition for I2C_SR1 register ********************/ +#define I2C_SR1_SB ((uint16_t)0x0001) /*!< Start Bit (Master mode) */ +#define I2C_SR1_ADDR ((uint16_t)0x0002) /*!< Address sent (master mode)/matched (slave mode) */ +#define I2C_SR1_BTF ((uint16_t)0x0004) /*!< Byte Transfer Finished */ +#define I2C_SR1_ADD10 ((uint16_t)0x0008) /*!< 10-bit header sent (Master mode) */ +#define I2C_SR1_STOPF ((uint16_t)0x0010) /*!< Stop detection (Slave mode) */ +#define I2C_SR1_RXNE ((uint16_t)0x0040) /*!< Data Register not Empty (receivers) */ +#define I2C_SR1_TXE ((uint16_t)0x0080) /*!< Data Register Empty (transmitters) */ +#define I2C_SR1_BERR ((uint16_t)0x0100) /*!< Bus Error */ +#define I2C_SR1_ARLO ((uint16_t)0x0200) /*!< Arbitration Lost (master mode) */ +#define I2C_SR1_AF ((uint16_t)0x0400) /*!< Acknowledge Failure */ +#define I2C_SR1_OVR ((uint16_t)0x0800) /*!< Overrun/Underrun */ +#define I2C_SR1_PECERR ((uint16_t)0x1000) /*!< PEC Error in reception */ +#define I2C_SR1_TIMEOUT ((uint16_t)0x4000) /*!< Timeout or Tlow Error */ +#define I2C_SR1_SMBALERT ((uint16_t)0x8000) /*!< SMBus Alert */ + +/******************* Bit definition for I2C_SR2 register ********************/ +#define I2C_SR2_MSL ((uint16_t)0x0001) /*!< Master/Slave */ +#define I2C_SR2_BUSY ((uint16_t)0x0002) /*!< Bus Busy */ +#define I2C_SR2_TRA ((uint16_t)0x0004) /*!< Transmitter/Receiver */ +#define I2C_SR2_GENCALL ((uint16_t)0x0010) /*!< General Call Address (Slave mode) */ +#define I2C_SR2_SMBDEFAULT ((uint16_t)0x0020) /*!< SMBus Device Default Address (Slave mode) */ +#define I2C_SR2_SMBHOST ((uint16_t)0x0040) /*!< SMBus Host Header (Slave mode) */ +#define I2C_SR2_DUALF ((uint16_t)0x0080) /*!< Dual Flag (Slave mode) */ +#define I2C_SR2_PEC ((uint16_t)0xFF00) /*!< Packet Error Checking Register */ + +/******************* Bit definition for I2C_CCR register ********************/ +#define I2C_CCR_CCR ((uint16_t)0x0FFF) /*!< Clock Control Register in Fast/Standard mode (Master mode) */ +#define I2C_CCR_DUTY ((uint16_t)0x4000) /*!< Fast Mode Duty Cycle */ +#define I2C_CCR_FS ((uint16_t)0x8000) /*!< I2C Master Mode Selection */ + +/****************** Bit definition for I2C_TRISE register *******************/ +#define I2C_TRISE_TRISE ((uint8_t)0x3F) /*!< Maximum Rise Time in Fast/Standard mode (Master mode) */ + +/******************************************************************************/ +/* */ +/* Universal Synchronous Asynchronous Receiver Transmitter */ +/* */ +/******************************************************************************/ + +/******************* Bit definition for USART_SR register *******************/ +#define USART_SR_PE ((uint16_t)0x0001) /*!< Parity Error */ +#define USART_SR_FE ((uint16_t)0x0002) /*!< Framing Error */ +#define USART_SR_NE ((uint16_t)0x0004) /*!< Noise Error Flag */ +#define USART_SR_ORE ((uint16_t)0x0008) /*!< OverRun Error */ +#define USART_SR_IDLE ((uint16_t)0x0010) /*!< IDLE line detected */ +#define USART_SR_RXNE ((uint16_t)0x0020) /*!< Read Data Register Not Empty */ +#define USART_SR_TC ((uint16_t)0x0040) /*!< Transmission Complete */ +#define USART_SR_TXE ((uint16_t)0x0080) /*!< Transmit Data Register Empty */ +#define USART_SR_LBD ((uint16_t)0x0100) /*!< LIN Break Detection Flag */ +#define USART_SR_CTS ((uint16_t)0x0200) /*!< CTS Flag */ + +/******************* Bit definition for USART_DR register *******************/ +#define USART_DR_DR ((uint16_t)0x01FF) /*!< Data value */ + +/****************** Bit definition for USART_BRR register *******************/ +#define USART_BRR_DIV_Fraction ((uint16_t)0x000F) /*!< Fraction of USARTDIV */ +#define USART_BRR_DIV_Mantissa ((uint16_t)0xFFF0) /*!< Mantissa of USARTDIV */ + +/****************** Bit definition for USART_CR1 register *******************/ +#define USART_CR1_SBK ((uint16_t)0x0001) /*!< Send Break */ +#define USART_CR1_RWU ((uint16_t)0x0002) /*!< Receiver wakeup */ +#define USART_CR1_RE ((uint16_t)0x0004) /*!< Receiver Enable */ +#define USART_CR1_TE ((uint16_t)0x0008) /*!< Transmitter Enable */ +#define USART_CR1_IDLEIE ((uint16_t)0x0010) /*!< IDLE Interrupt Enable */ +#define USART_CR1_RXNEIE ((uint16_t)0x0020) /*!< RXNE Interrupt Enable */ +#define USART_CR1_TCIE ((uint16_t)0x0040) /*!< Transmission Complete Interrupt Enable */ +#define USART_CR1_TXEIE ((uint16_t)0x0080) /*!< PE Interrupt Enable */ +#define USART_CR1_PEIE ((uint16_t)0x0100) /*!< PE Interrupt Enable */ +#define USART_CR1_PS ((uint16_t)0x0200) /*!< Parity Selection */ +#define USART_CR1_PCE ((uint16_t)0x0400) /*!< Parity Control Enable */ +#define USART_CR1_WAKE ((uint16_t)0x0800) /*!< Wakeup method */ +#define USART_CR1_M ((uint16_t)0x1000) /*!< Word length */ +#define USART_CR1_UE ((uint16_t)0x2000) /*!< USART Enable */ +#define USART_CR1_OVER8 ((uint16_t)0x8000) /*!< USART Oversmapling 8-bits */ + +/****************** Bit definition for USART_CR2 register *******************/ +#define USART_CR2_ADD ((uint16_t)0x000F) /*!< Address of the USART node */ +#define USART_CR2_LBDL ((uint16_t)0x0020) /*!< LIN Break Detection Length */ +#define USART_CR2_LBDIE ((uint16_t)0x0040) /*!< LIN Break Detection Interrupt Enable */ +#define USART_CR2_LBCL ((uint16_t)0x0100) /*!< Last Bit Clock pulse */ +#define USART_CR2_CPHA ((uint16_t)0x0200) /*!< Clock Phase */ +#define USART_CR2_CPOL ((uint16_t)0x0400) /*!< Clock Polarity */ +#define USART_CR2_CLKEN ((uint16_t)0x0800) /*!< Clock Enable */ + +#define USART_CR2_STOP ((uint16_t)0x3000) /*!< STOP[1:0] bits (STOP bits) */ +#define USART_CR2_STOP_0 ((uint16_t)0x1000) /*!< Bit 0 */ +#define USART_CR2_STOP_1 ((uint16_t)0x2000) /*!< Bit 1 */ + +#define USART_CR2_LINEN ((uint16_t)0x4000) /*!< LIN mode enable */ + +/****************** Bit definition for USART_CR3 register *******************/ +#define USART_CR3_EIE ((uint16_t)0x0001) /*!< Error Interrupt Enable */ +#define USART_CR3_IREN ((uint16_t)0x0002) /*!< IrDA mode Enable */ +#define USART_CR3_IRLP ((uint16_t)0x0004) /*!< IrDA Low-Power */ +#define USART_CR3_HDSEL ((uint16_t)0x0008) /*!< Half-Duplex Selection */ +#define USART_CR3_NACK ((uint16_t)0x0010) /*!< Smartcard NACK enable */ +#define USART_CR3_SCEN ((uint16_t)0x0020) /*!< Smartcard mode enable */ +#define USART_CR3_DMAR ((uint16_t)0x0040) /*!< DMA Enable Receiver */ +#define USART_CR3_DMAT ((uint16_t)0x0080) /*!< DMA Enable Transmitter */ +#define USART_CR3_RTSE ((uint16_t)0x0100) /*!< RTS Enable */ +#define USART_CR3_CTSE ((uint16_t)0x0200) /*!< CTS Enable */ +#define USART_CR3_CTSIE ((uint16_t)0x0400) /*!< CTS Interrupt Enable */ +#define USART_CR3_ONEBIT ((uint16_t)0x0800) /*!< One Bit method */ + +/****************** Bit definition for USART_GTPR register ******************/ +#define USART_GTPR_PSC ((uint16_t)0x00FF) /*!< PSC[7:0] bits (Prescaler value) */ +#define USART_GTPR_PSC_0 ((uint16_t)0x0001) /*!< Bit 0 */ +#define USART_GTPR_PSC_1 ((uint16_t)0x0002) /*!< Bit 1 */ +#define USART_GTPR_PSC_2 ((uint16_t)0x0004) /*!< Bit 2 */ +#define USART_GTPR_PSC_3 ((uint16_t)0x0008) /*!< Bit 3 */ +#define USART_GTPR_PSC_4 ((uint16_t)0x0010) /*!< Bit 4 */ +#define USART_GTPR_PSC_5 ((uint16_t)0x0020) /*!< Bit 5 */ +#define USART_GTPR_PSC_6 ((uint16_t)0x0040) /*!< Bit 6 */ +#define USART_GTPR_PSC_7 ((uint16_t)0x0080) /*!< Bit 7 */ + +#define USART_GTPR_GT ((uint16_t)0xFF00) /*!< Guard time value */ + +/******************************************************************************/ +/* */ +/* Debug MCU */ +/* */ +/******************************************************************************/ + +/**************** Bit definition for DBGMCU_IDCODE register *****************/ +#define DBGMCU_IDCODE_DEV_ID ((uint32_t)0x00000FFF) /*!< Device Identifier */ + +#define DBGMCU_IDCODE_REV_ID ((uint32_t)0xFFFF0000) /*!< REV_ID[15:0] bits (Revision Identifier) */ +#define DBGMCU_IDCODE_REV_ID_0 ((uint32_t)0x00010000) /*!< Bit 0 */ +#define DBGMCU_IDCODE_REV_ID_1 ((uint32_t)0x00020000) /*!< Bit 1 */ +#define DBGMCU_IDCODE_REV_ID_2 ((uint32_t)0x00040000) /*!< Bit 2 */ +#define DBGMCU_IDCODE_REV_ID_3 ((uint32_t)0x00080000) /*!< Bit 3 */ +#define DBGMCU_IDCODE_REV_ID_4 ((uint32_t)0x00100000) /*!< Bit 4 */ +#define DBGMCU_IDCODE_REV_ID_5 ((uint32_t)0x00200000) /*!< Bit 5 */ +#define DBGMCU_IDCODE_REV_ID_6 ((uint32_t)0x00400000) /*!< Bit 6 */ +#define DBGMCU_IDCODE_REV_ID_7 ((uint32_t)0x00800000) /*!< Bit 7 */ +#define DBGMCU_IDCODE_REV_ID_8 ((uint32_t)0x01000000) /*!< Bit 8 */ +#define DBGMCU_IDCODE_REV_ID_9 ((uint32_t)0x02000000) /*!< Bit 9 */ +#define DBGMCU_IDCODE_REV_ID_10 ((uint32_t)0x04000000) /*!< Bit 10 */ +#define DBGMCU_IDCODE_REV_ID_11 ((uint32_t)0x08000000) /*!< Bit 11 */ +#define DBGMCU_IDCODE_REV_ID_12 ((uint32_t)0x10000000) /*!< Bit 12 */ +#define DBGMCU_IDCODE_REV_ID_13 ((uint32_t)0x20000000) /*!< Bit 13 */ +#define DBGMCU_IDCODE_REV_ID_14 ((uint32_t)0x40000000) /*!< Bit 14 */ +#define DBGMCU_IDCODE_REV_ID_15 ((uint32_t)0x80000000) /*!< Bit 15 */ + +/****************** Bit definition for DBGMCU_CR register *******************/ +#define DBGMCU_CR_DBG_SLEEP ((uint32_t)0x00000001) /*!< Debug Sleep Mode */ +#define DBGMCU_CR_DBG_STOP ((uint32_t)0x00000002) /*!< Debug Stop Mode */ +#define DBGMCU_CR_DBG_STANDBY ((uint32_t)0x00000004) /*!< Debug Standby mode */ +#define DBGMCU_CR_TRACE_IOEN ((uint32_t)0x00000020) /*!< Trace Pin Assignment Control */ + +#define DBGMCU_CR_TRACE_MODE ((uint32_t)0x000000C0) /*!< TRACE_MODE[1:0] bits (Trace Pin Assignment Control) */ +#define DBGMCU_CR_TRACE_MODE_0 ((uint32_t)0x00000040) /*!< Bit 0 */ +#define DBGMCU_CR_TRACE_MODE_1 ((uint32_t)0x00000080) /*!< Bit 1 */ + +#define DBGMCU_CR_DBG_IWDG_STOP ((uint32_t)0x00000100) /*!< Debug Independent Watchdog stopped when Core is halted */ +#define DBGMCU_CR_DBG_WWDG_STOP ((uint32_t)0x00000200) /*!< Debug Window Watchdog stopped when Core is halted */ +#define DBGMCU_CR_DBG_TIM1_STOP ((uint32_t)0x00000400) /*!< TIM1 counter stopped when core is halted */ +#define DBGMCU_CR_DBG_TIM2_STOP ((uint32_t)0x00000800) /*!< TIM2 counter stopped when core is halted */ +#define DBGMCU_CR_DBG_TIM3_STOP ((uint32_t)0x00001000) /*!< TIM3 counter stopped when core is halted */ +#define DBGMCU_CR_DBG_TIM4_STOP ((uint32_t)0x00002000) /*!< TIM4 counter stopped when core is halted */ +#define DBGMCU_CR_DBG_CAN1_STOP ((uint32_t)0x00004000) /*!< Debug CAN1 stopped when Core is halted */ +#define DBGMCU_CR_DBG_I2C1_SMBUS_TIMEOUT ((uint32_t)0x00008000) /*!< SMBUS timeout mode stopped when Core is halted */ +#define DBGMCU_CR_DBG_I2C2_SMBUS_TIMEOUT ((uint32_t)0x00010000) /*!< SMBUS timeout mode stopped when Core is halted */ +#define DBGMCU_CR_DBG_TIM8_STOP ((uint32_t)0x00020000) /*!< TIM8 counter stopped when core is halted */ +#define DBGMCU_CR_DBG_TIM5_STOP ((uint32_t)0x00040000) /*!< TIM5 counter stopped when core is halted */ +#define DBGMCU_CR_DBG_TIM6_STOP ((uint32_t)0x00080000) /*!< TIM6 counter stopped when core is halted */ +#define DBGMCU_CR_DBG_TIM7_STOP ((uint32_t)0x00100000) /*!< TIM7 counter stopped when core is halted */ +#define DBGMCU_CR_DBG_CAN2_STOP ((uint32_t)0x00200000) /*!< Debug CAN2 stopped when Core is halted */ +#define DBGMCU_CR_DBG_TIM15_STOP ((uint32_t)0x00400000) /*!< Debug TIM15 stopped when Core is halted */ +#define DBGMCU_CR_DBG_TIM16_STOP ((uint32_t)0x00800000) /*!< Debug TIM16 stopped when Core is halted */ +#define DBGMCU_CR_DBG_TIM17_STOP ((uint32_t)0x01000000) /*!< Debug TIM17 stopped when Core is halted */ +#define DBGMCU_CR_DBG_TIM12_STOP ((uint32_t)0x02000000) /*!< Debug TIM12 stopped when Core is halted */ +#define DBGMCU_CR_DBG_TIM13_STOP ((uint32_t)0x04000000) /*!< Debug TIM13 stopped when Core is halted */ +#define DBGMCU_CR_DBG_TIM14_STOP ((uint32_t)0x08000000) /*!< Debug TIM14 stopped when Core is halted */ +#define DBGMCU_CR_DBG_TIM9_STOP ((uint32_t)0x10000000) /*!< Debug TIM9 stopped when Core is halted */ +#define DBGMCU_CR_DBG_TIM10_STOP ((uint32_t)0x20000000) /*!< Debug TIM10 stopped when Core is halted */ +#define DBGMCU_CR_DBG_TIM11_STOP ((uint32_t)0x40000000) /*!< Debug TIM11 stopped when Core is halted */ + +/******************************************************************************/ +/* */ +/* FLASH and Option Bytes Registers */ +/* */ +/******************************************************************************/ + +/******************* Bit definition for FLASH_ACR register ******************/ +#define FLASH_ACR_LATENCY ((uint8_t)0x03) /*!< LATENCY[2:0] bits (Latency) */ +#define FLASH_ACR_LATENCY_0 ((uint8_t)0x00) /*!< Bit 0 */ +#define FLASH_ACR_LATENCY_1 ((uint8_t)0x01) /*!< Bit 0 */ +#define FLASH_ACR_LATENCY_2 ((uint8_t)0x02) /*!< Bit 1 */ + +#define FLASH_ACR_HLFCYA ((uint8_t)0x08) /*!< Flash Half Cycle Access Enable */ +#define FLASH_ACR_PRFTBE ((uint8_t)0x10) /*!< Prefetch Buffer Enable */ +#define FLASH_ACR_PRFTBS ((uint8_t)0x20) /*!< Prefetch Buffer Status */ + +/****************** Bit definition for FLASH_KEYR register ******************/ +#define FLASH_KEYR_FKEYR ((uint32_t)0xFFFFFFFF) /*!< FPEC Key */ + +/***************** Bit definition for FLASH_OPTKEYR register ****************/ +#define FLASH_OPTKEYR_OPTKEYR ((uint32_t)0xFFFFFFFF) /*!< Option Byte Key */ + +/****************** Bit definition for FLASH_SR register *******************/ +#define FLASH_SR_BSY ((uint8_t)0x01) /*!< Busy */ +#define FLASH_SR_PGERR ((uint8_t)0x04) /*!< Programming Error */ +#define FLASH_SR_WRPRTERR ((uint8_t)0x10) /*!< Write Protection Error */ +#define FLASH_SR_EOP ((uint8_t)0x20) /*!< End of operation */ + +/******************* Bit definition for FLASH_CR register *******************/ +#define FLASH_CR_PG ((uint16_t)0x0001) /*!< Programming */ +#define FLASH_CR_PER ((uint16_t)0x0002) /*!< Page Erase */ +#define FLASH_CR_MER ((uint16_t)0x0004) /*!< Mass Erase */ +#define FLASH_CR_OPTPG ((uint16_t)0x0010) /*!< Option Byte Programming */ +#define FLASH_CR_OPTER ((uint16_t)0x0020) /*!< Option Byte Erase */ +#define FLASH_CR_STRT ((uint16_t)0x0040) /*!< Start */ +#define FLASH_CR_LOCK ((uint16_t)0x0080) /*!< Lock */ +#define FLASH_CR_OPTWRE ((uint16_t)0x0200) /*!< Option Bytes Write Enable */ +#define FLASH_CR_ERRIE ((uint16_t)0x0400) /*!< Error Interrupt Enable */ +#define FLASH_CR_EOPIE ((uint16_t)0x1000) /*!< End of operation interrupt enable */ + +/******************* Bit definition for FLASH_AR register *******************/ +#define FLASH_AR_FAR ((uint32_t)0xFFFFFFFF) /*!< Flash Address */ + +/****************** Bit definition for FLASH_OBR register *******************/ +#define FLASH_OBR_OPTERR ((uint16_t)0x0001) /*!< Option Byte Error */ +#define FLASH_OBR_RDPRT ((uint16_t)0x0002) /*!< Read protection */ + +#define FLASH_OBR_USER ((uint16_t)0x03FC) /*!< User Option Bytes */ +#define FLASH_OBR_WDG_SW ((uint16_t)0x0004) /*!< WDG_SW */ +#define FLASH_OBR_nRST_STOP ((uint16_t)0x0008) /*!< nRST_STOP */ +#define FLASH_OBR_nRST_STDBY ((uint16_t)0x0010) /*!< nRST_STDBY */ +#define FLASH_OBR_BFB2 ((uint16_t)0x0020) /*!< BFB2 */ + +/****************** Bit definition for FLASH_WRPR register ******************/ +#define FLASH_WRPR_WRP ((uint32_t)0xFFFFFFFF) /*!< Write Protect */ + +/*----------------------------------------------------------------------------*/ + +/****************** Bit definition for FLASH_RDP register *******************/ +#define FLASH_RDP_RDP ((uint32_t)0x000000FF) /*!< Read protection option byte */ +#define FLASH_RDP_nRDP ((uint32_t)0x0000FF00) /*!< Read protection complemented option byte */ + +/****************** Bit definition for FLASH_USER register ******************/ +#define FLASH_USER_USER ((uint32_t)0x00FF0000) /*!< User option byte */ +#define FLASH_USER_nUSER ((uint32_t)0xFF000000) /*!< User complemented option byte */ + +/****************** Bit definition for FLASH_Data0 register *****************/ +#define FLASH_Data0_Data0 ((uint32_t)0x000000FF) /*!< User data storage option byte */ +#define FLASH_Data0_nData0 ((uint32_t)0x0000FF00) /*!< User data storage complemented option byte */ + +/****************** Bit definition for FLASH_Data1 register *****************/ +#define FLASH_Data1_Data1 ((uint32_t)0x00FF0000) /*!< User data storage option byte */ +#define FLASH_Data1_nData1 ((uint32_t)0xFF000000) /*!< User data storage complemented option byte */ + +/****************** Bit definition for FLASH_WRP0 register ******************/ +#define FLASH_WRP0_WRP0 ((uint32_t)0x000000FF) /*!< Flash memory write protection option bytes */ +#define FLASH_WRP0_nWRP0 ((uint32_t)0x0000FF00) /*!< Flash memory write protection complemented option bytes */ + +/****************** Bit definition for FLASH_WRP1 register ******************/ +#define FLASH_WRP1_WRP1 ((uint32_t)0x00FF0000) /*!< Flash memory write protection option bytes */ +#define FLASH_WRP1_nWRP1 ((uint32_t)0xFF000000) /*!< Flash memory write protection complemented option bytes */ + +/****************** Bit definition for FLASH_WRP2 register ******************/ +#define FLASH_WRP2_WRP2 ((uint32_t)0x000000FF) /*!< Flash memory write protection option bytes */ +#define FLASH_WRP2_nWRP2 ((uint32_t)0x0000FF00) /*!< Flash memory write protection complemented option bytes */ + +/****************** Bit definition for FLASH_WRP3 register ******************/ +#define FLASH_WRP3_WRP3 ((uint32_t)0x00FF0000) /*!< Flash memory write protection option bytes */ +#define FLASH_WRP3_nWRP3 ((uint32_t)0xFF000000) /*!< Flash memory write protection complemented option bytes */ + +#ifdef STM32F10X_CL +/******************************************************************************/ +/* Ethernet MAC Registers bits definitions */ +/******************************************************************************/ +/* Bit definition for Ethernet MAC Control Register register */ +#define ETH_MACCR_WD ((uint32_t)0x00800000) /* Watchdog disable */ +#define ETH_MACCR_JD ((uint32_t)0x00400000) /* Jabber disable */ +#define ETH_MACCR_IFG ((uint32_t)0x000E0000) /* Inter-frame gap */ + #define ETH_MACCR_IFG_96Bit ((uint32_t)0x00000000) /* Minimum IFG between frames during transmission is 96Bit */ + #define ETH_MACCR_IFG_88Bit ((uint32_t)0x00020000) /* Minimum IFG between frames during transmission is 88Bit */ + #define ETH_MACCR_IFG_80Bit ((uint32_t)0x00040000) /* Minimum IFG between frames during transmission is 80Bit */ + #define ETH_MACCR_IFG_72Bit ((uint32_t)0x00060000) /* Minimum IFG between frames during transmission is 72Bit */ + #define ETH_MACCR_IFG_64Bit ((uint32_t)0x00080000) /* Minimum IFG between frames during transmission is 64Bit */ + #define ETH_MACCR_IFG_56Bit ((uint32_t)0x000A0000) /* Minimum IFG between frames during transmission is 56Bit */ + #define ETH_MACCR_IFG_48Bit ((uint32_t)0x000C0000) /* Minimum IFG between frames during transmission is 48Bit */ + #define ETH_MACCR_IFG_40Bit ((uint32_t)0x000E0000) /* Minimum IFG between frames during transmission is 40Bit */ +#define ETH_MACCR_CSD ((uint32_t)0x00010000) /* Carrier sense disable (during transmission) */ +#define ETH_MACCR_FES ((uint32_t)0x00004000) /* Fast ethernet speed */ +#define ETH_MACCR_ROD ((uint32_t)0x00002000) /* Receive own disable */ +#define ETH_MACCR_LM ((uint32_t)0x00001000) /* loopback mode */ +#define ETH_MACCR_DM ((uint32_t)0x00000800) /* Duplex mode */ +#define ETH_MACCR_IPCO ((uint32_t)0x00000400) /* IP Checksum offload */ +#define ETH_MACCR_RD ((uint32_t)0x00000200) /* Retry disable */ +#define ETH_MACCR_APCS ((uint32_t)0x00000080) /* Automatic Pad/CRC stripping */ +#define ETH_MACCR_BL ((uint32_t)0x00000060) /* Back-off limit: random integer number (r) of slot time delays before rescheduling + a transmission attempt during retries after a collision: 0 =< r <2^k */ + #define ETH_MACCR_BL_10 ((uint32_t)0x00000000) /* k = min (n, 10) */ + #define ETH_MACCR_BL_8 ((uint32_t)0x00000020) /* k = min (n, 8) */ + #define ETH_MACCR_BL_4 ((uint32_t)0x00000040) /* k = min (n, 4) */ + #define ETH_MACCR_BL_1 ((uint32_t)0x00000060) /* k = min (n, 1) */ +#define ETH_MACCR_DC ((uint32_t)0x00000010) /* Defferal check */ +#define ETH_MACCR_TE ((uint32_t)0x00000008) /* Transmitter enable */ +#define ETH_MACCR_RE ((uint32_t)0x00000004) /* Receiver enable */ + +/* Bit definition for Ethernet MAC Frame Filter Register */ +#define ETH_MACFFR_RA ((uint32_t)0x80000000) /* Receive all */ +#define ETH_MACFFR_HPF ((uint32_t)0x00000400) /* Hash or perfect filter */ +#define ETH_MACFFR_SAF ((uint32_t)0x00000200) /* Source address filter enable */ +#define ETH_MACFFR_SAIF ((uint32_t)0x00000100) /* SA inverse filtering */ +#define ETH_MACFFR_PCF ((uint32_t)0x000000C0) /* Pass control frames: 3 cases */ + #define ETH_MACFFR_PCF_BlockAll ((uint32_t)0x00000040) /* MAC filters all control frames from reaching the application */ + #define ETH_MACFFR_PCF_ForwardAll ((uint32_t)0x00000080) /* MAC forwards all control frames to application even if they fail the Address Filter */ + #define ETH_MACFFR_PCF_ForwardPassedAddrFilter ((uint32_t)0x000000C0) /* MAC forwards control frames that pass the Address Filter. */ +#define ETH_MACFFR_BFD ((uint32_t)0x00000020) /* Broadcast frame disable */ +#define ETH_MACFFR_PAM ((uint32_t)0x00000010) /* Pass all mutlicast */ +#define ETH_MACFFR_DAIF ((uint32_t)0x00000008) /* DA Inverse filtering */ +#define ETH_MACFFR_HM ((uint32_t)0x00000004) /* Hash multicast */ +#define ETH_MACFFR_HU ((uint32_t)0x00000002) /* Hash unicast */ +#define ETH_MACFFR_PM ((uint32_t)0x00000001) /* Promiscuous mode */ + +/* Bit definition for Ethernet MAC Hash Table High Register */ +#define ETH_MACHTHR_HTH ((uint32_t)0xFFFFFFFF) /* Hash table high */ + +/* Bit definition for Ethernet MAC Hash Table Low Register */ +#define ETH_MACHTLR_HTL ((uint32_t)0xFFFFFFFF) /* Hash table low */ + +/* Bit definition for Ethernet MAC MII Address Register */ +#define ETH_MACMIIAR_PA ((uint32_t)0x0000F800) /* Physical layer address */ +#define ETH_MACMIIAR_MR ((uint32_t)0x000007C0) /* MII register in the selected PHY */ +#define ETH_MACMIIAR_CR ((uint32_t)0x0000001C) /* CR clock range: 6 cases */ + #define ETH_MACMIIAR_CR_Div42 ((uint32_t)0x00000000) /* HCLK:60-72 MHz; MDC clock= HCLK/42 */ + #define ETH_MACMIIAR_CR_Div16 ((uint32_t)0x00000008) /* HCLK:20-35 MHz; MDC clock= HCLK/16 */ + #define ETH_MACMIIAR_CR_Div26 ((uint32_t)0x0000000C) /* HCLK:35-60 MHz; MDC clock= HCLK/26 */ +#define ETH_MACMIIAR_MW ((uint32_t)0x00000002) /* MII write */ +#define ETH_MACMIIAR_MB ((uint32_t)0x00000001) /* MII busy */ + +/* Bit definition for Ethernet MAC MII Data Register */ +#define ETH_MACMIIDR_MD ((uint32_t)0x0000FFFF) /* MII data: read/write data from/to PHY */ + +/* Bit definition for Ethernet MAC Flow Control Register */ +#define ETH_MACFCR_PT ((uint32_t)0xFFFF0000) /* Pause time */ +#define ETH_MACFCR_ZQPD ((uint32_t)0x00000080) /* Zero-quanta pause disable */ +#define ETH_MACFCR_PLT ((uint32_t)0x00000030) /* Pause low threshold: 4 cases */ + #define ETH_MACFCR_PLT_Minus4 ((uint32_t)0x00000000) /* Pause time minus 4 slot times */ + #define ETH_MACFCR_PLT_Minus28 ((uint32_t)0x00000010) /* Pause time minus 28 slot times */ + #define ETH_MACFCR_PLT_Minus144 ((uint32_t)0x00000020) /* Pause time minus 144 slot times */ + #define ETH_MACFCR_PLT_Minus256 ((uint32_t)0x00000030) /* Pause time minus 256 slot times */ +#define ETH_MACFCR_UPFD ((uint32_t)0x00000008) /* Unicast pause frame detect */ +#define ETH_MACFCR_RFCE ((uint32_t)0x00000004) /* Receive flow control enable */ +#define ETH_MACFCR_TFCE ((uint32_t)0x00000002) /* Transmit flow control enable */ +#define ETH_MACFCR_FCBBPA ((uint32_t)0x00000001) /* Flow control busy/backpressure activate */ + +/* Bit definition for Ethernet MAC VLAN Tag Register */ +#define ETH_MACVLANTR_VLANTC ((uint32_t)0x00010000) /* 12-bit VLAN tag comparison */ +#define ETH_MACVLANTR_VLANTI ((uint32_t)0x0000FFFF) /* VLAN tag identifier (for receive frames) */ + +/* Bit definition for Ethernet MAC Remote Wake-UpFrame Filter Register */ +#define ETH_MACRWUFFR_D ((uint32_t)0xFFFFFFFF) /* Wake-up frame filter register data */ +/* Eight sequential Writes to this address (offset 0x28) will write all Wake-UpFrame Filter Registers. + Eight sequential Reads from this address (offset 0x28) will read all Wake-UpFrame Filter Registers. */ +/* Wake-UpFrame Filter Reg0 : Filter 0 Byte Mask + Wake-UpFrame Filter Reg1 : Filter 1 Byte Mask + Wake-UpFrame Filter Reg2 : Filter 2 Byte Mask + Wake-UpFrame Filter Reg3 : Filter 3 Byte Mask + Wake-UpFrame Filter Reg4 : RSVD - Filter3 Command - RSVD - Filter2 Command - + RSVD - Filter1 Command - RSVD - Filter0 Command + Wake-UpFrame Filter Re5 : Filter3 Offset - Filter2 Offset - Filter1 Offset - Filter0 Offset + Wake-UpFrame Filter Re6 : Filter1 CRC16 - Filter0 CRC16 + Wake-UpFrame Filter Re7 : Filter3 CRC16 - Filter2 CRC16 */ + +/* Bit definition for Ethernet MAC PMT Control and Status Register */ +#define ETH_MACPMTCSR_WFFRPR ((uint32_t)0x80000000) /* Wake-Up Frame Filter Register Pointer Reset */ +#define ETH_MACPMTCSR_GU ((uint32_t)0x00000200) /* Global Unicast */ +#define ETH_MACPMTCSR_WFR ((uint32_t)0x00000040) /* Wake-Up Frame Received */ +#define ETH_MACPMTCSR_MPR ((uint32_t)0x00000020) /* Magic Packet Received */ +#define ETH_MACPMTCSR_WFE ((uint32_t)0x00000004) /* Wake-Up Frame Enable */ +#define ETH_MACPMTCSR_MPE ((uint32_t)0x00000002) /* Magic Packet Enable */ +#define ETH_MACPMTCSR_PD ((uint32_t)0x00000001) /* Power Down */ + +/* Bit definition for Ethernet MAC Status Register */ +#define ETH_MACSR_TSTS ((uint32_t)0x00000200) /* Time stamp trigger status */ +#define ETH_MACSR_MMCTS ((uint32_t)0x00000040) /* MMC transmit status */ +#define ETH_MACSR_MMMCRS ((uint32_t)0x00000020) /* MMC receive status */ +#define ETH_MACSR_MMCS ((uint32_t)0x00000010) /* MMC status */ +#define ETH_MACSR_PMTS ((uint32_t)0x00000008) /* PMT status */ + +/* Bit definition for Ethernet MAC Interrupt Mask Register */ +#define ETH_MACIMR_TSTIM ((uint32_t)0x00000200) /* Time stamp trigger interrupt mask */ +#define ETH_MACIMR_PMTIM ((uint32_t)0x00000008) /* PMT interrupt mask */ + +/* Bit definition for Ethernet MAC Address0 High Register */ +#define ETH_MACA0HR_MACA0H ((uint32_t)0x0000FFFF) /* MAC address0 high */ + +/* Bit definition for Ethernet MAC Address0 Low Register */ +#define ETH_MACA0LR_MACA0L ((uint32_t)0xFFFFFFFF) /* MAC address0 low */ + +/* Bit definition for Ethernet MAC Address1 High Register */ +#define ETH_MACA1HR_AE ((uint32_t)0x80000000) /* Address enable */ +#define ETH_MACA1HR_SA ((uint32_t)0x40000000) /* Source address */ +#define ETH_MACA1HR_MBC ((uint32_t)0x3F000000) /* Mask byte control: bits to mask for comparison of the MAC Address bytes */ + #define ETH_MACA1HR_MBC_HBits15_8 ((uint32_t)0x20000000) /* Mask MAC Address high reg bits [15:8] */ + #define ETH_MACA1HR_MBC_HBits7_0 ((uint32_t)0x10000000) /* Mask MAC Address high reg bits [7:0] */ + #define ETH_MACA1HR_MBC_LBits31_24 ((uint32_t)0x08000000) /* Mask MAC Address low reg bits [31:24] */ + #define ETH_MACA1HR_MBC_LBits23_16 ((uint32_t)0x04000000) /* Mask MAC Address low reg bits [23:16] */ + #define ETH_MACA1HR_MBC_LBits15_8 ((uint32_t)0x02000000) /* Mask MAC Address low reg bits [15:8] */ + #define ETH_MACA1HR_MBC_LBits7_0 ((uint32_t)0x01000000) /* Mask MAC Address low reg bits [7:0] */ +#define ETH_MACA1HR_MACA1H ((uint32_t)0x0000FFFF) /* MAC address1 high */ + +/* Bit definition for Ethernet MAC Address1 Low Register */ +#define ETH_MACA1LR_MACA1L ((uint32_t)0xFFFFFFFF) /* MAC address1 low */ + +/* Bit definition for Ethernet MAC Address2 High Register */ +#define ETH_MACA2HR_AE ((uint32_t)0x80000000) /* Address enable */ +#define ETH_MACA2HR_SA ((uint32_t)0x40000000) /* Source address */ +#define ETH_MACA2HR_MBC ((uint32_t)0x3F000000) /* Mask byte control */ + #define ETH_MACA2HR_MBC_HBits15_8 ((uint32_t)0x20000000) /* Mask MAC Address high reg bits [15:8] */ + #define ETH_MACA2HR_MBC_HBits7_0 ((uint32_t)0x10000000) /* Mask MAC Address high reg bits [7:0] */ + #define ETH_MACA2HR_MBC_LBits31_24 ((uint32_t)0x08000000) /* Mask MAC Address low reg bits [31:24] */ + #define ETH_MACA2HR_MBC_LBits23_16 ((uint32_t)0x04000000) /* Mask MAC Address low reg bits [23:16] */ + #define ETH_MACA2HR_MBC_LBits15_8 ((uint32_t)0x02000000) /* Mask MAC Address low reg bits [15:8] */ + #define ETH_MACA2HR_MBC_LBits7_0 ((uint32_t)0x01000000) /* Mask MAC Address low reg bits [70] */ +#define ETH_MACA2HR_MACA2H ((uint32_t)0x0000FFFF) /* MAC address1 high */ + +/* Bit definition for Ethernet MAC Address2 Low Register */ +#define ETH_MACA2LR_MACA2L ((uint32_t)0xFFFFFFFF) /* MAC address2 low */ + +/* Bit definition for Ethernet MAC Address3 High Register */ +#define ETH_MACA3HR_AE ((uint32_t)0x80000000) /* Address enable */ +#define ETH_MACA3HR_SA ((uint32_t)0x40000000) /* Source address */ +#define ETH_MACA3HR_MBC ((uint32_t)0x3F000000) /* Mask byte control */ + #define ETH_MACA3HR_MBC_HBits15_8 ((uint32_t)0x20000000) /* Mask MAC Address high reg bits [15:8] */ + #define ETH_MACA3HR_MBC_HBits7_0 ((uint32_t)0x10000000) /* Mask MAC Address high reg bits [7:0] */ + #define ETH_MACA3HR_MBC_LBits31_24 ((uint32_t)0x08000000) /* Mask MAC Address low reg bits [31:24] */ + #define ETH_MACA3HR_MBC_LBits23_16 ((uint32_t)0x04000000) /* Mask MAC Address low reg bits [23:16] */ + #define ETH_MACA3HR_MBC_LBits15_8 ((uint32_t)0x02000000) /* Mask MAC Address low reg bits [15:8] */ + #define ETH_MACA3HR_MBC_LBits7_0 ((uint32_t)0x01000000) /* Mask MAC Address low reg bits [70] */ +#define ETH_MACA3HR_MACA3H ((uint32_t)0x0000FFFF) /* MAC address3 high */ + +/* Bit definition for Ethernet MAC Address3 Low Register */ +#define ETH_MACA3LR_MACA3L ((uint32_t)0xFFFFFFFF) /* MAC address3 low */ + +/******************************************************************************/ +/* Ethernet MMC Registers bits definition */ +/******************************************************************************/ + +/* Bit definition for Ethernet MMC Contol Register */ +#define ETH_MMCCR_MCF ((uint32_t)0x00000008) /* MMC Counter Freeze */ +#define ETH_MMCCR_ROR ((uint32_t)0x00000004) /* Reset on Read */ +#define ETH_MMCCR_CSR ((uint32_t)0x00000002) /* Counter Stop Rollover */ +#define ETH_MMCCR_CR ((uint32_t)0x00000001) /* Counters Reset */ + +/* Bit definition for Ethernet MMC Receive Interrupt Register */ +#define ETH_MMCRIR_RGUFS ((uint32_t)0x00020000) /* Set when Rx good unicast frames counter reaches half the maximum value */ +#define ETH_MMCRIR_RFAES ((uint32_t)0x00000040) /* Set when Rx alignment error counter reaches half the maximum value */ +#define ETH_MMCRIR_RFCES ((uint32_t)0x00000020) /* Set when Rx crc error counter reaches half the maximum value */ + +/* Bit definition for Ethernet MMC Transmit Interrupt Register */ +#define ETH_MMCTIR_TGFS ((uint32_t)0x00200000) /* Set when Tx good frame count counter reaches half the maximum value */ +#define ETH_MMCTIR_TGFMSCS ((uint32_t)0x00008000) /* Set when Tx good multi col counter reaches half the maximum value */ +#define ETH_MMCTIR_TGFSCS ((uint32_t)0x00004000) /* Set when Tx good single col counter reaches half the maximum value */ + +/* Bit definition for Ethernet MMC Receive Interrupt Mask Register */ +#define ETH_MMCRIMR_RGUFM ((uint32_t)0x00020000) /* Mask the interrupt when Rx good unicast frames counter reaches half the maximum value */ +#define ETH_MMCRIMR_RFAEM ((uint32_t)0x00000040) /* Mask the interrupt when when Rx alignment error counter reaches half the maximum value */ +#define ETH_MMCRIMR_RFCEM ((uint32_t)0x00000020) /* Mask the interrupt when Rx crc error counter reaches half the maximum value */ + +/* Bit definition for Ethernet MMC Transmit Interrupt Mask Register */ +#define ETH_MMCTIMR_TGFM ((uint32_t)0x00200000) /* Mask the interrupt when Tx good frame count counter reaches half the maximum value */ +#define ETH_MMCTIMR_TGFMSCM ((uint32_t)0x00008000) /* Mask the interrupt when Tx good multi col counter reaches half the maximum value */ +#define ETH_MMCTIMR_TGFSCM ((uint32_t)0x00004000) /* Mask the interrupt when Tx good single col counter reaches half the maximum value */ + +/* Bit definition for Ethernet MMC Transmitted Good Frames after Single Collision Counter Register */ +#define ETH_MMCTGFSCCR_TGFSCC ((uint32_t)0xFFFFFFFF) /* Number of successfully transmitted frames after a single collision in Half-duplex mode. */ + +/* Bit definition for Ethernet MMC Transmitted Good Frames after More than a Single Collision Counter Register */ +#define ETH_MMCTGFMSCCR_TGFMSCC ((uint32_t)0xFFFFFFFF) /* Number of successfully transmitted frames after more than a single collision in Half-duplex mode. */ + +/* Bit definition for Ethernet MMC Transmitted Good Frames Counter Register */ +#define ETH_MMCTGFCR_TGFC ((uint32_t)0xFFFFFFFF) /* Number of good frames transmitted. */ + +/* Bit definition for Ethernet MMC Received Frames with CRC Error Counter Register */ +#define ETH_MMCRFCECR_RFCEC ((uint32_t)0xFFFFFFFF) /* Number of frames received with CRC error. */ + +/* Bit definition for Ethernet MMC Received Frames with Alignement Error Counter Register */ +#define ETH_MMCRFAECR_RFAEC ((uint32_t)0xFFFFFFFF) /* Number of frames received with alignment (dribble) error */ + +/* Bit definition for Ethernet MMC Received Good Unicast Frames Counter Register */ +#define ETH_MMCRGUFCR_RGUFC ((uint32_t)0xFFFFFFFF) /* Number of good unicast frames received. */ + +/******************************************************************************/ +/* Ethernet PTP Registers bits definition */ +/******************************************************************************/ + +/* Bit definition for Ethernet PTP Time Stamp Contol Register */ +#define ETH_PTPTSCR_TSARU ((uint32_t)0x00000020) /* Addend register update */ +#define ETH_PTPTSCR_TSITE ((uint32_t)0x00000010) /* Time stamp interrupt trigger enable */ +#define ETH_PTPTSCR_TSSTU ((uint32_t)0x00000008) /* Time stamp update */ +#define ETH_PTPTSCR_TSSTI ((uint32_t)0x00000004) /* Time stamp initialize */ +#define ETH_PTPTSCR_TSFCU ((uint32_t)0x00000002) /* Time stamp fine or coarse update */ +#define ETH_PTPTSCR_TSE ((uint32_t)0x00000001) /* Time stamp enable */ + +/* Bit definition for Ethernet PTP Sub-Second Increment Register */ +#define ETH_PTPSSIR_STSSI ((uint32_t)0x000000FF) /* System time Sub-second increment value */ + +/* Bit definition for Ethernet PTP Time Stamp High Register */ +#define ETH_PTPTSHR_STS ((uint32_t)0xFFFFFFFF) /* System Time second */ + +/* Bit definition for Ethernet PTP Time Stamp Low Register */ +#define ETH_PTPTSLR_STPNS ((uint32_t)0x80000000) /* System Time Positive or negative time */ +#define ETH_PTPTSLR_STSS ((uint32_t)0x7FFFFFFF) /* System Time sub-seconds */ + +/* Bit definition for Ethernet PTP Time Stamp High Update Register */ +#define ETH_PTPTSHUR_TSUS ((uint32_t)0xFFFFFFFF) /* Time stamp update seconds */ + +/* Bit definition for Ethernet PTP Time Stamp Low Update Register */ +#define ETH_PTPTSLUR_TSUPNS ((uint32_t)0x80000000) /* Time stamp update Positive or negative time */ +#define ETH_PTPTSLUR_TSUSS ((uint32_t)0x7FFFFFFF) /* Time stamp update sub-seconds */ + +/* Bit definition for Ethernet PTP Time Stamp Addend Register */ +#define ETH_PTPTSAR_TSA ((uint32_t)0xFFFFFFFF) /* Time stamp addend */ + +/* Bit definition for Ethernet PTP Target Time High Register */ +#define ETH_PTPTTHR_TTSH ((uint32_t)0xFFFFFFFF) /* Target time stamp high */ + +/* Bit definition for Ethernet PTP Target Time Low Register */ +#define ETH_PTPTTLR_TTSL ((uint32_t)0xFFFFFFFF) /* Target time stamp low */ + +/******************************************************************************/ +/* Ethernet DMA Registers bits definition */ +/******************************************************************************/ + +/* Bit definition for Ethernet DMA Bus Mode Register */ +#define ETH_DMABMR_AAB ((uint32_t)0x02000000) /* Address-Aligned beats */ +#define ETH_DMABMR_FPM ((uint32_t)0x01000000) /* 4xPBL mode */ +#define ETH_DMABMR_USP ((uint32_t)0x00800000) /* Use separate PBL */ +#define ETH_DMABMR_RDP ((uint32_t)0x007E0000) /* RxDMA PBL */ + #define ETH_DMABMR_RDP_1Beat ((uint32_t)0x00020000) /* maximum number of beats to be transferred in one RxDMA transaction is 1 */ + #define ETH_DMABMR_RDP_2Beat ((uint32_t)0x00040000) /* maximum number of beats to be transferred in one RxDMA transaction is 2 */ + #define ETH_DMABMR_RDP_4Beat ((uint32_t)0x00080000) /* maximum number of beats to be transferred in one RxDMA transaction is 4 */ + #define ETH_DMABMR_RDP_8Beat ((uint32_t)0x00100000) /* maximum number of beats to be transferred in one RxDMA transaction is 8 */ + #define ETH_DMABMR_RDP_16Beat ((uint32_t)0x00200000) /* maximum number of beats to be transferred in one RxDMA transaction is 16 */ + #define ETH_DMABMR_RDP_32Beat ((uint32_t)0x00400000) /* maximum number of beats to be transferred in one RxDMA transaction is 32 */ + #define ETH_DMABMR_RDP_4xPBL_4Beat ((uint32_t)0x01020000) /* maximum number of beats to be transferred in one RxDMA transaction is 4 */ + #define ETH_DMABMR_RDP_4xPBL_8Beat ((uint32_t)0x01040000) /* maximum number of beats to be transferred in one RxDMA transaction is 8 */ + #define ETH_DMABMR_RDP_4xPBL_16Beat ((uint32_t)0x01080000) /* maximum number of beats to be transferred in one RxDMA transaction is 16 */ + #define ETH_DMABMR_RDP_4xPBL_32Beat ((uint32_t)0x01100000) /* maximum number of beats to be transferred in one RxDMA transaction is 32 */ + #define ETH_DMABMR_RDP_4xPBL_64Beat ((uint32_t)0x01200000) /* maximum number of beats to be transferred in one RxDMA transaction is 64 */ + #define ETH_DMABMR_RDP_4xPBL_128Beat ((uint32_t)0x01400000) /* maximum number of beats to be transferred in one RxDMA transaction is 128 */ +#define ETH_DMABMR_FB ((uint32_t)0x00010000) /* Fixed Burst */ +#define ETH_DMABMR_RTPR ((uint32_t)0x0000C000) /* Rx Tx priority ratio */ + #define ETH_DMABMR_RTPR_1_1 ((uint32_t)0x00000000) /* Rx Tx priority ratio */ + #define ETH_DMABMR_RTPR_2_1 ((uint32_t)0x00004000) /* Rx Tx priority ratio */ + #define ETH_DMABMR_RTPR_3_1 ((uint32_t)0x00008000) /* Rx Tx priority ratio */ + #define ETH_DMABMR_RTPR_4_1 ((uint32_t)0x0000C000) /* Rx Tx priority ratio */ +#define ETH_DMABMR_PBL ((uint32_t)0x00003F00) /* Programmable burst length */ + #define ETH_DMABMR_PBL_1Beat ((uint32_t)0x00000100) /* maximum number of beats to be transferred in one TxDMA (or both) transaction is 1 */ + #define ETH_DMABMR_PBL_2Beat ((uint32_t)0x00000200) /* maximum number of beats to be transferred in one TxDMA (or both) transaction is 2 */ + #define ETH_DMABMR_PBL_4Beat ((uint32_t)0x00000400) /* maximum number of beats to be transferred in one TxDMA (or both) transaction is 4 */ + #define ETH_DMABMR_PBL_8Beat ((uint32_t)0x00000800) /* maximum number of beats to be transferred in one TxDMA (or both) transaction is 8 */ + #define ETH_DMABMR_PBL_16Beat ((uint32_t)0x00001000) /* maximum number of beats to be transferred in one TxDMA (or both) transaction is 16 */ + #define ETH_DMABMR_PBL_32Beat ((uint32_t)0x00002000) /* maximum number of beats to be transferred in one TxDMA (or both) transaction is 32 */ + #define ETH_DMABMR_PBL_4xPBL_4Beat ((uint32_t)0x01000100) /* maximum number of beats to be transferred in one TxDMA (or both) transaction is 4 */ + #define ETH_DMABMR_PBL_4xPBL_8Beat ((uint32_t)0x01000200) /* maximum number of beats to be transferred in one TxDMA (or both) transaction is 8 */ + #define ETH_DMABMR_PBL_4xPBL_16Beat ((uint32_t)0x01000400) /* maximum number of beats to be transferred in one TxDMA (or both) transaction is 16 */ + #define ETH_DMABMR_PBL_4xPBL_32Beat ((uint32_t)0x01000800) /* maximum number of beats to be transferred in one TxDMA (or both) transaction is 32 */ + #define ETH_DMABMR_PBL_4xPBL_64Beat ((uint32_t)0x01001000) /* maximum number of beats to be transferred in one TxDMA (or both) transaction is 64 */ + #define ETH_DMABMR_PBL_4xPBL_128Beat ((uint32_t)0x01002000) /* maximum number of beats to be transferred in one TxDMA (or both) transaction is 128 */ +#define ETH_DMABMR_DSL ((uint32_t)0x0000007C) /* Descriptor Skip Length */ +#define ETH_DMABMR_DA ((uint32_t)0x00000002) /* DMA arbitration scheme */ +#define ETH_DMABMR_SR ((uint32_t)0x00000001) /* Software reset */ + +/* Bit definition for Ethernet DMA Transmit Poll Demand Register */ +#define ETH_DMATPDR_TPD ((uint32_t)0xFFFFFFFF) /* Transmit poll demand */ + +/* Bit definition for Ethernet DMA Receive Poll Demand Register */ +#define ETH_DMARPDR_RPD ((uint32_t)0xFFFFFFFF) /* Receive poll demand */ + +/* Bit definition for Ethernet DMA Receive Descriptor List Address Register */ +#define ETH_DMARDLAR_SRL ((uint32_t)0xFFFFFFFF) /* Start of receive list */ + +/* Bit definition for Ethernet DMA Transmit Descriptor List Address Register */ +#define ETH_DMATDLAR_STL ((uint32_t)0xFFFFFFFF) /* Start of transmit list */ + +/* Bit definition for Ethernet DMA Status Register */ +#define ETH_DMASR_TSTS ((uint32_t)0x20000000) /* Time-stamp trigger status */ +#define ETH_DMASR_PMTS ((uint32_t)0x10000000) /* PMT status */ +#define ETH_DMASR_MMCS ((uint32_t)0x08000000) /* MMC status */ +#define ETH_DMASR_EBS ((uint32_t)0x03800000) /* Error bits status */ + /* combination with EBS[2:0] for GetFlagStatus function */ + #define ETH_DMASR_EBS_DescAccess ((uint32_t)0x02000000) /* Error bits 0-data buffer, 1-desc. access */ + #define ETH_DMASR_EBS_ReadTransf ((uint32_t)0x01000000) /* Error bits 0-write trnsf, 1-read transfr */ + #define ETH_DMASR_EBS_DataTransfTx ((uint32_t)0x00800000) /* Error bits 0-Rx DMA, 1-Tx DMA */ +#define ETH_DMASR_TPS ((uint32_t)0x00700000) /* Transmit process state */ + #define ETH_DMASR_TPS_Stopped ((uint32_t)0x00000000) /* Stopped - Reset or Stop Tx Command issued */ + #define ETH_DMASR_TPS_Fetching ((uint32_t)0x00100000) /* Running - fetching the Tx descriptor */ + #define ETH_DMASR_TPS_Waiting ((uint32_t)0x00200000) /* Running - waiting for status */ + #define ETH_DMASR_TPS_Reading ((uint32_t)0x00300000) /* Running - reading the data from host memory */ + #define ETH_DMASR_TPS_Suspended ((uint32_t)0x00600000) /* Suspended - Tx Descriptor unavailabe */ + #define ETH_DMASR_TPS_Closing ((uint32_t)0x00700000) /* Running - closing Rx descriptor */ +#define ETH_DMASR_RPS ((uint32_t)0x000E0000) /* Receive process state */ + #define ETH_DMASR_RPS_Stopped ((uint32_t)0x00000000) /* Stopped - Reset or Stop Rx Command issued */ + #define ETH_DMASR_RPS_Fetching ((uint32_t)0x00020000) /* Running - fetching the Rx descriptor */ + #define ETH_DMASR_RPS_Waiting ((uint32_t)0x00060000) /* Running - waiting for packet */ + #define ETH_DMASR_RPS_Suspended ((uint32_t)0x00080000) /* Suspended - Rx Descriptor unavailable */ + #define ETH_DMASR_RPS_Closing ((uint32_t)0x000A0000) /* Running - closing descriptor */ + #define ETH_DMASR_RPS_Queuing ((uint32_t)0x000E0000) /* Running - queuing the recieve frame into host memory */ +#define ETH_DMASR_NIS ((uint32_t)0x00010000) /* Normal interrupt summary */ +#define ETH_DMASR_AIS ((uint32_t)0x00008000) /* Abnormal interrupt summary */ +#define ETH_DMASR_ERS ((uint32_t)0x00004000) /* Early receive status */ +#define ETH_DMASR_FBES ((uint32_t)0x00002000) /* Fatal bus error status */ +#define ETH_DMASR_ETS ((uint32_t)0x00000400) /* Early transmit status */ +#define ETH_DMASR_RWTS ((uint32_t)0x00000200) /* Receive watchdog timeout status */ +#define ETH_DMASR_RPSS ((uint32_t)0x00000100) /* Receive process stopped status */ +#define ETH_DMASR_RBUS ((uint32_t)0x00000080) /* Receive buffer unavailable status */ +#define ETH_DMASR_RS ((uint32_t)0x00000040) /* Receive status */ +#define ETH_DMASR_TUS ((uint32_t)0x00000020) /* Transmit underflow status */ +#define ETH_DMASR_ROS ((uint32_t)0x00000010) /* Receive overflow status */ +#define ETH_DMASR_TJTS ((uint32_t)0x00000008) /* Transmit jabber timeout status */ +#define ETH_DMASR_TBUS ((uint32_t)0x00000004) /* Transmit buffer unavailable status */ +#define ETH_DMASR_TPSS ((uint32_t)0x00000002) /* Transmit process stopped status */ +#define ETH_DMASR_TS ((uint32_t)0x00000001) /* Transmit status */ + +/* Bit definition for Ethernet DMA Operation Mode Register */ +#define ETH_DMAOMR_DTCEFD ((uint32_t)0x04000000) /* Disable Dropping of TCP/IP checksum error frames */ +#define ETH_DMAOMR_RSF ((uint32_t)0x02000000) /* Receive store and forward */ +#define ETH_DMAOMR_DFRF ((uint32_t)0x01000000) /* Disable flushing of received frames */ +#define ETH_DMAOMR_TSF ((uint32_t)0x00200000) /* Transmit store and forward */ +#define ETH_DMAOMR_FTF ((uint32_t)0x00100000) /* Flush transmit FIFO */ +#define ETH_DMAOMR_TTC ((uint32_t)0x0001C000) /* Transmit threshold control */ + #define ETH_DMAOMR_TTC_64Bytes ((uint32_t)0x00000000) /* threshold level of the MTL Transmit FIFO is 64 Bytes */ + #define ETH_DMAOMR_TTC_128Bytes ((uint32_t)0x00004000) /* threshold level of the MTL Transmit FIFO is 128 Bytes */ + #define ETH_DMAOMR_TTC_192Bytes ((uint32_t)0x00008000) /* threshold level of the MTL Transmit FIFO is 192 Bytes */ + #define ETH_DMAOMR_TTC_256Bytes ((uint32_t)0x0000C000) /* threshold level of the MTL Transmit FIFO is 256 Bytes */ + #define ETH_DMAOMR_TTC_40Bytes ((uint32_t)0x00010000) /* threshold level of the MTL Transmit FIFO is 40 Bytes */ + #define ETH_DMAOMR_TTC_32Bytes ((uint32_t)0x00014000) /* threshold level of the MTL Transmit FIFO is 32 Bytes */ + #define ETH_DMAOMR_TTC_24Bytes ((uint32_t)0x00018000) /* threshold level of the MTL Transmit FIFO is 24 Bytes */ + #define ETH_DMAOMR_TTC_16Bytes ((uint32_t)0x0001C000) /* threshold level of the MTL Transmit FIFO is 16 Bytes */ +#define ETH_DMAOMR_ST ((uint32_t)0x00002000) /* Start/stop transmission command */ +#define ETH_DMAOMR_FEF ((uint32_t)0x00000080) /* Forward error frames */ +#define ETH_DMAOMR_FUGF ((uint32_t)0x00000040) /* Forward undersized good frames */ +#define ETH_DMAOMR_RTC ((uint32_t)0x00000018) /* receive threshold control */ + #define ETH_DMAOMR_RTC_64Bytes ((uint32_t)0x00000000) /* threshold level of the MTL Receive FIFO is 64 Bytes */ + #define ETH_DMAOMR_RTC_32Bytes ((uint32_t)0x00000008) /* threshold level of the MTL Receive FIFO is 32 Bytes */ + #define ETH_DMAOMR_RTC_96Bytes ((uint32_t)0x00000010) /* threshold level of the MTL Receive FIFO is 96 Bytes */ + #define ETH_DMAOMR_RTC_128Bytes ((uint32_t)0x00000018) /* threshold level of the MTL Receive FIFO is 128 Bytes */ +#define ETH_DMAOMR_OSF ((uint32_t)0x00000004) /* operate on second frame */ +#define ETH_DMAOMR_SR ((uint32_t)0x00000002) /* Start/stop receive */ + +/* Bit definition for Ethernet DMA Interrupt Enable Register */ +#define ETH_DMAIER_NISE ((uint32_t)0x00010000) /* Normal interrupt summary enable */ +#define ETH_DMAIER_AISE ((uint32_t)0x00008000) /* Abnormal interrupt summary enable */ +#define ETH_DMAIER_ERIE ((uint32_t)0x00004000) /* Early receive interrupt enable */ +#define ETH_DMAIER_FBEIE ((uint32_t)0x00002000) /* Fatal bus error interrupt enable */ +#define ETH_DMAIER_ETIE ((uint32_t)0x00000400) /* Early transmit interrupt enable */ +#define ETH_DMAIER_RWTIE ((uint32_t)0x00000200) /* Receive watchdog timeout interrupt enable */ +#define ETH_DMAIER_RPSIE ((uint32_t)0x00000100) /* Receive process stopped interrupt enable */ +#define ETH_DMAIER_RBUIE ((uint32_t)0x00000080) /* Receive buffer unavailable interrupt enable */ +#define ETH_DMAIER_RIE ((uint32_t)0x00000040) /* Receive interrupt enable */ +#define ETH_DMAIER_TUIE ((uint32_t)0x00000020) /* Transmit Underflow interrupt enable */ +#define ETH_DMAIER_ROIE ((uint32_t)0x00000010) /* Receive Overflow interrupt enable */ +#define ETH_DMAIER_TJTIE ((uint32_t)0x00000008) /* Transmit jabber timeout interrupt enable */ +#define ETH_DMAIER_TBUIE ((uint32_t)0x00000004) /* Transmit buffer unavailable interrupt enable */ +#define ETH_DMAIER_TPSIE ((uint32_t)0x00000002) /* Transmit process stopped interrupt enable */ +#define ETH_DMAIER_TIE ((uint32_t)0x00000001) /* Transmit interrupt enable */ + +/* Bit definition for Ethernet DMA Missed Frame and Buffer Overflow Counter Register */ +#define ETH_DMAMFBOCR_OFOC ((uint32_t)0x10000000) /* Overflow bit for FIFO overflow counter */ +#define ETH_DMAMFBOCR_MFA ((uint32_t)0x0FFE0000) /* Number of frames missed by the application */ +#define ETH_DMAMFBOCR_OMFC ((uint32_t)0x00010000) /* Overflow bit for missed frame counter */ +#define ETH_DMAMFBOCR_MFC ((uint32_t)0x0000FFFF) /* Number of frames missed by the controller */ + +/* Bit definition for Ethernet DMA Current Host Transmit Descriptor Register */ +#define ETH_DMACHTDR_HTDAP ((uint32_t)0xFFFFFFFF) /* Host transmit descriptor address pointer */ + +/* Bit definition for Ethernet DMA Current Host Receive Descriptor Register */ +#define ETH_DMACHRDR_HRDAP ((uint32_t)0xFFFFFFFF) /* Host receive descriptor address pointer */ + +/* Bit definition for Ethernet DMA Current Host Transmit Buffer Address Register */ +#define ETH_DMACHTBAR_HTBAP ((uint32_t)0xFFFFFFFF) /* Host transmit buffer address pointer */ + +/* Bit definition for Ethernet DMA Current Host Receive Buffer Address Register */ +#define ETH_DMACHRBAR_HRBAP ((uint32_t)0xFFFFFFFF) /* Host receive buffer address pointer */ +#endif /* STM32F10X_CL */ + +/** + * @} + */ + + /** + * @} + */ + +#ifdef USE_STDPERIPH_DRIVER + #include "stm32f10x_conf.h" +#endif + +/** @addtogroup Exported_macro + * @{ + */ + +#define SET_BIT(REG, BIT) ((REG) |= (BIT)) + +#define CLEAR_BIT(REG, BIT) ((REG) &= ~(BIT)) + +#define READ_BIT(REG, BIT) ((REG) & (BIT)) + +#define CLEAR_REG(REG) ((REG) = (0x0)) + +#define WRITE_REG(REG, VAL) ((REG) = (VAL)) + +#define READ_REG(REG) ((REG)) + +#define MODIFY_REG(REG, CLEARMASK, SETMASK) WRITE_REG((REG), (((READ_REG(REG)) & (~(CLEARMASK))) | (SETMASK))) + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F10x_H */ + +/** + * @} + */ + + /** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/system_stm32f10x.c b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/system_stm32f10x.c new file mode 100644 index 0000000..71efc85 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/system_stm32f10x.c @@ -0,0 +1,1094 @@ +/** + ****************************************************************************** + * @file system_stm32f10x.c + * @author MCD Application Team + * @version V3.5.0 + * @date 11-March-2011 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * factors, AHB/APBx prescalers and Flash settings). + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f10x_xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (8 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f10x_xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 8 MHz (or 25 MHz, depedning on + * the product used), refer to "HSE_VALUE" define in "stm32f10x.h" file. + * When HSE is used as system clock source, directly or through PLL, and you + * are using different crystal you have to adapt the HSE value to your own + * configuration. + * + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, 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

+ ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f10x_system + * @{ + */ + +/** @addtogroup STM32F10x_System_Private_Includes + * @{ + */ + +#include "stm32f10x.h" + +/** + * @} + */ + +/** @addtogroup STM32F10x_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F10x_System_Private_Defines + * @{ + */ + +/*!< Uncomment the line corresponding to the desired System clock (SYSCLK) + frequency (after reset the HSI is used as SYSCLK source) + + IMPORTANT NOTE: + ============== + 1. After each device reset the HSI is used as System clock source. + + 2. Please make sure that the selected System clock doesn't exceed your device's + maximum frequency. + + 3. If none of the define below is enabled, the HSI is used as System clock + source. + + 4. The System clock configuration functions provided within this file assume that: + - For Low, Medium and High density Value line devices an external 8MHz + crystal is used to drive the System clock. + - For Low, Medium and High density devices an external 8MHz crystal is + used to drive the System clock. + - For Connectivity line devices an external 25MHz crystal is used to drive + the System clock. + If you are using different crystal you have to adapt those functions accordingly. + */ + +#if defined (STM32F10X_LD_VL) || (defined STM32F10X_MD_VL) || (defined STM32F10X_HD_VL) +/* #define SYSCLK_FREQ_HSE HSE_VALUE */ + #define SYSCLK_FREQ_24MHz 24000000 +#else +/* #define SYSCLK_FREQ_HSE HSE_VALUE */ +/* #define SYSCLK_FREQ_24MHz 24000000 */ +/* #define SYSCLK_FREQ_36MHz 36000000 */ +/* #define SYSCLK_FREQ_48MHz 48000000 */ +/* #define SYSCLK_FREQ_56MHz 56000000 */ +#define SYSCLK_FREQ_72MHz 72000000 +#endif + +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM3210E-EVAL board (STM32 High density and XL-density devices) or on + STM32100E-EVAL board (STM32 High-density value line devices) as data memory */ +#if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL) +/* #define DATA_IN_ExtSRAM */ +#endif + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x0 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +/** + * @} + */ + +/** @addtogroup STM32F10x_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F10x_System_Private_Variables + * @{ + */ + +/******************************************************************************* +* Clock Definitions +*******************************************************************************/ +#ifdef SYSCLK_FREQ_HSE + uint32_t SystemCoreClock = SYSCLK_FREQ_HSE; /*!< System Clock Frequency (Core Clock) */ +#elif defined SYSCLK_FREQ_24MHz + uint32_t SystemCoreClock = SYSCLK_FREQ_24MHz; /*!< System Clock Frequency (Core Clock) */ +#elif defined SYSCLK_FREQ_36MHz + uint32_t SystemCoreClock = SYSCLK_FREQ_36MHz; /*!< System Clock Frequency (Core Clock) */ +#elif defined SYSCLK_FREQ_48MHz + uint32_t SystemCoreClock = SYSCLK_FREQ_48MHz; /*!< System Clock Frequency (Core Clock) */ +#elif defined SYSCLK_FREQ_56MHz + uint32_t SystemCoreClock = SYSCLK_FREQ_56MHz; /*!< System Clock Frequency (Core Clock) */ +#elif defined SYSCLK_FREQ_72MHz + uint32_t SystemCoreClock = SYSCLK_FREQ_72MHz; /*!< System Clock Frequency (Core Clock) */ +#else /*!< HSI Selected as System Clock source */ + uint32_t SystemCoreClock = HSI_VALUE; /*!< System Clock Frequency (Core Clock) */ +#endif + +__I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; +/** + * @} + */ + +/** @addtogroup STM32F10x_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); + +#ifdef SYSCLK_FREQ_HSE + static void SetSysClockToHSE(void); +#elif defined SYSCLK_FREQ_24MHz + static void SetSysClockTo24(void); +#elif defined SYSCLK_FREQ_36MHz + static void SetSysClockTo36(void); +#elif defined SYSCLK_FREQ_48MHz + static void SetSysClockTo48(void); +#elif defined SYSCLK_FREQ_56MHz + static void SetSysClockTo56(void); +#elif defined SYSCLK_FREQ_72MHz + static void SetSysClockTo72(void); +#endif + +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F10x_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemCoreClock variable. + * @note This function should be used only after reset. + * @param None + * @retval None + */ +void SystemInit (void) +{ + /* Reset the RCC clock configuration to the default reset state(for debug purpose) */ + /* Set HSION bit */ + RCC->CR |= (uint32_t)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 */ + +#if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL) + #ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); + #endif /* DATA_IN_ExtSRAM */ +#endif + + /* Configure the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers */ + /* Configure the Flash Latency cycles and enable prefetch buffer */ + SetSysClock(); + +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f1xx.h file (default value + * 8 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f1xx.h file (default value + * 8 MHz or 25 MHz, depedning on the product used), user has to ensure + * that HSE_VALUE is same as the real frequency of the crystal used. + * Otherwise, this function may have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * @param None + * @retval None + */ +void SystemCoreClockUpdate (void) +{ + uint32_t tmp = 0, pllmull = 0, pllsource = 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 /* STM32F10X_LD_VL or STM32F10X_MD_VL or STM32F10X_HD_VL */ + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock */ + + /* Get PLL clock source and multiplication factor ----------------------*/ + pllmull = RCC->CFGR & RCC_CFGR_PLLMULL; + pllsource = RCC->CFGR & RCC_CFGR_PLLSRC; + +#ifndef STM32F10X_CL + pllmull = ( pllmull >> 18) + 2; + + if (pllsource == 0x00) + { + /* HSI oscillator clock divided by 2 selected as PLL clock entry */ + SystemCoreClock = (HSI_VALUE >> 1) * pllmull; + } + else + { + #if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL) + prediv1factor = (RCC->CFGR2 & RCC_CFGR2_PREDIV1) + 1; + /* HSE oscillator clock selected as PREDIV1 clock entry */ + SystemCoreClock = (HSE_VALUE / prediv1factor) * pllmull; + #else + /* HSE selected as PLL clock entry */ + if ((RCC->CFGR & RCC_CFGR_PLLXTPRE) != (uint32_t)RESET) + {/* HSE oscillator clock divided by 2 */ + SystemCoreClock = (HSE_VALUE >> 1) * pllmull; + } + else + { + SystemCoreClock = 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 */ + SystemCoreClock = (HSI_VALUE >> 1) * pllmull; + } + else + {/* PREDIV1 selected as PLL clock entry */ + + /* Get PREDIV1 clock source and division factor */ + prediv1source = RCC->CFGR2 & RCC_CFGR2_PREDIV1SRC; + prediv1factor = (RCC->CFGR2 & RCC_CFGR2_PREDIV1) + 1; + + if (prediv1source == 0) + { + /* HSE oscillator clock selected as PREDIV1 clock entry */ + SystemCoreClock = (HSE_VALUE / prediv1factor) * pllmull; + } + else + {/* PLL2 clock selected as PREDIV1 clock entry */ + + /* Get PREDIV2 division factor and PLL2 multiplication factor */ + prediv2factor = ((RCC->CFGR2 & RCC_CFGR2_PREDIV2) >> 4) + 1; + pll2mull = ((RCC->CFGR2 & RCC_CFGR2_PLL2MUL) >> 8 ) + 2; + SystemCoreClock = (((HSE_VALUE / prediv2factor) * pll2mull) / prediv1factor) * pllmull; + } + } +#endif /* STM32F10X_CL */ + break; + + default: + SystemCoreClock = HSI_VALUE; + break; + } + + /* Compute HCLK clock frequency ----------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK clock frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers. + * @param None + * @retval None + */ +static void SetSysClock(void) +{ +#ifdef SYSCLK_FREQ_HSE + SetSysClockToHSE(); +#elif defined SYSCLK_FREQ_24MHz + SetSysClockTo24(); +#elif defined SYSCLK_FREQ_36MHz + SetSysClockTo36(); +#elif defined SYSCLK_FREQ_48MHz + SetSysClockTo48(); +#elif defined SYSCLK_FREQ_56MHz + SetSysClockTo56(); +#elif defined SYSCLK_FREQ_72MHz + SetSysClockTo72(); +#endif + + /* If none of the define above is enabled, the HSI is used as System clock + source (default after reset) */ +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f10x.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f10x_xx.s/.c before jump to main. + * This function configures the external SRAM mounted on STM3210E-EVAL + * board (STM32 High density devices). This SRAM will be used as program + * data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ +/*!< FSMC Bank1 NOR/SRAM3 is used for the STM3210E-EVAL, if another Bank is + required, then adjust the Register Addresses */ + + /* Enable FSMC clock */ + RCC->AHBENR = 0x00000114; + + /* Enable GPIOD, GPIOE, GPIOF and GPIOG clocks */ + RCC->APB2ENR = 0x000001E0; + +/* --------------- SRAM Data lines, NOE and NWE configuration ---------------*/ +/*---------------- SRAM Address lines configuration -------------------------*/ +/*---------------- NOE and NWE configuration --------------------------------*/ +/*---------------- NE3 configuration ----------------------------------------*/ +/*---------------- NBL0, NBL1 configuration ---------------------------------*/ + + GPIOD->CRL = 0x44BB44BB; + GPIOD->CRH = 0xBBBBBBBB; + + GPIOE->CRL = 0xB44444BB; + GPIOE->CRH = 0xBBBBBBBB; + + GPIOF->CRL = 0x44BBBBBB; + GPIOF->CRH = 0xBBBB4444; + + GPIOG->CRL = 0x44BBBBBB; + GPIOG->CRH = 0x44444B44; + +/*---------------- FSMC Configuration ---------------------------------------*/ +/*---------------- Enable FSMC Bank1_SRAM Bank ------------------------------*/ + + FSMC_Bank1->BTCR[4] = 0x00001011; + FSMC_Bank1->BTCR[5] = 0x00000200; +} +#endif /* DATA_IN_ExtSRAM */ + +#ifdef SYSCLK_FREQ_HSE +/** + * @brief Selects HSE as System clock source and configure HCLK, PCLK2 + * and PCLK1 prescalers. + * @note This function should be used only after reset. + * @param None + * @retval None + */ +static void SetSysClockToHSE(void) +{ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + +#if !defined STM32F10X_LD_VL && !defined STM32F10X_MD_VL && !defined STM32F10X_HD_VL + /* Enable Prefetch Buffer */ + FLASH->ACR |= FLASH_ACR_PRFTBE; + + /* Flash 0 wait state */ + FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); + +#ifndef STM32F10X_CL + FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_0; +#else + if (HSE_VALUE <= 24000000) + { + FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_0; + } + else + { + FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_1; + } +#endif /* STM32F10X_CL */ +#endif + + /* HCLK = SYSCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1; + + /* PCLK1 = HCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV1; + + /* Select HSE as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= (uint32_t)RCC_CFGR_SW_HSE; + + /* Wait till HSE is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x04) + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } +} +#elif defined SYSCLK_FREQ_24MHz +/** + * @brief Sets System clock frequency to 24MHz and configure HCLK, PCLK2 + * and PCLK1 prescalers. + * @note This function should be used only after reset. + * @param None + * @retval None + */ +static void SetSysClockTo24(void) +{ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { +#if !defined STM32F10X_LD_VL && !defined STM32F10X_MD_VL && !defined STM32F10X_HD_VL + /* Enable Prefetch Buffer */ + FLASH->ACR |= FLASH_ACR_PRFTBE; + + /* Flash 0 wait state */ + FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); + FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_0; +#endif + + /* HCLK = SYSCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1; + + /* PCLK1 = HCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV1; + +#ifdef STM32F10X_CL + /* Configure PLLs ------------------------------------------------------*/ + /* PLL configuration: PLLCLK = PREDIV1 * 6 = 24 MHz */ + RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL); + RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 | + RCC_CFGR_PLLMULL6); + + /* PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz */ + /* PREDIV1 configuration: PREDIV1CLK = PLL2 / 10 = 4 MHz */ + RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL | + RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC); + RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 | + RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV10); + + /* Enable PLL2 */ + RCC->CR |= RCC_CR_PLL2ON; + /* Wait till PLL2 is ready */ + while((RCC->CR & RCC_CR_PLL2RDY) == 0) + { + } +#elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL) + /* PLL configuration: = (HSE / 2) * 6 = 24 MHz */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL)); + RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_PREDIV1 | RCC_CFGR_PLLXTPRE_PREDIV1_Div2 | RCC_CFGR_PLLMULL6); +#else + /* PLL configuration: = (HSE / 2) * 6 = 24 MHz */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL)); + RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLXTPRE_HSE_Div2 | RCC_CFGR_PLLMULL6); +#endif /* STM32F10X_CL */ + + /* Enable PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Select PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL; + + /* Wait till PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08) + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } +} +#elif defined SYSCLK_FREQ_36MHz +/** + * @brief Sets System clock frequency to 36MHz and configure HCLK, PCLK2 + * and PCLK1 prescalers. + * @note This function should be used only after reset. + * @param None + * @retval None + */ +static void SetSysClockTo36(void) +{ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* Enable Prefetch Buffer */ + FLASH->ACR |= FLASH_ACR_PRFTBE; + + /* Flash 1 wait state */ + FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); + FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_1; + + /* HCLK = SYSCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1; + + /* PCLK1 = HCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV1; + +#ifdef STM32F10X_CL + /* Configure PLLs ------------------------------------------------------*/ + + /* PLL configuration: PLLCLK = PREDIV1 * 9 = 36 MHz */ + RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL); + RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 | + RCC_CFGR_PLLMULL9); + + /*!< PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz */ + /* PREDIV1 configuration: PREDIV1CLK = PLL2 / 10 = 4 MHz */ + + RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL | + RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC); + RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 | + RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV10); + + /* Enable PLL2 */ + RCC->CR |= RCC_CR_PLL2ON; + /* Wait till PLL2 is ready */ + while((RCC->CR & RCC_CR_PLL2RDY) == 0) + { + } + +#else + /* PLL configuration: PLLCLK = (HSE / 2) * 9 = 36 MHz */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL)); + RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLXTPRE_HSE_Div2 | RCC_CFGR_PLLMULL9); +#endif /* STM32F10X_CL */ + + /* Enable PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Select PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL; + + /* Wait till PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08) + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } +} +#elif defined SYSCLK_FREQ_48MHz +/** + * @brief Sets System clock frequency to 48MHz and configure HCLK, PCLK2 + * and PCLK1 prescalers. + * @note This function should be used only after reset. + * @param None + * @retval None + */ +static void SetSysClockTo48(void) +{ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* Enable Prefetch Buffer */ + FLASH->ACR |= FLASH_ACR_PRFTBE; + + /* Flash 1 wait state */ + FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); + FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_1; + + /* HCLK = SYSCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1; + + /* PCLK1 = HCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2; + +#ifdef STM32F10X_CL + /* Configure PLLs ------------------------------------------------------*/ + /* PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz */ + /* PREDIV1 configuration: PREDIV1CLK = PLL2 / 5 = 8 MHz */ + + RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL | + RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC); + RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 | + RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV5); + + /* Enable PLL2 */ + RCC->CR |= RCC_CR_PLL2ON; + /* Wait till PLL2 is ready */ + while((RCC->CR & RCC_CR_PLL2RDY) == 0) + { + } + + + /* PLL configuration: PLLCLK = PREDIV1 * 6 = 48 MHz */ + RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL); + RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 | + RCC_CFGR_PLLMULL6); +#else + /* PLL configuration: PLLCLK = HSE * 6 = 48 MHz */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL)); + RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL6); +#endif /* STM32F10X_CL */ + + /* Enable PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Select PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL; + + /* Wait till PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08) + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } +} + +#elif defined SYSCLK_FREQ_56MHz +/** + * @brief Sets System clock frequency to 56MHz and configure HCLK, PCLK2 + * and PCLK1 prescalers. + * @note This function should be used only after reset. + * @param None + * @retval None + */ +static void SetSysClockTo56(void) +{ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* Enable Prefetch Buffer */ + FLASH->ACR |= FLASH_ACR_PRFTBE; + + /* Flash 2 wait state */ + FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); + FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2; + + /* HCLK = SYSCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1; + + /* PCLK1 = HCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2; + +#ifdef STM32F10X_CL + /* Configure PLLs ------------------------------------------------------*/ + /* PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz */ + /* PREDIV1 configuration: PREDIV1CLK = PLL2 / 5 = 8 MHz */ + + RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL | + RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC); + RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 | + RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV5); + + /* Enable PLL2 */ + RCC->CR |= RCC_CR_PLL2ON; + /* Wait till PLL2 is ready */ + while((RCC->CR & RCC_CR_PLL2RDY) == 0) + { + } + + + /* PLL configuration: PLLCLK = PREDIV1 * 7 = 56 MHz */ + RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL); + RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 | + RCC_CFGR_PLLMULL7); +#else + /* PLL configuration: PLLCLK = HSE * 7 = 56 MHz */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL)); + RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL7); + +#endif /* STM32F10X_CL */ + + /* Enable PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Select PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL; + + /* Wait till PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08) + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } +} + +#elif defined SYSCLK_FREQ_72MHz +/** + * @brief Sets System clock frequency to 72MHz and configure HCLK, PCLK2 + * and PCLK1 prescalers. + * @note This function should be used only after reset. + * @param None + * @retval None + */ +static void SetSysClockTo72(void) +{ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* Enable Prefetch Buffer */ + FLASH->ACR |= FLASH_ACR_PRFTBE; + + /* Flash 2 wait state */ + FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); + FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2; + + + /* HCLK = SYSCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1; + + /* PCLK1 = HCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2; + +#ifdef STM32F10X_CL + /* Configure PLLs ------------------------------------------------------*/ + /* PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz */ + /* PREDIV1 configuration: PREDIV1CLK = PLL2 / 5 = 8 MHz */ + + RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL | + RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC); + RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 | + RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV5); + + /* Enable PLL2 */ + RCC->CR |= RCC_CR_PLL2ON; + /* Wait till PLL2 is ready */ + while((RCC->CR & RCC_CR_PLL2RDY) == 0) + { + } + + + /* PLL configuration: PLLCLK = PREDIV1 * 9 = 72 MHz */ + RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL); + RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 | + RCC_CFGR_PLLMULL9); +#else + /* PLL configuration: PLLCLK = HSE * 9 = 72 MHz */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | + RCC_CFGR_PLLMULL)); + RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9); +#endif /* STM32F10X_CL */ + + /* Enable PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Select PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL; + + /* Wait till PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08) + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/system_stm32f10x.h b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/system_stm32f10x.h new file mode 100644 index 0000000..54bc1ab --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/CMSIS/system_stm32f10x.h @@ -0,0 +1,98 @@ +/** + ****************************************************************************** + * @file system_stm32f10x.h + * @author MCD Application Team + * @version V3.5.0 + * @date 11-March-2011 + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Header File. + ****************************************************************************** + * @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

+ ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f10x_system + * @{ + */ + +/** + * @brief Define to prevent recursive inclusion + */ +#ifndef __SYSTEM_STM32F10X_H +#define __SYSTEM_STM32F10X_H + +#ifdef __cplusplus + extern "C" { +#endif + +/** @addtogroup STM32F10x_System_Includes + * @{ + */ + +/** + * @} + */ + + +/** @addtogroup STM32F10x_System_Exported_types + * @{ + */ + +extern uint32_t SystemCoreClock; /*!< System Clock Frequency (Core Clock) */ + +/** + * @} + */ + +/** @addtogroup STM32F10x_System_Exported_Constants + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F10x_System_Exported_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F10x_System_Exported_Functions + * @{ + */ + +extern void SystemInit(void); +extern void SystemCoreClockUpdate(void); +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /*__SYSTEM_STM32F10X_H */ + +/** + * @} + */ + +/** + * @} + */ +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/misc.h b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/misc.h new file mode 100644 index 0000000..9a6bd07 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/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/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_adc.h b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_adc.h new file mode 100644 index 0000000..769c6a8 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_adc.h @@ -0,0 +1,484 @@ +/** + ****************************************************************************** + * @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/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_bkp.h b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_bkp.h new file mode 100644 index 0000000..275c5e1 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/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/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_can.h b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_can.h new file mode 100644 index 0000000..d185aa2 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_can.h @@ -0,0 +1,697 @@ +/** + ****************************************************************************** + * @file stm32f10x_can.h + * @author MCD Application Team + * @version V3.5.0 + * @date 11-March-2011 + * @brief This file contains all the functions prototypes for the CAN 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_CAN_H +#define __STM32F10x_CAN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f10x.h" + +/** @addtogroup STM32F10x_StdPeriph_Driver + * @{ + */ + +/** @addtogroup CAN + * @{ + */ + +/** @defgroup CAN_Exported_Types + * @{ + */ + +#define IS_CAN_ALL_PERIPH(PERIPH) (((PERIPH) == CAN1) || \ + ((PERIPH) == CAN2)) + +/** + * @brief CAN init structure definition + */ + +typedef struct +{ + uint16_t CAN_Prescaler; /*!< Specifies the length of a time quantum. + It ranges from 1 to 1024. */ + + uint8_t CAN_Mode; /*!< Specifies the CAN operating mode. + This parameter can be a value of + @ref CAN_operating_mode */ + + uint8_t CAN_SJW; /*!< Specifies the maximum number of time quanta + the CAN hardware is allowed to lengthen or + shorten a bit to perform resynchronization. + This parameter can be a value of + @ref CAN_synchronisation_jump_width */ + + uint8_t CAN_BS1; /*!< Specifies the number of time quanta in Bit + Segment 1. This parameter can be a value of + @ref CAN_time_quantum_in_bit_segment_1 */ + + uint8_t CAN_BS2; /*!< Specifies the number of time quanta in Bit + Segment 2. + This parameter can be a value of + @ref CAN_time_quantum_in_bit_segment_2 */ + + FunctionalState CAN_TTCM; /*!< Enable or disable the time triggered + communication mode. This parameter can be set + either to ENABLE or DISABLE. */ + + FunctionalState CAN_ABOM; /*!< Enable or disable the automatic bus-off + management. This parameter can be set either + to ENABLE or DISABLE. */ + + FunctionalState CAN_AWUM; /*!< Enable or disable the automatic wake-up mode. + This parameter can be set either to ENABLE or + DISABLE. */ + + FunctionalState CAN_NART; /*!< Enable or disable the no-automatic + retransmission mode. This parameter can be + set either to ENABLE or DISABLE. */ + + FunctionalState CAN_RFLM; /*!< Enable or disable the Receive FIFO Locked mode. + This parameter can be set either to ENABLE + or DISABLE. */ + + FunctionalState CAN_TXFP; /*!< Enable or disable the transmit FIFO priority. + This parameter can be set either to ENABLE + or DISABLE. */ +} CAN_InitTypeDef; + +/** + * @brief CAN filter init structure definition + */ + +typedef struct +{ + uint16_t CAN_FilterIdHigh; /*!< Specifies the filter identification number (MSBs for a 32-bit + configuration, first one for a 16-bit configuration). + This parameter can be a value between 0x0000 and 0xFFFF */ + + uint16_t CAN_FilterIdLow; /*!< Specifies the filter identification number (LSBs for a 32-bit + configuration, second one for a 16-bit configuration). + This parameter can be a value between 0x0000 and 0xFFFF */ + + uint16_t CAN_FilterMaskIdHigh; /*!< Specifies the filter mask number or identification number, + according to the mode (MSBs for a 32-bit configuration, + first one for a 16-bit configuration). + This parameter can be a value between 0x0000 and 0xFFFF */ + + uint16_t CAN_FilterMaskIdLow; /*!< Specifies the filter mask number or identification number, + according to the mode (LSBs for a 32-bit configuration, + second one for a 16-bit configuration). + This parameter can be a value between 0x0000 and 0xFFFF */ + + uint16_t CAN_FilterFIFOAssignment; /*!< Specifies the FIFO (0 or 1) which will be assigned to the filter. + This parameter can be a value of @ref CAN_filter_FIFO */ + + uint8_t CAN_FilterNumber; /*!< Specifies the filter which will be initialized. It ranges from 0 to 13. */ + + uint8_t CAN_FilterMode; /*!< Specifies the filter mode to be initialized. + This parameter can be a value of @ref CAN_filter_mode */ + + uint8_t CAN_FilterScale; /*!< Specifies the filter scale. + This parameter can be a value of @ref CAN_filter_scale */ + + FunctionalState CAN_FilterActivation; /*!< Enable or disable the filter. + This parameter can be set either to ENABLE or DISABLE. */ +} CAN_FilterInitTypeDef; + +/** + * @brief CAN Tx message structure definition + */ + +typedef struct +{ + uint32_t StdId; /*!< Specifies the standard identifier. + This parameter can be a value between 0 to 0x7FF. */ + + uint32_t ExtId; /*!< Specifies the extended identifier. + This parameter can be a value between 0 to 0x1FFFFFFF. */ + + uint8_t IDE; /*!< Specifies the type of identifier for the message that + will be transmitted. This parameter can be a value + of @ref CAN_identifier_type */ + + uint8_t RTR; /*!< Specifies the type of frame for the message that will + be transmitted. This parameter can be a value of + @ref CAN_remote_transmission_request */ + + uint8_t DLC; /*!< Specifies the length of the frame that will be + transmitted. This parameter can be a value between + 0 to 8 */ + + uint8_t Data[8]; /*!< Contains the data to be transmitted. It ranges from 0 + to 0xFF. */ +} CanTxMsg; + +/** + * @brief CAN Rx message structure definition + */ + +typedef struct +{ + uint32_t StdId; /*!< Specifies the standard identifier. + This parameter can be a value between 0 to 0x7FF. */ + + uint32_t ExtId; /*!< Specifies the extended identifier. + This parameter can be a value between 0 to 0x1FFFFFFF. */ + + uint8_t IDE; /*!< Specifies the type of identifier for the message that + will be received. This parameter can be a value of + @ref CAN_identifier_type */ + + uint8_t RTR; /*!< Specifies the type of frame for the received message. + This parameter can be a value of + @ref CAN_remote_transmission_request */ + + uint8_t DLC; /*!< Specifies the length of the frame that will be received. + This parameter can be a value between 0 to 8 */ + + uint8_t Data[8]; /*!< Contains the data to be received. It ranges from 0 to + 0xFF. */ + + uint8_t FMI; /*!< Specifies the index of the filter the message stored in + the mailbox passes through. This parameter can be a + value between 0 to 0xFF */ +} CanRxMsg; + +/** + * @} + */ + +/** @defgroup CAN_Exported_Constants + * @{ + */ + +/** @defgroup CAN_sleep_constants + * @{ + */ + +#define CAN_InitStatus_Failed ((uint8_t)0x00) /*!< CAN initialization failed */ +#define CAN_InitStatus_Success ((uint8_t)0x01) /*!< CAN initialization OK */ + +/** + * @} + */ + +/** @defgroup CAN_Mode + * @{ + */ + +#define CAN_Mode_Normal ((uint8_t)0x00) /*!< normal mode */ +#define CAN_Mode_LoopBack ((uint8_t)0x01) /*!< loopback mode */ +#define CAN_Mode_Silent ((uint8_t)0x02) /*!< silent mode */ +#define CAN_Mode_Silent_LoopBack ((uint8_t)0x03) /*!< loopback combined with silent mode */ + +#define IS_CAN_MODE(MODE) (((MODE) == CAN_Mode_Normal) || \ + ((MODE) == CAN_Mode_LoopBack)|| \ + ((MODE) == CAN_Mode_Silent) || \ + ((MODE) == CAN_Mode_Silent_LoopBack)) +/** + * @} + */ + + +/** + * @defgroup CAN_Operating_Mode + * @{ + */ +#define CAN_OperatingMode_Initialization ((uint8_t)0x00) /*!< Initialization mode */ +#define CAN_OperatingMode_Normal ((uint8_t)0x01) /*!< Normal mode */ +#define CAN_OperatingMode_Sleep ((uint8_t)0x02) /*!< sleep mode */ + + +#define IS_CAN_OPERATING_MODE(MODE) (((MODE) == CAN_OperatingMode_Initialization) ||\ + ((MODE) == CAN_OperatingMode_Normal)|| \ + ((MODE) == CAN_OperatingMode_Sleep)) +/** + * @} + */ + +/** + * @defgroup CAN_Mode_Status + * @{ + */ + +#define CAN_ModeStatus_Failed ((uint8_t)0x00) /*!< CAN entering the specific mode failed */ +#define CAN_ModeStatus_Success ((uint8_t)!CAN_ModeStatus_Failed) /*!< CAN entering the specific mode Succeed */ + + +/** + * @} + */ + +/** @defgroup CAN_synchronisation_jump_width + * @{ + */ + +#define CAN_SJW_1tq ((uint8_t)0x00) /*!< 1 time quantum */ +#define CAN_SJW_2tq ((uint8_t)0x01) /*!< 2 time quantum */ +#define CAN_SJW_3tq ((uint8_t)0x02) /*!< 3 time quantum */ +#define CAN_SJW_4tq ((uint8_t)0x03) /*!< 4 time quantum */ + +#define IS_CAN_SJW(SJW) (((SJW) == CAN_SJW_1tq) || ((SJW) == CAN_SJW_2tq)|| \ + ((SJW) == CAN_SJW_3tq) || ((SJW) == CAN_SJW_4tq)) +/** + * @} + */ + +/** @defgroup CAN_time_quantum_in_bit_segment_1 + * @{ + */ + +#define CAN_BS1_1tq ((uint8_t)0x00) /*!< 1 time quantum */ +#define CAN_BS1_2tq ((uint8_t)0x01) /*!< 2 time quantum */ +#define CAN_BS1_3tq ((uint8_t)0x02) /*!< 3 time quantum */ +#define CAN_BS1_4tq ((uint8_t)0x03) /*!< 4 time quantum */ +#define CAN_BS1_5tq ((uint8_t)0x04) /*!< 5 time quantum */ +#define CAN_BS1_6tq ((uint8_t)0x05) /*!< 6 time quantum */ +#define CAN_BS1_7tq ((uint8_t)0x06) /*!< 7 time quantum */ +#define CAN_BS1_8tq ((uint8_t)0x07) /*!< 8 time quantum */ +#define CAN_BS1_9tq ((uint8_t)0x08) /*!< 9 time quantum */ +#define CAN_BS1_10tq ((uint8_t)0x09) /*!< 10 time quantum */ +#define CAN_BS1_11tq ((uint8_t)0x0A) /*!< 11 time quantum */ +#define CAN_BS1_12tq ((uint8_t)0x0B) /*!< 12 time quantum */ +#define CAN_BS1_13tq ((uint8_t)0x0C) /*!< 13 time quantum */ +#define CAN_BS1_14tq ((uint8_t)0x0D) /*!< 14 time quantum */ +#define CAN_BS1_15tq ((uint8_t)0x0E) /*!< 15 time quantum */ +#define CAN_BS1_16tq ((uint8_t)0x0F) /*!< 16 time quantum */ + +#define IS_CAN_BS1(BS1) ((BS1) <= CAN_BS1_16tq) +/** + * @} + */ + +/** @defgroup CAN_time_quantum_in_bit_segment_2 + * @{ + */ + +#define CAN_BS2_1tq ((uint8_t)0x00) /*!< 1 time quantum */ +#define CAN_BS2_2tq ((uint8_t)0x01) /*!< 2 time quantum */ +#define CAN_BS2_3tq ((uint8_t)0x02) /*!< 3 time quantum */ +#define CAN_BS2_4tq ((uint8_t)0x03) /*!< 4 time quantum */ +#define CAN_BS2_5tq ((uint8_t)0x04) /*!< 5 time quantum */ +#define CAN_BS2_6tq ((uint8_t)0x05) /*!< 6 time quantum */ +#define CAN_BS2_7tq ((uint8_t)0x06) /*!< 7 time quantum */ +#define CAN_BS2_8tq ((uint8_t)0x07) /*!< 8 time quantum */ + +#define IS_CAN_BS2(BS2) ((BS2) <= CAN_BS2_8tq) + +/** + * @} + */ + +/** @defgroup CAN_clock_prescaler + * @{ + */ + +#define IS_CAN_PRESCALER(PRESCALER) (((PRESCALER) >= 1) && ((PRESCALER) <= 1024)) + +/** + * @} + */ + +/** @defgroup CAN_filter_number + * @{ + */ +#ifndef STM32F10X_CL + #define IS_CAN_FILTER_NUMBER(NUMBER) ((NUMBER) <= 13) +#else + #define IS_CAN_FILTER_NUMBER(NUMBER) ((NUMBER) <= 27) +#endif /* STM32F10X_CL */ +/** + * @} + */ + +/** @defgroup CAN_filter_mode + * @{ + */ + +#define CAN_FilterMode_IdMask ((uint8_t)0x00) /*!< identifier/mask mode */ +#define CAN_FilterMode_IdList ((uint8_t)0x01) /*!< identifier list mode */ + +#define IS_CAN_FILTER_MODE(MODE) (((MODE) == CAN_FilterMode_IdMask) || \ + ((MODE) == CAN_FilterMode_IdList)) +/** + * @} + */ + +/** @defgroup CAN_filter_scale + * @{ + */ + +#define CAN_FilterScale_16bit ((uint8_t)0x00) /*!< Two 16-bit filters */ +#define CAN_FilterScale_32bit ((uint8_t)0x01) /*!< One 32-bit filter */ + +#define IS_CAN_FILTER_SCALE(SCALE) (((SCALE) == CAN_FilterScale_16bit) || \ + ((SCALE) == CAN_FilterScale_32bit)) + +/** + * @} + */ + +/** @defgroup CAN_filter_FIFO + * @{ + */ + +#define CAN_Filter_FIFO0 ((uint8_t)0x00) /*!< Filter FIFO 0 assignment for filter x */ +#define CAN_Filter_FIFO1 ((uint8_t)0x01) /*!< Filter FIFO 1 assignment for filter x */ +#define IS_CAN_FILTER_FIFO(FIFO) (((FIFO) == CAN_FilterFIFO0) || \ + ((FIFO) == CAN_FilterFIFO1)) +/** + * @} + */ + +/** @defgroup Start_bank_filter_for_slave_CAN + * @{ + */ +#define IS_CAN_BANKNUMBER(BANKNUMBER) (((BANKNUMBER) >= 1) && ((BANKNUMBER) <= 27)) +/** + * @} + */ + +/** @defgroup CAN_Tx + * @{ + */ + +#define IS_CAN_TRANSMITMAILBOX(TRANSMITMAILBOX) ((TRANSMITMAILBOX) <= ((uint8_t)0x02)) +#define IS_CAN_STDID(STDID) ((STDID) <= ((uint32_t)0x7FF)) +#define IS_CAN_EXTID(EXTID) ((EXTID) <= ((uint32_t)0x1FFFFFFF)) +#define IS_CAN_DLC(DLC) ((DLC) <= ((uint8_t)0x08)) + +/** + * @} + */ + +/** @defgroup CAN_identifier_type + * @{ + */ + +#define CAN_Id_Standard ((uint32_t)0x00000000) /*!< Standard Id */ +#define CAN_Id_Extended ((uint32_t)0x00000004) /*!< Extended Id */ +#define IS_CAN_IDTYPE(IDTYPE) (((IDTYPE) == CAN_Id_Standard) || \ + ((IDTYPE) == CAN_Id_Extended)) +/** + * @} + */ + +/** @defgroup CAN_remote_transmission_request + * @{ + */ + +#define CAN_RTR_Data ((uint32_t)0x00000000) /*!< Data frame */ +#define CAN_RTR_Remote ((uint32_t)0x00000002) /*!< Remote frame */ +#define IS_CAN_RTR(RTR) (((RTR) == CAN_RTR_Data) || ((RTR) == CAN_RTR_Remote)) + +/** + * @} + */ + +/** @defgroup CAN_transmit_constants + * @{ + */ + +#define CAN_TxStatus_Failed ((uint8_t)0x00)/*!< CAN transmission failed */ +#define CAN_TxStatus_Ok ((uint8_t)0x01) /*!< CAN transmission succeeded */ +#define CAN_TxStatus_Pending ((uint8_t)0x02) /*!< CAN transmission pending */ +#define CAN_TxStatus_NoMailBox ((uint8_t)0x04) /*!< CAN cell did not provide an empty mailbox */ + +/** + * @} + */ + +/** @defgroup CAN_receive_FIFO_number_constants + * @{ + */ + +#define CAN_FIFO0 ((uint8_t)0x00) /*!< CAN FIFO 0 used to receive */ +#define CAN_FIFO1 ((uint8_t)0x01) /*!< CAN FIFO 1 used to receive */ + +#define IS_CAN_FIFO(FIFO) (((FIFO) == CAN_FIFO0) || ((FIFO) == CAN_FIFO1)) + +/** + * @} + */ + +/** @defgroup CAN_sleep_constants + * @{ + */ + +#define CAN_Sleep_Failed ((uint8_t)0x00) /*!< CAN did not enter the sleep mode */ +#define CAN_Sleep_Ok ((uint8_t)0x01) /*!< CAN entered the sleep mode */ + +/** + * @} + */ + +/** @defgroup CAN_wake_up_constants + * @{ + */ + +#define CAN_WakeUp_Failed ((uint8_t)0x00) /*!< CAN did not leave the sleep mode */ +#define CAN_WakeUp_Ok ((uint8_t)0x01) /*!< CAN leaved the sleep mode */ + +/** + * @} + */ + +/** + * @defgroup CAN_Error_Code_constants + * @{ + */ + +#define CAN_ErrorCode_NoErr ((uint8_t)0x00) /*!< No Error */ +#define CAN_ErrorCode_StuffErr ((uint8_t)0x10) /*!< Stuff Error */ +#define CAN_ErrorCode_FormErr ((uint8_t)0x20) /*!< Form Error */ +#define CAN_ErrorCode_ACKErr ((uint8_t)0x30) /*!< Acknowledgment Error */ +#define CAN_ErrorCode_BitRecessiveErr ((uint8_t)0x40) /*!< Bit Recessive Error */ +#define CAN_ErrorCode_BitDominantErr ((uint8_t)0x50) /*!< Bit Dominant Error */ +#define CAN_ErrorCode_CRCErr ((uint8_t)0x60) /*!< CRC Error */ +#define CAN_ErrorCode_SoftwareSetErr ((uint8_t)0x70) /*!< Software Set Error */ + + +/** + * @} + */ + +/** @defgroup CAN_flags + * @{ + */ +/* If the flag is 0x3XXXXXXX, it means that it can be used with CAN_GetFlagStatus() + and CAN_ClearFlag() functions. */ +/* If the flag is 0x1XXXXXXX, it means that it can only be used with CAN_GetFlagStatus() function. */ + +/* Transmit Flags */ +#define CAN_FLAG_RQCP0 ((uint32_t)0x38000001) /*!< Request MailBox0 Flag */ +#define CAN_FLAG_RQCP1 ((uint32_t)0x38000100) /*!< Request MailBox1 Flag */ +#define CAN_FLAG_RQCP2 ((uint32_t)0x38010000) /*!< Request MailBox2 Flag */ + +/* Receive Flags */ +#define CAN_FLAG_FMP0 ((uint32_t)0x12000003) /*!< FIFO 0 Message Pending Flag */ +#define CAN_FLAG_FF0 ((uint32_t)0x32000008) /*!< FIFO 0 Full Flag */ +#define CAN_FLAG_FOV0 ((uint32_t)0x32000010) /*!< FIFO 0 Overrun Flag */ +#define CAN_FLAG_FMP1 ((uint32_t)0x14000003) /*!< FIFO 1 Message Pending Flag */ +#define CAN_FLAG_FF1 ((uint32_t)0x34000008) /*!< FIFO 1 Full Flag */ +#define CAN_FLAG_FOV1 ((uint32_t)0x34000010) /*!< FIFO 1 Overrun Flag */ + +/* Operating Mode Flags */ +#define CAN_FLAG_WKU ((uint32_t)0x31000008) /*!< Wake up Flag */ +#define CAN_FLAG_SLAK ((uint32_t)0x31000012) /*!< Sleep acknowledge Flag */ +/* Note: When SLAK intterupt is disabled (SLKIE=0), no polling on SLAKI is possible. + In this case the SLAK bit can be polled.*/ + +/* Error Flags */ +#define CAN_FLAG_EWG ((uint32_t)0x10F00001) /*!< Error Warning Flag */ +#define CAN_FLAG_EPV ((uint32_t)0x10F00002) /*!< Error Passive Flag */ +#define CAN_FLAG_BOF ((uint32_t)0x10F00004) /*!< Bus-Off Flag */ +#define CAN_FLAG_LEC ((uint32_t)0x30F00070) /*!< Last error code Flag */ + +#define IS_CAN_GET_FLAG(FLAG) (((FLAG) == CAN_FLAG_LEC) || ((FLAG) == CAN_FLAG_BOF) || \ + ((FLAG) == CAN_FLAG_EPV) || ((FLAG) == CAN_FLAG_EWG) || \ + ((FLAG) == CAN_FLAG_WKU) || ((FLAG) == CAN_FLAG_FOV0) || \ + ((FLAG) == CAN_FLAG_FF0) || ((FLAG) == CAN_FLAG_FMP0) || \ + ((FLAG) == CAN_FLAG_FOV1) || ((FLAG) == CAN_FLAG_FF1) || \ + ((FLAG) == CAN_FLAG_FMP1) || ((FLAG) == CAN_FLAG_RQCP2) || \ + ((FLAG) == CAN_FLAG_RQCP1)|| ((FLAG) == CAN_FLAG_RQCP0) || \ + ((FLAG) == CAN_FLAG_SLAK )) + +#define IS_CAN_CLEAR_FLAG(FLAG)(((FLAG) == CAN_FLAG_LEC) || ((FLAG) == CAN_FLAG_RQCP2) || \ + ((FLAG) == CAN_FLAG_RQCP1) || ((FLAG) == CAN_FLAG_RQCP0) || \ + ((FLAG) == CAN_FLAG_FF0) || ((FLAG) == CAN_FLAG_FOV0) ||\ + ((FLAG) == CAN_FLAG_FF1) || ((FLAG) == CAN_FLAG_FOV1) || \ + ((FLAG) == CAN_FLAG_WKU) || ((FLAG) == CAN_FLAG_SLAK)) +/** + * @} + */ + + +/** @defgroup CAN_interrupts + * @{ + */ + + + +#define CAN_IT_TME ((uint32_t)0x00000001) /*!< Transmit mailbox empty Interrupt*/ + +/* Receive Interrupts */ +#define CAN_IT_FMP0 ((uint32_t)0x00000002) /*!< FIFO 0 message pending Interrupt*/ +#define CAN_IT_FF0 ((uint32_t)0x00000004) /*!< FIFO 0 full Interrupt*/ +#define CAN_IT_FOV0 ((uint32_t)0x00000008) /*!< FIFO 0 overrun Interrupt*/ +#define CAN_IT_FMP1 ((uint32_t)0x00000010) /*!< FIFO 1 message pending Interrupt*/ +#define CAN_IT_FF1 ((uint32_t)0x00000020) /*!< FIFO 1 full Interrupt*/ +#define CAN_IT_FOV1 ((uint32_t)0x00000040) /*!< FIFO 1 overrun Interrupt*/ + +/* Operating Mode Interrupts */ +#define CAN_IT_WKU ((uint32_t)0x00010000) /*!< Wake-up Interrupt*/ +#define CAN_IT_SLK ((uint32_t)0x00020000) /*!< Sleep acknowledge Interrupt*/ + +/* Error Interrupts */ +#define CAN_IT_EWG ((uint32_t)0x00000100) /*!< Error warning Interrupt*/ +#define CAN_IT_EPV ((uint32_t)0x00000200) /*!< Error passive Interrupt*/ +#define CAN_IT_BOF ((uint32_t)0x00000400) /*!< Bus-off Interrupt*/ +#define CAN_IT_LEC ((uint32_t)0x00000800) /*!< Last error code Interrupt*/ +#define CAN_IT_ERR ((uint32_t)0x00008000) /*!< Error Interrupt*/ + +/* Flags named as Interrupts : kept only for FW compatibility */ +#define CAN_IT_RQCP0 CAN_IT_TME +#define CAN_IT_RQCP1 CAN_IT_TME +#define CAN_IT_RQCP2 CAN_IT_TME + + +#define IS_CAN_IT(IT) (((IT) == CAN_IT_TME) || ((IT) == CAN_IT_FMP0) ||\ + ((IT) == CAN_IT_FF0) || ((IT) == CAN_IT_FOV0) ||\ + ((IT) == CAN_IT_FMP1) || ((IT) == CAN_IT_FF1) ||\ + ((IT) == CAN_IT_FOV1) || ((IT) == CAN_IT_EWG) ||\ + ((IT) == CAN_IT_EPV) || ((IT) == CAN_IT_BOF) ||\ + ((IT) == CAN_IT_LEC) || ((IT) == CAN_IT_ERR) ||\ + ((IT) == CAN_IT_WKU) || ((IT) == CAN_IT_SLK)) + +#define IS_CAN_CLEAR_IT(IT) (((IT) == CAN_IT_TME) || ((IT) == CAN_IT_FF0) ||\ + ((IT) == CAN_IT_FOV0)|| ((IT) == CAN_IT_FF1) ||\ + ((IT) == CAN_IT_FOV1)|| ((IT) == CAN_IT_EWG) ||\ + ((IT) == CAN_IT_EPV) || ((IT) == CAN_IT_BOF) ||\ + ((IT) == CAN_IT_LEC) || ((IT) == CAN_IT_ERR) ||\ + ((IT) == CAN_IT_WKU) || ((IT) == CAN_IT_SLK)) + +/** + * @} + */ + +/** @defgroup CAN_Legacy + * @{ + */ +#define CANINITFAILED CAN_InitStatus_Failed +#define CANINITOK CAN_InitStatus_Success +#define CAN_FilterFIFO0 CAN_Filter_FIFO0 +#define CAN_FilterFIFO1 CAN_Filter_FIFO1 +#define CAN_ID_STD CAN_Id_Standard +#define CAN_ID_EXT CAN_Id_Extended +#define CAN_RTR_DATA CAN_RTR_Data +#define CAN_RTR_REMOTE CAN_RTR_Remote +#define CANTXFAILE CAN_TxStatus_Failed +#define CANTXOK CAN_TxStatus_Ok +#define CANTXPENDING CAN_TxStatus_Pending +#define CAN_NO_MB CAN_TxStatus_NoMailBox +#define CANSLEEPFAILED CAN_Sleep_Failed +#define CANSLEEPOK CAN_Sleep_Ok +#define CANWAKEUPFAILED CAN_WakeUp_Failed +#define CANWAKEUPOK CAN_WakeUp_Ok + +/** + * @} + */ + +/** + * @} + */ + +/** @defgroup CAN_Exported_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup CAN_Exported_Functions + * @{ + */ +/* Function used to set the CAN configuration to the default reset state *****/ +void CAN_DeInit(CAN_TypeDef* CANx); + +/* Initialization and Configuration functions *********************************/ +uint8_t CAN_Init(CAN_TypeDef* CANx, CAN_InitTypeDef* CAN_InitStruct); +void CAN_FilterInit(CAN_FilterInitTypeDef* CAN_FilterInitStruct); +void CAN_StructInit(CAN_InitTypeDef* CAN_InitStruct); +void CAN_SlaveStartBank(uint8_t CAN_BankNumber); +void CAN_DBGFreeze(CAN_TypeDef* CANx, FunctionalState NewState); +void CAN_TTComModeCmd(CAN_TypeDef* CANx, FunctionalState NewState); + +/* Transmit functions *********************************************************/ +uint8_t CAN_Transmit(CAN_TypeDef* CANx, CanTxMsg* TxMessage); +uint8_t CAN_TransmitStatus(CAN_TypeDef* CANx, uint8_t TransmitMailbox); +void CAN_CancelTransmit(CAN_TypeDef* CANx, uint8_t Mailbox); + +/* Receive functions **********************************************************/ +void CAN_Receive(CAN_TypeDef* CANx, uint8_t FIFONumber, CanRxMsg* RxMessage); +void CAN_FIFORelease(CAN_TypeDef* CANx, uint8_t FIFONumber); +uint8_t CAN_MessagePending(CAN_TypeDef* CANx, uint8_t FIFONumber); + + +/* Operation modes functions **************************************************/ +uint8_t CAN_OperatingModeRequest(CAN_TypeDef* CANx, uint8_t CAN_OperatingMode); +uint8_t CAN_Sleep(CAN_TypeDef* CANx); +uint8_t CAN_WakeUp(CAN_TypeDef* CANx); + +/* Error management functions *************************************************/ +uint8_t CAN_GetLastErrorCode(CAN_TypeDef* CANx); +uint8_t CAN_GetReceiveErrorCounter(CAN_TypeDef* CANx); +uint8_t CAN_GetLSBTransmitErrorCounter(CAN_TypeDef* CANx); + +/* Interrupts and flags management functions **********************************/ +void CAN_ITConfig(CAN_TypeDef* CANx, uint32_t CAN_IT, FunctionalState NewState); +FlagStatus CAN_GetFlagStatus(CAN_TypeDef* CANx, uint32_t CAN_FLAG); +void CAN_ClearFlag(CAN_TypeDef* CANx, uint32_t CAN_FLAG); +ITStatus CAN_GetITStatus(CAN_TypeDef* CANx, uint32_t CAN_IT); +void CAN_ClearITPendingBit(CAN_TypeDef* CANx, uint32_t CAN_IT); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F10x_CAN_H */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_cec.h b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_cec.h new file mode 100644 index 0000000..7ce6896 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_cec.h @@ -0,0 +1,210 @@ +/** + ****************************************************************************** + * @file stm32f10x_cec.h + * @author MCD Application Team + * @version V3.5.0 + * @date 11-March-2011 + * @brief This file contains all the functions prototypes for the CEC 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_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/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_crc.h b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_crc.h new file mode 100644 index 0000000..3362fca --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/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/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_dac.h b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_dac.h new file mode 100644 index 0000000..174773c --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/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/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_dbgmcu.h b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_dbgmcu.h new file mode 100644 index 0000000..89ceb9a --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/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/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_dma.h b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_dma.h new file mode 100644 index 0000000..14275fe --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/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/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_exti.h b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_exti.h new file mode 100644 index 0000000..bb9d7f6 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/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/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_flash.h b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_flash.h new file mode 100644 index 0000000..63720de --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/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/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_fsmc.h b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_fsmc.h new file mode 100644 index 0000000..6e1769d --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/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/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_gpio.h b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_gpio.h new file mode 100644 index 0000000..dd28da8 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_gpio.h @@ -0,0 +1,385 @@ +/** + ****************************************************************************** + * @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/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_i2c.h b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_i2c.h new file mode 100644 index 0000000..60e4b14 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/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/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_iwdg.h b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_iwdg.h new file mode 100644 index 0000000..25b0bb5 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/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/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_pwr.h b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_pwr.h new file mode 100644 index 0000000..1c025e2 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_pwr.h @@ -0,0 +1,156 @@ +/** + ****************************************************************************** + * @file stm32f10x_pwr.h + * @author MCD Application Team + * @version V3.5.0 + * @date 11-March-2011 + * @brief This file contains all the functions prototypes for the PWR 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_PWR_H +#define __STM32F10x_PWR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f10x.h" + +/** @addtogroup STM32F10x_StdPeriph_Driver + * @{ + */ + +/** @addtogroup PWR + * @{ + */ + +/** @defgroup PWR_Exported_Types + * @{ + */ + +/** + * @} + */ + +/** @defgroup PWR_Exported_Constants + * @{ + */ + +/** @defgroup PVD_detection_level + * @{ + */ + +#define PWR_PVDLevel_2V2 ((uint32_t)0x00000000) +#define PWR_PVDLevel_2V3 ((uint32_t)0x00000020) +#define PWR_PVDLevel_2V4 ((uint32_t)0x00000040) +#define PWR_PVDLevel_2V5 ((uint32_t)0x00000060) +#define PWR_PVDLevel_2V6 ((uint32_t)0x00000080) +#define PWR_PVDLevel_2V7 ((uint32_t)0x000000A0) +#define PWR_PVDLevel_2V8 ((uint32_t)0x000000C0) +#define PWR_PVDLevel_2V9 ((uint32_t)0x000000E0) +#define IS_PWR_PVD_LEVEL(LEVEL) (((LEVEL) == PWR_PVDLevel_2V2) || ((LEVEL) == PWR_PVDLevel_2V3)|| \ + ((LEVEL) == PWR_PVDLevel_2V4) || ((LEVEL) == PWR_PVDLevel_2V5)|| \ + ((LEVEL) == PWR_PVDLevel_2V6) || ((LEVEL) == PWR_PVDLevel_2V7)|| \ + ((LEVEL) == PWR_PVDLevel_2V8) || ((LEVEL) == PWR_PVDLevel_2V9)) +/** + * @} + */ + +/** @defgroup Regulator_state_is_STOP_mode + * @{ + */ + +#define PWR_Regulator_ON ((uint32_t)0x00000000) +#define PWR_Regulator_LowPower ((uint32_t)0x00000001) +#define IS_PWR_REGULATOR(REGULATOR) (((REGULATOR) == PWR_Regulator_ON) || \ + ((REGULATOR) == PWR_Regulator_LowPower)) +/** + * @} + */ + +/** @defgroup STOP_mode_entry + * @{ + */ + +#define PWR_STOPEntry_WFI ((uint8_t)0x01) +#define PWR_STOPEntry_WFE ((uint8_t)0x02) +#define IS_PWR_STOP_ENTRY(ENTRY) (((ENTRY) == PWR_STOPEntry_WFI) || ((ENTRY) == PWR_STOPEntry_WFE)) + +/** + * @} + */ + +/** @defgroup PWR_Flag + * @{ + */ + +#define PWR_FLAG_WU ((uint32_t)0x00000001) +#define PWR_FLAG_SB ((uint32_t)0x00000002) +#define PWR_FLAG_PVDO ((uint32_t)0x00000004) +#define IS_PWR_GET_FLAG(FLAG) (((FLAG) == PWR_FLAG_WU) || ((FLAG) == PWR_FLAG_SB) || \ + ((FLAG) == PWR_FLAG_PVDO)) + +#define IS_PWR_CLEAR_FLAG(FLAG) (((FLAG) == PWR_FLAG_WU) || ((FLAG) == PWR_FLAG_SB)) +/** + * @} + */ + +/** + * @} + */ + +/** @defgroup PWR_Exported_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup PWR_Exported_Functions + * @{ + */ + +void PWR_DeInit(void); +void PWR_BackupAccessCmd(FunctionalState NewState); +void PWR_PVDCmd(FunctionalState NewState); +void PWR_PVDLevelConfig(uint32_t PWR_PVDLevel); +void PWR_WakeUpPinCmd(FunctionalState NewState); +void PWR_EnterSTOPMode(uint32_t PWR_Regulator, uint8_t PWR_STOPEntry); +void PWR_EnterSTANDBYMode(void); +FlagStatus PWR_GetFlagStatus(uint32_t PWR_FLAG); +void PWR_ClearFlag(uint32_t PWR_FLAG); + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F10x_PWR_H */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_rcc.h b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_rcc.h new file mode 100644 index 0000000..1149c34 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/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/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_rtc.h b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_rtc.h new file mode 100644 index 0000000..fd8beb5 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/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/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_sdio.h b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_sdio.h new file mode 100644 index 0000000..81c058a --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/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/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_spi.h b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_spi.h new file mode 100644 index 0000000..23cc26d --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/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/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_tim.h b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_tim.h new file mode 100644 index 0000000..65bf76a --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/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/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_usart.h b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_usart.h new file mode 100644 index 0000000..162fa87 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/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/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_wwdg.h b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/inc/stm32f10x_wwdg.h new file mode 100644 index 0000000..bdfa177 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/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/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/misc.c b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/misc.c new file mode 100644 index 0000000..c0a5e11 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/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/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_adc.c b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_adc.c new file mode 100644 index 0000000..8155dc9 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/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/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_bkp.c b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_bkp.c new file mode 100644 index 0000000..997eecc --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/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/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_can.c b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_can.c new file mode 100644 index 0000000..ec8e049 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/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/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_cec.c b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_cec.c new file mode 100644 index 0000000..4dc615f --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/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/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_crc.c b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_crc.c new file mode 100644 index 0000000..6501728 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/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/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_dac.c b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_dac.c new file mode 100644 index 0000000..1cfc71d --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/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/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_dbgmcu.c b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_dbgmcu.c new file mode 100644 index 0000000..96a8fde --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/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/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_dma.c b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_dma.c new file mode 100644 index 0000000..bf072df --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/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/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_exti.c b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_exti.c new file mode 100644 index 0000000..b6290d5 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/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/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_flash.c b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_flash.c new file mode 100644 index 0000000..cdff9e9 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_flash.c @@ -0,0 +1,1684 @@ +/** + ****************************************************************************** + * @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) +/** + * @} + */ + +/** @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/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_fsmc.c b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_fsmc.c new file mode 100644 index 0000000..51669ee --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/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/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_gpio.c b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_gpio.c new file mode 100644 index 0000000..457ff11 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/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/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_i2c.c b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_i2c.c new file mode 100644 index 0000000..4ea321c --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/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/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_iwdg.c b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_iwdg.c new file mode 100644 index 0000000..c7cbf7e --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/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/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_pwr.c b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_pwr.c new file mode 100644 index 0000000..a5a5c57 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_pwr.c @@ -0,0 +1,307 @@ +/** + ****************************************************************************** + * @file stm32f10x_pwr.c + * @author MCD Application Team + * @version V3.5.0 + * @date 11-March-2011 + * @brief This file provides all the PWR 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_pwr.h" +#include "stm32f10x_rcc.h" + +/** @addtogroup STM32F10x_StdPeriph_Driver + * @{ + */ + +/** @defgroup PWR + * @brief PWR driver modules + * @{ + */ + +/** @defgroup PWR_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @defgroup PWR_Private_Defines + * @{ + */ + +/* --------- PWR registers bit address in the alias region ---------- */ +#define PWR_OFFSET (PWR_BASE - PERIPH_BASE) + +/* --- CR Register ---*/ + +/* Alias word address of DBP bit */ +#define CR_OFFSET (PWR_OFFSET + 0x00) +#define DBP_BitNumber 0x08 +#define CR_DBP_BB (PERIPH_BB_BASE + (CR_OFFSET * 32) + (DBP_BitNumber * 4)) + +/* Alias word address of PVDE bit */ +#define PVDE_BitNumber 0x04 +#define CR_PVDE_BB (PERIPH_BB_BASE + (CR_OFFSET * 32) + (PVDE_BitNumber * 4)) + +/* --- CSR Register ---*/ + +/* Alias word address of EWUP bit */ +#define CSR_OFFSET (PWR_OFFSET + 0x04) +#define EWUP_BitNumber 0x08 +#define CSR_EWUP_BB (PERIPH_BB_BASE + (CSR_OFFSET * 32) + (EWUP_BitNumber * 4)) + +/* ------------------ PWR registers bit mask ------------------------ */ + +/* CR register bit mask */ +#define CR_DS_MASK ((uint32_t)0xFFFFFFFC) +#define CR_PLS_MASK ((uint32_t)0xFFFFFF1F) + + +/** + * @} + */ + +/** @defgroup PWR_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup PWR_Private_Variables + * @{ + */ + +/** + * @} + */ + +/** @defgroup PWR_Private_FunctionPrototypes + * @{ + */ + +/** + * @} + */ + +/** @defgroup PWR_Private_Functions + * @{ + */ + +/** + * @brief Deinitializes the PWR peripheral registers to their default reset values. + * @param None + * @retval None + */ +void PWR_DeInit(void) +{ + RCC_APB1PeriphResetCmd(RCC_APB1Periph_PWR, ENABLE); + RCC_APB1PeriphResetCmd(RCC_APB1Periph_PWR, DISABLE); +} + +/** + * @brief Enables or disables access to the RTC and backup registers. + * @param NewState: new state of the access to the RTC and backup registers. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void PWR_BackupAccessCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + *(__IO uint32_t *) CR_DBP_BB = (uint32_t)NewState; +} + +/** + * @brief Enables or disables the Power Voltage Detector(PVD). + * @param NewState: new state of the PVD. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void PWR_PVDCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + *(__IO uint32_t *) CR_PVDE_BB = (uint32_t)NewState; +} + +/** + * @brief Configures the voltage threshold detected by the Power Voltage Detector(PVD). + * @param PWR_PVDLevel: specifies the PVD detection level + * This parameter can be one of the following values: + * @arg PWR_PVDLevel_2V2: PVD detection level set to 2.2V + * @arg PWR_PVDLevel_2V3: PVD detection level set to 2.3V + * @arg PWR_PVDLevel_2V4: PVD detection level set to 2.4V + * @arg PWR_PVDLevel_2V5: PVD detection level set to 2.5V + * @arg PWR_PVDLevel_2V6: PVD detection level set to 2.6V + * @arg PWR_PVDLevel_2V7: PVD detection level set to 2.7V + * @arg PWR_PVDLevel_2V8: PVD detection level set to 2.8V + * @arg PWR_PVDLevel_2V9: PVD detection level set to 2.9V + * @retval None + */ +void PWR_PVDLevelConfig(uint32_t PWR_PVDLevel) +{ + uint32_t tmpreg = 0; + /* Check the parameters */ + assert_param(IS_PWR_PVD_LEVEL(PWR_PVDLevel)); + tmpreg = PWR->CR; + /* Clear PLS[7:5] bits */ + tmpreg &= CR_PLS_MASK; + /* Set PLS[7:5] bits according to PWR_PVDLevel value */ + tmpreg |= PWR_PVDLevel; + /* Store the new value */ + PWR->CR = tmpreg; +} + +/** + * @brief Enables or disables the WakeUp Pin functionality. + * @param NewState: new state of the WakeUp Pin functionality. + * This parameter can be: ENABLE or DISABLE. + * @retval None + */ +void PWR_WakeUpPinCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + *(__IO uint32_t *) CSR_EWUP_BB = (uint32_t)NewState; +} + +/** + * @brief Enters STOP mode. + * @param PWR_Regulator: specifies the regulator state in STOP mode. + * This parameter can be one of the following values: + * @arg PWR_Regulator_ON: STOP mode with regulator ON + * @arg PWR_Regulator_LowPower: STOP mode with regulator in low power mode + * @param PWR_STOPEntry: specifies if STOP mode in entered with WFI or WFE instruction. + * This parameter can be one of the following values: + * @arg PWR_STOPEntry_WFI: enter STOP mode with WFI instruction + * @arg PWR_STOPEntry_WFE: enter STOP mode with WFE instruction + * @retval None + */ +void PWR_EnterSTOPMode(uint32_t PWR_Regulator, uint8_t PWR_STOPEntry) +{ + uint32_t tmpreg = 0; + /* Check the parameters */ + assert_param(IS_PWR_REGULATOR(PWR_Regulator)); + assert_param(IS_PWR_STOP_ENTRY(PWR_STOPEntry)); + + /* Select the regulator state in STOP mode ---------------------------------*/ + tmpreg = PWR->CR; + /* Clear PDDS and LPDS bits */ + tmpreg &= CR_DS_MASK; + /* Set LPDS bit according to PWR_Regulator value */ + tmpreg |= PWR_Regulator; + /* Store the new value */ + PWR->CR = tmpreg; + /* Set SLEEPDEEP bit of Cortex System Control Register */ + SCB->SCR |= SCB_SCR_SLEEPDEEP; + + /* Select STOP mode entry --------------------------------------------------*/ + if(PWR_STOPEntry == PWR_STOPEntry_WFI) + { + /* Request Wait For Interrupt */ + __WFI(); + } + else + { + /* Request Wait For Event */ + __WFE(); + } + + /* Reset SLEEPDEEP bit of Cortex System Control Register */ + SCB->SCR &= (uint32_t)~((uint32_t)SCB_SCR_SLEEPDEEP); +} + +/** + * @brief Enters STANDBY mode. + * @param None + * @retval None + */ +void PWR_EnterSTANDBYMode(void) +{ + /* Clear Wake-up flag */ + PWR->CR |= PWR_CR_CWUF; + /* Select STANDBY mode */ + PWR->CR |= PWR_CR_PDDS; + /* Set SLEEPDEEP bit of Cortex System Control Register */ + SCB->SCR |= SCB_SCR_SLEEPDEEP; +/* This option is used to ensure that store operations are completed */ +#if defined ( __CC_ARM ) + __force_stores(); +#endif + /* Request Wait For Interrupt */ + __WFI(); +} + +/** + * @brief Checks whether the specified PWR flag is set or not. + * @param PWR_FLAG: specifies the flag to check. + * This parameter can be one of the following values: + * @arg PWR_FLAG_WU: Wake Up flag + * @arg PWR_FLAG_SB: StandBy flag + * @arg PWR_FLAG_PVDO: PVD Output + * @retval The new state of PWR_FLAG (SET or RESET). + */ +FlagStatus PWR_GetFlagStatus(uint32_t PWR_FLAG) +{ + FlagStatus bitstatus = RESET; + /* Check the parameters */ + assert_param(IS_PWR_GET_FLAG(PWR_FLAG)); + + if ((PWR->CSR & PWR_FLAG) != (uint32_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + /* Return the flag status */ + return bitstatus; +} + +/** + * @brief Clears the PWR's pending flags. + * @param PWR_FLAG: specifies the flag to clear. + * This parameter can be one of the following values: + * @arg PWR_FLAG_WU: Wake Up flag + * @arg PWR_FLAG_SB: StandBy flag + * @retval None + */ +void PWR_ClearFlag(uint32_t PWR_FLAG) +{ + /* Check the parameters */ + assert_param(IS_PWR_CLEAR_FLAG(PWR_FLAG)); + + PWR->CR |= PWR_FLAG << 2; +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_rcc.c b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_rcc.c new file mode 100644 index 0000000..a29034b --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_rcc.c @@ -0,0 +1,1470 @@ +/** + ****************************************************************************** + * @file stm32f10x_rcc.c + * @author MCD Application Team + * @version V3.5.0 + * @date 11-March-2011 + * @brief This file provides all the RCC 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_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/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_rtc.c b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_rtc.c new file mode 100644 index 0000000..f05aef5 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/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/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_sdio.c b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_sdio.c new file mode 100644 index 0000000..bc1719d --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/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/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_spi.c b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_spi.c new file mode 100644 index 0000000..4ec65b2 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/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/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_tim.c b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_tim.c new file mode 100644 index 0000000..bfb4dd1 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/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/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_usart.c b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_usart.c new file mode 100644 index 0000000..e794eae --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/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/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_wwdg.c b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/FWlib/src/stm32f10x_wwdg.c new file mode 100644 index 0000000..4a901e4 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Libraries/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/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Listing/Project.map b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Listing/Project.map new file mode 100644 index 0000000..b90aec9 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Listing/Project.map @@ -0,0 +1,1426 @@ +Component: ARM Compiler 5.06 update 3 (build 300) Tool: armlink [4d35c9] + +============================================================================== + +Section Cross References + + startup_stm32f10x_hd.o(STACK) refers (Special) to heapauxi.o(.text) for __use_two_region_memory + startup_stm32f10x_hd.o(HEAP) refers (Special) to heapauxi.o(.text) for __use_two_region_memory + startup_stm32f10x_hd.o(RESET) refers (Special) to heapauxi.o(.text) for __use_two_region_memory + startup_stm32f10x_hd.o(RESET) refers to startup_stm32f10x_hd.o(STACK) for __initial_sp + startup_stm32f10x_hd.o(RESET) refers to startup_stm32f10x_hd.o(.text) for Reset_Handler + startup_stm32f10x_hd.o(RESET) refers to stm32f10x_it.o(.text) for NMI_Handler + startup_stm32f10x_hd.o(RESET) refers to bsp_timer.o(.text) for TIM2_IRQHandler + startup_stm32f10x_hd.o(RESET) refers to bsp_usart.o(.text) for USART1_IRQHandler + startup_stm32f10x_hd.o(RESET) refers to bluetooth.o(.text) for USART2_IRQHandler + startup_stm32f10x_hd.o(RESET) refers to car.o(.text) for TIM6_IRQHandler + startup_stm32f10x_hd.o(.text) refers (Special) to heapauxi.o(.text) for __use_two_region_memory + startup_stm32f10x_hd.o(.text) refers to system_stm32f10x.o(.text) for SystemInit + startup_stm32f10x_hd.o(.text) refers to __main.o(!!!main) for __main + startup_stm32f10x_hd.o(.text) refers to startup_stm32f10x_hd.o(HEAP) for Heap_Mem + startup_stm32f10x_hd.o(.text) refers to startup_stm32f10x_hd.o(STACK) for Stack_Mem + system_stm32f10x.o(.text) refers to system_stm32f10x.o(.data) for SystemCoreClock + stm32f10x_adc.o(.text) refers to stm32f10x_rcc.o(.text) for RCC_APB2PeriphResetCmd + stm32f10x_bkp.o(.text) refers to stm32f10x_rcc.o(.text) for RCC_BackupResetCmd + stm32f10x_can.o(.text) refers to stm32f10x_rcc.o(.text) for RCC_APB1PeriphResetCmd + stm32f10x_cec.o(.text) refers to stm32f10x_rcc.o(.text) for RCC_APB1PeriphResetCmd + stm32f10x_dac.o(.text) refers to stm32f10x_rcc.o(.text) for RCC_APB1PeriphResetCmd + stm32f10x_gpio.o(.text) refers to stm32f10x_rcc.o(.text) for RCC_APB2PeriphResetCmd + stm32f10x_i2c.o(.text) refers to stm32f10x_rcc.o(.text) for RCC_APB1PeriphResetCmd + stm32f10x_pwr.o(.text) refers to stm32f10x_rcc.o(.text) for RCC_APB1PeriphResetCmd + stm32f10x_rcc.o(.text) refers to stm32f10x_rcc.o(.data) for APBAHBPrescTable + stm32f10x_spi.o(.text) refers to stm32f10x_rcc.o(.text) for RCC_APB2PeriphResetCmd + stm32f10x_tim.o(.text) refers to stm32f10x_rcc.o(.text) for RCC_APB2PeriphResetCmd + stm32f10x_usart.o(.text) refers to stm32f10x_rcc.o(.text) for RCC_APB2PeriphResetCmd + stm32f10x_wwdg.o(.text) refers to stm32f10x_rcc.o(.text) for RCC_APB1PeriphResetCmd + bsp_sys.o(.text) refers to delay.o(.text) for Delay_Init + bsp_sys.o(.text) refers to bsp_nvic.o(.text) for NVIC_Config + bsp_sys.o(.text) refers to bsp_gpio.o(.text) for LED_GPIO_Config + bsp_sys.o(.text) refers to bsp_usart.o(.text) for USART1_Init + bsp_sys.o(.text) refers to bsp_iic.o(.text) for IIC_Init + bsp_sys.o(.text) refers to moto.o(.text) for MOTO_GPIO_Init + bsp_sys.o(.text) refers to bsp_timer.o(.text) for MOTO_PWM_Init + bsp_sys.o(.text) refers to oled.o(.text) for OLED_Init + bsp_gpio.o(.text) refers to stm32f10x_rcc.o(.text) for RCC_APB2PeriphClockCmd + bsp_gpio.o(.text) refers to stm32f10x_gpio.o(.text) for GPIO_Init + bsp_gpio.o(.text) refers to bsp_gpio.o(.data) for temp + bsp_usart.o(.text) refers to stm32f10x_rcc.o(.text) for RCC_APB2PeriphClockCmd + bsp_usart.o(.text) refers to stm32f10x_gpio.o(.text) for GPIO_Init + bsp_usart.o(.text) refers to stm32f10x_usart.o(.text) for USART_Init + bsp_usart.o(.text) refers to bsp_usart.o(.data) for rx_count + delay.o(.text) refers to misc.o(.text) for SysTick_CLKSourceConfig + delay.o(.text) refers to delay.o(.data) for fac_us + bsp_iic.o(.text) refers to stm32f10x_gpio.o(.text) for GPIO_SetBits + bsp_iic.o(.text) refers to stm32f10x_rcc.o(.text) for RCC_APB2PeriphClockCmd + bsp_timer.o(.text) refers to stm32f10x_rcc.o(.text) for RCC_APB1PeriphClockCmd + bsp_timer.o(.text) refers to stm32f10x_tim.o(.text) for TIM_TimeBaseInit + bsp_timer.o(.text) refers to stm32f10x_gpio.o(.text) for GPIO_Init + bsp_timer.o(.text) refers to misc.o(.text) for NVIC_PriorityGroupConfig + moto.o(.text) refers to stm32f10x_rcc.o(.text) for RCC_APB2PeriphClockCmd + moto.o(.text) refers to stm32f10x_gpio.o(.text) for GPIO_Init + oled.o(.text) refers to bsp_iic.o(.text) for IIC_Start + oled.o(.text) refers to delay.o(.text) for Delay_ms + oled.o(.text) refers to oled.o(.constdata) for F8X16 + oled.o(.text) refers to oled.o(.data) for Hzk + pid.o(.text) refers to _printf_pad.o(.text) for _printf_pre_padding + pid.o(.text) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent + pid.o(.text) refers to _printf_f.o(.ARM.Collect$$_printf_percent$$00000003) for _printf_f + pid.o(.text) refers to printf1.o(x$fpl$printf1) for _printf_fp_dec + pid.o(.text) refers to f2d.o(x$fpl$f2d) for __aeabi_f2d + pid.o(.text) refers to noretval__2sprintf.o(.text) for __2sprintf + pid.o(.text) refers to oled.o(.text) for OLED_ShowString + pid.o(.text) refers to fflt_clz.o(x$fpl$fflt) for __aeabi_i2f + pid.o(.text) refers to fmul.o(x$fpl$fmul) for __aeabi_fmul + pid.o(.text) refers to faddsub_clz.o(x$fpl$fsub) for __aeabi_fsub + pid.o(.text) refers to faddsub_clz.o(x$fpl$fadd) for __aeabi_fadd + pid.o(.text) refers to ffix.o(x$fpl$ffix) for __aeabi_f2iz + pid.o(.text) refers to pid.o(.data) for Proportion + car.o(.text) refers to _printf_pad.o(.text) for _printf_pre_padding + car.o(.text) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent + car.o(.text) refers to _printf_f.o(.ARM.Collect$$_printf_percent$$00000003) for _printf_f + car.o(.text) refers to printf1.o(x$fpl$printf1) for _printf_fp_dec + car.o(.text) refers to stm32f10x_tim.o(.text) for TIM_GetFlagStatus + car.o(.text) refers to bsp_gpio.o(.text) for LED_Flash + car.o(.text) refers to bsp_timer.o(.text) for Read_Encoder + car.o(.text) refers to dflt_clz.o(x$fpl$dflt) for __aeabi_i2d + car.o(.text) refers to dmul.o(x$fpl$dmul) for __aeabi_dmul + car.o(.text) refers to d2f.o(x$fpl$d2f) for __aeabi_d2f + car.o(.text) refers to f2d.o(x$fpl$f2d) for __aeabi_f2d + car.o(.text) refers to noretval__2sprintf.o(.text) for __2sprintf + car.o(.text) refers to oled.o(.text) for OLED_ShowString + car.o(.text) refers to pid.o(.text) for PID_Calc_Left + car.o(.text) refers to car.o(.data) for Encoder_Left + bluetooth.o(.text) refers to stm32f10x_rcc.o(.text) for RCC_APB2PeriphClockCmd + bluetooth.o(.text) refers to stm32f10x_gpio.o(.text) for GPIO_Init + bluetooth.o(.text) refers to stm32f10x_usart.o(.text) for USART_Init + bluetooth.o(.text) refers to misc.o(.text) for NVIC_PriorityGroupConfig + bluetooth.o(.text) refers to bluetooth.o(.data) for rx2_count + main.o(.text) refers to bsp_sys.o(.text) for System_Init + main.o(.text) refers to bluetooth.o(.text) for Bluetooth_Init + main.o(.text) refers to moto.o(.text) for Car_Stop + main.o(.text) refers to delay.o(.text) for Delay_ms + main.o(.text) refers to main.o(.bss) for BLE_RX + __2sprintf.o(.text) refers to _printf_char_common.o(.text) for _printf_char_common + __2sprintf.o(.text) refers to _sputc.o(.text) for _sputc + noretval__2sprintf.o(.text) refers to _printf_char_common.o(.text) for _printf_char_common + noretval__2sprintf.o(.text) refers to _sputc.o(.text) for _sputc + __printf.o(.text) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent + __printf_flags.o(.text) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent + __printf_flags.o(.text) refers to __printf_flags.o(.constdata) for .constdata + __printf_ss.o(.text) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent + __printf_flags_ss.o(.text) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent + __printf_flags_ss.o(.text) refers to __printf_flags_ss.o(.constdata) for .constdata + __printf_wp.o(.text) refers to __printf_wp.o(i._is_digit) for _is_digit + __printf_wp.o(.text) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent + __printf_flags_wp.o(.text) refers to __printf_wp.o(i._is_digit) for _is_digit + __printf_flags_wp.o(.text) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent + __printf_flags_wp.o(.text) refers to __printf_flags_wp.o(.constdata) for .constdata + __printf_ss_wp.o(.text) refers to __printf_wp.o(i._is_digit) for _is_digit + __printf_ss_wp.o(.text) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent + __printf_flags_ss_wp.o(.text) refers to __printf_wp.o(i._is_digit) for _is_digit + __printf_flags_ss_wp.o(.text) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent + __printf_flags_ss_wp.o(.text) refers to __printf_flags_ss_wp.o(.constdata) for .constdata + _printf_f.o(.ARM.Collect$$_printf_percent$$00000003) refers (Weak) to printf1.o(x$fpl$printf1) for _printf_fp_dec + _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) refers (Special) to _printf_percent_end.o(.ARM.Collect$$_printf_percent$$00000017) for _printf_percent_end + __main.o(!!!main) refers to __rtentry.o(.ARM.Collect$$rtentry$$00000000) for __rt_entry + d2f.o(x$fpl$d2f) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp + d2f.o(x$fpl$d2f) refers to fretinf.o(x$fpl$fretinf) for __fpl_fretinf + d2f.o(x$fpl$d2f) refers to dnaninf.o(x$fpl$dnaninf) for __fpl_dnaninf + dflt_clz.o(x$fpl$dfltu) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp + dflt_clz.o(x$fpl$dflt) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp + dflt_clz.o(x$fpl$dfltn) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp + dmul.o(x$fpl$dmul) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp + dmul.o(x$fpl$dmul) refers to dretinf.o(x$fpl$dretinf) for __fpl_dretinf + dmul.o(x$fpl$dmul) refers to dnaninf.o(x$fpl$dnaninf) for __fpl_dnaninf + f2d.o(x$fpl$f2d) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp + f2d.o(x$fpl$f2d) refers to fnaninf.o(x$fpl$fnaninf) for __fpl_fnaninf + f2d.o(x$fpl$f2d) refers to dretinf.o(x$fpl$dretinf) for __fpl_dretinf + faddsub_clz.o(x$fpl$fadd) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp + faddsub_clz.o(x$fpl$fadd) refers to faddsub_clz.o(x$fpl$fsub) for _fsub1 + faddsub_clz.o(x$fpl$fadd) refers to fretinf.o(x$fpl$fretinf) for __fpl_fretinf + faddsub_clz.o(x$fpl$fadd) refers to fnaninf.o(x$fpl$fnaninf) for __fpl_fnaninf + faddsub_clz.o(x$fpl$frsb) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp + faddsub_clz.o(x$fpl$frsb) refers to faddsub_clz.o(x$fpl$fadd) for _fadd1 + faddsub_clz.o(x$fpl$frsb) refers to faddsub_clz.o(x$fpl$fsub) for _fsub1 + faddsub_clz.o(x$fpl$fsub) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp + faddsub_clz.o(x$fpl$fsub) refers to faddsub_clz.o(x$fpl$fadd) for _fadd1 + faddsub_clz.o(x$fpl$fsub) refers to fnaninf.o(x$fpl$fnaninf) for __fpl_fnaninf + ffix.o(x$fpl$ffix) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp + ffix.o(x$fpl$ffix) refers to fnaninf.o(x$fpl$fnaninf) for __fpl_fnaninf + ffix.o(x$fpl$ffixr) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp + ffix.o(x$fpl$ffixr) refers to fnaninf.o(x$fpl$fnaninf) for __fpl_fnaninf + fflt_clz.o(x$fpl$ffltu) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp + fflt_clz.o(x$fpl$fflt) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp + fflt_clz.o(x$fpl$ffltn) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp + fmul.o(x$fpl$fmul) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp + fmul.o(x$fpl$fmul) refers to fretinf.o(x$fpl$fretinf) for __fpl_fretinf + fmul.o(x$fpl$fmul) refers to fnaninf.o(x$fpl$fnaninf) for __fpl_fnaninf + printf1.o(x$fpl$printf1) refers to _printf_fp_dec.o(.text) for _printf_fp_dec_real + __rtentry.o(.ARM.Collect$$rtentry$$00000000) refers (Special) to __rtentry2.o(.ARM.Collect$$rtentry$$0000000A) for __rt_entry_li + __rtentry.o(.ARM.Collect$$rtentry$$00000000) refers (Special) to __rtentry2.o(.ARM.Collect$$rtentry$$0000000D) for __rt_entry_main + __rtentry.o(.ARM.Collect$$rtentry$$00000000) refers (Special) to __rtentry2.o(.ARM.Collect$$rtentry$$0000000C) for __rt_entry_postli_1 + __rtentry.o(.ARM.Collect$$rtentry$$00000000) refers (Special) to __rtentry2.o(.ARM.Collect$$rtentry$$00000009) for __rt_entry_postsh_1 + __rtentry.o(.ARM.Collect$$rtentry$$00000000) refers (Special) to __rtentry2.o(.ARM.Collect$$rtentry$$00000002) for __rt_entry_presh_1 + __rtentry.o(.ARM.Collect$$rtentry$$00000000) refers (Special) to __rtentry4.o(.ARM.Collect$$rtentry$$00000004) for __rt_entry_sh + _printf_fp_dec.o(.text) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp + _printf_fp_dec.o(.text) refers (Special) to lc_numeric_c.o(locale$$code) for _get_lc_numeric + _printf_fp_dec.o(.text) refers to bigflt0.o(.text) for _btod_etento + _printf_fp_dec.o(.text) refers to btod.o(CL$$btod_d2e) for _btod_d2e + _printf_fp_dec.o(.text) refers to btod.o(CL$$btod_ediv) for _btod_ediv + _printf_fp_dec.o(.text) refers to btod.o(CL$$btod_emul) for _btod_emul + _printf_fp_dec.o(.text) refers to lludiv10.o(.text) for _ll_udiv10 + _printf_fp_dec.o(.text) refers to fpclassify.o(i.__ARM_fpclassify) for __ARM_fpclassify + _printf_fp_dec.o(.text) refers to _printf_fp_infnan.o(.text) for _printf_fp_infnan + _printf_fp_dec.o(.text) refers (Weak) to _printf_pad.o(.text) for _printf_pre_padding + _printf_fp_dec.o(.text) refers (Weak) to _printf_pad.o(.text) for _printf_pre_padding + _printf_fp_dec.o(.text) refers to rt_locale_intlibspace.o(.text) for __rt_locale + _printf_fp_dec.o(.text) refers (Weak) to _printf_pad.o(.text) for _printf_post_padding + _printf_char_common.o(.text) refers to __printf_wp.o(.text) for __printf + dnaninf.o(x$fpl$dnaninf) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp + dretinf.o(x$fpl$dretinf) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp + fnaninf.o(x$fpl$fnaninf) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp + fretinf.o(x$fpl$fretinf) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp + __rtentry2.o(.ARM.Collect$$rtentry$$00000008) refers to boardinit2.o(.text) for _platform_post_stackheap_init + __rtentry2.o(.ARM.Collect$$rtentry$$0000000A) refers to libinit.o(.ARM.Collect$$libinit$$00000000) for __rt_lib_init + __rtentry2.o(.ARM.Collect$$rtentry$$0000000B) refers to boardinit3.o(.text) for _platform_post_lib_init + __rtentry2.o(.ARM.Collect$$rtentry$$0000000D) refers to main.o(.text) for main + __rtentry2.o(.ARM.Collect$$rtentry$$0000000D) refers to exit.o(.text) for exit + __rtentry2.o(.ARM.exidx) refers to __rtentry2.o(.ARM.Collect$$rtentry$$00000001) for .ARM.Collect$$rtentry$$00000001 + __rtentry2.o(.ARM.exidx) refers to __rtentry2.o(.ARM.Collect$$rtentry$$00000008) for .ARM.Collect$$rtentry$$00000008 + __rtentry2.o(.ARM.exidx) refers to __rtentry2.o(.ARM.Collect$$rtentry$$0000000A) for .ARM.Collect$$rtentry$$0000000A + __rtentry2.o(.ARM.exidx) refers to __rtentry2.o(.ARM.Collect$$rtentry$$0000000B) for .ARM.Collect$$rtentry$$0000000B + __rtentry2.o(.ARM.exidx) refers to __rtentry2.o(.ARM.Collect$$rtentry$$0000000D) for .ARM.Collect$$rtentry$$0000000D + __rtentry4.o(.ARM.Collect$$rtentry$$00000004) refers to sys_stackheap_outer.o(.text) for __user_setup_stackheap + __rtentry4.o(.ARM.exidx) refers to __rtentry4.o(.ARM.Collect$$rtentry$$00000004) for .ARM.Collect$$rtentry$$00000004 + rt_locale.o(.text) refers to rt_locale.o(.bss) for __rt_locale_data + rt_locale_intlibspace.o(.text) refers to libspace.o(.bss) for __libspace_start + _printf_fp_infnan.o(.text) refers (Weak) to _printf_pad.o(.text) for _printf_pre_padding + _printf_fp_infnan.o(.text) refers (Weak) to _printf_pad.o(.text) for _printf_post_padding + bigflt0.o(.text) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp + bigflt0.o(.text) refers to btod.o(CL$$btod_emul) for _btod_emul + bigflt0.o(.text) refers to btod.o(CL$$btod_ediv) for _btod_ediv + bigflt0.o(.text) refers to bigflt0.o(.constdata) for .constdata + bigflt0.o(.constdata) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp + btod.o(CL$$btod_d2e) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp + btod.o(CL$$btod_d2e) refers to btod.o(CL$$btod_d2e_norm_op1) for _d2e_norm_op1 + btod.o(CL$$btod_d2e_norm_op1) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp + btod.o(CL$$btod_d2e_norm_op1) refers to btod.o(CL$$btod_d2e_denorm_low) for _d2e_denorm_low + btod.o(CL$$btod_d2e_denorm_low) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp + btod.o(CL$$btod_emul) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp + btod.o(CL$$btod_emul) refers to btod.o(CL$$btod_mult_common) for __btod_mult_common + btod.o(CL$$btod_emul) refers to btod.o(CL$$btod_e2e) for _e2e + btod.o(CL$$btod_ediv) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp + btod.o(CL$$btod_ediv) refers to btod.o(CL$$btod_div_common) for __btod_div_common + btod.o(CL$$btod_ediv) refers to btod.o(CL$$btod_e2e) for _e2e + btod.o(CL$$btod_emuld) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp + btod.o(CL$$btod_emuld) refers to btod.o(CL$$btod_mult_common) for __btod_mult_common + btod.o(CL$$btod_emuld) refers to btod.o(CL$$btod_e2d) for _e2d + btod.o(CL$$btod_edivd) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp + btod.o(CL$$btod_edivd) refers to btod.o(CL$$btod_div_common) for __btod_div_common + btod.o(CL$$btod_edivd) refers to btod.o(CL$$btod_e2d) for _e2d + btod.o(CL$$btod_e2e) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp + btod.o(CL$$btod_e2d) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp + btod.o(CL$$btod_e2d) refers to btod.o(CL$$btod_e2e) for _e2e + btod.o(CL$$btod_mult_common) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp + btod.o(CL$$btod_div_common) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp + lc_numeric_c.o(locale$$data) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000016) for __rt_lib_init_lc_numeric_2 + lc_numeric_c.o(locale$$code) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000016) for __rt_lib_init_lc_numeric_2 + lc_numeric_c.o(locale$$code) refers to strcmpv7m.o(.text) for strcmp + lc_numeric_c.o(locale$$code) refers to lc_numeric_c.o(locale$$data) for __lcnum_c_name + istatus.o(x$fpl$ieeestatus) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp + fpclassify.o(i.__ARM_fpclassify) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp + libspace.o(.text) refers to libspace.o(.bss) for __libspace_start + sys_stackheap_outer.o(.text) refers to libspace.o(.text) for __user_perproc_libspace + sys_stackheap_outer.o(.text) refers to startup_stm32f10x_hd.o(.text) for __user_initial_stackheap + exit.o(.text) refers to rtexit.o(.ARM.Collect$$rtexit$$00000000) for __rt_exit + libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$0000002E) for __rt_lib_init_alloca_1 + libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$0000002C) for __rt_lib_init_argv_1 + libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$0000001B) for __rt_lib_init_atexit_1 + libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000021) for __rt_lib_init_clock_1 + libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000032) for __rt_lib_init_cpp_1 + libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000030) for __rt_lib_init_exceptions_1 + libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000002) for __rt_lib_init_fp_1 + libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$0000001F) for __rt_lib_init_fp_trap_1 + libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000023) for __rt_lib_init_getenv_1 + libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$0000000A) for __rt_lib_init_heap_1 + libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000011) for __rt_lib_init_lc_collate_1 + libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000013) for __rt_lib_init_lc_ctype_1 + libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000015) for __rt_lib_init_lc_monetary_1 + libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000017) for __rt_lib_init_lc_numeric_1 + libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000019) for __rt_lib_init_lc_time_1 + libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000004) for __rt_lib_init_preinit_1 + libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$0000000E) for __rt_lib_init_rand_1 + libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000033) for __rt_lib_init_return + libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$0000001D) for __rt_lib_init_signal_1 + libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000025) for __rt_lib_init_stdio_1 + libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$0000000C) for __rt_lib_init_user_alloc_1 + libinit2.o(.ARM.Collect$$libinit$$0000000F) refers (Weak) to rt_locale_intlibspace.o(.text) for __rt_locale + libinit2.o(.ARM.Collect$$libinit$$00000010) refers to libinit2.o(.ARM.Collect$$libinit$$0000000F) for .ARM.Collect$$libinit$$0000000F + libinit2.o(.ARM.Collect$$libinit$$00000012) refers to libinit2.o(.ARM.Collect$$libinit$$0000000F) for .ARM.Collect$$libinit$$0000000F + libinit2.o(.ARM.Collect$$libinit$$00000014) refers to libinit2.o(.ARM.Collect$$libinit$$0000000F) for .ARM.Collect$$libinit$$0000000F + libinit2.o(.ARM.Collect$$libinit$$00000016) refers to libinit2.o(.ARM.Collect$$libinit$$0000000F) for .ARM.Collect$$libinit$$0000000F + libinit2.o(.ARM.Collect$$libinit$$00000016) refers (Weak) to lc_numeric_c.o(locale$$code) for _get_lc_numeric + libinit2.o(.ARM.Collect$$libinit$$00000018) refers to libinit2.o(.ARM.Collect$$libinit$$0000000F) for .ARM.Collect$$libinit$$0000000F + libinit2.o(.ARM.Collect$$libinit$$00000026) refers to argv_veneer.o(.emb_text) for __ARM_argv_veneer + libinit2.o(.ARM.Collect$$libinit$$00000027) refers to argv_veneer.o(.emb_text) for __ARM_argv_veneer + rtexit.o(.ARM.Collect$$rtexit$$00000000) refers (Special) to rtexit2.o(.ARM.Collect$$rtexit$$00000004) for __rt_exit_exit + rtexit.o(.ARM.Collect$$rtexit$$00000000) refers (Special) to rtexit2.o(.ARM.Collect$$rtexit$$00000003) for __rt_exit_ls + rtexit.o(.ARM.Collect$$rtexit$$00000000) refers (Special) to rtexit2.o(.ARM.Collect$$rtexit$$00000002) for __rt_exit_prels_1 + rtexit.o(.ARM.exidx) refers (Special) to rtexit2.o(.ARM.Collect$$rtexit$$00000004) for __rt_exit_exit + rtexit.o(.ARM.exidx) refers (Special) to rtexit2.o(.ARM.Collect$$rtexit$$00000003) for __rt_exit_ls + rtexit.o(.ARM.exidx) refers (Special) to rtexit2.o(.ARM.Collect$$rtexit$$00000002) for __rt_exit_prels_1 + rtexit.o(.ARM.exidx) refers to rtexit.o(.ARM.Collect$$rtexit$$00000000) for .ARM.Collect$$rtexit$$00000000 + argv_veneer.o(.emb_text) refers to no_argv.o(.text) for __ARM_get_argv + rtexit2.o(.ARM.Collect$$rtexit$$00000003) refers to libshutdown.o(.ARM.Collect$$libshutdown$$00000000) for __rt_lib_shutdown + rtexit2.o(.ARM.Collect$$rtexit$$00000004) refers to sys_exit.o(.text) for _sys_exit + rtexit2.o(.ARM.exidx) refers to rtexit2.o(.ARM.Collect$$rtexit$$00000001) for .ARM.Collect$$rtexit$$00000001 + rtexit2.o(.ARM.exidx) refers to rtexit2.o(.ARM.Collect$$rtexit$$00000003) for .ARM.Collect$$rtexit$$00000003 + rtexit2.o(.ARM.exidx) refers to rtexit2.o(.ARM.Collect$$rtexit$$00000004) for .ARM.Collect$$rtexit$$00000004 + _get_argv_nomalloc.o(.text) refers (Special) to hrguard.o(.text) for __heap_region$guard + _get_argv_nomalloc.o(.text) refers to defsig_rtmem_outer.o(.text) for __rt_SIGRTMEM + _get_argv_nomalloc.o(.text) refers to sys_command.o(.text) for _sys_command_string + sys_command.o(.text) refers (Special) to use_no_semi.o(.text) for __I$use$semihosting + sys_command.o(.text) refers (Special) to indicate_semi.o(.text) for __semihosting_library_function + sys_exit.o(.text) refers (Special) to use_no_semi.o(.text) for __I$use$semihosting + sys_exit.o(.text) refers (Special) to indicate_semi.o(.text) for __semihosting_library_function + defsig_rtmem_outer.o(.text) refers to defsig_rtmem_inner.o(.text) for __rt_SIGRTMEM_inner + defsig_rtmem_outer.o(.text) refers to defsig_exit.o(.text) for __sig_exit + defsig_rtmem_formal.o(.text) refers to rt_raise.o(.text) for __rt_raise + libshutdown.o(.ARM.Collect$$libshutdown$$00000000) refers (Special) to libshutdown2.o(.ARM.Collect$$libshutdown$$00000002) for __rt_lib_shutdown_cpp_1 + libshutdown.o(.ARM.Collect$$libshutdown$$00000000) refers (Special) to libshutdown2.o(.ARM.Collect$$libshutdown$$00000007) for __rt_lib_shutdown_fp_trap_1 + libshutdown.o(.ARM.Collect$$libshutdown$$00000000) refers (Special) to libshutdown2.o(.ARM.Collect$$libshutdown$$0000000F) for __rt_lib_shutdown_heap_1 + libshutdown.o(.ARM.Collect$$libshutdown$$00000000) refers (Special) to libshutdown2.o(.ARM.Collect$$libshutdown$$00000010) for __rt_lib_shutdown_return + libshutdown.o(.ARM.Collect$$libshutdown$$00000000) refers (Special) to libshutdown2.o(.ARM.Collect$$libshutdown$$0000000A) for __rt_lib_shutdown_signal_1 + libshutdown.o(.ARM.Collect$$libshutdown$$00000000) refers (Special) to libshutdown2.o(.ARM.Collect$$libshutdown$$00000004) for __rt_lib_shutdown_stdio_1 + libshutdown.o(.ARM.Collect$$libshutdown$$00000000) refers (Special) to libshutdown2.o(.ARM.Collect$$libshutdown$$0000000C) for __rt_lib_shutdown_user_alloc_1 + rt_raise.o(.text) refers to __raise.o(.text) for __raise + rt_raise.o(.text) refers to sys_exit.o(.text) for _sys_exit + defsig_exit.o(.text) refers to sys_exit.o(.text) for _sys_exit + defsig_rtmem_inner.o(.text) refers to defsig_general.o(.text) for __default_signal_display + __raise.o(.text) refers to defsig.o(CL$$defsig) for __default_signal_handler + defsig_general.o(.text) refers to sys_wrch.o(.text) for _ttywrch + sys_wrch.o(.text) refers (Special) to use_no_semi.o(.text) for __I$use$semihosting + sys_wrch.o(.text) refers (Special) to indicate_semi.o(.text) for __semihosting_library_function + defsig.o(CL$$defsig) refers to defsig_rtmem_inner.o(.text) for __rt_SIGRTMEM_inner + defsig_abrt_inner.o(.text) refers to defsig_general.o(.text) for __default_signal_display + defsig_fpe_inner.o(.text) refers to defsig_general.o(.text) for __default_signal_display + defsig_rtred_inner.o(.text) refers to defsig_general.o(.text) for __default_signal_display + defsig_stak_inner.o(.text) refers to defsig_general.o(.text) for __default_signal_display + defsig_pvfn_inner.o(.text) refers to defsig_general.o(.text) for __default_signal_display + defsig_cppl_inner.o(.text) refers to defsig_general.o(.text) for __default_signal_display + defsig_segv_inner.o(.text) refers to defsig_general.o(.text) for __default_signal_display + defsig_other.o(.text) refers to defsig_general.o(.text) for __default_signal_display + + +============================================================================== + +Removing Unused input sections from the image. + + Removing core_cm3.o(.emb_text), (32 bytes). + Removing stm32f10x_adc.o(.text), (1102 bytes). + Removing stm32f10x_bkp.o(.text), (196 bytes). + Removing stm32f10x_can.o(.text), (2544 bytes). + Removing stm32f10x_cec.o(.text), (288 bytes). + Removing stm32f10x_crc.o(.text), (72 bytes). + Removing stm32f10x_dac.o(.text), (396 bytes). + Removing stm32f10x_dbgmcu.o(.text), (48 bytes). + Removing stm32f10x_dma.o(.text), (596 bytes). + Removing stm32f10x_exti.o(.text), (284 bytes). + Removing stm32f10x_flash.o(.text), (1468 bytes). + Removing stm32f10x_fsmc.o(.text), (1548 bytes). + Removing stm32f10x_i2c.o(.text), (1028 bytes). + Removing stm32f10x_iwdg.o(.text), (64 bytes). + Removing stm32f10x_pwr.o(.text), (204 bytes). + Removing stm32f10x_rtc.o(.text), (328 bytes). + Removing stm32f10x_sdio.o(.text), (468 bytes). + Removing stm32f10x_spi.o(.text), (780 bytes). + Removing stm32f10x_wwdg.o(.text), (136 bytes). + +19 unused section(s) (total 11582 bytes) removed from the image. + +============================================================================== + +Image Symbol Table + + Local Symbols + + Symbol Name Value Ov Type Size Object(Section) + + ../clib/angel/boardlib.s 0x00000000 Number 0 boardinit1.o ABSOLUTE + ../clib/angel/boardlib.s 0x00000000 Number 0 boardinit2.o ABSOLUTE + ../clib/angel/boardlib.s 0x00000000 Number 0 boardshut.o ABSOLUTE + ../clib/angel/boardlib.s 0x00000000 Number 0 boardinit3.o ABSOLUTE + ../clib/angel/dczerorl2.s 0x00000000 Number 0 __dczerorl2.o ABSOLUTE + ../clib/angel/handlers.s 0x00000000 Number 0 __scatter_zi.o ABSOLUTE + ../clib/angel/kernel.s 0x00000000 Number 0 __rtentry.o ABSOLUTE + ../clib/angel/kernel.s 0x00000000 Number 0 __rtentry2.o ABSOLUTE + ../clib/angel/kernel.s 0x00000000 Number 0 rtexit2.o ABSOLUTE + ../clib/angel/kernel.s 0x00000000 Number 0 rtexit.o ABSOLUTE + ../clib/angel/kernel.s 0x00000000 Number 0 __rtentry4.o ABSOLUTE + ../clib/angel/rt.s 0x00000000 Number 0 rt_locale.o ABSOLUTE + ../clib/angel/rt.s 0x00000000 Number 0 rt_locale_intlibspace.o ABSOLUTE + ../clib/angel/rt.s 0x00000000 Number 0 rt_raise.o ABSOLUTE + ../clib/angel/scatter.s 0x00000000 Number 0 __scatter.o ABSOLUTE + ../clib/angel/startup.s 0x00000000 Number 0 __main.o ABSOLUTE + ../clib/angel/sys.s 0x00000000 Number 0 use_no_semi.o ABSOLUTE + ../clib/angel/sys.s 0x00000000 Number 0 indicate_semi.o ABSOLUTE + ../clib/angel/sys.s 0x00000000 Number 0 sys_stackheap_outer.o ABSOLUTE + ../clib/angel/sys.s 0x00000000 Number 0 libspace.o ABSOLUTE + ../clib/angel/sysapp.c 0x00000000 Number 0 sys_command.o ABSOLUTE + ../clib/angel/sysapp.c 0x00000000 Number 0 sys_exit.o ABSOLUTE + ../clib/angel/sysapp.c 0x00000000 Number 0 sys_wrch.o ABSOLUTE + ../clib/armsys.c 0x00000000 Number 0 no_argv.o ABSOLUTE + ../clib/armsys.c 0x00000000 Number 0 argv_veneer.o ABSOLUTE + ../clib/armsys.c 0x00000000 Number 0 argv_veneer.o ABSOLUTE + ../clib/armsys.c 0x00000000 Number 0 _get_argv_nomalloc.o ABSOLUTE + ../clib/bigflt.c 0x00000000 Number 0 bigflt0.o ABSOLUTE + ../clib/btod.s 0x00000000 Number 0 btod.o ABSOLUTE + ../clib/heapalloc.c 0x00000000 Number 0 hrguard.o ABSOLUTE + ../clib/heapaux.c 0x00000000 Number 0 heapauxi.o ABSOLUTE + ../clib/libinit.s 0x00000000 Number 0 libinit2.o ABSOLUTE + ../clib/libinit.s 0x00000000 Number 0 libshutdown2.o ABSOLUTE + ../clib/libinit.s 0x00000000 Number 0 libshutdown.o ABSOLUTE + ../clib/libinit.s 0x00000000 Number 0 libinit.o ABSOLUTE + ../clib/locale.s 0x00000000 Number 0 lc_numeric_c.o ABSOLUTE + ../clib/longlong.s 0x00000000 Number 0 lludiv10.o ABSOLUTE + ../clib/memcpset.s 0x00000000 Number 0 strcmpv7m.o ABSOLUTE + ../clib/misc.s 0x00000000 Number 0 printf_stubs.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 _printf_fp_dec.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 _printf_char_common.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 _sputc.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 __printf_flags_ss_wp.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 __printf_flags_wp.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 __printf_wp.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 __printf.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 __printf_flags_ss.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 __printf_ss.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 __printf_flags.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 _printf_fp_infnan.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 _printf_pad.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 noretval__2sprintf.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 __2sprintf.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 __printf_ss_wp.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 __printf_nopercent.o ABSOLUTE + ../clib/printf_percent.s 0x00000000 Number 0 _printf_percent_end.o ABSOLUTE + ../clib/printf_percent.s 0x00000000 Number 0 _printf_f.o ABSOLUTE + ../clib/printf_percent.s 0x00000000 Number 0 _printf_percent.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_other.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_general.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_rtmem_outer.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 __raise.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_segv_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_cppl_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_rtmem_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_exit.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_pvfn_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_stak_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_rtred_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_fpe_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_rtmem_formal.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_abrt_inner.o ABSOLUTE + ../clib/signal.s 0x00000000 Number 0 defsig.o ABSOLUTE + ../clib/stdlib.c 0x00000000 Number 0 exit.o ABSOLUTE + ../fplib/d2f.s 0x00000000 Number 0 d2f.o ABSOLUTE + ../fplib/dflt.s 0x00000000 Number 0 dflt_clz.o ABSOLUTE + ../fplib/dmul.s 0x00000000 Number 0 dmul.o ABSOLUTE + ../fplib/dnaninf.s 0x00000000 Number 0 dnaninf.o ABSOLUTE + ../fplib/dretinf.s 0x00000000 Number 0 dretinf.o ABSOLUTE + ../fplib/f2d.s 0x00000000 Number 0 f2d.o ABSOLUTE + ../fplib/faddsub.s 0x00000000 Number 0 faddsub_clz.o ABSOLUTE + ../fplib/ffix.s 0x00000000 Number 0 ffix.o ABSOLUTE + ../fplib/fflt.s 0x00000000 Number 0 fflt_clz.o ABSOLUTE + ../fplib/fmul.s 0x00000000 Number 0 fmul.o ABSOLUTE + ../fplib/fnaninf.s 0x00000000 Number 0 fnaninf.o ABSOLUTE + ../fplib/fpinit.s 0x00000000 Number 0 fpinit.o ABSOLUTE + ../fplib/fretinf.s 0x00000000 Number 0 fretinf.o ABSOLUTE + ../fplib/istatus.s 0x00000000 Number 0 istatus.o ABSOLUTE + ../fplib/printf1.s 0x00000000 Number 0 printf1.o ABSOLUTE + ../fplib/usenofp.s 0x00000000 Number 0 usenofp.o ABSOLUTE + ../mathlib/fpclassify.c 0x00000000 Number 0 fpclassify.o ABSOLUTE + ..\DRV\bsp_GPIO.c 0x00000000 Number 0 bsp_gpio.o ABSOLUTE + ..\DRV\bsp_NVIC.C 0x00000000 Number 0 bsp_nvic.o ABSOLUTE + ..\DRV\bsp_iic.c 0x00000000 Number 0 bsp_iic.o ABSOLUTE + ..\DRV\bsp_sys.c 0x00000000 Number 0 bsp_sys.o ABSOLUTE + ..\DRV\bsp_timer.c 0x00000000 Number 0 bsp_timer.o ABSOLUTE + ..\DRV\bsp_usart.c 0x00000000 Number 0 bsp_usart.o ABSOLUTE + ..\DRV\delay.c 0x00000000 Number 0 delay.o ABSOLUTE + ..\HARDWARE\MOTO\bluetooth.c 0x00000000 Number 0 bluetooth.o ABSOLUTE + ..\HARDWARE\MOTO\car.c 0x00000000 Number 0 car.o ABSOLUTE + ..\HARDWARE\MOTO\moto.c 0x00000000 Number 0 moto.o ABSOLUTE + ..\HARDWARE\OLED\oled.c 0x00000000 Number 0 oled.o ABSOLUTE + ..\HARDWARE\PID\pid.c 0x00000000 Number 0 pid.o ABSOLUTE + ..\Libraries\CMSIS\core_cm3.c 0x00000000 Number 0 core_cm3.o ABSOLUTE + ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s 0x00000000 Number 0 startup_stm32f10x_hd.o ABSOLUTE + ..\Libraries\CMSIS\system_stm32f10x.c 0x00000000 Number 0 system_stm32f10x.o ABSOLUTE + ..\Libraries\FWlib\src\misc.c 0x00000000 Number 0 misc.o ABSOLUTE + ..\Libraries\FWlib\src\stm32f10x_adc.c 0x00000000 Number 0 stm32f10x_adc.o ABSOLUTE + ..\Libraries\FWlib\src\stm32f10x_bkp.c 0x00000000 Number 0 stm32f10x_bkp.o ABSOLUTE + ..\Libraries\FWlib\src\stm32f10x_can.c 0x00000000 Number 0 stm32f10x_can.o ABSOLUTE + ..\Libraries\FWlib\src\stm32f10x_cec.c 0x00000000 Number 0 stm32f10x_cec.o ABSOLUTE + ..\Libraries\FWlib\src\stm32f10x_crc.c 0x00000000 Number 0 stm32f10x_crc.o ABSOLUTE + ..\Libraries\FWlib\src\stm32f10x_dac.c 0x00000000 Number 0 stm32f10x_dac.o ABSOLUTE + ..\Libraries\FWlib\src\stm32f10x_dbgmcu.c 0x00000000 Number 0 stm32f10x_dbgmcu.o ABSOLUTE + ..\Libraries\FWlib\src\stm32f10x_dma.c 0x00000000 Number 0 stm32f10x_dma.o ABSOLUTE + ..\Libraries\FWlib\src\stm32f10x_exti.c 0x00000000 Number 0 stm32f10x_exti.o ABSOLUTE + ..\Libraries\FWlib\src\stm32f10x_flash.c 0x00000000 Number 0 stm32f10x_flash.o ABSOLUTE + ..\Libraries\FWlib\src\stm32f10x_fsmc.c 0x00000000 Number 0 stm32f10x_fsmc.o ABSOLUTE + ..\Libraries\FWlib\src\stm32f10x_gpio.c 0x00000000 Number 0 stm32f10x_gpio.o ABSOLUTE + ..\Libraries\FWlib\src\stm32f10x_i2c.c 0x00000000 Number 0 stm32f10x_i2c.o ABSOLUTE + ..\Libraries\FWlib\src\stm32f10x_iwdg.c 0x00000000 Number 0 stm32f10x_iwdg.o ABSOLUTE + ..\Libraries\FWlib\src\stm32f10x_pwr.c 0x00000000 Number 0 stm32f10x_pwr.o ABSOLUTE + ..\Libraries\FWlib\src\stm32f10x_rcc.c 0x00000000 Number 0 stm32f10x_rcc.o ABSOLUTE + ..\Libraries\FWlib\src\stm32f10x_rtc.c 0x00000000 Number 0 stm32f10x_rtc.o ABSOLUTE + ..\Libraries\FWlib\src\stm32f10x_sdio.c 0x00000000 Number 0 stm32f10x_sdio.o ABSOLUTE + ..\Libraries\FWlib\src\stm32f10x_spi.c 0x00000000 Number 0 stm32f10x_spi.o ABSOLUTE + ..\Libraries\FWlib\src\stm32f10x_tim.c 0x00000000 Number 0 stm32f10x_tim.o ABSOLUTE + ..\Libraries\FWlib\src\stm32f10x_usart.c 0x00000000 Number 0 stm32f10x_usart.o ABSOLUTE + ..\Libraries\FWlib\src\stm32f10x_wwdg.c 0x00000000 Number 0 stm32f10x_wwdg.o ABSOLUTE + ..\User\main.c 0x00000000 Number 0 main.o ABSOLUTE + ..\User\stm32f10x_it.c 0x00000000 Number 0 stm32f10x_it.o ABSOLUTE + ..\\Libraries\\CMSIS\\core_cm3.c 0x00000000 Number 0 core_cm3.o ABSOLUTE + dc.s 0x00000000 Number 0 dc.o ABSOLUTE + RESET 0x08000000 Section 304 startup_stm32f10x_hd.o(RESET) + !!!main 0x08000130 Section 8 __main.o(!!!main) + !!!scatter 0x08000138 Section 52 __scatter.o(!!!scatter) + !!dczerorl2 0x0800016c Section 90 __dczerorl2.o(!!dczerorl2) + !!handler_zi 0x080001c8 Section 28 __scatter_zi.o(!!handler_zi) + .ARM.Collect$$_printf_percent$$00000000 0x080001e4 Section 0 _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) + .ARM.Collect$$_printf_percent$$00000003 0x080001e4 Section 6 _printf_f.o(.ARM.Collect$$_printf_percent$$00000003) + .ARM.Collect$$_printf_percent$$00000017 0x080001ea Section 4 _printf_percent_end.o(.ARM.Collect$$_printf_percent$$00000017) + .ARM.Collect$$libinit$$00000000 0x080001ee Section 2 libinit.o(.ARM.Collect$$libinit$$00000000) + .ARM.Collect$$libinit$$00000002 0x080001f0 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000002) + .ARM.Collect$$libinit$$00000004 0x080001f0 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000004) + .ARM.Collect$$libinit$$0000000A 0x080001f0 Section 0 libinit2.o(.ARM.Collect$$libinit$$0000000A) + .ARM.Collect$$libinit$$0000000C 0x080001f0 Section 0 libinit2.o(.ARM.Collect$$libinit$$0000000C) + .ARM.Collect$$libinit$$0000000E 0x080001f0 Section 0 libinit2.o(.ARM.Collect$$libinit$$0000000E) + .ARM.Collect$$libinit$$0000000F 0x080001f0 Section 6 libinit2.o(.ARM.Collect$$libinit$$0000000F) + .ARM.Collect$$libinit$$00000011 0x080001f6 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000011) + .ARM.Collect$$libinit$$00000013 0x080001f6 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000013) + .ARM.Collect$$libinit$$00000015 0x080001f6 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000015) + .ARM.Collect$$libinit$$00000016 0x080001f6 Section 10 libinit2.o(.ARM.Collect$$libinit$$00000016) + .ARM.Collect$$libinit$$00000017 0x08000200 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000017) + .ARM.Collect$$libinit$$00000019 0x08000200 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000019) + .ARM.Collect$$libinit$$0000001B 0x08000200 Section 0 libinit2.o(.ARM.Collect$$libinit$$0000001B) + .ARM.Collect$$libinit$$0000001D 0x08000200 Section 0 libinit2.o(.ARM.Collect$$libinit$$0000001D) + .ARM.Collect$$libinit$$0000001F 0x08000200 Section 0 libinit2.o(.ARM.Collect$$libinit$$0000001F) + .ARM.Collect$$libinit$$00000021 0x08000200 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000021) + .ARM.Collect$$libinit$$00000023 0x08000200 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000023) + .ARM.Collect$$libinit$$00000025 0x08000200 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000025) + .ARM.Collect$$libinit$$0000002C 0x08000200 Section 0 libinit2.o(.ARM.Collect$$libinit$$0000002C) + .ARM.Collect$$libinit$$0000002E 0x08000200 Section 0 libinit2.o(.ARM.Collect$$libinit$$0000002E) + .ARM.Collect$$libinit$$00000030 0x08000200 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000030) + .ARM.Collect$$libinit$$00000032 0x08000200 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000032) + .ARM.Collect$$libinit$$00000033 0x08000200 Section 2 libinit2.o(.ARM.Collect$$libinit$$00000033) + .ARM.Collect$$libshutdown$$00000000 0x08000202 Section 2 libshutdown.o(.ARM.Collect$$libshutdown$$00000000) + .ARM.Collect$$libshutdown$$00000002 0x08000204 Section 0 libshutdown2.o(.ARM.Collect$$libshutdown$$00000002) + .ARM.Collect$$libshutdown$$00000004 0x08000204 Section 0 libshutdown2.o(.ARM.Collect$$libshutdown$$00000004) + .ARM.Collect$$libshutdown$$00000007 0x08000204 Section 0 libshutdown2.o(.ARM.Collect$$libshutdown$$00000007) + .ARM.Collect$$libshutdown$$0000000A 0x08000204 Section 0 libshutdown2.o(.ARM.Collect$$libshutdown$$0000000A) + .ARM.Collect$$libshutdown$$0000000C 0x08000204 Section 0 libshutdown2.o(.ARM.Collect$$libshutdown$$0000000C) + .ARM.Collect$$libshutdown$$0000000F 0x08000204 Section 0 libshutdown2.o(.ARM.Collect$$libshutdown$$0000000F) + .ARM.Collect$$libshutdown$$00000010 0x08000204 Section 2 libshutdown2.o(.ARM.Collect$$libshutdown$$00000010) + .ARM.Collect$$rtentry$$00000000 0x08000206 Section 0 __rtentry.o(.ARM.Collect$$rtentry$$00000000) + .ARM.Collect$$rtentry$$00000002 0x08000206 Section 0 __rtentry2.o(.ARM.Collect$$rtentry$$00000002) + .ARM.Collect$$rtentry$$00000004 0x08000206 Section 6 __rtentry4.o(.ARM.Collect$$rtentry$$00000004) + .ARM.Collect$$rtentry$$00000009 0x0800020c Section 0 __rtentry2.o(.ARM.Collect$$rtentry$$00000009) + .ARM.Collect$$rtentry$$0000000A 0x0800020c Section 4 __rtentry2.o(.ARM.Collect$$rtentry$$0000000A) + .ARM.Collect$$rtentry$$0000000C 0x08000210 Section 0 __rtentry2.o(.ARM.Collect$$rtentry$$0000000C) + .ARM.Collect$$rtentry$$0000000D 0x08000210 Section 8 __rtentry2.o(.ARM.Collect$$rtentry$$0000000D) + .ARM.Collect$$rtexit$$00000000 0x08000218 Section 2 rtexit.o(.ARM.Collect$$rtexit$$00000000) + .ARM.Collect$$rtexit$$00000002 0x0800021a Section 0 rtexit2.o(.ARM.Collect$$rtexit$$00000002) + .ARM.Collect$$rtexit$$00000003 0x0800021a Section 4 rtexit2.o(.ARM.Collect$$rtexit$$00000003) + .ARM.Collect$$rtexit$$00000004 0x0800021e Section 6 rtexit2.o(.ARM.Collect$$rtexit$$00000004) + .text 0x08000224 Section 64 startup_stm32f10x_hd.o(.text) + .text 0x08000264 Section 0 system_stm32f10x.o(.text) + SetSysClockTo72 0x08000265 Thumb Code 214 system_stm32f10x.o(.text) + SetSysClock 0x0800033b Thumb Code 8 system_stm32f10x.o(.text) + .text 0x08000444 Section 0 misc.o(.text) + .text 0x08000520 Section 0 stm32f10x_gpio.o(.text) + .text 0x0800087c Section 0 stm32f10x_rcc.o(.text) + .text 0x08000c20 Section 0 stm32f10x_tim.o(.text) + TI4_Config 0x080010c7 Thumb Code 130 stm32f10x_tim.o(.text) + TI3_Config 0x0800115b Thumb Code 122 stm32f10x_tim.o(.text) + TI2_Config 0x080011ef Thumb Code 130 stm32f10x_tim.o(.text) + TI1_Config 0x08001283 Thumb Code 108 stm32f10x_tim.o(.text) + .text 0x08001a3c Section 0 stm32f10x_usart.o(.text) + .text 0x08001e44 Section 0 bsp_sys.o(.text) + .text 0x08001f70 Section 0 bsp_gpio.o(.text) + .text 0x08001fd8 Section 0 bsp_nvic.o(.text) + .text 0x08001fdc Section 0 bsp_usart.o(.text) + .text 0x08002148 Section 0 delay.o(.text) + .text 0x080021f4 Section 0 bsp_iic.o(.text) + .text 0x0800240c Section 0 bsp_timer.o(.text) + .text 0x0800274c Section 0 moto.o(.text) + .text 0x08002850 Section 0 oled.o(.text) + .text 0x08002d4c Section 0 pid.o(.text) + .text 0x08002ecc Section 0 car.o(.text) + .text 0x08003114 Section 0 bluetooth.o(.text) + .text 0x0800326c Section 0 main.o(.text) + .text 0x08003350 Section 0 stm32f10x_it.o(.text) + .text 0x08003368 Section 0 noretval__2sprintf.o(.text) + .text 0x08003390 Section 0 _printf_pad.o(.text) + .text 0x080033de Section 0 __printf_wp.o(.text) + .text 0x080034ec Section 0 heapauxi.o(.text) + .text 0x080034f2 Section 0 _printf_fp_dec.o(.text) + _fp_digits 0x080034f5 Thumb Code 428 _printf_fp_dec.o(.text) + .text 0x0800390c Section 0 _printf_char_common.o(.text) + _printf_input_char 0x0800390d Thumb Code 10 _printf_char_common.o(.text) + .text 0x0800393c Section 0 _sputc.o(.text) + .text 0x08003948 Section 8 rt_locale_intlibspace.o(.text) + .text 0x08003950 Section 138 lludiv10.o(.text) + .text 0x080039dc Section 0 _printf_fp_infnan.o(.text) + .text 0x08003a5c Section 0 bigflt0.o(.text) + .text 0x08003b38 Section 8 libspace.o(.text) + .text 0x08003b40 Section 74 sys_stackheap_outer.o(.text) + .text 0x08003b8a Section 0 exit.o(.text) + .text 0x08003b9c Section 128 strcmpv7m.o(.text) + .text 0x08003c1c Section 0 sys_exit.o(.text) + .text 0x08003c28 Section 2 use_no_semi.o(.text) + .text 0x08003c2a Section 0 indicate_semi.o(.text) + CL$$btod_d2e 0x08003c2a Section 62 btod.o(CL$$btod_d2e) + CL$$btod_d2e_denorm_low 0x08003c68 Section 70 btod.o(CL$$btod_d2e_denorm_low) + CL$$btod_d2e_norm_op1 0x08003cae Section 96 btod.o(CL$$btod_d2e_norm_op1) + CL$$btod_div_common 0x08003d0e Section 824 btod.o(CL$$btod_div_common) + CL$$btod_e2e 0x08004046 Section 198 btod.o(CL$$btod_e2e) + CL$$btod_ediv 0x0800410c Section 40 btod.o(CL$$btod_ediv) + CL$$btod_emul 0x08004134 Section 40 btod.o(CL$$btod_emul) + CL$$btod_mult_common 0x0800415c Section 580 btod.o(CL$$btod_mult_common) + i.__ARM_fpclassify 0x080043a0 Section 0 fpclassify.o(i.__ARM_fpclassify) + i._is_digit 0x080043c8 Section 0 __printf_wp.o(i._is_digit) + locale$$code 0x080043d8 Section 44 lc_numeric_c.o(locale$$code) + x$fpl$d2f 0x08004404 Section 98 d2f.o(x$fpl$d2f) + x$fpl$dflt 0x08004466 Section 46 dflt_clz.o(x$fpl$dflt) + x$fpl$dmul 0x08004494 Section 340 dmul.o(x$fpl$dmul) + x$fpl$dnaninf 0x080045e8 Section 156 dnaninf.o(x$fpl$dnaninf) + x$fpl$dretinf 0x08004684 Section 12 dretinf.o(x$fpl$dretinf) + x$fpl$f2d 0x08004690 Section 86 f2d.o(x$fpl$f2d) + x$fpl$fadd 0x080046e8 Section 196 faddsub_clz.o(x$fpl$fadd) + _fadd1 0x080046f7 Thumb Code 0 faddsub_clz.o(x$fpl$fadd) + x$fpl$ffix 0x080047ac Section 54 ffix.o(x$fpl$ffix) + x$fpl$fflt 0x080047e4 Section 48 fflt_clz.o(x$fpl$fflt) + x$fpl$fmul 0x08004814 Section 258 fmul.o(x$fpl$fmul) + x$fpl$fnaninf 0x08004916 Section 140 fnaninf.o(x$fpl$fnaninf) + x$fpl$fretinf 0x080049a2 Section 10 fretinf.o(x$fpl$fretinf) + x$fpl$fsub 0x080049ac Section 234 faddsub_clz.o(x$fpl$fsub) + _fsub1 0x080049bb Thumb Code 0 faddsub_clz.o(x$fpl$fsub) + x$fpl$printf1 0x08004a96 Section 4 printf1.o(x$fpl$printf1) + .constdata 0x08004a9a Section 2072 oled.o(.constdata) + x$fpl$usenofp 0x08004a9a Section 0 usenofp.o(x$fpl$usenofp) + .constdata 0x080052b4 Section 148 bigflt0.o(.constdata) + tenpwrs_x 0x080052b4 Data 60 bigflt0.o(.constdata) + tenpwrs_i 0x080052f0 Data 64 bigflt0.o(.constdata) + locale$$data 0x08005368 Section 28 lc_numeric_c.o(locale$$data) + __lcnum_c_name 0x0800536c Data 2 lc_numeric_c.o(locale$$data) + __lcnum_c_start 0x08005374 Data 0 lc_numeric_c.o(locale$$data) + __lcnum_c_point 0x08005380 Data 0 lc_numeric_c.o(locale$$data) + __lcnum_c_thousands 0x08005382 Data 0 lc_numeric_c.o(locale$$data) + __lcnum_c_grouping 0x08005383 Data 0 lc_numeric_c.o(locale$$data) + __lcnum_c_end 0x08005384 Data 0 lc_numeric_c.o(locale$$data) + .data 0x20000000 Section 20 system_stm32f10x.o(.data) + .data 0x20000014 Section 20 stm32f10x_rcc.o(.data) + APBAHBPrescTable 0x20000014 Data 16 stm32f10x_rcc.o(.data) + ADCPrescTable 0x20000024 Data 4 stm32f10x_rcc.o(.data) + .data 0x20000028 Section 4 bsp_gpio.o(.data) + temp 0x20000028 Data 4 bsp_gpio.o(.data) + .data 0x2000002c Section 12 bsp_usart.o(.data) + .data 0x20000038 Section 4 delay.o(.data) + fac_us 0x20000038 Data 1 delay.o(.data) + fac_ms 0x2000003a Data 2 delay.o(.data) + .data 0x2000003c Section 512 oled.o(.data) + .data 0x2000023c Section 28 pid.o(.data) + LastError 0x20000248 Data 4 pid.o(.data) + PrevError 0x2000024c Data 4 pid.o(.data) + LastError 0x20000250 Data 4 pid.o(.data) + PrevError 0x20000254 Data 4 pid.o(.data) + .data 0x20000258 Section 54 car.o(.data) + .data 0x20000290 Section 12 bluetooth.o(.data) + .bss 0x2000029c Section 64 main.o(.bss) + .bss 0x200002dc Section 96 libspace.o(.bss) + HEAP 0x20000340 Section 512 startup_stm32f10x_hd.o(HEAP) + Heap_Mem 0x20000340 Data 512 startup_stm32f10x_hd.o(HEAP) + STACK 0x20000540 Section 1024 startup_stm32f10x_hd.o(STACK) + Stack_Mem 0x20000540 Data 1024 startup_stm32f10x_hd.o(STACK) + __initial_sp 0x20000940 Data 0 startup_stm32f10x_hd.o(STACK) + + Global Symbols + + Symbol Name Value Ov Type Size Object(Section) + + BuildAttributes$$THM_ISAv4$P$D$K$B$S$PE$A:L22UL41UL21$X:L11$S22US41US21$IEEE1$IW$USESV6$~STKCKD$USESV7$~SHL$OTIME$ROPI$IEEEJ$EBA8$UX$STANDARDLIB$REQ8$PRES8$EABIv2 0x00000000 Number 0 anon$$obj.o ABSOLUTE + __ARM_use_no_argv 0x00000000 Number 0 main.o ABSOLUTE + _printf_flags 0x00000000 Number 0 printf_stubs.o ABSOLUTE + _printf_return_value 0x00000000 Number 0 printf_stubs.o ABSOLUTE + _printf_sizespec 0x00000000 Number 0 printf_stubs.o ABSOLUTE + _printf_widthprec 0x00000000 Number 0 printf_stubs.o ABSOLUTE + __ARM_exceptions_init - Undefined Weak Reference + __alloca_initialize - Undefined Weak Reference + __arm_preinit_ - Undefined Weak Reference + __cpp_initialize__aeabi_ - Undefined Weak Reference + __cxa_finalize - Undefined Weak Reference + __sigvec_lookup - Undefined Weak Reference + _atexit_init - Undefined Weak Reference + _call_atexit_fns - Undefined Weak Reference + _clock_init - Undefined Weak Reference + _fp_trap_init - Undefined Weak Reference + _fp_trap_shutdown - Undefined Weak Reference + _get_lc_collate - Undefined Weak Reference + _get_lc_ctype - Undefined Weak Reference + _get_lc_monetary - Undefined Weak Reference + _get_lc_time - Undefined Weak Reference + _getenv_init - Undefined Weak Reference + _handle_redirection - Undefined Weak Reference + _init_alloc - Undefined Weak Reference + _init_user_alloc - Undefined Weak Reference + _initio - Undefined Weak Reference + _rand_init - Undefined Weak Reference + _signal_finish - Undefined Weak Reference + _signal_init - Undefined Weak Reference + _terminate_alloc - Undefined Weak Reference + _terminate_user_alloc - Undefined Weak Reference + _terminateio - Undefined Weak Reference + __Vectors_Size 0x00000130 Number 0 startup_stm32f10x_hd.o ABSOLUTE + __Vectors 0x08000000 Data 4 startup_stm32f10x_hd.o(RESET) + __Vectors_End 0x08000130 Data 0 startup_stm32f10x_hd.o(RESET) + __main 0x08000131 Thumb Code 8 __main.o(!!!main) + __scatterload 0x08000139 Thumb Code 0 __scatter.o(!!!scatter) + __scatterload_rt2 0x08000139 Thumb Code 44 __scatter.o(!!!scatter) + __scatterload_rt2_thumb_only 0x08000139 Thumb Code 0 __scatter.o(!!!scatter) + __scatterload_null 0x08000147 Thumb Code 0 __scatter.o(!!!scatter) + __decompress 0x0800016d Thumb Code 90 __dczerorl2.o(!!dczerorl2) + __decompress1 0x0800016d Thumb Code 0 __dczerorl2.o(!!dczerorl2) + __scatterload_zeroinit 0x080001c9 Thumb Code 28 __scatter_zi.o(!!handler_zi) + _printf_f 0x080001e5 Thumb Code 0 _printf_f.o(.ARM.Collect$$_printf_percent$$00000003) + _printf_percent 0x080001e5 Thumb Code 0 _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) + _printf_percent_end 0x080001eb Thumb Code 0 _printf_percent_end.o(.ARM.Collect$$_printf_percent$$00000017) + __rt_lib_init 0x080001ef Thumb Code 0 libinit.o(.ARM.Collect$$libinit$$00000000) + __rt_lib_init_fp_1 0x080001f1 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000002) + __rt_lib_init_heap_1 0x080001f1 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$0000000A) + __rt_lib_init_lc_common 0x080001f1 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$0000000F) + __rt_lib_init_preinit_1 0x080001f1 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000004) + __rt_lib_init_rand_1 0x080001f1 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$0000000E) + __rt_lib_init_user_alloc_1 0x080001f1 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$0000000C) + __rt_lib_init_lc_collate_1 0x080001f7 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000011) + __rt_lib_init_lc_ctype_1 0x080001f7 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000013) + __rt_lib_init_lc_monetary_1 0x080001f7 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000015) + __rt_lib_init_lc_numeric_2 0x080001f7 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000016) + __rt_lib_init_alloca_1 0x08000201 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$0000002E) + __rt_lib_init_argv_1 0x08000201 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$0000002C) + __rt_lib_init_atexit_1 0x08000201 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$0000001B) + __rt_lib_init_clock_1 0x08000201 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000021) + __rt_lib_init_cpp_1 0x08000201 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000032) + __rt_lib_init_exceptions_1 0x08000201 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000030) + __rt_lib_init_fp_trap_1 0x08000201 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$0000001F) + __rt_lib_init_getenv_1 0x08000201 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000023) + __rt_lib_init_lc_numeric_1 0x08000201 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000017) + __rt_lib_init_lc_time_1 0x08000201 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000019) + __rt_lib_init_return 0x08000201 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000033) + __rt_lib_init_signal_1 0x08000201 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$0000001D) + __rt_lib_init_stdio_1 0x08000201 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000025) + __rt_lib_shutdown 0x08000203 Thumb Code 0 libshutdown.o(.ARM.Collect$$libshutdown$$00000000) + __rt_lib_shutdown_cpp_1 0x08000205 Thumb Code 0 libshutdown2.o(.ARM.Collect$$libshutdown$$00000002) + __rt_lib_shutdown_fp_trap_1 0x08000205 Thumb Code 0 libshutdown2.o(.ARM.Collect$$libshutdown$$00000007) + __rt_lib_shutdown_heap_1 0x08000205 Thumb Code 0 libshutdown2.o(.ARM.Collect$$libshutdown$$0000000F) + __rt_lib_shutdown_return 0x08000205 Thumb Code 0 libshutdown2.o(.ARM.Collect$$libshutdown$$00000010) + __rt_lib_shutdown_signal_1 0x08000205 Thumb Code 0 libshutdown2.o(.ARM.Collect$$libshutdown$$0000000A) + __rt_lib_shutdown_stdio_1 0x08000205 Thumb Code 0 libshutdown2.o(.ARM.Collect$$libshutdown$$00000004) + __rt_lib_shutdown_user_alloc_1 0x08000205 Thumb Code 0 libshutdown2.o(.ARM.Collect$$libshutdown$$0000000C) + __rt_entry 0x08000207 Thumb Code 0 __rtentry.o(.ARM.Collect$$rtentry$$00000000) + __rt_entry_presh_1 0x08000207 Thumb Code 0 __rtentry2.o(.ARM.Collect$$rtentry$$00000002) + __rt_entry_sh 0x08000207 Thumb Code 0 __rtentry4.o(.ARM.Collect$$rtentry$$00000004) + __rt_entry_li 0x0800020d Thumb Code 0 __rtentry2.o(.ARM.Collect$$rtentry$$0000000A) + __rt_entry_postsh_1 0x0800020d Thumb Code 0 __rtentry2.o(.ARM.Collect$$rtentry$$00000009) + __rt_entry_main 0x08000211 Thumb Code 0 __rtentry2.o(.ARM.Collect$$rtentry$$0000000D) + __rt_entry_postli_1 0x08000211 Thumb Code 0 __rtentry2.o(.ARM.Collect$$rtentry$$0000000C) + __rt_exit 0x08000219 Thumb Code 0 rtexit.o(.ARM.Collect$$rtexit$$00000000) + __rt_exit_ls 0x0800021b Thumb Code 0 rtexit2.o(.ARM.Collect$$rtexit$$00000003) + __rt_exit_prels_1 0x0800021b Thumb Code 0 rtexit2.o(.ARM.Collect$$rtexit$$00000002) + __rt_exit_exit 0x0800021f Thumb Code 0 rtexit2.o(.ARM.Collect$$rtexit$$00000004) + Reset_Handler 0x08000225 Thumb Code 8 startup_stm32f10x_hd.o(.text) + SysTick_Handler 0x0800023d Thumb Code 2 startup_stm32f10x_hd.o(.text) + ADC1_2_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + ADC3_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + CAN1_RX1_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + CAN1_SCE_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + DMA1_Channel1_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + DMA1_Channel2_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + DMA1_Channel3_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + DMA1_Channel4_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + DMA1_Channel5_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + DMA1_Channel6_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + DMA1_Channel7_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + DMA2_Channel1_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + DMA2_Channel2_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + DMA2_Channel3_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + DMA2_Channel4_5_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + EXTI0_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + EXTI15_10_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + EXTI1_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + EXTI2_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + EXTI3_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + EXTI4_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + EXTI9_5_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + FLASH_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + FSMC_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + I2C1_ER_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + I2C1_EV_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + I2C2_ER_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + I2C2_EV_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + PVD_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + RCC_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + RTCAlarm_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + RTC_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + SDIO_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + SPI1_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + SPI2_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + SPI3_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + TAMPER_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + TIM1_BRK_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + TIM1_CC_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + TIM1_TRG_COM_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + TIM1_UP_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + TIM3_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + TIM5_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + TIM7_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + TIM8_BRK_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + TIM8_CC_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + TIM8_TRG_COM_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + TIM8_UP_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + UART4_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + UART5_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + USART3_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + USBWakeUp_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + USB_HP_CAN1_TX_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + USB_LP_CAN1_RX0_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + WWDG_IRQHandler 0x0800023f Thumb Code 0 startup_stm32f10x_hd.o(.text) + __user_initial_stackheap 0x08000241 Thumb Code 0 startup_stm32f10x_hd.o(.text) + SystemInit 0x08000343 Thumb Code 78 system_stm32f10x.o(.text) + SystemCoreClockUpdate 0x08000391 Thumb Code 142 system_stm32f10x.o(.text) + NVIC_PriorityGroupConfig 0x08000445 Thumb Code 10 misc.o(.text) + NVIC_Init 0x0800044f Thumb Code 100 misc.o(.text) + NVIC_SetVectorTable 0x080004b3 Thumb Code 14 misc.o(.text) + NVIC_SystemLPConfig 0x080004c1 Thumb Code 34 misc.o(.text) + SysTick_CLKSourceConfig 0x080004e3 Thumb Code 40 misc.o(.text) + GPIO_DeInit 0x08000521 Thumb Code 172 stm32f10x_gpio.o(.text) + GPIO_AFIODeInit 0x080005cd Thumb Code 20 stm32f10x_gpio.o(.text) + GPIO_Init 0x080005e1 Thumb Code 278 stm32f10x_gpio.o(.text) + GPIO_StructInit 0x080006f7 Thumb Code 16 stm32f10x_gpio.o(.text) + GPIO_ReadInputDataBit 0x08000707 Thumb Code 18 stm32f10x_gpio.o(.text) + GPIO_ReadInputData 0x08000719 Thumb Code 8 stm32f10x_gpio.o(.text) + GPIO_ReadOutputDataBit 0x08000721 Thumb Code 18 stm32f10x_gpio.o(.text) + GPIO_ReadOutputData 0x08000733 Thumb Code 8 stm32f10x_gpio.o(.text) + GPIO_SetBits 0x0800073b Thumb Code 4 stm32f10x_gpio.o(.text) + GPIO_ResetBits 0x0800073f Thumb Code 4 stm32f10x_gpio.o(.text) + GPIO_WriteBit 0x08000743 Thumb Code 10 stm32f10x_gpio.o(.text) + GPIO_Write 0x0800074d Thumb Code 4 stm32f10x_gpio.o(.text) + GPIO_PinLockConfig 0x08000751 Thumb Code 18 stm32f10x_gpio.o(.text) + GPIO_EventOutputConfig 0x08000763 Thumb Code 26 stm32f10x_gpio.o(.text) + GPIO_EventOutputCmd 0x0800077d Thumb Code 6 stm32f10x_gpio.o(.text) + GPIO_PinRemapConfig 0x08000783 Thumb Code 138 stm32f10x_gpio.o(.text) + GPIO_EXTILineConfig 0x0800080d Thumb Code 66 stm32f10x_gpio.o(.text) + GPIO_ETH_MediaInterfaceConfig 0x0800084f Thumb Code 8 stm32f10x_gpio.o(.text) + RCC_DeInit 0x0800087d Thumb Code 64 stm32f10x_rcc.o(.text) + RCC_HSEConfig 0x080008bd Thumb Code 70 stm32f10x_rcc.o(.text) + RCC_GetFlagStatus 0x08000903 Thumb Code 56 stm32f10x_rcc.o(.text) + RCC_WaitForHSEStartUp 0x0800093b Thumb Code 56 stm32f10x_rcc.o(.text) + RCC_AdjustHSICalibrationValue 0x08000973 Thumb Code 20 stm32f10x_rcc.o(.text) + RCC_HSICmd 0x08000987 Thumb Code 6 stm32f10x_rcc.o(.text) + RCC_PLLConfig 0x0800098d Thumb Code 24 stm32f10x_rcc.o(.text) + RCC_PLLCmd 0x080009a5 Thumb Code 6 stm32f10x_rcc.o(.text) + RCC_SYSCLKConfig 0x080009ab Thumb Code 18 stm32f10x_rcc.o(.text) + RCC_GetSYSCLKSource 0x080009bd Thumb Code 10 stm32f10x_rcc.o(.text) + RCC_HCLKConfig 0x080009c7 Thumb Code 18 stm32f10x_rcc.o(.text) + RCC_PCLK1Config 0x080009d9 Thumb Code 18 stm32f10x_rcc.o(.text) + RCC_PCLK2Config 0x080009eb Thumb Code 20 stm32f10x_rcc.o(.text) + RCC_ITConfig 0x080009ff Thumb Code 26 stm32f10x_rcc.o(.text) + RCC_USBCLKConfig 0x08000a19 Thumb Code 8 stm32f10x_rcc.o(.text) + RCC_ADCCLKConfig 0x08000a21 Thumb Code 18 stm32f10x_rcc.o(.text) + RCC_LSEConfig 0x08000a33 Thumb Code 50 stm32f10x_rcc.o(.text) + RCC_LSICmd 0x08000a65 Thumb Code 6 stm32f10x_rcc.o(.text) + RCC_RTCCLKConfig 0x08000a6b Thumb Code 12 stm32f10x_rcc.o(.text) + RCC_RTCCLKCmd 0x08000a77 Thumb Code 8 stm32f10x_rcc.o(.text) + RCC_GetClocksFreq 0x08000a7f Thumb Code 192 stm32f10x_rcc.o(.text) + RCC_AHBPeriphClockCmd 0x08000b3f Thumb Code 26 stm32f10x_rcc.o(.text) + RCC_APB2PeriphClockCmd 0x08000b59 Thumb Code 26 stm32f10x_rcc.o(.text) + RCC_APB1PeriphClockCmd 0x08000b73 Thumb Code 26 stm32f10x_rcc.o(.text) + RCC_APB2PeriphResetCmd 0x08000b8d Thumb Code 26 stm32f10x_rcc.o(.text) + RCC_APB1PeriphResetCmd 0x08000ba7 Thumb Code 26 stm32f10x_rcc.o(.text) + RCC_BackupResetCmd 0x08000bc1 Thumb Code 8 stm32f10x_rcc.o(.text) + RCC_ClockSecuritySystemCmd 0x08000bc9 Thumb Code 6 stm32f10x_rcc.o(.text) + RCC_MCOConfig 0x08000bcf Thumb Code 6 stm32f10x_rcc.o(.text) + RCC_ClearFlag 0x08000bd5 Thumb Code 14 stm32f10x_rcc.o(.text) + RCC_GetITStatus 0x08000be3 Thumb Code 20 stm32f10x_rcc.o(.text) + RCC_ClearITPendingBit 0x08000bf7 Thumb Code 6 stm32f10x_rcc.o(.text) + TIM_DeInit 0x08000c21 Thumb Code 424 stm32f10x_tim.o(.text) + TIM_TimeBaseInit 0x08000dc9 Thumb Code 122 stm32f10x_tim.o(.text) + TIM_OC1Init 0x08000e43 Thumb Code 132 stm32f10x_tim.o(.text) + TIM_OC2Init 0x08000ec7 Thumb Code 154 stm32f10x_tim.o(.text) + TIM_OC3Init 0x08000f61 Thumb Code 150 stm32f10x_tim.o(.text) + TIM_OC4Init 0x08000ff7 Thumb Code 182 stm32f10x_tim.o(.text) + TIM_SetIC4Prescaler 0x080010ad Thumb Code 26 stm32f10x_tim.o(.text) + TIM_SetIC3Prescaler 0x08001149 Thumb Code 18 stm32f10x_tim.o(.text) + TIM_SetIC2Prescaler 0x080011d5 Thumb Code 26 stm32f10x_tim.o(.text) + TIM_SetIC1Prescaler 0x08001271 Thumb Code 18 stm32f10x_tim.o(.text) + TIM_ICInit 0x080012ef Thumb Code 150 stm32f10x_tim.o(.text) + TIM_PWMIConfig 0x08001385 Thumb Code 124 stm32f10x_tim.o(.text) + TIM_BDTRConfig 0x08001401 Thumb Code 32 stm32f10x_tim.o(.text) + TIM_TimeBaseStructInit 0x08001421 Thumb Code 18 stm32f10x_tim.o(.text) + TIM_OCStructInit 0x08001433 Thumb Code 20 stm32f10x_tim.o(.text) + TIM_ICStructInit 0x08001447 Thumb Code 18 stm32f10x_tim.o(.text) + TIM_BDTRStructInit 0x08001459 Thumb Code 40 stm32f10x_tim.o(.text) + TIM_Cmd 0x08001481 Thumb Code 24 stm32f10x_tim.o(.text) + TIM_CtrlPWMOutputs 0x08001499 Thumb Code 30 stm32f10x_tim.o(.text) + TIM_ITConfig 0x080014b7 Thumb Code 18 stm32f10x_tim.o(.text) + TIM_GenerateEvent 0x080014c9 Thumb Code 4 stm32f10x_tim.o(.text) + TIM_DMAConfig 0x080014cd Thumb Code 10 stm32f10x_tim.o(.text) + TIM_DMACmd 0x080014d7 Thumb Code 18 stm32f10x_tim.o(.text) + TIM_InternalClockConfig 0x080014e9 Thumb Code 12 stm32f10x_tim.o(.text) + TIM_SelectInputTrigger 0x080014f5 Thumb Code 18 stm32f10x_tim.o(.text) + TIM_ITRxExternalClockConfig 0x08001507 Thumb Code 24 stm32f10x_tim.o(.text) + TIM_TIxExternalClockConfig 0x0800151f Thumb Code 62 stm32f10x_tim.o(.text) + TIM_ETRConfig 0x0800155d Thumb Code 28 stm32f10x_tim.o(.text) + TIM_ETRClockMode1Config 0x08001579 Thumb Code 54 stm32f10x_tim.o(.text) + TIM_ETRClockMode2Config 0x080015af Thumb Code 32 stm32f10x_tim.o(.text) + TIM_PrescalerConfig 0x080015cf Thumb Code 6 stm32f10x_tim.o(.text) + TIM_CounterModeConfig 0x080015d5 Thumb Code 18 stm32f10x_tim.o(.text) + TIM_EncoderInterfaceConfig 0x080015e7 Thumb Code 66 stm32f10x_tim.o(.text) + TIM_ForcedOC1Config 0x08001629 Thumb Code 18 stm32f10x_tim.o(.text) + TIM_ForcedOC2Config 0x0800163b Thumb Code 26 stm32f10x_tim.o(.text) + TIM_ForcedOC3Config 0x08001655 Thumb Code 18 stm32f10x_tim.o(.text) + TIM_ForcedOC4Config 0x08001667 Thumb Code 26 stm32f10x_tim.o(.text) + TIM_ARRPreloadConfig 0x08001681 Thumb Code 24 stm32f10x_tim.o(.text) + TIM_SelectCOM 0x08001699 Thumb Code 24 stm32f10x_tim.o(.text) + TIM_SelectCCDMA 0x080016b1 Thumb Code 24 stm32f10x_tim.o(.text) + TIM_CCPreloadControl 0x080016c9 Thumb Code 24 stm32f10x_tim.o(.text) + TIM_OC1PreloadConfig 0x080016e1 Thumb Code 18 stm32f10x_tim.o(.text) + TIM_OC2PreloadConfig 0x080016f3 Thumb Code 26 stm32f10x_tim.o(.text) + TIM_OC3PreloadConfig 0x0800170d Thumb Code 18 stm32f10x_tim.o(.text) + TIM_OC4PreloadConfig 0x0800171f Thumb Code 26 stm32f10x_tim.o(.text) + TIM_OC1FastConfig 0x08001739 Thumb Code 18 stm32f10x_tim.o(.text) + TIM_OC2FastConfig 0x0800174b Thumb Code 26 stm32f10x_tim.o(.text) + TIM_OC3FastConfig 0x08001765 Thumb Code 18 stm32f10x_tim.o(.text) + TIM_OC4FastConfig 0x08001777 Thumb Code 26 stm32f10x_tim.o(.text) + TIM_ClearOC1Ref 0x08001791 Thumb Code 18 stm32f10x_tim.o(.text) + TIM_ClearOC2Ref 0x080017a3 Thumb Code 24 stm32f10x_tim.o(.text) + TIM_ClearOC3Ref 0x080017bb Thumb Code 18 stm32f10x_tim.o(.text) + TIM_ClearOC4Ref 0x080017cd Thumb Code 24 stm32f10x_tim.o(.text) + TIM_OC1PolarityConfig 0x080017e5 Thumb Code 18 stm32f10x_tim.o(.text) + TIM_OC1NPolarityConfig 0x080017f7 Thumb Code 18 stm32f10x_tim.o(.text) + TIM_OC2PolarityConfig 0x08001809 Thumb Code 26 stm32f10x_tim.o(.text) + TIM_OC2NPolarityConfig 0x08001823 Thumb Code 26 stm32f10x_tim.o(.text) + TIM_OC3PolarityConfig 0x0800183d Thumb Code 26 stm32f10x_tim.o(.text) + TIM_OC3NPolarityConfig 0x08001857 Thumb Code 26 stm32f10x_tim.o(.text) + TIM_OC4PolarityConfig 0x08001871 Thumb Code 26 stm32f10x_tim.o(.text) + TIM_CCxCmd 0x0800188b Thumb Code 30 stm32f10x_tim.o(.text) + TIM_CCxNCmd 0x080018a9 Thumb Code 30 stm32f10x_tim.o(.text) + TIM_SelectOCxM 0x080018c7 Thumb Code 82 stm32f10x_tim.o(.text) + TIM_UpdateDisableConfig 0x08001919 Thumb Code 24 stm32f10x_tim.o(.text) + TIM_UpdateRequestConfig 0x08001931 Thumb Code 24 stm32f10x_tim.o(.text) + TIM_SelectHallSensor 0x08001949 Thumb Code 24 stm32f10x_tim.o(.text) + TIM_SelectOnePulseMode 0x08001961 Thumb Code 18 stm32f10x_tim.o(.text) + TIM_SelectOutputTrigger 0x08001973 Thumb Code 18 stm32f10x_tim.o(.text) + TIM_SelectSlaveMode 0x08001985 Thumb Code 18 stm32f10x_tim.o(.text) + TIM_SelectMasterSlaveMode 0x08001997 Thumb Code 18 stm32f10x_tim.o(.text) + TIM_SetCounter 0x080019a9 Thumb Code 4 stm32f10x_tim.o(.text) + TIM_SetAutoreload 0x080019ad Thumb Code 4 stm32f10x_tim.o(.text) + TIM_SetCompare1 0x080019b1 Thumb Code 4 stm32f10x_tim.o(.text) + TIM_SetCompare2 0x080019b5 Thumb Code 4 stm32f10x_tim.o(.text) + TIM_SetCompare3 0x080019b9 Thumb Code 4 stm32f10x_tim.o(.text) + TIM_SetCompare4 0x080019bd Thumb Code 6 stm32f10x_tim.o(.text) + TIM_SetClockDivision 0x080019c3 Thumb Code 18 stm32f10x_tim.o(.text) + TIM_GetCapture1 0x080019d5 Thumb Code 6 stm32f10x_tim.o(.text) + TIM_GetCapture2 0x080019db Thumb Code 6 stm32f10x_tim.o(.text) + TIM_GetCapture3 0x080019e1 Thumb Code 6 stm32f10x_tim.o(.text) + TIM_GetCapture4 0x080019e7 Thumb Code 8 stm32f10x_tim.o(.text) + TIM_GetCounter 0x080019ef Thumb Code 6 stm32f10x_tim.o(.text) + TIM_GetPrescaler 0x080019f5 Thumb Code 6 stm32f10x_tim.o(.text) + TIM_GetFlagStatus 0x080019fb Thumb Code 18 stm32f10x_tim.o(.text) + TIM_ClearFlag 0x08001a0d Thumb Code 6 stm32f10x_tim.o(.text) + TIM_GetITStatus 0x08001a13 Thumb Code 34 stm32f10x_tim.o(.text) + TIM_ClearITPendingBit 0x08001a35 Thumb Code 6 stm32f10x_tim.o(.text) + USART_DeInit 0x08001a3d Thumb Code 134 stm32f10x_usart.o(.text) + USART_Init 0x08001ac3 Thumb Code 210 stm32f10x_usart.o(.text) + USART_StructInit 0x08001b95 Thumb Code 24 stm32f10x_usart.o(.text) + USART_ClockInit 0x08001bad Thumb Code 34 stm32f10x_usart.o(.text) + USART_ClockStructInit 0x08001bcf Thumb Code 12 stm32f10x_usart.o(.text) + USART_Cmd 0x08001bdb Thumb Code 24 stm32f10x_usart.o(.text) + USART_ITConfig 0x08001bf3 Thumb Code 74 stm32f10x_usart.o(.text) + USART_DMACmd 0x08001c3d Thumb Code 18 stm32f10x_usart.o(.text) + USART_SetAddress 0x08001c4f Thumb Code 18 stm32f10x_usart.o(.text) + USART_WakeUpConfig 0x08001c61 Thumb Code 18 stm32f10x_usart.o(.text) + USART_ReceiverWakeUpCmd 0x08001c73 Thumb Code 24 stm32f10x_usart.o(.text) + USART_LINBreakDetectLengthConfig 0x08001c8b Thumb Code 18 stm32f10x_usart.o(.text) + USART_LINCmd 0x08001c9d Thumb Code 24 stm32f10x_usart.o(.text) + USART_SendData 0x08001cb5 Thumb Code 8 stm32f10x_usart.o(.text) + USART_ReceiveData 0x08001cbd Thumb Code 10 stm32f10x_usart.o(.text) + USART_SendBreak 0x08001cc7 Thumb Code 10 stm32f10x_usart.o(.text) + USART_SetGuardTime 0x08001cd1 Thumb Code 16 stm32f10x_usart.o(.text) + USART_SetPrescaler 0x08001ce1 Thumb Code 16 stm32f10x_usart.o(.text) + USART_SmartCardCmd 0x08001cf1 Thumb Code 24 stm32f10x_usart.o(.text) + USART_SmartCardNACKCmd 0x08001d09 Thumb Code 24 stm32f10x_usart.o(.text) + USART_HalfDuplexCmd 0x08001d21 Thumb Code 24 stm32f10x_usart.o(.text) + USART_OverSampling8Cmd 0x08001d39 Thumb Code 22 stm32f10x_usart.o(.text) + USART_OneBitMethodCmd 0x08001d4f Thumb Code 24 stm32f10x_usart.o(.text) + USART_IrDAConfig 0x08001d67 Thumb Code 18 stm32f10x_usart.o(.text) + USART_IrDACmd 0x08001d79 Thumb Code 24 stm32f10x_usart.o(.text) + USART_GetFlagStatus 0x08001d91 Thumb Code 26 stm32f10x_usart.o(.text) + USART_ClearFlag 0x08001dab Thumb Code 18 stm32f10x_usart.o(.text) + USART_GetITStatus 0x08001dbd Thumb Code 84 stm32f10x_usart.o(.text) + USART_ClearITPendingBit 0x08001e11 Thumb Code 52 stm32f10x_usart.o(.text) + System_Init 0x08001e45 Thumb Code 202 bsp_sys.o(.text) + LED_GPIO_Config 0x08001f71 Thumb Code 40 bsp_gpio.o(.text) + LED_Flash 0x08001f99 Thumb Code 54 bsp_gpio.o(.text) + NVIC_Config 0x08001fd9 Thumb Code 2 bsp_nvic.o(.text) + USART1_Init 0x08001fdd Thumb Code 124 bsp_usart.o(.text) + fputc 0x08002059 Thumb Code 32 bsp_usart.o(.text) + fgetc 0x08002079 Thumb Code 26 bsp_usart.o(.text) + USART1_Send 0x08002093 Thumb Code 74 bsp_usart.o(.text) + USART1_Receive 0x080020dd Thumb Code 16 bsp_usart.o(.text) + USART1_IRQHandler 0x080020ed Thumb Code 72 bsp_usart.o(.text) + Delay_Init 0x08002149 Thumb Code 52 delay.o(.text) + Delay_ms 0x0800217d Thumb Code 56 delay.o(.text) + Delay_us 0x080021b5 Thumb Code 56 delay.o(.text) + i2c_Delay 0x080021f5 Thumb Code 14 bsp_iic.o(.text) + IIC_Start 0x08002203 Thumb Code 56 bsp_iic.o(.text) + IIC_Stop 0x0800223b Thumb Code 38 bsp_iic.o(.text) + IIC_Send_Byte 0x08002261 Thumb Code 96 bsp_iic.o(.text) + IIC_Ack 0x080022c1 Thumb Code 56 bsp_iic.o(.text) + IIC_NAck 0x080022f9 Thumb Code 46 bsp_iic.o(.text) + IIC_Read_Byte 0x08002327 Thumb Code 82 bsp_iic.o(.text) + IIC_Wait_Ack 0x08002379 Thumb Code 66 bsp_iic.o(.text) + IIC_Init 0x080023bb Thumb Code 44 bsp_iic.o(.text) + i2c_CheckDevice 0x080023e7 Thumb Code 32 bsp_iic.o(.text) + MOTO_PWM_Init 0x0800240d Thumb Code 196 bsp_timer.o(.text) + MOTO_PWM_Out 0x080024d1 Thumb Code 68 bsp_timer.o(.text) + Timer6_Init 0x08002515 Thumb Code 114 bsp_timer.o(.text) + Encoder_Init_TIM2 0x08002587 Thumb Code 154 bsp_timer.o(.text) + Encoder_Init_TIM4 0x08002621 Thumb Code 148 bsp_timer.o(.text) + Read_Encoder 0x080026b5 Thumb Code 84 bsp_timer.o(.text) + TIM4_IRQHandler 0x08002709 Thumb Code 24 bsp_timer.o(.text) + TIM2_IRQHandler 0x08002721 Thumb Code 24 bsp_timer.o(.text) + MOTO_GPIO_Init 0x0800274d Thumb Code 40 moto.o(.text) + MOTO_Left 0x08002775 Thumb Code 68 moto.o(.text) + MOTO_Right 0x080027b9 Thumb Code 68 moto.o(.text) + Car_Go 0x080027fd Thumb Code 16 moto.o(.text) + Car_Back 0x0800280d Thumb Code 16 moto.o(.text) + Car_Turn_Left 0x0800281d Thumb Code 16 moto.o(.text) + Car_Turn_Right 0x0800282d Thumb Code 16 moto.o(.text) + Car_Stop 0x0800283d Thumb Code 16 moto.o(.text) + Write_IIC_Command 0x08002851 Thumb Code 44 oled.o(.text) + Write_IIC_Data 0x0800287d Thumb Code 44 oled.o(.text) + OLED_WR_Byte 0x080028a9 Thumb Code 24 oled.o(.text) + fill_picture 0x080028c1 Thumb Code 64 oled.o(.text) + Delay_50ms 0x08002901 Thumb Code 22 oled.o(.text) + Delay_1ms 0x08002917 Thumb Code 26 oled.o(.text) + OLED_Set_Pos 0x08002931 Thumb Code 40 oled.o(.text) + OLED_Display_On 0x08002959 Thumb Code 28 oled.o(.text) + OLED_Display_Off 0x08002975 Thumb Code 28 oled.o(.text) + OLED_Clear 0x08002991 Thumb Code 62 oled.o(.text) + OLED_On 0x080029cf Thumb Code 62 oled.o(.text) + OLED_ShowChar 0x08002a0d Thumb Code 154 oled.o(.text) + oled_pow 0x08002aa7 Thumb Code 22 oled.o(.text) + OLED_ShowNum 0x08002abd Thumb Code 136 oled.o(.text) + OLED_ShowString 0x08002b45 Thumb Code 58 oled.o(.text) + OLED_ShowCHinese 0x08002b7f Thumb Code 98 oled.o(.text) + OLED_DrawBMP 0x08002be1 Thumb Code 118 oled.o(.text) + OLED_Init 0x08002c57 Thumb Code 232 oled.o(.text) + showPID 0x08002d4d Thumb Code 118 pid.o(.text) + PID_Calc_Left 0x08002dc3 Thumb Code 114 pid.o(.text) + PID_Calc_Right 0x08002e35 Thumb Code 114 pid.o(.text) + TIM6_IRQHandler 0x08002ecd Thumb Code 506 car.o(.text) + Bluetooth_Init 0x08003115 Thumb Code 162 bluetooth.o(.text) + USART2_Send 0x080031b7 Thumb Code 74 bluetooth.o(.text) + USART2_Receive 0x08003201 Thumb Code 16 bluetooth.o(.text) + USART2_IRQHandler 0x08003211 Thumb Code 72 bluetooth.o(.text) + main 0x0800326d Thumb Code 222 main.o(.text) + NMI_Handler 0x08003351 Thumb Code 2 stm32f10x_it.o(.text) + HardFault_Handler 0x08003353 Thumb Code 4 stm32f10x_it.o(.text) + MemManage_Handler 0x08003357 Thumb Code 4 stm32f10x_it.o(.text) + BusFault_Handler 0x0800335b Thumb Code 4 stm32f10x_it.o(.text) + UsageFault_Handler 0x0800335f Thumb Code 4 stm32f10x_it.o(.text) + SVC_Handler 0x08003363 Thumb Code 2 stm32f10x_it.o(.text) + DebugMon_Handler 0x08003365 Thumb Code 2 stm32f10x_it.o(.text) + PendSV_Handler 0x08003367 Thumb Code 2 stm32f10x_it.o(.text) + __2sprintf 0x08003369 Thumb Code 34 noretval__2sprintf.o(.text) + _printf_pre_padding 0x08003391 Thumb Code 44 _printf_pad.o(.text) + _printf_post_padding 0x080033bd Thumb Code 34 _printf_pad.o(.text) + __printf 0x080033df Thumb Code 270 __printf_wp.o(.text) + __use_two_region_memory 0x080034ed Thumb Code 2 heapauxi.o(.text) + __rt_heap_escrow$2region 0x080034ef Thumb Code 2 heapauxi.o(.text) + __rt_heap_expand$2region 0x080034f1 Thumb Code 2 heapauxi.o(.text) + __lib_sel_fp_printf 0x080034f3 Thumb Code 2 _printf_fp_dec.o(.text) + _printf_fp_dec_real 0x080036a1 Thumb Code 620 _printf_fp_dec.o(.text) + _printf_char_common 0x08003917 Thumb Code 32 _printf_char_common.o(.text) + _sputc 0x0800393d Thumb Code 10 _sputc.o(.text) + __rt_locale 0x08003949 Thumb Code 8 rt_locale_intlibspace.o(.text) + _ll_udiv10 0x08003951 Thumb Code 138 lludiv10.o(.text) + _printf_fp_infnan 0x080039dd Thumb Code 112 _printf_fp_infnan.o(.text) + _btod_etento 0x08003a5d Thumb Code 216 bigflt0.o(.text) + __user_libspace 0x08003b39 Thumb Code 8 libspace.o(.text) + __user_perproc_libspace 0x08003b39 Thumb Code 0 libspace.o(.text) + __user_perthread_libspace 0x08003b39 Thumb Code 0 libspace.o(.text) + __user_setup_stackheap 0x08003b41 Thumb Code 74 sys_stackheap_outer.o(.text) + exit 0x08003b8b Thumb Code 18 exit.o(.text) + strcmp 0x08003b9d Thumb Code 128 strcmpv7m.o(.text) + _sys_exit 0x08003c1d Thumb Code 8 sys_exit.o(.text) + __I$use$semihosting 0x08003c29 Thumb Code 0 use_no_semi.o(.text) + __use_no_semihosting_swi 0x08003c29 Thumb Code 2 use_no_semi.o(.text) + __semihosting_library_function 0x08003c2b Thumb Code 0 indicate_semi.o(.text) + _btod_d2e 0x08003c2b Thumb Code 62 btod.o(CL$$btod_d2e) + _d2e_denorm_low 0x08003c69 Thumb Code 70 btod.o(CL$$btod_d2e_denorm_low) + _d2e_norm_op1 0x08003caf Thumb Code 96 btod.o(CL$$btod_d2e_norm_op1) + __btod_div_common 0x08003d0f Thumb Code 696 btod.o(CL$$btod_div_common) + _e2e 0x08004047 Thumb Code 198 btod.o(CL$$btod_e2e) + _btod_ediv 0x0800410d Thumb Code 40 btod.o(CL$$btod_ediv) + _btod_emul 0x08004135 Thumb Code 40 btod.o(CL$$btod_emul) + __btod_mult_common 0x0800415d Thumb Code 580 btod.o(CL$$btod_mult_common) + __ARM_fpclassify 0x080043a1 Thumb Code 40 fpclassify.o(i.__ARM_fpclassify) + _is_digit 0x080043c9 Thumb Code 14 __printf_wp.o(i._is_digit) + _get_lc_numeric 0x080043d9 Thumb Code 44 lc_numeric_c.o(locale$$code) + __aeabi_d2f 0x08004405 Thumb Code 0 d2f.o(x$fpl$d2f) + _d2f 0x08004405 Thumb Code 98 d2f.o(x$fpl$d2f) + __aeabi_i2d 0x08004467 Thumb Code 0 dflt_clz.o(x$fpl$dflt) + _dflt 0x08004467 Thumb Code 46 dflt_clz.o(x$fpl$dflt) + __aeabi_dmul 0x08004495 Thumb Code 0 dmul.o(x$fpl$dmul) + _dmul 0x08004495 Thumb Code 332 dmul.o(x$fpl$dmul) + __fpl_dnaninf 0x080045e9 Thumb Code 156 dnaninf.o(x$fpl$dnaninf) + __fpl_dretinf 0x08004685 Thumb Code 12 dretinf.o(x$fpl$dretinf) + __aeabi_f2d 0x08004691 Thumb Code 0 f2d.o(x$fpl$f2d) + _f2d 0x08004691 Thumb Code 86 f2d.o(x$fpl$f2d) + __aeabi_fadd 0x080046e9 Thumb Code 0 faddsub_clz.o(x$fpl$fadd) + _fadd 0x080046e9 Thumb Code 196 faddsub_clz.o(x$fpl$fadd) + __aeabi_f2iz 0x080047ad Thumb Code 0 ffix.o(x$fpl$ffix) + _ffix 0x080047ad Thumb Code 54 ffix.o(x$fpl$ffix) + __aeabi_i2f 0x080047e5 Thumb Code 0 fflt_clz.o(x$fpl$fflt) + _fflt 0x080047e5 Thumb Code 48 fflt_clz.o(x$fpl$fflt) + __aeabi_fmul 0x08004815 Thumb Code 0 fmul.o(x$fpl$fmul) + _fmul 0x08004815 Thumb Code 258 fmul.o(x$fpl$fmul) + __fpl_fnaninf 0x08004917 Thumb Code 140 fnaninf.o(x$fpl$fnaninf) + __fpl_fretinf 0x080049a3 Thumb Code 10 fretinf.o(x$fpl$fretinf) + __aeabi_fsub 0x080049ad Thumb Code 0 faddsub_clz.o(x$fpl$fsub) + _fsub 0x080049ad Thumb Code 234 faddsub_clz.o(x$fpl$fsub) + _printf_fp_dec 0x08004a97 Thumb Code 4 printf1.o(x$fpl$printf1) + F6x8 0x08004a9a Data 552 oled.o(.constdata) + __I$use$fp 0x08004a9a Number 0 usenofp.o(x$fpl$usenofp) + F8X16 0x08004cc2 Data 1520 oled.o(.constdata) + Region$$Table$$Base 0x08005348 Number 0 anon$$obj.o(Region$$Table) + Region$$Table$$Limit 0x08005368 Number 0 anon$$obj.o(Region$$Table) + SystemCoreClock 0x20000000 Data 4 system_stm32f10x.o(.data) + AHBPrescTable 0x20000004 Data 16 system_stm32f10x.o(.data) + rx_address 0x2000002c Data 4 bsp_usart.o(.data) + rx_count 0x20000030 Data 4 bsp_usart.o(.data) + rx_length 0x20000034 Data 4 bsp_usart.o(.data) + Hzk 0x2000003c Data 512 oled.o(.data) + Proportion 0x2000023c Data 4 pid.o(.data) + Integral 0x20000240 Data 4 pid.o(.data) + Derivative 0x20000244 Data 4 pid.o(.data) + Encoder_Left 0x20000258 Data 4 car.o(.data) + Encoder_Right 0x2000025c Data 4 car.o(.data) + Moto_Left 0x20000260 Data 4 car.o(.data) + Moto_Right 0x20000264 Data 4 car.o(.data) + para_L 0x20000268 Data 4 car.o(.data) + para_R 0x2000026c Data 4 car.o(.data) + SetPoint 0x20000270 Data 4 car.o(.data) + temp1 0x20000274 Data 4 car.o(.data) + temp2 0x20000278 Data 4 car.o(.data) + temp3 0x2000027c Data 4 car.o(.data) + temp4 0x20000280 Data 4 car.o(.data) + set_speed 0x20000284 Data 5 car.o(.data) + speed 0x20000289 Data 5 car.o(.data) + rx2_address 0x20000290 Data 4 bluetooth.o(.data) + rx2_count 0x20000294 Data 4 bluetooth.o(.data) + rx2_length 0x20000298 Data 4 bluetooth.o(.data) + BLE_RX 0x2000029c Data 64 main.o(.bss) + __libspace_start 0x200002dc Data 96 libspace.o(.bss) + __temporary_stack_top$libspace 0x2000033c Data 0 libspace.o(.bss) + + + +============================================================================== + +Memory Map of the image + + Image Entry point : 0x08000131 + + Load Region LR_IROM1 (Base: 0x08000000, Size: 0x00005620, Max: 0x00040000, ABSOLUTE, COMPRESSED[0x00005488]) + + Execution Region ER_IROM1 (Base: 0x08000000, Size: 0x00005384, Max: 0x00040000, ABSOLUTE) + + Base Addr Size Type Attr Idx E Section Name Object + + 0x08000000 0x00000130 Data RO 3 RESET startup_stm32f10x_hd.o + 0x08000130 0x00000008 Code RO 685 * !!!main c_w.l(__main.o) + 0x08000138 0x00000034 Code RO 937 !!!scatter c_w.l(__scatter.o) + 0x0800016c 0x0000005a Code RO 935 !!dczerorl2 c_w.l(__dczerorl2.o) + 0x080001c6 0x00000002 PAD + 0x080001c8 0x0000001c Code RO 939 !!handler_zi c_w.l(__scatter_zi.o) + 0x080001e4 0x00000000 Code RO 682 .ARM.Collect$$_printf_percent$$00000000 c_w.l(_printf_percent.o) + 0x080001e4 0x00000006 Code RO 681 .ARM.Collect$$_printf_percent$$00000003 c_w.l(_printf_f.o) + 0x080001ea 0x00000004 Code RO 726 .ARM.Collect$$_printf_percent$$00000017 c_w.l(_printf_percent_end.o) + 0x080001ee 0x00000002 Code RO 808 .ARM.Collect$$libinit$$00000000 c_w.l(libinit.o) + 0x080001f0 0x00000000 Code RO 810 .ARM.Collect$$libinit$$00000002 c_w.l(libinit2.o) + 0x080001f0 0x00000000 Code RO 812 .ARM.Collect$$libinit$$00000004 c_w.l(libinit2.o) + 0x080001f0 0x00000000 Code RO 815 .ARM.Collect$$libinit$$0000000A c_w.l(libinit2.o) + 0x080001f0 0x00000000 Code RO 817 .ARM.Collect$$libinit$$0000000C c_w.l(libinit2.o) + 0x080001f0 0x00000000 Code RO 819 .ARM.Collect$$libinit$$0000000E c_w.l(libinit2.o) + 0x080001f0 0x00000006 Code RO 820 .ARM.Collect$$libinit$$0000000F c_w.l(libinit2.o) + 0x080001f6 0x00000000 Code RO 822 .ARM.Collect$$libinit$$00000011 c_w.l(libinit2.o) + 0x080001f6 0x00000000 Code RO 824 .ARM.Collect$$libinit$$00000013 c_w.l(libinit2.o) + 0x080001f6 0x00000000 Code RO 826 .ARM.Collect$$libinit$$00000015 c_w.l(libinit2.o) + 0x080001f6 0x0000000a Code RO 827 .ARM.Collect$$libinit$$00000016 c_w.l(libinit2.o) + 0x08000200 0x00000000 Code RO 828 .ARM.Collect$$libinit$$00000017 c_w.l(libinit2.o) + 0x08000200 0x00000000 Code RO 830 .ARM.Collect$$libinit$$00000019 c_w.l(libinit2.o) + 0x08000200 0x00000000 Code RO 832 .ARM.Collect$$libinit$$0000001B c_w.l(libinit2.o) + 0x08000200 0x00000000 Code RO 834 .ARM.Collect$$libinit$$0000001D c_w.l(libinit2.o) + 0x08000200 0x00000000 Code RO 836 .ARM.Collect$$libinit$$0000001F c_w.l(libinit2.o) + 0x08000200 0x00000000 Code RO 838 .ARM.Collect$$libinit$$00000021 c_w.l(libinit2.o) + 0x08000200 0x00000000 Code RO 840 .ARM.Collect$$libinit$$00000023 c_w.l(libinit2.o) + 0x08000200 0x00000000 Code RO 842 .ARM.Collect$$libinit$$00000025 c_w.l(libinit2.o) + 0x08000200 0x00000000 Code RO 846 .ARM.Collect$$libinit$$0000002C c_w.l(libinit2.o) + 0x08000200 0x00000000 Code RO 848 .ARM.Collect$$libinit$$0000002E c_w.l(libinit2.o) + 0x08000200 0x00000000 Code RO 850 .ARM.Collect$$libinit$$00000030 c_w.l(libinit2.o) + 0x08000200 0x00000000 Code RO 852 .ARM.Collect$$libinit$$00000032 c_w.l(libinit2.o) + 0x08000200 0x00000002 Code RO 853 .ARM.Collect$$libinit$$00000033 c_w.l(libinit2.o) + 0x08000202 0x00000002 Code RO 883 .ARM.Collect$$libshutdown$$00000000 c_w.l(libshutdown.o) + 0x08000204 0x00000000 Code RO 894 .ARM.Collect$$libshutdown$$00000002 c_w.l(libshutdown2.o) + 0x08000204 0x00000000 Code RO 896 .ARM.Collect$$libshutdown$$00000004 c_w.l(libshutdown2.o) + 0x08000204 0x00000000 Code RO 899 .ARM.Collect$$libshutdown$$00000007 c_w.l(libshutdown2.o) + 0x08000204 0x00000000 Code RO 902 .ARM.Collect$$libshutdown$$0000000A c_w.l(libshutdown2.o) + 0x08000204 0x00000000 Code RO 904 .ARM.Collect$$libshutdown$$0000000C c_w.l(libshutdown2.o) + 0x08000204 0x00000000 Code RO 907 .ARM.Collect$$libshutdown$$0000000F c_w.l(libshutdown2.o) + 0x08000204 0x00000002 Code RO 908 .ARM.Collect$$libshutdown$$00000010 c_w.l(libshutdown2.o) + 0x08000206 0x00000000 Code RO 719 .ARM.Collect$$rtentry$$00000000 c_w.l(__rtentry.o) + 0x08000206 0x00000000 Code RO 737 .ARM.Collect$$rtentry$$00000002 c_w.l(__rtentry2.o) + 0x08000206 0x00000006 Code RO 749 .ARM.Collect$$rtentry$$00000004 c_w.l(__rtentry4.o) + 0x0800020c 0x00000000 Code RO 739 .ARM.Collect$$rtentry$$00000009 c_w.l(__rtentry2.o) + 0x0800020c 0x00000004 Code RO 740 .ARM.Collect$$rtentry$$0000000A c_w.l(__rtentry2.o) + 0x08000210 0x00000000 Code RO 742 .ARM.Collect$$rtentry$$0000000C c_w.l(__rtentry2.o) + 0x08000210 0x00000008 Code RO 743 .ARM.Collect$$rtentry$$0000000D c_w.l(__rtentry2.o) + 0x08000218 0x00000002 Code RO 854 .ARM.Collect$$rtexit$$00000000 c_w.l(rtexit.o) + 0x0800021a 0x00000000 Code RO 861 .ARM.Collect$$rtexit$$00000002 c_w.l(rtexit2.o) + 0x0800021a 0x00000004 Code RO 862 .ARM.Collect$$rtexit$$00000003 c_w.l(rtexit2.o) + 0x0800021e 0x00000006 Code RO 863 .ARM.Collect$$rtexit$$00000004 c_w.l(rtexit2.o) + 0x08000224 0x00000040 Code RO 4 .text startup_stm32f10x_hd.o + 0x08000264 0x000001e0 Code RO 24 .text system_stm32f10x.o + 0x08000444 0x000000dc Code RO 118 .text misc.o + 0x08000520 0x0000035c Code RO 269 .text stm32f10x_gpio.o + 0x0800087c 0x000003a4 Code RO 317 .text stm32f10x_rcc.o + 0x08000c20 0x00000e1a Code RO 367 .text stm32f10x_tim.o + 0x08001a3a 0x00000002 PAD + 0x08001a3c 0x00000408 Code RO 379 .text stm32f10x_usart.o + 0x08001e44 0x0000012c Code RO 403 .text bsp_sys.o + 0x08001f70 0x00000068 Code RO 455 .text bsp_gpio.o + 0x08001fd8 0x00000002 Code RO 468 .text bsp_nvic.o + 0x08001fda 0x00000002 PAD + 0x08001fdc 0x0000016c Code RO 480 .text bsp_usart.o + 0x08002148 0x000000ac Code RO 495 .text delay.o + 0x080021f4 0x00000218 Code RO 509 .text bsp_iic.o + 0x0800240c 0x00000340 Code RO 521 .text bsp_timer.o + 0x0800274c 0x00000104 Code RO 533 .text moto.o + 0x08002850 0x000004fc Code RO 545 .text oled.o + 0x08002d4c 0x00000180 Code RO 570 .text pid.o + 0x08002ecc 0x00000248 Code RO 585 .text car.o + 0x08003114 0x00000158 Code RO 603 .text bluetooth.o + 0x0800326c 0x000000e4 Code RO 621 .text main.o + 0x08003350 0x00000018 Code RO 636 .text stm32f10x_it.o + 0x08003368 0x00000028 Code RO 655 .text c_w.l(noretval__2sprintf.o) + 0x08003390 0x0000004e Code RO 659 .text c_w.l(_printf_pad.o) + 0x080033de 0x0000010e Code RO 669 .text c_w.l(__printf_wp.o) + 0x080034ec 0x00000006 Code RO 683 .text c_w.l(heapauxi.o) + 0x080034f2 0x0000041a Code RO 720 .text c_w.l(_printf_fp_dec.o) + 0x0800390c 0x00000030 Code RO 722 .text c_w.l(_printf_char_common.o) + 0x0800393c 0x0000000a Code RO 724 .text c_w.l(_sputc.o) + 0x08003946 0x00000002 PAD + 0x08003948 0x00000008 Code RO 754 .text c_w.l(rt_locale_intlibspace.o) + 0x08003950 0x0000008a Code RO 756 .text c_w.l(lludiv10.o) + 0x080039da 0x00000002 PAD + 0x080039dc 0x00000080 Code RO 758 .text c_w.l(_printf_fp_infnan.o) + 0x08003a5c 0x000000dc Code RO 762 .text c_w.l(bigflt0.o) + 0x08003b38 0x00000008 Code RO 794 .text c_w.l(libspace.o) + 0x08003b40 0x0000004a Code RO 797 .text c_w.l(sys_stackheap_outer.o) + 0x08003b8a 0x00000012 Code RO 799 .text c_w.l(exit.o) + 0x08003b9c 0x00000080 Code RO 801 .text c_w.l(strcmpv7m.o) + 0x08003c1c 0x0000000c Code RO 873 .text c_w.l(sys_exit.o) + 0x08003c28 0x00000002 Code RO 884 .text c_w.l(use_no_semi.o) + 0x08003c2a 0x00000000 Code RO 886 .text c_w.l(indicate_semi.o) + 0x08003c2a 0x0000003e Code RO 765 CL$$btod_d2e c_w.l(btod.o) + 0x08003c68 0x00000046 Code RO 767 CL$$btod_d2e_denorm_low c_w.l(btod.o) + 0x08003cae 0x00000060 Code RO 766 CL$$btod_d2e_norm_op1 c_w.l(btod.o) + 0x08003d0e 0x00000338 Code RO 775 CL$$btod_div_common c_w.l(btod.o) + 0x08004046 0x000000c6 Code RO 772 CL$$btod_e2e c_w.l(btod.o) + 0x0800410c 0x00000028 Code RO 769 CL$$btod_ediv c_w.l(btod.o) + 0x08004134 0x00000028 Code RO 768 CL$$btod_emul c_w.l(btod.o) + 0x0800415c 0x00000244 Code RO 774 CL$$btod_mult_common c_w.l(btod.o) + 0x080043a0 0x00000028 Code RO 792 i.__ARM_fpclassify m_ws.l(fpclassify.o) + 0x080043c8 0x0000000e Code RO 671 i._is_digit c_w.l(__printf_wp.o) + 0x080043d6 0x00000002 PAD + 0x080043d8 0x0000002c Code RO 788 locale$$code c_w.l(lc_numeric_c.o) + 0x08004404 0x00000062 Code RO 687 x$fpl$d2f fz_ws.l(d2f.o) + 0x08004466 0x0000002e Code RO 690 x$fpl$dflt fz_ws.l(dflt_clz.o) + 0x08004494 0x00000154 Code RO 695 x$fpl$dmul fz_ws.l(dmul.o) + 0x080045e8 0x0000009c Code RO 727 x$fpl$dnaninf fz_ws.l(dnaninf.o) + 0x08004684 0x0000000c Code RO 729 x$fpl$dretinf fz_ws.l(dretinf.o) + 0x08004690 0x00000056 Code RO 697 x$fpl$f2d fz_ws.l(f2d.o) + 0x080046e6 0x00000002 PAD + 0x080046e8 0x000000c4 Code RO 699 x$fpl$fadd fz_ws.l(faddsub_clz.o) + 0x080047ac 0x00000036 Code RO 705 x$fpl$ffix fz_ws.l(ffix.o) + 0x080047e2 0x00000002 PAD + 0x080047e4 0x00000030 Code RO 710 x$fpl$fflt fz_ws.l(fflt_clz.o) + 0x08004814 0x00000102 Code RO 715 x$fpl$fmul fz_ws.l(fmul.o) + 0x08004916 0x0000008c Code RO 731 x$fpl$fnaninf fz_ws.l(fnaninf.o) + 0x080049a2 0x0000000a Code RO 733 x$fpl$fretinf fz_ws.l(fretinf.o) + 0x080049ac 0x000000ea Code RO 701 x$fpl$fsub fz_ws.l(faddsub_clz.o) + 0x08004a96 0x00000004 Code RO 717 x$fpl$printf1 fz_ws.l(printf1.o) + 0x08004a9a 0x00000000 Code RO 735 x$fpl$usenofp fz_ws.l(usenofp.o) + 0x08004a9a 0x00000818 Data RO 546 .constdata oled.o + 0x080052b2 0x00000002 PAD + 0x080052b4 0x00000094 Data RO 763 .constdata c_w.l(bigflt0.o) + 0x08005348 0x00000020 Data RO 933 Region$$Table anon$$obj.o + 0x08005368 0x0000001c Data RO 787 locale$$data c_w.l(lc_numeric_c.o) + + + Execution Region RW_IRAM1 (Base: 0x20000000, Size: 0x00000940, Max: 0x0000c000, ABSOLUTE, COMPRESSED[0x00000104]) + + Base Addr Size Type Attr Idx E Section Name Object + + 0x20000000 0x00000014 Data RW 25 .data system_stm32f10x.o + 0x20000014 0x00000014 Data RW 318 .data stm32f10x_rcc.o + 0x20000028 0x00000004 Data RW 456 .data bsp_gpio.o + 0x2000002c 0x0000000c Data RW 481 .data bsp_usart.o + 0x20000038 0x00000004 Data RW 496 .data delay.o + 0x2000003c 0x00000200 Data RW 547 .data oled.o + 0x2000023c 0x0000001c Data RW 571 .data pid.o + 0x20000258 0x00000036 Data RW 586 .data car.o + 0x2000028e 0x00000002 PAD + 0x20000290 0x0000000c Data RW 604 .data bluetooth.o + 0x2000029c 0x00000040 Zero RW 622 .bss main.o + 0x200002dc 0x00000060 Zero RW 795 .bss c_w.l(libspace.o) + 0x2000033c 0x00000004 PAD + 0x20000340 0x00000200 Zero RW 2 HEAP startup_stm32f10x_hd.o + 0x20000540 0x00000400 Zero RW 1 STACK startup_stm32f10x_hd.o + + +============================================================================== + +Image component sizes + + + Code (inc. data) RO Data RW Data ZI Data Debug Object Name + + 344 20 0 12 0 1709 bluetooth.o + 104 10 0 4 0 680 bsp_gpio.o + 536 6 0 0 0 2134 bsp_iic.o + 2 0 0 0 0 402 bsp_nvic.o + 300 98 0 0 0 1842 bsp_sys.o + 832 20 0 0 0 2462 bsp_timer.o + 364 20 0 12 0 2015 bsp_usart.o + 584 78 0 54 0 1663 car.o + 0 0 0 0 0 4532 core_cm3.o + 172 8 0 4 0 1047 delay.o + 228 6 0 0 64 1196 main.o + 220 22 0 0 0 1793 misc.o + 260 4 0 0 0 1480 moto.o + 1276 14 2072 512 0 6084 oled.o + 384 38 0 28 0 1576 pid.o + 64 26 304 0 1536 864 startup_stm32f10x_hd.o + 860 38 0 0 0 5725 stm32f10x_gpio.o + 24 0 0 0 0 1110 stm32f10x_it.o + 932 36 0 20 0 8900 stm32f10x_rcc.o + 3610 88 0 0 0 22832 stm32f10x_tim.o + 1032 22 0 0 0 8452 stm32f10x_usart.o + 480 38 0 20 0 250199 system_stm32f10x.o + + ---------------------------------------------------------------------- + 12612 592 2410 668 1600 328697 Object Totals + 0 0 32 0 0 0 (incl. Generated) + 4 0 2 2 0 0 (incl. Padding) + + ---------------------------------------------------------------------- + + Code (inc. data) RO Data RW Data ZI Data Debug Library Member Name + + 90 0 0 0 0 0 __dczerorl2.o + 8 0 0 0 0 68 __main.o + 284 0 0 0 0 156 __printf_wp.o + 0 0 0 0 0 0 __rtentry.o + 12 0 0 0 0 0 __rtentry2.o + 6 0 0 0 0 0 __rtentry4.o + 52 8 0 0 0 0 __scatter.o + 28 0 0 0 0 0 __scatter_zi.o + 48 6 0 0 0 96 _printf_char_common.o + 6 0 0 0 0 0 _printf_f.o + 1050 0 0 0 0 216 _printf_fp_dec.o + 128 16 0 0 0 84 _printf_fp_infnan.o + 78 0 0 0 0 108 _printf_pad.o + 0 0 0 0 0 0 _printf_percent.o + 4 0 0 0 0 0 _printf_percent_end.o + 10 0 0 0 0 68 _sputc.o + 220 4 148 0 0 96 bigflt0.o + 1910 128 0 0 0 672 btod.o + 18 0 0 0 0 80 exit.o + 6 0 0 0 0 152 heapauxi.o + 0 0 0 0 0 0 indicate_semi.o + 44 10 28 0 0 76 lc_numeric_c.o + 2 0 0 0 0 0 libinit.o + 18 0 0 0 0 0 libinit2.o + 2 0 0 0 0 0 libshutdown.o + 2 0 0 0 0 0 libshutdown2.o + 8 4 0 0 96 68 libspace.o + 138 0 0 0 0 80 lludiv10.o + 40 6 0 0 0 84 noretval__2sprintf.o + 8 4 0 0 0 68 rt_locale_intlibspace.o + 2 0 0 0 0 0 rtexit.o + 10 0 0 0 0 0 rtexit2.o + 128 0 0 0 0 68 strcmpv7m.o + 12 4 0 0 0 68 sys_exit.o + 74 0 0 0 0 80 sys_stackheap_outer.o + 2 0 0 0 0 68 use_no_semi.o + 98 4 0 0 0 92 d2f.o + 46 0 0 0 0 68 dflt_clz.o + 340 12 0 0 0 104 dmul.o + 156 4 0 0 0 92 dnaninf.o + 12 0 0 0 0 68 dretinf.o + 86 4 0 0 0 84 f2d.o + 430 8 0 0 0 168 faddsub_clz.o + 54 4 0 0 0 84 ffix.o + 48 0 0 0 0 68 fflt_clz.o + 258 4 0 0 0 84 fmul.o + 140 4 0 0 0 84 fnaninf.o + 10 0 0 0 0 68 fretinf.o + 4 0 0 0 0 68 printf1.o + 0 0 0 0 0 0 usenofp.o + 40 0 0 0 0 68 fpclassify.o + + ---------------------------------------------------------------------- + 6182 234 176 0 100 3656 Library Totals + 12 0 0 0 4 0 (incl. Padding) + + ---------------------------------------------------------------------- + + Code (inc. data) RO Data RW Data ZI Data Debug Library Name + + 4448 190 176 0 96 2456 c_w.l + 1682 44 0 0 0 1132 fz_ws.l + 40 0 0 0 0 68 m_ws.l + + ---------------------------------------------------------------------- + 6182 234 176 0 100 3656 Library Totals + + ---------------------------------------------------------------------- + +============================================================================== + + + Code (inc. data) RO Data RW Data ZI Data Debug + + 18794 826 2586 668 1700 328813 Grand Totals + 18794 826 2586 260 1700 328813 ELF Image Totals (compressed) + 18794 826 2586 260 0 0 ROM Totals + +============================================================================== + + Total RO Size (Code + RO Data) 21380 ( 20.88kB) + Total RW Size (RW Data + ZI Data) 2368 ( 2.31kB) + Total ROM Size (Code + RO Data + RW Data) 21640 ( 21.13kB) + +============================================================================== + diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Listing/startup_stm32f10x_hd.lst b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Listing/startup_stm32f10x_hd.lst new file mode 100644 index 0000000..00d0f44 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Listing/startup_stm32f10x_hd.lst @@ -0,0 +1,1469 @@ + + + +ARM Macro Assembler Page 1 + + + 1 00000000 ;******************** (C) COPYRIGHT 2011 STMicroelectron + ics ******************** + 2 00000000 ;* File Name : startup_stm32f10x_hd.s + 3 00000000 ;* Author : MCD Application Team + 4 00000000 ;* Version : V3.5.0 + 5 00000000 ;* Date : 11-March-2011 + 6 00000000 ;* Description : STM32F10x High Density Devices v + ector table for MDK-ARM + 7 00000000 ;* toolchain. + 8 00000000 ;* This module performs: + 9 00000000 ;* - Set the initial SP + 10 00000000 ;* - Set the initial PC == Reset_Ha + ndler + 11 00000000 ;* - Set the vector table entries w + ith the exceptions ISR address + 12 00000000 ;* - Configure the clock system and + also configure the external + 13 00000000 ;* SRAM mounted on STM3210E-EVAL + board to be used as data + 14 00000000 ;* memory (optional, to be enable + d by user) + 15 00000000 ;* - Branches to __main in the C li + brary (which eventually + 16 00000000 ;* calls main()). + 17 00000000 ;* After Reset the CortexM3 process + or is in Thread mode, + 18 00000000 ;* priority is Privileged, and the + Stack is set to Main. + 19 00000000 ;* <<< Use Configuration Wizard in Context Menu >>> + 20 00000000 ;******************************************************* + ************************ + 21 00000000 ; THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS A + T PROVIDING CUSTOMERS + 22 00000000 ; WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN OR + DER FOR THEM TO SAVE TIME. + 23 00000000 ; AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIAB + LE FOR ANY DIRECT, + 24 00000000 ; INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY + CLAIMS ARISING FROM THE + 25 00000000 ; CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOM + ERS OF THE CODING + 26 00000000 ; INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR + PRODUCTS. + 27 00000000 ;******************************************************* + ************************ + 28 00000000 + 29 00000000 ; Amount of memory (in bytes) allocated for Stack + 30 00000000 ; Tailor this value to your application needs + 31 00000000 ; Stack Configuration + 32 00000000 ; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> + 33 00000000 ; + 34 00000000 + 35 00000000 00000400 + Stack_Size + EQU 0x00000400 + 36 00000000 + 37 00000000 AREA STACK, NOINIT, READWRITE, ALIGN +=3 + 38 00000000 Stack_Mem + + + +ARM Macro Assembler Page 2 + + + SPACE Stack_Size + 39 00000400 __initial_sp + 40 00000400 + 41 00000400 ; Heap Configuration + 42 00000400 ; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> + 43 00000400 ; + 44 00000400 + 45 00000400 00000200 + Heap_Size + EQU 0x00000200 + 46 00000400 + 47 00000400 AREA HEAP, NOINIT, READWRITE, ALIGN= +3 + 48 00000000 __heap_base + 49 00000000 Heap_Mem + SPACE Heap_Size + 50 00000200 __heap_limit + 51 00000200 + 52 00000200 PRESERVE8 + 53 00000200 THUMB + 54 00000200 + 55 00000200 + 56 00000200 ; Vector Table Mapped to Address 0 at Reset + 57 00000200 AREA RESET, DATA, READONLY + 58 00000000 EXPORT __Vectors + 59 00000000 EXPORT __Vectors_End + 60 00000000 EXPORT __Vectors_Size + 61 00000000 + 62 00000000 00000000 + __Vectors + DCD __initial_sp ; Top of Stack + 63 00000004 00000000 DCD Reset_Handler ; Reset Handler + 64 00000008 00000000 DCD NMI_Handler ; NMI Handler + 65 0000000C 00000000 DCD HardFault_Handler ; Hard Fault + Handler + 66 00000010 00000000 DCD MemManage_Handler + ; MPU Fault Handler + + 67 00000014 00000000 DCD BusFault_Handler + ; Bus Fault Handler + + 68 00000018 00000000 DCD UsageFault_Handler ; Usage Faul + t Handler + 69 0000001C 00000000 DCD 0 ; Reserved + 70 00000020 00000000 DCD 0 ; Reserved + 71 00000024 00000000 DCD 0 ; Reserved + 72 00000028 00000000 DCD 0 ; Reserved + 73 0000002C 00000000 DCD SVC_Handler ; SVCall Handler + 74 00000030 00000000 DCD DebugMon_Handler ; Debug Monito + r Handler + 75 00000034 00000000 DCD 0 ; Reserved + 76 00000038 00000000 DCD PendSV_Handler ; PendSV Handler + + 77 0000003C 00000000 DCD SysTick_Handler + ; SysTick Handler + 78 00000040 + 79 00000040 ; External Interrupts + 80 00000040 00000000 DCD WWDG_IRQHandler + ; Window Watchdog + + + +ARM Macro Assembler Page 3 + + + 81 00000044 00000000 DCD PVD_IRQHandler ; PVD through EX + TI Line detect + 82 00000048 00000000 DCD TAMPER_IRQHandler ; Tamper + 83 0000004C 00000000 DCD RTC_IRQHandler ; RTC + 84 00000050 00000000 DCD FLASH_IRQHandler ; Flash + 85 00000054 00000000 DCD RCC_IRQHandler ; RCC + 86 00000058 00000000 DCD EXTI0_IRQHandler ; EXTI Line 0 + 87 0000005C 00000000 DCD EXTI1_IRQHandler ; EXTI Line 1 + 88 00000060 00000000 DCD EXTI2_IRQHandler ; EXTI Line 2 + 89 00000064 00000000 DCD EXTI3_IRQHandler ; EXTI Line 3 + 90 00000068 00000000 DCD EXTI4_IRQHandler ; EXTI Line 4 + 91 0000006C 00000000 DCD DMA1_Channel1_IRQHandler + ; DMA1 Channel 1 + 92 00000070 00000000 DCD DMA1_Channel2_IRQHandler + ; DMA1 Channel 2 + 93 00000074 00000000 DCD DMA1_Channel3_IRQHandler + ; DMA1 Channel 3 + 94 00000078 00000000 DCD DMA1_Channel4_IRQHandler + ; DMA1 Channel 4 + 95 0000007C 00000000 DCD DMA1_Channel5_IRQHandler + ; DMA1 Channel 5 + 96 00000080 00000000 DCD DMA1_Channel6_IRQHandler + ; DMA1 Channel 6 + 97 00000084 00000000 DCD DMA1_Channel7_IRQHandler + ; DMA1 Channel 7 + 98 00000088 00000000 DCD ADC1_2_IRQHandler ; ADC1 & ADC2 + + 99 0000008C 00000000 DCD USB_HP_CAN1_TX_IRQHandler ; USB + High Priority or C + AN1 TX + 100 00000090 00000000 DCD USB_LP_CAN1_RX0_IRQHandler ; US + B Low Priority or + CAN1 RX0 + 101 00000094 00000000 DCD CAN1_RX1_IRQHandler ; CAN1 RX1 + 102 00000098 00000000 DCD CAN1_SCE_IRQHandler ; CAN1 SCE + 103 0000009C 00000000 DCD EXTI9_5_IRQHandler + ; EXTI Line 9..5 + 104 000000A0 00000000 DCD TIM1_BRK_IRQHandler + ; TIM1 Break + 105 000000A4 00000000 DCD TIM1_UP_IRQHandler + ; TIM1 Update + 106 000000A8 00000000 DCD TIM1_TRG_COM_IRQHandler ; TIM1 + Trigger and Commuta + tion + 107 000000AC 00000000 DCD TIM1_CC_IRQHandler ; TIM1 Captu + re Compare + 108 000000B0 00000000 DCD TIM2_IRQHandler ; TIM2 + 109 000000B4 00000000 DCD TIM3_IRQHandler ; TIM3 + 110 000000B8 00000000 DCD TIM4_IRQHandler ; TIM4 + 111 000000BC 00000000 DCD I2C1_EV_IRQHandler ; I2C1 Event + + 112 000000C0 00000000 DCD I2C1_ER_IRQHandler ; I2C1 Error + + 113 000000C4 00000000 DCD I2C2_EV_IRQHandler ; I2C2 Event + + 114 000000C8 00000000 DCD I2C2_ER_IRQHandler ; I2C2 Error + + 115 000000CC 00000000 DCD SPI1_IRQHandler ; SPI1 + 116 000000D0 00000000 DCD SPI2_IRQHandler ; SPI2 + + + +ARM Macro Assembler Page 4 + + + 117 000000D4 00000000 DCD USART1_IRQHandler ; USART1 + 118 000000D8 00000000 DCD USART2_IRQHandler ; USART2 + 119 000000DC 00000000 DCD USART3_IRQHandler ; USART3 + 120 000000E0 00000000 DCD EXTI15_10_IRQHandler + ; EXTI Line 15..10 + 121 000000E4 00000000 DCD RTCAlarm_IRQHandler ; RTC Alarm + through EXTI Line + 122 000000E8 00000000 DCD USBWakeUp_IRQHandler ; USB Wake + up from suspend + 123 000000EC 00000000 DCD TIM8_BRK_IRQHandler + ; TIM8 Break + 124 000000F0 00000000 DCD TIM8_UP_IRQHandler + ; TIM8 Update + 125 000000F4 00000000 DCD TIM8_TRG_COM_IRQHandler ; TIM8 + Trigger and Commuta + tion + 126 000000F8 00000000 DCD TIM8_CC_IRQHandler ; TIM8 Captu + re Compare + 127 000000FC 00000000 DCD ADC3_IRQHandler ; ADC3 + 128 00000100 00000000 DCD FSMC_IRQHandler ; FSMC + 129 00000104 00000000 DCD SDIO_IRQHandler ; SDIO + 130 00000108 00000000 DCD TIM5_IRQHandler ; TIM5 + 131 0000010C 00000000 DCD SPI3_IRQHandler ; SPI3 + 132 00000110 00000000 DCD UART4_IRQHandler ; UART4 + 133 00000114 00000000 DCD UART5_IRQHandler ; UART5 + 134 00000118 00000000 DCD TIM6_IRQHandler ; TIM6 + 135 0000011C 00000000 DCD TIM7_IRQHandler ; TIM7 + 136 00000120 00000000 DCD DMA2_Channel1_IRQHandler + ; DMA2 Channel1 + 137 00000124 00000000 DCD DMA2_Channel2_IRQHandler + ; DMA2 Channel2 + 138 00000128 00000000 DCD DMA2_Channel3_IRQHandler + ; DMA2 Channel3 + 139 0000012C 00000000 DCD DMA2_Channel4_5_IRQHandler ; DM + A2 Channel4 & Chann + el5 + 140 00000130 __Vectors_End + 141 00000130 + 142 00000130 00000130 + __Vectors_Size + EQU __Vectors_End - __Vectors + 143 00000130 + 144 00000130 AREA |.text|, CODE, READONLY + 145 00000000 + 146 00000000 ; Reset handler + 147 00000000 Reset_Handler + PROC + 148 00000000 EXPORT Reset_Handler [WEAK +] + 149 00000000 IMPORT __main + 150 00000000 IMPORT SystemInit + 151 00000000 4809 LDR R0, =SystemInit + 152 00000002 4780 BLX R0 + 153 00000004 4809 LDR R0, =__main + 154 00000006 4700 BX R0 + 155 00000008 ENDP + 156 00000008 + 157 00000008 ; Dummy Exception Handlers (infinite loops which can be + modified) + + + +ARM Macro Assembler Page 5 + + + 158 00000008 + 159 00000008 NMI_Handler + PROC + 160 00000008 EXPORT NMI_Handler [WEA +K] + 161 00000008 E7FE B . + 162 0000000A ENDP + 164 0000000A HardFault_Handler + PROC + 165 0000000A EXPORT HardFault_Handler [WEA +K] + 166 0000000A E7FE B . + 167 0000000C ENDP + 169 0000000C MemManage_Handler + PROC + 170 0000000C EXPORT MemManage_Handler [WEA +K] + 171 0000000C E7FE B . + 172 0000000E ENDP + 174 0000000E BusFault_Handler + PROC + 175 0000000E EXPORT BusFault_Handler [WEA +K] + 176 0000000E E7FE B . + 177 00000010 ENDP + 179 00000010 UsageFault_Handler + PROC + 180 00000010 EXPORT UsageFault_Handler [WEA +K] + 181 00000010 E7FE B . + 182 00000012 ENDP + 183 00000012 SVC_Handler + PROC + 184 00000012 EXPORT SVC_Handler [WEA +K] + 185 00000012 E7FE B . + 186 00000014 ENDP + 188 00000014 DebugMon_Handler + PROC + 189 00000014 EXPORT DebugMon_Handler [WEA +K] + 190 00000014 E7FE B . + 191 00000016 ENDP + 192 00000016 PendSV_Handler + PROC + 193 00000016 EXPORT PendSV_Handler [WEA +K] + 194 00000016 E7FE B . + 195 00000018 ENDP + 196 00000018 SysTick_Handler + PROC + 197 00000018 EXPORT SysTick_Handler [WEA +K] + 198 00000018 E7FE B . + 199 0000001A ENDP + 200 0000001A + 201 0000001A Default_Handler + PROC + 202 0000001A + + + +ARM Macro Assembler Page 6 + + + 203 0000001A EXPORT WWDG_IRQHandler [WEA +K] + 204 0000001A EXPORT PVD_IRQHandler [WEA +K] + 205 0000001A EXPORT TAMPER_IRQHandler [WEA +K] + 206 0000001A EXPORT RTC_IRQHandler [WEA +K] + 207 0000001A EXPORT FLASH_IRQHandler [WEA +K] + 208 0000001A EXPORT RCC_IRQHandler [WEA +K] + 209 0000001A EXPORT EXTI0_IRQHandler [WEA +K] + 210 0000001A EXPORT EXTI1_IRQHandler [WEA +K] + 211 0000001A EXPORT EXTI2_IRQHandler [WEA +K] + 212 0000001A EXPORT EXTI3_IRQHandler [WEA +K] + 213 0000001A EXPORT EXTI4_IRQHandler [WEA +K] + 214 0000001A EXPORT DMA1_Channel1_IRQHandler [WEA +K] + 215 0000001A EXPORT DMA1_Channel2_IRQHandler [WEA +K] + 216 0000001A EXPORT DMA1_Channel3_IRQHandler [WEA +K] + 217 0000001A EXPORT DMA1_Channel4_IRQHandler [WEA +K] + 218 0000001A EXPORT DMA1_Channel5_IRQHandler [WEA +K] + 219 0000001A EXPORT DMA1_Channel6_IRQHandler [WEA +K] + 220 0000001A EXPORT DMA1_Channel7_IRQHandler [WEA +K] + 221 0000001A EXPORT ADC1_2_IRQHandler [WEA +K] + 222 0000001A EXPORT USB_HP_CAN1_TX_IRQHandler [WEA +K] + 223 0000001A EXPORT USB_LP_CAN1_RX0_IRQHandler [WEA +K] + 224 0000001A EXPORT CAN1_RX1_IRQHandler [WEA +K] + 225 0000001A EXPORT CAN1_SCE_IRQHandler [WEA +K] + 226 0000001A EXPORT EXTI9_5_IRQHandler [WEA +K] + 227 0000001A EXPORT TIM1_BRK_IRQHandler [WEA +K] + 228 0000001A EXPORT TIM1_UP_IRQHandler [WEA +K] + 229 0000001A EXPORT TIM1_TRG_COM_IRQHandler [WEA +K] + 230 0000001A EXPORT TIM1_CC_IRQHandler [WEA +K] + 231 0000001A EXPORT TIM2_IRQHandler [WEA +K] + 232 0000001A EXPORT TIM3_IRQHandler [WEA + + + +ARM Macro Assembler Page 7 + + +K] + 233 0000001A EXPORT TIM4_IRQHandler [WEA +K] + 234 0000001A EXPORT I2C1_EV_IRQHandler [WEA +K] + 235 0000001A EXPORT I2C1_ER_IRQHandler [WEA +K] + 236 0000001A EXPORT I2C2_EV_IRQHandler [WEA +K] + 237 0000001A EXPORT I2C2_ER_IRQHandler [WEA +K] + 238 0000001A EXPORT SPI1_IRQHandler [WEA +K] + 239 0000001A EXPORT SPI2_IRQHandler [WEA +K] + 240 0000001A EXPORT USART1_IRQHandler [WEA +K] + 241 0000001A EXPORT USART2_IRQHandler [WEA +K] + 242 0000001A EXPORT USART3_IRQHandler [WEA +K] + 243 0000001A EXPORT EXTI15_10_IRQHandler [WEA +K] + 244 0000001A EXPORT RTCAlarm_IRQHandler [WEA +K] + 245 0000001A EXPORT USBWakeUp_IRQHandler [WEA +K] + 246 0000001A EXPORT TIM8_BRK_IRQHandler [WEA +K] + 247 0000001A EXPORT TIM8_UP_IRQHandler [WEA +K] + 248 0000001A EXPORT TIM8_TRG_COM_IRQHandler [WEA +K] + 249 0000001A EXPORT TIM8_CC_IRQHandler [WEA +K] + 250 0000001A EXPORT ADC3_IRQHandler [WEA +K] + 251 0000001A EXPORT FSMC_IRQHandler [WEA +K] + 252 0000001A EXPORT SDIO_IRQHandler [WEA +K] + 253 0000001A EXPORT TIM5_IRQHandler [WEA +K] + 254 0000001A EXPORT SPI3_IRQHandler [WEA +K] + 255 0000001A EXPORT UART4_IRQHandler [WEA +K] + 256 0000001A EXPORT UART5_IRQHandler [WEA +K] + 257 0000001A EXPORT TIM6_IRQHandler [WEA +K] + 258 0000001A EXPORT TIM7_IRQHandler [WEA +K] + 259 0000001A EXPORT DMA2_Channel1_IRQHandler [WEA +K] + 260 0000001A EXPORT DMA2_Channel2_IRQHandler [WEA +K] + 261 0000001A EXPORT DMA2_Channel3_IRQHandler [WEA +K] + + + +ARM Macro Assembler Page 8 + + + 262 0000001A EXPORT DMA2_Channel4_5_IRQHandler [WEA +K] + 263 0000001A + 264 0000001A WWDG_IRQHandler + 265 0000001A PVD_IRQHandler + 266 0000001A TAMPER_IRQHandler + 267 0000001A RTC_IRQHandler + 268 0000001A FLASH_IRQHandler + 269 0000001A RCC_IRQHandler + 270 0000001A EXTI0_IRQHandler + 271 0000001A EXTI1_IRQHandler + 272 0000001A EXTI2_IRQHandler + 273 0000001A EXTI3_IRQHandler + 274 0000001A EXTI4_IRQHandler + 275 0000001A DMA1_Channel1_IRQHandler + 276 0000001A DMA1_Channel2_IRQHandler + 277 0000001A DMA1_Channel3_IRQHandler + 278 0000001A DMA1_Channel4_IRQHandler + 279 0000001A DMA1_Channel5_IRQHandler + 280 0000001A DMA1_Channel6_IRQHandler + 281 0000001A DMA1_Channel7_IRQHandler + 282 0000001A ADC1_2_IRQHandler + 283 0000001A USB_HP_CAN1_TX_IRQHandler + 284 0000001A USB_LP_CAN1_RX0_IRQHandler + 285 0000001A CAN1_RX1_IRQHandler + 286 0000001A CAN1_SCE_IRQHandler + 287 0000001A EXTI9_5_IRQHandler + 288 0000001A TIM1_BRK_IRQHandler + 289 0000001A TIM1_UP_IRQHandler + 290 0000001A TIM1_TRG_COM_IRQHandler + 291 0000001A TIM1_CC_IRQHandler + 292 0000001A TIM2_IRQHandler + 293 0000001A TIM3_IRQHandler + 294 0000001A TIM4_IRQHandler + 295 0000001A I2C1_EV_IRQHandler + 296 0000001A I2C1_ER_IRQHandler + 297 0000001A I2C2_EV_IRQHandler + 298 0000001A I2C2_ER_IRQHandler + 299 0000001A SPI1_IRQHandler + 300 0000001A SPI2_IRQHandler + 301 0000001A USART1_IRQHandler + 302 0000001A USART2_IRQHandler + 303 0000001A USART3_IRQHandler + 304 0000001A EXTI15_10_IRQHandler + 305 0000001A RTCAlarm_IRQHandler + 306 0000001A USBWakeUp_IRQHandler + 307 0000001A TIM8_BRK_IRQHandler + 308 0000001A TIM8_UP_IRQHandler + 309 0000001A TIM8_TRG_COM_IRQHandler + 310 0000001A TIM8_CC_IRQHandler + 311 0000001A ADC3_IRQHandler + 312 0000001A FSMC_IRQHandler + 313 0000001A SDIO_IRQHandler + 314 0000001A TIM5_IRQHandler + 315 0000001A SPI3_IRQHandler + 316 0000001A UART4_IRQHandler + 317 0000001A UART5_IRQHandler + 318 0000001A TIM6_IRQHandler + 319 0000001A TIM7_IRQHandler + + + +ARM Macro Assembler Page 9 + + + 320 0000001A DMA2_Channel1_IRQHandler + 321 0000001A DMA2_Channel2_IRQHandler + 322 0000001A DMA2_Channel3_IRQHandler + 323 0000001A DMA2_Channel4_5_IRQHandler + 324 0000001A E7FE B . + 325 0000001C + 326 0000001C ENDP + 327 0000001C + 328 0000001C ALIGN + 329 0000001C + 330 0000001C ;******************************************************* + ************************ + 331 0000001C ; User Stack and Heap initialization + 332 0000001C ;******************************************************* + ************************ + 333 0000001C IF :DEF:__MICROLIB + 340 0000001C + 341 0000001C IMPORT __use_two_region_memory + 342 0000001C EXPORT __user_initial_stackheap + 343 0000001C + 344 0000001C __user_initial_stackheap + 345 0000001C + 346 0000001C 4804 LDR R0, = Heap_Mem + 347 0000001E 4905 LDR R1, =(Stack_Mem + Stack_Size) + 348 00000020 4A05 LDR R2, = (Heap_Mem + Heap_Size) + 349 00000022 4B06 LDR R3, = Stack_Mem + 350 00000024 4770 BX LR + 351 00000026 + 352 00000026 00 00 ALIGN + 353 00000028 + 354 00000028 ENDIF + 355 00000028 + 356 00000028 END + 00000000 + 00000000 + 00000000 + 00000400 + 00000200 + 00000000 +Command Line: --debug --xref --diag_suppress=9931 --cpu=Cortex-M3 --apcs=interw +ork --depend=..\output\startup_stm32f10x_hd.d -o..\output\startup_stm32f10x_hd. +o -IE:\HardwareProject\GeekRebot\2.Firmware\STM32_Core\Project\RTE -I"D:\Progra +m Files\Keilv5\ARM\PACK\Keil\STM32F1xx_DFP\1.1.0\Device\Include" -I"D:\Program +Files\Keilv5\ARM\CMSIS\Include" --predefine="__UVISION_VERSION SETA 521" --pred +efine="STM32F10X_HD SETA 1" --list=..\listing\startup_stm32f10x_hd.lst ..\Libra +ries\CMSIS\startup\startup_stm32f10x_hd.s + + + +ARM Macro Assembler Page 1 Alphabetic symbol ordering +Relocatable symbols + +STACK 00000000 + +Symbol: STACK + Definitions + At line 37 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + None +Comment: STACK unused +Stack_Mem 00000000 + +Symbol: Stack_Mem + Definitions + At line 38 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 347 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 349 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +__initial_sp 00000400 + +Symbol: __initial_sp + Definitions + At line 39 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 62 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s +Comment: __initial_sp used once +3 symbols + + + +ARM Macro Assembler Page 1 Alphabetic symbol ordering +Relocatable symbols + +HEAP 00000000 + +Symbol: HEAP + Definitions + At line 47 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + None +Comment: HEAP unused +Heap_Mem 00000000 + +Symbol: Heap_Mem + Definitions + At line 49 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 346 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 348 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +__heap_base 00000000 + +Symbol: __heap_base + Definitions + At line 48 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + None +Comment: __heap_base unused +__heap_limit 00000200 + +Symbol: __heap_limit + Definitions + At line 50 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + None +Comment: __heap_limit unused +4 symbols + + + +ARM Macro Assembler Page 1 Alphabetic symbol ordering +Relocatable symbols + +RESET 00000000 + +Symbol: RESET + Definitions + At line 57 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + None +Comment: RESET unused +__Vectors 00000000 + +Symbol: __Vectors + Definitions + At line 62 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 58 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 142 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +__Vectors_End 00000130 + +Symbol: __Vectors_End + Definitions + At line 140 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 59 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 142 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +3 symbols + + + +ARM Macro Assembler Page 1 Alphabetic symbol ordering +Relocatable symbols + +.text 00000000 + +Symbol: .text + Definitions + At line 144 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + None +Comment: .text unused +ADC1_2_IRQHandler 0000001A + +Symbol: ADC1_2_IRQHandler + Definitions + At line 282 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 98 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 221 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +ADC3_IRQHandler 0000001A + +Symbol: ADC3_IRQHandler + Definitions + At line 311 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 127 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 250 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +BusFault_Handler 0000000E + +Symbol: BusFault_Handler + Definitions + At line 174 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 67 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 175 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +CAN1_RX1_IRQHandler 0000001A + +Symbol: CAN1_RX1_IRQHandler + Definitions + At line 285 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 101 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 224 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +CAN1_SCE_IRQHandler 0000001A + +Symbol: CAN1_SCE_IRQHandler + Definitions + At line 286 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 102 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 225 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +DMA1_Channel1_IRQHandler 0000001A + +Symbol: DMA1_Channel1_IRQHandler + Definitions + At line 275 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + + + +ARM Macro Assembler Page 2 Alphabetic symbol ordering +Relocatable symbols + + At line 91 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 214 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +DMA1_Channel2_IRQHandler 0000001A + +Symbol: DMA1_Channel2_IRQHandler + Definitions + At line 276 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 92 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 215 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +DMA1_Channel3_IRQHandler 0000001A + +Symbol: DMA1_Channel3_IRQHandler + Definitions + At line 277 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 93 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 216 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +DMA1_Channel4_IRQHandler 0000001A + +Symbol: DMA1_Channel4_IRQHandler + Definitions + At line 278 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 94 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 217 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +DMA1_Channel5_IRQHandler 0000001A + +Symbol: DMA1_Channel5_IRQHandler + Definitions + At line 279 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 95 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 218 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +DMA1_Channel6_IRQHandler 0000001A + +Symbol: DMA1_Channel6_IRQHandler + Definitions + At line 280 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 96 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 219 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +DMA1_Channel7_IRQHandler 0000001A + +Symbol: DMA1_Channel7_IRQHandler + Definitions + At line 281 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 97 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 220 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +DMA2_Channel1_IRQHandler 0000001A + + + + +ARM Macro Assembler Page 3 Alphabetic symbol ordering +Relocatable symbols + +Symbol: DMA2_Channel1_IRQHandler + Definitions + At line 320 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 136 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 259 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +DMA2_Channel2_IRQHandler 0000001A + +Symbol: DMA2_Channel2_IRQHandler + Definitions + At line 321 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 137 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 260 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +DMA2_Channel3_IRQHandler 0000001A + +Symbol: DMA2_Channel3_IRQHandler + Definitions + At line 322 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 138 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 261 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +DMA2_Channel4_5_IRQHandler 0000001A + +Symbol: DMA2_Channel4_5_IRQHandler + Definitions + At line 323 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 139 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 262 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +DebugMon_Handler 00000014 + +Symbol: DebugMon_Handler + Definitions + At line 188 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 74 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 189 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +Default_Handler 0000001A + +Symbol: Default_Handler + Definitions + At line 201 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + None +Comment: Default_Handler unused +EXTI0_IRQHandler 0000001A + +Symbol: EXTI0_IRQHandler + Definitions + At line 270 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 86 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 209 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + + + +ARM Macro Assembler Page 4 Alphabetic symbol ordering +Relocatable symbols + + +EXTI15_10_IRQHandler 0000001A + +Symbol: EXTI15_10_IRQHandler + Definitions + At line 304 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 120 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 243 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +EXTI1_IRQHandler 0000001A + +Symbol: EXTI1_IRQHandler + Definitions + At line 271 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 87 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 210 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +EXTI2_IRQHandler 0000001A + +Symbol: EXTI2_IRQHandler + Definitions + At line 272 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 88 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 211 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +EXTI3_IRQHandler 0000001A + +Symbol: EXTI3_IRQHandler + Definitions + At line 273 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 89 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 212 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +EXTI4_IRQHandler 0000001A + +Symbol: EXTI4_IRQHandler + Definitions + At line 274 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 90 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 213 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +EXTI9_5_IRQHandler 0000001A + +Symbol: EXTI9_5_IRQHandler + Definitions + At line 287 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 103 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 226 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +FLASH_IRQHandler 0000001A + +Symbol: FLASH_IRQHandler + Definitions + + + +ARM Macro Assembler Page 5 Alphabetic symbol ordering +Relocatable symbols + + At line 268 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 84 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 207 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +FSMC_IRQHandler 0000001A + +Symbol: FSMC_IRQHandler + Definitions + At line 312 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 128 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 251 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +HardFault_Handler 0000000A + +Symbol: HardFault_Handler + Definitions + At line 164 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 65 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 165 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +I2C1_ER_IRQHandler 0000001A + +Symbol: I2C1_ER_IRQHandler + Definitions + At line 296 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 112 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 235 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +I2C1_EV_IRQHandler 0000001A + +Symbol: I2C1_EV_IRQHandler + Definitions + At line 295 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 111 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 234 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +I2C2_ER_IRQHandler 0000001A + +Symbol: I2C2_ER_IRQHandler + Definitions + At line 298 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 114 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 237 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +I2C2_EV_IRQHandler 0000001A + +Symbol: I2C2_EV_IRQHandler + Definitions + At line 297 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 113 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 236 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + + + + +ARM Macro Assembler Page 6 Alphabetic symbol ordering +Relocatable symbols + +MemManage_Handler 0000000C + +Symbol: MemManage_Handler + Definitions + At line 169 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 66 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 170 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +NMI_Handler 00000008 + +Symbol: NMI_Handler + Definitions + At line 159 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 64 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 160 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +PVD_IRQHandler 0000001A + +Symbol: PVD_IRQHandler + Definitions + At line 265 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 81 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 204 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +PendSV_Handler 00000016 + +Symbol: PendSV_Handler + Definitions + At line 192 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 76 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 193 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +RCC_IRQHandler 0000001A + +Symbol: RCC_IRQHandler + Definitions + At line 269 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 85 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 208 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +RTCAlarm_IRQHandler 0000001A + +Symbol: RTCAlarm_IRQHandler + Definitions + At line 305 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 121 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 244 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +RTC_IRQHandler 0000001A + +Symbol: RTC_IRQHandler + Definitions + At line 267 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + + + +ARM Macro Assembler Page 7 Alphabetic symbol ordering +Relocatable symbols + + Uses + At line 83 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 206 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +Reset_Handler 00000000 + +Symbol: Reset_Handler + Definitions + At line 147 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 63 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 148 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +SDIO_IRQHandler 0000001A + +Symbol: SDIO_IRQHandler + Definitions + At line 313 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 129 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 252 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +SPI1_IRQHandler 0000001A + +Symbol: SPI1_IRQHandler + Definitions + At line 299 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 115 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 238 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +SPI2_IRQHandler 0000001A + +Symbol: SPI2_IRQHandler + Definitions + At line 300 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 116 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 239 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +SPI3_IRQHandler 0000001A + +Symbol: SPI3_IRQHandler + Definitions + At line 315 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 131 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 254 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +SVC_Handler 00000012 + +Symbol: SVC_Handler + Definitions + At line 183 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 73 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 184 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +SysTick_Handler 00000018 + + + +ARM Macro Assembler Page 8 Alphabetic symbol ordering +Relocatable symbols + + +Symbol: SysTick_Handler + Definitions + At line 196 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 77 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 197 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +TAMPER_IRQHandler 0000001A + +Symbol: TAMPER_IRQHandler + Definitions + At line 266 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 82 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 205 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +TIM1_BRK_IRQHandler 0000001A + +Symbol: TIM1_BRK_IRQHandler + Definitions + At line 288 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 104 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 227 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +TIM1_CC_IRQHandler 0000001A + +Symbol: TIM1_CC_IRQHandler + Definitions + At line 291 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 107 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 230 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +TIM1_TRG_COM_IRQHandler 0000001A + +Symbol: TIM1_TRG_COM_IRQHandler + Definitions + At line 290 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 106 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 229 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +TIM1_UP_IRQHandler 0000001A + +Symbol: TIM1_UP_IRQHandler + Definitions + At line 289 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 105 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 228 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +TIM2_IRQHandler 0000001A + +Symbol: TIM2_IRQHandler + Definitions + At line 292 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + + + +ARM Macro Assembler Page 9 Alphabetic symbol ordering +Relocatable symbols + + At line 108 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 231 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +TIM3_IRQHandler 0000001A + +Symbol: TIM3_IRQHandler + Definitions + At line 293 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 109 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 232 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +TIM4_IRQHandler 0000001A + +Symbol: TIM4_IRQHandler + Definitions + At line 294 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 110 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 233 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +TIM5_IRQHandler 0000001A + +Symbol: TIM5_IRQHandler + Definitions + At line 314 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 130 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 253 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +TIM6_IRQHandler 0000001A + +Symbol: TIM6_IRQHandler + Definitions + At line 318 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 134 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 257 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +TIM7_IRQHandler 0000001A + +Symbol: TIM7_IRQHandler + Definitions + At line 319 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 135 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 258 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +TIM8_BRK_IRQHandler 0000001A + +Symbol: TIM8_BRK_IRQHandler + Definitions + At line 307 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 123 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 246 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +TIM8_CC_IRQHandler 0000001A + + + + +ARM Macro Assembler Page 10 Alphabetic symbol ordering +Relocatable symbols + +Symbol: TIM8_CC_IRQHandler + Definitions + At line 310 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 126 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 249 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +TIM8_TRG_COM_IRQHandler 0000001A + +Symbol: TIM8_TRG_COM_IRQHandler + Definitions + At line 309 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 125 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 248 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +TIM8_UP_IRQHandler 0000001A + +Symbol: TIM8_UP_IRQHandler + Definitions + At line 308 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 124 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 247 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +UART4_IRQHandler 0000001A + +Symbol: UART4_IRQHandler + Definitions + At line 316 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 132 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 255 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +UART5_IRQHandler 0000001A + +Symbol: UART5_IRQHandler + Definitions + At line 317 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 133 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 256 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +USART1_IRQHandler 0000001A + +Symbol: USART1_IRQHandler + Definitions + At line 301 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 117 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 240 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +USART2_IRQHandler 0000001A + +Symbol: USART2_IRQHandler + Definitions + At line 302 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 118 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + + + +ARM Macro Assembler Page 11 Alphabetic symbol ordering +Relocatable symbols + + At line 241 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +USART3_IRQHandler 0000001A + +Symbol: USART3_IRQHandler + Definitions + At line 303 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 119 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 242 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +USBWakeUp_IRQHandler 0000001A + +Symbol: USBWakeUp_IRQHandler + Definitions + At line 306 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 122 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 245 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +USB_HP_CAN1_TX_IRQHandler 0000001A + +Symbol: USB_HP_CAN1_TX_IRQHandler + Definitions + At line 283 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 99 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 222 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +USB_LP_CAN1_RX0_IRQHandler 0000001A + +Symbol: USB_LP_CAN1_RX0_IRQHandler + Definitions + At line 284 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 100 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 223 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +UsageFault_Handler 00000010 + +Symbol: UsageFault_Handler + Definitions + At line 179 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 68 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 180 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +WWDG_IRQHandler 0000001A + +Symbol: WWDG_IRQHandler + Definitions + At line 264 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 80 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 203 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +__user_initial_stackheap 0000001C + +Symbol: __user_initial_stackheap + + + +ARM Macro Assembler Page 12 Alphabetic symbol ordering +Relocatable symbols + + Definitions + At line 344 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 342 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s +Comment: __user_initial_stackheap used once +73 symbols + + + +ARM Macro Assembler Page 1 Alphabetic symbol ordering +Absolute symbols + +Heap_Size 00000200 + +Symbol: Heap_Size + Definitions + At line 45 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 49 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 348 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +Stack_Size 00000400 + +Symbol: Stack_Size + Definitions + At line 35 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 38 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + At line 347 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + +__Vectors_Size 00000130 + +Symbol: __Vectors_Size + Definitions + At line 142 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 60 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s +Comment: __Vectors_Size used once +3 symbols + + + +ARM Macro Assembler Page 1 Alphabetic symbol ordering +External symbols + +SystemInit 00000000 + +Symbol: SystemInit + Definitions + At line 150 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 151 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s +Comment: SystemInit used once +__main 00000000 + +Symbol: __main + Definitions + At line 149 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + At line 153 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s +Comment: __main used once +__use_two_region_memory 00000000 + +Symbol: __use_two_region_memory + Definitions + At line 341 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s + Uses + None +Comment: __use_two_region_memory unused +3 symbols +425 symbols in table diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Listing/startup_stm32f10x_ld.lst b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Listing/startup_stm32f10x_ld.lst new file mode 100644 index 0000000..3f0dab7 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Listing/startup_stm32f10x_ld.lst @@ -0,0 +1,1140 @@ + + + +ARM Macro Assembler Page 1 + + + 1 00000000 ;******************** (C) COPYRIGHT 2011 STMicroelectron + ics ******************** + 2 00000000 ;* File Name : startup_stm32f10x_ld.s + 3 00000000 ;* Author : MCD Application Team + 4 00000000 ;* Version : V3.5.0 + 5 00000000 ;* Date : 11-March-2011 + 6 00000000 ;* Description : STM32F10x Low Density Devices ve + ctor table for MDK-ARM + 7 00000000 ;* toolchain. + 8 00000000 ;* This module performs: + 9 00000000 ;* - Set the initial SP + 10 00000000 ;* - Set the initial PC == Reset_Ha + ndler + 11 00000000 ;* - Set the vector table entries w + ith the exceptions ISR address + 12 00000000 ;* - Configure the clock system + 13 00000000 ;* - Branches to __main in the C li + brary (which eventually + 14 00000000 ;* calls main()). + 15 00000000 ;* After Reset the CortexM3 process + or is in Thread mode, + 16 00000000 ;* priority is Privileged, and the + Stack is set to Main. + 17 00000000 ;* <<< Use Configuration Wizard in Context Menu >>> + 18 00000000 ;******************************************************* + ************************ + 19 00000000 ; THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS A + T PROVIDING CUSTOMERS + 20 00000000 ; WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN OR + DER FOR THEM TO SAVE TIME. + 21 00000000 ; AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIAB + LE FOR ANY DIRECT, + 22 00000000 ; INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY + CLAIMS ARISING FROM THE + 23 00000000 ; CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOM + ERS OF THE CODING + 24 00000000 ; INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR + PRODUCTS. + 25 00000000 ;******************************************************* + ************************ + 26 00000000 + 27 00000000 ; Amount of memory (in bytes) allocated for Stack + 28 00000000 ; Tailor this value to your application needs + 29 00000000 ; Stack Configuration + 30 00000000 ; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> + 31 00000000 ; + 32 00000000 + 33 00000000 00000400 + Stack_Size + EQU 0x00000400 + 34 00000000 + 35 00000000 AREA STACK, NOINIT, READWRITE, ALIGN +=3 + 36 00000000 Stack_Mem + SPACE Stack_Size + 37 00000400 __initial_sp + 38 00000400 + 39 00000400 + 40 00000400 ; Heap Configuration + + + +ARM Macro Assembler Page 2 + + + 41 00000400 ; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> + 42 00000400 ; + 43 00000400 + 44 00000400 00000200 + Heap_Size + EQU 0x00000200 + 45 00000400 + 46 00000400 AREA HEAP, NOINIT, READWRITE, ALIGN= +3 + 47 00000000 __heap_base + 48 00000000 Heap_Mem + SPACE Heap_Size + 49 00000200 __heap_limit + 50 00000200 + 51 00000200 PRESERVE8 + 52 00000200 THUMB + 53 00000200 + 54 00000200 + 55 00000200 ; Vector Table Mapped to Address 0 at Reset + 56 00000200 AREA RESET, DATA, READONLY + 57 00000000 EXPORT __Vectors + 58 00000000 EXPORT __Vectors_End + 59 00000000 EXPORT __Vectors_Size + 60 00000000 + 61 00000000 00000000 + __Vectors + DCD __initial_sp ; Top of Stack + 62 00000004 00000000 DCD Reset_Handler ; Reset Handler + 63 00000008 00000000 DCD NMI_Handler ; NMI Handler + 64 0000000C 00000000 DCD HardFault_Handler ; Hard Fault + Handler + 65 00000010 00000000 DCD MemManage_Handler + ; MPU Fault Handler + + 66 00000014 00000000 DCD BusFault_Handler + ; Bus Fault Handler + + 67 00000018 00000000 DCD UsageFault_Handler ; Usage Faul + t Handler + 68 0000001C 00000000 DCD 0 ; Reserved + 69 00000020 00000000 DCD 0 ; Reserved + 70 00000024 00000000 DCD 0 ; Reserved + 71 00000028 00000000 DCD 0 ; Reserved + 72 0000002C 00000000 DCD SVC_Handler ; SVCall Handler + 73 00000030 00000000 DCD DebugMon_Handler ; Debug Monito + r Handler + 74 00000034 00000000 DCD 0 ; Reserved + 75 00000038 00000000 DCD PendSV_Handler ; PendSV Handler + + 76 0000003C 00000000 DCD SysTick_Handler + ; SysTick Handler + 77 00000040 + 78 00000040 ; External Interrupts + 79 00000040 00000000 DCD WWDG_IRQHandler + ; Window Watchdog + 80 00000044 00000000 DCD PVD_IRQHandler ; PVD through EX + TI Line detect + 81 00000048 00000000 DCD TAMPER_IRQHandler ; Tamper + 82 0000004C 00000000 DCD RTC_IRQHandler ; RTC + + + +ARM Macro Assembler Page 3 + + + 83 00000050 00000000 DCD FLASH_IRQHandler ; Flash + 84 00000054 00000000 DCD RCC_IRQHandler ; RCC + 85 00000058 00000000 DCD EXTI0_IRQHandler ; EXTI Line 0 + 86 0000005C 00000000 DCD EXTI1_IRQHandler ; EXTI Line 1 + 87 00000060 00000000 DCD EXTI2_IRQHandler ; EXTI Line 2 + 88 00000064 00000000 DCD EXTI3_IRQHandler ; EXTI Line 3 + 89 00000068 00000000 DCD EXTI4_IRQHandler ; EXTI Line 4 + 90 0000006C 00000000 DCD DMA1_Channel1_IRQHandler + ; DMA1 Channel 1 + 91 00000070 00000000 DCD DMA1_Channel2_IRQHandler + ; DMA1 Channel 2 + 92 00000074 00000000 DCD DMA1_Channel3_IRQHandler + ; DMA1 Channel 3 + 93 00000078 00000000 DCD DMA1_Channel4_IRQHandler + ; DMA1 Channel 4 + 94 0000007C 00000000 DCD DMA1_Channel5_IRQHandler + ; DMA1 Channel 5 + 95 00000080 00000000 DCD DMA1_Channel6_IRQHandler + ; DMA1 Channel 6 + 96 00000084 00000000 DCD DMA1_Channel7_IRQHandler + ; DMA1 Channel 7 + 97 00000088 00000000 DCD ADC1_2_IRQHandler ; ADC1_2 + 98 0000008C 00000000 DCD USB_HP_CAN1_TX_IRQHandler ; USB + High Priority or C + AN1 TX + 99 00000090 00000000 DCD USB_LP_CAN1_RX0_IRQHandler ; US + B Low Priority or + CAN1 RX0 + 100 00000094 00000000 DCD CAN1_RX1_IRQHandler ; CAN1 RX1 + 101 00000098 00000000 DCD CAN1_SCE_IRQHandler ; CAN1 SCE + 102 0000009C 00000000 DCD EXTI9_5_IRQHandler + ; EXTI Line 9..5 + 103 000000A0 00000000 DCD TIM1_BRK_IRQHandler + ; TIM1 Break + 104 000000A4 00000000 DCD TIM1_UP_IRQHandler + ; TIM1 Update + 105 000000A8 00000000 DCD TIM1_TRG_COM_IRQHandler ; TIM1 + Trigger and Commuta + tion + 106 000000AC 00000000 DCD TIM1_CC_IRQHandler ; TIM1 Captu + re Compare + 107 000000B0 00000000 DCD TIM2_IRQHandler ; TIM2 + 108 000000B4 00000000 DCD TIM3_IRQHandler ; TIM3 + 109 000000B8 00000000 DCD 0 ; Reserved + 110 000000BC 00000000 DCD I2C1_EV_IRQHandler ; I2C1 Event + + 111 000000C0 00000000 DCD I2C1_ER_IRQHandler ; I2C1 Error + + 112 000000C4 00000000 DCD 0 ; Reserved + 113 000000C8 00000000 DCD 0 ; Reserved + 114 000000CC 00000000 DCD SPI1_IRQHandler ; SPI1 + 115 000000D0 00000000 DCD 0 ; Reserved + 116 000000D4 00000000 DCD USART1_IRQHandler ; USART1 + 117 000000D8 00000000 DCD USART2_IRQHandler ; USART2 + 118 000000DC 00000000 DCD 0 ; Reserved + 119 000000E0 00000000 DCD EXTI15_10_IRQHandler + ; EXTI Line 15..10 + 120 000000E4 00000000 DCD RTCAlarm_IRQHandler ; RTC Alarm + through EXTI Line + + + +ARM Macro Assembler Page 4 + + + 121 000000E8 00000000 DCD USBWakeUp_IRQHandler ; USB Wake + up from suspend + 122 000000EC __Vectors_End + 123 000000EC + 124 000000EC 000000EC + __Vectors_Size + EQU __Vectors_End - __Vectors + 125 000000EC + 126 000000EC AREA |.text|, CODE, READONLY + 127 00000000 + 128 00000000 ; Reset handler routine + 129 00000000 Reset_Handler + PROC + 130 00000000 EXPORT Reset_Handler [WEAK +] + 131 00000000 IMPORT __main + 132 00000000 IMPORT SystemInit + 133 00000000 4809 LDR R0, =SystemInit + 134 00000002 4780 BLX R0 + 135 00000004 4809 LDR R0, =__main + 136 00000006 4700 BX R0 + 137 00000008 ENDP + 138 00000008 + 139 00000008 ; Dummy Exception Handlers (infinite loops which can be + modified) + 140 00000008 + 141 00000008 NMI_Handler + PROC + 142 00000008 EXPORT NMI_Handler [WEA +K] + 143 00000008 E7FE B . + 144 0000000A ENDP + 146 0000000A HardFault_Handler + PROC + 147 0000000A EXPORT HardFault_Handler [WEA +K] + 148 0000000A E7FE B . + 149 0000000C ENDP + 151 0000000C MemManage_Handler + PROC + 152 0000000C EXPORT MemManage_Handler [WEA +K] + 153 0000000C E7FE B . + 154 0000000E ENDP + 156 0000000E BusFault_Handler + PROC + 157 0000000E EXPORT BusFault_Handler [WEA +K] + 158 0000000E E7FE B . + 159 00000010 ENDP + 161 00000010 UsageFault_Handler + PROC + 162 00000010 EXPORT UsageFault_Handler [WEA +K] + 163 00000010 E7FE B . + 164 00000012 ENDP + 165 00000012 SVC_Handler + PROC + 166 00000012 EXPORT SVC_Handler [WEA + + + +ARM Macro Assembler Page 5 + + +K] + 167 00000012 E7FE B . + 168 00000014 ENDP + 170 00000014 DebugMon_Handler + PROC + 171 00000014 EXPORT DebugMon_Handler [WEA +K] + 172 00000014 E7FE B . + 173 00000016 ENDP + 174 00000016 PendSV_Handler + PROC + 175 00000016 EXPORT PendSV_Handler [WEA +K] + 176 00000016 E7FE B . + 177 00000018 ENDP + 178 00000018 SysTick_Handler + PROC + 179 00000018 EXPORT SysTick_Handler [WEA +K] + 180 00000018 E7FE B . + 181 0000001A ENDP + 182 0000001A + 183 0000001A Default_Handler + PROC + 184 0000001A + 185 0000001A EXPORT WWDG_IRQHandler [WEA +K] + 186 0000001A EXPORT PVD_IRQHandler [WEA +K] + 187 0000001A EXPORT TAMPER_IRQHandler [WEA +K] + 188 0000001A EXPORT RTC_IRQHandler [WEA +K] + 189 0000001A EXPORT FLASH_IRQHandler [WEA +K] + 190 0000001A EXPORT RCC_IRQHandler [WEA +K] + 191 0000001A EXPORT EXTI0_IRQHandler [WEA +K] + 192 0000001A EXPORT EXTI1_IRQHandler [WEA +K] + 193 0000001A EXPORT EXTI2_IRQHandler [WEA +K] + 194 0000001A EXPORT EXTI3_IRQHandler [WEA +K] + 195 0000001A EXPORT EXTI4_IRQHandler [WEA +K] + 196 0000001A EXPORT DMA1_Channel1_IRQHandler [WEA +K] + 197 0000001A EXPORT DMA1_Channel2_IRQHandler [WEA +K] + 198 0000001A EXPORT DMA1_Channel3_IRQHandler [WEA +K] + 199 0000001A EXPORT DMA1_Channel4_IRQHandler [WEA +K] + 200 0000001A EXPORT DMA1_Channel5_IRQHandler [WEA +K] + 201 0000001A EXPORT DMA1_Channel6_IRQHandler [WEA +K] + + + +ARM Macro Assembler Page 6 + + + 202 0000001A EXPORT DMA1_Channel7_IRQHandler [WEA +K] + 203 0000001A EXPORT ADC1_2_IRQHandler [WEA +K] + 204 0000001A EXPORT USB_HP_CAN1_TX_IRQHandler [WEA +K] + 205 0000001A EXPORT USB_LP_CAN1_RX0_IRQHandler [WEA +K] + 206 0000001A EXPORT CAN1_RX1_IRQHandler [WEA +K] + 207 0000001A EXPORT CAN1_SCE_IRQHandler [WEA +K] + 208 0000001A EXPORT EXTI9_5_IRQHandler [WEA +K] + 209 0000001A EXPORT TIM1_BRK_IRQHandler [WEA +K] + 210 0000001A EXPORT TIM1_UP_IRQHandler [WEA +K] + 211 0000001A EXPORT TIM1_TRG_COM_IRQHandler [WEA +K] + 212 0000001A EXPORT TIM1_CC_IRQHandler [WEA +K] + 213 0000001A EXPORT TIM2_IRQHandler [WEA +K] + 214 0000001A EXPORT TIM3_IRQHandler [WEA +K] + 215 0000001A EXPORT I2C1_EV_IRQHandler [WEA +K] + 216 0000001A EXPORT I2C1_ER_IRQHandler [WEA +K] + 217 0000001A EXPORT SPI1_IRQHandler [WEA +K] + 218 0000001A EXPORT USART1_IRQHandler [WEA +K] + 219 0000001A EXPORT USART2_IRQHandler [WEA +K] + 220 0000001A EXPORT EXTI15_10_IRQHandler [WEA +K] + 221 0000001A EXPORT RTCAlarm_IRQHandler [WEA +K] + 222 0000001A EXPORT USBWakeUp_IRQHandler [WEA +K] + 223 0000001A + 224 0000001A WWDG_IRQHandler + 225 0000001A PVD_IRQHandler + 226 0000001A TAMPER_IRQHandler + 227 0000001A RTC_IRQHandler + 228 0000001A FLASH_IRQHandler + 229 0000001A RCC_IRQHandler + 230 0000001A EXTI0_IRQHandler + 231 0000001A EXTI1_IRQHandler + 232 0000001A EXTI2_IRQHandler + 233 0000001A EXTI3_IRQHandler + 234 0000001A EXTI4_IRQHandler + 235 0000001A DMA1_Channel1_IRQHandler + 236 0000001A DMA1_Channel2_IRQHandler + 237 0000001A DMA1_Channel3_IRQHandler + 238 0000001A DMA1_Channel4_IRQHandler + 239 0000001A DMA1_Channel5_IRQHandler + + + +ARM Macro Assembler Page 7 + + + 240 0000001A DMA1_Channel6_IRQHandler + 241 0000001A DMA1_Channel7_IRQHandler + 242 0000001A ADC1_2_IRQHandler + 243 0000001A USB_HP_CAN1_TX_IRQHandler + 244 0000001A USB_LP_CAN1_RX0_IRQHandler + 245 0000001A CAN1_RX1_IRQHandler + 246 0000001A CAN1_SCE_IRQHandler + 247 0000001A EXTI9_5_IRQHandler + 248 0000001A TIM1_BRK_IRQHandler + 249 0000001A TIM1_UP_IRQHandler + 250 0000001A TIM1_TRG_COM_IRQHandler + 251 0000001A TIM1_CC_IRQHandler + 252 0000001A TIM2_IRQHandler + 253 0000001A TIM3_IRQHandler + 254 0000001A I2C1_EV_IRQHandler + 255 0000001A I2C1_ER_IRQHandler + 256 0000001A SPI1_IRQHandler + 257 0000001A USART1_IRQHandler + 258 0000001A USART2_IRQHandler + 259 0000001A EXTI15_10_IRQHandler + 260 0000001A RTCAlarm_IRQHandler + 261 0000001A USBWakeUp_IRQHandler + 262 0000001A + 263 0000001A E7FE B . + 264 0000001C + 265 0000001C ENDP + 266 0000001C + 267 0000001C ALIGN + 268 0000001C + 269 0000001C ;******************************************************* + ************************ + 270 0000001C ; User Stack and Heap initialization + 271 0000001C ;******************************************************* + ************************ + 272 0000001C IF :DEF:__MICROLIB + 279 0000001C + 280 0000001C IMPORT __use_two_region_memory + 281 0000001C EXPORT __user_initial_stackheap + 282 0000001C + 283 0000001C __user_initial_stackheap + 284 0000001C + 285 0000001C 4804 LDR R0, = Heap_Mem + 286 0000001E 4905 LDR R1, =(Stack_Mem + Stack_Size) + 287 00000020 4A05 LDR R2, = (Heap_Mem + Heap_Size) + 288 00000022 4B06 LDR R3, = Stack_Mem + 289 00000024 4770 BX LR + 290 00000026 + 291 00000026 00 00 ALIGN + 292 00000028 + 293 00000028 ENDIF + 294 00000028 + 295 00000028 END + 00000000 + 00000000 + 00000000 + 00000400 + 00000200 + 00000000 +Command Line: --debug --xref --cpu=Cortex-M3 --apcs=interwork --depend=..\Outpu + + + +ARM Macro Assembler Page 8 + + +t\startup_stm32f10x_ld.d -o..\Output\startup_stm32f10x_ld.o -I"E:\Program Files + (x86)\keil\ARM\INC" -I"E:\Program Files (x86)\keil\ARM\INC\ST\STM32F10x" --lis +t=..\Listing\startup_stm32f10x_ld.lst ..\Libraries\CMSIS\startup\startup_stm32f +10x_ld.s + + + +ARM Macro Assembler Page 1 Alphabetic symbol ordering +Relocatable symbols + +STACK 00000000 + +Symbol: STACK + Definitions + At line 35 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + None +Comment: STACK unused +Stack_Mem 00000000 + +Symbol: Stack_Mem + Definitions + At line 36 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 286 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 288 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +__initial_sp 00000400 + +Symbol: __initial_sp + Definitions + At line 37 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 61 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s +Comment: __initial_sp used once +3 symbols + + + +ARM Macro Assembler Page 1 Alphabetic symbol ordering +Relocatable symbols + +HEAP 00000000 + +Symbol: HEAP + Definitions + At line 46 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + None +Comment: HEAP unused +Heap_Mem 00000000 + +Symbol: Heap_Mem + Definitions + At line 48 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 285 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 287 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +__heap_base 00000000 + +Symbol: __heap_base + Definitions + At line 47 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + None +Comment: __heap_base unused +__heap_limit 00000200 + +Symbol: __heap_limit + Definitions + At line 49 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + None +Comment: __heap_limit unused +4 symbols + + + +ARM Macro Assembler Page 1 Alphabetic symbol ordering +Relocatable symbols + +RESET 00000000 + +Symbol: RESET + Definitions + At line 56 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + None +Comment: RESET unused +__Vectors 00000000 + +Symbol: __Vectors + Definitions + At line 61 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 57 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 124 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +__Vectors_End 000000EC + +Symbol: __Vectors_End + Definitions + At line 122 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 58 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 124 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +3 symbols + + + +ARM Macro Assembler Page 1 Alphabetic symbol ordering +Relocatable symbols + +.text 00000000 + +Symbol: .text + Definitions + At line 126 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + None +Comment: .text unused +ADC1_2_IRQHandler 0000001A + +Symbol: ADC1_2_IRQHandler + Definitions + At line 242 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 97 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 203 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +BusFault_Handler 0000000E + +Symbol: BusFault_Handler + Definitions + At line 156 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 66 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 157 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +CAN1_RX1_IRQHandler 0000001A + +Symbol: CAN1_RX1_IRQHandler + Definitions + At line 245 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 100 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 206 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +CAN1_SCE_IRQHandler 0000001A + +Symbol: CAN1_SCE_IRQHandler + Definitions + At line 246 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 101 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 207 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +DMA1_Channel1_IRQHandler 0000001A + +Symbol: DMA1_Channel1_IRQHandler + Definitions + At line 235 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 90 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 196 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +DMA1_Channel2_IRQHandler 0000001A + +Symbol: DMA1_Channel2_IRQHandler + Definitions + At line 236 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + + + +ARM Macro Assembler Page 2 Alphabetic symbol ordering +Relocatable symbols + + At line 91 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 197 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +DMA1_Channel3_IRQHandler 0000001A + +Symbol: DMA1_Channel3_IRQHandler + Definitions + At line 237 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 92 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 198 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +DMA1_Channel4_IRQHandler 0000001A + +Symbol: DMA1_Channel4_IRQHandler + Definitions + At line 238 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 93 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 199 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +DMA1_Channel5_IRQHandler 0000001A + +Symbol: DMA1_Channel5_IRQHandler + Definitions + At line 239 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 94 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 200 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +DMA1_Channel6_IRQHandler 0000001A + +Symbol: DMA1_Channel6_IRQHandler + Definitions + At line 240 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 95 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 201 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +DMA1_Channel7_IRQHandler 0000001A + +Symbol: DMA1_Channel7_IRQHandler + Definitions + At line 241 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 96 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 202 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +DebugMon_Handler 00000014 + +Symbol: DebugMon_Handler + Definitions + At line 170 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 73 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 171 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +Default_Handler 0000001A + + + + +ARM Macro Assembler Page 3 Alphabetic symbol ordering +Relocatable symbols + +Symbol: Default_Handler + Definitions + At line 183 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + None +Comment: Default_Handler unused +EXTI0_IRQHandler 0000001A + +Symbol: EXTI0_IRQHandler + Definitions + At line 230 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 85 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 191 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +EXTI15_10_IRQHandler 0000001A + +Symbol: EXTI15_10_IRQHandler + Definitions + At line 259 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 119 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 220 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +EXTI1_IRQHandler 0000001A + +Symbol: EXTI1_IRQHandler + Definitions + At line 231 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 86 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 192 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +EXTI2_IRQHandler 0000001A + +Symbol: EXTI2_IRQHandler + Definitions + At line 232 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 87 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 193 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +EXTI3_IRQHandler 0000001A + +Symbol: EXTI3_IRQHandler + Definitions + At line 233 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 88 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 194 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +EXTI4_IRQHandler 0000001A + +Symbol: EXTI4_IRQHandler + Definitions + At line 234 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 89 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 195 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + + + +ARM Macro Assembler Page 4 Alphabetic symbol ordering +Relocatable symbols + + +EXTI9_5_IRQHandler 0000001A + +Symbol: EXTI9_5_IRQHandler + Definitions + At line 247 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 102 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 208 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +FLASH_IRQHandler 0000001A + +Symbol: FLASH_IRQHandler + Definitions + At line 228 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 83 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 189 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +HardFault_Handler 0000000A + +Symbol: HardFault_Handler + Definitions + At line 146 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 64 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 147 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +I2C1_ER_IRQHandler 0000001A + +Symbol: I2C1_ER_IRQHandler + Definitions + At line 255 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 111 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 216 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +I2C1_EV_IRQHandler 0000001A + +Symbol: I2C1_EV_IRQHandler + Definitions + At line 254 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 110 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 215 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +MemManage_Handler 0000000C + +Symbol: MemManage_Handler + Definitions + At line 151 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 65 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 152 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +NMI_Handler 00000008 + +Symbol: NMI_Handler + Definitions + + + +ARM Macro Assembler Page 5 Alphabetic symbol ordering +Relocatable symbols + + At line 141 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 63 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 142 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +PVD_IRQHandler 0000001A + +Symbol: PVD_IRQHandler + Definitions + At line 225 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 80 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 186 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +PendSV_Handler 00000016 + +Symbol: PendSV_Handler + Definitions + At line 174 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 75 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 175 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +RCC_IRQHandler 0000001A + +Symbol: RCC_IRQHandler + Definitions + At line 229 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 84 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 190 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +RTCAlarm_IRQHandler 0000001A + +Symbol: RTCAlarm_IRQHandler + Definitions + At line 260 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 120 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 221 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +RTC_IRQHandler 0000001A + +Symbol: RTC_IRQHandler + Definitions + At line 227 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 82 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 188 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +Reset_Handler 00000000 + +Symbol: Reset_Handler + Definitions + At line 129 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 62 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 130 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + + + + +ARM Macro Assembler Page 6 Alphabetic symbol ordering +Relocatable symbols + +SPI1_IRQHandler 0000001A + +Symbol: SPI1_IRQHandler + Definitions + At line 256 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 114 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 217 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +SVC_Handler 00000012 + +Symbol: SVC_Handler + Definitions + At line 165 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 72 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 166 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +SysTick_Handler 00000018 + +Symbol: SysTick_Handler + Definitions + At line 178 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 76 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 179 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +TAMPER_IRQHandler 0000001A + +Symbol: TAMPER_IRQHandler + Definitions + At line 226 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 81 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 187 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +TIM1_BRK_IRQHandler 0000001A + +Symbol: TIM1_BRK_IRQHandler + Definitions + At line 248 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 103 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 209 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +TIM1_CC_IRQHandler 0000001A + +Symbol: TIM1_CC_IRQHandler + Definitions + At line 251 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 106 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 212 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +TIM1_TRG_COM_IRQHandler 0000001A + +Symbol: TIM1_TRG_COM_IRQHandler + Definitions + At line 250 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + + + +ARM Macro Assembler Page 7 Alphabetic symbol ordering +Relocatable symbols + + Uses + At line 105 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 211 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +TIM1_UP_IRQHandler 0000001A + +Symbol: TIM1_UP_IRQHandler + Definitions + At line 249 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 104 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 210 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +TIM2_IRQHandler 0000001A + +Symbol: TIM2_IRQHandler + Definitions + At line 252 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 107 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 213 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +TIM3_IRQHandler 0000001A + +Symbol: TIM3_IRQHandler + Definitions + At line 253 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 108 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 214 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +USART1_IRQHandler 0000001A + +Symbol: USART1_IRQHandler + Definitions + At line 257 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 116 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 218 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +USART2_IRQHandler 0000001A + +Symbol: USART2_IRQHandler + Definitions + At line 258 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 117 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 219 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +USBWakeUp_IRQHandler 0000001A + +Symbol: USBWakeUp_IRQHandler + Definitions + At line 261 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 121 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 222 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +USB_HP_CAN1_TX_IRQHandler 0000001A + + + +ARM Macro Assembler Page 8 Alphabetic symbol ordering +Relocatable symbols + + +Symbol: USB_HP_CAN1_TX_IRQHandler + Definitions + At line 243 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 98 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 204 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +USB_LP_CAN1_RX0_IRQHandler 0000001A + +Symbol: USB_LP_CAN1_RX0_IRQHandler + Definitions + At line 244 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 99 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 205 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +UsageFault_Handler 00000010 + +Symbol: UsageFault_Handler + Definitions + At line 161 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 67 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 162 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +WWDG_IRQHandler 0000001A + +Symbol: WWDG_IRQHandler + Definitions + At line 224 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 79 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 185 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +__user_initial_stackheap 0000001C + +Symbol: __user_initial_stackheap + Definitions + At line 283 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 281 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s +Comment: __user_initial_stackheap used once +51 symbols + + + +ARM Macro Assembler Page 1 Alphabetic symbol ordering +Absolute symbols + +Heap_Size 00000200 + +Symbol: Heap_Size + Definitions + At line 44 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 48 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 287 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +Stack_Size 00000400 + +Symbol: Stack_Size + Definitions + At line 33 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 36 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + At line 286 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + +__Vectors_Size 000000EC + +Symbol: __Vectors_Size + Definitions + At line 124 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 59 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s +Comment: __Vectors_Size used once +3 symbols + + + +ARM Macro Assembler Page 1 Alphabetic symbol ordering +External symbols + +SystemInit 00000000 + +Symbol: SystemInit + Definitions + At line 132 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 133 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s +Comment: SystemInit used once +__main 00000000 + +Symbol: __main + Definitions + At line 131 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + At line 135 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s +Comment: __main used once +__use_two_region_memory 00000000 + +Symbol: __use_two_region_memory + Definitions + At line 280 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_ld.s + Uses + None +Comment: __use_two_region_memory unused +3 symbols +395 symbols in table diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Listing/startup_stm32f10x_md.lst b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Listing/startup_stm32f10x_md.lst new file mode 100644 index 0000000..781fd26 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Listing/startup_stm32f10x_md.lst @@ -0,0 +1,1210 @@ + + + +ARM Macro Assembler Page 1 + + + 1 00000000 ;******************** (C) COPYRIGHT 2011 STMicroelectron + ics ******************** + 2 00000000 ;* File Name : startup_stm32f10x_md.s + 3 00000000 ;* Author : MCD Application Team + 4 00000000 ;* Version : V3.5.0 + 5 00000000 ;* Date : 11-March-2011 + 6 00000000 ;* Description : STM32F10x Medium Density Devices + vector table for MDK-ARM + 7 00000000 ;* toolchain. + 8 00000000 ;* This module performs: + 9 00000000 ;* - Set the initial SP + 10 00000000 ;* - Set the initial PC == Reset_Ha + ndler + 11 00000000 ;* - Set the vector table entries w + ith the exceptions ISR address + 12 00000000 ;* - Configure the clock system + 13 00000000 ;* - Branches to __main in the C li + brary (which eventually + 14 00000000 ;* calls main()). + 15 00000000 ;* After Reset the CortexM3 process + or is in Thread mode, + 16 00000000 ;* priority is Privileged, and the + Stack is set to Main. + 17 00000000 ;* <<< Use Configuration Wizard in Context Menu >>> + 18 00000000 ;******************************************************* + ************************ + 19 00000000 ; THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS A + T PROVIDING CUSTOMERS + 20 00000000 ; WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN OR + DER FOR THEM TO SAVE TIME. + 21 00000000 ; AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIAB + LE FOR ANY DIRECT, + 22 00000000 ; INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY + CLAIMS ARISING FROM THE + 23 00000000 ; CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOM + ERS OF THE CODING + 24 00000000 ; INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR + PRODUCTS. + 25 00000000 ;******************************************************* + ************************ + 26 00000000 + 27 00000000 ; Amount of memory (in bytes) allocated for Stack + 28 00000000 ; Tailor this value to your application needs + 29 00000000 ; Stack Configuration + 30 00000000 ; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> + 31 00000000 ; + 32 00000000 + 33 00000000 00000400 + Stack_Size + EQU 0x00000400 + 34 00000000 + 35 00000000 AREA STACK, NOINIT, READWRITE, ALIGN +=3 + 36 00000000 Stack_Mem + SPACE Stack_Size + 37 00000400 __initial_sp + 38 00000400 + 39 00000400 + 40 00000400 ; Heap Configuration + + + +ARM Macro Assembler Page 2 + + + 41 00000400 ; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> + 42 00000400 ; + 43 00000400 + 44 00000400 00000200 + Heap_Size + EQU 0x00000200 + 45 00000400 + 46 00000400 AREA HEAP, NOINIT, READWRITE, ALIGN= +3 + 47 00000000 __heap_base + 48 00000000 Heap_Mem + SPACE Heap_Size + 49 00000200 __heap_limit + 50 00000200 + 51 00000200 PRESERVE8 + 52 00000200 THUMB + 53 00000200 + 54 00000200 + 55 00000200 ; Vector Table Mapped to Address 0 at Reset + 56 00000200 AREA RESET, DATA, READONLY + 57 00000000 EXPORT __Vectors + 58 00000000 EXPORT __Vectors_End + 59 00000000 EXPORT __Vectors_Size + 60 00000000 + 61 00000000 00000000 + __Vectors + DCD __initial_sp ; Top of Stack + 62 00000004 00000000 DCD Reset_Handler ; Reset Handler + 63 00000008 00000000 DCD NMI_Handler ; NMI Handler + 64 0000000C 00000000 DCD HardFault_Handler ; Hard Fault + Handler + 65 00000010 00000000 DCD MemManage_Handler + ; MPU Fault Handler + + 66 00000014 00000000 DCD BusFault_Handler + ; Bus Fault Handler + + 67 00000018 00000000 DCD UsageFault_Handler ; Usage Faul + t Handler + 68 0000001C 00000000 DCD 0 ; Reserved + 69 00000020 00000000 DCD 0 ; Reserved + 70 00000024 00000000 DCD 0 ; Reserved + 71 00000028 00000000 DCD 0 ; Reserved + 72 0000002C 00000000 DCD SVC_Handler ; SVCall Handler + 73 00000030 00000000 DCD DebugMon_Handler ; Debug Monito + r Handler + 74 00000034 00000000 DCD 0 ; Reserved + 75 00000038 00000000 DCD PendSV_Handler ; PendSV Handler + + 76 0000003C 00000000 DCD SysTick_Handler + ; SysTick Handler + 77 00000040 + 78 00000040 ; External Interrupts + 79 00000040 00000000 DCD WWDG_IRQHandler + ; Window Watchdog + 80 00000044 00000000 DCD PVD_IRQHandler ; PVD through EX + TI Line detect + 81 00000048 00000000 DCD TAMPER_IRQHandler ; Tamper + 82 0000004C 00000000 DCD RTC_IRQHandler ; RTC + + + +ARM Macro Assembler Page 3 + + + 83 00000050 00000000 DCD FLASH_IRQHandler ; Flash + 84 00000054 00000000 DCD RCC_IRQHandler ; RCC + 85 00000058 00000000 DCD EXTI0_IRQHandler ; EXTI Line 0 + 86 0000005C 00000000 DCD EXTI1_IRQHandler ; EXTI Line 1 + 87 00000060 00000000 DCD EXTI2_IRQHandler ; EXTI Line 2 + 88 00000064 00000000 DCD EXTI3_IRQHandler ; EXTI Line 3 + 89 00000068 00000000 DCD EXTI4_IRQHandler ; EXTI Line 4 + 90 0000006C 00000000 DCD DMA1_Channel1_IRQHandler + ; DMA1 Channel 1 + 91 00000070 00000000 DCD DMA1_Channel2_IRQHandler + ; DMA1 Channel 2 + 92 00000074 00000000 DCD DMA1_Channel3_IRQHandler + ; DMA1 Channel 3 + 93 00000078 00000000 DCD DMA1_Channel4_IRQHandler + ; DMA1 Channel 4 + 94 0000007C 00000000 DCD DMA1_Channel5_IRQHandler + ; DMA1 Channel 5 + 95 00000080 00000000 DCD DMA1_Channel6_IRQHandler + ; DMA1 Channel 6 + 96 00000084 00000000 DCD DMA1_Channel7_IRQHandler + ; DMA1 Channel 7 + 97 00000088 00000000 DCD ADC1_2_IRQHandler ; ADC1_2 + 98 0000008C 00000000 DCD USB_HP_CAN1_TX_IRQHandler ; USB + High Priority or C + AN1 TX + 99 00000090 00000000 DCD USB_LP_CAN1_RX0_IRQHandler ; US + B Low Priority or + CAN1 RX0 + 100 00000094 00000000 DCD CAN1_RX1_IRQHandler ; CAN1 RX1 + 101 00000098 00000000 DCD CAN1_SCE_IRQHandler ; CAN1 SCE + 102 0000009C 00000000 DCD EXTI9_5_IRQHandler + ; EXTI Line 9..5 + 103 000000A0 00000000 DCD TIM1_BRK_IRQHandler + ; TIM1 Break + 104 000000A4 00000000 DCD TIM1_UP_IRQHandler + ; TIM1 Update + 105 000000A8 00000000 DCD TIM1_TRG_COM_IRQHandler ; TIM1 + Trigger and Commuta + tion + 106 000000AC 00000000 DCD TIM1_CC_IRQHandler ; TIM1 Captu + re Compare + 107 000000B0 00000000 DCD TIM2_IRQHandler ; TIM2 + 108 000000B4 00000000 DCD TIM3_IRQHandler ; TIM3 + 109 000000B8 00000000 DCD TIM4_IRQHandler ; TIM4 + 110 000000BC 00000000 DCD I2C1_EV_IRQHandler ; I2C1 Event + + 111 000000C0 00000000 DCD I2C1_ER_IRQHandler ; I2C1 Error + + 112 000000C4 00000000 DCD I2C2_EV_IRQHandler ; I2C2 Event + + 113 000000C8 00000000 DCD I2C2_ER_IRQHandler ; I2C2 Error + + 114 000000CC 00000000 DCD SPI1_IRQHandler ; SPI1 + 115 000000D0 00000000 DCD SPI2_IRQHandler ; SPI2 + 116 000000D4 00000000 DCD USART1_IRQHandler ; USART1 + 117 000000D8 00000000 DCD USART2_IRQHandler ; USART2 + 118 000000DC 00000000 DCD USART3_IRQHandler ; USART3 + 119 000000E0 00000000 DCD EXTI15_10_IRQHandler + ; EXTI Line 15..10 + + + +ARM Macro Assembler Page 4 + + + 120 000000E4 00000000 DCD RTCAlarm_IRQHandler ; RTC Alarm + through EXTI Line + 121 000000E8 00000000 DCD USBWakeUp_IRQHandler ; USB Wake + up from suspend + 122 000000EC __Vectors_End + 123 000000EC + 124 000000EC 000000EC + __Vectors_Size + EQU __Vectors_End - __Vectors + 125 000000EC + 126 000000EC AREA |.text|, CODE, READONLY + 127 00000000 + 128 00000000 ; Reset handler + 129 00000000 Reset_Handler + PROC + 130 00000000 EXPORT Reset_Handler [WEAK +] + 131 00000000 IMPORT __main + 132 00000000 IMPORT SystemInit + 133 00000000 4809 LDR R0, =SystemInit + 134 00000002 4780 BLX R0 + 135 00000004 4809 LDR R0, =__main + 136 00000006 4700 BX R0 + 137 00000008 ENDP + 138 00000008 + 139 00000008 ; Dummy Exception Handlers (infinite loops which can be + modified) + 140 00000008 + 141 00000008 NMI_Handler + PROC + 142 00000008 EXPORT NMI_Handler [WEA +K] + 143 00000008 E7FE B . + 144 0000000A ENDP + 146 0000000A HardFault_Handler + PROC + 147 0000000A EXPORT HardFault_Handler [WEA +K] + 148 0000000A E7FE B . + 149 0000000C ENDP + 151 0000000C MemManage_Handler + PROC + 152 0000000C EXPORT MemManage_Handler [WEA +K] + 153 0000000C E7FE B . + 154 0000000E ENDP + 156 0000000E BusFault_Handler + PROC + 157 0000000E EXPORT BusFault_Handler [WEA +K] + 158 0000000E E7FE B . + 159 00000010 ENDP + 161 00000010 UsageFault_Handler + PROC + 162 00000010 EXPORT UsageFault_Handler [WEA +K] + 163 00000010 E7FE B . + 164 00000012 ENDP + 165 00000012 SVC_Handler + + + +ARM Macro Assembler Page 5 + + + PROC + 166 00000012 EXPORT SVC_Handler [WEA +K] + 167 00000012 E7FE B . + 168 00000014 ENDP + 170 00000014 DebugMon_Handler + PROC + 171 00000014 EXPORT DebugMon_Handler [WEA +K] + 172 00000014 E7FE B . + 173 00000016 ENDP + 174 00000016 PendSV_Handler + PROC + 175 00000016 EXPORT PendSV_Handler [WEA +K] + 176 00000016 E7FE B . + 177 00000018 ENDP + 178 00000018 SysTick_Handler + PROC + 179 00000018 EXPORT SysTick_Handler [WEA +K] + 180 00000018 E7FE B . + 181 0000001A ENDP + 182 0000001A + 183 0000001A Default_Handler + PROC + 184 0000001A + 185 0000001A EXPORT WWDG_IRQHandler [WEA +K] + 186 0000001A EXPORT PVD_IRQHandler [WEA +K] + 187 0000001A EXPORT TAMPER_IRQHandler [WEA +K] + 188 0000001A EXPORT RTC_IRQHandler [WEA +K] + 189 0000001A EXPORT FLASH_IRQHandler [WEA +K] + 190 0000001A EXPORT RCC_IRQHandler [WEA +K] + 191 0000001A EXPORT EXTI0_IRQHandler [WEA +K] + 192 0000001A EXPORT EXTI1_IRQHandler [WEA +K] + 193 0000001A EXPORT EXTI2_IRQHandler [WEA +K] + 194 0000001A EXPORT EXTI3_IRQHandler [WEA +K] + 195 0000001A EXPORT EXTI4_IRQHandler [WEA +K] + 196 0000001A EXPORT DMA1_Channel1_IRQHandler [WEA +K] + 197 0000001A EXPORT DMA1_Channel2_IRQHandler [WEA +K] + 198 0000001A EXPORT DMA1_Channel3_IRQHandler [WEA +K] + 199 0000001A EXPORT DMA1_Channel4_IRQHandler [WEA +K] + 200 0000001A EXPORT DMA1_Channel5_IRQHandler [WEA +K] + + + +ARM Macro Assembler Page 6 + + + 201 0000001A EXPORT DMA1_Channel6_IRQHandler [WEA +K] + 202 0000001A EXPORT DMA1_Channel7_IRQHandler [WEA +K] + 203 0000001A EXPORT ADC1_2_IRQHandler [WEA +K] + 204 0000001A EXPORT USB_HP_CAN1_TX_IRQHandler [WEA +K] + 205 0000001A EXPORT USB_LP_CAN1_RX0_IRQHandler [WEA +K] + 206 0000001A EXPORT CAN1_RX1_IRQHandler [WEA +K] + 207 0000001A EXPORT CAN1_SCE_IRQHandler [WEA +K] + 208 0000001A EXPORT EXTI9_5_IRQHandler [WEA +K] + 209 0000001A EXPORT TIM1_BRK_IRQHandler [WEA +K] + 210 0000001A EXPORT TIM1_UP_IRQHandler [WEA +K] + 211 0000001A EXPORT TIM1_TRG_COM_IRQHandler [WEA +K] + 212 0000001A EXPORT TIM1_CC_IRQHandler [WEA +K] + 213 0000001A EXPORT TIM2_IRQHandler [WEA +K] + 214 0000001A EXPORT TIM3_IRQHandler [WEA +K] + 215 0000001A EXPORT TIM4_IRQHandler [WEA +K] + 216 0000001A EXPORT I2C1_EV_IRQHandler [WEA +K] + 217 0000001A EXPORT I2C1_ER_IRQHandler [WEA +K] + 218 0000001A EXPORT I2C2_EV_IRQHandler [WEA +K] + 219 0000001A EXPORT I2C2_ER_IRQHandler [WEA +K] + 220 0000001A EXPORT SPI1_IRQHandler [WEA +K] + 221 0000001A EXPORT SPI2_IRQHandler [WEA +K] + 222 0000001A EXPORT USART1_IRQHandler [WEA +K] + 223 0000001A EXPORT USART2_IRQHandler [WEA +K] + 224 0000001A EXPORT USART3_IRQHandler [WEA +K] + 225 0000001A EXPORT EXTI15_10_IRQHandler [WEA +K] + 226 0000001A EXPORT RTCAlarm_IRQHandler [WEA +K] + 227 0000001A EXPORT USBWakeUp_IRQHandler [WEA +K] + 228 0000001A + 229 0000001A WWDG_IRQHandler + 230 0000001A PVD_IRQHandler + 231 0000001A TAMPER_IRQHandler + 232 0000001A RTC_IRQHandler + + + +ARM Macro Assembler Page 7 + + + 233 0000001A FLASH_IRQHandler + 234 0000001A RCC_IRQHandler + 235 0000001A EXTI0_IRQHandler + 236 0000001A EXTI1_IRQHandler + 237 0000001A EXTI2_IRQHandler + 238 0000001A EXTI3_IRQHandler + 239 0000001A EXTI4_IRQHandler + 240 0000001A DMA1_Channel1_IRQHandler + 241 0000001A DMA1_Channel2_IRQHandler + 242 0000001A DMA1_Channel3_IRQHandler + 243 0000001A DMA1_Channel4_IRQHandler + 244 0000001A DMA1_Channel5_IRQHandler + 245 0000001A DMA1_Channel6_IRQHandler + 246 0000001A DMA1_Channel7_IRQHandler + 247 0000001A ADC1_2_IRQHandler + 248 0000001A USB_HP_CAN1_TX_IRQHandler + 249 0000001A USB_LP_CAN1_RX0_IRQHandler + 250 0000001A CAN1_RX1_IRQHandler + 251 0000001A CAN1_SCE_IRQHandler + 252 0000001A EXTI9_5_IRQHandler + 253 0000001A TIM1_BRK_IRQHandler + 254 0000001A TIM1_UP_IRQHandler + 255 0000001A TIM1_TRG_COM_IRQHandler + 256 0000001A TIM1_CC_IRQHandler + 257 0000001A TIM2_IRQHandler + 258 0000001A TIM3_IRQHandler + 259 0000001A TIM4_IRQHandler + 260 0000001A I2C1_EV_IRQHandler + 261 0000001A I2C1_ER_IRQHandler + 262 0000001A I2C2_EV_IRQHandler + 263 0000001A I2C2_ER_IRQHandler + 264 0000001A SPI1_IRQHandler + 265 0000001A SPI2_IRQHandler + 266 0000001A USART1_IRQHandler + 267 0000001A USART2_IRQHandler + 268 0000001A USART3_IRQHandler + 269 0000001A EXTI15_10_IRQHandler + 270 0000001A RTCAlarm_IRQHandler + 271 0000001A USBWakeUp_IRQHandler + 272 0000001A + 273 0000001A E7FE B . + 274 0000001C + 275 0000001C ENDP + 276 0000001C + 277 0000001C ALIGN + 278 0000001C + 279 0000001C ;******************************************************* + ************************ + 280 0000001C ; User Stack and Heap initialization + 281 0000001C ;******************************************************* + ************************ + 282 0000001C IF :DEF:__MICROLIB + 289 0000001C + 290 0000001C IMPORT __use_two_region_memory + 291 0000001C EXPORT __user_initial_stackheap + 292 0000001C + 293 0000001C __user_initial_stackheap + 294 0000001C + 295 0000001C 4804 LDR R0, = Heap_Mem + + + +ARM Macro Assembler Page 8 + + + 296 0000001E 4905 LDR R1, =(Stack_Mem + Stack_Size) + 297 00000020 4A05 LDR R2, = (Heap_Mem + Heap_Size) + 298 00000022 4B06 LDR R3, = Stack_Mem + 299 00000024 4770 BX LR + 300 00000026 + 301 00000026 00 00 ALIGN + 302 00000028 + 303 00000028 ENDIF + 304 00000028 + 305 00000028 END + 00000000 + 00000000 + 00000000 + 00000400 + 00000200 + 00000000 +Command Line: --debug --xref --diag_suppress=9931 --cpu=Cortex-M3 --apcs=interw +ork --depend=..\output\startup_stm32f10x_md.d -o..\output\startup_stm32f10x_md. +o -ID:\ϿƼ\С\ķС\\ɫ4-1\Project\RTE +-IC:\Keil\Keil\STM32F1xx_DFP\1.0.5\Device\Include -IC:\Keil\ARM\CMSIS\Include - +-predefine="__UVISION_VERSION SETA 514" --predefine="STM32F10X_MD SETA 1" --lis +t=..\listing\startup_stm32f10x_md.lst ..\Libraries\CMSIS\startup\startup_stm32f +10x_md.s + + + +ARM Macro Assembler Page 1 Alphabetic symbol ordering +Relocatable symbols + +STACK 00000000 + +Symbol: STACK + Definitions + At line 35 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + None +Comment: STACK unused +Stack_Mem 00000000 + +Symbol: Stack_Mem + Definitions + At line 36 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 296 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 298 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +__initial_sp 00000400 + +Symbol: __initial_sp + Definitions + At line 37 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 61 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s +Comment: __initial_sp used once +3 symbols + + + +ARM Macro Assembler Page 1 Alphabetic symbol ordering +Relocatable symbols + +HEAP 00000000 + +Symbol: HEAP + Definitions + At line 46 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + None +Comment: HEAP unused +Heap_Mem 00000000 + +Symbol: Heap_Mem + Definitions + At line 48 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 295 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 297 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +__heap_base 00000000 + +Symbol: __heap_base + Definitions + At line 47 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + None +Comment: __heap_base unused +__heap_limit 00000200 + +Symbol: __heap_limit + Definitions + At line 49 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + None +Comment: __heap_limit unused +4 symbols + + + +ARM Macro Assembler Page 1 Alphabetic symbol ordering +Relocatable symbols + +RESET 00000000 + +Symbol: RESET + Definitions + At line 56 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + None +Comment: RESET unused +__Vectors 00000000 + +Symbol: __Vectors + Definitions + At line 61 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 57 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 124 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +__Vectors_End 000000EC + +Symbol: __Vectors_End + Definitions + At line 122 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 58 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 124 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +3 symbols + + + +ARM Macro Assembler Page 1 Alphabetic symbol ordering +Relocatable symbols + +.text 00000000 + +Symbol: .text + Definitions + At line 126 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + None +Comment: .text unused +ADC1_2_IRQHandler 0000001A + +Symbol: ADC1_2_IRQHandler + Definitions + At line 247 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 97 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 203 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +BusFault_Handler 0000000E + +Symbol: BusFault_Handler + Definitions + At line 156 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 66 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 157 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +CAN1_RX1_IRQHandler 0000001A + +Symbol: CAN1_RX1_IRQHandler + Definitions + At line 250 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 100 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 206 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +CAN1_SCE_IRQHandler 0000001A + +Symbol: CAN1_SCE_IRQHandler + Definitions + At line 251 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 101 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 207 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +DMA1_Channel1_IRQHandler 0000001A + +Symbol: DMA1_Channel1_IRQHandler + Definitions + At line 240 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 90 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 196 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +DMA1_Channel2_IRQHandler 0000001A + +Symbol: DMA1_Channel2_IRQHandler + Definitions + At line 241 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + + + +ARM Macro Assembler Page 2 Alphabetic symbol ordering +Relocatable symbols + + At line 91 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 197 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +DMA1_Channel3_IRQHandler 0000001A + +Symbol: DMA1_Channel3_IRQHandler + Definitions + At line 242 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 92 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 198 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +DMA1_Channel4_IRQHandler 0000001A + +Symbol: DMA1_Channel4_IRQHandler + Definitions + At line 243 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 93 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 199 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +DMA1_Channel5_IRQHandler 0000001A + +Symbol: DMA1_Channel5_IRQHandler + Definitions + At line 244 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 94 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 200 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +DMA1_Channel6_IRQHandler 0000001A + +Symbol: DMA1_Channel6_IRQHandler + Definitions + At line 245 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 95 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 201 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +DMA1_Channel7_IRQHandler 0000001A + +Symbol: DMA1_Channel7_IRQHandler + Definitions + At line 246 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 96 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 202 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +DebugMon_Handler 00000014 + +Symbol: DebugMon_Handler + Definitions + At line 170 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 73 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 171 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +Default_Handler 0000001A + + + + +ARM Macro Assembler Page 3 Alphabetic symbol ordering +Relocatable symbols + +Symbol: Default_Handler + Definitions + At line 183 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + None +Comment: Default_Handler unused +EXTI0_IRQHandler 0000001A + +Symbol: EXTI0_IRQHandler + Definitions + At line 235 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 85 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 191 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +EXTI15_10_IRQHandler 0000001A + +Symbol: EXTI15_10_IRQHandler + Definitions + At line 269 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 119 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 225 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +EXTI1_IRQHandler 0000001A + +Symbol: EXTI1_IRQHandler + Definitions + At line 236 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 86 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 192 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +EXTI2_IRQHandler 0000001A + +Symbol: EXTI2_IRQHandler + Definitions + At line 237 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 87 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 193 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +EXTI3_IRQHandler 0000001A + +Symbol: EXTI3_IRQHandler + Definitions + At line 238 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 88 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 194 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +EXTI4_IRQHandler 0000001A + +Symbol: EXTI4_IRQHandler + Definitions + At line 239 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 89 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 195 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + + + +ARM Macro Assembler Page 4 Alphabetic symbol ordering +Relocatable symbols + + +EXTI9_5_IRQHandler 0000001A + +Symbol: EXTI9_5_IRQHandler + Definitions + At line 252 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 102 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 208 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +FLASH_IRQHandler 0000001A + +Symbol: FLASH_IRQHandler + Definitions + At line 233 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 83 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 189 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +HardFault_Handler 0000000A + +Symbol: HardFault_Handler + Definitions + At line 146 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 64 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 147 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +I2C1_ER_IRQHandler 0000001A + +Symbol: I2C1_ER_IRQHandler + Definitions + At line 261 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 111 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 217 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +I2C1_EV_IRQHandler 0000001A + +Symbol: I2C1_EV_IRQHandler + Definitions + At line 260 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 110 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 216 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +I2C2_ER_IRQHandler 0000001A + +Symbol: I2C2_ER_IRQHandler + Definitions + At line 263 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 113 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 219 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +I2C2_EV_IRQHandler 0000001A + +Symbol: I2C2_EV_IRQHandler + Definitions + + + +ARM Macro Assembler Page 5 Alphabetic symbol ordering +Relocatable symbols + + At line 262 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 112 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 218 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +MemManage_Handler 0000000C + +Symbol: MemManage_Handler + Definitions + At line 151 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 65 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 152 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +NMI_Handler 00000008 + +Symbol: NMI_Handler + Definitions + At line 141 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 63 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 142 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +PVD_IRQHandler 0000001A + +Symbol: PVD_IRQHandler + Definitions + At line 230 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 80 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 186 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +PendSV_Handler 00000016 + +Symbol: PendSV_Handler + Definitions + At line 174 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 75 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 175 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +RCC_IRQHandler 0000001A + +Symbol: RCC_IRQHandler + Definitions + At line 234 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 84 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 190 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +RTCAlarm_IRQHandler 0000001A + +Symbol: RTCAlarm_IRQHandler + Definitions + At line 270 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 120 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 226 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + + + + +ARM Macro Assembler Page 6 Alphabetic symbol ordering +Relocatable symbols + +RTC_IRQHandler 0000001A + +Symbol: RTC_IRQHandler + Definitions + At line 232 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 82 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 188 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +Reset_Handler 00000000 + +Symbol: Reset_Handler + Definitions + At line 129 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 62 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 130 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +SPI1_IRQHandler 0000001A + +Symbol: SPI1_IRQHandler + Definitions + At line 264 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 114 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 220 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +SPI2_IRQHandler 0000001A + +Symbol: SPI2_IRQHandler + Definitions + At line 265 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 115 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 221 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +SVC_Handler 00000012 + +Symbol: SVC_Handler + Definitions + At line 165 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 72 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 166 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +SysTick_Handler 00000018 + +Symbol: SysTick_Handler + Definitions + At line 178 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 76 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 179 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +TAMPER_IRQHandler 0000001A + +Symbol: TAMPER_IRQHandler + Definitions + At line 231 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + + + +ARM Macro Assembler Page 7 Alphabetic symbol ordering +Relocatable symbols + + Uses + At line 81 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 187 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +TIM1_BRK_IRQHandler 0000001A + +Symbol: TIM1_BRK_IRQHandler + Definitions + At line 253 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 103 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 209 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +TIM1_CC_IRQHandler 0000001A + +Symbol: TIM1_CC_IRQHandler + Definitions + At line 256 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 106 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 212 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +TIM1_TRG_COM_IRQHandler 0000001A + +Symbol: TIM1_TRG_COM_IRQHandler + Definitions + At line 255 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 105 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 211 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +TIM1_UP_IRQHandler 0000001A + +Symbol: TIM1_UP_IRQHandler + Definitions + At line 254 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 104 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 210 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +TIM2_IRQHandler 0000001A + +Symbol: TIM2_IRQHandler + Definitions + At line 257 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 107 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 213 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +TIM3_IRQHandler 0000001A + +Symbol: TIM3_IRQHandler + Definitions + At line 258 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 108 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 214 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +TIM4_IRQHandler 0000001A + + + +ARM Macro Assembler Page 8 Alphabetic symbol ordering +Relocatable symbols + + +Symbol: TIM4_IRQHandler + Definitions + At line 259 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 109 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 215 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +USART1_IRQHandler 0000001A + +Symbol: USART1_IRQHandler + Definitions + At line 266 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 116 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 222 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +USART2_IRQHandler 0000001A + +Symbol: USART2_IRQHandler + Definitions + At line 267 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 117 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 223 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +USART3_IRQHandler 0000001A + +Symbol: USART3_IRQHandler + Definitions + At line 268 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 118 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 224 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +USBWakeUp_IRQHandler 0000001A + +Symbol: USBWakeUp_IRQHandler + Definitions + At line 271 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 121 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 227 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +USB_HP_CAN1_TX_IRQHandler 0000001A + +Symbol: USB_HP_CAN1_TX_IRQHandler + Definitions + At line 248 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 98 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 204 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +USB_LP_CAN1_RX0_IRQHandler 0000001A + +Symbol: USB_LP_CAN1_RX0_IRQHandler + Definitions + At line 249 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + + + +ARM Macro Assembler Page 9 Alphabetic symbol ordering +Relocatable symbols + + At line 99 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 205 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +UsageFault_Handler 00000010 + +Symbol: UsageFault_Handler + Definitions + At line 161 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 67 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 162 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +WWDG_IRQHandler 0000001A + +Symbol: WWDG_IRQHandler + Definitions + At line 229 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 79 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 185 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +__user_initial_stackheap 0000001C + +Symbol: __user_initial_stackheap + Definitions + At line 293 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 291 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s +Comment: __user_initial_stackheap used once +56 symbols + + + +ARM Macro Assembler Page 1 Alphabetic symbol ordering +Absolute symbols + +Heap_Size 00000200 + +Symbol: Heap_Size + Definitions + At line 44 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 48 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 297 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +Stack_Size 00000400 + +Symbol: Stack_Size + Definitions + At line 33 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 36 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + At line 296 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + +__Vectors_Size 000000EC + +Symbol: __Vectors_Size + Definitions + At line 124 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 59 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s +Comment: __Vectors_Size used once +3 symbols + + + +ARM Macro Assembler Page 1 Alphabetic symbol ordering +External symbols + +SystemInit 00000000 + +Symbol: SystemInit + Definitions + At line 132 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 133 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s +Comment: SystemInit used once +__main 00000000 + +Symbol: __main + Definitions + At line 131 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + At line 135 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s +Comment: __main used once +__use_two_region_memory 00000000 + +Symbol: __use_two_region_memory + Definitions + At line 290 in file ..\Libraries\CMSIS\startup\startup_stm32f10x_md.s + Uses + None +Comment: __use_two_region_memory unused +3 symbols +408 symbols in table diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/24cxx.crf b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/24cxx.crf new file mode 100644 index 0000000000000000000000000000000000000000..7368d4cdef2af1305fd920a65efb775c8f30e999 GIT binary patch literal 345791 zcmbTf37lL!a3cebl}p$(p-%;qN^+ z-uU=yqffr^TOZjR;lC^Hy*S!*78qNjl`Hn{-E+m2>j$U!7d(IXX2rAZ-p53nE(A|+ z@0EvkAKJUNenqoC?vAfmKYV?fTpjNqiGT5v`|h71iS2tI9c{XR;ofuL(Asp*^(mOY z_@8%uOE5q7-uY^7`7L!hq?X1N*Ng zo9}-2+lBD^?@gmkkF0_lJqf>?Y@dU_2xJH&5K2<*Zn_w>X`Dl^16e_<1c=! z{QItB(`?TgX{J+s=onKSvQoY8*iv1!+e-D(d#ll=M{nr6tFFA}`aMTXC663qcGvGV zQ@#J*EZX#_4YOOj@$gX4T_OGk&mY})pX^WWLdSEQx8vCp z{lR;`CK+!#dU`aBqT{0I#OYLYPSeHczmJ}&h})*q#&|gGcAFsAj-IW^r%b2gNk2_G z=yU*lUht#Oi@?9<;Jzd4^d~y;=vm+=^2s^(u4%s&?LGPsML%nK+=isqus!My7pJXJ zccndwp2ekW_M+y1*qsj7cI_dV?gXKx|b~8;^rTNLx z$EY+9EezRZC;~0U-NDkdU+*qOE62(`UT(zEGyWgAlW2PMmy{+Khcy{Bqi-F3gyOv* z$Q%7D=f7P&7-E!Pf4Dpyj@sk)(j@xdM<1jlpEjK?t)Q@nqwZkZ=uXDbOOIZtuydx< zm9_m>9XK={-?Tp2yXU$lI_tgHL_a!uax`}d74zoq=(7FMucCM#99@FnXP&uqV1Ix2 z`gOan+_%=UPmGWi(t0GwvAVsyZ7yr`F;NA`8oac*4mXvuIV4xzxOcA5ZYW|q#DA!@rtD1 z4QDB7Co6j;@VKLAOSKQ56INxr#6P9^z|O5{wEUxYYQ>YdT* z*W+pP+THv2ukBNL+~$E*Ua#@MD$iRzu*&<@9=IY^dzA;SO88Gba81Im+T@l;uPz^M7lcad~x#fFC5;TYLv@zN#lf2qUA`mo~A{f4C zgo*$rqlIa6(3j|9IayvEe{6&Vk|}R|)uyVVzR#wr68?%Ix|_hGZ54*6IKW6MbGi*A zI>pHjpi-P>%ZXBYGM1k|Tmsr_*LXMfs1~)5YmDsvo^rArDdreSS`@&N4lEk>WX*<3Sf0 z9Yj3J49;X&qQ6BkN%$ndgVCgoK|^$-NtGX=(`%zwA3aa;o<5z@_iC@($n}Z#2}3A= zVMuprQq885%ZF_k^2DRtRkE!LiEc;Dm${yiGdHK>2z2hPufYe zWC{_q=y%{xDFlNlnPW4WF*RS#sc$a|OlscLdT%ll^ae`{^e1|ySu7YbLD00-ZuZ8} zWu|iEfu(WOIC`oo*)14C&P@+Tw?SQ5)>}b|t03*SNNEDnL5l>B9mc3jCp@BLJqkHW zStk%l2>Y>36ViTS(}cJmp$5yeCnM=}-`ehVq2KukTS-4f(}mz~F@TW%Z3Yloe4_wJ zy&{h{!iO@CQwu<3vd$qQmm?e^vN?#3QcBxKxm>Lb`2*WPB8x0mUAoBNa+fZ|PYSwF zHkW@|$vU0EeGDLS_!${?{#YiGSyu>1sND%FONF<0C7Mv8QP!q)eDZ-J6O6cF&R3-IOHdTqes|Z~PnD*Le zK%@(vDOv&g`r57$<%p*-ka99D0>(Mlr?`)q!Auc<{+Q7l3R0o0A&oMa;h?r$|^4EBpf%Kj70Rj)TJT^`hbv5 z-bQK(W{{s?F(W91h&Q-Y@V?F#A(%nFv>-!jtJ~=a8G9HqxOW%s8Fv?^^~s=*k5Y>I z>v;ret}EJuarfzM5xY+;0(!NHId~!BIERSTzbI0#QvIU5s%0AZGIXrcLtDT$H*H2g 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 z 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�>OTz7RZVw43ea6mcRv>1 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�BKJC!vVrc3Wcn=ZW*ZMyVM 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ⅈH00 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�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 literal 0 HcmV?d00001 diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/ExtDll.iex b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/ExtDll.iex new file mode 100644 index 0000000..6c0896e --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/ExtDll.iex @@ -0,0 +1,2 @@ +[EXTDLL] +Count=0 diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/Project.axf b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/Project.axf new file mode 100644 index 0000000000000000000000000000000000000000..660f329b3ec23ce405e8fa74d3f8852862e565cf GIT binary patch literal 406084 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 literal 0 HcmV?d00001 diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/Project.build_log.htm b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/Project.build_log.htm new file mode 100644 index 0000000..db74c95 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/Project.build_log.htm @@ -0,0 +1,40 @@ + + +

+

Vision Build Log

+

Tool Versions:

+IDE-Version: Vision V5.21.1.0 +Copyright (C) 2016 ARM Ltd and ARM Germany GmbH. All rights reserved. +License Information: xx Administrator, xx, LIC=LSNXV-PB4C4-KP5ZY-ICUT9-7ZGPP-HFWZB + +Tool Versions: +Toolchain: MDK-ARM Plus Version: 5.21a +Toolchain Path: D:\Program Files\Keilv5\ARM\ARMCC\Bin +C Compiler: Armcc.exe V5.06 update 3 (build 300) +Assembler: Armasm.exe V5.06 update 3 (build 300) +Linker/Locator: ArmLink.exe V5.06 update 3 (build 300) +Library Manager: ArmAr.exe V5.06 update 3 (build 300) +Hex Converter: FromElf.exe V5.06 update 3 (build 300) +CPU DLL: SARMCM3.DLL V5.21a +Dialog DLL: DCM.DLL V1.13.8.0 +Target DLL: STLink\ST-LINKIII-KEIL_SWO.dll V2.0.18.0 +Dialog DLL: TCM.DLL V1.14.14.0 + +

Project:

+E:\HardwareProject\GeekRebot\2.Firmware\STM32_Core\Project\Project.uvprojx +Project File Date: 05/24/2023 + +

Output:

+*** Using Compiler 'V5.06 update 3 (build 300)', folder: 'D:\Program Files\Keilv5\ARM\ARMCC\Bin' +Build target 'PROJECT' +"..\Output\Project.axf" - 0 Error(s), 0 Warning(s). + +

Collection of Component include folders:

+ E:\HardwareProject\GeekRebot\2.Firmware\STM32_Core\Project\RTE + D:\Program Files\Keilv5\ARM\PACK\Keil\STM32F1xx_DFP\1.1.0\Device\Include + +

Collection of Component Files used:

+Build Time Elapsed: 00:00:00 +
+ + diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/Project.hex b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/Project.hex new file mode 100644 index 0000000..830236a --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/Project.hex @@ -0,0 +1,1356 @@ +:020000040800F2 +:10000000400900202502000851330008533300083E +:10001000573300085B3300085F330008000000001E +:100020000000000000000000000000006333000832 +:100030006533000800000000673300083D02000837 +:100040003F0200083F0200083F0200083F0200088C +:100050003F0200083F0200083F0200083F0200087C +:100060003F0200083F0200083F0200083F0200086C +:100070003F0200083F0200083F0200083F0200085C +:100080003F0200083F0200083F0200083F0200084C +:100090003F0200083F0200083F0200083F0200083C +:1000A0003F0200083F0200083F0200083F0200082C +:1000B000212700083F020008092700083F02000826 +:1000C0003F0200083F0200083F0200083F0200080C +:1000D0003F020008ED200008113200083F0200082E +:1000E0003F0200083F0200083F0200083F020008EC +:1000F0003F0200083F0200083F0200083F020008DC +:100100003F0200083F0200083F0200083F020008CB +:100110003F0200083F020008CD2E00083F02000801 +:100120003F0200083F0200083F0200083F020008AB +:1001300000F002F800F067F80AA090E8000C824492 +:100140008344AAF10107DA4501D100F05CF8AFF26F +:10015000090EBAE80F0013F0010F18BFFB1A43F0A5 +:1001600001031847E4510000045200000A444FF014 +:10017000000C10F8013B13F0070408BF10F8014B06 +:100180001D1108BF10F8015B641E05D010F8016B4B +:10019000641E01F8016BF9D113F0080F1EBF10F8AF +:1001A000014BAD1C0C1B09D16D1E58BF01F801CBD2 +:1001B000FAD505E014F8016B01F8016B6D1EF9D555 +:1001C0009142D6D37047000000230024002500266A +:1001D000103A28BF78C1FBD8520728BF30C148BFAA +:1001E0000B607047662904F05684002070471FB5E5 +:1001F00003F0AAFB04000020002104F0EDF8E06009 +:100200001FBD10B510BD03F09BFC1146FFF7EFFFBB +:1002100003F02CF803F0B9FC03B4FFF7F2FF03BCC2 +:1002200003F0FCFC0948804709480047FEE7FEE769 +:10023000FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE796 +:1002400004480549054A064B70470000430300086F +:100250003101000840030020400900204005002033 +:10026000400500200CB50020019000906C4800680B +:1002700040F480306A49086000BF6948006800F4B3 +:10028000003000900198401C0190009818B9019826 +:10029000B0F5A06FF1D16248006800F4003010B1F1 +:1002A0000120009001E0002000900098012843D137 +:1002B0005C48006840F010005A4908600846006831 +:1002C00020F0030008600846006840F00200086063 +:1002D00053484068524948600846406848600846AC +:1002E000406840F4806048600846406820F47C1014 +:1002F00048600846406840F4E810486008460068D6 +:1003000040F08070086000BF4548006800F0007051 +:100310000028F9D04248406820F003004049486076 +:100320000846406840F00200486000BF3C48406812 +:1003300000F00C000828F9D10CBD10B5FFF792FFB2 +:1003400010BD10B53648006840F00100344908601F +:10035000084640683449084031494860084600680A +:10036000324908402E4908600846006820F4802081 +:1003700008600846406820F4FE0048604FF41F0003 +:100380008860FFF7DAFF4FF000602949086010BD70 +:1003900010B5002100200022214B5B6803F00C0106 +:1003A00021B1042906D0082928D107E0214B224C8D +:1003B000236027E01F4B204C236023E0184B5B6831 +:1003C00003F47010164B5B6803F48032022303EBD6 +:1003D000904022B9194B4343174C23600DE0104B5A +:1003E0005B6803F4003323B1144B4343124C236086 +:1003F00003E0104B4343104C236003E00D4B0E4CC5 +:10040000236000BF00BF064B5B68C3F303130C4CB3 +:10041000E15C094B1B68CB40074C236010BD00001A +:1004200000100240002002400000FFF8FFFFF6FE2F +:1004300008ED00E000127A000000002000093D00F5 +:100440000400002031490143314A1160704770B502 +:10045000002100230F22C47804B32D4C246804F437 +:10046000E064C4F5E064210AC1F10403CA404478A1 +:1004700004FA03F18478144021430901254C0678DD +:10048000A155047804F01F050124AC4005786D11D6 +:10049000AD0005F1E025C5F8004109E0047804F05D +:1004A0001F050124AC401C4D0678761145F8264006 +:1004B00070BD1A4A0A400243154B1B1F1A60704751 +:1004C00039B1134A121D12680243114B1B1D1A60E9 +:1004D00006E00F4A121D126882430D4B1B1D1A6065 +:1004E0007047042808D14FF0E021096941F0040168 +:1004F0004FF0E022116107E04FF0E021096921F09F +:1005000004014FF0E0221161704700000000FA057D +:100510000CED00E000E400E080E100E080FFFF1F60 +:1005200010B50446CC48844208D10121042000F0D3 +:100530002DFB0021042000F029FB46E0C74884423F +:1005400008D10121082000F021FB0021082000F043 +:100550001DFB3AE0C248844208D10121102000F07E +:1005600015FB0021102000F011FB2EE0BD48844255 +:1005700008D10121202000F009FB0021202000F0FB +:1005800005FB22E0B848844208D10121402000F058 +:10059000FDFA0021402000F0F9FA16E0B348844249 +:1005A00008D10121802000F0F1FA0021802000F024 +:1005B000EDFA0AE0AE48844207D10121801500F02F +:1005C000E5FA0021A01500F0E1FA10BD10B50121F7 +:1005D000084600F0DBFA0021012000F0D7FA10BD38 +:1005E0002DE9F041024600250026002000230024CA +:1005F000002791F803C00CF00F0591F803C00CF030 +:10060000100CBCF1000F03D091F802C04CEA0505B4 +:1006100091F800C0BCF1000F31D0146800202BE02D +:100620004FF0010C0CFA00F3B1F800C00CEA03061D +:100630009E4220D183004FF00F0C0CFA03F7BC430D +:1006400005FA03FC4CEA040491F803C0BCF1280F3E +:1006500006D14FF0010C0CFA00FCC2F814C00AE0FD +:1006600091F803C0BCF1480F05D14FF0010C0CFA12 +:1006700000FCC2F810C0401C0828D1D31460B1F8A7 +:1006800000C0BCF1FF0F34DD546800202EE000F103 +:10069000080C4FF0010808FA0CF3B1F800C00CEA9E +:1006A00003069E4221D183004FF00F0C0CFA03F792 +:1006B000BC4305FA03FC4CEA040491F803C0BCF106 +:1006C000280F05D100F1080C08FA0CF8C2F81480C4 +:1006D00091F803C0BCF1480F07D100F1080C4FF0AE +:1006E000010808FA0CF8C2F81080401C0828CED384 +:1006F0005460BDE8F0814FF6FF71018002218170E6 +:100700000421C17070470246002093680B400BB172 +:10071000012000E0002070470146886880B27047E1 +:1007200002460020D3680B400BB1012000E00020FE +:1007300070470146C86880B27047016170474161E7 +:1007400070470AB1016100E041617047C1607047C4 +:100750004FF480320A4382618161826182698269D9 +:10076000704702460020434B18684FF680731840CC +:1007700040EA021008433F4B186070473E49C86189 +:100780007047F0B50A46002300240021002500F040 +:100790000046B6F1004F02D1364EF16901E0354E08 +:1007A0007168C0F3034583B200F44016B6F5401FEC +:1007B00008D121F070612F4E766826F070662D4FBB +:1007C0007E6012E000F48016B6F5801F06D1032685 +:1007D00006FA05F4A14341F0706106E0460D3601CA +:1007E00003FA06F6B14341F0706122B1460D3601BD +:1007F00003FA06F6314300F00046B6F1004F02D18D +:100800001C4EF16101E01B4E7160F0BD30B500225D +:100810008B071C0F0F2303FA04F2164B08338C10BE +:1008200053F824309343134C08348D1044F825308A +:1008300023468C1053F824308C07240F00FA04F45C +:1008400023430C4C08348D1044F8253030BD0A4940 +:10085000DC3108607047000000080140000C0140D6 +:10086000001001400014014000180140001C01402C +:10087000002001400000014000002042DF480068E5 +:1008800040F00100DD49086008464068DC49084046 +:10089000DA49486008460068DA490840D7490860E4 +:1008A0000846006820F4802008600846406820F46C +:1008B000FE0048604FF41F0088607047CF49096808 +:1008C00021F48031CD4A11601146096821F480215C +:1008D0001160B0F5803F03D0B0F5802F0ED106E057 +:1008E000C649096841F48031C44A116007E0C34930 +:1008F000096841F4A021C14A116000E000BF00BFB7 +:10090000704710B501460022002300204A11012A39 +:1009100002D1BA4C236806E0022A02D1B74C236AFE +:1009200001E0B64C636A01F01F02012494401C40B0 +:100930000CB1012000E0002010BD38B5002000906F +:100940000024002500BF3120FFF7DBFF054600989B +:10095000401C00900098B0F5A06F01D0002DF2D09F +:100960003120FFF7CEFF08B1012400E0002420462B +:1009700038BD01460020A14A106820F0F80040EA86 +:10098000C10010607047A04908607047024600200F +:100990009A4B586820F47C1042EA01031843974BA5 +:1009A0005860704798490866704701460020934A8E +:1009B000506820F003000843506070478F4840683B +:1009C00000F00C007047014600208C4A506820F06F +:1009D000F00008435060704701460020874A506885 +:1009E00020F4E06008435060704701460020834ACD +:1009F000506820F4605040EAC1005060704729B14F +:100A00007E4A527A02437D4B5A7204E07B4A527A04 +:100A100082437A4B5A7270477B49D83108607047DD +:100A200001460020754A506820F440400843506059 +:100A300070470021714A20321170704A82F82010EC +:100A4000012802D004280AD104E001216B4A203297 +:100A5000117005E00521694A2032117000E000BFE5 +:100A600000BF70476949086070476449096A0143DB +:100A7000624A11627047654944390860704730B571 +:100A800000210022002400235C4D6D6805F00C015C +:100A900021B1042905D0082923D105E05C4D05606A +:100AA00022E05B4D05601FE0544D6D6805F4701247 +:100AB000524D6D6805F48034022505EB92421CB955 +:100AC000544D554305600BE04C4D6D6805F4003501 +:100AD0001DB1504D5543056002E04D4D5543056035 +:100AE00002E04B4D056000BF00BF444D6D6805F04E +:100AF000F0010909484D6B5C0568DD4045603F4DDC +:100B00006D6805F4E061090A434D6B5C4568DD40A2 +:100B100085603A4D6D6805F46051C90A3E4D6B5CC5 +:100B20004568DD40C560354D6D6805F44041890B71 +:100B30003A4D6B5CC568B5FBF3F5056130BD29B175 +:100B40002E4A526902432D4B5A6104E02B4A5269E6 +:100B500082432A4B5A61704729B1284A926902435D +:100B6000264B9A6104E0254A92698243234B9A619D +:100B7000704729B1214AD2690243204BDA6104E06F +:100B80001E4AD26982431D4BDA61704729B11B4A64 +:100B9000D2680243194BDA6004E0184AD2688243F3 +:100BA000164BDA60704729B1144A12690243134B9D +:100BB0001A6104E0114A12698243104B1A617047AE +:100BC00012494039086070470F49C86470470B49A3 +:100BD000C87170470948406A40F080700749486210 +:100BE000704701460020054A92680A400AB1012078 +:100BF00000E00020704701498872704700100240F1 +:100C00000000FFF8FFFFF6FE00004242800442426F +:100C100000127A0000093D0014000020240000208A +:100C200010B50446FE48844208D10121C014FFF7E4 +:100C3000ADFF0021E014FFF7A9FFC4E0B4F1804F3D +:100C400008D101210846FFF7AEFF00210120FFF780 +:100C5000AAFFB8E0F348844208D101210220FFF73F +:100C6000A2FF00210220FFF79EFFACE0EE48844285 +:100C700008D101210420FFF796FF00210420FFF78F +:100C800092FFA0E0E948844208D101210820FFF743 +:100C90008AFF00210820FFF786FF94E0E4488442A1 +:100CA00008D101211020FFF77EFF00211020FFF75F +:100CB0007AFF88E0DF48844208D101212020FFF735 +:100CC00072FF00212020FFF76EFF7CE0DA488442AB +:100CD00008D101214014FFF759FF00216014FFF7EC +:100CE00055FF70E0D548844209D10121C804FFF7BF +:100CF0004DFF00214FF40020FFF748FF63E0D0488C +:100D0000844209D101210805FFF740FF00214FF47B +:100D10008010FFF73BFF56E0CA48844209D1012109 +:100D20004805FFF733FF00214FF40010FFF72EFFB7 +:100D300049E0C548844208D101214020FFF733FF34 +:100D400000214020FFF72FFF3DE0C048844208D13A +:100D500001218020FFF727FF00218020FFF723FFDC +:100D600031E0BB48844208D101218015FFF71BFF09 +:100D70000021A015FFF717FF25E0B648844209D1EE +:100D800001210804FFF702FF00214FF48030FFF734 +:100D9000FDFE18E0B048844209D101214804FFF764 +:100DA000F5FE00214FF40030FFF7F0FE0BE0AB48FA +:100DB000844208D101218804FFF7E8FE00214FF4A6 +:100DC0008020FFF7E3FE10BD00220288944B98427A +:100DD0000ED0994B98420BD0B0F1804F08D0914B78 +:100DE000984205D0904B984202D0904B984204D143 +:100DF0004FF68F731A404B881A438D4B984207D099 +:100E00008C4B984204D04FF6FF431A40CB881A43CC +:100E100002808B8883850B880385814B98420BD099 +:100E2000854B984208D08B4B984205D08A4B98420C +:100E300002D08A4B984201D10B7A03860123838228 +:100E4000704770B5002400220023058C4FF6FE7613 +:100E500035400584028C8388048B4FF68F752C40B7 +:100E6000B51E2C400D882C43751E2A400D892A433F +:100E70004D882A436A4DA8420BD06F4DA84208D036 +:100E8000744DA84205D0744DA84202D0734DA842BB +:100E900013D14FF6F7752A404D892A434FF6FB755B +:100EA0002A408D882A434FF6FF652B404FF6FF55A9 +:100EB0002B408D892B43CD892B4383800483CD88A0 +:100EC0008586028470BD70B5002400220023058C45 +:100ED0004FF6EF7635400584028C8388048B48F604 +:100EE000FF752C404FF6FF452C400D884FF6FF76DE +:100EF00006EA05252C434FF6DF752A400D8906EAE0 +:100F000005152A434D8806EA05152A43444DA84293 +:100F100002D0494DA8421DD14FF67F752A404D8918 +:100F20004FF6FF7606EA05152A434FF6BF752A40AD +:100F30008D8806EA05152A434FF6FF352B404FF200 +:100F4000FF752B408D8906EA85052B43CD8906EA7E +:100F500085052B4383800483CD880587028470BD7B +:100F600070B5002400220023058C4FF6FF66354043 +:100F70000584028C8388848B4FF68F752C404FF646 +:100F8000FC752C400D882C434FF6FF552A400D89E7 +:100F90004FF6FF7606EA05252A434D8806EA052521 +:100FA0002A431F4DA84202D0234DA8421DD14FF223 +:100FB000FF752A404D894FF6FF7606EA05252A433C +:100FC0004FF6FF352A408D8806EA05252A434EF65E +:100FD000FF752B404DF6FF752B408D8906EA0515F0 +:100FE0002B43CD8906EA05152B4383808483CD8866 +:100FF0008587028470BD70B5002200230024058C13 +:101000004EF6FF7635400584038C8488828B48F643 +:10101000FF752A404FF6FF452A400D8820E000006A +:10102000002C01400004004000080040000C00407B +:10103000001000400014004000340140004C01400A +:10104000005001400054014000180040001C0040C6 +:1010500000200040004001400044014000480140A1 +:101060004FF6FF7606EA05252A434DF6FF752B401D +:101070000D8906EA05352B434D8806EA05352B43D5 +:10108000FA4DA84202D0FA4DA84208D14BF6FF759E +:101090002C408D894FF6FF7606EA85152C43848017 +:1010A0008283CD88A0F84050038470BD828B4FF2BC +:1010B000FF331A408283828B4FF6FF7303EA0123CA +:1010C0001A4382837047F0B50C4615460022002172 +:1010D0000026078C4EF6FF7C07EA0C070784828BFC +:1010E000018C4FF6FF7707EA043640F6FF473A4097 +:1010F0004FF6FF7707EA05273A434FF6FF7707EAEF +:1011000003373A43D94FB8420ED0D94FB8420BD02B +:10111000B0F1804F08D0D74FB84205D0D64FB84273 +:1011200002D0D64FB84206D14DF6FF77394046F48B +:101130008057394305E047F6FF57394044F480575C +:10114000394382830184F0BD828B4FF6F3731A40DA +:101150008283828B0A4382837047F0B50C46154622 +:10116000002200210026078C4FF6FF6C07EA0C07CF +:101170000784828B018C4FF6FF7707EA04264FF62F +:101180000C773A404FF6FF7707EA03172F433A43AD +:10119000B64FB8420ED0B64FB8420BD0B0F1804F28 +:1011A00008D0B44FB84205D0B34FB84202D0B34FC5 +:1011B000B84206D14FF6FF57394046F4807739439D +:1011C00005E04FF2FF57394044F48077394382837A +:1011D0000184F0BD028B4FF2FF331A400283028B71 +:1011E0004FF6FF7303EA01231A4302837047F0B5F9 +:1011F0000C461546002200210026078C4FF6EF7C96 +:1012000007EA0C070784028B018C4FF6FF7707EA89 +:10121000041640F6FF473A404FF6FF7707EA0337D8 +:101220003A434FF6FF7707EA05273A438F4FB84214 +:101230000ED08F4FB8420BD0B0F1804F08D08D4FF9 +:10124000B84205D08C4FB84202D08C4FB84206D17C +:101250004FF6DF77394046F01007394305E04FF687 +:101260005F77394044F01007394302830184F0BDB1 +:10127000028B4FF6F3731A400283028B0A430283F8 +:101280007047F0B50C46154600220021068C4FF63B +:10129000FE773E400684028B018C4FF60C7632407E +:1012A0007E1C06EA03162E433243704EB0420ED027 +:1012B0006F4EB0420BD0B0F1804F08D06D4EB042AF +:1012C00005D06D4EB04202D06C4EB04206D14FF602 +:1012D000FD76314044F00106314305E04FF6F576E6 +:1012E000314044F00106314302830184F0BD70B502 +:1012F00005460C465D4885420ED05D4885420BD0C0 +:10130000B5F1804F08D05B48854205D05A488542E8 +:1013100002D05A48854200D100E000BF208850B971 +:101320002389A28861882846FFF7ABFFE188284619 +:10133000FFF79EFF25E0208804280AD12389A28890 +:1013400061882846FFF753FFE1882846FFF742FFF0 +:1013500017E0208808280AD12389A28861882846B6 +:10136000FFF7FBFEE1882846FFF7EEFE09E0238940 +:10137000A28861882846FFF7A6FEE1882846FFF785 +:1013800095FE70BD2DE9F04105460C46002601276B +:10139000608808B9022600E00026A088012801D153 +:1013A000022700E001272088A0B92389A28861884C +:1013B0002846FFF766FFE1882846FFF759FF238993 +:1013C0003A4631462846FFF712FFE1882846FFF7E4 +:1013D00001FF13E02389A28861882846FFF707FFF1 +:1013E000E1882846FFF7F6FE23893A46314628462B +:1013F000FFF747FFE1882846FFF73AFFBDE8F08195 +:101400000A884B881A438B881A43CB881A430B8966 +:101410001A434B891A438B891A43A0F8442070471A +:101420004FF6FF71818000210180C18041800172EF +:1014300070470021018041808180C180018141810C +:101440008181C1817047002101804180012181801B +:101450000021C1800181704700210180418081808D +:10146000C18001814181818170470000002C0140D1 +:10147000003401400004004000080040000C00401F +:1014800021B1028842F00102028004E002884FF696 +:10149000FE731A400280704731B1B0F8442042F424 +:1014A0000042A0F8442005E0B0F84420C2F30E0248 +:1014B000A0F8442070471AB183890B43838102E06E +:1014C00083898B43838170478182704741EA02039D +:1014D000A0F8483070471AB183890B43838102E03A +:1014E00083898B438381704701894FF6F8721140DD +:1014F000018170470A46002101894FF68F73194018 +:1015000011430181704730B504460D4629462046F7 +:10151000FFF7F0FF208940F00700208130BD2DE962 +:10152000F04104460D4616461F46602D06D13B4647 +:10153000012231462046FFF75AFE05E03B460122D4 +:1015400031462046FFF79DFE29462046FFF7D2FF91 +:10155000208940F007002081BDE8F08130B50C46BD +:1015600000210189C9B24FF6FF7505EA032515432D +:1015700025432943018130BD2DE9F04105460E4642 +:1015800017469846002443463A4631462846FFF718 +:10159000E5FF2C894FF6F870044044F007044FF63D +:1015A0008F70044044F070042C81BDE8F081F0B5E8 +:1015B00004460D4616461F463B46324629462046FF +:1015C000FFF7CCFF208940F480402081F0BD0185E9 +:1015D000828270470A46002101884FF68F731940B6 +:1015E000114301807047F0B50C4615461E46002198 +:1015F000002200230189028B038C4FF6F8773940D3 +:1016000021434FF6FC473A4040F201173A434FF668 +:10161000DD773B404FF6FF7707EA06172F433B4342 +:10162000018102830384F0BD0A460021018B4FF63D +:101630008F7319401143018370470A460021018BC3 +:1016400048F6FF7319404FF6FF7303EA022319436C +:10165000018370470A460021818B4FF68F73194032 +:101660001143818370470A460021818B48F6FF733E +:1016700019404FF6FF7303EA022319438183704731 +:1016800021B1028842F08002028004E002884FF615 +:101690007F731A400280704721B1828842F00402B1 +:1016A000828004E082884FF6FB731A408280704784 +:1016B00021B1828842F00802828004E082884FF6DD +:1016C000F7731A408280704721B1828842F001028C +:1016D000828004E082884FF6FE731A408280704751 +:1016E0000A460021018B4FF6F7731940114301831D +:1016F00070470A460021018B4FF2FF7319404FF6E5 +:10170000FF7303EA02231943018370470A4600214D +:10171000818B4FF6F77319401143818370470A4656 +:101720000021818B4FF2FF7319404FF6FF7303EADC +:1017300002231943818370470A460021018B4FF62B +:10174000FB7319401143018370470A460021018B46 +:101750004FF6FF3319404FF6FF7303EA0223194394 +:10176000018370470A460021818B4FF6FB731940B5 +:101770001143818370470A460021818B4FF6FF3366 +:1017800019404FF6FF7303EA022319438183704720 +:101790000A460021018B4FF67F73194011430183E4 +:1017A00070470A460021018BC1F30E014FF6FF730B +:1017B00003EA02231943018370470A460021818B03 +:1017C0004FF67F7319401143818370470A46002109 +:1017D000818BC1F30E014FF6FF7303EA0223194315 +:1017E000818370470A460021018C4FF6FD73194032 +:1017F0001143018470470A460021018C4FF6F773AC +:1018000019401143018470470A460021018C4FF6AC +:10181000DF7319404FF6FF7303EA02131943018483 +:1018200070470A460021018C4FF67F7319404FF62E +:10183000FF7303EA02131943018470470A4600212B +:10184000018C4FF6FF5319404FF6FF7303EA022352 +:101850001943018470470A460021018C4FF2FF733F +:1018600019404FF6FF7303EA0223194301847047BE +:101870000A460021018C4DF6FF7319404FF6FF73A5 +:1018800003EA023319430184704730B50023012471 +:101890008C40A3B2048C9C430484048C02FA01F5AE +:1018A000ADB22C43048430BD30B5002304248C40F9 +:1018B000A3B2048C9C430484048C02FA01F5ADB2FB +:1018C0002C43048430BD70B5034600200024184624 +:1018D000183001258D40ACB21D8CA5431D8409B183 +:1018E000082909D100EB6100056825F07005056045 +:1018F0000568154305600EE00D1FC5F34E0528442D +:10190000056825F4E045056005684FF6FF7606EAB0 +:1019100002263543056070BD21B1028842F0020203 +:10192000028004E002884FF6FD731A40028070477F +:1019300021B1028842F00402028004E002884FF6DE +:10194000FB731A400280704721B1828842F0800206 +:10195000828004E082884FF67F731A40828070474D +:1019600002884FF6F7731A40028002880A43028009 +:10197000704782884FF68F731A40828082880A43AC +:101980008280704702894FF6F8731A4002810289FB +:101990000A430281704702894FF67F731A40028121 +:1019A00002890A43028170478184704781857047AC +:1019B000818670470187704781877047A0F8401083 +:1019C000704702884FF6FF431A40028002880A439C +:1019D000028070470146888E70470146088F704725 +:1019E0000146888F70470146B1F8400070470146B4 +:1019F000888C70470146088D704702460020138A84 +:101A00000B400BB1012000E000207047CA43028266 +:101A1000704730B50246002000230024158A05EAED +:101A20000103958905EA010413B10CB1012000E01E +:101A3000002030BDCA4302827047000010B5044642 +:101A4000FB48844209D101218803FFF79FF8002158 +:101A50004FF48040FFF79AF832E0F648844209D10B +:101A600001214804FFF79FF800214FF40030FFF7F1 +:101A70009AF825E0F048844209D101218804FFF753 +:101A800092F800214FF48020FFF78DF818E0EB4822 +:101A9000844209D10121C804FFF785F800214FF4E1 +:101AA0000020FFF780F80BE0E548844208D10121CF +:101AB0000805FFF778F800214FF48010FFF773F85E +:101AC00010BD2DE9F04786B005460E460024A2461B +:101AD00000BFA1460027B08900B100BF2F462C8A65 +:101AE0004CF6FF700440F08804432C82AC894EF61B +:101AF000F3100440B08831890843718908430443D6 +:101B0000AC81AC8A4FF6FF400440B0890443AC82FC +:101B100001A8FEF7B4FFC648874202D1DDF810A045 +:101B200001E0DDF80CA0A88900F4004040B10AEB08 +:101B3000CA0000EB0A1031684900B0FBF1F807E079 +:101B40000AEBCA0000EB0A1031688900B0FBF1F81B +:101B50006420B8FBF0F004012009642101FB108926 +:101B6000A88900F4004040B1322000EBC900B0FB6E +:101B7000F1F000F00700044308E0322000EB091008 +:101B80006421B0FBF1F000F00F0004432C8106B09B +:101B9000BDE8F0874FF41651016000218180C180BB +:101BA00001810C21418100218181704710B50246DD +:101BB0000020108A4FF2FF0318400B884C88234303 +:101BC0008C882343CC8823431843108210BD002106 +:101BD000018041808180C180704721B1828942F4B7 +:101BE0000052828104E082894DF6FF731A4082819F +:101BF0007047F0B50346002400260025002040F67B +:101C00006A17B94200D100BF1846C1F3421401F06F +:101C10001F06012707FA06F5012C01D10C3004E05C +:101C2000022C01D1103000E014301AB107682F43A4 +:101C3000076002E00768AF430760F0BD1AB1838A0E +:101C40000B43838202E0838A8B4383827047028A3C +:101C50004FF6F0731A400282028A0A4302827047EA +:101C600082894FF2FF731A40828182890A438281FE +:101C7000704721B1828942F00202828104E08289A8 +:101C80004FF6FD731A4082817047028A4FF6DF7368 +:101C90001A400282028A0A430282704721B1028AF4 +:101CA00042F48042028204E0028A4BF6FF731A403B +:101CB00002827047C1F3080282807047014688881B +:101CC000C0F308007047818941F0010181817047AC +:101CD000028BD2B20283028B42EA01220283704756 +:101CE000028B02F47F420283028B0A430283704715 +:101CF00021B1828A42F02002828204E0828A4FF679 +:101D0000DF731A408282704721B1828A42F010024A +:101D1000828204E0828A4FF6EF731A408282704713 +:101D200021B1828A42F00802828204E0828A4FF660 +:101D3000F7731A408282704721B1828942F40042CF +:101D4000828103E08289C2F30E028281704721B151 +:101D5000828A42F40062828204E0828A4FF2FF7338 +:101D60001A4082827047828A4FF6FB731A40828241 +:101D7000828A0A438282704721B1828A42F002023B +:101D8000828204E0828A4FF6FD731A408282704795 +:101D900002460020B1F5007F00D100BF13880B4040 +:101DA0000BB1012000E00020704701F40072B2F591 +:101DB000007F00D100BFCA430280704770B5024661 +:101DC000002400230025002040F66A16B14200D10D +:101DD00000BFC1F3421501F01F03012606FA03F309 +:101DE000012D02D19689334006E0022D02D1168AD8 +:101DF000334001E0968A33400C12012606FA04F4BF +:101E00001688344013B10CB1012000E0002070BDF1 +:101E100010B50022002340F66A14A14200D100BF91 +:101E20000A1201249440A3B2DC43048010BD0000D8 +:101E3000003801400044004000480040004C004091 +:101E40000050004070B5482000F07EF900F0C4F862 +:101E500000F08EF84FF4E13000F0C0F800F0ADFA79 +:101E600000F074FC002140F60F6000F0CFFA00F0A3 +:101E7000F2FE00F08DFD02220021084600F07FFEF8 +:101E800003220021102000F07AFE102320A200215E +:101E9000582000F057FE0C231FA20221002000F062 +:101EA00051FE0C2320A20321002000F04BFE102342 +:101EB00021A20421002000F045FE0C2322A20621CD +:101EC000002000F03FFE0C2323A20721002000F099 +:101ED00039FE00F058FB47F230504FF080418884C3 +:101EE00000F09EFB47F230501F49088064210846ED +:101EF00000F0EEFA00F00EFB642000F03FF94FF422 +:101F0000FA752C4619480580001D048070BD00003C +:101F10006D2F6D696E0000004C656674203A2020BC +:101F2000202052504D00000052696768743A20200A +:101F3000202052504D000000503A202020493A20E5 +:101F40002020443A202020005365745F433A20202B +:101F5000202052504D0000005365745F503A2020FD +:101F600020206D2F6D696E00240800403C04004065 +:101F700008B501211020FEF7EFFD4FF40050ADF839 +:101F8000000010208DF8030003208DF80200694640 +:101F90000F48FEF725FB08BD70B504460D480068E4 +:101FA000401C0C490860A04210D14FF40051084871 +:101FB000FEF7A9FBC0F10100C5B22A464FF400515B +:101FC0000348FEF7BEFB00200249086070BD000018 +:101FD00000100140280000207047000010B586B0B6 +:101FE0000446012144F20400FEF7B6FD4FF40070F0 +:101FF000ADF8140018208DF8170003208DF8160096 +:1020000005A94C48FEF7ECFA4FF48060ADF81400D7 +:1020100004208DF8170005A94648FEF7E1FA01945F +:102020000020ADF80800ADF80A00ADF80C00ADF8DE +:1020300010000C20ADF80E0001A93F48FFF741FD4C +:10204000012240F225513C48FFF7D3FD01213A48D7 +:10205000FFF7C3FD06B010BD70B504460D46E1B2F2 +:102060003548FFF727FE00BF80213348FFF790FE79 +:102070000028F9D0204670BD10B5044600BF2021CD +:102080002D48FFF785FE0028F9D02B48FFF716FEF4 +:1020900010BD70B504460D4640212748FFF785FE68 +:1020A00080212548FFF7B4FE13E021782248FFF78E +:1020B00001FE00BF40212048FFF76AFE0128F9D148 +:1020C00040211D48FFF771FE80211B48FFF7A0FE4D +:1020D000641C281EA5F10105E7D170BD0022174B35 +:1020E0001A60174A1160174A1060704710B540F225 +:1020F00025511148FFF762FED8B10F48FFF7DEFD0A +:10210000C4B20F4800680D49096888420CD90D48CF +:10211000006804700B480068401C0A4908600748C2 +:102120000068401C0549086040F225510248FFF74D +:102130006FFE10BD00080140003801403000002053 +:10214000340000202C00002010B504466FF004007D +:10215000FEF7C7F9E11704EB5171C1F3C701234A38 +:1021600011701046007800EB4001C1EBC0104FF633 +:10217000FF7101EAC0001E49088010BD01461C4ADB +:1021800012884A434FF0E0235A6100229A610122EB +:102190001A6100BF4FF0E022106900F001021AB18D +:1021A00000F48032002AF5D000224FF0E0231A61BB +:1021B0009A61704701460D4A12784A434FF0E02376 +:1021C0005A6100229A6101221A6100BF4FF0E02299 +:1021D000106900F001021AB100F48032002AF5D033 +:1021E00000224FF0E0231A619A6170473800002006 +:1021F0003A000020002001E0411CC8B20A28FBDBA5 +:10220000704710B54FF400617F48FEF796FA4FF41F +:1022100080617D48FEF791FAFFF7ECFF4FF4006113 +:102220007948FEF78CFAFFF7E5FF4FF480617648B6 +:10223000FEF785FAFFF7DEFF10BD10B54FF4006121 +:102240007148FEF77CFA4FF480616F48FEF775FA2B +:10225000FFF7D0FF4FF400616B48FEF76EFA10BD38 +:1022600070B50446002528E004F0800028B14FF442 +:1022700000616548FEF761FA04E04FF400616248CE +:10228000FEF75DFAFFF7B6FF4FF480615E48FEF798 +:1022900054FAFFF7AFFF4FF480615B48FEF74FFA47 +:1022A000072D04D14FF400615748FEF746FA600647 +:1022B000040EFFF79FFF681CC5B2082DD4DB70BD6C +:1022C00010B54FF400615048FEF739FAFFF792FF5E +:1022D0004FF480614C48FEF730FAFFF78BFF4FF464 +:1022E00080614948FEF72BFAFFF784FF4FF4006145 +:1022F0004548FEF722FA10BD10B54FF40061424880 +:10230000FEF71BFAFFF776FF4FF480613E48FEF7B9 +:1023100014FAFFF76FFF4FF480613B48FEF70FFAA6 +:10232000FFF768FF10BD70B505460024002619E0D0 +:102330006006040E4FF480613348FEF7FEF9FFF7A4 +:1023400059FF4FF400613048FEF7DDF908B1601C19 +:10235000C4B24FF480612C48FEF7F1F9FFF74AFF51 +:10236000701CC6B2082EE3DB15B9FFF7C5FF01E00C +:10237000FFF7A6FF204670BD10B54FF4006122485C +:10238000FEF7DBF9FFF736FF4FF480611E48FEF7DA +:10239000D4F9FFF72FFF4FF400611B48FEF7B3F9A4 +:1023A00008B1012400E000244FF480611648FEF7D4 +:1023B000C6F9FFF71FFF204610BD08B50121082010 +:1023C000FEF7CAFB4FF44060ADF8000003208DF823 +:1023D000020014208DF8030069460B48FEF700F94F +:1023E000FFF72BFF08BD70B50446FFF7E6FFFFF7C8 +:1023F00008FF2046FFF734FFFFF7BEFF0546FFF753 +:102400001CFF284670BD0000000C014030B589B0AB +:1024100005460C4601210220FEF7ABFB681E80B288 +:10242000ADF80800A0B2ADF804000020ADF80A0035 +:10243000ADF8060001A9C048FEF7C6FC0121BE4860 +:10244000FFF7E4FA01221146BB48FFF734F80121F7 +:102450000820FEF781FB0320ADF8100018208DF84E +:10246000130003208DF8120004A9B448FEF7B8F851 +:102470006020ADF814000120ADF816000020ADF882 +:102480001A00ADF81C0005A9AB48FEF769FD08214C +:10249000A948FFF7D3F96020ADF814000120ADF88A +:1024A00016000020ADF81A00ADF81C0005A9A248DE +:1024B000FEF7A1FD0821A048FFF7DAF901219E48A7 +:1024C000FFF7DEF801219C48FEF7DAFF09B030BDC6 +:1024D0007FB505460C466020ADF800000120ADF840 +:1024E0000200ADF8065069469348FEF739FD082111 +:1024F0009148FFF7A3F9ADF8064069468E48FEF70C +:102500007AFD08218C48FFF7B3F901218A48FFF7CB +:10251000B7F87FBD1FB501211020FEF72AFB42F25C +:102520000F70ADF8080040F2CF20ADF80400002095 +:10253000ADF80A00ADF806008DF80C0001A980483E +:10254000FEF742FC01217E48FFF760FA01221146A6 +:102550007B48FEF7B0FF4FF44070FDF773FF362065 +:102560008DF8000005208DF8010000208DF8020094 +:1025700001208DF803006846FDF769FF01217048CE +:10258000FEF77EFF1FBD00B587B001210846FEF7AC +:10259000F0FA01210420FEF7DFFA0320ADF8000075 +:1025A00004208DF8030069466648FEF719F804A870 +:1025B000FEF736FF0020ADF810004EF66020ADF8B3 +:1025C00014000020ADF81600ADF8120004A94FF079 +:1025D0008040FEF7F9FB00231A4603214FF08040AC +:1025E000FFF701F801A8FEF72EFF0A20ADF80C0056 +:1025F00001A94007FEF77BFE01218807FFF706FAD5 +:10260000012211469007FEF756FF00214FF080404F +:10261000FFF7CAF901218807FEF732FF07B000BDB6 +:1026200000B587B001210420FEF7A3FA012108209C +:10263000FEF792FAC020ADF8000004208DF80300E8 +:1026400069463E48FDF7CCFF04A8FEF7E9FE0020EE +:10265000ADF810004EF66020ADF814000020ADF883 +:102660001600ADF8120004A93748FEF7ADFB0023B1 +:102670001A4603213448FEF7B6FF01A8FEF7E3FE31 +:102680000A20ADF80C0001A92F48FEF730FE012109 +:102690002D48FFF7BBF9012211462B48FEF70BFF2F +:1026A00000212948FFF780F901212748FEF7E8FEBD +:1026B00007B000BD0146022904D003290CD004292B +:1026C0001ED113E04FF08042928C10B247F230528C +:1026D0004FF080439A8415E0174A2432128810B2D2 +:1026E00047F23052144B24331A800BE0164A24323E +:1026F000128810B247F23052134B24331A8001E093 +:10270000002000BF00BF70470F48103000880E48FF +:102710001030008820F001000B491031088070470C +:102720004FF08040008A4FF08040008A20F0010086 +:102730004FF080410882704700040040000C0140C7 +:1027400000100040000801400008004008B50121C9 +:102750000820FEF701FA4FF47040ADF80000102099 +:102760008DF8030003208DF8020069463748FDF715 +:1027700037FF08BD10B504464CB94FF480513348BB +:10278000FDF7DBFF4FF400513048FDF7D8FF012C77 +:1027900007D161032D48FDF7D0FF21032B48FDF73A +:1027A000CEFF022C07D1E1022848FDF7C8FF210324 +:1027B0002648FDF7C4FF10BD10B504464CB94FF4D0 +:1027C00000412248FDF7B9FF4FF480411F48FDF753 +:1027D000B6FF012C07D1A1031C48FDF7AEFFE103B2 +:1027E0001A48FDF7ACFF022C07D161031748FDF72B +:1027F000A6FFA1031548FDF7A2FF10BD10B50020EC +:10280000FFF7B8FF0020FFF7D7FF10BD10B501207C +:10281000FFF7B0FF0120FFF7CFFF10BD10B501207B +:10282000FFF7A8FF0020FFF7C7FF10BD10B500207D +:10283000FFF7A0FF0120FFF7BFFF10BD10B502207A +:10284000FFF798FF0220FFF7B7FF10BD000C014013 +:1028500010B50446FFF7D5FC7820FFF701FDFFF720 +:102860008BFD0020FFF7FCFCFFF786FD2046FFF7FD +:10287000F7FCFFF781FDFFF7E0FC10BD10B5044643 +:10288000FFF7BFFC7820FFF7EBFCFFF775FD40205A +:10289000FFF7E6FCFFF770FD2046FFF7E1FCFFF7CE +:1028A0006BFDFFF7CAFC10BD70B504460D461DB1A7 +:1028B000E0B2FFF7E3FF02E0E0B2FFF7C9FF70BD4F +:1028C00070B50646002418E004F1B0000021FFF7BF +:1028D000EBFF00210846FFF7E7FF00211020FFF77C +:1028E000E3FF002505E001213046FFF7DDFF681C0E +:1028F000C5B2802DF7DB601CC4B2082CE4DB70BDD0 +:1029000006E041F6650100E0491E0029FCD1401EA9 +:102910000028F6D17047014605E0002001E0421C86 +:10292000D0B27B28FBDB0A1EA1F10101F5D1704773 +:1029300070B504460D4605F1B0000021FFF7B4FF65 +:10294000102141EA14100021FFF7AEFF04F00F0040 +:102950000021FFF7A9FF70BD10B500218D20FFF702 +:10296000A3FF00211420FFF79FFF0021AF20FFF7F6 +:102970009BFF10BD10B500218D20FFF795FF0021B2 +:102980001020FFF791FF0021AE20FFF78DFF10BD53 +:1029900070B5002418E004F1B0000021FFF784FFB7 +:1029A00000210846FFF780FF00211020FFF77CFF81 +:1029B000002505E001210020FFF776FF681CC5B265 +:1029C000802DF7DB601CC4B2082CE4DB70BD70B551 +:1029D000002418E004F1B0000021FFF765FF00219A +:1029E0000846FFF761FF00211020FFF75DFF00257B +:1029F00005E001210846FFF757FF681CC5B2802D8E +:102A0000F7DB601CC4B2082CE4DB70BD2DE9F04795 +:102A100007460E469046994600250024A8F120005E +:102A2000C5B27F2F02DD0027B01CC6B2B9F1100F6E +:102A300024D131463846FFF77BFF002408E004EB41 +:102A40000511BF4A505C0121FFF72EFF601CC4B284 +:102A5000082CF4DB701CC1B23846FFF769FF002474 +:102A600009E004EB05110831B54A505C0121FFF77C +:102A70001BFF601CC4B2082CF3DB12E03146384661 +:102A8000FFF756FF00240AE005EB4501AD4A02EBD3 +:102A90004101085D0121FFF707FF601CC4B2062C4D +:102AA000F2DBBDE8F08710B50246012000E050439C +:102AB0000B1EA1F10104E1B2F9D110BD2DE9FF5FB8 +:102AC000074691461E460E9D4FF0000A002435E051 +:102AD000301B401EC1B20A20FFF7E5FFB9FBF0F042 +:102AE0000A21B0FBF1F201FB1208BAF1000F14D178 +:102AF000701EA04211DDB8F1000F0CD1AB4605EB02 +:102B0000DB71491001FB0471C8B22B4620220199E8 +:102B1000FFF77CFF10E04FF0010AAB4605EBDB71DD +:102B2000491001FB0471C8B208F13001CAB22B464A +:102B30000199FFF76BFF00BF601CC4B2B442C7DB52 +:102B4000BDE8FF9F2DE9F04104460F461546984623 +:102B500000260FE0AA5D434639462046FFF756FFA0 +:102B600004F10800C4B2782C02DD0024B81CC7B2FE +:102B7000701CC6B2A85D0028ECD1BDE8F0812DE93B +:102B8000F04180460E461546002731464046FFF785 +:102B9000CFFE00240AE06C4A02EB8511085D01219A +:102BA000FFF782FE781CC7B2601CC4B2102CF2DBA7 +:102BB000701CC1B24046FFF7BBFE00240CE0690068 +:102BC000491C614A02EB4111085D0121FFF76CFECF +:102BD000781CC7B2601CC4B2102CF0DBBDE8F081D9 +:102BE0002DE9F05F06460F4690461C46DDF828A00A +:102BF0004FF0000BE11704EB5171C910A4EBC101B8 +:102C000031B92046E11704EB5171C1F3C70506E065 +:102C10002046E11704EB5171C910491CCDB23D4665 +:102C200015E029463046FFF783FEB1460BE05946D2 +:102C30000BF1010B1AF801000121FFF735FE09F134 +:102C4000010000F0FF09C145F1DB681CC5B2A542D7 +:102C5000E7DBBDE8F09F10B5FFF7AFFB4FF448701E +:102C6000FFF78CFA0021AE20FFF71EFE0021084678 +:102C7000FFF71AFE00211020FFF716FE002140206A +:102C8000FFF712FE0021B020FFF70EFE0021812089 +:102C9000FFF70AFE0021FF20FFF706FE0021A1201A +:102CA000FFF702FE0021A620FFF7FEFD0021A8206D +:102CB000FFF7FAFD00213F20FFF7F6FD0021C820B5 +:102CC000FFF7F2FD0021D320FFF7EEFD00210846BB +:102CD000FFF7EAFD0021D520FFF7E6FD0021802067 +:102CE000FFF7E2FD0021D820FFF7DEFD00210520DF +:102CF000FFF7DAFD0021D920FFF7D6FD0021F120F2 +:102D0000FFF7D2FD0021DA20FFF7CEFD00211220CF +:102D1000FFF7CAFD0021DB20FFF7C6FD00213020B0 +:102D2000FFF7C2FD00218D20FFF7BEFD002114201A +:102D3000FFF7BAFD0021AF20FFF7B6FD10BD000080 +:102D4000C24C00089A4A00083C0000202DE9FE43CE +:102D500055480468204601F09BFC064632460B4667 +:102D600052A102A800F000FB102302AA0421184679 +:102D7000FFF7E8FE4F480568284601F089FC064643 +:102D800032460B4649A101A800F0EEFA102301AA31 +:102D900004213820FFF7D6FE4748D0F8008040468F +:102DA00001F076FC064632460B4640A1684600F02C +:102DB000DBFA10236A4604216820FFF7C3FEBDE852 +:102DC000FE832DE9FC5F04460D462E1B3B48006840 +:102DD00001F008FD834638480168584601F01AFDA5 +:102DE00081463748006801F0FDFC009031480168D9 +:102DF000009801F00FFD8346304601F0F3FC00908F +:102E000029480168009801F005FD5946019001F03C +:102E1000CDFD8246494601F067FC804601F0C6FCC4 +:102E20000746274800682549086025480660384657 +:102E3000BDE8FC9F2DE9FC5F04460D462E1B214892 +:102E4000006801F0CFFC83461B480168584601F03A +:102E5000E1FC81461C48006801F0C4FC0090154864 +:102E60000168009801F0D6FC8346304601F0BAFCB8 +:102E700000900D480168009801F0CCFC5946019083 +:102E800001F094FD8246494601F02EFC804601F097 +:102E90008DFC07460C4800680A4908600A4806602D +:102EA0003846BDE8FC9F00003C02002025312E3151 +:102EB0006600000040020020440200204C02002076 +:102EC0004802002054020020500200202DE9F84F53 +:102ED00001217D48FEF791FD00287DD001217A482F +:102EE000FEF7A8FD0520FFF757F80220FFF7E2FBE9 +:102EF000A0F5EA403038754908600420FFF7DAFB96 +:102F0000A0F5EA40303872490860084600686F4909 +:102F1000096800EB010A0AEBDA7040104FF41671F1 +:102F200048434FF41C6190FBF1FB584601F09BFABB +:102F30008046684A684B01F0ADFA0646674A684B1E +:102F400001F0A8FA044601F05DFA664908600846F7 +:102F5000006801F09DFB044622460B4662A16448CE +:102F600000F002FA1023624A00213020FFF7EAFD48 +:102F700056480068002804DA544800684042534923 +:102F8000086053480068002804DA5148006840424D +:102F90004F490860574800684FF41C6148434FF49C +:102FA000167190FBF1F4214648480068FFF709FFCD +:102FB000514908604F4800684FF41C6148434FF482 +:102FC000167190FBF1F4214641480068FFF732FF8B +:102FD0004A490860484800E073E0006810F1030FB8 +:102FE00003DB45480068032806DD45480068424980 +:102FF00009680844424908604048006810F1030F1E +:1030000003DB3E480068032806DD3E4800683B4974 +:10301000096808443B4908603948006840F6AC51EB +:10302000884203DD40F6B83035490860354800680D +:1030300040F6AC51884203DD40F6B83031490860B3 +:1030400040F2DC502E4908602E4908602C48008868 +:103050002D4908802B480088091D0880FFF776FE5F +:103060001A4800684FF4167148434FF41C6190FBF6 +:10307000F1F0264908600C20032300900846022145 +:1030800002683820FFF71AFD114800684FF41671E6 +:1030900048434FF41C6190FBF1F01D4908600C207F +:1030A000032300900846194602683820FFF706FD02 +:1030B0000C20032300900F48062102683020FFF700 +:1030C000FDFCBDE8F88F0000001000405802002011 +:1030D0005C020020A4703D0AD7A3B03F6F1283C0EA +:1030E000CA2109407C02002025322E3266000000F1 +:1030F0008902002070020020680200206C0200207B +:1031000060020020640200203C04004074020020A1 +:103110007802002010B586B0044601210420FDF796 +:103120001BFD01214804FDF724FD0420ADF8140027 +:1031300018208DF8170003208DF8160005A94648C1 +:10314000FDF74EFA0820ADF8140004208DF81700A2 +:1031500005A94148FDF744FA01940020ADF80800A4 +:10316000ADF80A00ADF80C00ADF810000C20ADF879 +:103170000E0001A93948FEF7A4FC4FF4E060FDF70A +:1031800061F926208DF8000000208DF801008DF8EF +:10319000020001208DF803006846FDF758F901226E +:1031A00040F225512D48FEF724FD01212B48FEF762 +:1031B00014FD06B010BD70B504460D4640212748E9 +:1031C000FEF7F3FD80212548FEF722FE13E021786B +:1031D0002248FEF76FFD00BF40212048FEF7D8FDD2 +:1031E0000128F9D140211D48FEF7DFFD80211B4851 +:1031F000FEF70EFE641C281EA5F10105E7D170BD87 +:103200000022174B1A60174A1160174A1060704766 +:1032100010B540F225511148FEF7D0FDD8B10F4846 +:10322000FEF74CFDC4B20F4800680D49096888429A +:103230000CD90D48006804700B480068401C0A490E +:10324000086007480068401C0549086040F22551A5 +:103250000248FEF7DDFD10BD0008014000440040BB +:10326000940200209802002090020020FEF7EAFD60 +:103270004FF41650FFF74EFFFFF7E0FA64E014201A +:10328000FEF77CFF06213148FFF7BAFF06212F48E1 +:10329000FFF791FF2D48C078B12806D12B4800795F +:1032A000B52802D100202949C8702848C078B32821 +:1032B00006D126480079B72802D100202349C870DA +:1032C0002248C078B22805D120480079B62801D11B +:1032D000FFF794FA1D48C078B4280ED11B48007936 +:1032E000B8280AD1FFF79AFA4FF4FA70FEF746FFB2 +:1032F000FFF784FA00201549C8701448C078B52833 +:1033000005D112480079B92801D1FFF797FA0F4883 +:10331000C078B6280ED10D480079BA280AD1FFF737 +:1033200085FA4FF4FA70FEF729FFFFF767FA0020DD +:103330000649C8700548C078B82805D10348007907 +:10334000BC2801D1FFF762FA99E700009C02002037 +:10335000704700BFFEE700BFFEE700BFFEE700BF0B +:10336000FEE77047704770470FB41CB5074B06AABD +:103370007B4469460090059800F0CDFA002069462C +:1033800000F0DCFA1CBC5DF814FB0000C90500006D +:1033900070B5044685690068C10601D5302600E095 +:1033A0002026C00707D070BDD4E9012130469047E0 +:1033B000206A401C20626D1EF6D570BD70B50446B3 +:1033C00085690078C00707D170BDD4E901212020AC +:1033D0009047206A401C20626D1EF6D570BD2DE915 +:1033E000F0474FF0000A89460446C0F820A0204666 +:1033F000E1688847002876D0252806D0D4E9012145 +:103400009047206A401C2062F1E7E16820460025D1 +:103410008847C4F81CA006460027C4F818A02A2E26 +:1034200009D0304600F0D0FF38B304EB8708303EB7 +:10343000C8F8186019E059F8041B204604EB87020D +:103440009161E1688847012F064618D1E06900289C +:1034500020DA25F020051DE0D8F8180000EB8000E8 +:1034600006EB40003038C8F818002046E16888476D +:10347000064600F0A9FF0028EED1012F0AD02E2E1B +:1034800008D12046E16888477F1C0646022F45F098 +:103490002005C4DBA069002803DA404245F001059D +:1034A000A061E80701D025F01005B6B1A6F14100F2 +:1034B000192802D8203645F400654A463146204690 +:1034C00025604D46FCF78EFE58B1012806D0ED1D53 +:1034D00025F0070000F1080989E704E005F1040977 +:1034E00085E730468AE7206ABDE8F0877047704775 +:1034F000704770472DE9FF4F0C461E464FF0FF37CF +:103500008BB0D2E90001DDF860800A908A46C1F3F1 +:103510000A5505B93D46002108464FF00000BAF1B2 +:10352000000F00F4400005DA00EB80004FF440018A +:1035300001EA50004FEA9059B9F1010F00DDB94698 +:103540000A9850EA4A000ED044F61050A5F2FF3512 +:1035500045432F14B8F1000F1ED07542291E1EDD01 +:10356000C9F100021CE0B8F1010F4FF0000001D0DA +:10357000302103E0F24305E02154401CB042FBDB64 +:1035800030460022002121540B99C1F80880C1E97E +:1035900000200FB0BDE8F08FBD1B6D1CDEE74A4672 +:1035A00000DA694206A800F059FA06AB93E8070072 +:1035B00003AB83E8070050460A9900F036FB8DE81C +:1035C0000700A0F500501F3800900398002D09DD7A +:1035D00042F21F014A46084403A90390684600F0DE +:1035E00095FD08E0A0F500504A461F3803A9039056 +:1035F000684600F09FFD8DE807000004000C03D032 +:103600004FF0FF30410800E01046B8F1000F03D042 +:103610000022009215461EE0751E05D400F098F9B0 +:10362000303262556D1EF9D5B3460122084302D0EF +:1036300000227F1C04E02078302801D100227F1E68 +:10364000002A099786D01DE0112D07DA00F080F9D5 +:10365000303262556D1C50EA0102F5D1084302D0A8 +:103660000098C8B10EE00021681E05E0235C625C92 +:1036700063542254401E491C8142F7DBAB46A81B11 +:10368000401E0990002004F80B000B98099AC0F81E +:103690000880C0E9002B7CE711264FF0000859E7AD +:1036A0002DE9F04F88460446D21D22F0070191B063 +:1036B000D1E90001CDE90A0100F072FE02460B9843 +:1036C000C00F01D02D2007E02068810701D52B20F5 +:1036D00002E0202101EAC000032A099001D0072A54 +:1036E00005DB03464146204600F078F90BE12078DF +:1036F000800601D5E06900E00620B8F1650F81463B +:1037000006D0B8F1660F18D0B8F1670F70D131E06C +:103710000020B9F1110F009001DB112301E009F144 +:1037200001030AAA01A90CA8FFF7E4FEDDE90C7069 +:10373000002609F10105834647E001204B46009031 +:103740004FF000470AAA01A90CA8FFF7D3FEDDE954 +:103750000DB00C995D46002610B909F101000D1855 +:10376000B9EB050003D4C0F1FF3609F10105A5EB63 +:1037700009002BE0B9F1010F01DA4FF00109002037 +:10378000B9F1110F0090484601DD112300E0034616 +:103790000AAA01A90CA8FFF7ADFEDDE90C704D46A1 +:1037A00000268346207800070AD4AB4500DA5D4640 +:1037B00001A8012D04DD411911F8011C302907D0A1 +:1037C0004F4502DA17F1040F04DA012082460FE0B8 +:1037D0006D1EEEE7002F02DCED1B3E4403E0781C7B +:1037E000A84200DD7D1CB81B00F1010A4FF0004724 +:1037F0002078000703D4AA4501DB4FF0FF3A0021EF +:10380000B7F1004F0DF143088DF8431024D002208A +:103810002B23002F01DA7F422D230A21021EA0F163 +:10382000010000DC5FB197FBF1FC97FBF1F201FBBB +:103830001C7C17460CF1300C08F801CDEEE7A8F11E +:10384000010003702188090501D5452100E06521AB +:10385000A0F1010800F8011C09980FA9A1EB0807C5 +:10386000FF1D00B10120411901EBEA70A169384444 +:10387000081A401EA0612078C00602D42046FFF737 +:1038800087FD099828B1D4E901219047206A401C9E +:1038900020622078C00622D52046FFF779FD1EE081 +:1038A000002E04DBB34502DD01A8805D00E030207E +:1038B000D4E901219047206A401C2062761CAAF1BD +:1038C00001005FEA000A0AD100F03EF8C068016812 +:1038D000405CD4E901219047206A401C2062281EE8 +:1038E000A5F10105DCDC07E0D4E9012118F8010BA2 +:1038F0009047206A401C2062381EA7F10107F3DCC4 +:103900002046FFF75BFD032011B043E601694A1C26 +:1039100002610878704700B58FB0CDE90131002110 +:10392000059105497944CDE9031011466846FFF732 +:1039300056FD0FB000BD0000E5FFFFFF0A6802F86A +:10394000010B0A607047000000487047FC0200202D +:1039500030B5B0F10A024FEA900E71F100034EEA61 +:10396000817EB0EB0E0061EB91014FEA101E4EEA32 +:10397000017E10EB0E0041EB11114FEA102E4EEAC2 +:10398000016E10EB0E0041EB11214FEA104E4EEA92 +:10399000014E10EB0E0041EB1141401841F10001C6 +:1039A0004FEAD00040EA41704FEAD10110EB8005A8 +:1039B0004FEA810444EA907444EB01046D1944EB2E +:1039C0000404521BA3414FF0000348BF0A3200D544 +:1039D00030BD401C41F1000130BD00002DE9F04137 +:1039E0001F46044603260168072A01F4006004DB31 +:1039F00008B116A505E016A503E008B115A500E07D +:103A000015A521F010002060A069C01EA0610FB1B3 +:103A1000401EA0612046FFF7BBFC4FB1D4E9012155 +:103A200038469047206A401C2062C01C206206E095 +:103A3000206AFAE7D4E9012115F8010B9047761EB8 +:103A4000F8D22046FFF7BAFCBDE8F0814E414E00A7 +:103A50006E616E00494E4600696E66002DE9F047C2 +:103A6000814616468AB0334878440DC88DE80D006B +:103A700030487844801C03AC0DC884E80D0041F642 +:103A80009B300844372190FBF1F290FBF1F5A5F152 +:103A9000800501FB12041B3C02D56442012000E0BA +:103AA0000020DFF890A080460027FA44AAF1BE0A61 +:103AB0000DE0E00709D03246684607EB47010AEB04 +:103AC000810100F037FB8DE8070064107F1C002C9B +:103AD000EFD1184F7F44AC3F18E0E80714D007EB54 +:103AE00004100DF1180A90E80E008AE80E00C06874 +:103AF000F04201D198190890324606A903A800F0B7 +:103B000019FB03AB83E807006D10641C002DE4D1A2 +:103B100032466946B8F1000F03A802D000F0F6FA69 +:103B200001E000F007FBC9E90001C9F808200AB06C +:103B3000BDE8F087C418000000487047DC02002090 +:103B40007546FFF7F9FFAE4605006946534620F07B +:103B50000700854618B020B5FCF772FBBDE8204091 +:103B60004FF000064FF000074FF000084FF0000B39 +:103B700021F00701AC46ACE8C009ACE8C009ACE8EC +:103B8000C009ACE8C0098D46704710B50446AFF3D4 +:103B900000802046BDE81040FCF73EBB4FF0013CE2 +:103BA00050F8042B51F8043B9A4221D1A2EB0C03AC +:103BB000934313EACC1317D150F8042B51F8043B6C +:103BC0009A4215D1A2EB0C03934313EACC130BD109 +:103BD00050F8042B51F8043B9A4209D1A2EB0C0394 +:103BE000934313EACC13DBD04FF00000704700BFC3 +:103BF000D01A01BAB1FA81F101F0180122FA01F0EC +:103C0000CB40C1F12001DBB2C0B2C01A2CFA01F3E3 +:103C1000D11A914311EAC311E6D170470149182026 +:103C2000ABBEFEE72600020070475FEA400C08BF0B +:103C300091F0000F4FEA8C234FEAC12243EA515121 +:103C40004FEA1C5018BF00F5F0404FEA300018BF93 +:103C500041F000415FEA6C5C00F02980BCF1FF3F5D +:103C600008BF40F080407047130C06BF12044FF0AD +:103C7000100C4FF0000C130E04BF12020CF1080CD4 +:103C8000130F04BF12010CF1040C930F04BF920038 +:103C90000CF1020CD30F04BF52000CF1010C1146C1 +:103CA0004FF00002A0F11F00A0EB0C00704711F0D4 +:103CB000004F08BF704731F000413FF4D5AF0B0C07 +:103CC00006BF09044FF0100C4FF0000C0B0E04BFA0 +:103CD00009020CF1080C0B0F04BF09010CF1040CD4 +:103CE0008B0F04BF89000CF1020CCB0F04BF4900FD +:103CF0000CF1010CCCF12003A0EB0C0022FA03F331 +:103D000002FA0CF241EA030100F10100704720F0D1 +:103D10007F4C80EA030023F07F47ACEB070303F5F9 +:103D20007C5300F0004003F1FF032DE980494FEA86 +:103D3000154B09B44FEA144325EA0B4E24EA034815 +:103D40000FF2042606EB132749083E785FEA320299 +:103D500003FB0667C7F5000707FB06F64FEA543773 +:103D60004FEAD64606F1020607FB066CCCF1005C72 +:103D70004FEA1C472CEA074C07FB06F40CFB06F540 +:103D800004EB15464FEA961634BF00204FF0004072 +:103D90004FEAD13706FB07FC4FEA1C4C0CFB0BF734 +:103DA000D21B03FB0CF761EB07010CFB0EF7B0EB2A +:103DB000074072EB17420CFB08F734BFA2EB074237 +:103DC000B2EB074261EB17414FEA0C444FEA91070F +:103DD00006FB07FC4FEA1C4C0CFB0BF7B0EBC74093 +:103DE00072EB573203FB0CF734BFA2EBC742B2EBC6 +:103DF000C74261EB57310CFB0EF7B0EBC70072EB1B +:103E000057720CFB08F734BFA2EBC702B2EBC70234 +:103E100061EB5771039F4FEA816141EA921104EB14 +:103E2000CC044FEAD1374FEA826206FB07FC42EA34 +:103E300090124FEA80604FEA1C4C0CFB0BF7D21B30 +:103E400003FB0CF761EB07010CFB0EF7B0EB07402F +:103E500072EB17420CFB08F734BFA2EB0742B2EB40 +:103E6000074261EB17414FEA8C554FEA910704EB8B +:103E70009C2406FB07FC4FEA1C4C0CFB0BF7B0EB39 +:103E8000C74072EB573203FB0CF734BFA2EBC742BB +:103E9000B2EBC74261EB57310CFB0EF7B0EBC7003A +:103EA00072EB57720CFB08F734BFA2EBC702B2EB00 +:103EB000C70261EB577115EB4C254FEA816141EA6E +:103EC00092114FEA82624FEAD13742EA901206FB22 +:103ED00007FC44F100044FEA80604FEA1C4C0CFBE5 +:103EE0000BF7D21B03FB0CF761EB07010CFB0EF782 +:103EF000B0EB074072EB17420CFB08F734BFA2EBA4 +:103F00000742B2EB074261EB174115EB1C154FEA74 +:103F1000813141EA92414FEA823242EA90424FEACD +:103F200080304FEA0C7644F1000448EA03434EEA3D +:103F30000B484FF0000EB2EB080C71EB030724BFE7 +:103F4000624639464EEB0E0E4FF0000B0018524100 +:103F500049414BEB0B0BB2EB080C71EB03077BF108 +:103F6000000B24BF624639464EEB0E0E4FF0000B9D +:103F70000018524149414BEB0B0BB2EB080C71EBB3 +:103F800003077BF1000B24BF624639464EEB0E0E51 +:103F900051EA020718BF46F0010616EB0E7655F1FE +:103FA000000254F1000103D5BDE88901BDE8008895 +:103FB000BDE88901BDE80048B619524141EB010155 +:103FC000A3F10103704780807F7E7D7C7B7A7978C6 +:103FD000777676757473727171706F6E6E6D6C6CCE +:103FE0006B6A6A6968686766666564646363626170 +:103FF0006160605F5F5E5E5D5D5C5C5B5B5A5A59F1 +:10400000595858575756565555555454535352525C +:104010005251515050504F4F4F4E4E4D4D4D4C4CB4 +:104020004C4B4B4B4A4A4A494949484848474747FD +:10403000474646464545454444444443434343423A +:10404000424242414141002B26D4770021D01CB589 +:104050004FEA370703B44FF010004FF010014FF054 +:1040600000000FBCBDE810400BF1010BBBF1010FCC +:1040700008BF5FEA170722BF12F1010211F1010127 +:104080004FF0004143F1000300F0004043EA00001C +:104090007047F9D35708DAE746EA064613F1400FAE +:1040A0004FEA16461FDD13F1200FDFBF16430A4605 +:1040B000002120335B42C8D0C3F1200746EA064600 +:1040C00002FA07F74FEA164646EA0706C3F1200749 +:1040D00022FA03F201FA07F721FA03F14FF0000385 +:1040E00042EA0702B1E746EA020646EA06464FEA16 +:1040F000164646EA0106BCBF46EA0646360C4FF0B5 +:1041000000034FF000024FF000019EE72DE9C04888 +:10411000934630B491E8380007C831EA400C48BFF4 +:1041200034EA430C03D5FFF7F2FDFFF78CFFF0BC38 +:10413000BDE800882DE9C048934630B491E83800C6 +:1041400007C810F0804F08BF13F0804F03D100F074 +:1041500005F8FFF778FFF0BCBDE8008820F07F4746 +:1041600080EA030023F07F4C07EB0C03A3F57C539C +:1041700000F00040A3F1FE0392F0000F00F0B380C6 +:1041800095F0000F00F077802DE901494FEA1140CA +:104190004FEA144621EA004800FB06FC24EA0647E1 +:1041A00008FB06F607FB08F800FB07F718EB0648C4 +:1041B0004CEB164C4FEA124B18EB07484FEA1546EA +:1041C0004CEB174022EA0B4E0BFB06FC25EA064798 +:1041D0000EFB06F607FB0EFE0BFB07F71EEB064E6B +:1041E0004CEB164C4FF000061EEB074E4CEB174BFA +:1041F00018EB0B0840F1000018EB0E0B58EB000811 +:1042000040F100008F1A4FF000013CBFC943661B0C +:1042100014BFB5EB040C00213CBFC943F61B4FEAA9 +:1042200017444EEA8E0E27EA04454FEA1C4704FB6A +:1042300007622CEA074C05FB07F70CFB05F604FBAD +:104240000CFC16EB074642EB174216EB0C4642EB12 +:104250001C421BEB060658EB0202414146EA9E0651 +:1042600001D5BDE80189B619524141EB0101A3F125 +:104270000103BDE801894FEA14454FEA114724EADA +:10428000054621EA074C05FB07F406FB07F70CFB84 +:1042900006F105FB0CFC11EB074144EB17444FEA18 +:1042A000124711EB0C4144EB1C4422EA074C05FB7E +:1042B00007F206FB07F70CFB06F605FB0CFC16EBFA +:1042C000074642EB174216EB0C4642EB1C456A18B8 +:1042D00054F1000148BF7047B619524141EB01014A +:1042E000A3F10103704795F0000F37D04FEA114258 +:1042F0004FEA144721EA024624EA074C02FB07F181 +:1043000006FB07F70CFB06F402FB0CFC14EB07445E +:1043100041EB17414FEA154714EB0C4441EB1C41AC +:1043200025EA074C02FB07F506FB07F70CFB06F630 +:1043300002FB0CFC16EB074645EB174516EB0C464B +:1043400045EB1C42121951F1000148BF7047B619E4 +:10435000524141EB0101A3F1010370474FEA1445BB +:104360004FEA114724EA054621EA074C05FB07F10D +:1043700006FB07F70CFB06F24FF0000605FB0CFCF2 +:1043800012EB074241EB174112EB0C4251EB1C417F +:1043900048BF7047921841EB0101A3F10103704738 +:1043A000490050EAC12018BF04204A0D18BF40F050 +:1043B000010040F2FF72B2EB515F08BF40F0020013 +:1043C000012808BF0520704730380A2801D2012093 +:1043D000704700207047000010B500290AD0087807 +:1043E000002807D005487844FFF7D8FB002801D003 +:1043F000002010BD0248784410BD0000820F00006C +:104400007A0F000021F00042A2F16052B2F5801F45 +:1044100001F0004328BFD2F17F6C0BD95FEA001C8A +:1044200043EAC20242EB507018BF704728BF20F029 +:1044300001007047B2F5801FBCBF184670474FEAB5 +:10444000410C1CF5001F02D2084600F0AABA70B554 +:1044500000F0CAF800000089FFF7F6BF4FF00040F7 +:10446000A0F58000704710F0004248BF4042B0FA0B +:1044700080F310FA03F10AD0C3F11D0303F5806342 +:104480004FEA415002EB035202EBD12170474FF04B +:1044900000007047DFF848C170B51CEA111E1EBF4E +:1044A0001CEA13159EEA0C0F95EA0C0F00F06F80C2 +:1044B00081EA030423EA4C134EEAD47E21EA4C112C +:1044C00041F4801143F48013AE44A1FB024CA0FBE5 +:1044D0000365AEF17F7E361955EB0C05A1FB034C4D +:1044E0004CF10003A0FB021C16EB0C06654153F1D6 +:1044F0000003094218BF46F0010613F4007F0BD1F8 +:104500004FEA03314FEA0530340341EA155140EADE +:1045100016506FF003020AE04FEAC3214FEAC520AC +:10452000F40241EA555140EA56506FF0020202EBA4 +:104530002E4201EB025585EACE710AD05FEA440CA7 +:1045400018BF24F0004450F1000041F1000120EABE +:10455000D47040F2FE7C624500D270BDA84214BF08 +:104560004FF080444FF04044002E08BF0024BEF1BD +:10457000806FA8BFA1F1C041BDE8704080F2828089 +:104580004FF0000001F1C04101F0004170479EEA88 +:104590000C0F0CEA131518BF95EA0C0F06D04FF05C +:1045A000000081EA030E0EF0004170BD00F01CF81F +:1045B0008900013E00F007B800F009B84FEA430C4B +:1045C0005FEA5C5C08D081EA030100F05BB84FEA67 +:1045D000410C5FEA5C5CF6D14FF000000149704786 +:1045E0000000FF070000F87F0EF1020E2EF0030E10 +:1045F0005EF8046B364205D4012A43EB030515F53A +:10460000001F12D8012841EB010C1CF5001F0CD82B +:104610000ED14FEAD17C15F5001F0CEB4C0C0CF1C0 +:10462000020C08BF4CEBD37C04E04FF0080C01E017 +:104630004FEAD37C0CEB4C0526FA05F606F007068C +:10464000B6F1040C06D20EEB860CBDE870404CF0BF +:10465000010C6047DFE80CF0090B02024FF000414B +:104660004FF00000A1F5002170BD19461046012849 +:1046700051EB010418BFD4F5001484BF002001F0F1 +:10468000004170BD0808A0F500114FEA31017047E4 +:1046900043004FEAD30C4FEA3C0C43401FBF400796 +:1046A0000CF1605113F0FE4F70471CF0006F03D106 +:1046B00000200CF0004170470CF0004343EA5070BA +:1046C00010B540EACC0000F026F900BF00000092CF +:1046D0004FEA0001FFF7D6BF4FF000414FF0000056 +:1046E000A1F500217047000090EA010F48BF81F05A +:1046F000004100F16281421A3CBF801A89184FEADA +:10470000D0524FF07F4C1CEA410FA2EBD15318BF9F +:104710009CEA026F00F03B804FF0004C4CEA002016 +:104720004CEA012121FA03FC10EB0C0C1ED202F121 +:10473000FF325FEA1C2040EBC25038BF70471CF0CC +:104740007F0F4FEA400C18BFBCF17F4F38BF704756 +:10475000C3F12003994008BF20F00100BCF17F4F56 +:1047600038BF7047A0F1C04000F01BB94FEA3C00D1 +:10477000000A40EBC25028BF1CF0FF0F4FEA400C6C +:10478000E6D018BFBCF17F4F38BF7047EAE79CEA1C +:10479000026F05D010EA5C0F08BF00F000407047C0 +:1047A00010B500F0B8F800BF64FBBE3E41000B0E30 +:1047B000D3F19E0208D950F400034FEA032323FAF1 +:1047C00002F048BF4042704710B500F0A4F800BFA7 +:1047D00049922480002070476FF0004282EA200056 +:1047E0007047000010F0004148BF4042B0FA80F32B +:1047F00010FA03F2C3F19D030BD051EAC35101EB50 +:104800001220530638BF704700F1010008BF20F0A6 +:10481000010070474FF47F0C1CEAD0121EBF1CEA47 +:10482000D11392EA0C0F93EA0C0F00F0478090EA44 +:10483000010F48BF42F480724FF0004C4CEA002058 +:104840004CEA012102EB0302A0FB0113A2F50002D6 +:10485000002918BF43F001035B0028BF4FEA330370 +:1048600042EB22425FEA132C4CEBC2502EBFBCEB52 +:10487000436FB2F57C0F70474FEA036CBCF1004FF9 +:1048800008BF20F00100B2F57C0F38BF70470BD590 +:1048900082F0FF0212F5803FC8BF704700F1C040B0 +:1048A000D8BF00F00040704700F5000C5FEA4C0CE8 +:1048B00048BF7047B0F1C04000F073B890EA010FF4 +:1048C0000CEAD11348BF42F48072624538BF634599 +:1048D00004D280EA010000F00040704710B500F0FB +:1048E0001AF800BF8900013E00F007B800F009B8CF +:1048F0005FEA410C5FEA1C6C08D080EA010000F01E +:1049000050B85FEA400C5FEA1C6CF6D14FF00040F3 +:10491000A0F5800070470EF1020E2EF0030E5EF837 +:10492000044B244204D44FEA4102B2F17F4F11D824 +:104930004FEA4003B3F17F4F0CD80ED14FEAD07C41 +:10494000B2F17F4F0CEB4C0C0CF1020C08BF4CEB9E +:10495000D17C04E04FF0080C01E04FEAD17C0CEB75 +:104960004C0324FA03F404F00704B4F1040C06D257 +:104970000EEB840CBDE810404CF0010C6047DFE802 +:104980000CF0070802024FF00040A0F5800010BDB7 +:104990000846420018BFD2F1807288BF00F0004084 +:1049A00010BDFF2141EAD050C005704790EA010FC9 +:1049B00048BF81F000413FF59EAE421A04D882F014 +:1049C0000042A0EB020011444FEAD0524FF07F4C5E +:1049D0001CEA410FA2EBD15318BF9CEA026F4AD0E8 +:1049E0004FF0004C4CEA00204CEA012121FA03FC74 +:1049F000B0EB0C0C0FD412F0FE0F36D05FEA4C0077 +:104A00001DD5001240EBC25038BF70471CF03F0F5D +:104A100018BF70470BE0A2F101025FEA1C2040EBD7 +:104A2000C25038BF70471CF07F0F18BF7047C3F1EA +:104A30002003994014BF401E20F0010070478008F9 +:104A40004FEA122308BF7047B0FA80FCA2EB0C02B9 +:104A5000CCF1280C60FA0CF093EA122F04BF00EBA3 +:104A6000C25070474FEAC3707047130A5FEADC1008 +:104A700008BF7047F6E79CEA026F04D010EA5C0FAB +:104A800008BF0020704710B5FFF745FF40DFF63E36 +:104A900081F000407047FEF703BE000000000000F8 +:104AA0000000002F000000000700070000147F1422 +:104AB0007F1400242A7F2A12006264081323003620 +:104AC0004955225000000503000000001C2241004F +:104AD000000041221C000014083E08140008083E93 +:104AE0000808000000A0600000080808080800008E +:104AF00060600000002010080402003E5149453E5D +:104B00000000427F4000004261514946002141457A +:104B10004B31001814127F10002745454539003CE1 +:104B20004A494930000171090503003649494936AF +:104B300000064949291E000036360000000056369E +:104B40000000000814224100001414141414000082 +:104B50004122140800020151090600324959513E10 +:104B6000007C1211127C007F49494936003E4141C8 +:104B70004122007F4141221C007F49494941007F79 +:104B800009090901003E4149497A007F0808087F68 +:104B90000000417F4100002040413F01007F081498 +:104BA0002241007F40404040007F020C027F007F96 +:104BB0000408107F003E4141413E007F090909067B +:104BC000003E4151215E007F0919294600464949AE +:104BD00049310001017F0101003F4040403F001F7B +:104BE0002040201F003F4038403F006314081463FA +:104BF00000070870080700615149454300007F41E4 +:104C0000410000552A552A55000041417F0000040B +:104C10000201020400404040404000000102040044 +:104C2000002054545478007F4844443800384444A9 +:104C3000442000384444487F003854545418000835 +:104C40007E0901020018A4A4A47C007F0804047853 +:104C50000000447D4000004080847D00007F1028DB +:104C600044000000417F4000007C04180478007C70 +:104C70000804047800384444443800FC24242418F0 +:104C80000018242418FC007C08040408004854542C +:104C9000542000043F444020003C4040207C001C45 +:104CA0002040201C003C4030403C00442810284458 +:104CB000001CA0A0A07C004464544C4414141414A0 +:104CC00014140000000000000000000000000000BC +:104CD0000000000000F80000000000000033300079 +:104CE000000000100C06100C060000000000000080 +:104CF000000040C07840C0784000043F04043F04F6 +:104D00000400007088FC08300000001820FF211EFD +:104D10000000F008F000E018000000211C031E2134 +:104D20001E0000F00888700000001E2123241927AF +:104D3000211010160E00000000000000000000000E +:104D40000000000000E01804020000000007182026 +:104D5000400000020418E000000000402018070096 +:104D60000000404080F0804040000202010F01023C +:104D70000200000000F0000000000101011F01011D +:104D80000100000000000000000080B07000000082 +:104D9000000000000000000000000001010101010E +:104DA00001010000000000000000003030000000A1 +:104DB0000000000000008060180400601806010078 +:104DC000000000E010080810E000000F1020201084 +:104DD0000F00001010F8000000000020203F2020ED +:104DE0000000007008080888700000302824222184 +:104DF000300000300888884830000018202020113A +:104E00000E000000C02010F8000000070424243F1A +:104E1000240000F8088888080800001921202011C3 +:104E20000E0000E0108888180000000F11202011EB +:104E30000E0000380808C83808000000003F0000D5 +:104E400000000070880808887000001C22212122C0 +:104E50001C0000E010080810E000000031222211C0 +:104E60000F00000000C0C000000000000030300053 +:104E700000000000008000000000000080600000D2 +:104E8000000000008040201008000001020408100B +:104E9000200040404040404040000404040404041A +:104EA00004000008102040800000002010080402C8 +:104EB0000100007048080808F000000000303601CA +:104EC0000000C030C828E810E00007182724231489 +:104ED0000B000000C038E0000000203C2302022745 +:104EE000382008F8888888700000203F2020201192 +:104EF0000E00C030080808083800071820202010CD +:104F0000080008F808080810E000203F20202010C2 +:104F10000F0008F88888E8081000203F2020232090 +:104F2000180008F88888E8081000203F20000300D7 +:104F30000000C03008080838000007182020221E92 +:104F4000020008F808000008F808203F21010121AC +:104F50003F20000808F8080800000020203F20201B +:104F6000000000000808F8080800C08080807F006A +:104F7000000008F888C028180800203F20012638C3 +:104F8000200008F8080000000000203F202020201A +:104F9000300008F8F800F8F80800203F003F003F14 +:104FA000200008F830C00008F808203F200007184B +:104FB0003F00E01008080810E0000F10202020102B +:104FC0000F0008F808080808F000203F210101013F +:104FD0000000E01008080810E0000F1824243850E2 +:104FE0004F0008F8888888887000203F2000030C54 +:104FF000302000708808080838000038202121225D +:105000001C00180808F8080818000000203F2000BD +:10501000000008F808000008F808001F20202020E1 +:105020001F000878880000C83808000007380E0103 +:105030000000F80800F80008F800033C0700073CEF +:105040000300081868808068180820302C03032C9F +:1050500030200838C800C83808000000203F200071 +:10506000000010080808C838080020382621202031 +:105070001800000000FE020202000000007F404015 +:105080004000000C30C000000000000000010638A5 +:10509000C00000020202FE000000004040407F000D +:1050A00000000000040202020400000000000000F2 +:1050B00000000000000000000000808080808080F0 +:1050C00080800002020400000000000000000000D8 +:1050D000000000008080808000000019242222222D +:1050E0003F2008F8008080000000003F11202011C0 +:1050F0000E000000008080800000000E11202020A3 +:105100001100000000808088F800000E112020109F +:105110003F200000808080800000001F2222222289 +:105120001300008080F0888888180020203F20200D +:1051300000000000808080808000006B9494949335 +:10514000600008F8008080800000203F21000020DF +:105150003F2000809898000000000020203F202081 +:105160000000000000809898000000C08080807FD0 +:10517000000008F8000080808000203F24022D30CD +:105180002000000808F8000000000020203F202038 +:1051900000008080808080808000203F20003F20B1 +:1051A000003F8080008080800000203F21000020A0 +:1051B0003F200000808080800000001F20202020F1 +:1051C0001F00808000808000000080FFA12020114F +:1051D0000E000000008080808000000E112020A0C2 +:1051E000FF80808080008080800020203F21200080 +:1051F000010000008080808080000033242424246B +:105200001900008080E0808000000000001F202046 +:1052100000008080000000808000001F20202010FF +:105220003F20808080000080808000010E300806D2 +:10523000010080800080008080800F300C030C30E3 +:105240000F0000808000808080000020312E0E3111 +:105250002000808080000080808080818E70180611 +:10526000010000808080808080000021302C22217D +:10527000300000000000807C020200000000003FBF +:10528000404000000000FF00000000000000FF00A0 +:1052900000000002027C800000000040403F00004F +:1052A00000000006010102020404000000000000EA +:1052B0000000000002400000000000A0000000000C +:1052C00005400000000000C8000000000C40000085 +:1052D0000000409C00000000194000000020BCBEFF +:1052E0000000000034400000BFC91B8E0000000415 +:1052F000B5400000504BCFD06607E2CF0100000060 +:105300006C4100003E8251AADFEEA734010000008C +:10531000D9420000DCB5A0E23A301F97FFFFFFFF43 +:10532000B4450000FD25A0C8E9A3C14FFFFFFFFF62 +:10533000FF3F00000000008000000000FF3F000071 +:1053400000000080000000008453000800000020DE +:105350009C0200006C010008885400089C02002098 +:10536000A4060000C80100081C0000004300000063 +:10537000F8FFFFFF0C0000000E0000000F0000000F +:105380002E0000001184A24A0468090102030406E9 +:105390000708090C6910051402040608154040426C +:1053A000CC000B1440A09E8282829EA02020000D83 +:1053B000113F908840432C1028464180801C100CDF +:1053C00044012B45C606041144140C3809804020C2 +:1053D0001E2040407F20031240403809088848289A +:1053E000180FE8080109111F2B0809013AFF0609E7 +:1053F000112139C0080A1204F49494FF9494F4041F +:10540000E1080D10201F20484442415F41424448BA +:105410008029764C88780F7F0911601E201048463D +:1054200041012A7F050911C029350B18C838402EC3 +:1054300008040201FF3C19010213FF080E12C8B84C +:105440008FE888C820900C030C902060161808FF85 +:1054500004041A3FC204144040702809FC24242488 +:10546000FC2526240802110400101140308F80848E +:105470004C55252525554C80808000092C9A99197A +:085480003FCDCCCC3D022B46D0 +:0400000508000131BD +:00000001FF diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/Project.htm b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/Project.htm new file mode 100644 index 0000000..962a4f1 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/Project.htm @@ -0,0 +1,2089 @@ + + +Static Call Graph - [..\Output\Project.axf] +
+

Static Call Graph for image ..\Output\Project.axf


+

#<CALLGRAPH># ARM Linker, 5060300: Last Updated: Thu May 25 09:19:38 2023 +

+

Maximum Stack Usage = 320 bytes + Unknown(Functions without stacksize, Cycles, Untraceable Function Pointers)

+Call chain for Maximum Stack Depth:

+_printf_f ⇒ _printf_fp_dec ⇒ _printf_fp_dec_real ⇒ _fp_digits ⇒ _btod_etento ⇒ _btod_emul ⇒ _e2e +

+

+Functions with no stack information +

+ +

+

+Mutually Recursive functions +

  • SysTick_Handler   ⇒   SysTick_Handler
    +
  • ADC1_2_IRQHandler   ⇒   ADC1_2_IRQHandler
    + +

    +

    +Function Pointers +

      +
    • ADC1_2_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • ADC3_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • BusFault_Handler from stm32f10x_it.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • CAN1_RX1_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • CAN1_SCE_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • DMA1_Channel1_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • DMA1_Channel2_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • DMA1_Channel3_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • DMA1_Channel4_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • DMA1_Channel5_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • DMA1_Channel6_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • DMA1_Channel7_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • DMA2_Channel1_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • DMA2_Channel2_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • DMA2_Channel3_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • DMA2_Channel4_5_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • DebugMon_Handler from stm32f10x_it.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • EXTI0_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • EXTI15_10_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • EXTI1_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • EXTI2_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • EXTI3_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • EXTI4_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • EXTI9_5_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • FLASH_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • FSMC_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • HardFault_Handler from stm32f10x_it.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • I2C1_ER_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • I2C1_EV_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • I2C2_ER_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • I2C2_EV_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • MemManage_Handler from stm32f10x_it.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • NMI_Handler from stm32f10x_it.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • PVD_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • PendSV_Handler from stm32f10x_it.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • RCC_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • RTCAlarm_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • RTC_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • Reset_Handler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • SDIO_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • SPI1_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • SPI2_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • SPI3_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • SVC_Handler from stm32f10x_it.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • SysTick_Handler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • SystemInit from system_stm32f10x.o(.text) referenced from startup_stm32f10x_hd.o(.text) +
    • TAMPER_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • TIM1_BRK_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • TIM1_CC_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • TIM1_TRG_COM_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • TIM1_UP_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • TIM2_IRQHandler from bsp_timer.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • TIM3_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • TIM4_IRQHandler from bsp_timer.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • TIM5_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • TIM6_IRQHandler from car.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • TIM7_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • TIM8_BRK_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • TIM8_CC_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • TIM8_TRG_COM_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • TIM8_UP_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • UART4_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • UART5_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • USART1_IRQHandler from bsp_usart.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • USART2_IRQHandler from bluetooth.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • USART3_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • USBWakeUp_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • USB_HP_CAN1_TX_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • USB_LP_CAN1_RX0_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • UsageFault_Handler from stm32f10x_it.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • WWDG_IRQHandler from startup_stm32f10x_hd.o(.text) referenced from startup_stm32f10x_hd.o(RESET) +
    • __main from __main.o(!!!main) referenced from startup_stm32f10x_hd.o(.text) +
    • _printf_input_char from _printf_char_common.o(.text) referenced from _printf_char_common.o(.text) +
    • _sputc from _sputc.o(.text) referenced from noretval__2sprintf.o(.text) +
    +

    +

    +Global Symbols +

    +

    __main (Thumb, 8 bytes, Stack size 0 bytes, __main.o(!!!main)) +

    [Calls]

    • >>   __rt_entry +
    • >>   __scatterload +
    + +

    __scatterload (Thumb, 0 bytes, Stack size unknown bytes, __scatter.o(!!!scatter)) +

    [Called By]

    • >>   __main +
    + +

    __scatterload_rt2 (Thumb, 44 bytes, Stack size unknown bytes, __scatter.o(!!!scatter), UNUSED) +

    [Calls]

    • >>   __rt_entry +
    + +

    __scatterload_rt2_thumb_only (Thumb, 0 bytes, Stack size unknown bytes, __scatter.o(!!!scatter), UNUSED) + +

    __scatterload_null (Thumb, 0 bytes, Stack size unknown bytes, __scatter.o(!!!scatter), UNUSED) + +

    __decompress (Thumb, 90 bytes, Stack size unknown bytes, __dczerorl2.o(!!dczerorl2), UNUSED) + +

    __decompress1 (Thumb, 0 bytes, Stack size unknown bytes, __dczerorl2.o(!!dczerorl2), UNUSED) + +

    __scatterload_zeroinit (Thumb, 28 bytes, Stack size unknown bytes, __scatter_zi.o(!!handler_zi), UNUSED) + +

    _printf_f (Thumb, 0 bytes, Stack size unknown bytes, _printf_f.o(.ARM.Collect$$_printf_percent$$00000003)) +

    [Stack]

    • Max Depth = 320 + Unknown Stack Size +
    • Call Chain = _printf_f ⇒ _printf_fp_dec ⇒ _printf_fp_dec_real ⇒ _fp_digits ⇒ _btod_etento ⇒ _btod_emul ⇒ _e2e +
    +
    [Calls]
    • >>   _printf_fp_dec +
    + +

    _printf_percent (Thumb, 0 bytes, Stack size unknown bytes, _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000)) +

    [Called By]

    • >>   __printf +
    + +

    _printf_percent_end (Thumb, 0 bytes, Stack size unknown bytes, _printf_percent_end.o(.ARM.Collect$$_printf_percent$$00000017)) + +

    __rt_lib_init (Thumb, 0 bytes, Stack size unknown bytes, libinit.o(.ARM.Collect$$libinit$$00000000)) +

    [Called By]

    • >>   __rt_entry_li +
    + +

    __rt_lib_init_fp_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000002)) + +

    __rt_lib_init_heap_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000000A)) + +

    __rt_lib_init_lc_common (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000000F)) +

    [Calls]

    • >>   __rt_locale +
    + +

    __rt_lib_init_preinit_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000004)) + +

    __rt_lib_init_rand_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000000E)) + +

    __rt_lib_init_user_alloc_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000000C)) + +

    __rt_lib_init_lc_collate_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000011)) + +

    __rt_lib_init_lc_ctype_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000013)) + +

    __rt_lib_init_lc_monetary_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000015)) + +

    __rt_lib_init_lc_numeric_2 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000016)) +

    [Stack]

    • Max Depth = 8 + Unknown Stack Size +
    • Call Chain = __rt_lib_init_lc_numeric_2 ⇒ _get_lc_numeric +
    +
    [Calls]
    • >>   _get_lc_numeric +
    + +

    __rt_lib_init_alloca_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000002E)) + +

    __rt_lib_init_argv_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000002C)) + +

    __rt_lib_init_atexit_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000001B)) + +

    __rt_lib_init_clock_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000021)) + +

    __rt_lib_init_cpp_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000032)) + +

    __rt_lib_init_exceptions_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000030)) + +

    __rt_lib_init_fp_trap_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000001F)) + +

    __rt_lib_init_getenv_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000023)) + +

    __rt_lib_init_lc_numeric_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000017)) + +

    __rt_lib_init_lc_time_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000019)) + +

    __rt_lib_init_return (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000033)) + +

    __rt_lib_init_signal_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$0000001D)) + +

    __rt_lib_init_stdio_1 (Thumb, 0 bytes, Stack size unknown bytes, libinit2.o(.ARM.Collect$$libinit$$00000025)) + +

    __rt_lib_shutdown (Thumb, 0 bytes, Stack size unknown bytes, libshutdown.o(.ARM.Collect$$libshutdown$$00000000)) +

    [Called By]

    • >>   __rt_exit_ls +
    + +

    __rt_lib_shutdown_cpp_1 (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$00000002)) + +

    __rt_lib_shutdown_fp_trap_1 (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$00000007)) + +

    __rt_lib_shutdown_heap_1 (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$0000000F)) + +

    __rt_lib_shutdown_return (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$00000010)) + +

    __rt_lib_shutdown_signal_1 (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$0000000A)) + +

    __rt_lib_shutdown_stdio_1 (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$00000004)) + +

    __rt_lib_shutdown_user_alloc_1 (Thumb, 0 bytes, Stack size unknown bytes, libshutdown2.o(.ARM.Collect$$libshutdown$$0000000C)) + +

    __rt_entry (Thumb, 0 bytes, Stack size unknown bytes, __rtentry.o(.ARM.Collect$$rtentry$$00000000)) +

    [Called By]

    • >>   __main +
    • >>   __scatterload_rt2 +
    + +

    __rt_entry_presh_1 (Thumb, 0 bytes, Stack size unknown bytes, __rtentry2.o(.ARM.Collect$$rtentry$$00000002)) + +

    __rt_entry_sh (Thumb, 0 bytes, Stack size unknown bytes, __rtentry4.o(.ARM.Collect$$rtentry$$00000004)) +

    [Stack]

    • Max Depth = 8 + Unknown Stack Size +
    • Call Chain = __rt_entry_sh ⇒ __user_setup_stackheap +
    +
    [Calls]
    • >>   __user_setup_stackheap +
    + +

    __rt_entry_li (Thumb, 0 bytes, Stack size unknown bytes, __rtentry2.o(.ARM.Collect$$rtentry$$0000000A)) +

    [Calls]

    • >>   __rt_lib_init +
    + +

    __rt_entry_postsh_1 (Thumb, 0 bytes, Stack size unknown bytes, __rtentry2.o(.ARM.Collect$$rtentry$$00000009)) + +

    __rt_entry_main (Thumb, 0 bytes, Stack size unknown bytes, __rtentry2.o(.ARM.Collect$$rtentry$$0000000D)) +

    [Stack]

    • Max Depth = 128 + Unknown Stack Size +
    • Call Chain = __rt_entry_main ⇒ main ⇒ System_Init ⇒ OLED_ShowString ⇒ OLED_ShowChar ⇒ OLED_Set_Pos ⇒ OLED_WR_Byte ⇒ Write_IIC_Data ⇒ IIC_Send_Byte +
    +
    [Calls]
    • >>   exit +
    • >>   main +
    + +

    __rt_entry_postli_1 (Thumb, 0 bytes, Stack size unknown bytes, __rtentry2.o(.ARM.Collect$$rtentry$$0000000C)) + +

    __rt_exit (Thumb, 0 bytes, Stack size unknown bytes, rtexit.o(.ARM.Collect$$rtexit$$00000000)) +

    [Called By]

    • >>   exit +
    + +

    __rt_exit_ls (Thumb, 0 bytes, Stack size unknown bytes, rtexit2.o(.ARM.Collect$$rtexit$$00000003)) +

    [Calls]

    • >>   __rt_lib_shutdown +
    + +

    __rt_exit_prels_1 (Thumb, 0 bytes, Stack size unknown bytes, rtexit2.o(.ARM.Collect$$rtexit$$00000002)) + +

    __rt_exit_exit (Thumb, 0 bytes, Stack size unknown bytes, rtexit2.o(.ARM.Collect$$rtexit$$00000004)) +

    [Calls]

    • >>   _sys_exit +
    + +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

    SysTick_Handler (Thumb, 2 bytes, Stack size 0 bytes, startup_stm32f10x_hd.o(.text)) +

    [Calls]

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

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

    [Calls]

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

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

    __user_initial_stackheap (Thumb, 0 bytes, Stack size unknown bytes, startup_stm32f10x_hd.o(.text)) +

    [Called By]

    • >>   __user_setup_stackheap +
    + +

    SystemInit (Thumb, 78 bytes, Stack size 8 bytes, system_stm32f10x.o(.text)) +

    [Stack]

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

    SystemCoreClockUpdate (Thumb, 142 bytes, Stack size 8 bytes, system_stm32f10x.o(.text), UNUSED) + +

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

    [Called By]

    • >>   Bluetooth_Init +
    • >>   Timer6_Init +
    + +

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

    [Stack]

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

    NVIC_SetVectorTable (Thumb, 14 bytes, Stack size 0 bytes, misc.o(.text), UNUSED) + +

    NVIC_SystemLPConfig (Thumb, 34 bytes, Stack size 0 bytes, misc.o(.text), UNUSED) + +

    SysTick_CLKSourceConfig (Thumb, 40 bytes, Stack size 0 bytes, misc.o(.text)) +

    [Called By]

    • >>   Delay_Init +
    + +

    GPIO_DeInit (Thumb, 172 bytes, Stack size 8 bytes, stm32f10x_gpio.o(.text), UNUSED) +

    [Calls]

    • >>   RCC_APB2PeriphResetCmd +
    + +

    GPIO_AFIODeInit (Thumb, 20 bytes, Stack size 8 bytes, stm32f10x_gpio.o(.text), UNUSED) +

    [Calls]

    • >>   RCC_APB2PeriphResetCmd +
    + +

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

    [Stack]

    • Max Depth = 24
    • Call Chain = GPIO_Init +
    +
    [Called By]
    • >>   Bluetooth_Init +
    • >>   USART1_Init +
    • >>   MOTO_PWM_Init +
    • >>   MOTO_GPIO_Init +
    • >>   LED_GPIO_Config +
    • >>   IIC_Init +
    • >>   Encoder_Init_TIM4 +
    • >>   Encoder_Init_TIM2 +
    + +

    GPIO_StructInit (Thumb, 16 bytes, Stack size 0 bytes, stm32f10x_gpio.o(.text), UNUSED) + +

    GPIO_ReadInputDataBit (Thumb, 18 bytes, Stack size 0 bytes, stm32f10x_gpio.o(.text)) +

    [Called By]

    • >>   IIC_Wait_Ack +
    • >>   IIC_Read_Byte +
    • >>   LED_Flash +
    + +

    GPIO_ReadInputData (Thumb, 8 bytes, Stack size 0 bytes, stm32f10x_gpio.o(.text), UNUSED) + +

    GPIO_ReadOutputDataBit (Thumb, 18 bytes, Stack size 0 bytes, stm32f10x_gpio.o(.text), UNUSED) + +

    GPIO_ReadOutputData (Thumb, 8 bytes, Stack size 0 bytes, stm32f10x_gpio.o(.text), UNUSED) + +

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

    [Called By]

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

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

    [Called By]

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

    GPIO_WriteBit (Thumb, 10 bytes, Stack size 0 bytes, stm32f10x_gpio.o(.text)) +

    [Called By]

    • >>   LED_Flash +
    + +

    GPIO_Write (Thumb, 4 bytes, Stack size 0 bytes, stm32f10x_gpio.o(.text), UNUSED) + +

    GPIO_PinLockConfig (Thumb, 18 bytes, Stack size 0 bytes, stm32f10x_gpio.o(.text), UNUSED) + +

    GPIO_EventOutputConfig (Thumb, 26 bytes, Stack size 0 bytes, stm32f10x_gpio.o(.text), UNUSED) + +

    GPIO_EventOutputCmd (Thumb, 6 bytes, Stack size 0 bytes, stm32f10x_gpio.o(.text), UNUSED) + +

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

    GPIO_EXTILineConfig (Thumb, 66 bytes, Stack size 12 bytes, stm32f10x_gpio.o(.text), UNUSED) + +

    GPIO_ETH_MediaInterfaceConfig (Thumb, 8 bytes, Stack size 0 bytes, stm32f10x_gpio.o(.text), UNUSED) + +

    RCC_DeInit (Thumb, 64 bytes, Stack size 0 bytes, stm32f10x_rcc.o(.text), UNUSED) + +

    RCC_HSEConfig (Thumb, 70 bytes, Stack size 0 bytes, stm32f10x_rcc.o(.text), UNUSED) + +

    RCC_GetFlagStatus (Thumb, 56 bytes, Stack size 8 bytes, stm32f10x_rcc.o(.text), UNUSED) +

    [Called By]

    • >>   RCC_WaitForHSEStartUp +
    + +

    RCC_WaitForHSEStartUp (Thumb, 56 bytes, Stack size 16 bytes, stm32f10x_rcc.o(.text), UNUSED) +

    [Calls]

    • >>   RCC_GetFlagStatus +
    + +

    RCC_AdjustHSICalibrationValue (Thumb, 20 bytes, Stack size 0 bytes, stm32f10x_rcc.o(.text), UNUSED) + +

    RCC_HSICmd (Thumb, 6 bytes, Stack size 0 bytes, stm32f10x_rcc.o(.text), UNUSED) + +

    RCC_PLLConfig (Thumb, 24 bytes, Stack size 0 bytes, stm32f10x_rcc.o(.text), UNUSED) + +

    RCC_PLLCmd (Thumb, 6 bytes, Stack size 0 bytes, stm32f10x_rcc.o(.text), UNUSED) + +

    RCC_SYSCLKConfig (Thumb, 18 bytes, Stack size 0 bytes, stm32f10x_rcc.o(.text), UNUSED) + +

    RCC_GetSYSCLKSource (Thumb, 10 bytes, Stack size 0 bytes, stm32f10x_rcc.o(.text), UNUSED) + +

    RCC_HCLKConfig (Thumb, 18 bytes, Stack size 0 bytes, stm32f10x_rcc.o(.text), UNUSED) + +

    RCC_PCLK1Config (Thumb, 18 bytes, Stack size 0 bytes, stm32f10x_rcc.o(.text), UNUSED) + +

    RCC_PCLK2Config (Thumb, 20 bytes, Stack size 0 bytes, stm32f10x_rcc.o(.text), UNUSED) + +

    RCC_ITConfig (Thumb, 26 bytes, Stack size 0 bytes, stm32f10x_rcc.o(.text), UNUSED) + +

    RCC_USBCLKConfig (Thumb, 8 bytes, Stack size 0 bytes, stm32f10x_rcc.o(.text), UNUSED) + +

    RCC_ADCCLKConfig (Thumb, 18 bytes, Stack size 0 bytes, stm32f10x_rcc.o(.text), UNUSED) + +

    RCC_LSEConfig (Thumb, 50 bytes, Stack size 0 bytes, stm32f10x_rcc.o(.text), UNUSED) + +

    RCC_LSICmd (Thumb, 6 bytes, Stack size 0 bytes, stm32f10x_rcc.o(.text), UNUSED) + +

    RCC_RTCCLKConfig (Thumb, 12 bytes, Stack size 0 bytes, stm32f10x_rcc.o(.text), UNUSED) + +

    RCC_RTCCLKCmd (Thumb, 8 bytes, Stack size 0 bytes, stm32f10x_rcc.o(.text), UNUSED) + +

    RCC_GetClocksFreq (Thumb, 192 bytes, Stack size 12 bytes, stm32f10x_rcc.o(.text)) +

    [Stack]

    • Max Depth = 12
    • Call Chain = RCC_GetClocksFreq +
    +
    [Called By]
    • >>   USART_Init +
    + +

    RCC_AHBPeriphClockCmd (Thumb, 26 bytes, Stack size 0 bytes, stm32f10x_rcc.o(.text), UNUSED) + +

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

    [Called By]

    • >>   Bluetooth_Init +
    • >>   USART1_Init +
    • >>   MOTO_PWM_Init +
    • >>   MOTO_GPIO_Init +
    • >>   LED_GPIO_Config +
    • >>   IIC_Init +
    • >>   Encoder_Init_TIM4 +
    • >>   Encoder_Init_TIM2 +
    + +

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

    [Called By]

    • >>   Bluetooth_Init +
    • >>   Timer6_Init +
    • >>   MOTO_PWM_Init +
    • >>   Encoder_Init_TIM4 +
    • >>   Encoder_Init_TIM2 +
    + +

    RCC_APB2PeriphResetCmd (Thumb, 26 bytes, Stack size 0 bytes, stm32f10x_rcc.o(.text), UNUSED) +

    [Called By]

    • >>   USART_DeInit +
    • >>   TIM_DeInit +
    • >>   GPIO_AFIODeInit +
    • >>   GPIO_DeInit +
    + +

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

    [Called By]

    • >>   USART_DeInit +
    • >>   TIM_DeInit +
    + +

    RCC_BackupResetCmd (Thumb, 8 bytes, Stack size 0 bytes, stm32f10x_rcc.o(.text), UNUSED) + +

    RCC_ClockSecuritySystemCmd (Thumb, 6 bytes, Stack size 0 bytes, stm32f10x_rcc.o(.text), UNUSED) + +

    RCC_MCOConfig (Thumb, 6 bytes, Stack size 0 bytes, stm32f10x_rcc.o(.text), UNUSED) + +

    RCC_ClearFlag (Thumb, 14 bytes, Stack size 0 bytes, stm32f10x_rcc.o(.text), UNUSED) + +

    RCC_GetITStatus (Thumb, 20 bytes, Stack size 0 bytes, stm32f10x_rcc.o(.text), UNUSED) + +

    RCC_ClearITPendingBit (Thumb, 6 bytes, Stack size 0 bytes, stm32f10x_rcc.o(.text), UNUSED) + +

    TIM_DeInit (Thumb, 424 bytes, Stack size 8 bytes, stm32f10x_tim.o(.text), UNUSED) +

    [Calls]

    • >>   RCC_APB1PeriphResetCmd +
    • >>   RCC_APB2PeriphResetCmd +
    + +

    TIM_TimeBaseInit (Thumb, 122 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text)) +

    [Called By]

    • >>   Timer6_Init +
    • >>   MOTO_PWM_Init +
    • >>   Encoder_Init_TIM4 +
    • >>   Encoder_Init_TIM2 +
    + +

    TIM_OC1Init (Thumb, 132 bytes, Stack size 16 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_OC2Init (Thumb, 154 bytes, Stack size 16 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_OC3Init (Thumb, 150 bytes, Stack size 16 bytes, stm32f10x_tim.o(.text)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = TIM_OC3Init +
    +
    [Called By]
    • >>   MOTO_PWM_Out +
    • >>   MOTO_PWM_Init +
    + +

    TIM_OC4Init (Thumb, 182 bytes, Stack size 16 bytes, stm32f10x_tim.o(.text)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = TIM_OC4Init +
    +
    [Called By]
    • >>   MOTO_PWM_Out +
    • >>   MOTO_PWM_Init +
    + +

    TIM_SetIC4Prescaler (Thumb, 26 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text)) +

    [Called By]

    • >>   TIM_ICInit +
    + +

    TIM_SetIC3Prescaler (Thumb, 18 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text)) +

    [Called By]

    • >>   TIM_ICInit +
    + +

    TIM_SetIC2Prescaler (Thumb, 26 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text)) +

    [Called By]

    • >>   TIM_PWMIConfig +
    • >>   TIM_ICInit +
    + +

    TIM_SetIC1Prescaler (Thumb, 18 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text)) +

    [Called By]

    • >>   TIM_PWMIConfig +
    • >>   TIM_ICInit +
    + +

    TIM_ICInit (Thumb, 150 bytes, Stack size 16 bytes, stm32f10x_tim.o(.text)) +

    [Stack]

    • Max Depth = 36
    • Call Chain = TIM_ICInit ⇒ TI1_Config +
    +
    [Calls]
    • >>   TIM_SetIC1Prescaler +
    • >>   TIM_SetIC2Prescaler +
    • >>   TIM_SetIC3Prescaler +
    • >>   TIM_SetIC4Prescaler +
    • >>   TI1_Config +
    • >>   TI2_Config +
    • >>   TI3_Config +
    • >>   TI4_Config +
    +
    [Called By]
    • >>   Encoder_Init_TIM4 +
    • >>   Encoder_Init_TIM2 +
    + +

    TIM_PWMIConfig (Thumb, 124 bytes, Stack size 24 bytes, stm32f10x_tim.o(.text), UNUSED) +

    [Calls]

    • >>   TIM_SetIC1Prescaler +
    • >>   TIM_SetIC2Prescaler +
    • >>   TI1_Config +
    • >>   TI2_Config +
    + +

    TIM_BDTRConfig (Thumb, 32 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_TimeBaseStructInit (Thumb, 18 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text)) +

    [Called By]

    • >>   Encoder_Init_TIM4 +
    • >>   Encoder_Init_TIM2 +
    + +

    TIM_OCStructInit (Thumb, 20 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_ICStructInit (Thumb, 18 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text)) +

    [Called By]

    • >>   Encoder_Init_TIM4 +
    • >>   Encoder_Init_TIM2 +
    + +

    TIM_BDTRStructInit (Thumb, 40 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_Cmd (Thumb, 24 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text)) +

    [Called By]

    • >>   Timer6_Init +
    • >>   MOTO_PWM_Init +
    • >>   Encoder_Init_TIM4 +
    • >>   Encoder_Init_TIM2 +
    + +

    TIM_CtrlPWMOutputs (Thumb, 30 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_ITConfig (Thumb, 18 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text)) +

    [Called By]

    • >>   Timer6_Init +
    • >>   MOTO_PWM_Init +
    • >>   Encoder_Init_TIM4 +
    • >>   Encoder_Init_TIM2 +
    + +

    TIM_GenerateEvent (Thumb, 4 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_DMAConfig (Thumb, 10 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_DMACmd (Thumb, 18 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_InternalClockConfig (Thumb, 12 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_SelectInputTrigger (Thumb, 18 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) +

    [Called By]

    • >>   TIM_TIxExternalClockConfig +
    • >>   TIM_ITRxExternalClockConfig +
    + +

    TIM_ITRxExternalClockConfig (Thumb, 24 bytes, Stack size 12 bytes, stm32f10x_tim.o(.text), UNUSED) +

    [Calls]

    • >>   TIM_SelectInputTrigger +
    + +

    TIM_TIxExternalClockConfig (Thumb, 62 bytes, Stack size 24 bytes, stm32f10x_tim.o(.text), UNUSED) +

    [Calls]

    • >>   TIM_SelectInputTrigger +
    • >>   TI1_Config +
    • >>   TI2_Config +
    + +

    TIM_ETRConfig (Thumb, 28 bytes, Stack size 12 bytes, stm32f10x_tim.o(.text), UNUSED) +

    [Called By]

    • >>   TIM_ETRClockMode2Config +
    • >>   TIM_ETRClockMode1Config +
    + +

    TIM_ETRClockMode1Config (Thumb, 54 bytes, Stack size 24 bytes, stm32f10x_tim.o(.text), UNUSED) +

    [Calls]

    • >>   TIM_ETRConfig +
    + +

    TIM_ETRClockMode2Config (Thumb, 32 bytes, Stack size 20 bytes, stm32f10x_tim.o(.text), UNUSED) +

    [Calls]

    • >>   TIM_ETRConfig +
    + +

    TIM_PrescalerConfig (Thumb, 6 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_CounterModeConfig (Thumb, 18 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_EncoderInterfaceConfig (Thumb, 66 bytes, Stack size 20 bytes, stm32f10x_tim.o(.text)) +

    [Stack]

    • Max Depth = 20
    • Call Chain = TIM_EncoderInterfaceConfig +
    +
    [Called By]
    • >>   Encoder_Init_TIM4 +
    • >>   Encoder_Init_TIM2 +
    + +

    TIM_ForcedOC1Config (Thumb, 18 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_ForcedOC2Config (Thumb, 26 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_ForcedOC3Config (Thumb, 18 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_ForcedOC4Config (Thumb, 26 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_ARRPreloadConfig (Thumb, 24 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text)) +

    [Called By]

    • >>   MOTO_PWM_Out +
    • >>   MOTO_PWM_Init +
    + +

    TIM_SelectCOM (Thumb, 24 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_SelectCCDMA (Thumb, 24 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_CCPreloadControl (Thumb, 24 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_OC1PreloadConfig (Thumb, 18 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_OC2PreloadConfig (Thumb, 26 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_OC3PreloadConfig (Thumb, 18 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_OC4PreloadConfig (Thumb, 26 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_OC1FastConfig (Thumb, 18 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_OC2FastConfig (Thumb, 26 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_OC3FastConfig (Thumb, 18 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_OC4FastConfig (Thumb, 26 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_ClearOC1Ref (Thumb, 18 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_ClearOC2Ref (Thumb, 24 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_ClearOC3Ref (Thumb, 18 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_ClearOC4Ref (Thumb, 24 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_OC1PolarityConfig (Thumb, 18 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_OC1NPolarityConfig (Thumb, 18 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_OC2PolarityConfig (Thumb, 26 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_OC2NPolarityConfig (Thumb, 26 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_OC3PolarityConfig (Thumb, 26 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text)) +

    [Called By]

    • >>   MOTO_PWM_Out +
    • >>   MOTO_PWM_Init +
    + +

    TIM_OC3NPolarityConfig (Thumb, 26 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_OC4PolarityConfig (Thumb, 26 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text)) +

    [Called By]

    • >>   MOTO_PWM_Out +
    • >>   MOTO_PWM_Init +
    + +

    TIM_CCxCmd (Thumb, 30 bytes, Stack size 12 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_CCxNCmd (Thumb, 30 bytes, Stack size 12 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_SelectOCxM (Thumb, 82 bytes, Stack size 16 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_UpdateDisableConfig (Thumb, 24 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_UpdateRequestConfig (Thumb, 24 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_SelectHallSensor (Thumb, 24 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_SelectOnePulseMode (Thumb, 18 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_SelectOutputTrigger (Thumb, 18 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_SelectSlaveMode (Thumb, 18 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_SelectMasterSlaveMode (Thumb, 18 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_SetCounter (Thumb, 4 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text)) +

    [Called By]

    • >>   Encoder_Init_TIM4 +
    • >>   Encoder_Init_TIM2 +
    + +

    TIM_SetAutoreload (Thumb, 4 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_SetCompare1 (Thumb, 4 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_SetCompare2 (Thumb, 4 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_SetCompare3 (Thumb, 4 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_SetCompare4 (Thumb, 6 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_SetClockDivision (Thumb, 18 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_GetCapture1 (Thumb, 6 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_GetCapture2 (Thumb, 6 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_GetCapture3 (Thumb, 6 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_GetCapture4 (Thumb, 8 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_GetCounter (Thumb, 6 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_GetPrescaler (Thumb, 6 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_GetFlagStatus (Thumb, 18 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text)) +

    [Called By]

    • >>   TIM6_IRQHandler +
    + +

    TIM_ClearFlag (Thumb, 6 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text)) +

    [Called By]

    • >>   Timer6_Init +
    • >>   MOTO_PWM_Init +
    • >>   Encoder_Init_TIM4 +
    • >>   Encoder_Init_TIM2 +
    + +

    TIM_GetITStatus (Thumb, 34 bytes, Stack size 12 bytes, stm32f10x_tim.o(.text), UNUSED) + +

    TIM_ClearITPendingBit (Thumb, 6 bytes, Stack size 0 bytes, stm32f10x_tim.o(.text)) +

    [Called By]

    • >>   TIM6_IRQHandler +
    + +

    USART_DeInit (Thumb, 134 bytes, Stack size 8 bytes, stm32f10x_usart.o(.text), UNUSED) +

    [Calls]

    • >>   RCC_APB1PeriphResetCmd +
    • >>   RCC_APB2PeriphResetCmd +
    + +

    USART_Init (Thumb, 210 bytes, Stack size 56 bytes, stm32f10x_usart.o(.text)) +

    [Stack]

    • Max Depth = 68
    • Call Chain = USART_Init ⇒ RCC_GetClocksFreq +
    +
    [Calls]
    • >>   RCC_GetClocksFreq +
    +
    [Called By]
    • >>   Bluetooth_Init +
    • >>   USART1_Init +
    + +

    USART_StructInit (Thumb, 24 bytes, Stack size 0 bytes, stm32f10x_usart.o(.text), UNUSED) + +

    USART_ClockInit (Thumb, 34 bytes, Stack size 8 bytes, stm32f10x_usart.o(.text), UNUSED) + +

    USART_ClockStructInit (Thumb, 12 bytes, Stack size 0 bytes, stm32f10x_usart.o(.text), UNUSED) + +

    USART_Cmd (Thumb, 24 bytes, Stack size 0 bytes, stm32f10x_usart.o(.text)) +

    [Called By]

    • >>   Bluetooth_Init +
    • >>   USART1_Init +
    + +

    USART_ITConfig (Thumb, 74 bytes, Stack size 20 bytes, stm32f10x_usart.o(.text)) +

    [Stack]

    • Max Depth = 20
    • Call Chain = USART_ITConfig +
    +
    [Called By]
    • >>   Bluetooth_Init +
    • >>   USART1_Init +
    + +

    USART_DMACmd (Thumb, 18 bytes, Stack size 0 bytes, stm32f10x_usart.o(.text), UNUSED) + +

    USART_SetAddress (Thumb, 18 bytes, Stack size 0 bytes, stm32f10x_usart.o(.text), UNUSED) + +

    USART_WakeUpConfig (Thumb, 18 bytes, Stack size 0 bytes, stm32f10x_usart.o(.text), UNUSED) + +

    USART_ReceiverWakeUpCmd (Thumb, 24 bytes, Stack size 0 bytes, stm32f10x_usart.o(.text), UNUSED) + +

    USART_LINBreakDetectLengthConfig (Thumb, 18 bytes, Stack size 0 bytes, stm32f10x_usart.o(.text), UNUSED) + +

    USART_LINCmd (Thumb, 24 bytes, Stack size 0 bytes, stm32f10x_usart.o(.text), UNUSED) + +

    USART_SendData (Thumb, 8 bytes, Stack size 0 bytes, stm32f10x_usart.o(.text)) +

    [Called By]

    • >>   USART2_Send +
    • >>   USART1_Send +
    • >>   fputc +
    + +

    USART_ReceiveData (Thumb, 10 bytes, Stack size 0 bytes, stm32f10x_usart.o(.text)) +

    [Called By]

    • >>   USART2_IRQHandler +
    • >>   USART1_IRQHandler +
    • >>   fgetc +
    + +

    USART_SendBreak (Thumb, 10 bytes, Stack size 0 bytes, stm32f10x_usart.o(.text), UNUSED) + +

    USART_SetGuardTime (Thumb, 16 bytes, Stack size 0 bytes, stm32f10x_usart.o(.text), UNUSED) + +

    USART_SetPrescaler (Thumb, 16 bytes, Stack size 0 bytes, stm32f10x_usart.o(.text), UNUSED) + +

    USART_SmartCardCmd (Thumb, 24 bytes, Stack size 0 bytes, stm32f10x_usart.o(.text), UNUSED) + +

    USART_SmartCardNACKCmd (Thumb, 24 bytes, Stack size 0 bytes, stm32f10x_usart.o(.text), UNUSED) + +

    USART_HalfDuplexCmd (Thumb, 24 bytes, Stack size 0 bytes, stm32f10x_usart.o(.text), UNUSED) + +

    USART_OverSampling8Cmd (Thumb, 22 bytes, Stack size 0 bytes, stm32f10x_usart.o(.text), UNUSED) + +

    USART_OneBitMethodCmd (Thumb, 24 bytes, Stack size 0 bytes, stm32f10x_usart.o(.text), UNUSED) + +

    USART_IrDAConfig (Thumb, 18 bytes, Stack size 0 bytes, stm32f10x_usart.o(.text), UNUSED) + +

    USART_IrDACmd (Thumb, 24 bytes, Stack size 0 bytes, stm32f10x_usart.o(.text), UNUSED) + +

    USART_GetFlagStatus (Thumb, 26 bytes, Stack size 0 bytes, stm32f10x_usart.o(.text)) +

    [Called By]

    • >>   USART2_Send +
    • >>   USART1_Send +
    • >>   fgetc +
    • >>   fputc +
    + +

    USART_ClearFlag (Thumb, 18 bytes, Stack size 0 bytes, stm32f10x_usart.o(.text)) +

    [Called By]

    • >>   USART2_Send +
    • >>   USART1_Send +
    + +

    USART_GetITStatus (Thumb, 84 bytes, Stack size 16 bytes, stm32f10x_usart.o(.text)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = USART_GetITStatus +
    +
    [Called By]
    • >>   USART2_IRQHandler +
    • >>   USART1_IRQHandler +
    + +

    USART_ClearITPendingBit (Thumb, 52 bytes, Stack size 8 bytes, stm32f10x_usart.o(.text)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = USART_ClearITPendingBit +
    +
    [Called By]
    • >>   USART2_IRQHandler +
    • >>   USART2_Send +
    • >>   USART1_IRQHandler +
    • >>   USART1_Send +
    + +

    System_Init (Thumb, 202 bytes, Stack size 16 bytes, bsp_sys.o(.text)) +

    [Stack]

    • Max Depth = 128
    • Call Chain = System_Init ⇒ OLED_ShowString ⇒ OLED_ShowChar ⇒ OLED_Set_Pos ⇒ OLED_WR_Byte ⇒ Write_IIC_Data ⇒ IIC_Send_Byte +
    +
    [Calls]
    • >>   USART1_Init +
    • >>   Timer6_Init +
    • >>   OLED_ShowString +
    • >>   OLED_ShowCHinese +
    • >>   OLED_Init +
    • >>   OLED_Clear +
    • >>   NVIC_Config +
    • >>   MOTO_PWM_Out +
    • >>   MOTO_PWM_Init +
    • >>   MOTO_GPIO_Init +
    • >>   LED_GPIO_Config +
    • >>   IIC_Init +
    • >>   Encoder_Init_TIM4 +
    • >>   Encoder_Init_TIM2 +
    • >>   Delay_ms +
    • >>   Delay_Init +
    +
    [Called By]
    • >>   main +
    + +

    LED_GPIO_Config (Thumb, 40 bytes, Stack size 8 bytes, bsp_gpio.o(.text)) +

    [Stack]

    • Max Depth = 32
    • Call Chain = LED_GPIO_Config ⇒ GPIO_Init +
    +
    [Calls]
    • >>   RCC_APB2PeriphClockCmd +
    • >>   GPIO_Init +
    +
    [Called By]
    • >>   System_Init +
    + +

    LED_Flash (Thumb, 54 bytes, Stack size 16 bytes, bsp_gpio.o(.text)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = LED_Flash +
    +
    [Calls]
    • >>   GPIO_WriteBit +
    • >>   GPIO_ReadInputDataBit +
    +
    [Called By]
    • >>   TIM6_IRQHandler +
    + +

    NVIC_Config (Thumb, 2 bytes, Stack size 0 bytes, bsp_nvic.o(.text)) +

    [Called By]

    • >>   System_Init +
    + +

    USART1_Init (Thumb, 124 bytes, Stack size 32 bytes, bsp_usart.o(.text)) +

    [Stack]

    • Max Depth = 100
    • Call Chain = USART1_Init ⇒ USART_Init ⇒ RCC_GetClocksFreq +
    +
    [Calls]
    • >>   USART_Init +
    • >>   RCC_APB2PeriphClockCmd +
    • >>   GPIO_Init +
    • >>   USART_ITConfig +
    • >>   USART_Cmd +
    +
    [Called By]
    • >>   System_Init +
    + +

    fputc (Thumb, 32 bytes, Stack size 16 bytes, bsp_usart.o(.text), UNUSED) +

    [Calls]

    • >>   USART_GetFlagStatus +
    • >>   USART_SendData +
    + +

    fgetc (Thumb, 26 bytes, Stack size 8 bytes, bsp_usart.o(.text), UNUSED) +

    [Calls]

    • >>   USART_GetFlagStatus +
    • >>   USART_ReceiveData +
    + +

    USART1_Send (Thumb, 74 bytes, Stack size 16 bytes, bsp_usart.o(.text), UNUSED) +

    [Calls]

    • >>   USART_ClearITPendingBit +
    • >>   USART_ClearFlag +
    • >>   USART_GetFlagStatus +
    • >>   USART_SendData +
    + +

    USART1_Receive (Thumb, 16 bytes, Stack size 0 bytes, bsp_usart.o(.text), UNUSED) + +

    USART1_IRQHandler (Thumb, 72 bytes, Stack size 8 bytes, bsp_usart.o(.text)) +

    [Stack]

    • Max Depth = 24
    • Call Chain = USART1_IRQHandler ⇒ USART_GetITStatus +
    +
    [Calls]
    • >>   USART_ClearITPendingBit +
    • >>   USART_GetITStatus +
    • >>   USART_ReceiveData +
    +
    [Address Reference Count : 1]
    • startup_stm32f10x_hd.o(RESET) +
    +

    Delay_Init (Thumb, 52 bytes, Stack size 8 bytes, delay.o(.text)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = Delay_Init +
    +
    [Calls]
    • >>   SysTick_CLKSourceConfig +
    +
    [Called By]
    • >>   System_Init +
    + +

    Delay_ms (Thumb, 56 bytes, Stack size 0 bytes, delay.o(.text)) +

    [Called By]

    • >>   main +
    • >>   OLED_Init +
    • >>   System_Init +
    + +

    Delay_us (Thumb, 56 bytes, Stack size 0 bytes, delay.o(.text), UNUSED) + +

    i2c_Delay (Thumb, 14 bytes, Stack size 0 bytes, bsp_iic.o(.text)) +

    [Called By]

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

    IIC_Start (Thumb, 56 bytes, Stack size 8 bytes, bsp_iic.o(.text)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = IIC_Start +
    +
    [Calls]
    • >>   GPIO_ResetBits +
    • >>   GPIO_SetBits +
    • >>   i2c_Delay +
    +
    [Called By]
    • >>   Write_IIC_Data +
    • >>   Write_IIC_Command +
    • >>   i2c_CheckDevice +
    + +

    IIC_Stop (Thumb, 38 bytes, Stack size 8 bytes, bsp_iic.o(.text)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = IIC_Stop +
    +
    [Calls]
    • >>   GPIO_ResetBits +
    • >>   GPIO_SetBits +
    • >>   i2c_Delay +
    +
    [Called By]
    • >>   Write_IIC_Data +
    • >>   Write_IIC_Command +
    • >>   i2c_CheckDevice +
    • >>   IIC_Init +
    + +

    IIC_Send_Byte (Thumb, 96 bytes, Stack size 16 bytes, bsp_iic.o(.text)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = IIC_Send_Byte +
    +
    [Calls]
    • >>   GPIO_ResetBits +
    • >>   GPIO_SetBits +
    • >>   i2c_Delay +
    +
    [Called By]
    • >>   Write_IIC_Data +
    • >>   Write_IIC_Command +
    • >>   i2c_CheckDevice +
    + +

    IIC_Ack (Thumb, 56 bytes, Stack size 8 bytes, bsp_iic.o(.text), UNUSED) +

    [Calls]

    • >>   GPIO_ResetBits +
    • >>   GPIO_SetBits +
    • >>   i2c_Delay +
    +
    [Called By]
    • >>   IIC_Read_Byte +
    + +

    IIC_NAck (Thumb, 46 bytes, Stack size 8 bytes, bsp_iic.o(.text), UNUSED) +

    [Calls]

    • >>   GPIO_ResetBits +
    • >>   GPIO_SetBits +
    • >>   i2c_Delay +
    +
    [Called By]
    • >>   IIC_Read_Byte +
    + +

    IIC_Read_Byte (Thumb, 82 bytes, Stack size 16 bytes, bsp_iic.o(.text), UNUSED) +

    [Calls]

    • >>   GPIO_ResetBits +
    • >>   GPIO_SetBits +
    • >>   GPIO_ReadInputDataBit +
    • >>   IIC_NAck +
    • >>   IIC_Ack +
    • >>   i2c_Delay +
    + +

    IIC_Wait_Ack (Thumb, 66 bytes, Stack size 8 bytes, bsp_iic.o(.text)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = IIC_Wait_Ack +
    +
    [Calls]
    • >>   GPIO_ResetBits +
    • >>   GPIO_SetBits +
    • >>   GPIO_ReadInputDataBit +
    • >>   i2c_Delay +
    +
    [Called By]
    • >>   Write_IIC_Data +
    • >>   Write_IIC_Command +
    • >>   i2c_CheckDevice +
    + +

    IIC_Init (Thumb, 44 bytes, Stack size 8 bytes, bsp_iic.o(.text)) +

    [Stack]

    • Max Depth = 32
    • Call Chain = IIC_Init ⇒ GPIO_Init +
    +
    [Calls]
    • >>   RCC_APB2PeriphClockCmd +
    • >>   GPIO_Init +
    • >>   IIC_Stop +
    +
    [Called By]
    • >>   i2c_CheckDevice +
    • >>   OLED_Init +
    • >>   System_Init +
    + +

    i2c_CheckDevice (Thumb, 32 bytes, Stack size 16 bytes, bsp_iic.o(.text), UNUSED) +

    [Calls]

    • >>   IIC_Wait_Ack +
    • >>   IIC_Send_Byte +
    • >>   IIC_Stop +
    • >>   IIC_Start +
    • >>   IIC_Init +
    + +

    MOTO_PWM_Init (Thumb, 196 bytes, Stack size 48 bytes, bsp_timer.o(.text)) +

    [Stack]

    • Max Depth = 72
    • Call Chain = MOTO_PWM_Init ⇒ GPIO_Init +
    +
    [Calls]
    • >>   TIM_ClearFlag +
    • >>   TIM_OC4PolarityConfig +
    • >>   TIM_OC3PolarityConfig +
    • >>   TIM_ARRPreloadConfig +
    • >>   TIM_ITConfig +
    • >>   TIM_Cmd +
    • >>   TIM_OC4Init +
    • >>   TIM_OC3Init +
    • >>   TIM_TimeBaseInit +
    • >>   RCC_APB1PeriphClockCmd +
    • >>   RCC_APB2PeriphClockCmd +
    • >>   GPIO_Init +
    +
    [Called By]
    • >>   System_Init +
    + +

    MOTO_PWM_Out (Thumb, 68 bytes, Stack size 32 bytes, bsp_timer.o(.text)) +

    [Stack]

    • Max Depth = 48
    • Call Chain = MOTO_PWM_Out ⇒ TIM_OC4Init +
    +
    [Calls]
    • >>   TIM_OC4PolarityConfig +
    • >>   TIM_OC3PolarityConfig +
    • >>   TIM_ARRPreloadConfig +
    • >>   TIM_OC4Init +
    • >>   TIM_OC3Init +
    +
    [Called By]
    • >>   System_Init +
    + +

    Timer6_Init (Thumb, 114 bytes, Stack size 24 bytes, bsp_timer.o(.text)) +

    [Stack]

    • Max Depth = 40
    • Call Chain = Timer6_Init ⇒ NVIC_Init +
    +
    [Calls]
    • >>   TIM_ClearFlag +
    • >>   TIM_ITConfig +
    • >>   TIM_Cmd +
    • >>   TIM_TimeBaseInit +
    • >>   RCC_APB1PeriphClockCmd +
    • >>   NVIC_Init +
    • >>   NVIC_PriorityGroupConfig +
    +
    [Called By]
    • >>   System_Init +
    + +

    Encoder_Init_TIM2 (Thumb, 154 bytes, Stack size 32 bytes, bsp_timer.o(.text)) +

    [Stack]

    • Max Depth = 68
    • Call Chain = Encoder_Init_TIM2 ⇒ TIM_ICInit ⇒ TI1_Config +
    +
    [Calls]
    • >>   TIM_ClearFlag +
    • >>   TIM_SetCounter +
    • >>   TIM_EncoderInterfaceConfig +
    • >>   TIM_ITConfig +
    • >>   TIM_Cmd +
    • >>   TIM_ICStructInit +
    • >>   TIM_TimeBaseStructInit +
    • >>   TIM_ICInit +
    • >>   TIM_TimeBaseInit +
    • >>   RCC_APB1PeriphClockCmd +
    • >>   RCC_APB2PeriphClockCmd +
    • >>   GPIO_Init +
    +
    [Called By]
    • >>   System_Init +
    + +

    Encoder_Init_TIM4 (Thumb, 148 bytes, Stack size 32 bytes, bsp_timer.o(.text)) +

    [Stack]

    • Max Depth = 68
    • Call Chain = Encoder_Init_TIM4 ⇒ TIM_ICInit ⇒ TI1_Config +
    +
    [Calls]
    • >>   TIM_ClearFlag +
    • >>   TIM_SetCounter +
    • >>   TIM_EncoderInterfaceConfig +
    • >>   TIM_ITConfig +
    • >>   TIM_Cmd +
    • >>   TIM_ICStructInit +
    • >>   TIM_TimeBaseStructInit +
    • >>   TIM_ICInit +
    • >>   TIM_TimeBaseInit +
    • >>   RCC_APB1PeriphClockCmd +
    • >>   RCC_APB2PeriphClockCmd +
    • >>   GPIO_Init +
    +
    [Called By]
    • >>   System_Init +
    + +

    Read_Encoder (Thumb, 84 bytes, Stack size 0 bytes, bsp_timer.o(.text)) +

    [Called By]

    • >>   TIM6_IRQHandler +
    + +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

    MOTO_GPIO_Init (Thumb, 40 bytes, Stack size 8 bytes, moto.o(.text)) +

    [Stack]

    • Max Depth = 32
    • Call Chain = MOTO_GPIO_Init ⇒ GPIO_Init +
    +
    [Calls]
    • >>   RCC_APB2PeriphClockCmd +
    • >>   GPIO_Init +
    +
    [Called By]
    • >>   System_Init +
    + +

    MOTO_Left (Thumb, 68 bytes, Stack size 8 bytes, moto.o(.text)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = MOTO_Left +
    +
    [Calls]
    • >>   GPIO_ResetBits +
    • >>   GPIO_SetBits +
    +
    [Called By]
    • >>   Car_Stop +
    • >>   Car_Turn_Right +
    • >>   Car_Turn_Left +
    • >>   Car_Back +
    • >>   Car_Go +
    + +

    MOTO_Right (Thumb, 68 bytes, Stack size 8 bytes, moto.o(.text)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = MOTO_Right +
    +
    [Calls]
    • >>   GPIO_ResetBits +
    • >>   GPIO_SetBits +
    +
    [Called By]
    • >>   Car_Stop +
    • >>   Car_Turn_Right +
    • >>   Car_Turn_Left +
    • >>   Car_Back +
    • >>   Car_Go +
    + +

    Car_Go (Thumb, 16 bytes, Stack size 8 bytes, moto.o(.text)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = Car_Go ⇒ MOTO_Right +
    +
    [Calls]
    • >>   MOTO_Right +
    • >>   MOTO_Left +
    +
    [Called By]
    • >>   main +
    + +

    Car_Back (Thumb, 16 bytes, Stack size 8 bytes, moto.o(.text)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = Car_Back ⇒ MOTO_Right +
    +
    [Calls]
    • >>   MOTO_Right +
    • >>   MOTO_Left +
    +
    [Called By]
    • >>   main +
    + +

    Car_Turn_Left (Thumb, 16 bytes, Stack size 8 bytes, moto.o(.text)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = Car_Turn_Left ⇒ MOTO_Right +
    +
    [Calls]
    • >>   MOTO_Right +
    • >>   MOTO_Left +
    +
    [Called By]
    • >>   main +
    + +

    Car_Turn_Right (Thumb, 16 bytes, Stack size 8 bytes, moto.o(.text)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = Car_Turn_Right ⇒ MOTO_Right +
    +
    [Calls]
    • >>   MOTO_Right +
    • >>   MOTO_Left +
    +
    [Called By]
    • >>   main +
    + +

    Car_Stop (Thumb, 16 bytes, Stack size 8 bytes, moto.o(.text)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = Car_Stop ⇒ MOTO_Right +
    +
    [Calls]
    • >>   MOTO_Right +
    • >>   MOTO_Left +
    +
    [Called By]
    • >>   main +
    + +

    Write_IIC_Command (Thumb, 44 bytes, Stack size 8 bytes, oled.o(.text)) +

    [Stack]

    • Max Depth = 24
    • Call Chain = Write_IIC_Command ⇒ IIC_Send_Byte +
    +
    [Calls]
    • >>   IIC_Wait_Ack +
    • >>   IIC_Send_Byte +
    • >>   IIC_Stop +
    • >>   IIC_Start +
    +
    [Called By]
    • >>   OLED_WR_Byte +
    + +

    Write_IIC_Data (Thumb, 44 bytes, Stack size 8 bytes, oled.o(.text)) +

    [Stack]

    • Max Depth = 24
    • Call Chain = Write_IIC_Data ⇒ IIC_Send_Byte +
    +
    [Calls]
    • >>   IIC_Wait_Ack +
    • >>   IIC_Send_Byte +
    • >>   IIC_Stop +
    • >>   IIC_Start +
    +
    [Called By]
    • >>   OLED_WR_Byte +
    + +

    OLED_WR_Byte (Thumb, 24 bytes, Stack size 16 bytes, oled.o(.text)) +

    [Stack]

    • Max Depth = 40
    • Call Chain = OLED_WR_Byte ⇒ Write_IIC_Data ⇒ IIC_Send_Byte +
    +
    [Calls]
    • >>   Write_IIC_Data +
    • >>   Write_IIC_Command +
    +
    [Called By]
    • >>   OLED_DrawBMP +
    • >>   OLED_ShowChar +
    • >>   OLED_On +
    • >>   OLED_Display_Off +
    • >>   OLED_Display_On +
    • >>   OLED_Set_Pos +
    • >>   fill_picture +
    • >>   OLED_ShowCHinese +
    • >>   OLED_Init +
    • >>   OLED_Clear +
    + +

    fill_picture (Thumb, 64 bytes, Stack size 16 bytes, oled.o(.text), UNUSED) +

    [Calls]

    • >>   OLED_WR_Byte +
    + +

    Delay_50ms (Thumb, 22 bytes, Stack size 0 bytes, oled.o(.text), UNUSED) + +

    Delay_1ms (Thumb, 26 bytes, Stack size 0 bytes, oled.o(.text), UNUSED) + +

    OLED_Set_Pos (Thumb, 40 bytes, Stack size 16 bytes, oled.o(.text)) +

    [Stack]

    • Max Depth = 56
    • Call Chain = OLED_Set_Pos ⇒ OLED_WR_Byte ⇒ Write_IIC_Data ⇒ IIC_Send_Byte +
    +
    [Calls]
    • >>   OLED_WR_Byte +
    +
    [Called By]
    • >>   OLED_DrawBMP +
    • >>   OLED_ShowChar +
    • >>   OLED_ShowCHinese +
    + +

    OLED_Display_On (Thumb, 28 bytes, Stack size 8 bytes, oled.o(.text), UNUSED) +

    [Calls]

    • >>   OLED_WR_Byte +
    + +

    OLED_Display_Off (Thumb, 28 bytes, Stack size 8 bytes, oled.o(.text), UNUSED) +

    [Calls]

    • >>   OLED_WR_Byte +
    + +

    OLED_Clear (Thumb, 62 bytes, Stack size 16 bytes, oled.o(.text)) +

    [Stack]

    • Max Depth = 56
    • Call Chain = OLED_Clear ⇒ OLED_WR_Byte ⇒ Write_IIC_Data ⇒ IIC_Send_Byte +
    +
    [Calls]
    • >>   OLED_WR_Byte +
    +
    [Called By]
    • >>   System_Init +
    + +

    OLED_On (Thumb, 62 bytes, Stack size 16 bytes, oled.o(.text), UNUSED) +

    [Calls]

    • >>   OLED_WR_Byte +
    + +

    OLED_ShowChar (Thumb, 154 bytes, Stack size 32 bytes, oled.o(.text)) +

    [Stack]

    • Max Depth = 88
    • Call Chain = OLED_ShowChar ⇒ OLED_Set_Pos ⇒ OLED_WR_Byte ⇒ Write_IIC_Data ⇒ IIC_Send_Byte +
    +
    [Calls]
    • >>   OLED_Set_Pos +
    • >>   OLED_WR_Byte +
    +
    [Called By]
    • >>   OLED_ShowNum +
    • >>   OLED_ShowString +
    + +

    oled_pow (Thumb, 22 bytes, Stack size 8 bytes, oled.o(.text)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = oled_pow +
    +
    [Called By]
    • >>   OLED_ShowNum +
    + +

    OLED_ShowNum (Thumb, 136 bytes, Stack size 56 bytes, oled.o(.text)) +

    [Stack]

    • Max Depth = 144
    • Call Chain = OLED_ShowNum ⇒ OLED_ShowChar ⇒ OLED_Set_Pos ⇒ OLED_WR_Byte ⇒ Write_IIC_Data ⇒ IIC_Send_Byte +
    +
    [Calls]
    • >>   oled_pow +
    • >>   OLED_ShowChar +
    +
    [Called By]
    • >>   TIM6_IRQHandler +
    + +

    OLED_ShowString (Thumb, 58 bytes, Stack size 24 bytes, oled.o(.text)) +

    [Stack]

    • Max Depth = 112
    • Call Chain = OLED_ShowString ⇒ OLED_ShowChar ⇒ OLED_Set_Pos ⇒ OLED_WR_Byte ⇒ Write_IIC_Data ⇒ IIC_Send_Byte +
    +
    [Calls]
    • >>   OLED_ShowChar +
    +
    [Called By]
    • >>   TIM6_IRQHandler +
    • >>   showPID +
    • >>   System_Init +
    + +

    OLED_ShowCHinese (Thumb, 98 bytes, Stack size 24 bytes, oled.o(.text)) +

    [Stack]

    • Max Depth = 80
    • Call Chain = OLED_ShowCHinese ⇒ OLED_Set_Pos ⇒ OLED_WR_Byte ⇒ Write_IIC_Data ⇒ IIC_Send_Byte +
    +
    [Calls]
    • >>   OLED_Set_Pos +
    • >>   OLED_WR_Byte +
    +
    [Called By]
    • >>   System_Init +
    + +

    OLED_DrawBMP (Thumb, 118 bytes, Stack size 40 bytes, oled.o(.text), UNUSED) +

    [Calls]

    • >>   OLED_Set_Pos +
    • >>   OLED_WR_Byte +
    + +

    OLED_Init (Thumb, 232 bytes, Stack size 8 bytes, oled.o(.text)) +

    [Stack]

    • Max Depth = 48
    • Call Chain = OLED_Init ⇒ OLED_WR_Byte ⇒ Write_IIC_Data ⇒ IIC_Send_Byte +
    +
    [Calls]
    • >>   OLED_WR_Byte +
    • >>   IIC_Init +
    • >>   Delay_ms +
    +
    [Called By]
    • >>   System_Init +
    + +

    showPID (Thumb, 118 bytes, Stack size 40 bytes, pid.o(.text)) +

    [Stack]

    • Max Depth = 168 + Unknown Stack Size +
    • Call Chain = showPID ⇒ __2sprintf ⇒ _printf_char_common ⇒ __printf +
    +
    [Calls]
    • >>   __aeabi_f2d +
    • >>   __2sprintf +
    • >>   OLED_ShowString +
    +
    [Called By]
    • >>   TIM6_IRQHandler +
    + +

    PID_Calc_Left (Thumb, 114 bytes, Stack size 48 bytes, pid.o(.text)) +

    [Stack]

    • Max Depth = 64
    • Call Chain = PID_Calc_Left ⇒ __aeabi_fmul +
    +
    [Calls]
    • >>   __aeabi_fmul +
    • >>   __aeabi_i2f +
    • >>   __aeabi_f2iz +
    • >>   __aeabi_fsub +
    • >>   __aeabi_fadd +
    +
    [Called By]
    • >>   TIM6_IRQHandler +
    + +

    PID_Calc_Right (Thumb, 114 bytes, Stack size 48 bytes, pid.o(.text)) +

    [Stack]

    • Max Depth = 64
    • Call Chain = PID_Calc_Right ⇒ __aeabi_fmul +
    +
    [Calls]
    • >>   __aeabi_fmul +
    • >>   __aeabi_i2f +
    • >>   __aeabi_f2iz +
    • >>   __aeabi_fsub +
    • >>   __aeabi_fadd +
    +
    [Called By]
    • >>   TIM6_IRQHandler +
    + +

    TIM6_IRQHandler (Thumb, 506 bytes, Stack size 40 bytes, car.o(.text)) +

    [Stack]

    • Max Depth = 208 + Unknown Stack Size +
    • Call Chain = TIM6_IRQHandler ⇒ showPID ⇒ __2sprintf ⇒ _printf_char_common ⇒ __printf +
    +
    [Calls]
    • >>   TIM_ClearITPendingBit +
    • >>   TIM_GetFlagStatus +
    • >>   __aeabi_f2d +
    • >>   __aeabi_dmul +
    • >>   __aeabi_i2d +
    • >>   __aeabi_d2f +
    • >>   __2sprintf +
    • >>   PID_Calc_Right +
    • >>   PID_Calc_Left +
    • >>   showPID +
    • >>   OLED_ShowNum +
    • >>   Read_Encoder +
    • >>   LED_Flash +
    • >>   OLED_ShowString +
    +
    [Address Reference Count : 1]
    • startup_stm32f10x_hd.o(RESET) +
    +

    Bluetooth_Init (Thumb, 162 bytes, Stack size 32 bytes, bluetooth.o(.text)) +

    [Stack]

    • Max Depth = 100
    • Call Chain = Bluetooth_Init ⇒ USART_Init ⇒ RCC_GetClocksFreq +
    +
    [Calls]
    • >>   USART_Init +
    • >>   RCC_APB1PeriphClockCmd +
    • >>   RCC_APB2PeriphClockCmd +
    • >>   GPIO_Init +
    • >>   NVIC_Init +
    • >>   NVIC_PriorityGroupConfig +
    • >>   USART_ITConfig +
    • >>   USART_Cmd +
    +
    [Called By]
    • >>   main +
    + +

    USART2_Send (Thumb, 74 bytes, Stack size 16 bytes, bluetooth.o(.text)) +

    [Stack]

    • Max Depth = 24
    • Call Chain = USART2_Send ⇒ USART_ClearITPendingBit +
    +
    [Calls]
    • >>   USART_ClearITPendingBit +
    • >>   USART_ClearFlag +
    • >>   USART_GetFlagStatus +
    • >>   USART_SendData +
    +
    [Called By]
    • >>   main +
    + +

    USART2_Receive (Thumb, 16 bytes, Stack size 0 bytes, bluetooth.o(.text)) +

    [Called By]

    • >>   main +
    + +

    USART2_IRQHandler (Thumb, 72 bytes, Stack size 8 bytes, bluetooth.o(.text)) +

    [Stack]

    • Max Depth = 24
    • Call Chain = USART2_IRQHandler ⇒ USART_GetITStatus +
    +
    [Calls]
    • >>   USART_ClearITPendingBit +
    • >>   USART_GetITStatus +
    • >>   USART_ReceiveData +
    +
    [Address Reference Count : 1]
    • startup_stm32f10x_hd.o(RESET) +
    +

    main (Thumb, 222 bytes, Stack size 0 bytes, main.o(.text)) +

    [Stack]

    • Max Depth = 128
    • Call Chain = main ⇒ System_Init ⇒ OLED_ShowString ⇒ OLED_ShowChar ⇒ OLED_Set_Pos ⇒ OLED_WR_Byte ⇒ Write_IIC_Data ⇒ IIC_Send_Byte +
    +
    [Calls]
    • >>   USART2_Receive +
    • >>   USART2_Send +
    • >>   Bluetooth_Init +
    • >>   Car_Stop +
    • >>   Car_Turn_Right +
    • >>   Car_Turn_Left +
    • >>   Car_Back +
    • >>   Car_Go +
    • >>   Delay_ms +
    • >>   System_Init +
    +
    [Called By]
    • >>   __rt_entry_main +
    + +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

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

    • startup_stm32f10x_hd.o(RESET) +
    +

    __2sprintf (Thumb, 34 bytes, Stack size 32 bytes, noretval__2sprintf.o(.text)) +

    [Stack]

    • Max Depth = 128 + Unknown Stack Size +
    • Call Chain = __2sprintf ⇒ _printf_char_common ⇒ __printf +
    +
    [Calls]
    • >>   _sputc +
    • >>   _printf_char_common +
    +
    [Called By]
    • >>   TIM6_IRQHandler +
    • >>   showPID +
    + +

    _printf_pre_padding (Thumb, 44 bytes, Stack size 16 bytes, _printf_pad.o(.text)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = _printf_pre_padding +
    +
    [Called By]
    • >>   _printf_fp_infnan +
    • >>   _printf_fp_dec_real +
    + +

    _printf_post_padding (Thumb, 34 bytes, Stack size 16 bytes, _printf_pad.o(.text)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = _printf_post_padding +
    +
    [Called By]
    • >>   _printf_fp_infnan +
    • >>   _printf_fp_dec_real +
    + +

    __printf (Thumb, 270 bytes, Stack size 32 bytes, __printf_wp.o(.text)) +

    [Stack]

    • Max Depth = 32 + Unknown Stack Size +
    • Call Chain = __printf +
    +
    [Calls]
    • >>   _printf_percent +
    • >>   _is_digit +
    +
    [Called By]
    • >>   _printf_char_common +
    + +

    __use_two_region_memory (Thumb, 2 bytes, Stack size 0 bytes, heapauxi.o(.text), UNUSED) + +

    __rt_heap_escrow$2region (Thumb, 2 bytes, Stack size 0 bytes, heapauxi.o(.text), UNUSED) + +

    __rt_heap_expand$2region (Thumb, 2 bytes, Stack size 0 bytes, heapauxi.o(.text), UNUSED) + +

    __lib_sel_fp_printf (Thumb, 2 bytes, Stack size 0 bytes, _printf_fp_dec.o(.text), UNUSED) + +

    _printf_fp_dec_real (Thumb, 620 bytes, Stack size 104 bytes, _printf_fp_dec.o(.text)) +

    [Stack]

    • Max Depth = 320
    • Call Chain = _printf_fp_dec_real ⇒ _fp_digits ⇒ _btod_etento ⇒ _btod_emul ⇒ _e2e +
    +
    [Calls]
    • >>   __ARM_fpclassify +
    • >>   _printf_fp_infnan +
    • >>   __rt_locale +
    • >>   _fp_digits +
    • >>   _printf_post_padding +
    • >>   _printf_pre_padding +
    +
    [Called By]
    • >>   _printf_fp_dec +
    + +

    _printf_char_common (Thumb, 32 bytes, Stack size 64 bytes, _printf_char_common.o(.text)) +

    [Stack]

    • Max Depth = 96 + Unknown Stack Size +
    • Call Chain = _printf_char_common ⇒ __printf +
    +
    [Calls]
    • >>   __printf +
    +
    [Called By]
    • >>   __2sprintf +
    + +

    _sputc (Thumb, 10 bytes, Stack size 0 bytes, _sputc.o(.text)) +

    [Called By]

    • >>   __2sprintf +
    +
    [Address Reference Count : 1]
    • noretval__2sprintf.o(.text) +
    +

    __rt_locale (Thumb, 8 bytes, Stack size 0 bytes, rt_locale_intlibspace.o(.text)) +

    [Called By]

    • >>   __rt_lib_init_lc_common +
    • >>   _printf_fp_dec_real +
    + +

    _ll_udiv10 (Thumb, 138 bytes, Stack size 12 bytes, lludiv10.o(.text)) +

    [Stack]

    • Max Depth = 12
    • Call Chain = _ll_udiv10 +
    +
    [Called By]
    • >>   _fp_digits +
    + +

    _printf_fp_infnan (Thumb, 112 bytes, Stack size 24 bytes, _printf_fp_infnan.o(.text)) +

    [Stack]

    • Max Depth = 40
    • Call Chain = _printf_fp_infnan ⇒ _printf_post_padding +
    +
    [Calls]
    • >>   _printf_post_padding +
    • >>   _printf_pre_padding +
    +
    [Called By]
    • >>   _printf_fp_dec_real +
    + +

    _btod_etento (Thumb, 216 bytes, Stack size 72 bytes, bigflt0.o(.text)) +

    [Stack]

    • Max Depth = 120
    • Call Chain = _btod_etento ⇒ _btod_emul ⇒ _e2e +
    +
    [Calls]
    • >>   _btod_emul +
    • >>   _btod_ediv +
    +
    [Called By]
    • >>   _fp_digits +
    + +

    __user_libspace (Thumb, 8 bytes, Stack size 0 bytes, libspace.o(.text), UNUSED) + +

    __user_perproc_libspace (Thumb, 0 bytes, Stack size 0 bytes, libspace.o(.text)) +

    [Called By]

    • >>   __user_setup_stackheap +
    + +

    __user_perthread_libspace (Thumb, 0 bytes, Stack size 0 bytes, libspace.o(.text), UNUSED) + +

    __user_setup_stackheap (Thumb, 74 bytes, Stack size 8 bytes, sys_stackheap_outer.o(.text)) +

    [Stack]

    • Max Depth = 8 + Unknown Stack Size +
    • Call Chain = __user_setup_stackheap +
    +
    [Calls]
    • >>   __user_initial_stackheap +
    • >>   __user_perproc_libspace +
    +
    [Called By]
    • >>   __rt_entry_sh +
    + +

    exit (Thumb, 18 bytes, Stack size 8 bytes, exit.o(.text)) +

    [Stack]

    • Max Depth = 8 + Unknown Stack Size +
    • Call Chain = exit +
    +
    [Calls]
    • >>   __rt_exit +
    +
    [Called By]
    • >>   __rt_entry_main +
    + +

    strcmp (Thumb, 128 bytes, Stack size 0 bytes, strcmpv7m.o(.text)) +

    [Called By]

    • >>   _get_lc_numeric +
    + +

    _sys_exit (Thumb, 8 bytes, Stack size 0 bytes, sys_exit.o(.text)) +

    [Called By]

    • >>   __rt_exit_exit +
    + +

    __I$use$semihosting (Thumb, 0 bytes, Stack size 0 bytes, use_no_semi.o(.text), UNUSED) + +

    __use_no_semihosting_swi (Thumb, 2 bytes, Stack size 0 bytes, use_no_semi.o(.text), UNUSED) + +

    __semihosting_library_function (Thumb, 0 bytes, Stack size 0 bytes, indicate_semi.o(.text), UNUSED) + +

    _btod_d2e (Thumb, 62 bytes, Stack size 0 bytes, btod.o(CL$$btod_d2e)) +

    [Calls]

    • >>   _d2e_norm_op1 +
    +
    [Called By]
    • >>   _fp_digits +
    + +

    _d2e_denorm_low (Thumb, 70 bytes, Stack size 0 bytes, btod.o(CL$$btod_d2e_denorm_low)) +

    [Called By]

    • >>   _d2e_norm_op1 +
    + +

    _d2e_norm_op1 (Thumb, 96 bytes, Stack size 0 bytes, btod.o(CL$$btod_d2e_norm_op1)) +

    [Calls]

    • >>   _d2e_denorm_low +
    +
    [Called By]
    • >>   _btod_d2e +
    + +

    __btod_div_common (Thumb, 696 bytes, Stack size 24 bytes, btod.o(CL$$btod_div_common)) +

    [Stack]

    • Max Depth = 24
    • Call Chain = __btod_div_common +
    +
    [Called By]
    • >>   _btod_ediv +
    + +

    _e2e (Thumb, 198 bytes, Stack size 24 bytes, btod.o(CL$$btod_e2e)) +

    [Stack]

    • Max Depth = 24
    • Call Chain = _e2e +
    +
    [Called By]
    • >>   _btod_emul +
    • >>   _btod_ediv +
    + +

    _btod_ediv (Thumb, 40 bytes, Stack size 24 bytes, btod.o(CL$$btod_ediv)) +

    [Stack]

    • Max Depth = 48
    • Call Chain = _btod_ediv ⇒ _e2e +
    +
    [Calls]
    • >>   _e2e +
    • >>   __btod_div_common +
    +
    [Called By]
    • >>   _btod_etento +
    • >>   _fp_digits +
    + +

    _btod_emul (Thumb, 40 bytes, Stack size 24 bytes, btod.o(CL$$btod_emul)) +

    [Stack]

    • Max Depth = 48
    • Call Chain = _btod_emul ⇒ _e2e +
    +
    [Calls]
    • >>   __btod_mult_common +
    • >>   _e2e +
    +
    [Called By]
    • >>   _btod_etento +
    • >>   _fp_digits +
    + +

    __btod_mult_common (Thumb, 580 bytes, Stack size 16 bytes, btod.o(CL$$btod_mult_common)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = __btod_mult_common +
    +
    [Called By]
    • >>   _btod_emul +
    + +

    __ARM_fpclassify (Thumb, 40 bytes, Stack size 0 bytes, fpclassify.o(i.__ARM_fpclassify)) +

    [Called By]

    • >>   _printf_fp_dec_real +
    + +

    _is_digit (Thumb, 14 bytes, Stack size 0 bytes, __printf_wp.o(i._is_digit)) +

    [Called By]

    • >>   __printf +
    + +

    _get_lc_numeric (Thumb, 44 bytes, Stack size 8 bytes, lc_numeric_c.o(locale$$code)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = _get_lc_numeric +
    +
    [Calls]
    • >>   strcmp +
    +
    [Called By]
    • >>   __rt_lib_init_lc_numeric_2 +
    + +

    __aeabi_d2f (Thumb, 0 bytes, Stack size 32 bytes, d2f.o(x$fpl$d2f)) +

    [Stack]

    • Max Depth = 32
    • Call Chain = __aeabi_d2f +
    +
    [Called By]
    • >>   TIM6_IRQHandler +
    + +

    _d2f (Thumb, 98 bytes, Stack size 32 bytes, d2f.o(x$fpl$d2f), UNUSED) +

    [Calls]

    • >>   __fpl_fretinf +
    • >>   __fpl_dnaninf +
    + +

    __aeabi_i2d (Thumb, 0 bytes, Stack size 0 bytes, dflt_clz.o(x$fpl$dflt)) +

    [Called By]

    • >>   TIM6_IRQHandler +
    + +

    _dflt (Thumb, 46 bytes, Stack size 0 bytes, dflt_clz.o(x$fpl$dflt), UNUSED) + +

    __aeabi_dmul (Thumb, 0 bytes, Stack size 32 bytes, dmul.o(x$fpl$dmul)) +

    [Stack]

    • Max Depth = 32
    • Call Chain = __aeabi_dmul +
    +
    [Called By]
    • >>   TIM6_IRQHandler +
    + +

    _dmul (Thumb, 332 bytes, Stack size 32 bytes, dmul.o(x$fpl$dmul), UNUSED) +

    [Calls]

    • >>   __fpl_dretinf +
    • >>   __fpl_dnaninf +
    + +

    __fpl_dnaninf (Thumb, 156 bytes, Stack size 16 bytes, dnaninf.o(x$fpl$dnaninf), UNUSED) +

    [Called By]

    • >>   _dmul +
    • >>   _d2f +
    + +

    __fpl_dretinf (Thumb, 12 bytes, Stack size 0 bytes, dretinf.o(x$fpl$dretinf), UNUSED) +

    [Called By]

    • >>   _f2d +
    • >>   _dmul +
    + +

    __aeabi_f2d (Thumb, 0 bytes, Stack size 16 bytes, f2d.o(x$fpl$f2d)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = __aeabi_f2d +
    +
    [Called By]
    • >>   TIM6_IRQHandler +
    • >>   showPID +
    + +

    _f2d (Thumb, 86 bytes, Stack size 16 bytes, f2d.o(x$fpl$f2d), UNUSED) +

    [Calls]

    • >>   __fpl_fnaninf +
    • >>   __fpl_dretinf +
    + +

    __aeabi_fadd (Thumb, 0 bytes, Stack size 16 bytes, faddsub_clz.o(x$fpl$fadd)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = __aeabi_fadd +
    +
    [Called By]
    • >>   PID_Calc_Right +
    • >>   PID_Calc_Left +
    + +

    _fadd (Thumb, 196 bytes, Stack size 16 bytes, faddsub_clz.o(x$fpl$fadd), UNUSED) +

    [Calls]

    • >>   __fpl_fretinf +
    • >>   __fpl_fnaninf +
    • >>   _fsub1 +
    + +

    __aeabi_f2iz (Thumb, 0 bytes, Stack size 16 bytes, ffix.o(x$fpl$ffix)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = __aeabi_f2iz +
    +
    [Called By]
    • >>   PID_Calc_Right +
    • >>   PID_Calc_Left +
    + +

    _ffix (Thumb, 54 bytes, Stack size 16 bytes, ffix.o(x$fpl$ffix), UNUSED) +

    [Calls]

    • >>   __fpl_fnaninf +
    + +

    __aeabi_i2f (Thumb, 0 bytes, Stack size 0 bytes, fflt_clz.o(x$fpl$fflt)) +

    [Called By]

    • >>   PID_Calc_Right +
    • >>   PID_Calc_Left +
    + +

    _fflt (Thumb, 48 bytes, Stack size 0 bytes, fflt_clz.o(x$fpl$fflt), UNUSED) + +

    __aeabi_fmul (Thumb, 0 bytes, Stack size 16 bytes, fmul.o(x$fpl$fmul)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = __aeabi_fmul +
    +
    [Called By]
    • >>   PID_Calc_Right +
    • >>   PID_Calc_Left +
    + +

    _fmul (Thumb, 258 bytes, Stack size 16 bytes, fmul.o(x$fpl$fmul), UNUSED) +

    [Calls]

    • >>   __fpl_fretinf +
    • >>   __fpl_fnaninf +
    + +

    __fpl_fnaninf (Thumb, 140 bytes, Stack size 8 bytes, fnaninf.o(x$fpl$fnaninf), UNUSED) +

    [Called By]

    • >>   _fmul +
    • >>   _ffix +
    • >>   _fsub +
    • >>   _fadd +
    • >>   _f2d +
    + +

    __fpl_fretinf (Thumb, 10 bytes, Stack size 0 bytes, fretinf.o(x$fpl$fretinf), UNUSED) +

    [Called By]

    • >>   _fmul +
    • >>   _fadd +
    • >>   _d2f +
    + +

    __aeabi_fsub (Thumb, 0 bytes, Stack size 16 bytes, faddsub_clz.o(x$fpl$fsub)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = __aeabi_fsub +
    +
    [Called By]
    • >>   PID_Calc_Right +
    • >>   PID_Calc_Left +
    + +

    _fsub (Thumb, 234 bytes, Stack size 16 bytes, faddsub_clz.o(x$fpl$fsub), UNUSED) +

    [Calls]

    • >>   __fpl_fnaninf +
    • >>   _fadd1 +
    + +

    _printf_fp_dec (Thumb, 4 bytes, Stack size 0 bytes, printf1.o(x$fpl$printf1)) +

    [Stack]

    • Max Depth = 320
    • Call Chain = _printf_fp_dec ⇒ _printf_fp_dec_real ⇒ _fp_digits ⇒ _btod_etento ⇒ _btod_emul ⇒ _e2e +
    +
    [Calls]
    • >>   _printf_fp_dec_real +
    +
    [Called By]
    • >>   _printf_f +
    +

    +

    +Local Symbols +

    +

    SetSysClockTo72 (Thumb, 214 bytes, Stack size 12 bytes, system_stm32f10x.o(.text)) +

    [Stack]

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

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

    [Stack]

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

    TI4_Config (Thumb, 130 bytes, Stack size 20 bytes, stm32f10x_tim.o(.text)) +

    [Stack]

    • Max Depth = 20
    • Call Chain = TI4_Config +
    +
    [Called By]
    • >>   TIM_ICInit +
    + +

    TI3_Config (Thumb, 122 bytes, Stack size 20 bytes, stm32f10x_tim.o(.text)) +

    [Stack]

    • Max Depth = 20
    • Call Chain = TI3_Config +
    +
    [Called By]
    • >>   TIM_ICInit +
    + +

    TI2_Config (Thumb, 130 bytes, Stack size 20 bytes, stm32f10x_tim.o(.text)) +

    [Stack]

    • Max Depth = 20
    • Call Chain = TI2_Config +
    +
    [Called By]
    • >>   TIM_TIxExternalClockConfig +
    • >>   TIM_PWMIConfig +
    • >>   TIM_ICInit +
    + +

    TI1_Config (Thumb, 108 bytes, Stack size 20 bytes, stm32f10x_tim.o(.text)) +

    [Stack]

    • Max Depth = 20
    • Call Chain = TI1_Config +
    +
    [Called By]
    • >>   TIM_TIxExternalClockConfig +
    • >>   TIM_PWMIConfig +
    • >>   TIM_ICInit +
    + +

    _fadd1 (Thumb, 0 bytes, Stack size unknown bytes, faddsub_clz.o(x$fpl$fadd), UNUSED) +

    [Called By]

    • >>   _fsub +
    + +

    _fsub1 (Thumb, 0 bytes, Stack size unknown bytes, faddsub_clz.o(x$fpl$fsub), UNUSED) +

    [Called By]

    • >>   _fadd +
    + +

    _fp_digits (Thumb, 428 bytes, Stack size 96 bytes, _printf_fp_dec.o(.text)) +

    [Stack]

    • Max Depth = 216
    • Call Chain = _fp_digits ⇒ _btod_etento ⇒ _btod_emul ⇒ _e2e +
    +
    [Calls]
    • >>   _btod_emul +
    • >>   _btod_ediv +
    • >>   _btod_d2e +
    • >>   _btod_etento +
    • >>   _ll_udiv10 +
    +
    [Called By]
    • >>   _printf_fp_dec_real +
    + +

    _printf_input_char (Thumb, 10 bytes, Stack size 0 bytes, _printf_char_common.o(.text)) +
    [Address Reference Count : 1]

    • _printf_char_common.o(.text) +

    +

    +Undefined Global Symbols +


    diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/Project.lnp b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/Project.lnp new file mode 100644 index 0000000..aeec6e5 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/Project.lnp @@ -0,0 +1,45 @@ +--cpu Cortex-M3 +"..\output\startup_stm32f10x_hd.o" +"..\output\core_cm3.o" +"..\output\system_stm32f10x.o" +"..\output\misc.o" +"..\output\stm32f10x_adc.o" +"..\output\stm32f10x_bkp.o" +"..\output\stm32f10x_can.o" +"..\output\stm32f10x_cec.o" +"..\output\stm32f10x_crc.o" +"..\output\stm32f10x_dac.o" +"..\output\stm32f10x_dbgmcu.o" +"..\output\stm32f10x_dma.o" +"..\output\stm32f10x_exti.o" +"..\output\stm32f10x_flash.o" +"..\output\stm32f10x_fsmc.o" +"..\output\stm32f10x_gpio.o" +"..\output\stm32f10x_i2c.o" +"..\output\stm32f10x_iwdg.o" +"..\output\stm32f10x_pwr.o" +"..\output\stm32f10x_rcc.o" +"..\output\stm32f10x_rtc.o" +"..\output\stm32f10x_sdio.o" +"..\output\stm32f10x_spi.o" +"..\output\stm32f10x_tim.o" +"..\output\stm32f10x_usart.o" +"..\output\stm32f10x_wwdg.o" +"..\output\bsp_sys.o" +"..\output\bsp_gpio.o" +"..\output\bsp_nvic.o" +"..\output\bsp_usart.o" +"..\output\delay.o" +"..\output\bsp_iic.o" +"..\output\bsp_timer.o" +"..\output\moto.o" +"..\output\oled.o" +"..\output\pid.o" +"..\output\car.o" +"..\output\bluetooth.o" +"..\output\main.o" +"..\output\stm32f10x_it.o" +--strict --scatter "..\Output\Project.sct" +--summary_stderr --info summarysizes --map --xref --callgraph --symbols +--info sizes --info totals --info unused --info veneers +--list "..\Listing\Project.map" -o ..\Output\Project.axf \ No newline at end of file diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/Project.plg b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/Project.plg new file mode 100644 index 0000000..10479f5 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/Project.plg @@ -0,0 +1,529 @@ + + +
    +

    Vision Build Log

    +

    Project:

    +C:\Users\Administrator\Desktop\TX\Project\Project.uvproj +Project File Date: 02/08/2017 + +

    Output:

    +Build target 'PROJECT' +linking... +..\Output\Project.axf: Error: L6218E: Undefined symbol NRF24L01_Check (referred from main.o). +..\Output\Project.axf: Error: L6218E: Undefined symbol NRF24L01_Init (referred from main.o). +..\Output\Project.axf: Error: L6218E: Undefined symbol NRF24L01_TxPacket (referred from main.o). +..\Output\Project.axf: Error: L6218E: Undefined symbol TX_Mode (referred from main.o). +"..\Output\Project.axf" - 4 Errors, 0 Warning(s). +Target not created +Build target 'PROJECT' +linking... +..\Output\Project.axf: Error: L6218E: Undefined symbol NRF24L01_Check (referred from main.o). +..\Output\Project.axf: Error: L6218E: Undefined symbol NRF24L01_Init (referred from main.o). +..\Output\Project.axf: Error: L6218E: Undefined symbol NRF24L01_TxPacket (referred from main.o). +..\Output\Project.axf: Error: L6218E: Undefined symbol TX_Mode (referred from main.o). +"..\Output\Project.axf" - 4 Errors, 0 Warning(s). +Target not created +Build target 'PROJECT' +compiling core_cm3.c... +compiling system_stm32f10x.c... +compiling misc.c... +compiling stm32f10x_adc.c... +compiling stm32f10x_bkp.c... +compiling stm32f10x_can.c... +compiling stm32f10x_cec.c... +compiling stm32f10x_crc.c... +compiling stm32f10x_dac.c... +compiling stm32f10x_dbgmcu.c... +compiling stm32f10x_dma.c... +compiling stm32f10x_exti.c... +compiling stm32f10x_flash.c... +compiling stm32f10x_fsmc.c... +compiling stm32f10x_gpio.c... +compiling stm32f10x_i2c.c... +compiling stm32f10x_iwdg.c... +compiling stm32f10x_pwr.c... +compiling stm32f10x_rcc.c... +compiling stm32f10x_rtc.c... +compiling stm32f10x_sdio.c... +compiling stm32f10x_spi.c... +compiling stm32f10x_tim.c... +compiling stm32f10x_usart.c... +compiling stm32f10x_wwdg.c... +compiling delay.c... +compiling bsp_NVIC.C... +compiling bsp_iic.c... +compiling bsp_GPIO.c... +compiling bsp_usart.c... +compiling 24cxx.c... +compiling oled.c... +compiling 24l01.c... +..\HARDWARE\24L01\24l01.c(3): error: #5: cannot open source input file "bsp_spi.h": No such file or directory +compiling main.c... +compiling stm32f10x_it.c... +"..\Output\Project.axf" - 1 Errors, 0 Warning(s). +Target not created +Build target 'PROJECT' +compiling core_cm3.c... +compiling system_stm32f10x.c... +compiling misc.c... +compiling stm32f10x_adc.c... +compiling stm32f10x_bkp.c... +compiling stm32f10x_can.c... +compiling stm32f10x_cec.c... +compiling stm32f10x_crc.c... +compiling stm32f10x_dac.c... +compiling stm32f10x_dbgmcu.c... +compiling stm32f10x_dma.c... +compiling stm32f10x_exti.c... +compiling stm32f10x_flash.c... +compiling stm32f10x_fsmc.c... +compiling stm32f10x_gpio.c... +compiling stm32f10x_i2c.c... +compiling stm32f10x_iwdg.c... +compiling stm32f10x_pwr.c... +compiling stm32f10x_rcc.c... +compiling stm32f10x_rtc.c... +compiling stm32f10x_sdio.c... +compiling stm32f10x_spi.c... +compiling stm32f10x_tim.c... +compiling stm32f10x_usart.c... +compiling stm32f10x_wwdg.c... +compiling delay.c... +compiling bsp_NVIC.C... +compiling bsp_iic.c... +compiling bsp_GPIO.c... +compiling bsp_usart.c... +compiling bsp_spi.c... +compiling 24cxx.c... +compiling oled.c... +compiling 24l01.c... +compiling main.c... +compiling stm32f10x_it.c... +linking... +Program Size: Code=11120 RO-data=2364 RW-data=964 ZI-data=1908 +FromELF: creating hex file... +"..\Output\Project.axf" - 0 Errors, 0 Warning(s). +Load "..\\Output\\Project.axf" +Set JLink Project File to "C:\Users\Administrator\Desktop\TX\Project\JLinkSettings.ini" +* JLink Info: Device "STM32F103C8" selected (64 KB flash, 20 KB RAM). + +JLink info: +------------ +DLL: V4.90 , compiled Jul 28 2014 10:35:20 +Firmware: J-Link ARM-OB STM32 compiled Aug 22 2012 19:52:04 +Hardware: V7.00 +S/N : 20090928 +Feature(s) : RDI,FlashDL,FlashBP,JFlash,GDBFull + +* JLink Info: Found SWD-DP with ID 0x1BA01477 +* JLink Info: Found SWD-DP with ID 0x1BA01477 +* JLink Info: Found Cortex-M3 r1p1, Little endian. +* JLink Info: FPUnit: 6 code (BP) slots and 2 literal slots +* JLink Info: TPIU fitted. +ROMTableAddr = 0xE00FF003 + +Target info: +------------ +Device: STM32F103C8 +VTarget = 3.300V +State of Pins: +TCK: 0, TDI: 0, TDO: 1, TMS: 0, TRES: 1, TRST: 1 +Hardware-Breakpoints: 6 +Software-Breakpoints: 8192 +Watchpoints: 4 +JTAG speed: 1000 kHz + +Erase Done. +Programming Done. +Verify OK. +Application running ... +Build target 'PROJECT' +compiling 24l01.c... +compiling main.c... +linking... +Program Size: Code=11116 RO-data=2364 RW-data=964 ZI-data=1908 +FromELF: creating hex file... +"..\Output\Project.axf" - 0 Errors, 0 Warning(s). +Load "..\\Output\\Project.axf" +Set JLink Project File to "C:\Users\Administrator\Desktop\TX\Project\JLinkSettings.ini" +* JLink Info: Device "STM32F103C8" selected (64 KB flash, 20 KB RAM). + +JLink info: +------------ +DLL: V4.90 , compiled Jul 28 2014 10:35:20 +Firmware: J-Link ARM-OB STM32 compiled Aug 22 2012 19:52:04 +Hardware: V7.00 +S/N : 20090928 +Feature(s) : RDI,FlashDL,FlashBP,JFlash,GDBFull + +* JLink Info: Found SWD-DP with ID 0x1BA01477 +* JLink Info: Found SWD-DP with ID 0x1BA01477 +* JLink Info: Found Cortex-M3 r1p1, Little endian. +* JLink Info: FPUnit: 6 code (BP) slots and 2 literal slots +* JLink Info: TPIU fitted. +ROMTableAddr = 0xE00FF003 + +Target info: +------------ +Device: STM32F103C8 +VTarget = 3.300V +State of Pins: +TCK: 0, TDI: 0, TDO: 1, TMS: 0, TRES: 1, TRST: 1 +Hardware-Breakpoints: 6 +Software-Breakpoints: 8192 +Watchpoints: 4 +JTAG speed: 1000 kHz + +Erase Done. +Programming Done. +Verify OK. +Application running ... +Load "..\\Output\\Project.axf" +Set JLink Project File to "C:\Users\Administrator\Desktop\TX\Project\JLinkSettings.ini" +* JLink Info: Device "STM32F103C8" selected (64 KB flash, 20 KB RAM). + +JLink info: +------------ +DLL: V4.90 , compiled Jul 28 2014 10:35:20 +Firmware: J-Link ARM-OB STM32 compiled Aug 22 2012 19:52:04 +Hardware: V7.00 +S/N : 20090928 +Feature(s) : RDI,FlashDL,FlashBP,JFlash,GDBFull + +* JLink Info: Found SWD-DP with ID 0x1BA01477 +* JLink Info: Found SWD-DP with ID 0x1BA01477 +* JLink Info: Found Cortex-M3 r1p1, Little endian. +* JLink Info: FPUnit: 6 code (BP) slots and 2 literal slots +* JLink Info: TPIU fitted. +ROMTableAddr = 0xE00FF003 + +Target info: +------------ +Device: STM32F103C8 +VTarget = 3.300V +State of Pins: +TCK: 0, TDI: 0, TDO: 1, TMS: 0, TRES: 1, TRST: 1 +Hardware-Breakpoints: 6 +Software-Breakpoints: 8192 +Watchpoints: 4 +JTAG speed: 1000 kHz + +Erase Done. +Programming Done. +Verify OK. +Application running ... +Build target 'PROJECT' +compiling main.c... +..\User\main.c(40): warning: #177-D: variable "tmp" was declared but never referenced +linking... +Program Size: Code=11012 RO-data=2364 RW-data=964 ZI-data=1908 +FromELF: creating hex file... +"..\Output\Project.axf" - 0 Errors, 1 Warning(s). +Load "..\\Output\\Project.axf" +Set JLink Project File to "C:\Users\Administrator\Desktop\TX\Project\JLinkSettings.ini" +* JLink Info: Device "STM32F103C8" selected (64 KB flash, 20 KB RAM). + +JLink info: +------------ +DLL: V4.90 , compiled Jul 28 2014 10:35:20 +Firmware: J-Link ARM-OB STM32 compiled Aug 22 2012 19:52:04 +Hardware: V7.00 +S/N : 20090928 +Feature(s) : RDI,FlashDL,FlashBP,JFlash,GDBFull + +* JLink Info: Found SWD-DP with ID 0x1BA01477 +* JLink Info: Found SWD-DP with ID 0x1BA01477 +* JLink Info: Found Cortex-M3 r1p1, Little endian. +* JLink Info: FPUnit: 6 code (BP) slots and 2 literal slots +* JLink Info: TPIU fitted. +ROMTableAddr = 0xE00FF003 + +Target info: +------------ +Device: STM32F103C8 +VTarget = 3.300V +State of Pins: +TCK: 0, TDI: 0, TDO: 1, TMS: 0, TRES: 1, TRST: 1 +Hardware-Breakpoints: 6 +Software-Breakpoints: 8192 +Watchpoints: 4 +JTAG speed: 1000 kHz + +Erase Done. +Programming Done. +Verify OK. +Application running ... +Build target 'PROJECT' +compiling main.c... +..\User\main.c(40): warning: #177-D: variable "tmp" was declared but never referenced +linking... +Program Size: Code=11008 RO-data=2364 RW-data=964 ZI-data=1908 +FromELF: creating hex file... +"..\Output\Project.axf" - 0 Errors, 1 Warning(s). +Load "..\\Output\\Project.axf" +Set JLink Project File to "C:\Users\Administrator\Desktop\TX\Project\JLinkSettings.ini" +* JLink Info: Device "STM32F103C8" selected (64 KB flash, 20 KB RAM). + +JLink info: +------------ +DLL: V4.90 , compiled Jul 28 2014 10:35:20 +Firmware: J-Link ARM-OB STM32 compiled Aug 22 2012 19:52:04 +Hardware: V7.00 +S/N : 20090928 +Feature(s) : RDI,FlashDL,FlashBP,JFlash,GDBFull + +* JLink Info: Found SWD-DP with ID 0x1BA01477 +* JLink Info: Found SWD-DP with ID 0x1BA01477 +* JLink Info: Found Cortex-M3 r1p1, Little endian. +* JLink Info: FPUnit: 6 code (BP) slots and 2 literal slots +* JLink Info: TPIU fitted. +ROMTableAddr = 0xE00FF003 + +Target info: +------------ +Device: STM32F103C8 +VTarget = 3.300V +State of Pins: +TCK: 0, TDI: 0, TDO: 1, TMS: 0, TRES: 1, TRST: 1 +Hardware-Breakpoints: 6 +Software-Breakpoints: 8192 +Watchpoints: 4 +JTAG speed: 1000 kHz + +Erase Done. +Programming Done. +Verify OK. +Application running ... +Build target 'PROJECT' +compiling main.c... +..\User\main.c(40): warning: #177-D: variable "tmp" was declared but never referenced +..\User\main.c(42): warning: #177-D: variable "p" was declared but never referenced +linking... +Program Size: Code=6914 RO-data=2342 RW-data=952 ZI-data=1632 +FromELF: creating hex file... +"..\Output\Project.axf" - 0 Errors, 2 Warning(s). +Load "..\\Output\\Project.axf" +Set JLink Project File to "C:\Users\Administrator\Desktop\TX\Project\JLinkSettings.ini" +* JLink Info: Device "STM32F103C8" selected (64 KB flash, 20 KB RAM). + +JLink info: +------------ +DLL: V4.90 , compiled Jul 28 2014 10:35:20 +Firmware: J-Link ARM-OB STM32 compiled Aug 22 2012 19:52:04 +Hardware: V7.00 +S/N : 20090928 +Feature(s) : RDI,FlashDL,FlashBP,JFlash,GDBFull + +* JLink Info: Found SWD-DP with ID 0x1BA01477 +* JLink Info: Found SWD-DP with ID 0x1BA01477 +* JLink Info: Found Cortex-M3 r1p1, Little endian. +* JLink Info: FPUnit: 6 code (BP) slots and 2 literal slots +* JLink Info: TPIU fitted. +ROMTableAddr = 0xE00FF003 + +Target info: +------------ +Device: STM32F103C8 +VTarget = 3.300V +State of Pins: +TCK: 0, TDI: 0, TDO: 1, TMS: 0, TRES: 1, TRST: 1 +Hardware-Breakpoints: 6 +Software-Breakpoints: 8192 +Watchpoints: 4 +JTAG speed: 1000 kHz + +Erase Done. +Programming Done. +Verify OK. +Application running ... +Build target 'PROJECT' +compiling main.c... +..\User\main.c(42): warning: #177-D: variable "p" was declared but never referenced +linking... +Program Size: Code=8746 RO-data=2350 RW-data=952 ZI-data=1656 +FromELF: creating hex file... +"..\Output\Project.axf" - 0 Errors, 1 Warning(s). +Load "..\\Output\\Project.axf" +Set JLink Project File to "C:\Users\Administrator\Desktop\TX\Project\JLinkSettings.ini" +* JLink Info: Device "STM32F103C8" selected (64 KB flash, 20 KB RAM). + +JLink info: +------------ +DLL: V4.90 , compiled Jul 28 2014 10:35:20 +Firmware: J-Link ARM-OB STM32 compiled Aug 22 2012 19:52:04 +Hardware: V7.00 +S/N : 20090928 +Feature(s) : RDI,FlashDL,FlashBP,JFlash,GDBFull + +* JLink Info: Found SWD-DP with ID 0x1BA01477 +* JLink Info: Found SWD-DP with ID 0x1BA01477 +* JLink Info: Found Cortex-M3 r1p1, Little endian. +* JLink Info: FPUnit: 6 code (BP) slots and 2 literal slots +* JLink Info: TPIU fitted. +ROMTableAddr = 0xE00FF003 + +Target info: +------------ +Device: STM32F103C8 +VTarget = 3.300V +State of Pins: +TCK: 0, TDI: 0, TDO: 1, TMS: 0, TRES: 1, TRST: 1 +Hardware-Breakpoints: 6 +Software-Breakpoints: 8192 +Watchpoints: 4 +JTAG speed: 1000 kHz + +Erase Done. +Programming Done. +Verify OK. +Application running ... +Build target 'PROJECT' +compiling main.c... +..\User\main.c(42): warning: #177-D: variable "p" was declared but never referenced +linking... +Program Size: Code=8750 RO-data=2350 RW-data=952 ZI-data=1656 +FromELF: creating hex file... +"..\Output\Project.axf" - 0 Errors, 1 Warning(s). +Load "..\\Output\\Project.axf" +Set JLink Project File to "C:\Users\Administrator\Desktop\TX\Project\JLinkSettings.ini" +* JLink Info: Device "STM32F103C8" selected (64 KB flash, 20 KB RAM). + +JLink info: +------------ +DLL: V4.90 , compiled Jul 28 2014 10:35:20 +Firmware: J-Link ARM-OB STM32 compiled Aug 22 2012 19:52:04 +Hardware: V7.00 +S/N : 20090928 +Feature(s) : RDI,FlashDL,FlashBP,JFlash,GDBFull + +* JLink Info: Found SWD-DP with ID 0x1BA01477 +* JLink Info: Found SWD-DP with ID 0x1BA01477 +* JLink Info: Found Cortex-M3 r1p1, Little endian. +* JLink Info: FPUnit: 6 code (BP) slots and 2 literal slots +* JLink Info: TPIU fitted. +ROMTableAddr = 0xE00FF003 + +Target info: +------------ +Device: STM32F103C8 +VTarget = 3.300V +State of Pins: +TCK: 0, TDI: 0, TDO: 1, TMS: 0, TRES: 1, TRST: 1 +Hardware-Breakpoints: 6 +Software-Breakpoints: 8192 +Watchpoints: 4 +JTAG speed: 1000 kHz + +Erase Done. +Programming Done. +Verify OK. +Application running ... +Build target 'PROJECT' +compiling main.c... +linking... +Program Size: Code=8806 RO-data=2350 RW-data=952 ZI-data=1688 +FromELF: creating hex file... +"..\Output\Project.axf" - 0 Errors, 0 Warning(s). +Load "..\\Output\\Project.axf" +Set JLink Project File to "C:\Users\Administrator\Desktop\TX\Project\JLinkSettings.ini" +* JLink Info: Device "STM32F103C8" selected (64 KB flash, 20 KB RAM). + +JLink info: +------------ +DLL: V4.90 , compiled Jul 28 2014 10:35:20 +Firmware: J-Link ARM-OB STM32 compiled Aug 22 2012 19:52:04 +Hardware: V7.00 +S/N : 20090928 +Feature(s) : RDI,FlashDL,FlashBP,JFlash,GDBFull + +* JLink Info: Found SWD-DP with ID 0x1BA01477 +* JLink Info: Found SWD-DP with ID 0x1BA01477 +* JLink Info: Found Cortex-M3 r1p1, Little endian. +* JLink Info: FPUnit: 6 code (BP) slots and 2 literal slots +* JLink Info: TPIU fitted. +ROMTableAddr = 0xE00FF003 + +Target info: +------------ +Device: STM32F103C8 +VTarget = 3.300V +State of Pins: +TCK: 0, TDI: 0, TDO: 1, TMS: 0, TRES: 1, TRST: 1 +Hardware-Breakpoints: 6 +Software-Breakpoints: 8192 +Watchpoints: 4 +JTAG speed: 1000 kHz + +Erase Done. +Programming Done. +Verify OK. +Application running ... +Load "..\\Output\\Project.axf" +Set JLink Project File to "C:\Users\Administrator\Desktop\TX\Project\JLinkSettings.ini" +* JLink Info: Device "STM32F103C8" selected (64 KB flash, 20 KB RAM). + +JLink info: +------------ +DLL: V4.90 , compiled Jul 28 2014 10:35:20 +Firmware: J-Link ARM-OB STM32 compiled Aug 22 2012 19:52:04 +Hardware: V7.00 +S/N : 20090928 +Feature(s) : RDI,FlashDL,FlashBP,JFlash,GDBFull + +* JLink Info: Found SWD-DP with ID 0x1BA01477 +* JLink Info: Found SWD-DP with ID 0x1BA01477 +* JLink Info: Found Cortex-M3 r1p1, Little endian. +* JLink Info: FPUnit: 6 code (BP) slots and 2 literal slots +* JLink Info: TPIU fitted. +ROMTableAddr = 0xE00FF003 + +Target info: +------------ +Device: STM32F103C8 +VTarget = 3.300V +State of Pins: +TCK: 0, TDI: 0, TDO: 1, TMS: 0, TRES: 1, TRST: 1 +Hardware-Breakpoints: 6 +Software-Breakpoints: 8192 +Watchpoints: 4 +JTAG speed: 1000 kHz + +Erase Done. +Programming Done. +Verify OK. +Application running ... +Load "..\\Output\\Project.axf" +Set JLink Project File to "C:\Users\Administrator\Desktop\TX\Project\JLinkSettings.ini" +* JLink Info: Device "STM32F103C8" selected (64 KB flash, 20 KB RAM). + +JLink info: +------------ +DLL: V4.90 , compiled Jul 28 2014 10:35:20 +Firmware: J-Link ARM-OB STM32 compiled Aug 22 2012 19:52:04 +Hardware: V7.00 +S/N : 20090928 +Feature(s) : RDI,FlashDL,FlashBP,JFlash,GDBFull + +* JLink Info: Found SWD-DP with ID 0x1BA01477 +* JLink Info: Found SWD-DP with ID 0x1BA01477 +* JLink Info: Found Cortex-M3 r1p1, Little endian. +* JLink Info: FPUnit: 6 code (BP) slots and 2 literal slots +* JLink Info: TPIU fitted. +* JLink Info: ETM fitted. +ROMTableAddr = 0xE00FF003 + +Target info: +------------ +Device: STM32F103C8 +VTarget = 3.300V +State of Pins: +TCK: 0, TDI: 0, TDO: 1, TMS: 0, TRES: 1, TRST: 1 +Hardware-Breakpoints: 6 +Software-Breakpoints: 8192 +Watchpoints: 4 +JTAG speed: 1000 kHz + +Erase Done. +Programming Done. +Verify OK. +Application running ... diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/Project.sct b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/Project.sct new file mode 100644 index 0000000..fd82337 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/Project.sct @@ -0,0 +1,15 @@ +; ************************************************************* +; *** Scatter-Loading Description File generated by uVision *** +; ************************************************************* + +LR_IROM1 0x08000000 0x00040000 { ; load region size_region + ER_IROM1 0x08000000 0x00040000 { ; load address = execution address + *.o (RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + } + RW_IRAM1 0x20000000 0x0000C000 { ; RW data + .ANY (+RW +ZI) + } +} + diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/Project_PROJECT.dep b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/Project_PROJECT.dep new file mode 100644 index 0000000..44d1a0c --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/Project_PROJECT.dep @@ -0,0 +1,1153 @@ +Dependencies for Project 'Project', Target 'PROJECT': (DO NOT MODIFY !) +F (..\Libraries\CMSIS\startup\startup_stm32f10x_hd.s)(0x4D783CDE)(--cpu Cortex-M3 -g --apcs=interwork -IE:\HardwareProject\GeekRebot\2.Firmware\STM32_Core\Project\RTE -I"D:\Program Files\Keilv5\ARM\PACK\Keil\STM32F1xx_DFP\1.1.0\Device\Include" -I"D:\Program Files\Keilv5\ARM\CMSIS\Include" --pd "__UVISION_VERSION SETA 521" --pd "STM32F10X_HD SETA 1" --list ..\listing\startup_stm32f10x_hd.lst --xref -o ..\output\startup_stm32f10x_hd.o --depend ..\output\startup_stm32f10x_hd.d) +F (..\Libraries\CMSIS\core_cm3.c)(0x4C0C587E)(--c99 -c --cpu Cortex-M3 -g -O0 --apcs=interwork -I ..\Libraries\CMSIS -I ..\Libraries\FWlib\inc -I ..\Libraries\FWlib\src -I ..\User -I ..\DRV -I ..\HARDWARE -I ..\HARDWARE\MOTO -I ..\HARDWARE\OLED -I ..\HARDWARE\PID -IE:\HardwareProject\GeekRebot\2.Firmware\STM32_Core\Project\RTE -I"D:\Program Files\Keilv5\ARM\PACK\Keil\STM32F1xx_DFP\1.1.0\Device\Include" -I"D:\Program Files\Keilv5\ARM\CMSIS\Include" -D__UVISION_VERSION="521" -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -o ..\output\core_cm3.o --omf_browse ..\output\core_cm3.crf --depend ..\output\core_cm3.d) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdint.h)(0x574E3E26) +F (..\Libraries\CMSIS\system_stm32f10x.c)(0x4D783CB0)(--c99 -c --cpu Cortex-M3 -g -O0 --apcs=interwork -I ..\Libraries\CMSIS -I ..\Libraries\FWlib\inc -I ..\Libraries\FWlib\src -I ..\User -I ..\DRV -I ..\HARDWARE -I ..\HARDWARE\MOTO -I ..\HARDWARE\OLED -I ..\HARDWARE\PID -IE:\HardwareProject\GeekRebot\2.Firmware\STM32_Core\Project\RTE -I"D:\Program Files\Keilv5\ARM\PACK\Keil\STM32F1xx_DFP\1.1.0\Device\Include" -I"D:\Program Files\Keilv5\ARM\CMSIS\Include" -D__UVISION_VERSION="521" -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -o ..\output\system_stm32f10x.o --omf_browse ..\output\system_stm32f10x.crf --depend ..\output\system_stm32f10x.d) +I (..\Libraries\CMSIS\stm32f10x.h)(0x6443F1CB) +I (..\Libraries\CMSIS\core_cm3.h)(0x4D523B58) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdint.h)(0x574E3E26) +I (..\Libraries\CMSIS\system_stm32f10x.h)(0x4D783CAA) +I (..\User\stm32f10x_conf.h)(0x55AC648A) +I (..\Libraries\FWlib\inc\stm32f10x_adc.h)(0x522FD1A6) +I (..\Libraries\FWlib\inc\stm32f10x_bkp.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_cec.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_crc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dac.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dbgmcu.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dma.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_exti.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_flash.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_fsmc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_gpio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_i2c.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_iwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_pwr.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rcc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rtc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_sdio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_spi.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_tim.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_usart.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_wwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\misc.h)(0x4D783BB4) +F (..\Libraries\FWlib\src\misc.c)(0x4D783BB4)(--c99 -c --cpu Cortex-M3 -g -O0 --apcs=interwork -I ..\Libraries\CMSIS -I ..\Libraries\FWlib\inc -I ..\Libraries\FWlib\src -I ..\User -I ..\DRV -I ..\HARDWARE -I ..\HARDWARE\MOTO -I ..\HARDWARE\OLED -I ..\HARDWARE\PID -IE:\HardwareProject\GeekRebot\2.Firmware\STM32_Core\Project\RTE -I"D:\Program Files\Keilv5\ARM\PACK\Keil\STM32F1xx_DFP\1.1.0\Device\Include" -I"D:\Program Files\Keilv5\ARM\CMSIS\Include" -D__UVISION_VERSION="521" -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -o ..\output\misc.o --omf_browse ..\output\misc.crf --depend ..\output\misc.d) +I (..\Libraries\FWlib\inc\misc.h)(0x4D783BB4) +I (..\Libraries\CMSIS\stm32f10x.h)(0x6443F1CB) +I (..\Libraries\CMSIS\core_cm3.h)(0x4D523B58) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdint.h)(0x574E3E26) +I (..\Libraries\CMSIS\system_stm32f10x.h)(0x4D783CAA) +I (..\User\stm32f10x_conf.h)(0x55AC648A) +I (..\Libraries\FWlib\inc\stm32f10x_adc.h)(0x522FD1A6) +I (..\Libraries\FWlib\inc\stm32f10x_bkp.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_cec.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_crc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dac.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dbgmcu.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dma.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_exti.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_flash.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_fsmc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_gpio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_i2c.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_iwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_pwr.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rcc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rtc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_sdio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_spi.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_tim.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_usart.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_wwdg.h)(0x4D783BB4) +F (..\Libraries\FWlib\src\stm32f10x_adc.c)(0x4D783BB4)(--c99 -c --cpu Cortex-M3 -g -O0 --apcs=interwork -I ..\Libraries\CMSIS -I ..\Libraries\FWlib\inc -I ..\Libraries\FWlib\src -I ..\User -I ..\DRV -I ..\HARDWARE -I ..\HARDWARE\MOTO -I ..\HARDWARE\OLED -I ..\HARDWARE\PID -IE:\HardwareProject\GeekRebot\2.Firmware\STM32_Core\Project\RTE -I"D:\Program Files\Keilv5\ARM\PACK\Keil\STM32F1xx_DFP\1.1.0\Device\Include" -I"D:\Program Files\Keilv5\ARM\CMSIS\Include" -D__UVISION_VERSION="521" -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -o ..\output\stm32f10x_adc.o --omf_browse ..\output\stm32f10x_adc.crf --depend ..\output\stm32f10x_adc.d) +I (..\Libraries\FWlib\inc\stm32f10x_adc.h)(0x522FD1A6) +I (..\Libraries\CMSIS\stm32f10x.h)(0x6443F1CB) +I (..\Libraries\CMSIS\core_cm3.h)(0x4D523B58) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdint.h)(0x574E3E26) +I (..\Libraries\CMSIS\system_stm32f10x.h)(0x4D783CAA) +I (..\User\stm32f10x_conf.h)(0x55AC648A) +I (..\Libraries\FWlib\inc\stm32f10x_bkp.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_cec.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_crc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dac.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dbgmcu.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dma.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_exti.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_flash.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_fsmc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_gpio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_i2c.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_iwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_pwr.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rcc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rtc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_sdio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_spi.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_tim.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_usart.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_wwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\misc.h)(0x4D783BB4) +F (..\Libraries\FWlib\src\stm32f10x_bkp.c)(0x4D783BB4)(--c99 -c --cpu Cortex-M3 -g -O0 --apcs=interwork -I ..\Libraries\CMSIS -I ..\Libraries\FWlib\inc -I ..\Libraries\FWlib\src -I ..\User -I ..\DRV -I ..\HARDWARE -I ..\HARDWARE\MOTO -I ..\HARDWARE\OLED -I ..\HARDWARE\PID -IE:\HardwareProject\GeekRebot\2.Firmware\STM32_Core\Project\RTE -I"D:\Program Files\Keilv5\ARM\PACK\Keil\STM32F1xx_DFP\1.1.0\Device\Include" -I"D:\Program Files\Keilv5\ARM\CMSIS\Include" -D__UVISION_VERSION="521" -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -o ..\output\stm32f10x_bkp.o --omf_browse ..\output\stm32f10x_bkp.crf --depend ..\output\stm32f10x_bkp.d) +I (..\Libraries\FWlib\inc\stm32f10x_bkp.h)(0x4D783BB4) +I (..\Libraries\CMSIS\stm32f10x.h)(0x6443F1CB) +I (..\Libraries\CMSIS\core_cm3.h)(0x4D523B58) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdint.h)(0x574E3E26) +I (..\Libraries\CMSIS\system_stm32f10x.h)(0x4D783CAA) +I (..\User\stm32f10x_conf.h)(0x55AC648A) +I (..\Libraries\FWlib\inc\stm32f10x_adc.h)(0x522FD1A6) +I (..\Libraries\FWlib\inc\stm32f10x_cec.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_crc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dac.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dbgmcu.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dma.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_exti.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_flash.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_fsmc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_gpio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_i2c.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_iwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_pwr.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rcc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rtc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_sdio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_spi.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_tim.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_usart.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_wwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\misc.h)(0x4D783BB4) +F (..\Libraries\FWlib\src\stm32f10x_can.c)(0x4D783BB4)(--c99 -c --cpu Cortex-M3 -g -O0 --apcs=interwork -I ..\Libraries\CMSIS -I ..\Libraries\FWlib\inc -I ..\Libraries\FWlib\src -I ..\User -I ..\DRV -I ..\HARDWARE -I ..\HARDWARE\MOTO -I ..\HARDWARE\OLED -I ..\HARDWARE\PID -IE:\HardwareProject\GeekRebot\2.Firmware\STM32_Core\Project\RTE -I"D:\Program Files\Keilv5\ARM\PACK\Keil\STM32F1xx_DFP\1.1.0\Device\Include" -I"D:\Program Files\Keilv5\ARM\CMSIS\Include" -D__UVISION_VERSION="521" -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -o ..\output\stm32f10x_can.o --omf_browse ..\output\stm32f10x_can.crf --depend ..\output\stm32f10x_can.d) +I (..\Libraries\FWlib\inc\stm32f10x_can.h)(0x4D783BB4) +I (..\Libraries\CMSIS\stm32f10x.h)(0x6443F1CB) +I (..\Libraries\CMSIS\core_cm3.h)(0x4D523B58) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdint.h)(0x574E3E26) +I (..\Libraries\CMSIS\system_stm32f10x.h)(0x4D783CAA) +I (..\User\stm32f10x_conf.h)(0x55AC648A) +I (..\Libraries\FWlib\inc\stm32f10x_adc.h)(0x522FD1A6) +I (..\Libraries\FWlib\inc\stm32f10x_bkp.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_cec.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_crc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dac.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dbgmcu.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dma.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_exti.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_flash.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_fsmc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_gpio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_i2c.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_iwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_pwr.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rcc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rtc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_sdio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_spi.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_tim.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_usart.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_wwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\misc.h)(0x4D783BB4) +F (..\Libraries\FWlib\src\stm32f10x_cec.c)(0x4D783BB4)(--c99 -c --cpu Cortex-M3 -g -O0 --apcs=interwork -I ..\Libraries\CMSIS -I ..\Libraries\FWlib\inc -I ..\Libraries\FWlib\src -I ..\User -I ..\DRV -I ..\HARDWARE -I ..\HARDWARE\MOTO -I ..\HARDWARE\OLED -I ..\HARDWARE\PID -IE:\HardwareProject\GeekRebot\2.Firmware\STM32_Core\Project\RTE -I"D:\Program Files\Keilv5\ARM\PACK\Keil\STM32F1xx_DFP\1.1.0\Device\Include" -I"D:\Program Files\Keilv5\ARM\CMSIS\Include" -D__UVISION_VERSION="521" -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -o ..\output\stm32f10x_cec.o --omf_browse ..\output\stm32f10x_cec.crf --depend ..\output\stm32f10x_cec.d) +I (..\Libraries\FWlib\inc\stm32f10x_cec.h)(0x4D783BB4) +I (..\Libraries\CMSIS\stm32f10x.h)(0x6443F1CB) +I (..\Libraries\CMSIS\core_cm3.h)(0x4D523B58) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdint.h)(0x574E3E26) +I (..\Libraries\CMSIS\system_stm32f10x.h)(0x4D783CAA) +I (..\User\stm32f10x_conf.h)(0x55AC648A) +I (..\Libraries\FWlib\inc\stm32f10x_adc.h)(0x522FD1A6) +I (..\Libraries\FWlib\inc\stm32f10x_bkp.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_crc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dac.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dbgmcu.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dma.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_exti.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_flash.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_fsmc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_gpio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_i2c.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_iwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_pwr.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rcc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rtc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_sdio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_spi.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_tim.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_usart.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_wwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\misc.h)(0x4D783BB4) +F (..\Libraries\FWlib\src\stm32f10x_crc.c)(0x4D783BB4)(--c99 -c --cpu Cortex-M3 -g -O0 --apcs=interwork -I ..\Libraries\CMSIS -I ..\Libraries\FWlib\inc -I ..\Libraries\FWlib\src -I ..\User -I ..\DRV -I ..\HARDWARE -I ..\HARDWARE\MOTO -I ..\HARDWARE\OLED -I ..\HARDWARE\PID -IE:\HardwareProject\GeekRebot\2.Firmware\STM32_Core\Project\RTE -I"D:\Program Files\Keilv5\ARM\PACK\Keil\STM32F1xx_DFP\1.1.0\Device\Include" -I"D:\Program Files\Keilv5\ARM\CMSIS\Include" -D__UVISION_VERSION="521" -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -o ..\output\stm32f10x_crc.o --omf_browse ..\output\stm32f10x_crc.crf --depend ..\output\stm32f10x_crc.d) +I (..\Libraries\FWlib\inc\stm32f10x_crc.h)(0x4D783BB4) +I (..\Libraries\CMSIS\stm32f10x.h)(0x6443F1CB) +I (..\Libraries\CMSIS\core_cm3.h)(0x4D523B58) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdint.h)(0x574E3E26) +I (..\Libraries\CMSIS\system_stm32f10x.h)(0x4D783CAA) +I (..\User\stm32f10x_conf.h)(0x55AC648A) +I (..\Libraries\FWlib\inc\stm32f10x_adc.h)(0x522FD1A6) +I (..\Libraries\FWlib\inc\stm32f10x_bkp.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_cec.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dac.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dbgmcu.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dma.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_exti.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_flash.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_fsmc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_gpio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_i2c.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_iwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_pwr.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rcc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rtc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_sdio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_spi.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_tim.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_usart.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_wwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\misc.h)(0x4D783BB4) +F (..\Libraries\FWlib\src\stm32f10x_dac.c)(0x4D783BB4)(--c99 -c --cpu Cortex-M3 -g -O0 --apcs=interwork -I ..\Libraries\CMSIS -I ..\Libraries\FWlib\inc -I ..\Libraries\FWlib\src -I ..\User -I ..\DRV -I ..\HARDWARE -I ..\HARDWARE\MOTO -I ..\HARDWARE\OLED -I ..\HARDWARE\PID -IE:\HardwareProject\GeekRebot\2.Firmware\STM32_Core\Project\RTE -I"D:\Program Files\Keilv5\ARM\PACK\Keil\STM32F1xx_DFP\1.1.0\Device\Include" -I"D:\Program Files\Keilv5\ARM\CMSIS\Include" -D__UVISION_VERSION="521" -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -o ..\output\stm32f10x_dac.o --omf_browse ..\output\stm32f10x_dac.crf --depend ..\output\stm32f10x_dac.d) +I (..\Libraries\FWlib\inc\stm32f10x_dac.h)(0x4D783BB4) +I (..\Libraries\CMSIS\stm32f10x.h)(0x6443F1CB) +I (..\Libraries\CMSIS\core_cm3.h)(0x4D523B58) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdint.h)(0x574E3E26) +I (..\Libraries\CMSIS\system_stm32f10x.h)(0x4D783CAA) +I (..\User\stm32f10x_conf.h)(0x55AC648A) +I (..\Libraries\FWlib\inc\stm32f10x_adc.h)(0x522FD1A6) +I (..\Libraries\FWlib\inc\stm32f10x_bkp.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_cec.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_crc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dbgmcu.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dma.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_exti.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_flash.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_fsmc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_gpio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_i2c.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_iwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_pwr.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rcc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rtc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_sdio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_spi.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_tim.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_usart.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_wwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\misc.h)(0x4D783BB4) +F (..\Libraries\FWlib\src\stm32f10x_dbgmcu.c)(0x4D783BB4)(--c99 -c --cpu Cortex-M3 -g -O0 --apcs=interwork -I ..\Libraries\CMSIS -I ..\Libraries\FWlib\inc -I ..\Libraries\FWlib\src -I ..\User -I ..\DRV -I ..\HARDWARE -I ..\HARDWARE\MOTO -I ..\HARDWARE\OLED -I ..\HARDWARE\PID -IE:\HardwareProject\GeekRebot\2.Firmware\STM32_Core\Project\RTE -I"D:\Program Files\Keilv5\ARM\PACK\Keil\STM32F1xx_DFP\1.1.0\Device\Include" -I"D:\Program Files\Keilv5\ARM\CMSIS\Include" -D__UVISION_VERSION="521" -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -o ..\output\stm32f10x_dbgmcu.o --omf_browse ..\output\stm32f10x_dbgmcu.crf --depend ..\output\stm32f10x_dbgmcu.d) +I (..\Libraries\FWlib\inc\stm32f10x_dbgmcu.h)(0x4D783BB4) +I (..\Libraries\CMSIS\stm32f10x.h)(0x6443F1CB) +I (..\Libraries\CMSIS\core_cm3.h)(0x4D523B58) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdint.h)(0x574E3E26) +I (..\Libraries\CMSIS\system_stm32f10x.h)(0x4D783CAA) +I (..\User\stm32f10x_conf.h)(0x55AC648A) +I (..\Libraries\FWlib\inc\stm32f10x_adc.h)(0x522FD1A6) +I (..\Libraries\FWlib\inc\stm32f10x_bkp.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_cec.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_crc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dac.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dma.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_exti.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_flash.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_fsmc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_gpio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_i2c.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_iwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_pwr.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rcc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rtc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_sdio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_spi.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_tim.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_usart.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_wwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\misc.h)(0x4D783BB4) +F (..\Libraries\FWlib\src\stm32f10x_dma.c)(0x4D783BB4)(--c99 -c --cpu Cortex-M3 -g -O0 --apcs=interwork -I ..\Libraries\CMSIS -I ..\Libraries\FWlib\inc -I ..\Libraries\FWlib\src -I ..\User -I ..\DRV -I ..\HARDWARE -I ..\HARDWARE\MOTO -I ..\HARDWARE\OLED -I ..\HARDWARE\PID -IE:\HardwareProject\GeekRebot\2.Firmware\STM32_Core\Project\RTE -I"D:\Program Files\Keilv5\ARM\PACK\Keil\STM32F1xx_DFP\1.1.0\Device\Include" -I"D:\Program Files\Keilv5\ARM\CMSIS\Include" -D__UVISION_VERSION="521" -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -o ..\output\stm32f10x_dma.o --omf_browse ..\output\stm32f10x_dma.crf --depend ..\output\stm32f10x_dma.d) +I (..\Libraries\FWlib\inc\stm32f10x_dma.h)(0x4D783BB4) +I (..\Libraries\CMSIS\stm32f10x.h)(0x6443F1CB) +I (..\Libraries\CMSIS\core_cm3.h)(0x4D523B58) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdint.h)(0x574E3E26) +I (..\Libraries\CMSIS\system_stm32f10x.h)(0x4D783CAA) +I (..\User\stm32f10x_conf.h)(0x55AC648A) +I (..\Libraries\FWlib\inc\stm32f10x_adc.h)(0x522FD1A6) +I (..\Libraries\FWlib\inc\stm32f10x_bkp.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_cec.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_crc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dac.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dbgmcu.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_exti.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_flash.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_fsmc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_gpio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_i2c.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_iwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_pwr.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rcc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rtc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_sdio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_spi.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_tim.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_usart.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_wwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\misc.h)(0x4D783BB4) +F (..\Libraries\FWlib\src\stm32f10x_exti.c)(0x4D783BB4)(--c99 -c --cpu Cortex-M3 -g -O0 --apcs=interwork -I ..\Libraries\CMSIS -I ..\Libraries\FWlib\inc -I ..\Libraries\FWlib\src -I ..\User -I ..\DRV -I ..\HARDWARE -I ..\HARDWARE\MOTO -I ..\HARDWARE\OLED -I ..\HARDWARE\PID -IE:\HardwareProject\GeekRebot\2.Firmware\STM32_Core\Project\RTE -I"D:\Program Files\Keilv5\ARM\PACK\Keil\STM32F1xx_DFP\1.1.0\Device\Include" -I"D:\Program Files\Keilv5\ARM\CMSIS\Include" -D__UVISION_VERSION="521" -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -o ..\output\stm32f10x_exti.o --omf_browse ..\output\stm32f10x_exti.crf --depend ..\output\stm32f10x_exti.d) +I (..\Libraries\FWlib\inc\stm32f10x_exti.h)(0x4D783BB4) +I (..\Libraries\CMSIS\stm32f10x.h)(0x6443F1CB) +I (..\Libraries\CMSIS\core_cm3.h)(0x4D523B58) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdint.h)(0x574E3E26) +I (..\Libraries\CMSIS\system_stm32f10x.h)(0x4D783CAA) +I (..\User\stm32f10x_conf.h)(0x55AC648A) +I (..\Libraries\FWlib\inc\stm32f10x_adc.h)(0x522FD1A6) +I (..\Libraries\FWlib\inc\stm32f10x_bkp.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_cec.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_crc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dac.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dbgmcu.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dma.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_flash.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_fsmc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_gpio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_i2c.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_iwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_pwr.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rcc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rtc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_sdio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_spi.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_tim.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_usart.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_wwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\misc.h)(0x4D783BB4) +F (..\Libraries\FWlib\src\stm32f10x_flash.c)(0x4D783BB4)(--c99 -c --cpu Cortex-M3 -g -O0 --apcs=interwork -I ..\Libraries\CMSIS -I ..\Libraries\FWlib\inc -I ..\Libraries\FWlib\src -I ..\User -I ..\DRV -I ..\HARDWARE -I ..\HARDWARE\MOTO -I ..\HARDWARE\OLED -I ..\HARDWARE\PID -IE:\HardwareProject\GeekRebot\2.Firmware\STM32_Core\Project\RTE -I"D:\Program Files\Keilv5\ARM\PACK\Keil\STM32F1xx_DFP\1.1.0\Device\Include" -I"D:\Program Files\Keilv5\ARM\CMSIS\Include" -D__UVISION_VERSION="521" -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -o ..\output\stm32f10x_flash.o --omf_browse ..\output\stm32f10x_flash.crf --depend ..\output\stm32f10x_flash.d) +I (..\Libraries\FWlib\inc\stm32f10x_flash.h)(0x4D783BB4) +I (..\Libraries\CMSIS\stm32f10x.h)(0x6443F1CB) +I (..\Libraries\CMSIS\core_cm3.h)(0x4D523B58) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdint.h)(0x574E3E26) +I (..\Libraries\CMSIS\system_stm32f10x.h)(0x4D783CAA) +I (..\User\stm32f10x_conf.h)(0x55AC648A) +I (..\Libraries\FWlib\inc\stm32f10x_adc.h)(0x522FD1A6) +I (..\Libraries\FWlib\inc\stm32f10x_bkp.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_cec.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_crc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dac.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dbgmcu.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dma.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_exti.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_fsmc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_gpio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_i2c.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_iwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_pwr.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rcc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rtc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_sdio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_spi.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_tim.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_usart.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_wwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\misc.h)(0x4D783BB4) +F (..\Libraries\FWlib\src\stm32f10x_fsmc.c)(0x4D783BB4)(--c99 -c --cpu Cortex-M3 -g -O0 --apcs=interwork -I ..\Libraries\CMSIS -I ..\Libraries\FWlib\inc -I ..\Libraries\FWlib\src -I ..\User -I ..\DRV -I ..\HARDWARE -I ..\HARDWARE\MOTO -I ..\HARDWARE\OLED -I ..\HARDWARE\PID -IE:\HardwareProject\GeekRebot\2.Firmware\STM32_Core\Project\RTE -I"D:\Program Files\Keilv5\ARM\PACK\Keil\STM32F1xx_DFP\1.1.0\Device\Include" -I"D:\Program Files\Keilv5\ARM\CMSIS\Include" -D__UVISION_VERSION="521" -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -o ..\output\stm32f10x_fsmc.o --omf_browse ..\output\stm32f10x_fsmc.crf --depend ..\output\stm32f10x_fsmc.d) +I (..\Libraries\FWlib\inc\stm32f10x_fsmc.h)(0x4D783BB4) +I (..\Libraries\CMSIS\stm32f10x.h)(0x6443F1CB) +I (..\Libraries\CMSIS\core_cm3.h)(0x4D523B58) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdint.h)(0x574E3E26) +I (..\Libraries\CMSIS\system_stm32f10x.h)(0x4D783CAA) +I (..\User\stm32f10x_conf.h)(0x55AC648A) +I (..\Libraries\FWlib\inc\stm32f10x_adc.h)(0x522FD1A6) +I (..\Libraries\FWlib\inc\stm32f10x_bkp.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_cec.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_crc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dac.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dbgmcu.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dma.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_exti.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_flash.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_gpio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_i2c.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_iwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_pwr.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rcc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rtc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_sdio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_spi.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_tim.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_usart.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_wwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\misc.h)(0x4D783BB4) +F (..\Libraries\FWlib\src\stm32f10x_gpio.c)(0x526E3B02)(--c99 -c --cpu Cortex-M3 -g -O0 --apcs=interwork -I ..\Libraries\CMSIS -I ..\Libraries\FWlib\inc -I ..\Libraries\FWlib\src -I ..\User -I ..\DRV -I ..\HARDWARE -I ..\HARDWARE\MOTO -I ..\HARDWARE\OLED -I ..\HARDWARE\PID -IE:\HardwareProject\GeekRebot\2.Firmware\STM32_Core\Project\RTE -I"D:\Program Files\Keilv5\ARM\PACK\Keil\STM32F1xx_DFP\1.1.0\Device\Include" -I"D:\Program Files\Keilv5\ARM\CMSIS\Include" -D__UVISION_VERSION="521" -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -o ..\output\stm32f10x_gpio.o --omf_browse ..\output\stm32f10x_gpio.crf --depend ..\output\stm32f10x_gpio.d) +I (..\Libraries\FWlib\inc\stm32f10x_gpio.h)(0x4D783BB4) +I (..\Libraries\CMSIS\stm32f10x.h)(0x6443F1CB) +I (..\Libraries\CMSIS\core_cm3.h)(0x4D523B58) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdint.h)(0x574E3E26) +I (..\Libraries\CMSIS\system_stm32f10x.h)(0x4D783CAA) +I (..\User\stm32f10x_conf.h)(0x55AC648A) +I (..\Libraries\FWlib\inc\stm32f10x_adc.h)(0x522FD1A6) +I (..\Libraries\FWlib\inc\stm32f10x_bkp.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_cec.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_crc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dac.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dbgmcu.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dma.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_exti.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_flash.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_fsmc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_i2c.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_iwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_pwr.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rcc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rtc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_sdio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_spi.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_tim.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_usart.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_wwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\misc.h)(0x4D783BB4) +F (..\Libraries\FWlib\src\stm32f10x_i2c.c)(0x4D783BB4)(--c99 -c --cpu Cortex-M3 -g -O0 --apcs=interwork -I ..\Libraries\CMSIS -I ..\Libraries\FWlib\inc -I ..\Libraries\FWlib\src -I ..\User -I ..\DRV -I ..\HARDWARE -I ..\HARDWARE\MOTO -I ..\HARDWARE\OLED -I ..\HARDWARE\PID -IE:\HardwareProject\GeekRebot\2.Firmware\STM32_Core\Project\RTE -I"D:\Program Files\Keilv5\ARM\PACK\Keil\STM32F1xx_DFP\1.1.0\Device\Include" -I"D:\Program Files\Keilv5\ARM\CMSIS\Include" -D__UVISION_VERSION="521" -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -o ..\output\stm32f10x_i2c.o --omf_browse ..\output\stm32f10x_i2c.crf --depend ..\output\stm32f10x_i2c.d) +I (..\Libraries\FWlib\inc\stm32f10x_i2c.h)(0x4D783BB4) +I (..\Libraries\CMSIS\stm32f10x.h)(0x6443F1CB) +I (..\Libraries\CMSIS\core_cm3.h)(0x4D523B58) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdint.h)(0x574E3E26) +I (..\Libraries\CMSIS\system_stm32f10x.h)(0x4D783CAA) +I (..\User\stm32f10x_conf.h)(0x55AC648A) +I (..\Libraries\FWlib\inc\stm32f10x_adc.h)(0x522FD1A6) +I (..\Libraries\FWlib\inc\stm32f10x_bkp.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_cec.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_crc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dac.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dbgmcu.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dma.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_exti.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_flash.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_fsmc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_gpio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_iwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_pwr.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rcc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rtc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_sdio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_spi.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_tim.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_usart.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_wwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\misc.h)(0x4D783BB4) +F (..\Libraries\FWlib\src\stm32f10x_iwdg.c)(0x4D783BB4)(--c99 -c --cpu Cortex-M3 -g -O0 --apcs=interwork -I ..\Libraries\CMSIS -I ..\Libraries\FWlib\inc -I ..\Libraries\FWlib\src -I ..\User -I ..\DRV -I ..\HARDWARE -I ..\HARDWARE\MOTO -I ..\HARDWARE\OLED -I ..\HARDWARE\PID -IE:\HardwareProject\GeekRebot\2.Firmware\STM32_Core\Project\RTE -I"D:\Program Files\Keilv5\ARM\PACK\Keil\STM32F1xx_DFP\1.1.0\Device\Include" -I"D:\Program Files\Keilv5\ARM\CMSIS\Include" -D__UVISION_VERSION="521" -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -o ..\output\stm32f10x_iwdg.o --omf_browse ..\output\stm32f10x_iwdg.crf --depend ..\output\stm32f10x_iwdg.d) +I (..\Libraries\FWlib\inc\stm32f10x_iwdg.h)(0x4D783BB4) +I (..\Libraries\CMSIS\stm32f10x.h)(0x6443F1CB) +I (..\Libraries\CMSIS\core_cm3.h)(0x4D523B58) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdint.h)(0x574E3E26) +I (..\Libraries\CMSIS\system_stm32f10x.h)(0x4D783CAA) +I (..\User\stm32f10x_conf.h)(0x55AC648A) +I (..\Libraries\FWlib\inc\stm32f10x_adc.h)(0x522FD1A6) +I (..\Libraries\FWlib\inc\stm32f10x_bkp.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_cec.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_crc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dac.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dbgmcu.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dma.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_exti.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_flash.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_fsmc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_gpio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_i2c.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_pwr.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rcc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rtc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_sdio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_spi.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_tim.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_usart.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_wwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\misc.h)(0x4D783BB4) +F (..\Libraries\FWlib\src\stm32f10x_pwr.c)(0x4D783BB4)(--c99 -c --cpu Cortex-M3 -g -O0 --apcs=interwork -I ..\Libraries\CMSIS -I ..\Libraries\FWlib\inc -I ..\Libraries\FWlib\src -I ..\User -I ..\DRV -I ..\HARDWARE -I ..\HARDWARE\MOTO -I ..\HARDWARE\OLED -I ..\HARDWARE\PID -IE:\HardwareProject\GeekRebot\2.Firmware\STM32_Core\Project\RTE -I"D:\Program Files\Keilv5\ARM\PACK\Keil\STM32F1xx_DFP\1.1.0\Device\Include" -I"D:\Program Files\Keilv5\ARM\CMSIS\Include" -D__UVISION_VERSION="521" -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -o ..\output\stm32f10x_pwr.o --omf_browse ..\output\stm32f10x_pwr.crf --depend ..\output\stm32f10x_pwr.d) +I (..\Libraries\FWlib\inc\stm32f10x_pwr.h)(0x4D783BB4) +I (..\Libraries\CMSIS\stm32f10x.h)(0x6443F1CB) +I (..\Libraries\CMSIS\core_cm3.h)(0x4D523B58) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdint.h)(0x574E3E26) +I (..\Libraries\CMSIS\system_stm32f10x.h)(0x4D783CAA) +I (..\User\stm32f10x_conf.h)(0x55AC648A) +I (..\Libraries\FWlib\inc\stm32f10x_adc.h)(0x522FD1A6) +I (..\Libraries\FWlib\inc\stm32f10x_bkp.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_cec.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_crc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dac.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dbgmcu.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dma.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_exti.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_flash.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_fsmc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_gpio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_i2c.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_iwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rcc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rtc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_sdio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_spi.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_tim.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_usart.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_wwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\misc.h)(0x4D783BB4) +F (..\Libraries\FWlib\src\stm32f10x_rcc.c)(0x4D783BB4)(--c99 -c --cpu Cortex-M3 -g -O0 --apcs=interwork -I ..\Libraries\CMSIS -I ..\Libraries\FWlib\inc -I ..\Libraries\FWlib\src -I ..\User -I ..\DRV -I ..\HARDWARE -I ..\HARDWARE\MOTO -I ..\HARDWARE\OLED -I ..\HARDWARE\PID -IE:\HardwareProject\GeekRebot\2.Firmware\STM32_Core\Project\RTE -I"D:\Program Files\Keilv5\ARM\PACK\Keil\STM32F1xx_DFP\1.1.0\Device\Include" -I"D:\Program Files\Keilv5\ARM\CMSIS\Include" -D__UVISION_VERSION="521" -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -o ..\output\stm32f10x_rcc.o --omf_browse ..\output\stm32f10x_rcc.crf --depend ..\output\stm32f10x_rcc.d) +I (..\Libraries\FWlib\inc\stm32f10x_rcc.h)(0x4D783BB4) +I (..\Libraries\CMSIS\stm32f10x.h)(0x6443F1CB) +I (..\Libraries\CMSIS\core_cm3.h)(0x4D523B58) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdint.h)(0x574E3E26) +I (..\Libraries\CMSIS\system_stm32f10x.h)(0x4D783CAA) +I (..\User\stm32f10x_conf.h)(0x55AC648A) +I (..\Libraries\FWlib\inc\stm32f10x_adc.h)(0x522FD1A6) +I (..\Libraries\FWlib\inc\stm32f10x_bkp.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_cec.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_crc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dac.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dbgmcu.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dma.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_exti.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_flash.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_fsmc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_gpio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_i2c.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_iwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_pwr.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rtc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_sdio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_spi.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_tim.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_usart.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_wwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\misc.h)(0x4D783BB4) +F (..\Libraries\FWlib\src\stm32f10x_rtc.c)(0x4D783BB4)(--c99 -c --cpu Cortex-M3 -g -O0 --apcs=interwork -I ..\Libraries\CMSIS -I ..\Libraries\FWlib\inc -I ..\Libraries\FWlib\src -I ..\User -I ..\DRV -I ..\HARDWARE -I ..\HARDWARE\MOTO -I ..\HARDWARE\OLED -I ..\HARDWARE\PID -IE:\HardwareProject\GeekRebot\2.Firmware\STM32_Core\Project\RTE -I"D:\Program Files\Keilv5\ARM\PACK\Keil\STM32F1xx_DFP\1.1.0\Device\Include" -I"D:\Program Files\Keilv5\ARM\CMSIS\Include" -D__UVISION_VERSION="521" -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -o ..\output\stm32f10x_rtc.o --omf_browse ..\output\stm32f10x_rtc.crf --depend ..\output\stm32f10x_rtc.d) +I (..\Libraries\FWlib\inc\stm32f10x_rtc.h)(0x4D783BB4) +I (..\Libraries\CMSIS\stm32f10x.h)(0x6443F1CB) +I (..\Libraries\CMSIS\core_cm3.h)(0x4D523B58) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdint.h)(0x574E3E26) +I (..\Libraries\CMSIS\system_stm32f10x.h)(0x4D783CAA) +I (..\User\stm32f10x_conf.h)(0x55AC648A) +I (..\Libraries\FWlib\inc\stm32f10x_adc.h)(0x522FD1A6) +I (..\Libraries\FWlib\inc\stm32f10x_bkp.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_cec.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_crc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dac.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dbgmcu.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dma.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_exti.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_flash.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_fsmc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_gpio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_i2c.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_iwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_pwr.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rcc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_sdio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_spi.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_tim.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_usart.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_wwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\misc.h)(0x4D783BB4) +F (..\Libraries\FWlib\src\stm32f10x_sdio.c)(0x4D783BB4)(--c99 -c --cpu Cortex-M3 -g -O0 --apcs=interwork -I ..\Libraries\CMSIS -I ..\Libraries\FWlib\inc -I ..\Libraries\FWlib\src -I ..\User -I ..\DRV -I ..\HARDWARE -I ..\HARDWARE\MOTO -I ..\HARDWARE\OLED -I ..\HARDWARE\PID -IE:\HardwareProject\GeekRebot\2.Firmware\STM32_Core\Project\RTE -I"D:\Program Files\Keilv5\ARM\PACK\Keil\STM32F1xx_DFP\1.1.0\Device\Include" -I"D:\Program Files\Keilv5\ARM\CMSIS\Include" -D__UVISION_VERSION="521" -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -o ..\output\stm32f10x_sdio.o --omf_browse ..\output\stm32f10x_sdio.crf --depend ..\output\stm32f10x_sdio.d) +I (..\Libraries\FWlib\inc\stm32f10x_sdio.h)(0x4D783BB4) +I (..\Libraries\CMSIS\stm32f10x.h)(0x6443F1CB) +I (..\Libraries\CMSIS\core_cm3.h)(0x4D523B58) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdint.h)(0x574E3E26) +I (..\Libraries\CMSIS\system_stm32f10x.h)(0x4D783CAA) +I (..\User\stm32f10x_conf.h)(0x55AC648A) +I (..\Libraries\FWlib\inc\stm32f10x_adc.h)(0x522FD1A6) +I (..\Libraries\FWlib\inc\stm32f10x_bkp.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_cec.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_crc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dac.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dbgmcu.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dma.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_exti.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_flash.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_fsmc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_gpio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_i2c.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_iwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_pwr.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rcc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rtc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_spi.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_tim.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_usart.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_wwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\misc.h)(0x4D783BB4) +F (..\Libraries\FWlib\src\stm32f10x_spi.c)(0x4D783BB4)(--c99 -c --cpu Cortex-M3 -g -O0 --apcs=interwork -I ..\Libraries\CMSIS -I ..\Libraries\FWlib\inc -I ..\Libraries\FWlib\src -I ..\User -I ..\DRV -I ..\HARDWARE -I ..\HARDWARE\MOTO -I ..\HARDWARE\OLED -I ..\HARDWARE\PID -IE:\HardwareProject\GeekRebot\2.Firmware\STM32_Core\Project\RTE -I"D:\Program Files\Keilv5\ARM\PACK\Keil\STM32F1xx_DFP\1.1.0\Device\Include" -I"D:\Program Files\Keilv5\ARM\CMSIS\Include" -D__UVISION_VERSION="521" -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -o ..\output\stm32f10x_spi.o --omf_browse ..\output\stm32f10x_spi.crf --depend ..\output\stm32f10x_spi.d) +I (..\Libraries\FWlib\inc\stm32f10x_spi.h)(0x4D783BB4) +I (..\Libraries\CMSIS\stm32f10x.h)(0x6443F1CB) +I (..\Libraries\CMSIS\core_cm3.h)(0x4D523B58) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdint.h)(0x574E3E26) +I (..\Libraries\CMSIS\system_stm32f10x.h)(0x4D783CAA) +I (..\User\stm32f10x_conf.h)(0x55AC648A) +I (..\Libraries\FWlib\inc\stm32f10x_adc.h)(0x522FD1A6) +I (..\Libraries\FWlib\inc\stm32f10x_bkp.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_cec.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_crc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dac.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dbgmcu.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dma.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_exti.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_flash.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_fsmc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_gpio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_i2c.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_iwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_pwr.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rcc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rtc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_sdio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_tim.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_usart.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_wwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\misc.h)(0x4D783BB4) +F (..\Libraries\FWlib\src\stm32f10x_tim.c)(0x4D783BB4)(--c99 -c --cpu Cortex-M3 -g -O0 --apcs=interwork -I ..\Libraries\CMSIS -I ..\Libraries\FWlib\inc -I ..\Libraries\FWlib\src -I ..\User -I ..\DRV -I ..\HARDWARE -I ..\HARDWARE\MOTO -I ..\HARDWARE\OLED -I ..\HARDWARE\PID -IE:\HardwareProject\GeekRebot\2.Firmware\STM32_Core\Project\RTE -I"D:\Program Files\Keilv5\ARM\PACK\Keil\STM32F1xx_DFP\1.1.0\Device\Include" -I"D:\Program Files\Keilv5\ARM\CMSIS\Include" -D__UVISION_VERSION="521" -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -o ..\output\stm32f10x_tim.o --omf_browse ..\output\stm32f10x_tim.crf --depend ..\output\stm32f10x_tim.d) +I (..\Libraries\FWlib\inc\stm32f10x_tim.h)(0x4D783BB4) +I (..\Libraries\CMSIS\stm32f10x.h)(0x6443F1CB) +I (..\Libraries\CMSIS\core_cm3.h)(0x4D523B58) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdint.h)(0x574E3E26) +I (..\Libraries\CMSIS\system_stm32f10x.h)(0x4D783CAA) +I (..\User\stm32f10x_conf.h)(0x55AC648A) +I (..\Libraries\FWlib\inc\stm32f10x_adc.h)(0x522FD1A6) +I (..\Libraries\FWlib\inc\stm32f10x_bkp.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_cec.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_crc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dac.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dbgmcu.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dma.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_exti.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_flash.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_fsmc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_gpio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_i2c.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_iwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_pwr.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rcc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rtc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_sdio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_spi.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_usart.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_wwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\misc.h)(0x4D783BB4) +F (..\Libraries\FWlib\src\stm32f10x_usart.c)(0x4D783BB4)(--c99 -c --cpu Cortex-M3 -g -O0 --apcs=interwork -I ..\Libraries\CMSIS -I ..\Libraries\FWlib\inc -I ..\Libraries\FWlib\src -I ..\User -I ..\DRV -I ..\HARDWARE -I ..\HARDWARE\MOTO -I ..\HARDWARE\OLED -I ..\HARDWARE\PID -IE:\HardwareProject\GeekRebot\2.Firmware\STM32_Core\Project\RTE -I"D:\Program Files\Keilv5\ARM\PACK\Keil\STM32F1xx_DFP\1.1.0\Device\Include" -I"D:\Program Files\Keilv5\ARM\CMSIS\Include" -D__UVISION_VERSION="521" -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -o ..\output\stm32f10x_usart.o --omf_browse ..\output\stm32f10x_usart.crf --depend ..\output\stm32f10x_usart.d) +I (..\Libraries\FWlib\inc\stm32f10x_usart.h)(0x4D783BB4) +I (..\Libraries\CMSIS\stm32f10x.h)(0x6443F1CB) +I (..\Libraries\CMSIS\core_cm3.h)(0x4D523B58) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdint.h)(0x574E3E26) +I (..\Libraries\CMSIS\system_stm32f10x.h)(0x4D783CAA) +I (..\User\stm32f10x_conf.h)(0x55AC648A) +I (..\Libraries\FWlib\inc\stm32f10x_adc.h)(0x522FD1A6) +I (..\Libraries\FWlib\inc\stm32f10x_bkp.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_cec.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_crc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dac.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dbgmcu.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dma.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_exti.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_flash.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_fsmc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_gpio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_i2c.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_iwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_pwr.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rcc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rtc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_sdio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_spi.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_tim.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_wwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\misc.h)(0x4D783BB4) +F (..\Libraries\FWlib\src\stm32f10x_wwdg.c)(0x4D783BB4)(--c99 -c --cpu Cortex-M3 -g -O0 --apcs=interwork -I ..\Libraries\CMSIS -I ..\Libraries\FWlib\inc -I ..\Libraries\FWlib\src -I ..\User -I ..\DRV -I ..\HARDWARE -I ..\HARDWARE\MOTO -I ..\HARDWARE\OLED -I ..\HARDWARE\PID -IE:\HardwareProject\GeekRebot\2.Firmware\STM32_Core\Project\RTE -I"D:\Program Files\Keilv5\ARM\PACK\Keil\STM32F1xx_DFP\1.1.0\Device\Include" -I"D:\Program Files\Keilv5\ARM\CMSIS\Include" -D__UVISION_VERSION="521" -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -o ..\output\stm32f10x_wwdg.o --omf_browse ..\output\stm32f10x_wwdg.crf --depend ..\output\stm32f10x_wwdg.d) +I (..\Libraries\FWlib\inc\stm32f10x_wwdg.h)(0x4D783BB4) +I (..\Libraries\CMSIS\stm32f10x.h)(0x6443F1CB) +I (..\Libraries\CMSIS\core_cm3.h)(0x4D523B58) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdint.h)(0x574E3E26) +I (..\Libraries\CMSIS\system_stm32f10x.h)(0x4D783CAA) +I (..\User\stm32f10x_conf.h)(0x55AC648A) +I (..\Libraries\FWlib\inc\stm32f10x_adc.h)(0x522FD1A6) +I (..\Libraries\FWlib\inc\stm32f10x_bkp.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_cec.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_crc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dac.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dbgmcu.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dma.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_exti.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_flash.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_fsmc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_gpio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_i2c.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_iwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_pwr.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rcc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rtc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_sdio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_spi.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_tim.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_usart.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\misc.h)(0x4D783BB4) +F (..\DRV\bsp_sys.c)(0x6443F4D4)(--c99 -c --cpu Cortex-M3 -g -O0 --apcs=interwork -I ..\Libraries\CMSIS -I ..\Libraries\FWlib\inc -I ..\Libraries\FWlib\src -I ..\User -I ..\DRV -I ..\HARDWARE -I ..\HARDWARE\MOTO -I ..\HARDWARE\OLED -I ..\HARDWARE\PID -IE:\HardwareProject\GeekRebot\2.Firmware\STM32_Core\Project\RTE -I"D:\Program Files\Keilv5\ARM\PACK\Keil\STM32F1xx_DFP\1.1.0\Device\Include" -I"D:\Program Files\Keilv5\ARM\CMSIS\Include" -D__UVISION_VERSION="521" -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -o ..\output\bsp_sys.o --omf_browse ..\output\bsp_sys.crf --depend ..\output\bsp_sys.d) +I (..\DRV\bsp_sys.h)(0x6443F402) +I (..\Libraries\CMSIS\stm32f10x.h)(0x6443F1CB) +I (..\Libraries\CMSIS\core_cm3.h)(0x4D523B58) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdint.h)(0x574E3E26) +I (..\Libraries\CMSIS\system_stm32f10x.h)(0x4D783CAA) +I (..\User\stm32f10x_conf.h)(0x55AC648A) +I (..\Libraries\FWlib\inc\stm32f10x_adc.h)(0x522FD1A6) +I (..\Libraries\FWlib\inc\stm32f10x_bkp.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_cec.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_crc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dac.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dbgmcu.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dma.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_exti.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_flash.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_fsmc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_gpio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_i2c.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_iwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_pwr.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rcc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rtc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_sdio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_spi.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_tim.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_usart.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_wwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\misc.h)(0x4D783BB4) +I (..\DRV\delay.h)(0x5898300E) +I (..\DRV\bsp_GPIO.h)(0x5E3CF445) +I (..\DRV\bsp_nvic.h)(0x5E36CB70) +I (..\DRV\bsp_usart.h)(0x589A9760) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdio.h)(0x574E3E26) +I (..\DRV\bsp_timer.h)(0x5E7A3FBF) +I (..\DRV\bsp_iic.h)(0x589A930A) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\inttypes.h)(0x574E3E26) +I (..\HARDWARE\OLED\oled.h)(0x589AE23E) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdlib.h)(0x574E3E26) +I (..\HARDWARE\MOTO\moto.h)(0x5E367DF8) +I (..\HARDWARE\PID\pid.h)(0x5E5A9032) +F (..\DRV\bsp_GPIO.c)(0x5E3CF81A)(--c99 -c --cpu Cortex-M3 -g -O0 --apcs=interwork -I ..\Libraries\CMSIS -I ..\Libraries\FWlib\inc -I ..\Libraries\FWlib\src -I ..\User -I ..\DRV -I ..\HARDWARE -I ..\HARDWARE\MOTO -I ..\HARDWARE\OLED -I ..\HARDWARE\PID -IE:\HardwareProject\GeekRebot\2.Firmware\STM32_Core\Project\RTE -I"D:\Program Files\Keilv5\ARM\PACK\Keil\STM32F1xx_DFP\1.1.0\Device\Include" -I"D:\Program Files\Keilv5\ARM\CMSIS\Include" -D__UVISION_VERSION="521" -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -o ..\output\bsp_gpio.o --omf_browse ..\output\bsp_gpio.crf --depend ..\output\bsp_gpio.d) +I (..\DRV\bsp_GPIO.h)(0x5E3CF445) +I (..\Libraries\CMSIS\stm32f10x.h)(0x6443F1CB) +I (..\Libraries\CMSIS\core_cm3.h)(0x4D523B58) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdint.h)(0x574E3E26) +I (..\Libraries\CMSIS\system_stm32f10x.h)(0x4D783CAA) +I (..\User\stm32f10x_conf.h)(0x55AC648A) +I (..\Libraries\FWlib\inc\stm32f10x_adc.h)(0x522FD1A6) +I (..\Libraries\FWlib\inc\stm32f10x_bkp.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_cec.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_crc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dac.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dbgmcu.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dma.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_exti.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_flash.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_fsmc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_gpio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_i2c.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_iwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_pwr.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rcc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rtc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_sdio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_spi.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_tim.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_usart.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_wwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\misc.h)(0x4D783BB4) +F (..\DRV\bsp_NVIC.C)(0x642ECEFB)(--c99 -c --cpu Cortex-M3 -g -O0 --apcs=interwork -I ..\Libraries\CMSIS -I ..\Libraries\FWlib\inc -I ..\Libraries\FWlib\src -I ..\User -I ..\DRV -I ..\HARDWARE -I ..\HARDWARE\MOTO -I ..\HARDWARE\OLED -I ..\HARDWARE\PID -IE:\HardwareProject\GeekRebot\2.Firmware\STM32_Core\Project\RTE -I"D:\Program Files\Keilv5\ARM\PACK\Keil\STM32F1xx_DFP\1.1.0\Device\Include" -I"D:\Program Files\Keilv5\ARM\CMSIS\Include" -D__UVISION_VERSION="521" -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -o ..\output\bsp_nvic.o --omf_browse ..\output\bsp_nvic.crf --depend ..\output\bsp_nvic.d) +I (..\DRV\bsp_nvic.h)(0x5E36CB70) +I (..\Libraries\CMSIS\stm32f10x.h)(0x6443F1CB) +I (..\Libraries\CMSIS\core_cm3.h)(0x4D523B58) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdint.h)(0x574E3E26) +I (..\Libraries\CMSIS\system_stm32f10x.h)(0x4D783CAA) +I (..\User\stm32f10x_conf.h)(0x55AC648A) +I (..\Libraries\FWlib\inc\stm32f10x_adc.h)(0x522FD1A6) +I (..\Libraries\FWlib\inc\stm32f10x_bkp.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_cec.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_crc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dac.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dbgmcu.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dma.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_exti.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_flash.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_fsmc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_gpio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_i2c.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_iwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_pwr.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rcc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rtc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_sdio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_spi.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_tim.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_usart.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_wwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\misc.h)(0x4D783BB4) +F (..\DRV\bsp_usart.c)(0x589A975E)(--c99 -c --cpu Cortex-M3 -g -O0 --apcs=interwork -I ..\Libraries\CMSIS -I ..\Libraries\FWlib\inc -I ..\Libraries\FWlib\src -I ..\User -I ..\DRV -I ..\HARDWARE -I ..\HARDWARE\MOTO -I ..\HARDWARE\OLED -I ..\HARDWARE\PID -IE:\HardwareProject\GeekRebot\2.Firmware\STM32_Core\Project\RTE -I"D:\Program Files\Keilv5\ARM\PACK\Keil\STM32F1xx_DFP\1.1.0\Device\Include" -I"D:\Program Files\Keilv5\ARM\CMSIS\Include" -D__UVISION_VERSION="521" -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -o ..\output\bsp_usart.o --omf_browse ..\output\bsp_usart.crf --depend ..\output\bsp_usart.d) +I (..\DRV\bsp_usart.h)(0x589A9760) +I (..\Libraries\CMSIS\stm32f10x.h)(0x6443F1CB) +I (..\Libraries\CMSIS\core_cm3.h)(0x4D523B58) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdint.h)(0x574E3E26) +I (..\Libraries\CMSIS\system_stm32f10x.h)(0x4D783CAA) +I (..\User\stm32f10x_conf.h)(0x55AC648A) +I (..\Libraries\FWlib\inc\stm32f10x_adc.h)(0x522FD1A6) +I (..\Libraries\FWlib\inc\stm32f10x_bkp.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_cec.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_crc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dac.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dbgmcu.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dma.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_exti.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_flash.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_fsmc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_gpio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_i2c.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_iwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_pwr.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rcc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rtc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_sdio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_spi.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_tim.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_usart.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_wwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\misc.h)(0x4D783BB4) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdio.h)(0x574E3E26) +F (..\DRV\delay.c)(0x589ADF5E)(--c99 -c --cpu Cortex-M3 -g -O0 --apcs=interwork -I ..\Libraries\CMSIS -I ..\Libraries\FWlib\inc -I ..\Libraries\FWlib\src -I ..\User -I ..\DRV -I ..\HARDWARE -I ..\HARDWARE\MOTO -I ..\HARDWARE\OLED -I ..\HARDWARE\PID -IE:\HardwareProject\GeekRebot\2.Firmware\STM32_Core\Project\RTE -I"D:\Program Files\Keilv5\ARM\PACK\Keil\STM32F1xx_DFP\1.1.0\Device\Include" -I"D:\Program Files\Keilv5\ARM\CMSIS\Include" -D__UVISION_VERSION="521" -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -o ..\output\delay.o --omf_browse ..\output\delay.crf --depend ..\output\delay.d) +I (..\DRV\delay.h)(0x5898300E) +I (..\Libraries\CMSIS\stm32f10x.h)(0x6443F1CB) +I (..\Libraries\CMSIS\core_cm3.h)(0x4D523B58) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdint.h)(0x574E3E26) +I (..\Libraries\CMSIS\system_stm32f10x.h)(0x4D783CAA) +I (..\User\stm32f10x_conf.h)(0x55AC648A) +I (..\Libraries\FWlib\inc\stm32f10x_adc.h)(0x522FD1A6) +I (..\Libraries\FWlib\inc\stm32f10x_bkp.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_cec.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_crc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dac.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dbgmcu.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dma.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_exti.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_flash.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_fsmc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_gpio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_i2c.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_iwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_pwr.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rcc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rtc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_sdio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_spi.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_tim.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_usart.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_wwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\misc.h)(0x4D783BB4) +F (..\DRV\bsp_iic.c)(0x642EE37C)(--c99 -c --cpu Cortex-M3 -g -O0 --apcs=interwork -I ..\Libraries\CMSIS -I ..\Libraries\FWlib\inc -I ..\Libraries\FWlib\src -I ..\User -I ..\DRV -I ..\HARDWARE -I ..\HARDWARE\MOTO -I ..\HARDWARE\OLED -I ..\HARDWARE\PID -IE:\HardwareProject\GeekRebot\2.Firmware\STM32_Core\Project\RTE -I"D:\Program Files\Keilv5\ARM\PACK\Keil\STM32F1xx_DFP\1.1.0\Device\Include" -I"D:\Program Files\Keilv5\ARM\CMSIS\Include" -D__UVISION_VERSION="521" -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -o ..\output\bsp_iic.o --omf_browse ..\output\bsp_iic.crf --depend ..\output\bsp_iic.d) +I (..\DRV\bsp_iic.h)(0x589A930A) +I (..\Libraries\CMSIS\stm32f10x.h)(0x6443F1CB) +I (..\Libraries\CMSIS\core_cm3.h)(0x4D523B58) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdint.h)(0x574E3E26) +I (..\Libraries\CMSIS\system_stm32f10x.h)(0x4D783CAA) +I (..\User\stm32f10x_conf.h)(0x55AC648A) +I (..\Libraries\FWlib\inc\stm32f10x_adc.h)(0x522FD1A6) +I (..\Libraries\FWlib\inc\stm32f10x_bkp.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_cec.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_crc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dac.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dbgmcu.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dma.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_exti.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_flash.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_fsmc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_gpio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_i2c.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_iwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_pwr.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rcc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rtc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_sdio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_spi.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_tim.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_usart.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_wwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\misc.h)(0x4D783BB4) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\inttypes.h)(0x574E3E26) +F (..\DRV\bsp_timer.c)(0x642EE413)(--c99 -c --cpu Cortex-M3 -g -O0 --apcs=interwork -I ..\Libraries\CMSIS -I ..\Libraries\FWlib\inc -I ..\Libraries\FWlib\src -I ..\User -I ..\DRV -I ..\HARDWARE -I ..\HARDWARE\MOTO -I ..\HARDWARE\OLED -I ..\HARDWARE\PID -IE:\HardwareProject\GeekRebot\2.Firmware\STM32_Core\Project\RTE -I"D:\Program Files\Keilv5\ARM\PACK\Keil\STM32F1xx_DFP\1.1.0\Device\Include" -I"D:\Program Files\Keilv5\ARM\CMSIS\Include" -D__UVISION_VERSION="521" -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -o ..\output\bsp_timer.o --omf_browse ..\output\bsp_timer.crf --depend ..\output\bsp_timer.d) +I (..\DRV\bsp_timer.h)(0x5E7A3FBF) +I (..\Libraries\CMSIS\stm32f10x.h)(0x6443F1CB) +I (..\Libraries\CMSIS\core_cm3.h)(0x4D523B58) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdint.h)(0x574E3E26) +I (..\Libraries\CMSIS\system_stm32f10x.h)(0x4D783CAA) +I (..\User\stm32f10x_conf.h)(0x55AC648A) +I (..\Libraries\FWlib\inc\stm32f10x_adc.h)(0x522FD1A6) +I (..\Libraries\FWlib\inc\stm32f10x_bkp.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_cec.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_crc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dac.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dbgmcu.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dma.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_exti.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_flash.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_fsmc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_gpio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_i2c.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_iwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_pwr.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rcc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rtc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_sdio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_spi.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_tim.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_usart.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_wwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\misc.h)(0x4D783BB4) +F (..\HARDWARE\MOTO\moto.c)(0x646EB79F)(--c99 -c --cpu Cortex-M3 -g -O0 --apcs=interwork -I ..\Libraries\CMSIS -I ..\Libraries\FWlib\inc -I ..\Libraries\FWlib\src -I ..\User -I ..\DRV -I ..\HARDWARE -I ..\HARDWARE\MOTO -I ..\HARDWARE\OLED -I ..\HARDWARE\PID -IE:\HardwareProject\GeekRebot\2.Firmware\STM32_Core\Project\RTE -I"D:\Program Files\Keilv5\ARM\PACK\Keil\STM32F1xx_DFP\1.1.0\Device\Include" -I"D:\Program Files\Keilv5\ARM\CMSIS\Include" -D__UVISION_VERSION="521" -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -o ..\output\moto.o --omf_browse ..\output\moto.crf --depend ..\output\moto.d) +I (..\HARDWARE\MOTO\moto.h)(0x5E367DF8) +I (..\Libraries\CMSIS\stm32f10x.h)(0x6443F1CB) +I (..\Libraries\CMSIS\core_cm3.h)(0x4D523B58) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdint.h)(0x574E3E26) +I (..\Libraries\CMSIS\system_stm32f10x.h)(0x4D783CAA) +I (..\User\stm32f10x_conf.h)(0x55AC648A) +I (..\Libraries\FWlib\inc\stm32f10x_adc.h)(0x522FD1A6) +I (..\Libraries\FWlib\inc\stm32f10x_bkp.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_cec.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_crc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dac.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dbgmcu.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dma.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_exti.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_flash.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_fsmc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_gpio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_i2c.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_iwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_pwr.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rcc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rtc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_sdio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_spi.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_tim.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_usart.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_wwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\misc.h)(0x4D783BB4) +F (..\HARDWARE\OLED\oled.c)(0x646EB70E)(--c99 -c --cpu Cortex-M3 -g -O0 --apcs=interwork -I ..\Libraries\CMSIS -I ..\Libraries\FWlib\inc -I ..\Libraries\FWlib\src -I ..\User -I ..\DRV -I ..\HARDWARE -I ..\HARDWARE\MOTO -I ..\HARDWARE\OLED -I ..\HARDWARE\PID -IE:\HardwareProject\GeekRebot\2.Firmware\STM32_Core\Project\RTE -I"D:\Program Files\Keilv5\ARM\PACK\Keil\STM32F1xx_DFP\1.1.0\Device\Include" -I"D:\Program Files\Keilv5\ARM\CMSIS\Include" -D__UVISION_VERSION="521" -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -o ..\output\oled.o --omf_browse ..\output\oled.crf --depend ..\output\oled.d) +I (..\HARDWARE\OLED\oled.h)(0x589AE23E) +I (..\Libraries\CMSIS\stm32f10x.h)(0x6443F1CB) +I (..\Libraries\CMSIS\core_cm3.h)(0x4D523B58) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdint.h)(0x574E3E26) +I (..\Libraries\CMSIS\system_stm32f10x.h)(0x4D783CAA) +I (..\User\stm32f10x_conf.h)(0x55AC648A) +I (..\Libraries\FWlib\inc\stm32f10x_adc.h)(0x522FD1A6) +I (..\Libraries\FWlib\inc\stm32f10x_bkp.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_cec.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_crc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dac.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dbgmcu.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dma.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_exti.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_flash.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_fsmc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_gpio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_i2c.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_iwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_pwr.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rcc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rtc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_sdio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_spi.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_tim.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_usart.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_wwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\misc.h)(0x4D783BB4) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdlib.h)(0x574E3E26) +I (..\HARDWARE\OLED\oledfont.h)(0x5E3AC66C) +I (..\DRV\delay.h)(0x5898300E) +I (..\DRV\bsp_iic.h)(0x589A930A) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\inttypes.h)(0x574E3E26) +F (..\HARDWARE\PID\pid.c)(0x646EB769)(--c99 -c --cpu Cortex-M3 -g -O0 --apcs=interwork -I ..\Libraries\CMSIS -I ..\Libraries\FWlib\inc -I ..\Libraries\FWlib\src -I ..\User -I ..\DRV -I ..\HARDWARE -I ..\HARDWARE\MOTO -I ..\HARDWARE\OLED -I ..\HARDWARE\PID -IE:\HardwareProject\GeekRebot\2.Firmware\STM32_Core\Project\RTE -I"D:\Program Files\Keilv5\ARM\PACK\Keil\STM32F1xx_DFP\1.1.0\Device\Include" -I"D:\Program Files\Keilv5\ARM\CMSIS\Include" -D__UVISION_VERSION="521" -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -o ..\output\pid.o --omf_browse ..\output\pid.crf --depend ..\output\pid.d) +I (..\HARDWARE\PID\pid.h)(0x5E5A9032) +I (..\Libraries\CMSIS\stm32f10x.h)(0x6443F1CB) +I (..\Libraries\CMSIS\core_cm3.h)(0x4D523B58) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdint.h)(0x574E3E26) +I (..\Libraries\CMSIS\system_stm32f10x.h)(0x4D783CAA) +I (..\User\stm32f10x_conf.h)(0x55AC648A) +I (..\Libraries\FWlib\inc\stm32f10x_adc.h)(0x522FD1A6) +I (..\Libraries\FWlib\inc\stm32f10x_bkp.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_cec.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_crc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dac.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dbgmcu.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dma.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_exti.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_flash.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_fsmc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_gpio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_i2c.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_iwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_pwr.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rcc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rtc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_sdio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_spi.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_tim.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_usart.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_wwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\misc.h)(0x4D783BB4) +I (..\DRV\bsp_sys.h)(0x6443F402) +I (..\DRV\delay.h)(0x5898300E) +I (..\DRV\bsp_GPIO.h)(0x5E3CF445) +I (..\DRV\bsp_nvic.h)(0x5E36CB70) +I (..\DRV\bsp_usart.h)(0x589A9760) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdio.h)(0x574E3E26) +I (..\DRV\bsp_timer.h)(0x5E7A3FBF) +I (..\DRV\bsp_iic.h)(0x589A930A) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\inttypes.h)(0x574E3E26) +I (..\HARDWARE\OLED\oled.h)(0x589AE23E) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdlib.h)(0x574E3E26) +I (..\HARDWARE\MOTO\moto.h)(0x5E367DF8) +F (..\HARDWARE\MOTO\car.c)(0x646EB6A6)(--c99 -c --cpu Cortex-M3 -g -O0 --apcs=interwork -I ..\Libraries\CMSIS -I ..\Libraries\FWlib\inc -I ..\Libraries\FWlib\src -I ..\User -I ..\DRV -I ..\HARDWARE -I ..\HARDWARE\MOTO -I ..\HARDWARE\OLED -I ..\HARDWARE\PID -IE:\HardwareProject\GeekRebot\2.Firmware\STM32_Core\Project\RTE -I"D:\Program Files\Keilv5\ARM\PACK\Keil\STM32F1xx_DFP\1.1.0\Device\Include" -I"D:\Program Files\Keilv5\ARM\CMSIS\Include" -D__UVISION_VERSION="521" -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -o ..\output\car.o --omf_browse ..\output\car.crf --depend ..\output\car.d) +I (..\HARDWARE\MOTO\car.h)(0x5E3AB595) +I (..\Libraries\CMSIS\stm32f10x.h)(0x6443F1CB) +I (..\Libraries\CMSIS\core_cm3.h)(0x4D523B58) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdint.h)(0x574E3E26) +I (..\Libraries\CMSIS\system_stm32f10x.h)(0x4D783CAA) +I (..\User\stm32f10x_conf.h)(0x55AC648A) +I (..\Libraries\FWlib\inc\stm32f10x_adc.h)(0x522FD1A6) +I (..\Libraries\FWlib\inc\stm32f10x_bkp.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_cec.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_crc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dac.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dbgmcu.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dma.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_exti.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_flash.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_fsmc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_gpio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_i2c.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_iwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_pwr.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rcc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rtc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_sdio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_spi.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_tim.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_usart.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_wwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\misc.h)(0x4D783BB4) +I (..\DRV\bsp_sys.h)(0x6443F402) +I (..\DRV\delay.h)(0x5898300E) +I (..\DRV\bsp_GPIO.h)(0x5E3CF445) +I (..\DRV\bsp_nvic.h)(0x5E36CB70) +I (..\DRV\bsp_usart.h)(0x589A9760) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdio.h)(0x574E3E26) +I (..\DRV\bsp_timer.h)(0x5E7A3FBF) +I (..\DRV\bsp_iic.h)(0x589A930A) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\inttypes.h)(0x574E3E26) +I (..\HARDWARE\OLED\oled.h)(0x589AE23E) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdlib.h)(0x574E3E26) +I (..\HARDWARE\MOTO\moto.h)(0x5E367DF8) +I (..\HARDWARE\PID\pid.h)(0x5E5A9032) +F (..\HARDWARE\MOTO\bluetooth.c)(0x64687070)(--c99 -c --cpu Cortex-M3 -g -O0 --apcs=interwork -I ..\Libraries\CMSIS -I ..\Libraries\FWlib\inc -I ..\Libraries\FWlib\src -I ..\User -I ..\DRV -I ..\HARDWARE -I ..\HARDWARE\MOTO -I ..\HARDWARE\OLED -I ..\HARDWARE\PID -IE:\HardwareProject\GeekRebot\2.Firmware\STM32_Core\Project\RTE -I"D:\Program Files\Keilv5\ARM\PACK\Keil\STM32F1xx_DFP\1.1.0\Device\Include" -I"D:\Program Files\Keilv5\ARM\CMSIS\Include" -D__UVISION_VERSION="521" -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -o ..\output\bluetooth.o --omf_browse ..\output\bluetooth.crf --depend ..\output\bluetooth.d) +I (..\HARDWARE\MOTO\bluetooth.h)(0x64687054) +I (..\DRV\bsp_sys.h)(0x6443F402) +I (..\Libraries\CMSIS\stm32f10x.h)(0x6443F1CB) +I (..\Libraries\CMSIS\core_cm3.h)(0x4D523B58) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdint.h)(0x574E3E26) +I (..\Libraries\CMSIS\system_stm32f10x.h)(0x4D783CAA) +I (..\User\stm32f10x_conf.h)(0x55AC648A) +I (..\Libraries\FWlib\inc\stm32f10x_adc.h)(0x522FD1A6) +I (..\Libraries\FWlib\inc\stm32f10x_bkp.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_cec.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_crc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dac.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dbgmcu.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dma.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_exti.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_flash.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_fsmc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_gpio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_i2c.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_iwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_pwr.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rcc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rtc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_sdio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_spi.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_tim.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_usart.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_wwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\misc.h)(0x4D783BB4) +I (..\DRV\delay.h)(0x5898300E) +I (..\DRV\bsp_GPIO.h)(0x5E3CF445) +I (..\DRV\bsp_nvic.h)(0x5E36CB70) +I (..\DRV\bsp_usart.h)(0x589A9760) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdio.h)(0x574E3E26) +I (..\DRV\bsp_timer.h)(0x5E7A3FBF) +I (..\DRV\bsp_iic.h)(0x589A930A) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\inttypes.h)(0x574E3E26) +I (..\HARDWARE\OLED\oled.h)(0x589AE23E) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdlib.h)(0x574E3E26) +I (..\HARDWARE\MOTO\moto.h)(0x5E367DF8) +I (..\HARDWARE\PID\pid.h)(0x5E5A9032) +F (..\User\main.c)(0x646EB73C)(--c99 -c --cpu Cortex-M3 -g -O0 --apcs=interwork -I ..\Libraries\CMSIS -I ..\Libraries\FWlib\inc -I ..\Libraries\FWlib\src -I ..\User -I ..\DRV -I ..\HARDWARE -I ..\HARDWARE\MOTO -I ..\HARDWARE\OLED -I ..\HARDWARE\PID -IE:\HardwareProject\GeekRebot\2.Firmware\STM32_Core\Project\RTE -I"D:\Program Files\Keilv5\ARM\PACK\Keil\STM32F1xx_DFP\1.1.0\Device\Include" -I"D:\Program Files\Keilv5\ARM\CMSIS\Include" -D__UVISION_VERSION="521" -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -o ..\output\main.o --omf_browse ..\output\main.crf --depend ..\output\main.d) +I (..\DRV\bsp_sys.h)(0x6443F402) +I (..\Libraries\CMSIS\stm32f10x.h)(0x6443F1CB) +I (..\Libraries\CMSIS\core_cm3.h)(0x4D523B58) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdint.h)(0x574E3E26) +I (..\Libraries\CMSIS\system_stm32f10x.h)(0x4D783CAA) +I (..\User\stm32f10x_conf.h)(0x55AC648A) +I (..\Libraries\FWlib\inc\stm32f10x_adc.h)(0x522FD1A6) +I (..\Libraries\FWlib\inc\stm32f10x_bkp.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_cec.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_crc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dac.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dbgmcu.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dma.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_exti.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_flash.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_fsmc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_gpio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_i2c.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_iwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_pwr.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rcc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rtc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_sdio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_spi.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_tim.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_usart.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_wwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\misc.h)(0x4D783BB4) +I (..\DRV\delay.h)(0x5898300E) +I (..\DRV\bsp_GPIO.h)(0x5E3CF445) +I (..\DRV\bsp_nvic.h)(0x5E36CB70) +I (..\DRV\bsp_usart.h)(0x589A9760) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdio.h)(0x574E3E26) +I (..\DRV\bsp_timer.h)(0x5E7A3FBF) +I (..\DRV\bsp_iic.h)(0x589A930A) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\inttypes.h)(0x574E3E26) +I (..\HARDWARE\OLED\oled.h)(0x589AE23E) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdlib.h)(0x574E3E26) +I (..\HARDWARE\MOTO\moto.h)(0x5E367DF8) +I (..\HARDWARE\PID\pid.h)(0x5E5A9032) +I (..\HARDWARE\MOTO\bluetooth.h)(0x64687054) +F (..\User\stm32f10x_it.c)(0x55A50C68)(--c99 -c --cpu Cortex-M3 -g -O0 --apcs=interwork -I ..\Libraries\CMSIS -I ..\Libraries\FWlib\inc -I ..\Libraries\FWlib\src -I ..\User -I ..\DRV -I ..\HARDWARE -I ..\HARDWARE\MOTO -I ..\HARDWARE\OLED -I ..\HARDWARE\PID -IE:\HardwareProject\GeekRebot\2.Firmware\STM32_Core\Project\RTE -I"D:\Program Files\Keilv5\ARM\PACK\Keil\STM32F1xx_DFP\1.1.0\Device\Include" -I"D:\Program Files\Keilv5\ARM\CMSIS\Include" -D__UVISION_VERSION="521" -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -o ..\output\stm32f10x_it.o --omf_browse ..\output\stm32f10x_it.crf --depend ..\output\stm32f10x_it.d) +I (..\User\stm32f10x_it.h)(0x4D99A59E) +I (..\Libraries\CMSIS\stm32f10x.h)(0x6443F1CB) +I (..\Libraries\CMSIS\core_cm3.h)(0x4D523B58) +I (D:\Program Files\Keilv5\ARM\ARMCC\include\stdint.h)(0x574E3E26) +I (..\Libraries\CMSIS\system_stm32f10x.h)(0x4D783CAA) +I (..\User\stm32f10x_conf.h)(0x55AC648A) +I (..\Libraries\FWlib\inc\stm32f10x_adc.h)(0x522FD1A6) +I (..\Libraries\FWlib\inc\stm32f10x_bkp.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_cec.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_crc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dac.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dbgmcu.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_dma.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_exti.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_flash.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_fsmc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_gpio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_i2c.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_iwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_pwr.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rcc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_rtc.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_sdio.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_spi.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_tim.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_usart.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\stm32f10x_wwdg.h)(0x4D783BB4) +I (..\Libraries\FWlib\inc\misc.h)(0x4D783BB4) diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/Project_sct.Bak b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/Project_sct.Bak new file mode 100644 index 0000000..c26b647 --- /dev/null +++ b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/Project_sct.Bak @@ -0,0 +1,15 @@ +; ************************************************************* +; *** Scatter-Loading Description File generated by uVision *** +; ************************************************************* + +LR_IROM1 0x08000000 0x00020000 { ; load region size_region + ER_IROM1 0x08000000 0x00020000 { ; load address = execution address + *.o (RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + } + RW_IRAM1 0x20000000 0x00005000 { ; RW data + .ANY (+RW +ZI) + } +} + diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/anbt_dmp_driver.crf b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/anbt_dmp_driver.crf new file mode 100644 index 0000000000000000000000000000000000000000..101d93fb0c8f3e8c98afe813da2da914e5cee148 GIT binary patch literal 395168 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

    T4N_YEaT9-ouwA8J+aIr{;|;i1zUh_r5TUS1I# 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

    =U9>hoQA3PU}JYpA(ug6aq8R+56H ze?H98&yRfwZh)Af`4Yo>QR>=@p_>mmvTAIfgs>vwf=Hc4+Wxp+n2%*;GWHR=8Mw#? zWwl}-W7LpU9Yen3xK4oH&?>41nEwGxNw~u?CZ8Y-1v_JZJs1a%gX~l_c1S{y%VC|G zkA{WjEUrJxhv#h7*x|T7isHvX@MOL^g0v&(J5?aRREm8Xk6#8QOdWJZtjXduO6`u& z(RduDDO?tR9*@H?ip%0-akbBqb>#6ld?>MwgoZ2*cT4yeLqisaha{YNp&^UIxf0&I z(2&L9hY5FHtjXfo6BO6t({XrRx|I-jCXU@fH;K^MIJQ^e$qNlx9DA&A<;5Dz#zre- z{h!48*)WrJFZ*_1bs21UE`tqE9fa#3TnFL0)o@M3-eukCfGbe4zYP~ZboHXx02?lt zF5Lt#`wp%jco+Zw2-lBs{RG!fal!mP>w@*pkA%u)2!*dYpjHReVR4u zP^$xK;j08TXaj7C0i`+_SKS(@{BOOhC4TR~)dLqTnd;Kuz3zAd&DZxryFS3K%Prr! z>j)bN8wvEzu6vAdoItaz1+AvNQiFc37BfO_k=Kk~?O44dZ9BIV}Q0)A~ zJWZ_4#JiPFOk!Up?yTZUBK{uZ@rV!DY8W1I7#?vg9&xn%eFKJ04@$^^O`r2?Tr^N{ zXwGl^#b~K8ycn6XpOe=#T1NFn}-!P=njsHMqTPT#BD%XfB~V z%ey~A$b8VQ@e=ba16+73-pO7(p)r;Fm?1iW*E~+3_is&lLDZyKN6k|NIs?~Y%hqB) z6CY($RpVYpZ@pUVd<8Qh(-zP?*Z6da6W40~T|-z)SVwq=z`eNIG(ib`hW?2IIUclY zpI{`dL2J|Uvo^bLZFb+<{R!;DwFdz%Zsa*T&q4PYV=JueccEWBWUKq)F0Q_cDx$IS zcN^4f<0K?Dk~L^4z*X+Uwi+21>GKg=jf#u(`KYZPh>P?&-c}RiqF#E;hTnmx8XmV{ zn<46@2{sHgMCmZmhLwgW9VXduLlE`SWE;K+veuhot0&^3ewb>*D?!vt(`*=Sh9s;mj_2)nzt3+C{Ir z+=g4bY_hDdVJ0K0_mwsr+(m`4%7&M_s4!OBaCH~`>lz#W?(UyKZ>8n0b8{O3j0 z@tO@MdQo+}Zo`vaq@g!#nD)qC-kUaj>SZsl%!XsVC_Ub?)n23WdfSG{k9#@p@s14_ zdz|b7<&q6QdmQZo<&q6&dr^MvwqXz?%C9{(-0pF@3pP`2_}=4q7bur(IN-Z=5c<%D z7d}+_kRffj;)|8tJ{#6UIN}AeqYbBgqs_PBnJ-e<$2Q#aMG89rsVR5yhz-Aek;gv8WFHrK>@!UE7(~c-6q9}2jU)8A z4PSm23%J-ZO#5*+hR|^vUj3qlJ%MT87A@=-HvIc#6ZuOB05*32AO}JKu-#IGPC)>$ zMVo)xR)dY=>jyhHAi#YKp&<@V2@w0xp$?7;5c|+!4$P*+K6JQ) zLjz>v?_LKd2gt_XeU5?xa4X8*?@4y>N80TXST(ZD8E5{yp6x4a@HDtaLStd9Ny1Fq4 zO?2R}B^$t#9C&Sso^-MU*DcYLPI1&~TNLqA9oT${B7T~qpuZzCn(n}pOPJ9U4&1qf z8O?Cu(9XN#vGn(hXGfbG#dzfoeu)EzGEvSib>LMdy3>~&^^wt? zE_2ioqbFVNz}-yrq$?bp;Jzj^<|YR|Z1Un?ap1@%FMhKF zZ#J1Rw>U72lNocX1D7_LF<*7y*CsROHV4jaGGlJXU~;5K?7(nwWE*BDy1XM>F1yg> z9oceu4PD+5dy>~3^{^wl@i)-r9U0hfqRTrnu*=Zp9U0hfq02imu-`_PccA_GPV5~= zO>^A*M={Cek0TU<6HAfZ4t(t7{qDh-aYSYJzN4OV zWcU692hMl$rayGxfhTWzuLCzcdDHtG81%`T-jCtp$eaEM!^M#|{V|4%BX9ZuhKnO_ z`k({O_9O(zgFv=Y12gfnW9MPPgz$kNI{EtO5Mwug~AzxyYIbs@e5~IwKUUCYf%#mJl z8l%jSUUCMb%zPrwUNgqR5lxFU)WGcf^wL=j>pCE%1Oykv3$o{1vFOi92!QG}SO3H7NX zLd>*;`oa-0WqJaBiz22xk%04}h$%A?@L&`%<;eux7)4BZDgh%(5mTN{z?V_Pl$iKU&LFToq(sKyBMK43Aj7D3lVxY0iQ=Pn13z-$44=kpPPX9 zqZrK3OTYzE4Cd!2;0Gx-BMYEV#U95N@$10T)f#KUk^{p*~Bv=e>;;<$3QC zb`$mx-Y0xO_>i!du#d2xzyn?~oxbR`wl`6?4pP2@3%afF0TpT2ueyy9-vn1PT&;2a z4j0_n(q~hw#rYbbQqBn#Y2UANbNix?0ccHyil8pF9=VRF2%Nv_E@zg_ge`;}gdC?+ z+*;OzRQEFZW5PkgNx~^YU$)Ia!eByqj$agQ_kj~6MA^9?oFIY23t?~rPLO~O7Q4RS z1PL5pn1~$!CrG#ngbsoeBt-3b2%I1xYR^v+YEV+f$YJn=q|CQRz!Q=(-+l_7kd*oM zGw_6@jG&|72}v12pMxhPWdt1qPe_U&eH=U?DRb)y@Pwqyt=KrhUI@q6mkAg#%lJB( zz|mDQzD^}@ewB=`(+M16CFAQ%0w&HfzRo6aoRy5PuM)6$mhsg$iG!^mNEgTYCDp@8 zxB6J>cE%AZ))P%+mJDUlRK`ssOb6VFx85&l4j2+O(vwViia>>uIciAsNzd@FuT+xb zhjMv~it27AH1D8FcTw(}^iQgZNwMr3kc30FIDidI!Yf#auUYpGWSkN;)F7pd#5IGOqtBR(~>x=Oy=I{NtmX~ z-1|flrLMesrrUh<+McrgjrE>RIINy1-V zR0K1bZvYRqSJ4rPx zCAKhYl4^KLY+=?WagdwXaIQ<@G&h;S*C%nLo6O)Fk~r5*X7G(k9PTDF_{&M0@Fp|( zrX-GelNtP#B+h!18GLgR2foP+z9orM-(&{gn#9p>GK0UG#QATs8rX*Mos!kSc8u?o ztOj-@aU7h??>m#~(Ui>ZyOKB)4!o;4_F7UsmU3&o1fjpyGQx7gD#B{Q8p2w_I>LIw z2Es-HRb{oP;})f>oaA*YP8fYHS&RCzjPtyLb0oRYeH}wICCu;*4AGP@!#9&SpiY=! zSrVtz2{U{viKFU-8NQvwd3C}J-$~-oI$?(ICUJ6|FvIsSyi>vqcVl>`gc_L*CCu=HB#yKbX82(e=i13KWN#9O+sQIyUsBCY$ueYr5+~e=DDqJf$J~i1@-bLL zN<@(ZU=1k|MGk^Bq(l@s1lEueQREY_hLngRhrt?BB8nUVYe>m5&SJo%zv8eux&2||XteKzCf5U6;s&Z!|)@ErfoCCno%An>pZ zb4uEa3@st>hzxTq+H!_g5LOaa5qu?nH$yd0<@1=df^T|4T3bVvZacv_X$5caZ*W8! zy?D%-XtI6qF8^{5q1@BaJgR${hi9Y}{8x@gYm4n~wCiyaq_0qLKH4RmD^qHFN>+&j zQaCD6R*3^sI4@CFiGxx&G*MQGgHt#;QC5jVQaC@doOattU0tz_Fs4|huMVTksRjaHtvMU0kjX5{RTwk7~1mpXa<5C z$wp1C!``?xGdiU{O3B3dURT3o}$8*^XeT`r|PP%u3XiG4$$mR@m`&)GsgKc=T-%C01-hj z2T(DfA_`){Easd8DqO*iTNGBXqZQby zNCo@ve;up9w*O3Y-$ZoB{&Ug&Uy+CWHUGn+`w{)E|HGo2FQSuw*Z(iN`y#sI73fmf zU{6$_TVaDeS%K{e8|-ieb|`GHrz)^hVS_zgfgXho_DltKDV)B~R$#Zn>HAy-_9&db z&sSit!s+`$1$q@u-xn*ePhsI4sla}Ph4WGc4k#>~mn+bxuy9_fz(IwD^J)e96&B8G z6*#1@a9*##fWq15Mg@*2teH0}Fr=_%-m1V+g*Eeb1&%4KnRhC1Tw%?;TY(b_Yv#QQ zoK#pd?^j@0VamF}SMqV%0~2Za}<@1;8^yeR!3-9h0+=|^b{Vh=grPZfBj@Y?fp1;!L! zdrnl~wZd!9$qI}sy!QN3fj0`TJ-*S~&M;EN((b0ZJ4Rp6^4-*Y2-`3g)a z@1r0IY8m~~$7~`#RlY;p%-WoS6SP z*`c5*#*FM#&>Uk%u2rxy#*AF2pe4qPT(4kNj2XE>L2HZ|xlzID7&CH{g0>hlab8F=pg81)VWwWS4@qF=k}9f^{)wm7 z6l{tyBX=p-9AifAR zh7{b3@oAHz3hu{vjdM)FgBVvy#}zz`u@Ih6q7B5Rr&*ABu9~Tme23mBhLD zdn}5GbEj+-$GM(+qhL7B5PGZNOq{E@cM8tOxqy2wXCCL; z?Sq0VamLI?1=r&Ymrn|A#ThA|72J*UiJJ*IefdQj`R7h5cpT@`HDBa>;|!Ot3gkKV zf1ae7lCz96NT%i7;!%7kcpqnId{^*Eo=2De-48jVI0Irv!Bm{F@KeAaXBf;1jTU@^ROyWZzALpaAe+B6OJV7q;5raI_{!0EdHwJn7{GX>>=EWdS zo&WQcOG69`5`4;~F@}W+@@jqzixTA3f*4jN$f1QXv?R!(Me?RXf*e{LLu-N@S`x$R z1Ua-chPDJbv@C}91Ua-khBXOtXhjSi338|@hRy^z)Eq-sf>c=c=* z!_EZPo2@bQB)HyO9mB2!Ut4dBVQ+%hlI=0{Cb;rk6T`j)SDqa)97vELoiX$!NRYKL z988cP>tc}S=v(A7SRcbcg51~;!(f6M-x$M@f8GT6uYYZdVJJbhZ;s(ug5_{a4962J zhg)MfkzhI87Q@K|%VAdx!wHtd?ifxbSPr+xa5}+qxFd!$36{g1F`P}X9QMR;A;C(x zD~5{+R>Ivej3ihI_r!21!AiI{hARm=r8kDF2~Pd{Vvy(i|9L=Ye+<_XT!$Zs;YNb) z>5JiZg6=sO!<_`T1N|}FP0&Y&Vz`&!Q*?)8c#vQb9Ejmzf<5~P{D`|>J5znzR>EWvfSd~?X_1f6#(hVcaJ zpS%t8HbI)5iQ#>M9+Y=sJ|*Zuc}M1Rf($z!!$g8^yb!}=f~D_b4Dymfo%~yk$O$I- z-+M_;FiBEhmUBx+*SawrO-9$ca&Aff_g<58OOhbh<=m3w_zgL?Bw2D(&Mirf%eS1I zPLe9O<=m3I61XGhmLy;9#&9mlD}j44oKKQ8_vI{;yb^dIXPM+@@KDY&$)dll%;x$q6QT5g_mU+)VP*7>(gplAp#4Im;xssxRd%lVtlV zIm;y3J{H6MB-#F2PBlrkkIT6w`CQkNwd##s!0~)2|3jyxi%@Mnq)!#62qG$3HMdbH_3uL6~ntESvM^w zon%4&7Q=@msrNmGk4YBfA2G}%<%iVdf-#1lN%^?LmYVP{ zhTlo~F*V^|41bdHJ7mH?VO@$2_$#bSQ3rG4n4jW%d2{1fkm7rJ^Wtbq@m0HqI98>| zwZ=GFQ{>wGI98{~wFPmsrO35~adf5FjO2Z(?i8ER;yAXa*o>CMu_Hx>EsbMmiVRyO zFEXXrhnC0Dn_>%E5y!q1TToLReJOUI<~Rt*jF%QmQSElPOZFJ&xfNDYYh!Qz^EajyO)In9iMXoJq0Wtc~Mk^a-tt<5h~D zSs%w(^jU3??-fds78~Pun<67N#qlvkGHj0HQ;KBR636cphdX%->`#iVWm_D7Q*13= zam-Q4_U<_5s_dBC6IC@m_xi5}gD)}t0r0rJ8XL${6k4iot zlJihWWqDDpPbG^7Vt6{R>|TcaSW(r@lYItDp`C~PDbT;eoRhAC4rC2XRmUg zIw7CE%2E8JeD*3iG#tlSl^i-1$2paw_~|&#s~pA8#Bo98=X^Gfag}ZETpVvywz>0i z9xBJ*3vs+xNy3Y9d{9Zk5ji83B)k;Igvy3;IgUw{PX}L#xDk&hZ*-fi_ z9OQZ&-&D4~8*$92Y<)N5_^HaTEK2{2V^-yxS-0c(rSi?JJ97FeA6B?4r?2v1g?n=P zDj!z3FQ=cT{vOEbr>Vb(aWrcD>>r5-HMYaYaV*rhihm+H(AX27%IRx7g=cXr)p!ce z<5;FK8%N_

    ZSrLj0?-JHCvgS>s0hRU9oEmn37N9F5)QwRl=%gC7?sYgD_u8rZIp z4Dy2D8jWgyCmPatGVkM9tMO#yMZt9%Pexu2+@LWbKE<(7V?un6W0S^&n22MG#zdTq zW2?rd|0RxX8nf}M&_ZJ_ObH`2dS+U5s?jswM5h`(^Ig=bF%5o*IyI)jOdNYPUJ(Bj zooZCXY#jSFD&kih2Q(_;wjlD@;WE|Gmo8)!IQyM3)#R;6zctI>LGoIDBos<_C z&uQFFE=%B|#%tl_30%^sgB1x}*2tlz1g>bD7n&2erqPWn6S%IiEwvWWSYU9omt=BaLmTGl9n%+tS(uo@n&y zx&)qST!XAn;JHTEZb)EMqiZ)N@KR%2l2I-B(21R8XH0n|VO^K~ZEU;+ztCX;;6+d`emG?c(%o!mW|z!II@Jtn`{ zt23jHC$K`NB2FaGq*DU?D2R01tJwQ)LuRXUk{CV^I+%s!jIYMsnJ zmq43NZk$h`U8hPeB(O%ON-ieQp;ILz33Tf0)Rz)itCJv?6IiE{AXgGtuah8G6WF9v zCD#(ztWzb|6WF4Y<2Mr6s*@l$6WFGcAh#0e(n*lp33Th!%N==1SEpX?Ca^=NUhXBZ zQzzx`C(xslB@YtVrIRHO6WFbjC65x=qf}G^y^g4iv$ko?Ah|p?qQu&c_lvANfmjAcTgu)UW?ClYG^!xA)Oj}BaYXp zp||3Ao%@4#;&`2Wd7r=uoqYKq-q*>OkK%ouYWkGGX`OueEZ*12mkIH{&V}owcwcAs zd`aNE&g}V`zy+PzGbKFGnLYB7@`%m`Dz7SE(%C@23mJ4a&>unuoegv*fvY+jsJwZ6 zO=kn06-MZ6pudC>IveQk1a9hVpnrr6I(z5e1n%nWopX}77wKwl689rr%}e4zq^pJ` z9!9!qOyW_btNBShj&!vki6@b+7AEmD(v`ec{VdYe;v}9&x>}ONs7?+oP2xqQuw_ZS zj1;y!iC2-rRwOYV>8dG-H<7NIlXx5HYGo4dB3-p4@jlYksw6%{x@t}0W2CFqNqmZQ z)t1EPNLTGiOhmd`lf-1CtBxeTM7rus;;YX2ZEX@$k;2v`F&!yveG=ayg>6XUd!(?9 zN&Je`v?+<-k(xFq@h4K#mL&d0YTBB_oD6&2wj>%d>~&p9G-lX~yOWroVZ+;=#DWYP z-i{;|X4vp{Cb1~PhTN0H;tV&2yOLOvVOs4@VrhnHwI_*X8K%|VB$j8$rrso0WXPs{ zNi=21ru|7YXV{t#B(XBX-0DlBCBxi0m_%!a4>t8Du{uLa9ZI4tLrNV^qCG=O4J6T- zA)5x}2goyI(~%_BWyq$XB-a1)JH+y35lL*wkWI&u*py+XIiAGU44ce}B(`OkTPKs~ z$}qQvljzPcw@xLoBSXEMPGV<_m|=f;kiUx|}5Y_wzI=-%K7&PidF!5MaL3atirbMsPYH@J~&NMVh^ja*|29R{bi z`6+Z7oZ1$ou-2fv7pAbzi00oE)*I3Mo5Ci8?p~6@W`pitn!*-??p~I{RwJ5!Q`lzE z-78Y)GU)E66uJ$%yE%oO20gtpg&u>RZb@O6K~JwrVYfj~x2Di*(8;S)*k`bTwxzJ& z;0~`ng#!ks<25Pt8JvzgQaEUEI_^xN-{5q-HiZF$U36Uvg9f|k`V@{B?4lb|7&7?C z(8d&w8uaw06pk63Q#Pk?+@QO+q%dsI(_2$GWzf^xQaEjJv)z@#8H005cM4|>&MDhd zIA?H9*^$C|gROLD3L^%)Xio~44DKy#h|;gvz3A5US-pwCaF@Y-N2J(B6YbpFR*dDH@@Y~?l>P8BG z3_AX13V#hc{#FWevLyfQ6dJPR{hbsVv+SaGQ<$G+7rmFlf-Jk}{S+2v*+n0uuqewe z`Y?sXS$5G!DJ;v9{Et&uo+bI8q_84O@;^WB_GApS+eAlcsk28_$;2zG7TnDxR@n@Cq>U$68MYgIZFb66+LH3;3?5= zmOF*%6mDk8-EX4PENS~)beiS<;71DgvV7TLCWYtO++U&h&lE)l<&CSZ6 zeu@6Fxf%J>Z_!^i_s=s!e?))T+_e1Zujnt!E#e#%<5{|Ku8KEVx^bS0w^_QeLB+c) z-Pow&eU>xgd=($E^yLB-AG7r3LKUB~^yMNIpR@GkViglv`f`bi$t-=jRK=GpeYs4< z*DUjQxr(VQ9lAorbe0ZnQt>TIhc>JDo~1)qs`!!R+}NUGCQGlbQt>lOuePd~&C;u@ zRs71*t8FTNXX({;6@Rky>KYY)v-E0*ia91<4C_?UVDfdawJI7-z7Dod#e9>mgRNJw zz~t*-8&oVb`8wD}6^l&14z@|fVw10fZC0_wwqS@r0VTX#9Cie_GRkWDgGxVrfWpb+ArJ~j3RJmKlYLipt9u;jS zo7-L$?IxRBuZlG$o7+AW9VVOGeifZ2=gR{s)|%{aeJa+O>~IHFtT*Z8eia)`cDO?- zHk$PGVHKN9dU`;`W|N*CRI$aRr;n)EYSPm~D!NTN`KXHRCa20{Dt4Ik^l=qCO?vu- ziXM}mKB;1tNly=}*lp6&r&R1Q>FLud_L}tc85O-I=gYGy_L+3|ITia&y8FC}118;l zK}DZQcVAR-(4@OZRP>v4_azmFOuGBBio+(m-W3%CCVhTY#h^)_UsG|!q|dLb7&7Ve z8!C>P^!ZH{$4vVCmWtyheSTZT36qoN9Tg`{PMUXB44a%Z@2NOta?-r7;lEw!=><9+~9TXBCf4@@hiG6O+7}RPog0%UNGkJTv)n z)>jqJO}?BprDD{~{qz0u(<)w=2% z3^U2KU&1hxwAjX*61V&9yC!`4+j>p2h-;Tw9aILW^AMNMn&ju63rd*do`~rm@5#*Vd)6)FRi` zr?Jc;*EXclWRYeY(`dFxvrTENv`DkfX|!0R*_Jd`TV&YQG}rP{>MRILVW1U5E?MP$2MRM&-V}nI<^`x=cBCmF(vBe^i}X2{#zl+tIiJReMfzMw>(|ByLi{44&iN!8@H;v~OH(B@67`50%@2By?Vi$do#!HJ` z^kEvWEOyaHX^dIyqL0&fZLy0!Nn_k%7k!$>TZ?>omc~1ae0iS6M~hS$P2-bAs=N?S zTcpZM@vlXeyb}LfWXYKL*CI<^i+?S$WL*4fktJ`$zZO~YR=jGFAn(Mh7VlTzi&rhO zxB*?V* z(k4N^i7#yu&_7IQVMu}O=08aiy!qCrEaOV!Rt;Ao9c>&*=Y|gNUHN3Pr!wzV8Wpjod)G%gqhCQO;wapoJNW-|z z8TP1#H#WCc$27dPIn5r|@XqEmdqTrUo7_05;gd~n3~TsolN+ZrOxT=ZPivU8Nsu!d zzStzlSq)!p66BnQDVqd2uVLCIK`v8kP!_(Y!c*>h8df?@XH#0+MH{z zXqdG**Iw1|%jR5rO~Y@So2=^^{@C1P-O%vY=F=EAHOz6CGq*G}I82w@8X6s@%N-5# z9nQ6PH7szLGxszsbeJ>uH7s(NGY>Q@c9=5{H7s%1h97BI>M(I0Ygpzmah_;c?l5tl zYFObgah_>ta@dBSYiM?uJ);^{I?SFI8d@A?&r1!f9A?ie4XqB_@R)|x4pZp0hBk*O zG%k*Jm_2XA@eZ@+tvKFc2Yx4xcbG!&HLQ1-LLbEY4oUM-yzh`SpTzqPN%L8}?~pVT z;(dptnH29kOrb9twmD3puNt}>rqGn|z+nfT79Kdvqi@0khk5i}!%l~7_=kobhsiV} zjBuDtKZOwvlWA6X;IIS#(y-5A2mY;LzrzmvM;PI-1OL^~=dc6M(Q(irbLQ&kceqQN zr{j=A`ZVY`?2tZhxA#X!s99mgFK zX{nAA4)<%zbewd^rsX<@9q!jw=s4wYzt*JVl0!B%>$vQYO)GU=amc0?9akN)X_by^ z4%yVIwVu8MRKw zeTNyfUdIE68MQ&jLx&l)QO6^P8MR5rV}}{FS;rHH8MQ^nQ->L~RmU@j8MRHvbB7t# zrDN0~rMh*za7d}`I$k=Y)D9i598zkhjxmRn>e2DqA*FWdceunrVY@k`W6B|= z4(ph9NT~rG-yBkEP{((Nlscm0heJvY>6mdysiQi6I;7Mw9kUK8bzH|Uhm<;@5h&yE_HQRM~6#Y-P6(OQdjqNtaC}E2Rb&o~YDV*E;sPOXA%ie@DueefNzn04YX);YZUVPuFwf)c+?7Ft$Jx0%gGP_D^Y#qpdz_tjWU#>FCU9p4 zi##S%PX>!UCeyAAmUv92-5D(NqWxb6%e`p-m%$1z+W%$H>@kn_Ww6p?9_`Pd#bX{F z$e`6DLHaUi_c%Kr%wUa2g7jz5;gKMRGU)V3ki!|Q^+=F`4Ayxh$Y2KRJrd+d1{*vQ zWGI789y97_2Ae$+a`56dd!OJ8Qk!g5I4jX9&_QQIKZQ)Z)Nbvqmyro#yxJ( z?ufEI?#=FIFy@i%_e8}Wy?S31>(QYPM4cWx=EDrWdwkXHk!a21I}MLTYaU;9dm>u% z_;$n73}(IDlU@5>FGY1eKiyZNI-h(V6Rr9D zbYF|se15v)87%b4=QpA{pB{WGs`Huq??iPz-S|F(r9R#GLGj=9ARZqDh}_{3c5Dc}Cwwi9SjF zL$v0T&odcp^vUO+qB@@*oE6piJhxw>I-hR*oxxV0C-_HH=abZbMRh(&J;%UypA+d^ z13P>^M={Spk53Oa7})L8gN+9E`1Ig>1ABdXaDjndpY3p=f&D%`xX8c(pB`LnpwH(f zYl(q_KJ$F3fx|vie3^j(pB`LpV9;lZuP|`LryH9L9QD}*n++WEdDFVmz;U0XZZUAe zC#hE%820JGRs*MedT_OY(>_zY&A=I-q;5BG&Zh_07&z}U#XAgK@JZ@U0~dXgdaZ#= zkxJGXxa^bE>kVA-N$L#-uKFbPMg!L)m25I_BT~s`12-d;Y%y>vQpr{WcYNmgHUoDf zm2?@n7pbJ%!2L)i+YLPQN$MR29z`nIY2b0Bk{$z3B9-hi@I2DSZUdt}NxjFw3!kLk zYv85NPS|T;%qOY$8F=l})B6pK`$HJCK522rz+a!U=~)AF0_x?Qfw=+oa^65gK)qZr&=^oJ z7Y)o0sFx7~3j*rpl7U45^>W$3;(&U&Vqi%?y<9c0G@xFt8CV`rFV_vM2&k7E2ATru z<)(q=fO@%QU{ye7-!{+|kR^8vbOa>GT?6X^a^s$XjR9$K-@ulDiT%JpSHPTpXrMdb z=|2)T24uuzabrM6JTb5{AS0fNF9R~-nfNkbn|m(449JL4@nt|pybxaoB>GDO`vU6V zl{hq@4#vcn0cr7Cd>N1y;|BTz(&CMQLjh^=R=gTe2k*qI0d??R92!su9}Ely)WJvb zYCs))60Zi-!DsPmz?+o`@oKLVPhBr5h+W{Niye#fUI%vq^UciRen8p2o4R3xH4+7@Qf-D{e%$bE*JPMdI zi?VnUDPnOJPXp%6k}RG@+E|*!^MEo+Sxf~a$hs`115O0%v-lP;aW-V}Jz(N&%;HC+p-ox*47iWjoW*Rw*WU)BpK4NbcOG54=db3y>M*S~~Wnt9+vREEQ{V$8AFzSC2r# z!7NsWWJ!M(Eg_rWp)6K~Y=VcgXbsr}2eN1j$&$e=+CxqWN3vKGQbR*obcEE<(JVSc zHo;?AtPR-&k7uzVBuh?Yu`wh|PG+$wBuj>~*c@_7IF-egkW@LH#nzA-I+I0L$m}_r zMR&+1crJ_WA!o_+S?mbe2`^-^Go*$tX3-N;LnB%24mmGe%3@DQ`drRpZ^(J!N*28# zIdnCPeIYq?EsOmjIdnaXzL4GVMivJ{&I>oQ=nvT91W?V2U(m5NuP&VoC?XDM_HT=Nt(x5TnM>wc#_4Xkb8!wSzHde zXLy#yosiskE?y1EjZyJxNN&6khlb3Lm*UWn_av{xp&{>K$Fg`Fax#1^4h_kTadBu! zZoCnPhJ4fPt@tt|H{NCOG9)+Ni$gaWth7o|KDF(%!K^mxZmQ?kZ-g75nqOUU-z$gFyz~8 zb4<+1MbH14Xvp!6+<7Jz9vdhHf9DUhs;!2Ke-)`b+j%?py;#!Vu-)Z7{j%@ES zaVy73ZkLI>Il6JTiDx;wY>$cOIi~$y6Qen%eXofZIi~$S6EAaYefv#}<>F z{hx{P9G!R2#M>N6-EZQ3j$6M&CO+io!NVp#=D776Ffoy%2M0||=GgU)nD~-o*Bdf1 zmE-Jp)Wmd-yPIPszUA2Uj+^+NW7j)jVkXCV@T7^KIcEH@iP;=8{*;MdIcEH66TfrJ z_%kN{cfXi6xcndRI*>tt6kXnOI)Q)4wiiuOyXkm}ssfm2a9@SxGA25(iYW_1!kHs*=fm zN4!wU)4wZTsO0J2Gtpkj)4wmSsALm-Ag-t+l^=>LD#_wU;)+VL__2wNm1OY~6Pqf@ z;-})2N_N6$Cbm?v6FxVwwUV81RNPa^Jbz)LtCF+9OB3CdO!imes7faLm^iAERDNw@ zXCRDNS(S0&rwTN8ULsgidldMl}t_u|1ycES(h!Ag?)qj<2Adif+CtfXE( zn>biWy-b+suOz)E#g~;-&KL1zC6)74d|655Oo=Zm*$$^o9IYhVzlkp^$@cFij#rZH zKTMpcq;h7&tCdvFPw{Fcl`|_|t)y~(iB~JBoZsThO6uj0iSw0Y`(G0mD)}u6b1aNh zGSBB)xKznJpJ(Apq?ZN@S1ZYgMhn*}IUCHkaJ`bWSYY91q?d&jZby1qWZ_OFX|dSC z-AdA8iG}--UY1&T5b0%^g-4Z4@#PjCM|xRd;Yp;ICJRp^y);{R9_eMJg;$j%LyLv6 zN|Irfh1ZqbF0@*B6RBjig}0GP+AO?_RMKwYeWa2#7CuBO>9Fvrl8N1E;d3Qfvev>x zC0Vl0!k0)J>n(hZw6Vd$RHTiK7N#r7l1&!AMJm~BVJ6bX77ITkZEUqL8);*kh2NE& z7rHF`spP!SZDCFoyWVySbF0|(c37BK#jdy0LPHh1UXO+ORm_E578X`T;nG*vM*4p?ZeVrukRSXo7a9JH{iiqm4h zh4w0P_Zr#t{qatH_NZ3mdA~>yBF3SjAp<%);g> z>fpGAEmcg76Bf2sF*QzF=&B+&hAnhgac(?iVS5!Pg3}guRB?hlV_|0%H&16R?5-j= z&RN(~#Wr`|!rm$p6y7s49AY)WX9mdjExZtBT%#Dc-7LYP=F}RgnT?7M@jcGJGxGs$#<%w=i18hWEz8 z%PQ_2--_R=xOaRfeyif%@xA!1iVg3Bh4CsjypQ6%DmJ`N;<76KK;dU`Srva-Xu`tB zD*m$2r1-6h-?Z{Y{8q(Z7WyiFt75~O62DdPdkCh*Z&myrf^XutDmJ|D;pI8>{K$B{sHHb63CAMprfcyUfPk>S+IGV}CV$xx&VQYWlLtMqf33*=*xrH7Bo? zHV#)a*;{NJsirSi*%+#(FI#P#sb*rYwsE$a1a7l&uA0tkw{gCj&Rb*SLN%S&VdG*o z`&y@sk!rGdt&L07%up@GW@2x!aif~f+i2rvHJ!J~#;s~PZ?lct)pXt# z8+WSdysb9wR?~UgY}~7+^SW$2sOB8iZR24z=cw&A9#wOW+F|2KbVfUEJg=t9dThL{ zrlWS*cvsCN-fiPUHT&8g8y~AVS?{&+shZoFUKTH%;ejm z_8MmL9UGf!n8|lV_cc8Idp5S#@bvH7*j7V_J`gX|(4h})bl1?Kk8EtOA$K3!*il2T zKC!X0hF*PYqo;<7cxGc)4Y~VVd{jg3j@sz0VJ5#2N7Zl>^HLmD!%fU9aa0ZUGG?Q{ zhAe(<<4_Iz+PHYDhI)BpW3Yxhytm@A8t(AkiOXuJm-jY~)=)1WY#ghhUOw75UPHZn zvT>q@diiYQWDWH)VPm+4dYQCws)l;`A`Y#gO1_FiYdDKfi9>7n^y0KQw1)S!-^8Ic zys!N(zN}$i`(fj94eyF(#Gy6O_g~q#T0>^f+PGFjX8#he*6>N_-{RF8KF9b+yjsKO z82^e_Yxo@F90zx5nAme2+>7)w&%ymjFAWYJM0#m-@G#QLdq=t#T(81Fh zCiWr+&uYkx#SWfF%30!IG*Zq|2QOcd5gZGhgRyp_->7~`d=SVNB9ZW=eX>%|c>80Jlmq;&b98A@49_(;1UBg>| zP6yv=xWilP;CrN;bq;<+%31H=XAPVF1_!f|ayB~n6)9(vgWr*IHaqxJL(*(L!P%r-3}V_>~-56EXXq#b~sp=kDh;auqYor|LkCKo=<`7 zaL3f@r;wcB)^V|@ecCa%~(wuS7 zlV{?bb+9YX#5w0+cbo_x#Qqu zo}{_!U^vfYy650jp2>9I!Rb8bfCmoFa7(f&^;kdO9%LVhQH?HU^316DE@tzb8yC3vmFL{J(8cdO=f*`Y{^YrXTI}L) zo;#=|F6I{4BA2?DSK#{<%Um=R*e92}Xe{t)krgiH7uYPDTr4c`iRoq+iwfK#u5_`u zz%62ni)96F5m&ibULa{&U92dOG^<@S6-b&k7tIBdrrkwLf%nsET&yaPG#xHl3nWda zi`4~^X04010!g#Z#hL;q$n`Ed3M9=27o7!?W}}O>1(Ifyi**H(X0wY81$LS(E;bfO znyoH26-b(GE;biPnl2Yx3T&_4F18i8joR*_tH7yphl}n4r^=l!wih^6_PE$lU`Fk7 z(Nkcj+3jLift_ZLi`@lwn!PT13v4pIF7_2jntd+z7f71@E)En(ngcHS3M5URi~a&T z%|RE33M5Uxi^Bzy=8%hl0!ee&#bAM?8E`RFU@{H5I9ecSj<`5hAZdnN950YGM_rsK zkTl0!3>VmGj=MNjAZbpxI9(uVPP#Z#AZdnOoGp+vr(B#bFr!YpxKJQz&bYW(AZgCJ z7%7l6=UiMWu-%+@aizeFy5Qn!f$ip^i)#h8n-Lc`3rwaPiBR3K??xp-V4X>PlCTHqXd$HlV(Npsi5 z^8!h8&&6ngq`B|nMS-Mw;Nn$*bLc}CV+E4tk&D*_lIF3C@d8Qn#KoHeN%PdjyF&E* zi;MRKlIFRK4+WBD)WydFN%O+Rrvgdy(#1r9Hw~{`OcqF*F&AG7B+YB_ejzt1d>I$- z7f6~n;{5_i^Hv;R;5UB0bMdplZ~S~O-Y@VQia&_s3!FYbiq8w=%O@9eitNCj#qmXU z;0bYjk$RaF#}}!WFXHne`SR7pf+G1cC5|tWFVo`qBK7i39ABhfzPngjBwv1r_lxAq zjCj9DzWfyL7pa$77b}ZY$uDtykt+EujxSOrf5hiSs^qWuyhxSI@z7r6GiY-?bQJkU z#yk&ei=1H_Jgh5nFV*N_eUa1bd=DFn+)FL+u(8OwcAude~9qhH8a}okdQ?ua`uZO)wQl-U1 zZ;@14a{iV~xks|xc zS`R}-_Lp@Yjukl{t@m)eNUCh`aH2@6Z1ixlNUCh|FkB>6HhVZ-?!?_}<(&gb|ku2%uA&ve(1yB3aVw;ZBh(+2`SIk*#IFhkHd%N(VgLFLF}q^YEw`-G6v^T;#5* z-@}tgC5JpbjZ|{j!?Pk;GT`BPk(1J(htVRba>T={B3UxzVXR1&9QE+JNR}M)FkWP9 zIqu<2k(=!k9^MwY-8$*vU6I?ZVGr+%+-{xn@S(`<)@cu)iky_rc=%l8q;%H9M3Ixy zIS-RXPD`5W!@?40rbiwYm8hY|9u}9Vp(h@el&GPn9+sDwN6$R0 zC{aVtJv5c5p-~UbC2Ht}hm|F2=%t625=ryQ!>STVGv=YSMAE$Wu)0Ljj0*)yY%*^= ztSON+Z-oaXlIER<&Js!UUdT`)X+8)UN=&AYLWUBV^GV21B6B_q8A@c%gpi>`=1dA1 zN@UI#Aw!93`YL27QB6}qh7#2@?V-EGjQS>wC{b76g%Ks{>W46*L|x5z*i~Xi{q(TA z#EhC1T9lYkzl0VgX4G$?MTr^p$HTr7+wfoEMv1zb@*EN z4wpDRHToDRaX&ua$6$#!CJTHVDRE=7(8o}T99rb#Xo(zJ?BiI899rVzc!}+1sgIK- z&QZ&J43{`ZE%$M%#Es1gAE!%fH%&gyL~3gGakj*Ev(m@85{cB}<9vxkTIJ(Hi9~Ak zF%qe1wU0}Yn%aC^j?~od<4UBaH9oFJYU=QDtwbVq`nVqHYORkOk*?PHxEbkcy^q@^ z=GF!ucS`Iz8-3g@vFB{^aj(Rlv)RY}5+|xHJ|2|Vkhl7H80l)8k4KTNx_ms2bk*(S zS)``zKAuNv+Tmj~QqxW!FCsPd_;?wqX_t>zCC*m6eTX?roB~t3RkC_rFb;8Hb5-D}k$83p|8uszK z#C^^wAAd^R=bZNOw?s;v@iC{C^Z8jHb89)DpYt)VmiczxM?)=jb-_ntEp>I#$NXCA zYQ)E)+GzjhV{vV?|MRh=HroIBSXvwH|9mW~rJAn!SYFF~yY6E}E%WV$kEU9-=9@m6 zYdN3a^3hUDHr@8Is+MZH@)v89%jdg)_p zEh+WN$F^EhYRpG>Ei>=6kL|V0ym22pYDuX#K6ciUQg40q)RI!~eC(rIu=%5USKtO_M$j)>2JheDv2+O<#pHwamOJAx$ka zZ(2xG%O?FzNK?xu{ayG{OEvuvzSL4pGs2fzs_CcjrIu=%^>Lz>YWgLlsb%K<7Shx* z^Zp2FYT2a!3TbLNv(E`|Hd52v0Ouk#%?ofoQd2{K3z3={16+*MG(W&dEh)7iz@fRZD<}k(yQocoeCrHNfLYO{)VuiPY2<;Ay0$_5jannR#mhJg;Tu zbp#l#WxMVS@S>ItYHfg5k($;87>m@jKEUfpO&bD?M{3#_;7z2aO#$B4GV?YEcvs8J z+Y;b?Eh)7%z=v8=YFmI$k(#;!e2&!A9bh6-)Aj(9k(zb{_!6mUXMnG@%)FieQ<1KA z1(=R>wL8GKNLPCT{HSH-?F}$f%gpNy@Uxbgw=ckKEi-R_fM2!DyaNG#*OF3w0scg~ zIvC(@q^te_bLyCWhXORzG4l=wSWw5L8wk);$N79PKyw{C^^pK8>)5G>0<_k#NgoZc zx{giySb(-V_Mzhe+UwYdP6X(vBWX?s=&U1Yh6AjvBWX?rSYJm)oDQ&|j*2)FU~?V$ zayG!WI#T6afbKfZR_6n3uVY4C2(Y7$8Fev0PaRn@5@1&yPybSY-E}PUfS;+Z;9;JJ9FjuaRbr_}L|;DtD)j&}qv1Kh7;ro0O9ppKa`CQhki-+e8vsAJ0= z7gyA=<-QSD)UoBh6<5@;<-QB>vW_kHz4)V!x49q0A9cLV{V4vZ<8AII@kbqRb3cne z>iE3gg!rS5&+AQ!Kk7J7e-VGwai0Dv{;1gW?!Jjr>Nr_{7pK&5 zbN54>Qpe5Rj5wu^&+z>er_}Kq>1V|$b$pudmpG-4-{$vQoKnZ<`u>PN>iAsWU-3sB zzs+w>h}k+O$=ndX>X;<+Lj0~{k~D<)Q^zD}4Dq*)NisjgoHC#KTM%MyncsS_FvPra z^!#6lhH~`$Ux>yscX&%e%rA3?w=~3}GH2{%Ar_ap!&@F=Ntrvm6(N?Exx;G;v8>D; zUUP`$W$y4+hFDSNZ9z+jrZT7PRUw+ooVHs-tSocdULB&P%xSwV#Huo-|Yy|R%YMr4AEZZHg9c+HD!8#U5Jh{oA3G%on=yBLx{CyHs6gQ)|JVFO(E8o z*?c#L*idHk-4bGBnay`=h%IH(Vq1u=G8xeoqPNVx(H&xcnYpk%#DOw%VMmC*GIL>P zi2gELMo)-CWj-gkE5zY4?~ite7%a18>K;;&WA&clu3bs5SPlFod-i)DUAA{6itGl}Y}iA#RjOhGQXamf0hYhqzTHBTj_4Q|2w>$q@I-Y!AaB?w3i6Qz0Id z*&|MecvR+$b0);&GH0B#A)b{<`Ewyg%cRBm5HHH?3>QMYEVDCQ3^7(FEk;7TE|V6Q zLX4M5i_0P2mPv~%A>Nfqi>o2tmr09jAwHJb6t0K(TqZ4UgqSFEI=&fVvP^E=3h}kf zd&Juzrpo+2lsh55m$_-X8)BwRM%)YWvrIUsK4#as0}{b%B+dY=CC5DV+MX&V)9)iVuVh_~u_`Y**%_0jw*j;fF5 zUvW=8GvKv&rk-a$E}p3;1>T5f>UsKa#VPeX{deM&dY=A!aY{W;|AY9Wo~Qp&{87)- z|0MpX=jneISJdv{TLLu{?*=}(2&R?pL)4zazSS@A8z z&U&8t_Yghx%=jN6cGdIrXF}|$=js0pvA3S5KP%p<=js0vZ`Jeke~Y*3dHR3ETlGBs zzv8X>==r}K4%bJ||K%`HPfyRwVX&T_ZpdM%o>NC-4oB;w=l^mzQO{XpK@P+9^z_0U zPStalwkU_w^=tr(b2wYiSz}2K=ju6YEY0D3J-xpyhl};}{_-3~>goLzIb5oz_nUIK z5}kf?4%g~AVXVyIdOaIJOAa@p(_fXtt?2YybGRLy{^}g=)w2P#)9Fh@Yo;1A^R zx1M)=eL2keH@B+?bC~;YZddzrnD=jPR}baT@NeGP9L}Nf-@LOK$YK7!sffWG7W|uv zIFiG{e{&8U%3;y}W9qHr9Qm$mUoFl2%H6*nwWPW4-sG2ebJJp0m5L;FYvLr19dlw| z#|}6#J8Vwk#MHyg%*@Qp%*@Qp%x~8^_r1J7RG&4~)jh2`XMgwF`VyvW(!If7M1&hai0tSQpTbd6wbk#$eE2-X!9{~}ml zRQ!uzLs9WBf{jI1K)oW^TvYsvU|W%MyiWu>ilkoO2zC}py?znwDzfhBAHnV->z)A- z>?tb#MXi4!OTTm+YjtboQxa9NG-gb1z_75^f*sz!QJ z1lNn~$W4ymR*~^BC4xIeRz*`IxLah-n-;-6HTu&dxL;KKi{L?#*>7e94~vR_5j<9- zKRbeFYRu&rj1U+=M|0RN+I=QwYf?m4X{}MrOorGHzL0_F?zB+;dI&0lE z5e(9q>DERtSm&6pi(rUOuC0$?s7|hJh+vpbu5FB9xK6HZieRM9G2a})7@a<6O9bO| z`kbv1jMq8l+aj2t)8}lDV4}{Pw7?yli5{Kn$@d~Sqm#S$BRH#b zW%+?bluiOajNrUZzxzlcN@pefSfWQ)^=|~%bh7xVM32tr)t*IgLnoD=M{rYb+ACCk zArYmM&o3jmtvBtIbFU<#bXL8uC3%c&hWW z{#v7WrnA%0F^cCpIo>IXmumDoNAX6Dd6y{OsWI;w#e1DZ?-oU?q4qyV(b3>4a*rrF z8QcloGm6dzpK0wCMOT9rZtp017_4jiMA6IO+Hv0~dK=uE(l3fW2KT1)kD{-^y(t5t z=x144vAuz!4>17Q4BY@%XU~4BMiEm;Zck<=x#%18tijTj$)2Mmpdhjc?KhXY83MgM*OrW78s29=}{~+=wxO@vB;p4 znHj}mgHC2v6iW>{nb}dSFz96FM6t?X#LtalwZVv=7sVQb5kEhQwFceIf+*G*tZ)}b zvEHE1Sro-agSmTg6uS+^^pYs{7<4yFqu6V(idh!LK7&4Ic@+B%5`9G!2Mosf$|w#R zjPq4d95NW^tD`t}Cf7%Zv!S7NZF>R*Y$lB$2B7*L`Y zxGT|EqSw0@#h?=N!u==)m&k|*5}_q#h=)-OEh+yev07puj)*L?_reh6N@1gDx>FERhjiV^~yTcdJ_r zi%X)|I$U(l3UM zC3?dCF>ET)6Ap-BbBUgCU<_MI^n`7*45q zFd>H1Y936C;f$IGlVUipMt^b)7u4uaiQ%Fe{i!irQlmdDhRY?^0n=l+rbd584A<4@ z&y3+liJov)47W>kg0o||Q=&hZ6T{sSE8)2@+*6}JFNTLD)&cWlc%(*uK@5-8=r4@n zi5mSyF+4A+`ZtCbCHjLUF}y6X3$`?dS0#4Amc{V4#MRg3F}y3W3$`ML_a%10R>siD zWQJH3LuZp2Vs#8%OlF8RF?2PVA=bvw!(?7q7eh~zb-?-G8)E2f(j9J$p`WSN zKVs-_GDB>RVSvdDu_cCqCNsp=7>1b43)^BCYO)U49>Xw`?r=v8BTah3oiU6unIU$? zFxq5>*d48@4D(Dz{BemWlM#PHBFf~LpOlC)8T+RsqD;pAX^AM4 zv419pB_>DzYz#|Hy2Eo4WhUprd5JQU^WZ`Zt4zlJMTs(#v42UT%;Y?{EKz2X0#_u; zOj6)#4C_r&;93kDOj6*wM4rhRaYG`{*#MIU{bzu+`)$%AFXtnVcJU zB^pi6je8P}Cg;X|i9C~z@j(oGOs=OqjA5@y@Aycf(d2r{V~IwS>nTqp8ck-6r!gEf znKhopaL8oVcrFoYs?R@=2sPE`A4r6nbdj$lLQSrxypG|xNk91}h7%^&Q{GC{np{tL zClP9@{m(I+HP!y-IL?`@COXD(Ud^0Naa>R{r*j+^)y(M<$0ap$y2f$Yq_^l6#}ze) zy2o)<&7mG~TvKzXXB^kn9O@Ov4U-i{?>KIntT6h-am!?d(Kn8}COt^MIPRJBApPUG zZ_B;0hbBG9pg10x^dN)dcx=*x42k23Ne?nKj;AI)$gnt`nXEO2$MM{x z8yOMD3zIozWE?L|=9E!!yfT?nM#u5mWKJ0q#~YJwWNaL7O}deBalA9>M#jhS-lQ9u z5J#)U^^}QmbhPM2C&kgp;(E&DI67NgPni-&7mMpDQ{(7raXn>P9NjGT9;V09-D1X> z5l0V;8E0l3JuPOOS#k8Tm~m#u(c5CinG;7Ji~WeXarC#CapuJ_z+%RkAICt873qRF z23gEK3*#7UG50KrV~EAvvp9~S7IV*%IEGnts!QV-ZZQiji(`bvEVMk1kruPiia17D z%t9;U7;UjiT@}X|i}`4E9Aho!qcw4ivzU+8#xdTaLs=Kc1dI7-eH;@ldX)`vOtR=z zHpVg8qF31z#}tcRWpf-;Emp2u;+SU9wQP-Jx<%KrEshx$UCZ`3W?FPDJK~sS(Y5T1 zW41+d?TTZLMc1-Bj=2^YwkM8x78$lTj)fMQ(qbs&x<7Rhxmj-?jK zbtsNy7Rhxuj^!4~btH}z7Rhxqj+GY4bu5lm7Rhxyj@1^)bs~;67Rhxoj4*lm$vH{#f1kzqIE*lTf>=T;p1ELH!;vEL%i z?!j6XBEufWaoi%q9>sCOBEufXand5gp2Ts= zBEz1>aoQrop2cy-BEz1?an>TkUI?!&t_i;sURk8sE8&$zn!OfYSzHr-BfPS>Cj3@- zWwAPbC%m$_Cj4G_WwB0fP2ieEnsrRzy2XsxDS;anGh*iiZd%NUT@tuuF(Y7Y zbxYumMVfU_;I2iQ^+@2J#ePZ81nyhpTCW5iSmavo1Rh%CTAu_SS>#&Z1fE)?S-%9H zS)^J21fE-@*?kKjZL7dO`45MpqovajZdJv zO`1(epodMGO-!JtO`1(gpqEXWO-`V{~Ym;UV5;$j*W)BlMZY0dbFa%g;g!u# zvwAPQviX-QTa&nFlV%;0xNnnYosxK9lV+WhcxaPmU6OcYlV)9$cx;nq-I91>lV;tM zcxsboJ(754)1~!H;<-((^-AJ}O|JD$;-yWl^-1EDO|JD#;;l`Z^-JQNO`7#j;=N6p z4M?KZ;a-=4Npy6$*JV%=ogD6U8Jt9Chcp|KL>GrN8=6E{hcp|OL^p>t8=gdWhcp|J zL=T5F8<|8;hcp|NL@$Rl8=XXNhcp|LL?4GV8=FL5hcp|PL_dc#8=pjfhcugz!~lmh zo0!Bvhcug%#2|+>o1Da8hcug##1Mxxo0`N>hcug(#4v|6o1VmQhcug!#0ZBjZDtZ9 z9dd0}5~Cb)ZFUl)9dd0>5@Q^4ZEh0d9nx%G5)&NKYp(~Y;h7(9nx$`64M;gY-tkH9nx%B5;GjqYv+GHmc1W`uNt|)$(rzYk)*;t!C2`In*KQ|q-XYiSByqtZ*X|~9*&)sDC2_?e z&F&|0)gjFuByr6l%^oIk-672$C2_+c%^oLl(;>~CByr0j&7LN4+ab-KC2_|g&7LQ5 z*CEYb2(KK{?4|I^A0sweZT}r}VuMUOD_byl;h94nME&o$$)xU*vr+ymGjQ zuQi2d4r$ggh35`w)+vP-4r$gog_jO#)+L2k4r$gkh1U*g)-8oM4r$gsg|`lA)+2>? z4qaN$6y7`JTCWsZUGCxQokB;Kd-(dK(8(p&`lis;CC&P!(9I>y`lry{CCvt;(8DFo z2By%{CCvt<(90#w2B*;5CC!GU(8ndshNjThCC!GV(9b2!hNsZqCCx^pFu*0vMy4>( zCCx^qFvum%MyD{?CC$d9FvKOz#-=dTCC$dAFw7;*#-}jcCCw(JFv2CxCZ;gbCCw(K zFv=y(CZ{mkCC#R!Fvca#rlv5~CC#R#FwP~-rl&C8CCz4}Fu|ouo0-Bymt32b!X%em zo1MaBmt32Z!W5TWo14OPmo%G~!VH%*o1el=mo!_D!Yr3GTbROZmo!_H!W@@0Tb#mN zmo!_F!aSEWTbjarmo!_J!UC5xTb{x~mo!_E!XlS6TbaUQmo!_I!V;G>Tb;sEmo!_G z!ZMdMTbsgimo!_K!U~r(Tc5&8mo(du!YY?E+nB;?mo(dy!Wx$}+nmB$mo(dw!aA2U z+nU09mo(d!!UmT#+n&Nkmo(dv!X}q4ZD$IbU2<(#3R_%qZFdS=U2<(t3fo+AZEp%Y zUD9k{3cFm=Y<~*7UDE783VU4A>|hFeUDE7O3j18r>~ISEUDE7G3I|-$>}U!HUDE7W z3Wr?M?05=?UDE7C3P)Vh>|_c@UDE7S3dda1>~sppUDE7K3MX9B>}(1rUDE7a3a4Ds z?0gERUDE7A3TIr>>|zRMUDE7Q3g=wX>~ad{UDE7I3Kv|`>}m=ZUDE7Y3YT2c?0O29 zUDE7E3RhgZw3{hhb;-3`DO_{Owc9CNcgeLoDco?$wYw?Yc1g2)Dco^Mv->IBbxE@a zDco~Ovxh0%cS*BHDLimVv&ShsbV;)(DLisXv!^LMc1g2mDLipWv*#&1bxE@q!Yh|F zdnvqfNwZhNE0;8TExdBMBl(T+%H@vax56uzJCffCuUzg(elNUoxg)tXjdw0-)-jFu zE@{>&jn*>PYdfdWvCJLGUDD`O=E`l?G&+|_vu;t*oB^O{05R zJ^!0Vk21N|JB^-Ya;;Aqy~^ZT-!%G`Nwa=w^edBQ{nO}QCd~$@;SV z$+bCY%qf#=bJLh#Ce7xhv7k(v%}--tnKWCF#-cK5wlIywWzuX>8cWKg+2S;omPxZE zX)G&~W=qppUM9_!rLm$+nk`RbWtlWvk;bYrX|^(r)n(FbRT^u`q}l2;)|N@LHEFCX zlV)qvSYIa1)}^tbOq#7vV`G^#+mOblGHJFkjm>4!Y*QLr%B0!mG`5yWvn^?CE0bnh z)7V}n&9?xCLyVKZPCfD|)v9C<7?M>rg znKav%#-TE4wm*%-Wzy_G8b`{c*}*i9mPxZiX&ft)W{1-_UM9_sq;aB5njKB!WSKNO zmd2?vX?8q~(`C}^L>gzxq}j_Qq>%B0!FG_ICOvrB1QE0boI)3{zH&90ZQC zju~{XkY=4S=usifI%m+cLYj5SpjU-7>zYCD3Tf6YgFY3~ta}E1E2LSE4Ej~*(t2jl zze29{%3wf+TXoD7y!$hEl{EU%De^D8wHa)$kY?*L*ij+P)@QJ@LYi&JU{{4S+nB-b3Td_}gFO|}Y;y*CE2P<$4E9w> zv#lBIuaIWjGB{8n&9-N7utJ*c$ly?gE^TK9hb!dTt_+S;$hF-W9IcRRdonmyA=mb1 zaI!+0?aSa)g*4lr!RZQVb|8Z@71Hcr24^dz*`W;1RYW=Ar(P$A8ZW^l1W znjOpFQiU`-p26h`X?7xmD;3i0WCm9&q}izqu2o30(-~Z^kY;BxxKSa^&Sr44LYke+ z;8uk+JD|zFYE2P<_4DMA(v&$LWuaIU}GI&rS&8}wfutJ($%ivLk zG`pU`;|ghZBZDUuy0n`aJgtyxw=#HEA=hqa@Vr8<-O1oZgD1dnvrCl4h@jS5?yNweYIS4%!>xRh1pIx5BF`*8|=Ouc}-RcrU!Fay_6m zi+)wotYa4atE5?{ECy6bv(8xztdeG3vKUk)&AMhWxJsIJ%VJ2CH0z$l&?;%xBa2~G zy0o5I46l-Fy|NflCD(dqF|tao^~qvXm0ata#n>uo)-Q{3Rnn|~7UQd=*?=r2R7tae zSxl^wW`nYrR3*&@XEC`-nhnWfN|iJln#I&AX*Mj2X;so}cox&Eq}hlpW>iVDky*^F zl4hf_m{ldsMrSd*N}7$yVosGb8=J-4Drq(@i+NSjYj4W1E>C$Fqv9e08&B|g` zm0X*h#p)`#HYbZURdQ`^7VE2|*}N<^R7tb>S!}G5W(%^|R3*(8X0f?Snk~v=OO-TR zoW<5EX|^PbZB^22X%^e7q}j48c2r5T&JF+-crAynH#px=!wkwM>RdQ{27H6yE+MX=V zRmruzSzN4=X8W?ZR3**!XK}eonjOgEN|iJ_n8np9X?7@!YgN+ha2D6Aq}h=yZd6IL zqgmXnl4i%UxK$<1j%RVZN}8R>;!c$`JDJ7ZDrt5qi+fel>~t3QtEAbPEFM%zv$I(| ztdeHuvUpS_&CX}>xJsH`$l^(rG`pC^(<*6pDT`-S((G~;&#R=_l`LLVNwce2ysVOD z*Rpt3CC#p9@w!Ty-N@oil`idO7H_NM+N~_!Rmrv6S-h{3Yj?6}ZRUEw-7GpclVW>RWc4$GQJso^;+ zZziQimgaD+nfr#9<#4^3`-Ye2aHE;~hF9cp ztC>_;nZuoC?iOB^!`)`?7G9mhy=LwfUX#OvW>RHs4iB42m328hX(mh7=kTrq( z;eM{2IdpH~PQYC`^l0Huz}-3YY~fD8JvsDh;ZDH4IrMJf4v2j@^l9M^i2XVAZ{fa& z133(6;l781ISg#!O5vd#2DNad@Nf=;TewnqB!?j_Tq!)7!_XFz;h02J3rG66L{tk$ z`h-MO3rG5-L{tk$`jkXe3rG62L{AIH_l!hO3vA zw2%iEbC}vf9$d;{S_^q_Ifv;j&oCgmj zqFOi)9!W&CFuOd?VOw{S*0l_+cBjCdwd*23)aT%xRn+2w^qSqrnv%N(|~ zaK60CVS5X6%4>VpU1Qs^TLKarq}3RH|8<3#`&@-k3}`kgUxv?sgVa;@>p6U z54Ps9tVZ&0%VT+sUUYjND{9OEJMvgrqZi$o$Eq5$!LB@3*XTue=dq^7ys#&awKaOt zy?LywF+=RjV|`7nf8?>Drq)05*jOVO4(73`rq)05*jytc4(G9@Mn)XTV|$H^IGV?f z8Xf4dJa*Pdi{p9hs*x5a^4L>jt~e=?S7WX?mB+pspDZ~oF<2ub&PWW_$cVENgEcbZ zTpovOWW@PAj?~DA3lf(#GU8$$$7*E6r96(;$cW2%oT$-(UdiKRjkLI$$Eg}=aV?M2 zHPYgG9%pK##f?19)<}z+66ZD2;+DjDjkLHeabBYXy(4j6qXWGwabBYXy(e*AqXWG! zabBYXeIRjOqXT^?abBYXeU!)jn(F`M@t~&qe-hI*)&G;2uBrZ?L~@OvjQm_8xyDaM zej$-uicsem3G_$lk13+UN_pHkYTfL%dxfPyv%W&?gQqU`hw_U`PSeJCFxM3z*S?JQ!BM z><*;B@B-#^AO%JgFuwz1e`Em*IxzM}6|lGiBYt!NOFA&(#}u%R+Xu*`KA}N4l>_0-;9Fxhw>1m=9^j2J}L8A^UW$~pO#4+^35)2 zpKH?QwUM7UUk-mQUz=0Vz9Lgo^UW=2f6=sE#Jqy`4SDcU^UW`4-<0PbHQ$1Q_APnr zQS&VehVA3)1YQ8lE?Kgac zacx0s1t-?Jg4Pk7SnCT~XRxudp`djE8!H}nS3#Q!K5o3bpv?z|e@{VM049OG z1#KZX5%v|dMc_o(U(gnVN#H<1TLMmrg9U9VI3*4hv}IrtI9$+{gOlS(L0bV%j-v%_ zC72G56|`00G&x?-R)f>zL_u2vrh}6OZ7n!qP8GCuU^+Nm(AIei1}*; z?F@+d>jmvBi1`}@?Hq{tn+5G2XzOnkwEG~cZx^%&Agb>aw1*(7?-sO2;6s4-3fdD8 z)%Oe9QxMe;3feOe)ej5W3-D3kM+NOA_$ct>g7yl06!=L&dksDW__UzC0UrWUF1#PIGo0DG^v|)al^w$M#xSuBdjm!f-E%#fQ2Yy=acQOzB zyld|Z+B82ccWY6b?&o8=9gErwKjGP_sLk}Nk9{s`v;At>x2Uc1vnklMsIB&M?sh9` zYy6zM-HX~fKj&_bqPD@$;<;y0+vO+hdKI)K<#b=OULW`Ap<;C7+61 zArnO|cr0?Il8;2LQu3k5)iQtNg8L%ZD0xrhS|#s_T&Lt6k?WPbEpmfQHu<)jA~z~| zL*ynUuZ!GV)Yi%cS4D17@`}i?+?o8^K7A`dIM zU*r)b_lZ1O)V9b4dqf^na<|CiMQy8`-6`^fk~>76RC2q>Q%Y_Vd0NS>BF_}HZSrlK zMV?i1lgM*QZWMXGsBM=E){DHLg(7b&xj^I{CFhI0E6k8<=Zd_ibV3f!=N{$ryR>=`!blw%~#OTz0B<%*x_r6%yEbGRauT`(}ic!ti zQLn2>|3UM0((67Y#e?SStk?aC)DD`ji(dC>X=7`?u6o^Pq=wLZ-SoQ8N(rI)y6bgc zl_aD2dgygulLyT;Ur)X6FXTCM&DTq>`%C%Q3C-7Aulp++rapSzUrVOZe0}x0uS=rQ zeEsygzmYtn`TFa1e=BK5^9|7Jz9Csg^9|JNz9~9J$c+*^9|SQzAv9Xq4`GWb$=%xKB4(W>UDol-!)3F z`-i5ja%Qw%_m54RMU2tw{;6rBh_QOzKhu(p)9e0)mTbIU_XAq833}ZRX~`z)bw8pd zo21wMn3im^UiTAPvMGAqPie`f>UBS(C7Y(#{VOfmbiMB1q(TtasMr0w6bRxP^}3%+ zeITw;ulowY0QPrRaD_e)86;uZC}UrELjuc+7kTIvSzihA8| z_-76l>UHAUhRDZjEYj-+K$gCQje6Zww8G=_61{GkNRQ7;mGt<$Os|_RXFWbISJLD2 z3cYTIob~v;Qb~``tMs~=a@OPXY9&2BuhHvf$ytxjYnAl)yiTv1EoWbgT(6|Z=M74F zeBP+n&5;W{K5tUe{ZmyhtB65pfH&3Jo<*j<%e31`CZqw@)h`cA$ce`FM)3^R3 z=?QAS9eTa@K$Yg(sn>f?AZWf_dc7;d+~C`-*H@bA7s+>ZlGA(i`cKMgf#%z**MCY% zI?cCFum3a$YrkIqB@V;^z5dG_h=Y3lSL6@aXud;w{om3*AJ*%?LH~S2um2|f^HIJ2 zTjHNJ-!Z-Z+wut@n(w$?|Ic#wHQx!n{%176C-r(6ntzg^Ii=Tk0u94yyh)ryzb5A{>Gl1<&g*5p zzCYM`y`tC4@PA3ZdR4C<2zFkt>Ggxa&g*r(euy&9H}v{p5PKrP)9V+?{qeAUOXscf zSbbYbkJWed`o(g=7Lj+A^jLjQuU{f(JwV@Aa)ZbRdi_#4>jCGjLx>}rvZ zmGl7pM6X{iXFV!ERdTt=XL|h#IqOmRxn93gI=}*n?`YsGi1$pJ~NFQN4^0Kii7_ zqIy&H6V=D~@N=!`BmZGvqe1?|hL5B=5)2v*mh|@ogGPfb?LEPu(NLD2o?y^uXd!6_ z84Vv7+aK}`HX8o0sbRQZzI%imJSYq?8vc}E9cnaui6!YUqv6ZaVG$r24PPNoM;HxX z71J(2G#b7pO%=^I%4qlt>8S`1jfTG>M#mTpe@%>zH5$H7jE*xJ{)QMGZ!~;EnkbrY zg3<6}Qg5Qs@Dm2oB%|S{q~2ts;b)}Y6r-kqFnG)PQ%cXE!=ATi@6rO!W%`+OL@a!#W zzR@6sXHQWJj0Pz@yNgOBVMi)WwrD(R7WpOPM__sctwYhQ>wprl9YgGR$hIqTWyLrQw2KCGnYq>mU4W90(R zC?8eQGs?%5^o;UxqhXv}a7*L~C2xv6sibF=PZPb=ve zqkK-uiz3e}>3QZ0M#Dt8_MFIzN}d&YNlDK$Up5*h$pxoGUQzO-$g4_vp81;5Fj+3} zjPi9QkBYpZr01D$D(QLVTSmhax%QyQ+e#jgV7_CtlVEQ5k*xS=zPm;{S3W{n^W8Jr zmE{wZHQ#-sT}8GlYrY3YyQ&m^n(v{}u30uKYraQDyB68qr}-Wm?P`+EHQy7XT?g6Q zr}>^5?S7vY?U~W;F8jJZe+I?CUjm7+x+I>b=3B>%B+I?0Q z3B>%B+I>zwYe>vrsom!VH)8%u?Y_(6dH&zl0H#VH5I$l-_b6GxW<-=ISrQwscu&Tecepcpr<6i|#C zUkdzE_HqjTN`YU=#&pd$u@v~Vn1zq|CY1uhB#&K_O95e$$F3=*fH28p*VIx#$k9#I zv{FFG(M8nsQb5SjNz{x|U^v*8m{|%;0$1o~l>*W#^KRViQb1Z|KN2;k6qu?AGq)62 z0PZ82R|+fy*X8Gz0*kw;218d_hG?^sw0NJHz(q860`($M-dQHx6fX=r^>)RIy_ z8d{$hwX_u24YqKWl>&Rf7S8fgU@zFhSy2i|^U9FxR+a+Nyef)XRSHP+DlckvDIm?O ztf)1mfV8YqqSlrI(y~g3T2~4Pr(&Ykmjc46h^P&vfN<*fL~SeuE-H#`Dg`bnift|h zE-Q*{DFv>8E2&#cfvez3>b6qg8n}|Wy%e|(uB7fL1#W;VsXI%7o8U_7u2Mh<*dYJM z?o!}3xRSc36u1Mfr0y*R?t-go`$~a(;HujGQa~DMkncE93OoQ;)ee>d55ZNnL#4nY za8>PaDexFvRXb7&NK5Uxe8zq^0&))bUc_xoXUvCf$o0##OpF+{q%`9WXAfL zuWrhW^)p}HDg}D`nXhh_0)13N>rN@q&(9|7-BMtHpX>7XWG4E#>*2o4L_b%-9>`4e za~14iDX`ejRj@~;z!E=KIv$q-OZ{Bwcv1>1^Rqqrv=mtGXM6NnDX_xN_UQ9cV5Oh! z(HEtFwD;P{-FPW8+t2psE1B7Twntyf%=WWA`bK89pY74NGPC_$1$$QtNXySB-}}B4 z*y!gfSgRS>ndLi~fh~S!`Oaowt7;8)F$3FFYp|;s*sfZG-ORua)f((> z26n2}U=K4O%|y@X_cR02O#BB?z082L5Wg>~w;7NY;&(;$F$2;<{I;mRW@^U-85$4kYDYlF$0JF-2FGu3>@)uy=0IXIO^wm$zU^Z%+Kf^Vg`<@rsGgEaKg{% z9%cqk`WfBB&A=%?qkDuIkT&IK<$oJ#2G01|Iv-^Q&id7AiWxYkMsle@o;HGcZzO1hZmWF335T5$i+%}_3#oiFj3BaAabdaUOl|b3`~-< zev!+S^y=XiW?-_MeJ^sQlAg<2Wd^3mS_OjTL61jb`H?$Wo-{+hjKWq3ngze4EY2Ka#C*ANsbK zjh|?0{EFv6G~ZUU@srG0+swu<$lhJex7}>~BG-U+n2ldz#@cB%s;YLE+4wc_BO%{z zv+*yR8plf&)Hp#7rhMBTv+?g}E%us?e@|<%&ush$T8sT=<3G|`955UIiPqwv+4#@2 z7KhBnf1$NFY&QOY*5ZiS_(NKYqh{leWILMF$!6n^WjC7C$!6nESnZrJ8-FU9PV=2K z8-FH=PV=2I8~;`EoaQ@iHvXF!Y0Y=WZ2WgwY1DjY&BmY0LZjw8XEy$atTSr9^Je2O zqCgMGdurQie_zHOvZ189Gta za4RTf=y*{hte}*kUI{zW3Q8I3m9V3%pjbYygdJ@K#qxP2>=-L3md~?+W38Z+p`HyK zX9fEx8#vwyN*U^vuoJAHl%ZY;JJAYC8S0g=ldRw%Rk%*Jf?^jvlQ_i+ib?d!)u~oc z%FADinq~z@sUmf{6&wR@@|$EnhErWKr^jN>dTC}#49@*T6SpjgO%7B$BTPE)O@ zxmIunn4soa!C9&SHQx%(QD$<16`ZHmXBS#Qv6_D+-@C{PioyJvsKr)ri87c=tl%=$ zc3Nr$rReo+F1LbWKR+#Mg%uRj`AJbLt>6Z=KD){aZc?UmwH4f=3gI#X1|a3kM(E4W7)(G6B`pDK^>;+=u!3SWgQ9j?L9vOV!^Qu04U-nIy>e;0Yj zBD(%nDu#O8!LTeIC_;CqpOC9>5HwhCXrDzc*;>?rapB0Jf^P9nc7va^z364^z`KNH#24tACcz9_Pr zl3x(n-41q}eD0pBCB6Cfq+IvbU0-6xqiP_LOh?Ly>*$U@ws$7unBd z4(K4Vzs*e0B65Jud{7lRP|1qqs6lo}a#ZLeX--SUZHFxO1culln>~S{c1UfC8D@um zpQZP3JM;;5AV=7tPcs>ev_qd~zj2fu`idljkZ-gd`f5|CpJc?)06BP_h%t8PZ<;oV z7;A_AR(4@&zHxTwTQof5?a=o~`U!UEA7l%bRNQvxpJm^b=9^@Pe#Etu$#&>xEXJqU zp`UZXWU3wdB{v34vqJ**ersxo({u68d=s`FcAfyH31fg(`J$9(CDs%VRp+Tyo-Dihn=g9w-ukN=)qg2s)zz&U5Ts>%qW~mb8kR6(> zcAXrS0Z_Y6j@Th7EerC!N98{IxmV|y+-E=c>KwO2Qd)W~ixYN8ian3DC+(0Fd%rE} zl-ym#+S79XRN;BX4hcCuhMu)UQj&Qicuww`pSj??9g-5td*>JIkd#o~JHIIR%Fm+z zlH4mli~h@Y=&qkd{}ns*!q07xSLLqxxefA~+%-S9L0*^p(uTS8h8^nGh6VXeJJh`m zcbMFgJJg0Pn%j10a2w{$J9cPD8}72XD-*K~-|sy;G@%XO?|nNou?^qv1G!giRFN+C zs*Nhr?a;h7Y`8p@JJg0b+o9)e#OQs@_eMgpEq~LucBoTZ{-*EjQ0KPXwEtdaL|e|{ zRwvZ8Ew@^BbV8%rGMqa(q0w!{D1Xe?*$Itl%Lk&nIH4JB8O~ju(9E`M{C9Igv)VGS zyE~z!ZCT*=a6-%4vcT`@gqF8edw-nJineO+j}uziR_*<9LaW-Uy+2N9bz8Of#|iCf z%Y8omozRiCY^V)zLg(6Y6b3q>8*SOfALN7{wdI2bgPqWuw%pA$#0ho#fWQ4vC)E7| z{`SM1P>&Dz+Yfg_JwM?3?Fc8->jR={q!SwY0h@)RoY1fj=mSSPq2V8}SvbZCjrf4g z!m&UPMR=L2d_SPurHTKs!p>1;3tM=9@xliPJ zCB4FLgOXn1x6ui0mutPkZcS1Ym0&fS* z4kb5=+^OUSk-KCH$_490?pD%UVBMqS8cEiBove<{%v(E;dCT9i4c=kDcR1o5PI-q*-r<^exFd%% zrz74EeeM0bRc=eHn|J8v9R_&^Z(;9`PXDp*krS2zH6}ZsW4|k}-;-BDUU_+$@~X(| zkK`q-sMwd~^*8eRmb`u}uV2Wkhy45+e@twU_g{Ivk(jrqBjzpt$GkQ5*go%Y!aH2_ z4!69+EAP<7`$hVC2X9HzE0`WTVR2wyx%b2g_W_f^QztA%vLol7Ibm^So~3#2gr!I> ziF)CL#g%z05HFqZV6`gx$_b0x3d_0IPI#^= z#g%~)U^yJ0bce=BN;8!OCb;q9tmALfR|9R7uz8}5d8tAc%m8{Vr5_K|K_N@y=cM!DhrDnv%RVX=;0=|08{ zA5)ChV0-J@lijdb zOmBRrxM8uFWl>Yz@EJ9})7Hs1~RRvrEYZg{k^m7Q zh7q`A7+Fh(5wm0%*-D0aSoJypC*ANhkwZkDQgX2Tf~S=vV59P%dVuxd>g9?5H%EAY z^>W1jKR^6`S;0#P>*W_b?W(l!Um4-QlEHuF0WSq8`2QF8J>-|sl8Q4SD!R>}S% z&nekY4Z^*ax7I{(0ULr3k*;C|YH+)kr@Y+RJly|3KWe^uyiupAg=Me6QX1pKNMBysiAa5poF0*WS48|BMas zw{H8d3P_|g?zaCLy~umF{a*-1q%&S_|Cij}+OgdJyWFwbsoeg1+-lXi-2VG)k#{M# z{}EdtUCZr%%oa$ua{Hgi;!nuez1;qnO|kj%)?zE=@KoGSk8=B8HO1D*zdkEJzh}9< z*Xfo#Q*JLNWs<1g|4(b@9o@)rQ&N;r{y;t_WbKai!&ROpt==o5n z0f_3Vo2w9uz(}bBb&o}$?`uIlVv+t5knS0apa!82+Iqzz10^8cI~Exv0qH)m$Y2Rb z_l-pmK`c2!gEP{;vTcG)|NGHicFTnkkEcC)y1etiU8Jc2|UZT|&#UjYbzlgTQu}B}$ zYD;1fgiuJUEsaI`iB@aIJP@t64D&#=+H%YT(P}F&4@9f2#5@qKwhHq=wAyOS1JP=0 zFb_nlt;OA!>Vb8!$OobB^|8nj39xL4MUZ>`DE@+tu?TX{9|mp0J<4P2YjZ5}D35=Y za0^Bw#MKR3F$N)?5!+&s@gWXwZI4AJgm`1tj#vc23c9~LW05H#zQ4OL!$Mq(vO5+* zID$THPb{)k!WMfmH$q$$urC(b72>LZmRMv@h$}qye{NY3RkL2@pSW9ZOE+|b9q{j zoXay9U34Ii@~q%`;5k8ZF3)4o(Sbb53xcbG7X`_=yo5E04&+f@7F-UzB1q2VRopCe zAdm8z;1b|UH7U@5R?Jko%^Ca{;F0`?X( zfPLbTap+J2>?^1N`w12U`^O{W(IEmHAovO3K*1+~gW{11=I zM28OphY5ZNI9%{C;D~r+5;}x|wSon}k%IZax_D$VI^+RI2?l}nf&t*@cw`DXJOqvr zd;lC9k4#1DJz#_2UEnyuJHYYr$TW1IfYJoPo4|>J6kD1Uk4#4giY-kRyb7Emcm+5$ z9_fJ42957DK^oubf;7I3@klpxpfQ^vNMklL9_fQt8i!eeG!C-`3xRXukwNG{-)*ko zBj7wi`kM3Ok-_M2AGkn}zUD$f`kGDg$Pje64O}EhUvshGO;{I8;zh77iWGzo>Nes< z2^4391I_Uw2geklZX;gg^1g%R@uF(p0J0)p^i57$tc(|Zi}xL@iWhyG_Z_T`7k!5} zfUJoZeHZCxY-@-YeUI}Q>*7V<=b+5`c+vC78lzGpUi2?W8e>O8yyyj}XoP&?MZe(S z=jM3Po5=4&25w>c7-(y}=q)OSDGY35qNL{bc+uN5e1(A>Occ`I883o`90u)*7yX4c zgP@KrUi1#l8^~0qAinqBcrm_ru|ie=!Jl|>g8$5xc(KEO=Kgpw?QcimCtjT7*wMjw zaf)L{hvLO)jvXD27iTzjbR=F}#j&HK@!~9EM+o=Ci~kp!V8`RdKj6xe6Y=67vMqKp zUi@mJ~BK~e%Y;>8`% zN|OJk;11xecyULxlH|WFxD|Lukd(mPcyT9mAjy9(UQCe{lKl4tN%B947gK;}E%2e> z8jSs;xQ4OU6tV}fEp6?~&}gXLwY9GxLyg*9Tch6!MD4Dv(GSC+cGuSEHt@&I++tt>pIic6h)}BV?Y&g)})_%e^ zY!6#|hHcoMw)RuDVSCxyOI)YX+tz-|bsBwa?Pbp1^|iHExK5*=t-Z>18vSkUHLlYb zU~8{)oyI_0`yKBa7-Va|=fyJE)+EC>#Mb`Ei)E;-{fQULFk5?r7t3&4dy^N-2wQuL zXJM_az0H*xBW(@tI|WG2>4`<7{oFm_g%hZI+lp6KoB|j8s-T(biDRNY4EvTSLa_d!Wg-hK$p9 zKvQfDEasCAL8Aq#Z}uP(MVE+QSeZS8~+W9)aoX098>9Pi#@0GX?&++p_0H${ za?aNJ9_J~wO)nK*KMZrU0$ag;Z`Woskyd9K~Iwc321YjYC8D=kxmQme6+O^ZMcI9&=Q_qC9JDAwvZBm;LuLL)<|99Szz2JXm&)*Y>6 z)z%4;RXa+s6|g>`^*{%*x<(6<)ioxe4MQv0S7QaqzG_Hl!_i81=D3750!YT?c)<{G zLPD!WD;bv)1<3%Ll+Z?^m8`DGf@EAyNoaLwC97+yAX#101j)FZp3p|41DTPHg4cmF zaO=@}5ja!u0&rGBn}*gCz}bSwfpZetbhI7?&J{cYoR`oV(Rv6tUy#)Qf`m2$t^0us z1xfukC0JAL1uhaK^}iTX4SmV+TOvs6f2km;|7OfUbRhM=Opw(7azRr6D=;z9fz z!HvLGf@BG-PH0rGu@bmOa0PI!Ao+Fc5*n3VGy~TQE(LB7Tmsyf(5P}{5pa`W6L51v zqY{t>z%7FFfm;(Am2Z$Uw@r|ox$Oy!lCraaI|Rv@+nLZP6Wa*fmCz{XN*>&9!KuJK z35{~DlYx5$C&6;rmnebdQld~z5Dv5?N)kwmqsTW=;&AcnfkcVR#jghwB}p!RJ(MU( zAtjC?-$co`VBDg}H&OC!B=*CBqluF5Kn}oIOq6^VVjvtio+$Yq=N3;SO1{sz#gmDW z|HXx@rxGPkb5!MYqU0r-g%F%f4?t&`?t{)HN|2_b;*Il(l9$QuM_MpZ@=8sR)ZxWM z$*Z(W8EHYLYoN=ClGh}Yb%p6N+O8%_UZ=^4>=x4n(Dg*g?`neQKsOR4zo!%+1ZSe; z4>iG4pj(L&#HLSxZZjPR-AR=EiKZ=zD433b?j=gzph=4&3MNuZ4-zG?_Vo5@eF}DWIeHa} zIS_qxbgx`Lj_NV}1TM5Ezq6x%6DkpbM@Rn_G$J?-PNZj{a=9evaPgJTBAm-+DRvb6oS=+tHurn%_Q-{sLFL_jUANvMt%q(d7)J z{*L|<7k~|L^jDD5ej+f?(O)muFVQ<*#)Z70L5}_|J061_{Xf|87~<%E<;vWlj@~KA zNu*(pjxZ@Dk%l`u!lWHRBOD#cL<+{$Iy%Cn6pS0`=m?WiFs{zgM@q78l%v;4vaa6I zM@h17w4>KcvTlr{BmKzsqoX4b%J!q9BM|yiyvsO8N0RWnpz)55Kqw`BCOA3*p``IA zIyzE$WFby+bOb`lLY(aA2!xV_IK|Ns2>k|Vs-v%!lZmD|`Z@`9PIq*q_bAla=;#|H z)H%b^k?8v;w9RyMB>FxNn&s%5CDb|F(UIsQn{tk$Bhg1TO?FKpPyrt61zC9UTe5AE9lNqjwjJeKYQ_RN-!M zbc8=Wyt>uV5&q1AwmCY&pA=@^?&t`Ara(I!9o_>aq<1*(+(D$sAAqr;`i) z(9v(^l~YaEWk-h}u^e>8(cwolgRVOIojlao2>yCae56c>2(9!Sb!AFD` z#J$XelL#@0dzl9>5n>ScG7oMd#31ga1bOc|dK>XA?m2o}@h$ED&|)lo4w3e?8cJBQ#V76#h7dY2IUiS1myYY0*U_M@wJ3qfok z$?xjjLo7Esx;jp58i2M=uHF!08PVC*5t#l9+Pb)UbBGfeU0oes%a764&DA%AIFZra z)i;Ka$Ur#J)sI0&k-5;*WpPS2LN7sz6ZdvmzLJg5N04lUzOH@}|BY;feu88p^mp}B zXr&Or06_{44|Mg@Xk7ywNJhkPm*q2A4kH8? z18ZFt*kn136kG_bbM*^&2eKSSx%x#QSq}ArWI2p>Su~U7Fh-Cphp{fpYO)*}1g8VX zx%w5n16dB^UHvMMEQblMehoMgI8kr{aFVNEN9#D?WLLid91ENxI0iV?)o-G;9ym>K z6mYt$-$Lt1V549yaE7bjM(c3kOu=EmS+0HutwVsb1qTD?xcXhR4g}5>8~~i>>i5vv z4>(`2FK~gY-$!e2;6lM(z$RCJfYu(sMS|Udi(UO8TDt<52zCK3b@fMR?F4KV>NSX^lAXO=Fc12Eg=;|H8w&CRo55V;Nsh3ra*d}r!m`>mVjNgm;~EJLKCX3*B!^Mf zxkiSgC+l4!$Dz9ouJKK_#x}af_c<)L$u)k6nBx;lK{p_%(0z+UXiE^8T(}uJJOWF;4_`yT+^K#!`Am zI+VU{*EQbZ{jB?3d^yerwzx(c$p-Fsjkcmn54gq$rCbMHr}1$xvqkhlB-7V0tAK;Dvs_;J^$m7U8cTw}bbxs$FjLDbwS*O(}3 z?zC&nlB%LJt}$Dxiq5*m9H}Zg=Ne08bI5tuXqL?(7hGeRltN#04XEZz__Rx|0o6=) z;bqr=Y9_nzifceMlU;b#HK3ZwF1+R%P|ai)UUvpj63N8-B#o=0*2gA| zYogX0lE!sW>*JCJ6k{IVWqi_rVhn&LBn>FWzk(*>9*J6-g!>WVQJakW5#sFel%xSA z_y+n-O&U;w6cU-1G@t}2Br-i|KnYSvq!ITh#Agr9z&(;o>`dIF5SKmAN*aSgyw7}g z(ij}#bvY+#3<>e5%}p9ZL%h#?UeXvQN^pMC7%ob1LDCpON)U!)(m)nB3*pt2H0al?~-5#;AO$~z$;jW=+G8;Rj>{4nqUp^I#wq-ya&7?_*dXf!T$i>N*deI;opI` z1>XVQ5&R4AZqnF+4sQeR3BCoqFZd>u?}Ma*eo~4nd>$s%Q&@o57MoOG$NGc&ol^9} zR7lXI6rHe-1Wih%Io;AOrLvIePXyYh)OX6&$j9(D<8Y})rw%FgG@r`UF{OTl9TdpY zq|`Hz>~OzR>RB9V4fi{xo@e*DYf8yk!rfBpSL`)+PpKC<@z^7!UV#zNI?ywvUN2X5 z^ckb*QcsuBbQzC}i?{2QQg5WIDr8kJJe z!W25MPbs+1Nzmw&f_9~}%9xabQ%a7)*pxaZu5Cj~T@*)kTuR-O19r#bua{bz2`N=4 z8e<~<7SR}!QVKfjS-i_+{8f@3nvzn`SycNuHKoRivpFrLP!CG!q3J0FhmrJ2BmPp+ z7&B68k)(ZQrqp6d`^-uyq=LvMnVnKd1$_oIC#8@I`V?qxO05^ia$ZVp5XW+UNO-eztkUO+C zrQlvY4O*8{aIZ)ctWPQE7!R}|rJ!TT;ogXO5MqaW6UI5j72umO&LMWVw_uz@Tmil{ zrI3~)2X9+SAuUA?-u9G2TB;JXBc`$rfAs&MR7}F4fV{p+irjkZFgfW#g(&3ak6Dn`P zt4C7mYzQ0R;i6-7LpZ$>mL^6w#4h!5jBbcs>Jur2 z`G^_9(!|`&=k0BGF=O*Ngm4ctHlNdG_c3GhIc@d;Gd7>oW)D+pV?L+N9;Fl#C+qPp zHED&!$+tjl(h7-_YEav>LgIvGNxQT{;)G^N`?NYJ36>6Nbx0B{9n%WQ6bhYnN~

    B*lHBTQKPRt>J0av4Bsh8?xd?XSShDc}_H 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

    9WPSTxhT-T?U7moaepivJLWsKKs&T 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 SQ~5bv&XGONoSeLzXZ{cPnbDvC literal 0 HcmV?d00001 diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/bsp_adc.crf b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/bsp_adc.crf new file mode 100644 index 0000000000000000000000000000000000000000..fcb18c44b102a4ec802d80674b8607d41cfbaf90 GIT binary patch literal 353413 zcmbTf37lLTCV85^vAPE5;foB`S5_pMYvBW?Uf(;lP5+HHl|DCG3b*pZjs!{&_ z{Uoc;ck0wRr|MMIt@R&{i=r*ZM2~*gVl;E-MbVaX9{0G*TBFs=Hm=<`w0`wvmv0=H z;-8OuM)Zn*zT+EPBm8&4osWsOoDa6%p34vJI=E+jwad3rqeY;b@0 z=Xc#RL)`5CT5oTONo+D;w(v3j?OR_wRc;gum$a54=YRzvs?0+VV(CcxP?zp36xeBiXJib|ck0 z-}cE@h*WR+AA0Jj^0@q}1IXjUKUMyH|Iul-d!01XsXl#_sSaAH{_N;dU9rnb_1QbC z(UwPV>bom0zw+wchfO69A7yq|?=n;U<(*ly3er= zJi|=)wWG`K=^IyDPH7xnvMUel*>C3d#G`Y`p2W)R-lNNG&$F($(#-5BN0-@wXB{+C zz3S*v9o%iHc$8J^;2|s3+mFt$jVu0td2!=_RYTr#bcP+;bG7M?w;f%*I=r##AT?(? zLjU6EOnX+T%o4Y`EgGt;_iR}1yXDS@Mq3_$I!_J$73+IaJ|IjT3+oo1=qf7_E3H|{P6XEDY&lBTU*LcSS;9b z+wXes-7?P)-Z>v_dF;`40~8>-7x+ouhb`4dt+o27ec7PbZe6y2@A?&_?`Q6jIlT6N z($S!uH?w%{_H!qd|jCP&!&6pE$I{4MSSXmUzMF{ zBiDDcKG*1)C*8jA8*1A6LFzw0a;NH=zmQAQs`Uqx!DUzPKSWM?_YHUdi%{(Mpx7~a zxtogZj{f+Lzmtmn#*s6kVH6z`MJG%f3F&n?K^UoqMkgRjwk&z>7c&{@c)jS z2>=6$=)~!C_kq2KH|S4v{E-JJ@<}=O&S}3D?K$!gMSsA`xD83IVSCgaE=^mb?rM7! zJ&Q}%>_t}{IbG#{{1Vcw)_W`M=)aFVSP{=8;&@UYO;(0exT!r@nMCg~({xpupC5UQ zN^@ah$WB8MXff^%mZ$xCcR5-;TJG^mBaWW-Kj2QH>5*SinmjbD$*39KedG~}_q-r) z^iQ1scJ^S1QGWg5%5*qtkK4~5Lf7iZUSFT^Zo^u>Ha(2#fa^vtuXV>AqD(#n{sY-k5 z$_5e{*fB6$VJD7Po4fYzmHGYMkq71U(_8D8AHK4`f8U-%Fhgi_zL9DO^Tw-^{y8{H zNjpi|D}l!$HWYCD+FEN-Qa_7&rl`jaS6h;JmLYpm@1vGWdTcO{CQV5^8$qNboY3jj z$4ioYoypr&ypJ+?+dC)SImvr{i5yGvD@x=FP>kwy3y)#<w8rmZ}z|{ubVuu%JW7Ktnz-72d+rfZt%cW3BS<;*ChM~E?Ro6=(mrYgNjep z`qZNJ>b0h;y=b>lu4qBysj~8bQS(>Ejp@>G+N>|f)5*?U(erX2qUCE$dkP=zR0a49 zqvDH{qn*mXe_lq$&9)T!=SD@Py09=+Zuzm11kGVQZH#uvByTd32m}qL2!=b2P!Ygn zv^Z@J`V#GyljYU%XGTaMnexWBZK^8jZ`o8;!gm>>y9qqnR$+LG1B|3HXV^fZQ=IGo zD#htW&f{TMIo8w%RHge}MhUNs(WNNv$Cv4ff1ylQ*3P36si--H3MZ~iV^!9#GKvR{ zKz;A7gI7z_F5qfjU(~$Ik&mpDMwhzOLf6bx)+LeTN<#%yy0u+bt*;!A8T}R7mUBcE zKc0$zI=S}1dPI83zW2P%ZV{HIoDnI5@7@tni)po@$S zARc7~XEH3&|3NY3V-L!E(#D`6dbUZG-~Uq#E{~k6cu${BX{w;tZRGkydxaqsz%Zn{ zJgH{W$)&?K40*zlQ&qC<3W;t(&6l~Jkux`^vny*Mbni!Yp0+X6IwccCI1iiuXBK?V8Zx#!NOb|3}wVS3~Io#|~lCr4t@jvL1yTrL5zK zB!vCcrU_|3w`oG$Pf&wp+LMrUx_5oohS2Xp2wO=%S<{8!yBR=8|2_kVEWTR+q+XH7 z+u=i*$0-FMGTGn|k;`EY5!oC-M=7P9NVz;+8S+BgKq8AQ)?B*C;8K?^#7_#kP&Su; zTFE+{0kxsZgF1o8;oA%#viJtFP_4;yy0PbX*7rYsdf?E(=)Fa`!7@-#4W3)H6(n5} zXD!C7cRd@7FSQvZ@hmXP$T$uacYfN(xO%0C7SP}$B3@(>p*|5GVG*G^5g%F>S>G9r zEk+Uv;=?Q=i3HKkheU#Se!)qB3N=BzzX(SnDxsgZsY>b>Y^oA_TM@btFzvO`fJhfS zQ?vr~opq{4lp~(PK*}8r22xIW5}y^!*v}+Vwmg}EltG*p%Bm+6smL$dEaY`g@jX#M zDzoo$n9A*Y9Hz4SCsbltgHER0I@*VyuuUdFx$vbfqCEIA7f}v;5t|Kc`na1!S@dET zQT8wjC~IC=q!Auc<{+Q-l3R0o0A&oMa;h?r$|^4EBpf%Kj70Rj(xoB?`cjZiK9STC z%pgDBVn$F15pQ#;;C+iNLNJ4TaY2UER=3j;GIld$aPKPIGwv=<>ytqrAEgxaSMvzc zTvfCOt+zv9Ula-0%f z@I-v#U-0o`wsyyuv-v|5q@X2c55#By2aQ8BUQYd@wk!Xi_u0~0*50E z_!xmnbi`t8g7JkMV;bFQG1eQS=ymArM9y~|W9XP+TI6I&{}JfNc8Ad*XMFjY24f|< zoF|*C#O1BmLo)-6cII%e%MV~P# ztCPV9!%`zzy*p}-Fvx_uLW|EIGcyL^6qC>d;r!g76NzJK7=6W*GG3yr4wzXrJD}WZ zQkIDFX_L|-3RT%W@7aF8Qy)doGnpDh5k;gF+*+q(x919NheE^72!&(V&;sE>CZXOM zMHi4*s$r+XIml@g{ZURiliY=Gvgie<@zVRpjhhYm^>WUUhpFm&F42Uir``Ur*Y0Dc z3llKI{TtC=ZpPH#xC+*vrzD+KNLsCrx^*-UB;`jT29oeoG0#c8`vVFILwrmw4}^d; zfK&R%7gKLV`cZqeE9NFig;xbRNX8qB?=g}=)oi-l?+)9`t#Mo0u^eV0DJyn9LW&Tv znhSYxkb`7g@8xLrWU;&^$U!pRf^&KB&F_QLD_Vd7ey5rg;_|-rNvjdF5%U7b3)~li#c%<9+GngWA&&#nG70r z%&SvvyD`W?GTy|<4CIkK{QzSQ zGUFOQOsSu1hqY*Q@onCm>}X#q(*H2TKob7lZeA=2Sf7yfO28Q*29j{D%h2ksPUohRk@UpZLJTC~+qRjc!^*NWA(!!lFbhd(*lnJW zg5f5rD;8o@vHtfaJS1o4$c3uDK8Wfo$ypvOQ)4t)8nxQXb>Y{SY|2HlUTFu27>Z3- z#*3Z$N^g>jdjDojB1IqM=|db-UaN9RAJ~kEBz=ry%Ii}uDHvMB zM3Vm6b^v{g=_UdHr0#h>%tBIrongrhQ&OH3W+5pph9x&jNm&ZBkd%Slz|*%RmMR)6 zi|tiek$)UwAPGOShiF1VXE182CggQ~m{Q+l_i-XM4GA!Y6z;49a7zC~TRr;nonrB> zJwhiW1pI4=fh62(D<~wO9h@|mMEckGVM_fbTR)MywKkcI>aqiUWB{l1k1JNisO=Q# z8#~l@$-{ggrTi5}v86h?CfRh;I=q}4I#UZ)Fr|JwKk<=IntWx;Rt(E}2pxmc8`N9T z7xdTvSGLSxTTgVNo@e;VmRa;4-A45CVmTz=jv;1S&NI3bxh-W%xnSjRWqE>q6!JUj zottuz0q^l~^>&O0E2w^=^lsdgi)6jSXdX?ys6oe6oRC!8goosqV?I+3MhlIeROsDC zNHQ!W<$W#-d44)-i~mt0^PVsZN%^qLg3_8cS4JaDt_YKUFU&$x{>Wt!MT}w9s4YLy z7TO3~!eaYg(wBiqQzC(t* z6kmq9&d9gBHp0-zB#cJbxRwVzZ0PnO>XzJwKZRM^hAjFGGieV~e1$_Gyoag8f60|N z$4FSgT%3``u-nRvxm0pow^cz$Yx7i%2~NpV!{!5`wY}igUJT{snD_K>{{T_Uq#vqTX){;8b5v zE>_t@dium$8Oynijt8T3{i5f{)72-9uIw5v^nsM}(M2TYDJSFM!S#*ZyY{XNo!=GY zAQ|s1HfZEB#%qK8o9Sa-l+u3EMbV$;X+P~nDedh=pQrP^bh())KIn%j^|h{BFjc9( z8Bg?ql=2K$E99Riz153S+ArEQ06~c*G_=&+R$qAg5doai|7r;zQTkE4-nx`eZ{jk& z-Y7&qqmZW!IPJwzeL~x6sk`~NqVHpQNX~!S&PDuB8`mCMukYS1MBL?vDfM@4A5m(g zT;JFbi67%dDQ)74rus@dR7v?a_+d)@7QRQof|ghox%pV#tf1qc|{gr{iwOgoTVd= zQp3IrY}xpP!Gw6LJMIjyF_IiJIXYI7`WrqSwA5C+v({LVBZ31*%}uhOwJCSMd1*5r zhFx~l+$4K9U%2_g*hh|?ZHX1O>-89xNX-#CuNRg`Sm%1JMQT&$_(m*o%Yr_oiDPnN z%d#xwL&eCmKtyiSR%0=rpMLMATx7X*wxk%Q_Ll%tCe70mS{jHjU;^ zU=)J5l7r{rQE`&YHNStL=|mODA8*PTa~iTc`}EN; zlEmBDe5rXr)Ge;HsvB&H?dsQAYtNO4|m?bDHqB5C>uIL z7A6s4r(7<2{N`*Vtw_2l6Oy-k0wh+%>Mi+_()#l_X%0smKEd`n{tt? z*Rc^JY+Y@lIl+Ph23yqAt{)XA$=u6U&0Hpp%aq7B9t|T&d~1*q9}~I68;*vNB)%jziqrtqF2Th#tk)<;^Do&F58~$2`67TnOi9b9F zK9cwE#fdVb#mY;Y_VO1iqknajyd?KC#rCpsb3CQ>uV`mMqcOaotrZ*eiu?ugS$y=% z*+YGxO3?RXKqcvN6O|yIQi!IhMnT(S?9DVsz*y?jJKDe;{QzSsDR8@*D#X`@-ql7M zwXhJUQ$X|RYlRA0>8LAIpeY<|`o~choG-wZz>}5eS!~-M_pxzJZ)~P5|1`?Rkia-g zu)dEDzhQSconhN^@R`wN#ka$Bdc~fN68r-*hvmUAI?E)ib-K|*Y(g75p$(<5ZXG?q zBy`7(=;0=z1;V2(LcbBsnFQ=HLbiIN<8(U0Q9w)_8K(AHqxQ}Qrpn8-C3D;4bSn7P zqDPv1V|+^@?ZX|~61J`x@&w;nbSetx)bqB|4#es7%5{8!jfc@6qnbVTcofdeDTnqS z7(9J=aR2V{p}pA5@btQklF zV#!%Z`diFHNxR=QgVQ^(TO9Nh*0qpT(!MwEgCp<3-4c6sua=&5pE}o5qm+ z&B5|yH0U8tbJzc=(i`Vp4;|dU7t3)a`|~72ZU1{`w&NBN!F|7$^WKu2DyBfB{SOqo zN5|`j;NtxU_Z+%*@! zX;zBK)dx^^cAkq&o^%RP>UE0Ht1X%^oDdU@!ebxyFic>7WJVtLeMwOmg103bG-7@i zS`f+nF~$5Ms3rxUA($z19Jz&^#7|pNCI4S2{uh?`$w3AG6`KF!ivN!>ZzbhFK*(?6 zbkRX0#XEG0PpA|xD47b4>bno^xn><}Qn@ytQoPScEt1kt6Vi?1!pI=!{tUshGK1zxsf#ThXgge{=A}@!`w0z@e@>x6Zg#XBDfSvSQsjb7o0qW6z-tG~VZG zhEol>0z6W(rL}I^@_OyAFU}mN6}nbi_{Fk?mqXXbo`b45^TnCd4wTfv95=cLg`RZ4 z&;{RLd3YdQo{Tf8^2oArhJW3osqv3ZN7B*-_Oh*!r6J+ zglty@q`;j^BTO7w{$}+q^$2=M+gYk z9$2?;CpUjnuqH*@N36|ftm7U4l4&fe<8}gUTxs|5;V$op*oiwL-ika<6&?1e(oz~| zHTUjEkNq8#y|nfO33YKkAO1N{QO_zRSUGUTu0!iMByysfC!5*8QrU&ZPxQnOJ#vCV zkKLHZhL)4mudN%q!TbsHH@H7;B;Gxb5u|3nhGhS5^EcRUF4(Vu^dl%PIb%0_jS%0l z2uRQ}1t5dNg#cRSd#Ldf+~*g%W0i1Nq&-Z!f86{H?!Pb+L-aibd=1II+58RmcNOf{ zK>9xzstWNfi+}_TQvfp90K{7^YaK+n7!^k*JhgLp9~$TV`*!Um0qaq7^6E1Me!Ad(-eD({KhNICbrNh|K93ECY*<`^8(2 z#kBCtp=bVkra6jn=Efo<=(Y3dAYu%ziw7NWeW6TBqQ5DVQgJvb zS74SBX3^(N6_&6n(KZP^5b7wYJki$iCCKdf5+#X_D^b#DyGgki$)X=ylosTOvmeSo zTQ6>n5(I>i7bt0TUWt<7v&ir&X4Y>iN)~rChza!8`qQzl#+FFFTV96qRt#T;wIeIv3YrRr zuY#o`i?51qj^V3fwbJ6NVK*?tS3|F3@y%mtnBkkp*Ners5cN2|1?j(=d$zPg~$Z$i=iYPjY^4; z_FNqQmaPS2ikf3<8Kc?eL}pkpvpEw~X^yiJEtWV_RCSKC8g)vX8A5>LtRYhE+$#tT zj&mNplFeC-9?WtsM9mUs4JWo3naLd7Zp)mtud{QlYKA}d5lUXZ!KB@4YPv*;>M=reQ7sQ0H_K$c6QM8atj}z}arbA`CN1bso8}o=?-V=aCER`7|qg9=WidPb+25BNx{5 zDUHOex`bTVI-l0co<}aM=hOMJ=aCCr=hFq*X%;OVa$!B6&6PcmTv*R%vE%uL=xnZx zvZU;Jjh25ySL;eNdA)`?iLx5jwouQMqe@n%t z2wNvDj6aHlr@z<=N{?E2i)U#Ry#(J7a&&hVu2Y&$o{cHKy^a0P)|sCd&inHuX@# zc0oumj=fMxevpv7XD{}HjMlH*gD=Q~+O}_ng;yA3&Z`Xkxwtlb$tFCb$M6 zFJ0Kz8H4dOjxoi^Js)vjH#^(u)WP{Rjx)mvJ5wYvUYKhQd$iV-=qZ?B5XKz1ZuZoT zj#ac+EYcw)>NB?g(3ti(zNGUU-#NRr*;yQ65hQoWJ7;GG*j-uCN`Zwg1BCVl3l-b1 zngkjh{hCRb>}+9b-$*h7;a3bL+r_|}rtz7&o)6mJH+w7w?P8=VcF4YOcBTtLmAs?~ z+Dmg7spbRD_Z7~Iamk4x4wd^khAN{%m1D!Id}Nl!i-*7@>&8cBw~yB*bY2qQQwFiM zG>Q|%C*3lkIR&v7qoqGh6Ssjl55{LWjH3jnyq(kuYC$=55?$#qj#}7qhO`-t*rsHxwk|~#13EeG2E&b?(%#x<#~K|c3ZdA9JJ_DJ$L_Sg$vgavQpkD z*q_vIuIRSuLa5DDhP)=-K08B0`v>drx_x%Gxl9f3VXgG-sMR=3kMG&sFrxH9p=kk` z?U}f#Fu$l!=e^6`(xYMAbOYf_*+d*5xkwUQ;DXUXXME7zBCRK9cap3HCyRh_4E)_BJhH_5GeVzhF zw0&QlJs#;-d$`6xg%>rQ+d7))R2fI7DzpWnv0WY9FlRDL8+b z_e*a+#_&~wk9E^b+*VIbM;;qg)aYd~hB&uGqe0C%RzAcBe|)|~#D$7CrWx>0B_IboN36(Fe_u$E+Gd}UYavM%3!WQxLFIJ zb*I?|xA?Z#HH^r0B8w>msvM?}YII*&$l?mc*nIBfj~#F1S;HMIMu`k@F%eyS^1%{u zJcdu{!r$EV?Sc~p>Jm|)H=9OF&Xo~zGF&03Jy1uER7Bs0%S4LaKXr)6>fO0nUq8(- zYaYw+MnyrR(m+wu`n5Iyw8;=5{r4r}h=~7SstV3gi;hgtN=lyoI7%<5#XeIsNT4DZ z>B69#aT`bjWPVYJMnk#8EGqEzJBadet?x*9bJ zlEK@61v?$`h{#U`S@ljhdac{v|AcD-UCFDq%}@Y6MUPTIXoDcW14VUx)wZo88s~mZ zxA>rRi1J+>+OOI+J6hT%ihFHpFgddIeH)X;(J zE4sSfVHRXpJM)fh82S!T-G0ANr`|Et`3qhhxJ0xM-z2BS*mQzwtq4Z77A<9(#V58;a? z?}P5!b}XvcujxJqzfnVIN1+Uu`_LI+%yYzKK&SP{q7roJ+Wb6n-W$&CXWNd2sj-&+ zGgJyl`#Nk_st<9zEf@Cfu(11uFwsqk*uH<8oEf=6i@zV@F^Z(S%cV8VcTTRpQFc_n$_c0|vTv1Iwe?MC#xnlcfUMDX>Dr9*=+#%9GlC|b)Y^_pD1vB8+iTNG8!TX8ecl2MNh#!Sw_8H_!AtT7TR=(&xo zo6D0Wd?_-FRXGWlO9W#t`US^WLx*5UtoPu??HuDgIy0NG#~ZUC<|tKtr57LaGQ5wk zuXzu3v<7n%ua3raoH4dPQDuKxpEfm9DODH*VjKVc?L6 z+e}GBjB&Kq$d5<~KA1|R6dyJvQig3Y`4_~E+qbpwp$bh$a~|~hTBNk z5?4UH*-9v`YQR|7P#+sOFgaonsKXI0c`jOP6TO#8g}SBfH=31uhiN#?6r-%M8A|bH z1~08^82S<~u5Hwv=eT9`R-Vo?kE0J$yis?PSG^CLD(xX-MAZ{~)Y~w8G)0*AEg#-a zL;cG+Hku1G*w6(%lVeNKV8Qh&*V*QXu1o!29A}16If_zoZX4|cFU`y_DpoLBH&`c< zmF9f&KqQ5JO2FbY(u;2V(FI$4%@R%U6|e+g|LspnV_)V;y5%+R`X%l*ve2F$_kky!7~# z%b3W`MM|Ts7)8bSj^sFLCx&G;#<60$O{Fcgq@5TxXDXgxa&xDh7&d2yuP82e+KFLs zHfZYmuUSsoiD8&d1Bhaw*z^%?#4to+x`nDFmpN_3&=H1KT}RlD`3TGF?|q{FUZiW= zeP)0?MptvNp~Xr$wpb1$g^TaoK0_Zj;&u{6&@D@XMW)ERLR61PiIY=bLY``G;&@b7 zC$*?Ul*AL&`)h)C1Ck~AB+08zUtNgB97#VVXIIFJ3PEDh1GhBL>9AecxG58yN`u`z z5kd4OO#vk)M8{54HW*8r$Xg2|#3Mr@6Iw`;?8k$c%A6l&5i?1As70(u;sqA5Dv8E3 z5Rh4u#PbTrf*2=~`XigF^1s)nDg}Osep9M?91Q`5`a6sKMKKB@Eq*AQ#FvsFo>>sZ zGev@E*aV`={eq%6M9ovG{!WRkxUVgAUBT7VN>}qC3s9A}{-)4DJklg|phGXYwnG(Gg;!`-h+w1ARa}9#g zC}x_xkepi!%W0CNE~$p)L{(M%Z){$bm+=S)@wTLd&)K|fNxj{sb|m#So4P2ew;DFk z^J2n=jzv`7YZpYSm6FqV+XS^j5$%|mmz)nN)d|J>oI)zL&Z>&iDpaMcRF(LFO;r)} zeVeL6=$=9>BrHf39&EGDN$PzzRp~|jkE&{7WG?(d`wA2heVXEYA|~r3vGiD-Nb)Tn zRX)9oN0l4?kw;bBe3M6&v%bNj%4uKcQRO`2h$_s~!DE_T`GlFaAsSU_Z9_Dw z%(M;Bs4~+wM5D^guNPrS^A$puJp~Ql7CBA#G;+0JBA@ro+3E{z&Y^k^H9@bNN%HW49=*0&M5# z7A9$ugG&sU=HMa&W;xg?!d3035QhB;#s*T+t%$1xCp^sGY4lF(cZR`*iC1uMqxrjv z2`KY-4M%tM`C^Lv1nb)tAr(hLqz1FZk>Sd5eZCrf9cJsaMC#_E7Zty$hr_i88mG?9 z)R6i$Xs8b(%PtKQH#Q~3L$F#Y(UFNSCZ!Y+=+j8&LfscGU^9Qy^=tY!by}E3H-9I% zMob%pt_o{Z`X_oR>_gE%(Lq5S{S$o?uCmgys9Q39PCXLNB5UnMXJl$G`XOjBGpoUk2 zO+Yulw2;aINl7c6A}wj9fvlvJ1}e}>S8TNII4Y-qqG88RT@<2C$2`ahs&P7Y(7<*+ z&5bq~pUK77ie7WY4p9AJVzjMTCvlk*9G!QmDK=ZV)C}uTx^~L;6AN;B@Ic*C3%8k# zFafCZCnA>R=np)i`wt@HVjNmppNQoeSv^mr(JJV@VQVaQF52W_3uK!2v&l_tt`d8w zO5|~)gZM0S<8k4(`5>3da)^f@f45Mupibwa@3Hh44VX5_;7_pBu0O#{`f7sxr#zBk za|VxOc%OtvD%j`2BUM}n#Ur#4h)3qJ!I4K6FlVPLgR-a97~%`sb}cSoqJp653$q|V zrh<4v$yXqwBnH?tV*3#E_S(u2eTlAE^jU*LP1BY*dnRQcFNq0=r5jm0rrVsbte#4wa1hM~6yQ zebb?mS>JG|WY^anDjD`Qhf0n=2(%CZH^TQ z+2&Z0kZq0?3EAdYk&tbU6$#nqT0yqaCQ-|_lx%aXNXa(G3Op>wSdo%#juk1{=2(%E zZH^Tw+2&Z0l5LI^DcR;)LAL#U*|v;qbF9e7Hm58yvhC|d=Sa0$oF2sc+&v6QbgyXu z%>iayb(2y6_3@yMr*nB^jPB7Y1G+wK*v6wbx>X@bf{L8!JgF?O69pNqM|09fBgc@t zSSiqLP0l?TcH3eRvm|BG?uZR~WpcNJVWXBpUuRGS$CU@mSQyk^DCoFx5PLtgtp$L6 z1$}e4Q6S{euP}MEk;e&49&O6wqa4t`($ z%7f5Rp$Do8b(*0ZE~12XAM#>t_@7Tl`n`|w#1c-6;A6qHi2!I=^FcAjMV?d%R(w5B zit&-2>ClFWys(2H#)pm{P4Ly@M>DKD`_XwEgwt0HxcOGG=g1FNGxY5bQN{59H#Lr3 z{$l`7DpfRO{`3`mh<}@@2t$-WjI9oCfeHkLbH5jhaj?yoE-|lT*49Xwq7Y7Je4*h4 zLmJmr8qP3|3BdDcIb2WZ)c9yT;_*a+y&Swn2|VGmHkrn-)|W299vEI(bTd>PeWnUH z!8k6EI>X>C0MBD#llO$oyNa&X4I+GbQ^0nL$t7KY5`r&2h28g0n?>`qLCaU>e=v2QzHz_ol311HBil;+TLJtYMPS3(jMYgBM)D z#%OPO;7*CX0W?Nm>rb1YzxAUj&guHm3|oEtXa!58ezb~>J#IX#j2l$tFJguheGFzF z%(Rf8qpH(Ah;pEKiY{qFVytcRNP=xdZopC+T!Knha$|net-yriW+-f5!)V@(OM+>f zLU;d3b&4^J#M*d8gU1kiIGbtvq>G6doCs=N+JWs1L<7$b_JcSOl<-3`)kSV9sG#z) zhjUN^L)H#jeOq;{9!BtA;V{YxSlLxbCl&NzD%}xRrc_bn=NK(r)x@qB1|pG7oLF`s zsfh=YsUGR3l6p{HoU59cC$TD5zW;VgGw0ZHi{$|x?+$Pv6!;tcc!Tga_;FmsJwY?% zmER)#bsii&B5euAwi-S?aN0sbc9>Not z6Ev4)4JaADRk41=YoPIz@OOLC)9Mc4FDc%0Q5wqha`lEdTn!}$t;`Vq_nsVRWrpxi z+YJouFaa5>b329v-|c}h0Z6d%LW-py?9T{)mnU~xos#(Zs*O6^N-yja9{Qz60_+nK z{?4NyT5-zY8+Lytx0O$6aRNJPzrcdDTL<8q?2bdF?DV>m4$w>ORzabd&j$9NrId2p zx`;ZUhk2A@4rr;Hq$-Ks?NgxG4`1#k4V3aNb(02)=T*zyWR6m-0evH{6-64*H}ELM z8PIEal%fpivz!7H7ReX`{$)NjMHtXh_YJKfQ^psYbB?A!jY}Q#%0+1@wt!yd=q1w1 z$O7)_C2)!>pzn0F7AQp((CbSTOKFXm0{9m^h=>AsBQKZY3FxzUl%h$XPGdy&%2)#a zB|bGp63}<>Y9WpQzQ-QG(D@1s3TP_oxpuddBk1U`x6tb6a)_p*ewBeRk%*@ja3IDS zfr?ZT!Vs%8UN*rPb@&3+n4Cl9ZG!o5>Z5jRVY0v+tfN_@EgSA)cH0Zn*TlavPJ-re z-}4!yA-cfdFHH(z<`N?a`1QSZ5}aRAqcAKH*}XlGQGd0AX2)_jr5JXX(Fk^M_|1g| z)PQ%euIxbL&O|`R+HD*Oq+JFA`)e0deO3og;@BfJQeE~J9dyZho{$#XF>TtL_UX=x zPZaiAz#RHOEzU+zAAat|Vw{)IgKjHbjC)&oi7_Pp%!|cX(Bvg1*oeVPq{)$=da)SK z4D%9Gd`$2XQ%L*|FBapp5HB&qM+h%5gT#OLVsZ2nkHiW-UU-QWNc@Qxi*dG{*RhK0 z=y{1%Nc=Z17ULQOUSbWeWbzVgka(XLi*cQ%jxt?)n#&!`D!COH^f@ex=s+?P%psqy z528!QSaC5{g;;S^MVEX~jLV={aS7)2SaDQ87kyBSi7r-LYEF)s#!}_%@ZwT@2Df=} z85Xcu?Wkt9eNc?62UzVYSovbbQMGLOpcv=ASaDShp;>WMC!0Pf#$|S_xEj8_S#eY$ z8$O8cK`M*GRy}GsKkZa~3CuGAuMp(q27Hcj0WYxyCg2qUiEhB>7zKRUWQk$c=r@b* zUe%-=g3QnP!5Dk0JVIlP?erMJ7E0lByB~}(0qYS;n>IW`DTr?KgLF{ZBb4@gc!W|Y z-RcKpOa*&{(pC|VPztF3>jz`Jx9Sl}yG%SnDXc#02V+c1mz&b1DK(|1GgTUNx=Y*D zf&gUXHU~o1JX#mGIS|kS(;P?u;@svyLDU?SyA%PT%D%_xHWUJZ=X$Xir-68hG0udR zJ1HrVs_O&2Sd0@&yhOTbotH>;^&Bromrd~!Q=F6KB~nE_+l$e)1H8lxV?kab)zY)P zSd7I&USb8)DZE6gq7U$5adc*>CaSG!b7=bQR#yQr8gUj#uo;#GQgJ7YoQ^$Nv`I=- zhDl2{MFkVMEKtR#DGSu_g~tN(n5SWZ1x$h1zRV4r!|r7siLsBFM-psX<&hM7O?f24 z{o*`Q!MCujG_LWO;tzETEI?fX3(&e63#4dbS%6mBSfGNYjs@luQ%`w~a7cqMuMzg-zpOO!!9m<<1BGH7 zp^<&+8&8XeX8hfIeHC!CP$w~f637o zu;5gxh0-qCI?V#KcbWxg^E3;jIA+cQ8BUe6Kn1gUcGS?-PE-6vQ%gKTQ$##MQ$0LF zQ#L$8Q!hM1Qz$$_Qz1M;QyM%nkK49*WFh*)(vUj$0UEDMeNc=szdaDwsS<20_dqGO zU3#Dlo69{=1$#Jo-FM(*i!NAk6qWAQqNzplhpW6`3ww*bU>nDo81vh!*qFUhtd0ru=>obb zt?1#f4*qR!9Vl>G8&mjKi-qd~mur5C;}>2IobVKR{I{0_$2 z9=a{)k!t1We2<)EJorm?Kj+9}73W1BPHdf+baB^}U_YjK8Q8<#!9Fm_`z_Apw8W~6 zHFhf$vI-ogp2<1P;E2&dKU}H*5LQNR<|B?gTJb%M<+F_ZQ_g!vwuOl=@tByG_&YrY zC>$o9u?a_vStZ`YTt;r@kJgJaU5I3h_S`3CcvNnR(&SIFy@Iu_YOtX(|CcG$o?e+#~8^6QYRSC>veutxI9bxVy>9-{Fet84XrPM>N@${g3^KGZcnLDJF@Om&bTEhsGAv>s<7bG;%#ameXaubQLo;Xv z7+OIqz|am_0fx?IRxDyj<~K7TGeczohDOi|Ff@Z!fT0z%0u1e-6=3LWX2l}T%lpkt z<#0I2Kttjn0}YFV3^X(jGSKii$k5r$ibb4t=OPzPE@CvpilQH_U}?~gR`J#DM{D?S z=QLOOl6!gQXoiNzIhvvAagJtad7Pse=wh>=k{z^}L54-A>z7TR%%VbO@@t%>+XuXayLWK`X$}3R(e%cF+nibT+eM z(bJJhD{5pW-)LxtM$igKXa=nSLn~+n7}`NAz|h&uibZTr;378_ZNfYz&-~~D=FjYr zk*x4CEhbqW6N2edNUk2KoXNp_z-fkt$32>%>2Z%{XnEYD8QO49P{|Hj%^<@f8csjM z0-0IJ33e;2S8L$7++7H~Aewt%Aw*SDAJjb0lYNcHIu3&v!@jxO%?|8n6h z3&%0j@n8i9n{XM0cBjoTSXrLnma;`$+V7~)8`N8vfujFmwZ(x~>%D1nWrU+I6Rb`< zFfKvq;svVqa(|5T-g;!DvlsAqM|%y+vYx~=yV=1akzSTrUhU#CGQ6ra#jRs-4wiGY z;4+4}s#*Z0TR8k_=^_q4YTd=*zzet^!w)BO zLANAv&@D+4bW4&3-I8QMwh`8skFIQhXR`6WlK9M^oGx5cmUoMN9;0M4*oDgaloYbpR&v3V*0 z*RY2w0MDD9mE*K{0XwSvsS)uZw;1#%1Mog54i;q|KMUpN~Xr!H`K@D&}|EgAf*B^K*anVAvnf9@IdMWyTJo+ ziap^0IK$5H09?WT@Bm!JF7W_d!>}#@&x<#{Jq z4_bntf6x>J{e!k3=pQr&LI0pN2>J)jLC`;F4~!c|82>DoH;lMAT7;l~&?LO2+$7-s zE*b=gCgG3Dp<#e%67CDZbU?HeSZ3-Z`cVi@qkBVe7X2^;S8zLYAnz*Py$!&%=$;Tf zZ(jK!eQp}IfUUfxDsRGQ5J(2LeM{G5`z9glMwU|nuMT#&?E%?gC-&D zp9S155bz(GgrI-WBz(O5T~Kd~ruF8eyV}MhVxVY;T|ycWiHBQ2T%XRKzzG*%0wPTV1^ znL2fcuqK?jLs%28xIKSQDOihp;BRfGwJSyAk{$w;=YNk-Z@tq3?|B zO_)xL1oEasBLSGsjs##jLK1-KBuN0K10?~N&XxFKgnY;?i1>4hUH!5i4@X!Y8+8%V z#xVgKvW^MZkabMJhG^+UpCHH~Ecqa>4C^W$sDir&Jy6xWEY22K!=sK)Dr~+%Ui0Q{ ze0eGfE#QN_G%tde#YHLvt#K=Woh+tX0i1MLbUQc>$q)M#D8G3ew(?;M*sJNm5O|CYQYNDA2Sr~xZZ@XP;Yybl z0#>`?dZS-0q!uV`FkT+u1t8rE7g%%uzKuh>_8r3PoIcP{psV#!w~i%*KPi^}3$WWC z_S(48ZGs0^Cq+v_3|+d^Xtmv(r~$x_?5qVmYELEu@jz6q71(39yof^)x|z~= zcPu_O2sXyu7CdUV`@;#Q0W7mc-XwWE!3T>urLPl96f+!H()FZWrL@MBzMXcJ(q6=9 zz1;5#;efwev@(=%3X!jj2z6ixrDgE+m|uE&|K^eH{mZWXpI zpYCW1z;sPh08Y@@2H+I;sRZE6{Bm_wub5x1E?hOgTwSnQOfaThmed5<@EV0!p69XUo^?f=EWp7LdQ9Dw{JsqBf1Al5vzJrluSh} zU%%b&)K_}c`eADs!_Zh6Yle$ChL!Q6W@y_k94}E8<5jHT_9%mU?Gli1f3Vy|i$b`$ zf-9Us$we!)O7K5%$AT&$Bq5+z*OpuU*|t zOBKgyoU`(rs6JlGG3410!!pN^+d~Y-0Sq#x*@3&d^=5OmJLq9z&91Km;yFDDzS-_A zM9TikGOA^JM9*GZt-3@N_DL=!UckmOewWtw-IQI}L{dM`q{KDbO!g)c@p5#;)?ySzG{)bX~=v+U3n zX#rwC$W_I0WvwgjpB!Rl!s?_|cA_Of-85d;(8b(ilRc#vtgxgCem_4%e5I}2fG8y4) zCJ}aAo9%^NQ)Vz|)6qPx(N##*-YLf!0PHj>^&8bZan0IQE z0v4RwG@78nnjolOSF%F^F>Xt;4OBpa%aT|i#a96fWEg(3Kn33cEKoHsN)k>~nb&ZW z44Yye7s;@|f_d+cDGG(YUUWkiLT{Mrv89F3Bc?n;ubA=(J!8rv^o}WyRI$yTM{3w# z&m;5LSkEI1*immgr<0fd+j)Q%pV<_&>dXSP+{^;B&ddU|z{~=)vdjXsq|5@emdpaQ zh-~{rS&q_wrU!}f_%EL(!7IQ#lA4e4i5ipVlSNm1(p2#13oor|KCWg-t6?h!pJpCM zIC*3NrylhfK}Z{~b!h`9{XGZuykHCsyHfOyxV%d&@1Qyw2c<7gp(CeeHVP0jtWPQIDBKh{Aj=Kfd*t(tGuIcUw?AM2p= z=Kfd*UBIwdKMW~Q@!3uHG&5wnqnRNmSO8 zEjW4&Qx+V39#?R4^aVW3tLb>)16#aD)5UHl#-3%}u;%nhlK|r-(;Qfu5O4>RqD{aN zHj4yj0N5-NT;uHkltp6RESl#%K^6(F*5<58afrZ?L{_BG$pI*f)Ep3+S){mMm&+o< zDFjCnWsyNA2cRr6b7*O1k->vp78NYGIg%)g3UqP+%A#TpQq3$X@F15(73UxvNt8vE zD^<#(Y7TeJEUNGzmqiV8%WM`ku2d z$bx|=tJJ)R&dw^uK}z0%8J^H!4A& zzSSKSX@R+LTvM`)RXZ!31Q`~!vCiQF$fS*hM;AcNYh!K0idZ44)g9sRkei^1H7UH# z;R3i@u*qi8C*a4nzeED+K;B-gGHp)|)OGlco96 zVlLB0Aklaxw}i!b<;Hb1O4E2dNGBOmX?~ycLJwEu8~Y!03Y4TM&4)Uf;3)Yrmh8%| zPGxESm;pp-y163-mFB%pX{Mqy7Z^#RH2<9eL}_wah|;{*DNXD{5v6Ior=v_)2>fNd zr&GeL_jEKSOVfCl$VMR1c$cVz(Yr+D(u5{G+#%{ZT9oEJJP@0^J&H_JX(F**Q(2nEn@~EHKp@d=yHzTL)K3{lqcoq(8B4KwHxI<-{+vPq zRhs8JnN+AW|HzS5k)?Sr1BlXeb4Lm)%^x_WSrMgKV1TZu?bCjxTUuoHbjOj<6dj6 z0RXz!S}$8^Aa7~Ub26z?X}-Y8q$*3(9qd%6qBPyyk%CI|`%YtdBbS46Uzl=A$N?43tE9Ka%s@QbfZiPUi+ji#|wcX{? zgpNJj;aV@RzaevxL#{m~v^>RB5_xw?ZJ% zZM$=f+U{~`LX#fu!7i63ks-^tLB7zAO4HcUsDZpRjn};ew%nTF8wGzyFD)5FNFos9 z7I~c}6^L<*yhbvC7`Mo4q#_XG7I}?S1!CMHuaTNS{#U7nU?U}V9oO;IV}A{SjxlT< z<7bDCF-RTrzz!Y#Y8^Ac4jm0(9do}99idb=SKo!E$QOk|7ZTb0*f|nU`*loUI`o9- z#tf#A1OAlgzwYv*N3KUtcIjx_>(P^3I$DW(^hB4A`bK^`L*4gz0&ZNLVj{7=*1{}F znc5ySaUMliOT~LJk@pm$b29dnOb{1kc0qnpQHzP4K8%qic24}F_?or=RPd{OP>iJu z{S9uXN}!krO0jI=fif&w=qSqt!b&twkqba^0RL6QOP+!p1LVWDYsl6y?)$~;wr(== z6c9CD?3wFwIdXA*Wip7q?Iyu>tn}onF(adsC}@{!CLzl!eQdhYD=c{`1;O8c=?7!; zRo`;T1ZSok$F^4LJ-pwC=^-~q2_Z-G!gy6HR5~% zFKx=i7gouo$@F5ZPS6X&^|E6$1ed_FRz#H`&GGHEdZ!(__3)nv2XK^Wh6o(J%osUd6>Z zbZ?NA*%-U>5U>3q7Ls<`?lK@4_hmmAV^@gfXftJE?q?%C3oyn81y4G9DbFi3Mznm< zpEALg6OWAvHa>WAq?h!(LKEa@ye@B>kzn`u-}rJ&v7y3~BfYfe6-w``{*6Cnf-P4b z8#62?cygqd_`E_hg;tTH@m^?2C~`F33$?)-))+iF(o3&ip*7@KYW9l&s3FH&?WTsngkpqFG+0eW zfgryvUd*~FC$~XLL~fBMH##4|=SGoe+`VH-q(F?k=@RU1vzk$D0iCwsbE7EqNu(hB zr8ixIp%tH7imh9GZWMt&i4=gp@TNlBvQ~BiyKxAs-jN*r^mJ$UcuvYqloiKq<|}R z#9Dufx1W1*o5vR+pBueX>yt|VfIWqfW6$jv8l0l68Im$pRY z_S0f#4`CM%I_TT+cL&E}=;128qbNr)9+GH+Sri9Nb2P<)90$#EG{fe3>q}~Bf{o{s z=v_9o2WoF(?ywX3UqZu=OYk7y{iW_D2jGv=H_li?^wf{tDQPIdH;xBNu`SC3W!RKu zeHrC>WvFm$8j5O<5){-PB{GzjM~Q5jLJ3b^8TN&-`c+Ux*)-G+c$A=Kz@r59z8)ni z(C-RgUKs|FtbSEgYF0mLIXp^G!{Jea+6|8qRp__dmsf@%r&U))`Sx&2hn}&}wUQ>C z9>db<>TQlc!DbbXo??ednT{^`k{aaL?fNCu`CmfqoAENN(nuoK%di$=y$ow1*2}OK zLNCK|n$5!!PBUr?jhAT+S=165FVk8`g3$#pEk*u3lA+h;G+Tf#xfIlH^7&J%$>+a- zTEyqSfJ$V%^=eqNfTRD$j&B3O7gT9>2bGHo4YzkYvpWUk%^n3<~{dj8~ds(rMs4xA|465~k%-P|7qq3d#`gd5*0sUPR_r*7PBFG;fsGQRDX)uRLjYsTwG(VFu5W#!4BTtA9ej}jEH9wjJZ zJxWl>ro4U>v!$7EsYVYQD4AlX5v1`hJGH-xADWeB?JsW8w_2+{sbfLK3V$H@P7}z7 z90cEJ0{NhW;QLG(q?$UZ+;{ogQf^uK&>?ZI%a3YwBxH2pF%?n$bx8pN^pfU^+sg??#~1t))?% zAoTI?W{e+L40rLKfg9IysPyw@^1V!Qv>zlsA@NUQ@ScG;ZS9d{-c0`6O!85y(EhQ0 zTx9oIwHNh4F1m_Cc zY;$-+$uvU48y$(wHrmk+DhVD3In0o;jBad7)7*^-_GN#wsD}kG1n}*mT_9k9s}u%x zT!^W|rl2A?jHwBO9-C7W20g*mcbuFQcT?%GAbwoxF&2NJ+p^4U!xPXSpI|N-UbxB@ zL)@dr1Phd(clpPSHa_w!b%?*-+(8e^IP_k3xs7X2EH#OLBIMt0C!kwtCgVXLQEdql z^fu_mF*LGQ(s9ShRyzYhZ%jrVb1o@QFro~MJ0>)pGBD1?6?9}^+-#ufumI=xEQd~Z zwx;-l3r8&S2xR=hEvK4{7m3AA6xvVm%);87yn?L}IK1buuZ+gH(bORihJEaIaLBZu z{~0d1i5FjtsmnZ1kWn@Nws55h(4`i-Omd)(``2(AsgrMWM+=dq%RFZX85w+=2jb{k zh-Z;cTwC55ox2^Jfp!kissC}fNZO@Ky)B@=`o^i!X4 zHJx7!M-b7M&2e0wH2{itEQq8v*-MMpw|0w{fY1&VrEGywt%$67y0A3rVrJ!8H-jC5$m^pg&iQ zBtxo*TYXS$-iT79!n;w&v1SgDm|9I~5B)n`jaAihWU_5`!|&3ZOCCORJrejz-!J zwp%ia5(1eI@?vynw=Z3Si1uNrd3m8}MM4%H$J;;{w7DjL#uzEG7A76+8D+Ie$U=`5 zz+#^jz!I+&9ZWTz?P@|}&2)^%cpOb60!>cyVzGH^XznwN37aV@wQ>62f>5a^oE}Kk zM=#CjK?w9X!HdPHfxdJJ%FYQqp(84_aWz$;Bl^WLI$1^_AyDL0FBanii_I*9LyS8L zip&Ph3=SFd4$1l$oG^MI5jn(TG_V*(`_d)Rc8`v5$kVuF-DXNLu+6RI32wnA49Xk| zpmDUp8HltUTok}4N(f{c*NGM$6IhJ8>`Ry6%gKkOxT%K4GO}=%w}CKdvk^e!=pb)l z*1^VjK1Z_9V?{<$?y&+`;4g&dT#{a zQ$fp1IURyJ=!dkMa{6GcV>T8!c{J{rH@oHJ=5hyL4%)7q zJettc3-7kI8IF2Om{jlKgs-I~NIgOSr=tHNLAY3YX{!EVj?opVr!k}76ACO(WIAdN zT}-AU%=o~fbnu8whkxLOFWr|aOr|63gN4_+YpuoUj?t7J4(Jpgyn-yQn!^Rw+Sr1M z8uwF{PN(}herjNKQ3*Mt9-8VNPLtYXOp**&SMaIskVhat`pD_(%;@oJq&Y%$g0Ryc z>Y6xbZgkev7%p>p6D%sa)D%N~mzrU`>ryM2P;#kNe2QydIws#r+?~;M4IAsV z&61m_b2#F{kYjU}zu-=AJr%>9V$Pc(XSkM%Ay>>Rqzc(p^Ao!uw-zT2b3?F=%$d73 zY$(RAjgos{aC@zb4Tm-zbpqrL)&g~h)4^2nv_Yp@`{)Xm@nAFut?UF87d@MiYI5li zU!yukYy{Q&J6xq#9ZVD?$YuN1JlrC0aM8OYPNEG~>YXnkJ!5?;wkO+$D+g^+o zrX05*9TmKBC??lmB9LetiYZ~%p_l?w1^*zogpz4q@UP*(yx?EYf~w$eVnGxF6}+*_ zsnBN)@44fy4JTNVsVaEm#*reGD)_sL#s2~;3Vw@Q@EDQj1^)!Mba6L_&QeE(`=D@t* zU&n%~;BRC>Rq)0pwn86K@XzP`q6*%)oTNyl3jTX;!Kc%r;E!<&9$#E}!9U(DU0gmP z3VxY|M8O*yu5)#eiVA+iH9{gNrn|gYjOR(5h(|gqc;l#;krxn1G>(duFzcvTfvJLj zpj$$jE_mZ@rXpcp@Jv6DP1jVxzljq|DJkNOJ&J}{iuga^{Gtlpc&x8Tr3(IE-Ga}I zf{)yS#}{>8@C)Tk>1r6fQ-Z^C7+RJ(i2{SucLz{9)b3A92hjZ}9TqP&eJbCjUJG9) zd`e)@$(YfXZYomZtKXOnchCf#lwWe{wqzukHj0iX*cQd4lo)hc3!pK^c>c5rZaDR$ zDQ2rngAvjRPZLd6M$0f(Z@?>zRUowbP6(zUS0HtQwmSf)ZiJI!&E5`tq2Y=>#w3YB zt=|ZsbPupUEnVH~N9nd*rc$AhdUd+LhDj+g==56wlrA9lr%muN;YaD3Uq&a4LTLau z!=;oMbb4k0rH2w6xwv9P2KB$YDRT^RnXuJp%!RE+6NIf}t434Y$H41EL2WEz<#ko0 zltImetww1Pi_ewPCg$Y7BRO?@DZ2ei1@-qhxjLwsu+3AVp<%*SqY1*6(O5}NvEt$c zHH|`LP#<>VPJ<{tCTa_qhSN^e7I1>74Ztb7W~KmDP#f=}7H-x-&4ew+oT52^vzV~e zXo9e1oTbvHXj>VbWZ+^^fk`PbxQYo|QAB7Cpc50e8cn!HN~0+nDMlw1)XrxYRX82g z2RMxt8sm)O(U-p1@(4MN*UBl*b2FX z#$4EHG%?q^^4g}+6zg4#PBOeOlgL=3LT`=>TU_QV`grKXgsnysgsoq4YQFDVXq*T2 zAvf;m^Fu^DN{@-!0;W$TCu$2gLDUA|6x*s9XQ`n6K4+2+Y9?&)J&^}B6Sf*nxFL~7 zQw)h1on+u*4Ucy-g)L3p`B9p|^P@D8=SOKikI_j5wev|m!CICM>iwKt9n||=xfr|4 zp#C>EWsbpCrnl87J*MDTqfvVQz>m_C1&*yEEd{l))Sg%59D`2AQoDoFQahh3g?xgr z^`j}qJB&^$sK3jl)IrUJE$(#AgPI9jjV1_NMkkdv#T=;9Q`6U@?5Q{0xYHm!#YAlZ z(`T>~wFR6YY6EZ@eS>qB3hH|}lXOrsVT*6YJgAv38I2~~myAYJw5@yr((s%4BoKul zgPI9jjk2Ev8f8BTG|GMwpfbzhw=-Qb!L8alsP}PR)In`L-6g{SXQT8-^_$9NXMm^} z$A@6rJyR-qGc|3X3BW0$w^U>E)D+qu@TH~roWu54k7$Bp?1Bxz2`1G8aEe`XoMI}z zU%{r;0se~+Ot(F7Ijhuk*+KwLF_+9Kref*UY+4;mTS741P{!q~Qqv`60XW4$9ZoTr zMFI6XHmw9vlv_hEZF%Q%R;d##9R%PMy8$@GR8;+MHmwe;b3!ofta3%?Uzpeu@2Zu9 zu$c=S4aaQYXgERO1cawp7WXJdarJ&*S{YYd;E0@MTycS;;RJ!>QH)Zj*sIAYCM!QK zP2A;Rcu-vS6txeFGe~j%;l`($~d>G8)uz5 z#pV=FF#%ZA(-~_xuV4f6-@%a zkx83_s3lyFqhWfO*fmPS^geL_re}&hicws>&zDxl6&E-nXBk&q;Al8O;CK|1apf!= zpd-yc2C*p3rPXo81x}t89Vr($8m4;!1Hx0Rgm4~HarH_zt&S@$aP(&x-8#wTtmBI7 zhIQ%`tqG@?imTVKqIFzxfg@Z(1H_mO91SOIKda#s%>}2JimRJh#dKVq6@uyQNmsP^ zTB5jm1Curf5m#K`XgFpAN5cu*!)rK2L*-G7;_AIV#bjJ@fg?oAxZ(mw!*tBStwb88 zlMb9>GIX%!&!yFI#RZNS>|==rwS)^C4bzR70pTeQb8(8PxVoNAtK*6b9Q|cP_p5R_ z>$u{&VV#;TjN}wkam5W#_4g0mpUdT}!j2!H>eT!IRm1!M6(udduHMb&tmEndAvnf9 za@*!1-NZgrE2Xb2EmuoWtYrUsX>nOXv|Mc*suF_&B@xTc&np*GLr*JcT2>b*`WV1VxNX?@Q?r?Z&0|Wsoktcj^yb3Q_gvdbi*J ziu&_px8ML#{V`sj&$Ae2oK{#c+6K3nKHr2AgBJ|MHy9pUf~uTKv935JJ{v6ZOZqH6V8wJ(!2~=Xc!tBN3DvQ%4kLJw9Yh#Jui5du66Lc;nO` z$VB}yZrL{kiuz+*!)8O)HEcFyUBhNW)-`MeBs8`|9F;5#z3tg5DdO2QLbGXN*I=w)>?AVo&nOb~02oIK3ZMhvZ%Y-BM0MKz z;RNgJdULQ!k_u&KIXaX*k)uP|(;a0=4ze~5Efg7$vY+Epkg{KPluebghn&nap{#Mo zfyx7PD0>3O4`oktvL-pm`mZ^Fl)aq;NZBtr%4SO0@_NXS-s_s;FMJ-*4Hx4oqr92UZBcrU^poND{2olP(oc%C|$aF*>J z0mDBp2s6akU>lT>;PSp8Ly8T1L52)Z69*Y8xPLInP{jkPL53Q}rye&g4SKBvx6OFc z3m9&?KFko~n&+T|1k;E?h7|K5L52(;c0q;;HvI+}s@NPFWT@d4YkMV6*QTZJQxgo| zJav&!IO)qloL>G3rKiV#LU`(rMUj8zk41r3{IMwTsy`M5UPCOp-oZX?(Gt;iOjmo2 z!aH0`Qs8taZ74n62^+%cPSy}kccO;y3R;p7Ud7`xA-slbs@xD0_EA$q=eFItSHSQO z*NzwrG24z93<=wg7z`=fju;FX+m09v6|^HkE2{XA2{P0$QuVlrnwk_>ba~PX7;fU) z5uu`Fh}m|;U`W_@#9&C-cEn)F*mlHVsGuDQT2aOEy&yv^`V(KQAr|TODovyP4>uk$ z7-F^^F&GlI9WfYEwjD7TGPWHt7%FH-f>u=Vl^SHI;hi3jo2Vtpa9G}xUchh@Hy#lx zN`{ziM+}C9ZAT1-lx;^0hKy}T42BBYk)RdT=!Id18m=Pq#2R9e-p}*YMMB{ut|gHQ z5>Bt^h0@bQdLcaZ$D+tT^T(pVEB;s%c-0?^07ighVV4{SP;*mj|TAyj;n{{S8*UUgx7Fxu@qvt{_^YW*mB*oVEE@i zn1OaXm#VidA&K^d8B*LQ5tNYO5|AK61$Ti28LGGvB*;+1%^)5(QA?6wn!%G^z;KiE z`Imb^GSG8oK?#Z5+}aXSx4E?$GPk+487gRQgE~~BXNMVT&athb&Vs(q2EMw8NTsi{ zj|cJCAB!S=;*Ujvr~X(Jc;=5qfmi&oDDbL376o2IEV?Zbwkn90D8-G(Zlr1y-r-u3 z0*_hk3p`=9FYuJrzQ8lKB`NRk8EVdHGHQur7W8%2_tiy2Dt(=C zy}C|~F_AYGMf$`aivmymu_*A&ABzI7_+wGvRevlByoOkGTOzFKifXKYJS;1#qaA^oe^ARWSM&PGqFJ3_wvI{PJ4_X-&P;l?8d zL(H}#21CNOBL+jtwj%~Z_WzOg<^hr?MZNeJIrctgci97$Wp}v`q3h}c5v{Icy4dRO zqN;ih6pNmj+TC_%x`&>gJx~!9MAz%-51#t_i3kFUq6mmS6`qRv!}~&A9iO)>hO2w(z>%c3ABhNR>O2w=)YW+;B4}V9nc0eYT$Pzgupn;B zcx}R1tQU8b=^~*JlJyYO2?wfUo9Vt2CtQmMT6JN$D+X-2;DpZyhIe>-aXSi;JHT2Fc_XKVwv0{ESg~@iRv0;%7EHhC1QNto*)QoVOvaxyIKAgH6pjPrWgm@;UiY)lz+ zzHCexbOB>3b&!E`27DgyFYQz%WL$%4SUP-dNA2GFWUzh|@m&W;hpjP!>wPZF$`ZwB zJ3SMp1>P&I$qy$`MBHO9)98)+6oiw(U#l5Wtx@v`b_E*O<>Q0qXoPLM2ExAx7a3s= z_L?3QX+bpSW3%82LXf4hvaMO`9PYFacjCLc5$~0w-4-6&Ll8ON1qN*n5qxm9jX!uN zGOO`wo1orWyK@Y;fFwv0A>L;i#CBm@Byu_s&3QO)P7GIKN2Vlq50N2%y`v_c*>bsPz`3Ybokm<4v#_!hGX1QO$S;)*9Qodpvho(l;YaFSItPR zg@7WD8gBpk2I5pxhqmZf(av(CG87%U)ou3r2uYvTi9kg1wO~Fon4F{~>la*80b*xfuC&fft|aC+WTU1>3pndwD-N$@(S>Z zs8iAwHl1mQP+r#37QCM%$ZFbx4yz#PX$$9|5@bbfA(FDJuhY~PA`2^7t*W+QNlDd! zs%wScf~Trv>!jbpMUHgFUu}-=@bX8%>*$2th}ht+2TTNQEk8>c_;+di&9Z}O1o(Gq zxa$YtugvxsrhM)Rz>%v_s2=wP;OORS0#k1Q{%4Ij_XprBw7R(-0sd`jcH1X_ugwH+ zMT&NY z^LhjfwLCNfr5Ba5S|YFO!guAh1jbz$#b))@ab5U(3QO08(Wz&gkGdCCy);AJ ze0&sHpVxL_6tFBH+=Xvdc!n;FroTKVPIj(QT4IEQev01h@Ht61fIgFVVbyeD6cx(m zK(gz?AIxhRFv#WV87RF0m31NVx-NWY-i5%p3;#{Y=DP5AbJXI)5|%!mBG1G<7iJvddbk=J$MJMu0B#$EU+r8=$)e_O{)7rslWjO(O1bW$d66zI?j zY}r{CQZr2#MxkqcBU~4XDT;FWQ7ERU2vw#ipsowW6a|dC@Za(-Y?v;*CzlJ7T^Ig9 z-tvH<3$K`gCQnt`)+4X$!XMAO5EysiCza~BF8nPWGhO&jr82IQC^A>pg(%RW6qqaP zLTaYz!YELwZ-nbYF-1`>--Tj|icn>W0_wU@Oi{qN3qPHA;k@a>ugv9wWY>k!$F^-j zz|e)4=W>bAO8jV}&+EGI$MP;jPVU0!%?+Q;b>VL+RppMrCvDbAVCgz(4xLnvR$z1*S$>pmc^3lXE{tB!@Y!4!{)SRj*M;v;DigZ!<{4-O=XO~aQZr2# zMg~M*8`p(migLm+T_~og2vw#ipsowW6a|dCFnX7ds)J9;;iQX`0lc{6&l)^1Xdhj} z+ttaY(&Xq5CdL^4_O#iS8y#-o#XxU*^XyQ}2CVk~TglWJt#?;pj+AvU!0UBxo$)Hd zt0a;)RiGNI;vh*PNAK7G@_eNn*jHC^yd>K?SZ%H!0rn$GCJ2=>CFS%+5GnKqm;2k{ z`Y{Q?Aaua+(Ug_VfrjE}#$U$v87Mt^D95Kmng}zrtgtd2@YM=Ht%p5EmO;klzf5Ip zDrMV_0G=`nnvN{~-7TtCcMZC<7C$@gQv1}1e@SN#qVD6_!_|~ICBufY3Lzzha{2&) z3KAu0Bbx4zLh9y1^1vKIi6uSckqUy0=tvb2Ms%cx*bzEXN8kt@X+U{&WWIP?+Du!w zP8Xj~-rz=3Tpl-<`yKv+%K3vP0!ajOu&4MR5UL=kI0E_s2O~jHbp-UI=t%;^{;);R zkK(W-KyU|3KtGC(BxpDS`hmwrMIGiH0sTOH7(uY$2SU%gLCV zA*&Q$q;NBu!QAZcax&&-$SMf)BwK2fh`HI{Nx2p&!# zd083B+6EpyHV*+maN%|yy^o7VFU09duyuZTebB)s|;OHMD%+I@Pg3 zk>W9&SUg(W%^)!1F{40R%?yceI}Yb%RZcq#RwiVSdQ-BeVnFF+y+>iwE+^bY2C4qP}ZO@444K3NIjEG*++Lwsl)7qD)jyD6O zcua9D9!)jO1Zc!#WI^K+s z;xWasc(jpY7C$2%v-)YfS3?rSb55yBN&@j{EzgMPg$&uKjELUJ*q4Z2%h;EwUi>db zJf=7n&sQqiW0rm+9<%mqJ9k48#IvhZB_)A)w3cT?6}9CVQB`euMpQ$~rFb%;dhw@< zcnlGXXG_^lntc!NChc!*(d4F+$-IytfzgGh^8V+RbQ>`j?|?w~3kM^t6hD73!YaHk z4^(swK9~n0tivDjHg3#Kd1I{b(2f_D$%S{>Mn)BEU`xbTiR4njUc01f2^oqlZEQ+N z4yOm=NN%SGA|&V20}wQ!7Km+Gl^O#sVe_;;R&cGV!HKHCNu)l(16X z*p#rUDwV7up3V5#gVnK)3%w=ci?mNOqL^(fYoGnCijT>H_~z8XE6GX*uR^E~UWHH} zyb7T{cojl@@G_y-K5g(C8rDAhTQx2*SrA_ZW&}B}NHT~|o2e8+iY{>=jud9%K!g-; z;y{EHctUC)*U`^?U1jbwUj?jv_O~iNCJW-5QwOgkgZQ)+K_S!!uR^E~UWHH}yb7T{ zc$v^^pEh_64QrqMtr{blEQqgys6n!4B^ku0DV0J#)+9f*)Z3`yj9;L40%S;FV-0gI6Kc2d_e?4_<{(AG`{oK6shXYo9iF4Gn9b z{jD0WnJkE}0t>0^SxE-*X-cIKQap~B?kOcum9rw(38Rx)@MLVfTmg!(SbNp2%`fLQY@nb5mHbiseN2WuYKA%mN6Ny_SxU6_?Rq+Z%!S& zlB{I#DunvrRS5OLs}SmgS0U5~FB5w0(+01hVePZO)x$9+3*xK5vLJg_l0kf$QYnNL zRjCw03Z-$NqA8}vfe0zMhSWYT+H2pkGWQva3~QhLt%{Gyg81gt!7Is12CqV>4_<{( zAG`{oK6n*Eeeg1&*FJ6V8XDF<`&&IsWwIc?3hXzsXC)cLr_EFfA;n5M5Jw7{bRa^C zo^&8W3Zo>okL&2QuNj&~)`l;_txE5kV(&2s8gA-I*F!Sl*lfYlta*W2uR*UD!2jp-XqI#!I|^7q=k-A=*bCf=j&upu#H%{v!Y?yb{085f@H7Etvy_S8$tD091Gtregt6;Z->D z3V;f)sly8S8)v{ z(IjHuUq1>>668px7e2LgdfHPBicgg=tH8ffWa%6|j4J=G z0t`?-0uG2A%j+lwhd%=7cUl1cLIO0cbr1ymOg8Efqy=s>0Tpbk_qQ;8DBC}AR#he+N`lb7N3 zyF45qW>La~lEl;oCdbFH zAiq1!V1OY!ce8cWr1vm2Ra4oR^v*H3GXJpxjK%N#H5pbylsv#su2CZ;eby=2!8nP@0 z&C9YJw1BcwQS>k|neKU4-aP=Qd!l!%Olv6vbx%cMWV+`e1u)(7TN%(EgB5j8Hp0;h zR4H`NFNy9UfV$`Fa*_3km+2na2Mkfrt4z=?7sazIfhdw?2CXnditAkhQAF<&h+=t{ zKorG0>mJ zQK}PphFsNrHVRNJ9|^;@n{w)iub(k=P(zmGpm|xAgBDO$)(aSq)C*TA>C_9gOmsAb znO^u41u(tvI~m}os=v|z>V-cRy?{bYFMLDZd^hP(K=4d54x&)tB@hJxFM%lhcLs&2 zN|fcGhAhiL^Rg@lEugGqs_L#{SK3=c(4zOJ-OycyB)ZFV2`bBA)93OngUe7s&?GfS z6|ah`K&^PB4%FlLb+nARG8zbUqq3UE_p1sl;CosH7IFVe1(xD#W^v(_Icxxv!RxA3 zsbB}FBh~l;&4gPm|H|u*NW!C5@vN+3oIZ!A$kQ4#P{AYQDp19Tg$mU0k)Q(gBD&^h zs>@|G@R6qGm@huA0}J@xQgbZkrVQ8cCB!L8rRW+s2Q!e4R1mmHN2>XD(G^pv<>r8H zw@IS!Hle90GY60{LPy9_pd<7duOqei?N1|RS56(fVm(hI|E~0vp2v$jdY%QmwWA}8 z_#D%bC46=zvyv|d`u~P9sDf|Xl3Z1Msg^)B+<;6~#PkEjm;3judJdRFe517D4ygzo zaY$9@h(l^ZM;ubmceA#KP_;(Bk@Cnq3{!gD7GO2fkwrLz>Bthizf!rmx}hUpTLx8% z=$U(?T0U15G0I99))1a7S)^f_sbCeDD|XfN3NE8)^i_n3($Z_#RcPsTtf^W$Epl2q zt#Dd8EpJ--A~ud%`cl4g=k`LfUy^C06$EDZ7wAA0Cnc#4bB@=wj740mQgbX7^D0oCD`{YrZlh_es@0MPR%;~5VUkMA86@|(0(m_2_H;pPup@aDsts#KV^d{Dsts#fOJEX6-Grqx;aNpC_e*rq5KRqgz_^mFO;8w1)=;5EDGgkU@8CT zWgW+;&>M(R@kN>TRC!e7bH7ce7u!;8v+49uo0d-RvuWvMzR}XjcB7?};YLd*tBsbv zn41f_ww_D5p_tP#DstW6220&wKIMT+ zHyDt*!GP2a2BdB5+5Pgz_^`7s}5-LnuE3^FsL< zSP;t3z@kuo2A1-(wXOv)D)a_oR4iuN)8J8&YrjpWgUVFfY&xA%YUy-DsioJ2_FFy; zq5U>}UTD8fUl7`F(-)!rTDeO&tWJB{(qjje>jnc-HyDt*!GP2a2BdBjnd)8=9;zD)KLS&QTM}&p=%$KLZV+{0z(sLirh3 z%8xX=7Qm>`8;DV{kZI36kBVITZ91I~r`l%I>2O#}r;}kVot`$-(&8zfE6+_G{%X;U$z* zLY5wDMXnnRNZnvS>IMT+HyDt*!GP2a2BdBgMXnnRkZx$Q!l=ki zot&d4l%IjRP<{p)Lirh(7s}7Tf>3@27KQRNuv9!pZ3jk$-aw3sMy5TBJSuYSx9Jt3 z{WiTSwBM%Jg!bF?y3l@`-VoYv)8~cu+w=vY{Wg6O+MkXJo4y2}!L+AsIz~mV8w^O@ zU_j~y15!5_kh;Nu)C~rtZZIHqg8``<3`pIu07gZw8w`+cXtKhn$ozY{oTDa`pMkni zeg+ys`5BlO%Fn=pP<{p$h4M47gjZs;c3@QK4aBIZXWFyGqavUCZF)s$zfG?S?YHSQ zq5U?!F0|jKH-z@v^m(EEHhn>8zfE6+_NSx5rY{vQ%_L;gF)DK1U_j~y15!5_kh;Nu z)C~rtZZIHqg8``<3`pHzKDkUw&iFZj$v4oVg6ldNgEybaCNlS6+UD8q%0?Jvi1(dU33(#3`CM^qK)Ci4XM9~;V6pdj-(HKS)jbTL57)BJ0VMNgwMih-< zM9~q0vqA`pp8pDX9F^ni0!-%3Wj3^qzh@vr!C>moCj2fXajF85ta>J+* z>jvkk$+5vmU5*V#8ggtfGB3vlBMWkDFtRAe1|v&w#8%sbQB%@VjGFBBcei3s9OYRu z1M)1H0eP0pfILfPK%ONtAkUH+kY~vZ$g^YyC!vVremn&-iZvz9Vr9SJCOmoBV|DDNEwhjQU>IX zlmWRTWkBvo8IazI7Qg_>JAK)y1gDJ78iPrFWuDm)?msU3w?lbc~8zHyDt*!GP2a2BdB< zAa#QQsT&MP-C#iK1_M$z7?8SQ0gQ@VHyDr}XbeaXGzO#x8UxY;jREO_#(?xdV?cVK zF(5tA7?2)l7Qm>;M>hk~JF&*2BKJC!vVrc3Wcn=ZW*ZMyVMwCU12(WXo9M4K+X z6K%TmPPFOLJJF_NROGtBfYc2Jq;4=Eb%Oz^8w^O@U_j~y15!5_kh;Nu)C~(@ROGtB zfb>9PKzg7tAU)6+kRE6ZNDnjyqz4)U(gTeF>4C<8^gy!!Mn&#{#(?xrtn;YIy%TM^ z^iH(t(mTC!vVrc3Wcn=ZW*ZMyVMwCNZXxo$8Zb%Oz^8w^O@ zU_j~y15!5_kh;Nu)C~rtZZIHq!vYu;xo$8ZJSg(2O0y?1C0UcfyRLJ zKx069pfMml&@6yak$V|2AiWbCJSuYUM4K+X6K%TmPPFOLJJF^~??js}y%TM^^iH(t z(mT9PKzg7tAU)6+ zkRE6ZNDnjyqz9S>Fe-8{BL<{*;sTF~+&j^xOYcORF1-_Ny7W%8>C!vVrc3Wcn=ZW* zZMyVMwCU12(WXo9M4OILk?RHnQa2coy1{_d4F;rcFd%h<0jV1dNZnvS>IMT+H!Ofr zk?RHn(gTeF>4C<8^gv@kdY~~NJSg(2O0y?1I+>$6}bl*1JXNjkw-=D zooLggccM*~-ibC{dMDa+>78iPrFWuDm)?msU3w?lbm^UF)1`N!O~;b%O!voydUnPGmrOCo&+t6B&@+i3~{Z zLulVLt`hwz{OX-X7&DGkqgrK;&|0dC6ROGtB4VJpWfYc2Jq;4=Eb%Oz^ z8w^O@U_j~y15!5_kh)<3jEY=07?7T;3{(}@ToNL@5VJV1UCvQgTyss1hT@uQfO*9= z*8mHOYpwwn71vw?EQyGAwpJJwxoa*1712O=IT9~<*2{oA>t#Tm^)evOdKr*sy$r~+ zUIye@F9Y(dmjQX!%Yfp2Xj_f}BD@b7QM?ZsQM?ZsQM?ZsQM?ZsQM?ZsQM?ZsQM?Zs zQM?ZsQM?Z=f}tXO$rw?5$rw?5$rw?5$rw?5$rw?5$rw?5$rw?5$rw?5$rw?5$t;3F zBRqo`QM?cB`JZwYYyssg*aFH~FdrofqiDqf%2}`ll(S$9C}+VIP|kuapqvF;K=D4b z07i|_7)BJ0VMNgwMih-pHV;E61 zh7m<$7*RBa5k+Gxf>9$hh7ra4kP*fEkP*fEkP*fEkP*fEkP*fEkP*fEkP*fEkP*fE z&>|Q$!uyaB@;*%W@o;IiJGA^PnE`p0%z!*gWpHV=RJEQ_@o0 zs!}|2Np5hz61Sb0TTS!KHF@fqXRbjSnrE&-<~7e;gDhyCxdvI(JaY}QgaG2I9$?gz zv=lzOj}BkOqd{-d!Uf&dV5M0+O-o$NhgjBp}bF1XO zJe*XDC#vby;+F8ZjN>yJbc&Z;xT(NPVUH+^LoT^LTJH9SqjCHMj>ATyUU5X>G+Hf& zL3ECKcx-*Gf4msU3~jvOb3TMFb{Sg3)>`M-xOi%qh$5)7R{W7HWVzSwt#=S3Su})@ zReEFVKl75Rli{)UY7-28WRGJe`kp5 z2|kcgxA;=Q1T8lr$kEYnzV&+frLn+f=Y-IW3r}G5 zu@c1)djCwE-lR*~&H=MgQVVyn@)`H*?jmi>p3pt&Wbb zwTgc%EgZsu1E|_=TYnV(zh>f<;!o4=aP7ul8cJo&h7Q3Hm<&SXfCk{-cJE011Qa(3 z*m}E-w)zm}0a$I_fuZ)~pnSb*%S^49v!chOT1*qlzdPgBO7UZ|n9-Qts{AX-Z8TmVz>Ma{qT|+V z-BG+*CJ)v}cyvinQ&s;zS!%Q2L8+gX!00GV?Z25<2kYOk^P*xoOkuVa?N3u_uFj}j{_>j({-SVErpt+ z7B84Ft9tPiJx2pWOJy}*JV^%@@O-M8W3jkR2bQo$@zX(EE3+m)M+gkd=vsTD*~c+P zUQm_9TtzGWszdzjs&govBSz?x(Q^C{3z1SPSPb#5W-@{(eR* zo&*0C-<-CDlG_{O*eSg`!ow;_ea6Gys53GDVzl^TH%6G~X*Y%C<~d4ow*!wN zNsaB^T&Rs_vOer!A@&2or}x_ZPW&FK2aNW8y;8uqg;N}_te&2<@^_W={&KtcCndc# z9u*Je?ClVI{)H#gM*|*12<=#YgkD(s$Ho z`3^jpk_mx;;n5Ae@R~Ks03BFHmGp53U$I`{Z7qqO#EE_Q$25#L@6qG0A>WuDM!hfS zMTD4*{o})s4A6jzdO)k*V1&;DbusYhjqf_kV-9ar{#lBY&z(xn3uwIP= zqxB=5;bOdgILOSocsSKB#{qzf^znHixK;5mX&X&k(lfRC#Va(#d@X;ij$o%9%?6;s<(#1qJ`1bqc)))jlTN=(4&1xG%?3W ze}E%-QBG~L(jImCSp9{_Ym+tF6@HC|j9Mt@Wg3Fb%n)<7!VSn6+M^)DF*f;Mt|1uz z9mHo{q*)ytP+1R+R}W!DmIE) z|9Y%eysZ?g7e8EzHSif)#&f=SYbmyXFVt*Qo4VlX&TkDLVeRF^tE~-8Mf4!}q}@4! zpZF^BA8{!@wD`NijH=-f-xK$tsK6%VXJwT~6)XE}iW**Go=s6N9={Joqj=mt6!Tb@ zXP2^2+_(?LVsXPh6idbR7jETs>_$}{*bjbeKaxuE_xq7lvDocXP_6j8{YdJ?NA@FW z6dw+D1a1-Sbe0cKM*U7_P<$qA!!nq@P3JD$!s56-N1JQy<>SSd2^|G@?EG4t2~2Wi zp2>CCXE^nVf zVwVq0N+opxmzw4BBQr?qmgH?^BzSR*>+;JNp20nHTiP?&6Ps=P#>nsUKRbig?7Ab` z&y*F71}xgzy=4YT!;<{)43c?E@)%A|?m z({I9Z(mGyzcbGi{h{5@&S#SlXIo^gTb60Vs<5$!Guk^dE<4t_bDcE4x9WQr^hfA>$ z-T=<>-O)LYFF5)ak3ag^%$B!47#o=XVvX_JW=nuiIkI(sB5YoK`rt5qU4KO`Jmfe! z91O`SRSXn%9n2&D88+>f9Rxl&3}aMQIwg0K*WW$)D$=jaYXy3=1e{Lk2=YXR70(Nn z%W?68VVB~8{yKJ?9|-$B51^Ez_&AMR*F1!FV<&i@QUSCa$XDl$Y@&CtNqv0YZ|gYA zLOCSI$UJPzA#B)&l#6Tff(Y6ep{1J|Lo?eSE#8^yCFRTMkV3>SP+Fd-KeeIwnLG;t+l2IT$y2**;~tqe&OqCy;r~yrlI_jC&AEyB z7Y0Xfb+Og3;I>77M$1|;Su3zSDp@NNleJR(bY59BdX8E?2Vc}|NE&F{U_Y;9t5CKI z&gEn_6lbvaDcP!&tqOCx%vLqos>RPK*=m%n2EoW|HIuD|F7hp(Kton*RYaS;f6`iC z>rPgRP7qp*Hrp+LZ-KpX@#ZhU;p(N&Kfk@bd1iX*1+Z0LTikl-?T;uP^_gd1LUgM; zr>2uqoCjUPBWZBOsSSP!QmBbZoQ6PWjC;_3}nU{%dQe0VzW+rv1cY}8J0 zJ~cf%#XsA7#WTYq=<(t7uHN=nPEU@u&YVBJhv(*>!t4JNViJo^ny1lzYCO*SpU!l* zdb)_uq`P@;ueS~A)0k~$la5aB+{dJEQyUO!R|$&aOGN{??nRh|JQ~&G`xQ7U`!x#h z(B3P<64SGtVz%4c7oN;wxS5K~^*LJq2#dZ7fsu>YJ zaz8SXO$}S1ecHTexc%pTBIJhNw;#KPVfToGkkue*Z|Y$sf@cO(Pk@57*+0k_S+|DjG$cYxYzCN-$ zy>kom|2Ksuu>Q4Hnrmw?kiIru8Ah9D&Yqr*x6Vu_mDU3%PfyP^u$%T@;#7J>vfxOL zVokN4Pd8;Gm71e@dMQnH(b3#qN>lgMd0Ht=qp?4q1<&Wn=^Pa`t6E!fj6N2I9}8~O zTpjdrVuh1GT*-PSH~V&Kc03=OC6RUtlQI00Xi|PK*bZhA)3R~sK(sVJ)}fvUsYKmY z;+rnixyH{fuLRHg4QeFKniP=fAZ1{opoV_Sfhtc6MIGbuXEGqb+$K8oSx!K=L?zoDW%k=rA+^k3st6nW+^?mukXg0vi)jS zrRM3=p+1jEyH}FNd>7KqlOzUTaF4TmA_!2aztQqXg_)jZ++1t+*AGvQHsKQ0UO$Y_ zd+*FZOnT!q!~nl6_BXA5hwL1v1dfsNO%>JHK-KUK z%8ePX3_GKh^?n;3dwws&*m}1+>WqtD6|(pG4G+k};}x7~cpE%t^%TSA+8xDDgdxQE zuyc5$j|ww`epse60+avY3r}JNe|!eFd!yE5ZDSRFF8GMPqImX=_=0@Yqam&P;eT;$ zarG^a#uw#fB)#^OzA1~dg6am&brn$&&1i4;{K-A|4jCrSHUt?N14APhdJ@0T@otP4`-xr?*b*ZW=d?=Lq_z zGW{*Y_waNt&q5+Nf3CP+WK0SI)oxPIlLY;3T#(spp`fT*T*j+K9!(GlpV7{pd-rYb zPHp+vxsZszUGRAtmu=Q-lr6Gx4gOW+MCUw)wBe$)^Jh*>cQFkmyxLpmPLkn**RGM-mI}s}=+UGY<8_8yr3xfB)RcxN$+c8TTZ9ce)&;0z^I2Lg)y-2XRy?FMeG|dSc zg2_(B!#C_%EDp2bh$ZOCFx9j}{JTUET7#d?9F2Xelq34)!hzU5gW26iU7U=Tq=w*k zOz^96UbElH2V0h%$K9I*lmBaFznyDg`oWiKM-8M)ljn;?seZKgr`vb!-HloAnasv~ zD>*i!>C4Vfw@*%YEg7@>lwfx=56$aHiY_ycxZ-Co_=$i0&O0$rAo4tzJ?7a?~M7#gFhAM+$(mlO-7Y~Q8I}n5GnSrt7w@yzt zcZmfYob#QQ*E1>!o8v362eoCJRR?AF#$57=17uD*-;~=M4`8#$hte|kaL*0f-}pde z`Hle&ME+a&nxKR+mZ$0NU~9WSy?1(gLdtKfibOJQn`*yCjyg-K z;nOKgs^fDtOKM=xm?h1lR$0L^o zv>L8Twzh(9pEDJ6G;}@%18Y0rzEcx<%+lp0-qcZJvfpucFSl?kehxi>{*1 z2-zd*j3)y{o$*+ps571k6m`Y}fuhcM8c^1G3GTI7+i-DJ)EQS+MV)I^S?5|!*11-f zb*?pJoon;5&b0+u=h~uD=OsA0X6>lY$vW37vd;A?>KrbK*y#b+K0YSK9j+ntmWR!8 zZ+&fYq}hji^h?7xsZnP8P5Nc9rrHm*YbiCIvWicJUA07cefoYhMt)P?#B=bWBp^F(0&#rh^~&2>R~@qBy#{wKrYfJbBOgv-kwrI)_77cdmeW)eSRk2ctJ zTnUOUMNnl;`VjT%6yK|G8o|>ojw$JK;2J-TLpPo2VN&^cTl@Rqa`;W@es3EBDdO2P-obaL}FX3c+tZrYk3A^;O~z#+vzF(Q1#P)H@Vr(Qv;^uScTf%HkS<=~@HZ?MXpW!J(nBiNrmY9}bL;yZ_t_^cO z^Y(N8BrH5kOeapZwby&T$tv*dpqKII4Wbxe6?h#c9-I4eN-(xmEQw!0yaeev1l^LO5fKK^(5KsGtAuqkYqxGd^V6hs`B=~IQ+d|5OCfI*g& z`W9ktsb^zFrqXyE((@?Rs`S`_OYQCpz-Wx(h9Q zGt}SuqGqT@*1rK$fWvPiyx$!SH@44gp1X&5Y|`mm6X*Y1d*|Ur zw+&@=)Q5=Le)h36zagxsgvBfBePN;}h-+s*6n_x|#C~jC7h~gjduIC75}2KGo?HU6 z+tV{j;04S4DJ3wU*FG&Q&Pmna{BF*3KT(pMkN2Nh0`tN9({AZzN>01n3jHHt3!{>3otwfu=iR3i8mAp_x$*Vndf*mv2V4IR zPAHFbpn^&NMhb@g+8q24y+MLXN#S!9_$J*plcEZWTW3<#KoMWolBLu^5ntAl6b(?s zm$f9tJSgJJT9RS`6!B#(NwElu__CIySOUdOY4_$5n*+%|%_bqK{$onwy3-GK#5%fc zKN9i~NK{R7S%5d2cLbsimL!!1uEFj@gOBPz+K*C6$zgul?`ekEq&cVE3^P zrv^fly)hW2N{X9Z1$WAfm8fZ~iS| zyGdp_Ik=QBNw>6O$osZ2MFG6zU`Jisu)gMauN? z@D;!%S(nJCra5S`#1u*M-}i)Nn0Oh)X)jJU{I?OaGn3s*MKXdVH8CUm!)jvX&*Nc9 zH`@=hX1k+{zoX5pIn2L`h@;(fbS&=>%u40d{#c%>6XnX=O4^yhuuI^X6kmtl+)Vg z_p**IY^Otm&j^RF<%y!{a^8@8XlMGJg(&Lp2rXo z#lA@rC`wK$dV6ThwKI%=qD+8EM(k~g+DQ!Q5Zg;xv1o_8DPx zxpcZZ`W4X-ws*ZT9j(!2qHm7&oqP-2-%0&-frb03?-dvk%sZz z&Og*JzSH>!0tE+FHQ!>Vw zaDk5ITB2Ee5tYxX)vbax_tOJ^p)G(j9(@VNdtW{t;7=OTEI>2?l4_ zoIz$u8yllXeQbS5WLr@sj#sk}mc zUL6$A6h;>ZTU)y)$)61oD8ts9Dofzn&hDAb)9_44cEp5IaM)967Y=wlOpZ)hT9Lxb0}Vl(NymN(+aVdE&~rpjj@X?BLtPH-lNz_17MP zY>Z*__hJQWMARBj4)-gF$19S@xFzx(GI?cOiNmxxCgV<}_%=y>xL+;4OD2zTE#li{ z^2)f1J(jFVr-}ePBKdH?R(z*S9^-n3Qj?W&4bBdN$+%O)ccw@_+^^#}RwR#clR~M< z%D4{wkkp;JCaS~zh9=l?tD)6oW!!*MfWo_>iRy5FUK8xNHLulVWjv3AdWHAACaS~z z1x>Ky)`C`(mGJ@&^(D%}Z*nNGmQl=Cq`RuvNq5y+k?y8?<;!S5i18hG$Z-;RH@sdB-ez%ID16v{9$% z(AF+XpOX(b^Y;C?J{GK;$ivp%JIl#~#g;aU;o8+b_)512+~$jt5S*`ZHYyGsP-A`niux5^m?6C|?IA$^whJoe$vI7^*r{3I@c-dOn?djhgWZsYgq zIf4y^gy;RlpHB_}Mp9(Ucz{IpAQaDXzna7X?%q@4m_{AU%Z_v6D)E${tg)2_Q6zdW z(^T-`bhC*mbDc>sUuq_@%I^8Id)PHYxU|QbJPz(|o<2=@AK$mOvNtEV&5rmnmh2o#u{ASo za$H>HqPRt_a&%FePQ)LLzEdIvUB|YX*HY{Hedm$E0OQM^!;`e$EaOuvc#u}6R`F#mQ)`HPD^u$@C6TEO zxa`T)dE=I9(GcN$pYdXE6I!TBNBnh5$F#UmN-!lwt=Ym(s_*>Ftvbz>DMS%Ag7^2$bZi;+{ZkZ?a{% zpp+jBzQh(F^P-7;(mZ(*Zi&uPcJjhgxl*_2bk1(}iEt4J!-Q$^q(JL9ZOU3LI0Ca3 z?MH%{(~`mC^3EwDMOdT1EBU+g8fIj!;HQTg`hwwK+@+Uf+`i6Oq5nL%57~0jf4e(- zlL1^X&&}=a)ZkC!os=X+eQ#$0k$}AwS5hqQ?Z8{)r-E@^l2odop^tX&2&2%b%gHEyD%Wd0`0`=x6X*M4cCFvt_u5IxjBZMYUOcQ0Juz0^HA_SwfxR zuQXGJOQ`eG5*{G%o=;N8Ds!lGWv+&oc4ktc+LgHlc*D%3Ld7c>iMPz8GD8t#@rkpk zQ27c*;|(*ZXgF3d9&ejXMYYF>jKZ)>Nf4*vUuI22G#rb6m_>nd8VG$pV=^N(g6ruF z3hI2kw>6{hD^%4AY@V}dP}#~p^HhbzLbnlT@u6=Q1;o?=%0_ zP-o2bGv_-q*V7Hj8FH>e&R7p-%CL?)*Y}yn>yR_njM-}s>RjJvu5UojSXXB1p;=e< zSq~bhGuED&YnWMk_E|F;s5925nRB#RpDK`{cVm?^$~=uhDB=tEBO-^`mHmjwA(n3W z*`4b3NpXmJWj0fod1GgBPcvK}PX^7y9jsq+XX$md7F3N9f_l3FYM-;w}PYg})l8UU( z|2s6n!`|-vO=QQkZdwJv?o+UbSAg0Ucm>S}6L(MV zDfn8o)b2}q7mi~@65q16b?6Y}rZcccFrjYI1oEcjQUe09nnTivo zEVuRUHy6U`YZj4i=%u*Rs=YqzWV#Rzf88kCHB^1m-it9?(d=qMScD|=hRgR7b3=8B zo70M;*!kM-dAzOe#<}TkXc8X{d??p5SjSUBY@vNzC(8&VS?dB@d{FryOP*RZi|s34 z4nu*hBAYV6IUNT~NbxwV=r6HMF%?c#fqFZaqvLj7jzM8L@Sp&G7@p$Z3EWpUI(c}g zBvUqGf;EkvrA!7B8pKUF9`ukx`tF?H!)r-d4;|gy+UxG@_7S#y{j9qw_%J3g%kvsr zM?1`y5f-h2>%>`sG}bNjfqWKnqu0Q8SJ1&MWO?%}g!&qoEBz*|(mp1atxi;FlQq=* zxnYG%Y<{Cvx=*{!2EmuEC~*#KldKMM{AFbNmdYg$xz&i zR#{)rkJhd=6vk!Gb9fkbEQded;LGRFjnD6HH+K=}?o|6c-_Z=WEw%~cyif$YrgWaX?b zBX@lA@!F-f`V=DX+psLz5N19JZxqzeKOR)9eT9k!F9=kF*EtcBE0g@0=on z=WeXI57zB`kZbPUn8vL>Jy^fQ_GznyR}tO#bzD2G7EO!B3;mT|77wzl#;yJ^H1^*4Pd)%2nrKgqb7xil?mHmI-}#!BXNg z)5ng%X%reTdH~9S_z+sd!kN@b+|b6)_NkiNoYEw^(TL!h@?saC6oj5d#Pb+h+gi?3!nIq-q!i3%p>V%APAc;!5V*uQAT3~WwAV(&>bs-kGvbjgpI(ZGGGXU* zEXG&LzFyvdA;UQTzbqWV**PU!h<#xjS*4meA(!^c!HD1**Bl*RJKDrf{C{K>4$G-q z(kFB;ppg}&keRCo9||4qilSmBgLOpjrdtHp2LjW$qr5xtjrwrtiIjjFb3}^n=&(7k z_a^QRH@$6Uzd^AZjLGu!&Yj(S`VUjd(gqLD)OQ+cy_Yl6} zhjOXXM#Jx7d|O`-m~mSZGH&sY1r_&2LY5soMn@4N5G)QK>***6-Q&x;3iGWUD7mgPA{=MQIGgn=4<;N;cRMB5u%62OV$)!SkTA*2W76W(4%| z=J zq=|>8{j!pS%eYEc3eqO46l_Dog>>01!SrAh+t6xu*!1}>)RdMthE65_QMTMnC*4jH z^6TKF-CMp*G1vuq_MIS5kFjd}WN4Y|Fv@AKC4E)sa+lBTEGN~*ytR%!YX(uHQnf^L zLB#~8%3QT>sXjM@3PCOwE!DrxphA!fuGYtAP%T!LxL*G%rApgp93|Mxb*ZJ_RGl`^ zR!>g`kvrL8_iV9u2cv<*qCxOzDRtACM*UApFbuHlfP*HVmEMbOnePZ?nwny@jKb{S!Vr?2x9Lo=kzaXT>&z%+bcS?}w-%HaoMZ9>16= zqrq)WelpC4A!}ThZ7pxNvpN{VU&`yhtERV)|4tB$!y?mq8($mNrWSpy{Ti}Zlal?! z<*v7G3HF`jAxf4E{gX5{H6WZXq(M$zZ)Y8 zcm*TGsEPJrKMmZs6leWA91Ym4)&${TT#$nK-{iA4j_}dJIgdluHm9|+1cKrb2dHr{ zsvB8Y(~xCNEko?Ied--dnogKe?qdJi2ZMT$c*KEhQcACD{_Uw8Som~warwb{gfkA; z8e(wmKE~frbE2lux&O5)LlZHr5f3s~Dm=VbsTp@LpMo5RH!7_^3~_V8+tpU2dgnvp zj&!DJNi-+m{3#uRs8wXtzUA}a6RhbZ&|v5O8=Z&Jz;yhfCflsnGX+o>##FFKcJYyOk#AQ{}#*;)+h9kfktPi(^Hem-0I59ai!2ZnMPQZpkGk4 zHB2@N`e>~Z*HAXg(OGog5e~UsZAODmr;Ui_-Z|A2M&`~*v$uvQs<&_ruMYqs!gu@Y z*toA9h9i`cvo~nNQmz6U7!PTqO<6d1nyj}GF{%U`42pUt5L?GCW&1=4gj^p6M=K8_ zVw1^<;|byL+=;{N{Yvf)z>a6)4!@^yiID|D>=!qJg}oo}p2lS+)kqv~V!7)C?`d4> zC5M2KNo|s=0arpLtukDS5P1`X#KluoAH^AnO}v;ADe2Xqvn?Vz`YgnGz^>G@Wo#tq zYYtymw};Jut2w-g&nc-DaPk`mPg{kDhD@axXEL>3>?o-XSWqPGJiGv9>H>}{W$I#a zkCM8CKnmV_-`5wn4!%@NuHczcg}REk7)o*tPn0Ujbqs1Hxq;{#-WS8y1n1T9bzi4u zcvJz8TzfMdC1V?Aa{>C#0GYJm^vvej$!O546hE#)J;VmWg*5-U6Xn_%HHWyx7+sFb z!798(yn)Hq0pV!3Ht`@H6>AvOaPPrezzj|IJiV9~5qxF%h?GpQMXnTo7`Ch#3j;qk zd^8IN=IP-oLhpGqfgnNn&E9IY_<>o4RPolZ|I`&6h(WFR;4B6;6ZzI|tgkiEfB$fiN zlEBpm;Y#r?9nQUGlHh5&*a{g{0bHt{%X%3XOF~?R;qxNm(t-K$W2)LxU?|+Y(waCr z`a-x&y>Lv>U5Usg#eS_$jp#7*;jhhw)KQqasM5dgEbbG8iLR z|9ZEGoY5jOLI;Bpj95w^lTyK*^?_1s9$pJ&`N$>Ef3Za+B8)NuAo~x%2%*v_ZV)p1 z=_Q4iU>7MXZw{V1WmpBSt7RCumzQDn;^pCUJ*tY?hpsi-M{r*{oqoKM&o7t=x73_V zOZivf`mZ&06)z>?4x)GKb93*ov)UZs-4*}6Yw9%E+2x09=zp8oe$B#{5tU&U-okuEk=#3|fNc zTdL`y$#Zb;EW;|rlS;8FHfUw}=n_F0R!0crGK?-VJf2shYhBOMTTbj!dQmpvVUk85 zu2Wl^=KkNEI4GX1_IlXgdNne`L?Igz-7g1rt}sK|Y4>npd<_pybenjE>8mN+q%mJS zhS=SY2KaAS!=H^S7eV}N#W2auF5a}TPsjYFWZ`c`8rsMLLtpxqjopJA6UI-1x2=O+ zz!Unk*vRnkBw4KYdNak^uK{nqFlpq0(c8uoS#(y1%{qcJi1z!hWtjukF+r{s>OWCE z3mbORmHJJRjW^RMS+I{eP_f=PVtBy)04+R+U_uAV>_6_g0_QmU+YXi;0SU~5vKOID zL>Gl(dBcTaX#8GC;@3-l-lvh~e9C+gJ}j)7*iSf<8Qb{-H6-mnXaPCFvESbushaWi zw5k>s8O#(2@L-^;Ooja{g2?G`~PcAN_o;XU2|LBzBPC=c9ynsHyT;UNd{k~-dVGRgzI-x_y~&4G5A1& zHRc_d4`w(m{l@%NL}%Wov!C(rg4paw|8LA+LKxW(@C^YMF=Gn&jrl7nwS9i?0drXv z_EEUGF?2OS;Zc$buGk|OB!d?d*o15Jx8fkiCEm!1+dKE2p2GTn$~i9o14^{t{Dvt_ zS*N&SqQctY@)>+( z2d-w(*D@Dr%qI7znY>WopDE5to?JfTrR!y#R-lLO+6PTQ?4UQ6Jbd@5P`=Mwe-ay;K!&FN2z2X;hVHK!rlW5X_C>Xaue_U>>1yXDBL8;CPIx%$cLlM zc7%Zf0hZ~(sxe|sBtvP?X$^MHZIMxKvNpYc&pg#;jRIzL$2di&q1Y>j!j~LZ98}nW zk9x*>_gBI4Le*QtYgK6x*F}5yoWPaw>rpjrBZyBZn>N!~Qyqk$LhmF^;U9Og%oZv33A-SE)kszr;&a{irQ$Wmw(SiB zVu-C(R3C$&S60?xartDVkrCGJbekLfvALkchAy8K&%fXaw>~~QlI9z><6$#?cg^Q9 zaW?)~$*?-=BN9w9E4lhvt@)Wq*<1yk-uz=ECWo=+98t<5-Fa%-3#Ke+&-X-9b)1@{ zKmVWrMuYxYDS&k7*-8eZMSrgJkJY1ZQxNC|G>IaHSn*#GLHcgGL$X`RVdz>D(T=7F!WylqQOOWTa7wVkn*?Asc z5eSC&0zTU}UVxpWC>~K1&&{)WVU9YOsoQzZ-@NcV&RNZK#s%t`|EJdVwuSbcs6I^= zd6Cad_d`};Y_7C#{-T`F+{0}n;!bM}sr^1KgxTibmNz2pL(u-7)`d~&zSY#t*hN;uTTD6uZf1L9Yv;5SeLxudeQX)#n<%07-|oaGvXT6E zQKI&F>EjMkZgOsT+kvwAPju5n`=pF{kued3R-pf!=A3lH&FuB@7$BAZmj^1}y8;mx zA1(`?V-(#x?+>jS-WefffV;@gJ5YXaTB7{;*m0i}{Nejy!31^=V_>-0eMMe_jil}8 z>xoDBG_5j^Ckh@~L%hXe=8=gtN5iVPi)eKwQyi2`hkoZUMd17CelPZG8O>ff|)?DB|Ik8vth7n>* z#nXqO>#)BNtZ|Ln@G%R&`~Jasd7@locJ$as1rM!H{Y^|$4SsLQJhe%E(iA-K#I?Ec zdx+@cFA{tYCF3o|xKADu+%VM`Zf2?ppI^Asmez|b6y~#yIem-Zq_r*SIrou|4Iw;H z@}7ga&Q!!$SwP~xvk=iJ89EWfRk=m*(yEel6Fo4B=N0y*RF{s(pG1EHoH(h2kVgKWo>hJPfy-sBbNS-s7@kXNQ@?WOZ!Pdi`JXa3ueVLyIOkq&6acx z6`%U8shTDjcpEe^2o7rlQM!+(ON5xxZo+2UmTfdI_EbB4fXs<*N*A@Iu$xG1qVy=% z3Or@JcYukXVyxe3)W7I}R**Q8+Z$5@1M#-E6|7f%@%7Oc8-ciLZ{J*=)bTkLY(6Qr zh`3eZGcd&}^SJy|2G*(t-Ga7zziUjbLy7ZsSS!K~D`Q(-L}klRIMBmsKQPAb%w+d3 zn14g`rALVQmK+?}z=?A>iuS+|z&q1DqQhV%3zknVX4rw>T^pWTVg4oZsLS9n5(aUG z(IEZ+?d!}Ea#bo69F+(Cr;Iqz@e+eimtTd4)6+Yfr?3GI1Cz-a`FRM>D)Y6b2%GGp zH$M`e+7`XspnRi&0-oB*o~G0RtvO_~|jz>#)YzImK!mthMy)Goso<9BYd@|JL{?epOSg5gOYlV%@Y z{vIO$TLD^Tc6KLl1$li)aL3UPiyZ7EBh}W|e5k=AVR#%iBX41&oMy-z-N2WOnYKX#}9m(D9@UFGkWJ<4%(^PcI(SsdC?DIbBP>@s&HVO|l?8-7DdfbU0K zWA&2&0qET6E}`b!>n&kB7J=|mUp{W|-=*r=MUikbgkO>}Oh@oQ&EQv2ViH!-$A&J9 zhx-usp6HQy^ZHe0K6?j-Mfg1VbVjc`G-+l>Q$`{Xs8 z68pu$r7k~kcJtgh%<#cFKAJEH&tvapM@fTz-@5QjRz^J>o84Q5t4AqChbSuXQ`k8V zLs2#AJC@y$9=!F1`D{5VGyv#<)(;NYqPb-1;vKqK~Wi_4ftxI3>Q znDQ9IW%oXg{r!;@CEJk^)B%T|v+zz4T?Q5T(ce&cgw*ydxNshS?0$52n5qK{t7RW8 zgR0mI`UyVGRmTZw3ABjn`sFaqg$?Ap$}nsZ-w`I9EFX4=UtI>$2Jz)(AZ}K|OVqDw zEE<}85S2gaU^5|^QTG-dsODD&64W9GKn`a_rD)cJF(#=L&bZ)mJZvAw zQY(QD0Y54LOfY4D$q`*jp-Q0)=#VYLPh7$`kPUPdS9}H^2 zfL-^I=f+?|CiWYnWwe+_fz{$k1s%}9q~?9#$_PzIjfBoyo^Jm8nlK=V4+*$xr{23u zkUFAI`azuJna8rABa3+T!S@Zf*{(zIUiO+t%=)~*yfiErK6wojPQssvd4c(*K+pUE zV&?KAp12IhwDhq!3IF6wyoVUa-UD0YUqRs{VvM`r4s5t^Tapv91M?cRDk z4Y}@IS#}OSug)qpSgvw=$z>82uB20%0VXf1Cj261;mdemV;0_uogYliQ~vZa@vQuG zEIJGC;xgeZ{4g%1_+yl;e7XRElZ6>@6@Kt#FnQ7A?4}GhH*v~EkKBte68QTvS=G#i zno9BKrR-7n8fMtCrc>n_a9*B;&*Lj;7QO&C=Cam-{}NWIS=r~zyUuo;JvM6|Rj-0? zUOx_<)VBg5|xeB zeLNGd;d_5p{yM(-%ZjIW>T%nx42DitXEfd1a(R`|NmqHJlU3+suCxh34NFK_^*3-5 zR)^EZEWCjUr>y?4gjQfem;qN|Li0++N*AiPjF4AlnawS$=weuw*<3?n5rVWK43;eR!?$yjW7qxa0T$_$yU z-g6X)H+xT2AZ#0GAE+_pZK#$DmmKKQ*b@|nxYR<>wF)%qnyY3vq~8Ok@??*sY!4|I z4NAg(O~Lw54Z_|R(GHXliE6ABap%~{`?fz z$h_k<#}UNu2>02w*Bpnnt>5 z-NujaUm_8s#5baMY>9`6as0sxXJ&6d3mBJh0+J`F(-fDsOQoDOr=g&!Nk~N6w}kruC!gNyORPdtmgy zxxMKb>Z>0}^_&*X_osS}B-X+cR4+3oE+LL)d3ZIxCsVbG!l=9~I{FsdJuL@4f7&K(bSw9MEs^33wVzWPlH)EcPK@Wf1;Ps3p z(eNn#1Z}ljjVo#SL?YXEz6;u6fvYIhtkuIYnas~b7F>^vy13{Sc0ev2Riw8JETbzt zBdX-JN;*~Zh9Cs4QFNH}jbU>URo8UsAxw+5oI?!ZVY(4kecVv^Ky<*0s$us2n5wK{ z_BK?kK(C7yDx{lZ8w;6(nKxp8YIW&aYGCL7t-T1n2y(Qjkt0oDh(u1eU|t0Q*!kuP zPO_VVkES_rQtWcvA4aS{JhpkB60HfSLvp(O?y!(H5r+GW&GA<#-PX%=3vw6`XVH0m zu~FSRh5Eie6$5W}jKAOJxqEOfnuvknk&P0LjW`COac8;2X#qlxgh7Z(Lp0GKe5slt ztR2V@2IfsSt;O>G&pLh^`EuAo0K?3lc`=^Y!B~e*pHps|=x;%1rpU z9|Jo+#(LhNfUyPe?buX0^tynW^W)Jb!l2WoEk|&LA%N!=BDqg-YXY&AFQqW$4?XWD zgRE@sp1N;yciKI@b04&FZ+GXkx$1rEV?gzYhn{z3C;nb?xqFDWet$u4v!)Q%gtI%_=cdKaU>0%ErKS#~Nr-@u zC$|QpReb&V=ZkGasDyBR?-P2Jo%A1O>623;;+Riy57hXz*zzBK-qnUDq5bLhT?mwa z8$Q4tc&!JQ>1`GhTKv<#V;yVf3ftb=#Rzc$=pTOGH72)1%{=m4-^7QXXItK;CjKGH zw5OVn^(Dq_{MKMqFt}GU_fm8e3pFEfk3hdRs5hogOVlTiXu1H0J-iPf5%ODIh28kv z=84nO;`@S|lb~TAl*@wgA}wV3_@IfShp!1H>cGM)y)Wr>xU8pYNrfSU(Cs z{t+$%z&z@|{tYJ{M3c%195Lxo{X`u3BgwUR!Z;3v709Bv$%YWo^hmLHl{bJgE`1YQ z;lf2JEw}Ss;h4p>a|J>9k2Z%LEZOTvC%Ahs9r$?&tjB1Kz+hC^ zyOeCptve{&BBpQNSvirQFa#6B^%=hzbIAA@0nt&n1BM2mkY}uN4j3Qn_PXmU9Yl=~ z*wA8KGdJ6Oc8)`XZN6@Cg{-;F)`cDjG1*)l_*x6d=IS5-jcD)qSi5+}>kzBAcSnt~v2#LZ}Tj=}Xf6_Q(rU*4N~u6^;tr)6&s`*Jjc%^aHrF z!&2xs*RB*3xBZi$&9=c?&*aYKn%P`I0w`HqhN>Dw4Z*XsnS2$pz zzhx!?ru)YQmmY-!JsS|c3ae1mP>a8x$zvYXcsN^G(}v*C_5{?)`xq<5z-8hDykKXM zz;WV4{FJuBg#uEazzImY6-X;X;iyl*qBx6&f>ED{pAS{aqEOT)5Vy<6lUHae^R-1( zs2#?jQh6H!KrkiKbUayd@DZUsJ0phvYn5NyKAJc!3jcEh&m~P22W_FgJ z3c@oIHsAPu<=)azzjoiPp?>wA*HFKHH#F3*;7`t)X)O=DhJU37x>fuwC7@ZyU#o#` zC4Z+@BfpkMccp`z+Ps?Q8x<==yPp4BwkR6RuIRUGkX_TCtX0OZ>MafR>v~&jrCZs* zRRi7H{_Ps*R`+kyK)1esN2Yq*O0&ZMo`&%n|3M8S0b|AcW382boxevaG!=@ShF_80 z5Q=O^F9@rsL)q5#!cY^3ct@t655v-QzIpcx>$MrWIDNnrln(!dfE26>w;D0Dhn*&N z>DYFeq20o#pEbr@ZVKU}C<@fY!L&?rbWb!2zU3ht@Xnz3_7FoKT`YZ)Y6|m~7DMih z&|gYL7%ybIaSY!Pcun3LfNT-C;y^y{^x)tWpZqBbYfpq;91h)VbH>=(Xh!n1T0VmI zs!E&*)n04;3RJ`j)qcSnql6DD|F2L5+Y{C>Lzf2WeXmVyw*FWFUzqY8-|ECIUkS5Y2Woz@Wroab{3V-noI2;!IaR2Ksj;a? z7Mtj6uE3&hDrr=0P@%>POP*u)=dGq(c>fPh6Dm~Iv;9({K8u`QS+qopk-ggLG3>SJ3=0ZzOz|Dd5jPX1C{nFagR zyx9IFU?j5#pS6}j&ziLeQ zY~ce~7#bYh|8@4b@ndn2H7v%$^V66ZS5ER~g97c6t@hGm;UPN2eEgx|>z5u22W;pe z>p^tMqw~Bm^ZKR7!cTRG+))QRi?LPp@U_WF8;CX8oaYDA^sJV7>9KI4#hFqQM~xXT zJICJ-TP~=AwCCB;hcJ8mL(YhLpDY4CGj`KJ^3oe77Wd5B7`+%%<{=>*0-0i-(N~w@ zN#A`YVm3~KkQN&05=UOv%1IUDYR-n%By=T7X6r$WnaW8x&#&1WLnpzlKEaXjZQ1kH z3`g=SG(}cHgjC^n2EyYP`#=Yvqq4f0Y|@Y#ZcI!E8)H&h1&t)!O^m&g3I~H)Zq_?2 z`5sb#4tQS7H#ABLu#uY*!R~;F0VGCto}4vyV@!dTjh9o#PRXm8ba+YfQ%VQ-FUjf%<$lT zC{xgAy-SAmfl*gkCfe*R0!c8VusvHmOT{t+hxEopj)l_(AZ<^S79j6i4hypkG`jEu z3d@l)$aIh~kGT|+W0Gl@iHY<5f^udWq2S+QG$o7FB%(!>IxLk;#UX!SZ>mQ@!Q2!MDyAkhnMy6&8L?DTHPI#Z zt*FHLPq>F7(WKD=l06EuQ$$XsAHo$T)V?gudjYXza2)vHVMF8o2`nG3LK*0}PKRE5?x|OZMt@y7g#NC41tXk2jTAjKn9JO6-9OZEiBL$La9- zOU#n!Ls8kUldT-3^{F0RHL<21g`;*borI~4{q??;Wq*LBS4c(qsUgAN6cPL|UI_kK zdDBM-ekOVeX#>l^b)~ZUj11;ut0ogMAKOHU0d>e0M)m$DNpL~Q<)Clee9kq1<`~vj z5$OunfkYMvb;$I6Fj{5~bqrp@^+Hbg<`tWL$vg5{~ zu!op8VlhzS(x%ezj*FwT09(i}V4o?$53pHeJE<&gU(L4#DRMI3*98l4=d3cRZVk#s zr(OPU!IC^@uus(I@;Xtj^o2uaw5vvJ*xRd=lP+(J8ZM|B){^*6X{@6|ebAEy$3dV- z`eT%s{b13C$tTAyaY!Wc1j9#S#1ri&g-T%v42nNIIrJro^^9u}@mZ#b`LH9CUo1)B z#QMSxD$)J?YDr}4t#2Z&_mESp$6}KgbUoWAay}*z#Qj}jjmB1yK{LQtaX9x=2ab8sT?W~&MP$LFOWh4G`&H@U9_4f-~yT0=@Ez!;Vl|AgME`22)~Mq66!b6|I6ww8_Jgc%kf2 z;ka%t8pHCk7OHQe*~8PfSU!KshDPeF7_-~~Qf%rfV-Ct1#^yIvcw!j~np`nOMC^1s zq?3xkK3rNRNB#1AbcPlY^&S&0gjF@Mqw`~j&jt7rEzPkd zf=wZc)M%)e%+Q+Zs#s_0?iOkwj|4cs&wEkz1q1F0K%Rl@1hQ zyqB|p;s**DQHVWvTpQ+#lux$;SvIL1lLBqB=*4zn3Ct!INxACUG2=(cLCV?q1Edg5 z0BEmT$7}nz{cG$TpF6G-lPjwyKQrN(Y6B9r6>)N7YoDmvMtOi`7)6bWoJK14V;_RLmRWny~u| zw@0S{-;U#2u}tY{RpZ80*WjGrZ1r~>C)F>Hs!wLzRAPr|tn$(!)ivh60364iml%x} zniOSAw&v@~OZ$$gp>paE$*Px^#;d-eaMiPe@_jQXD~1fIG_CXrxH9vaD5=~e?afW1 z)q%OOnSL7CQc}4-*Z|?klKT;}DbmHgYpbhHxBe2USKmKQhOtD49k~b8C0nW^Kel9I z{dnj;$BYd0oS&n-=`Km`-3KT3$BbZqfF?0Q#R1^W1VMC%1y#F|#KFV?IMhG%kbJyg za_DLNSi$5__sI>aeB`~ds?kRaCjT;<{7Av%UuBaYE|~o5Z1Sdp$wz0CHx^7jCY!t= zYBRQpncXB0V_@1frC=iO3WW}IZiF~ivV2^XNxr>c*`ec4Jr!28vmz-VR(9}kxXZ@` zgk(}Nyk|rCE9l<}Tt-4=(Xg0+V|pGR5?43~Dmi{CGX!6TD*Q9z)MJTR!in$W9<%Aw zcG-ClWhYHXs3+9uR9o2`rva3>&M02|eLoS}>s(jtj~C*wX$bg9hPTw%VxS zgNmWyz+D8%k45K<1j(fp0|yT%8wexMl1ki%668B561SwTC-#AA{G=Y(-3~PnvG`(a z))k8H1@SDeq6QTNx=@oPn9NcnDn)pV(%jp$?}53gea4?P4!guh1nJ+;O)rJjeRXX~ z&6rciRgda{ZMXf)S&R+9{ma=CzK6Lpy0l^#FCa4`U~QDl%2kB4J|jvQx`>!>>yVR- z^YL)VP?(w>St28rRF)4t1>c=$mx^emGr0TZzB*h9WoLl4_eoL&43t0(_7#x=M`|{) z9`}j~r4My{DX7_*hysv`(4l44`H`wTLSPpE@Fkf-^$79=Z%LlfBADbY zxO`4tb3!!mm{?jmDXYii?NY(i&8B4S_lM+Biqg`Paqe4gfk9bZwUM?Uz%?lR2p&Rd z-otGmlYBC-K z&Dc3UB6^7zgu~;9k&2q{$XS51A2A`?zblk0`#E;PW?ym+8(INPbU989j}MqLlZ_H` z7-F&SCi^Bz>;ZewM7Kpr#c{KAzBo$iiQUIsHi43esn4iJM#oXwqG80!+>QQwk8jIkegyvTWXd^9cj%@w5~qbrKp2Xc_d zl8sXKt*CrRm&*GLC=1X(om2T3BQ5wRB!?f!PV|2Bf=eO{;R^=E-Y_{?!-#{lGJccvCi4X*JjHQBSL_3d7(zh5hALyBfmV=Es zEEp%<*cb6U@C+042;}-8YVq7$L!lPf9wkS0F}I@dKK7@Q1Q6dk1cy6t4WHaZN-@q8 z3Ri3M#-L0um@^knIT}tvxl0P0B=k9bF3G|`?L2J4D2jnCB3di&qPI*B7{Z79!C`FT ze2_4F&I3-AH4d(m^!ig9#K6ZNm`i4FIr(t24p6;7jMiF=I-egQ1QakOQa6buq{ zP^NbYTwcBxvESKRPK0%l@vF@A$Qs1sh@&3`W9EM&oL%h)r@cu%t#dqo-V zZZ_jDql|YooAFms#?{Sc{B@M^&So!0b(=ZtmGwB~chdT46%Ib&TE(+?@aJf{W|3sqhS)xN z>?4BXWvO;FbX~MnWs~ZMR`%n9$WkqKhG<6v*8ZTg!=66i9}a_vj1%Xq*%p zE{wrjnF8Oq#|tDB_Z?ge6N=ndlnt%yi}RU6i>%=DpvLRhkKW31;Tu_-<71a-8ObVZ z8<5G*JRwOdhL%r4XH?h1C;_%9J%YnSQCYN5f|NFuu^4T3WYF=xd}~t}(Jc4mb=J`G zlW7wZjG@0JWu;)41d44~UY?2TLt*vvo8+|1$u?;GxG-mnJZ?-zM^?bUCTd+)9i!D; zoDis8gfV*}S*K*4^08xifjjuOtMgdlkm<_=S4hy>*31yuR)De7NL)7z4Iu6<4fKRN zBYO~5D3PUnT#zYt!e=lhV6#+O)+Ym}V2+1*(MJA8Buyx zcz!SH$KVCXV+L{{;%-k8{EAXuI+VqKWs+zIiCN@7$!jBIz-5*J=5@J+#qK_f`gc)b z^JykEi~FhQ%fpHrI~^nV&xq1l9E(&%(ELX3J~7!cvGhQz;Wn8e7~s2-)sJDQ!1$im zWO1ZcR*y#4CA21q;>FBxdNUb%GQ;1S$zIP^J#p$oVxJ(u)64pG zp?DCe1Ck<`=X)f|o1==4NbDlZMr{*`~{F1Gkz3!@7_1u!R1`%$c>$2x{_ukXTa_ zv5sMCfX4<~X8N+}krDbV#z%(1ENwCvW2foykQi4LrLl56O(Iq<=gSl2pu(@Ooj9^y z-pAv%O*z@%&HL8SATiq#v9iC)YqvsHhN00bG0-0LU;9-o@#50@+8T72v7V{JZbNRj z+;z?SLBhEs9dA`e2fhF@^RRN4|txSIvv34ndx${ARSs6DK%*O7kpm+ zp!h+6xC@IVH5>uzb(o3f<+*lhm$MC|S}j65vqr25rXsSD6~`E>N9+o1yqC=kkA1-; zmRf;2qc-b-yE56CNo@x#AVQ;2lMR2Qn!>Czi5Bh$j}n3N_`l$!}95Ki$6jcYlM!cxHtrsTaKG56yp zt?eN@nNE`p^H@@V>z+JZ-#s@H%YiYajL#ulIFn0L67`Fzk3d%vN#&(IvNjd4s?JF& z4wFVDXGMTervB)vky-oqhw`d{)kgY3xR$so3|=XT7B^|&U4mAMndk=-?Ej1^J2qSW z_qFO7)T-#eN7XAp)iMuNA$lB|#dB0*FELO71vn<|7mmcFF@pyda?ttaj+sIg2z>`w zfuL|H76xqi?@#eW{Y$eNEL304t1ZvNkyxxkjg}nGY9^J~&S97&8{)G67*TN&QS5T< zVA$<%jd~^#UGg8-s8%YMuy1&(V7!n)~=1ta-;KJl;#EBCm1!E(fhbplK#H=x`-jG{NvkDUjT%jdqfGq#Z z_Pbu;QWK!^{)>7Q=ho}LXs@0*?Unj3>eVy1UU%jp+wb=3l~XS_4^?7dXT3Hy@PHhl z9%&ME*pR|DJ;C%NicJ66`-?B+paXn^7+r#_~ZS>m_wY%?n2w0kfzN- zR8cxp3=H#JC@Eh?B9OzXGpo6RV#OjdbKADHE(Bhg{9nClO zud1oR8B2BJYhe+e`(??NF}F+qIXNqXmKj$qPDavpBlGYiMp?8ufeq}$hXuIAWIC&% zUY>_6u|S48e7MCY_&b9uN{;!a1`BOMaLLj2!~P-kTjMx0*m5)dAg^xWU=P@E>%-h} z6kfq_R$k$-wP_V>w%%Z%myqmvxk8j!l7}Lk96Xl`exg0#1&~;qfFMlD7u|D<7vpm0 zCW;rs=p%Qyo!PwkS9Aw=B9Pj0QOE?zU9;GMtfx}JC z{5Llsgxi6DBi@&nHyqMzL~dwdqckxiQ9gFsTxP!zBm^X3A;m5C@VvtL>ciXy2~VOs zVLu8d6$Ru{6K=SzFSFQ6IDrUoU4)Q_KlQ{w6@YS6N2txd_n#!;15-DFdWOp2^I{{wYi zHomKgFK{seJefj&RFjFy=B$72^1>gO^+%oEyOk*;N-?;VW@|FLcTf{K7-n;!cpU5X zGAOC3;q2aR3?klm!&C82z>;d*E)R;mAzrnl0gcHNJ2q}j)N|PIG|4@pljFXP%opOx zq5EXaKhl(qx{1f9JrH5fOFm|Vb$9qp! z6_sT;Auu#|4Qn*0OvFF)T>*W@cl9j;Q4L8;*h10SPpzU+5T*uxC_5t>5GI9(HvJ_k zXX*geWN_$L%=9ObgqePIR4PQtf;jN2W$s8AUUho)un8HucJTla*foXLyasKMp=8u3 zFn@Iet7=cjZbClw8D4T?*|5QA{Ls|i6dzDNNGyE%RM+Exgsj`dQ6q4!+J5E4l^A=Y zD~Q6+0osglrtDKTw5)V!mij*!S#Fv4m)G_w5ef)TT{*Yg8j#xrVU|HWnzaU(>g0E2 zd1apx<0{-Wcd8q^BMh*=7EIxgJhNa5XT$K^(Jk08A7Z|c=0hYwW<-mq`C~~kCyp%m zB97(}1z&{myt-flM)ds!6EL&yh!Vp75MFgfL|ns!m<`poh{%M==0a=3>YiO-CS;Gv z#Noi4RI4aQNt&0u|yxiPj3p0v~?T>KL5ew(%nPUl)uAZKVwU~-Z{ zGTZ)eGYWM|Q5p__Ypz5n2AC2t1A=u0-hD_=?@lJSEJLvh@GyfwQq9Q#S?N2=hKzZv zY^*+;3)BaK$)O4t@3k0IeU>>$WFFX8Q-ziR8Ysb@EnHMIaxF|YtQfru?#+i1RW@Is zx_Y+&&TvE7#z^)kw4AZPQ`zMpw3iArQz#!Nnnbc+RUmuL z#35>9f;zTfW-}t%8QlFQ;sj(l5$ELG-h{3xN(Qd<;2Rj93V2G@|W zxW}Cr1+m5D;?Vu*uW!@Mw2rQBDK&z3!uP<kN_(f+RVP+u++xs`>V4cy7TOZ^W+_ znasd)IB)ic8l~WweK?0rE(_jR+HTNEFxM}y{6lu1aN{~Z!GPQlaI6fcNkqp^VZ&^#?*nWqmd_RCqY~q zS~Vh5Su!ww4tXLCBw8j^R0xxUxP{JQu~#4>J@Koq=Oq zxh*FmAv&$IV!No_TNY&Sb5Na)%Ra^q7#w`V8Vqvt?gR1~(khQOg!2-E@*m0Mg6Ly` z2gKdP!*B#4ZhbDR916WesDP@ftApQf2792m5b;(JK{Gef=yAD*;UYAbiE3#CVk*u$ zMx>0ls!7JG+>DiF{V*-U(!()U%iyis4=0g?giuN|ZbURIp};Ngdy3?|Eh?VL^eG!q zatdhXTkI2QVh>{n!v>n4P^j%wT~l?oTqA?CP+A3xzcX$uk5UNFrZ$-ncN4Qn_d4Sy z*1^R;Ckx^hMopE;^d2%e({HfcK;QUMQP3_LUcudg$h49}kNkI{FC0+Trw7M24y+HG zLgEHjpd;GmWE?zZoS2LnTrM+WyoZYxp3VD%F1{^lHC9aqWPd2p!gWhxg3RwnYp+B@ zBB)2zjG^u&py6g%8~To2yq?*#Q=^(^f-QpnxXw8IoJ^*!9=H5tPP5v}_~DRCXEI~P z)#E0T{?U+vnIuf;%W)!Bs4yjO#2W|tl$8z`g8S#%28)bW#~W$tVZGftXjgX-#xH0) z-^v%X%w$H^RE;||lY!tEE~1&tnN^vZF|fPSh%^fpa%Llcho&?~HaJm>u_Gimj$jNw)6@Z5rBP#IOlK;v%HcYRwn1gR41My-z{a%>zR8v6 z7g6VS2M5i~J{V_x%ONaLQn^v%C)Q)+CF81VYpprtnnbW_lgU(7SB)4Woj4BT9sG+V zw2dVYjrh&vr4ZTAUuqNdQp(igI#k^ZVGj{3OaUy4VWFQyF`4p;zPg&Of^~z$kdOWfKJ7% z4~gE;frBO6%xF57!S#~PC_$+qWo1~Vup0Kyi7OpeiGzca`N*pLC8{t!s(1Myv2-!m z(83)4&d|AcQpJh|4N(yl8$GgSJX~G=7K<5OGqLV8+z{0!cv))ncwB>r8&N{cqid@rifWRe zLRc|JOdO3}t}qi~&SX?$6g7H6EojAPNH-z*#pE<`4H2#&raUT`38HpJQFTGovoT!R zxH{oeIbGUI^Ok0CN&OIVM;V+f7QVY~T!3Q~Mwa=GmYFb8M->_ki;{8l7!N-#6GXL) zTFK<0>L6&6jESj@V(LuHUt@TJsC`k?nE~qEQMofsxj)4+1?6@`Uz5oeyfDg^2}*ty z&lVJ&9%VZ-Xosic*@CzUQQVo?z8VvY%eMKSqc%J>?>4hC&F9mqY9UdF z9h;5%I#H?)7c+)fj+ME=tE)J|7Wo?VtPOMyv z%8a0Mb*AdfsxdXN-wH8|J_~|hwRK`tdA1SPv+XgYb=B3pJShA?^0v&gHI}Eox~2yA zmxP#WtIvX1j>#NOm60@!Au*p7ebMOZ@uRV)7?v81bl6M|h+-y~80yl^C}@!xJ*KXz z9>=RsjClJ@W+D!?8#g{vS3P#jY2)kap+3vhoizqd>!Ed4p**;ls!hPurAENCX%rZ! zkRKAwQxC%*em|1qV{FpIS{(C@lk8sxfA`Zgh=rp^o(A!&Wgt%|9`KNO2sdi#CuK<4 zjw4ekC7l`&$QU;kyq$_$7~O{DYE8M{<(3N-2|>9)Wgh1)GnoqVgw!a7QmwFKHDgAA zAG;-51_S0RGk6%b)M65QHhvJc+J+9R9E7`tBJRvEY?-0`D=UUWMhYzjgnSMt?;Y@M z)p5c~S)=rrW4N**2fR_*1w2doEY1fobw%hP!-b_rjX4t$+`{tH;FFv=W$qah$Jc|O zZWG2hSk)kzvFADHj#1q5_o|(}{WlOozIv6h&R&^>GGJQ+R2e7dRMV*j{kKL#!@k55;kVEVV z+OiQ$Or6PYmt{%@;n>!)lS_DZHk2x0D$c^x2^bPS3(xY0XgFsXw}HJgU`r(R@@Ra- zVy}#*ZB;#{Eggc*lyvbt#_E}PuCb0nLzwgw(m@>_L|d5%FnYE1xFF)#oS4x#wj-o6 zlBb47K*?e?&=VyyO{~GRO-A8$8zYh-sBn=d?y?E%T+1t?e;d`YP9ip9`kO9pm0^V8 z*@ge~k3~1XX)h~tGMPz`5W^RmjJ0rBiD;By%hcjf=`I1j_NHrMNH60^AyQ|h!Feh= z-!xF`Sms*Xj~8k!O?(zRclUx8h21P1Tjly46XSyLSK~yoFbDShnIp#CVP%l0FUiIq z;&M2GtdE(L8C#9aIHuhC29Z z=V9>u%5b~Out9RrR%Yla*s!mPI#qn z21zouuo}D-Wf(tsu_u>8t(F@*tZ%7krwp+!3Tjq?ST8ScpFftu;XD^Zc}1z^M5Ade zl#JuRxP@bU?1=jDXN|0olFMpcTF8{ugcK90op&=SmkLxx)mn&Hq+ z@O-FSqj@axaP68v1#N{f5;jHJCzD2xhP87jAWE9(=>e;J37;kv$DhtF#;SrA zkaEr_aI9D4R2e5l)W8KUtU_Mp!qOv8tHlkNaAXl=EwRy8i>qO91O1=TY3765NS$#h z@L5d786(Z2%__9Vf};uFLb9;{W8J*PrGC{qET`A_fhvBs7;46375iWSG5$47ATuvoU|S*c%cHQZ&?y?JW~)JBOEAMt&NOrO zK*j;lpfMR4c~;b{P}J4PErQUyg|C;$31ddm!3dmmxMyCDjbga0jU^NOa-{1YPIW*g zo=82783rvFE%rto0ev6)P9uK`E(fN)w8+pewb zYhuHlpD!V|m=YZZWfP;lqM6ZlWta+&iOQ2Rg9lWU^udQl`=(K8m}>{=4;OfK-vPsh z^hXxZ>u8TTTi7I4o(!HgA9H0HZ&nitmta$wYW zCSNhs54mwYp|Ht~>t!987xznSu!qL?earje+)vZ`F)ctiTwvA#sVFpoAk_=gaLjD) zC<$wLA}MyVX0p_fK{(PoGz3Z(L)wSYpp|y23|Ng%qIl`UZ2YI9)gU+2Rz^LhTu@?I zl#-o{LCWxm_Jm)ZjmjgluGT?c=x&{8LSnW1jX{8p5Czi@??OChdGs$q%h%v@AWbS$kQKcM5 z+*dIarUH4<*b2oJtTC-4H@UGhT~^r>udif78eXRgD(H*(XwPF%stq>i}UTb@r z@we1+2JY&!lD+lc~hJ@bO@%4~yjAg2r7MhqEC`-a6IxLI>?_ih{5)RmX z5p91oOBg3HG!Q6_Rs~a@1_E1iBgc&E0cAqCewdtN#uY;qmlxR+i&S1@FHDQjSfPAS zFKoNU9(zKFjXf4a{*68Mu=Yiqmb_Z5A%dRoi$*fz!Gry7rr&sw@KD}lOmB=m?BIr+ z2IGcKtR06-l^_{mYdviJFl9jXXsVYIXy_IhSL(w626i*1qy7kKHq9;fj^Fe>fTNPc z1^g$r_{lCkjzwLPop1Vfkh&++>xDx`al4@(_5MG{5KoKdWOBb2c*z8q64cRR|`{iO04WHVc9A1vbAB^DJ*+qV{6N{?FQRc{t@_l z7|%)-H`uDDpT^%G8v9#X{j$Nj+KfC~WhIQ%Yb(_p)Y<2S6q_PXKsjBc=7 zAkgAAU~7p$%LfoBLSO_@6%A~#Tj8PAa$snUKZ4;OvS(*S+ZmyBh*WHx96Lw>gMD7*7XRHQ3+7|MwmRDmA5~!9Mgz{1yP; zp$`(w@*3>Je}Uic@mmk9hd)QKo#0b|7LBbeefXjj9&ZMi(AdRt6ws&)e!GeE?zRAH z+cnsO8;dMgjl|Q=6B_Jkjf1U}s>jnZ)J1K@%hWp5QC-~{;8TJR(bnn(7XOT38*r$p z?E&8D2=L%>_;564r`32%r-uQSHukboowlLPI(KWu;NhuScMTnqvEBAkb3HwEfc&C{nX*e+&Yx)H$|)Dgv$5Y}>C! zppBYi`y(5Vx7w>QX6D(xyUn97y6Z*OVS=wDpu!3M7YWa2}7B_XR z?duCsQv+T^{WL-E#uKgfYCaOH5OYT>fYk(#6Ff<TY;J{`U24ht5vrDQv|-J?y&vt2pppBwEZIy_`X_g`#(a! zS9jU|;RyUd-EI4aB5$M$^$4paBq{vik)uGZN8!3g|Nt+oBG2>eLhXZxKII6~cT z`<)OtQaxb%9TE7kT4(zQAkbYsX#4FD_=#F?`)v^Tsd~uvTOsf>wZZmVHhR|2)h2Y? z5`=!CUP0(QBp#(cwfz?m=%GHd{jCTTtIuu!Sp<5jFKquA1bV42ZT~3*eyR4@{u2oN zN_}Pfk0J1Dwb%9^Mc`=lwe3HQz%go{?QcZjH|iVPe+Yr!s&8%oK?IIf4a)x=0>`Pz z%0CW)vWdtuT;(vj8HAoNj|AhYv zJ_4 zVNM6%`7Lsm;0H?N494$d{QipHZR&(ef$}7$qkkd(hdZ78dH6rsImkZ`|ED;e{W^px4rql7eU7c|Ff&Sr`WryF4p>Q}`>+s77 zwqaHpu!A81`%)*Y!Dsx%ITS??^Pg_)X#Lgs;R()9{X>s9;n1J?hyUz^!+ZIAKov92 z(Z1S+X|CQU_?X}`fPXa}V*SlI#@A1wMrtRc-y`^l;8Oq}8LFJ$1R36D^t%Kf66^*z z6dyOj`K_O6tguEp$NTzx)LSnixE9I!4a`Hehq?C=Oh)C^bb?PnSJZ9*uRnfwBhkAz z0e%k}J<{92xCm_I<0gWK2{scvPVfXki<|J;mUj@4EVsOiU@brqdadZh2K&OsKUgE% zeTDWs;B|sG2;K?7`wS6uxDGY!u!vwW!IBVM&(O^P9VcQ5oB`a2vYMS{<3l=KO)#He zCBXv(>j>5pJOt3W1V45`7k*L~R=Ud;f@cA`_QoRl8D4*J<1yCAZu=1GMq+;OAMyJ$ zet*GI*$cm8@WcA^J<^Tt$Kr<-tvd!~_Yn>DVpM08^E+Q(2aI|nyY)+i)Yk+JsJNO& zu$JIHg8K;`AXrE6AOV+J^$@`ZfNvTrtx;+tA2$&^Oz;T7qXe4?9wT_1;0b~!37#T& zn&26NEdU^>7Li`}5ZpHP=!xSrr4f(-;42{sWt zOz;T7qXe4?o+WsWU@O7%1TPT02w>XuB|bJ1Y$JG?;1z;b30@<39l*N{M8;c75RvFd z`6%E?hMoerk~FHt^`KrYZX{S1g5?Ymv;>`N`78YHOkGFd2a%>L zn31mdh_3jEuK$DIzww)b9_Tuk-~xh+2`(eJ3gBm)BVDiM;{t-4F&VqAAXpiKTNt{H z;C6ylA-IDf0e3RAn&2*gazV;a*SkY-4@38cU=2fS3GO4fKLigjM1ijBg9Pgd9tId8 zNFU+jqXe4?9wT_1;0b~!37#T&nt;@+E2&pkQm?M0UR}2mkZ^S+;rg{8CH3k`>eZFh z%K(zFt^!EMx(Xm2>q-*Vl_abyNmy5su&yLwU3U8s>PtTE0q6!sq8s>!ZWtEb`r=oPABILZjEZi5 z!Ve5?x80Zy-99DwoZw3Wa!|i+JklD~Z7(0EVVHHBK`@hG7Qs0H-48LpTQNDSofCXb zeo43IYkZTdojYX~^T^mPD@X!B}4pN|}JdLhALf+Yl` zEqW=z4Fsezn#`dlsnH}bn*6n1L9mkGLwv|7f|P0x{V@UMcukt37ZNNYSWK{lfGQNd zl;8$}8wqYAph`h6C%744l^|Wg$CU)P5Zp>YYN>B0SVeFL!JP!F3GN~wTdeOPAaAV6 zN9(Tuekw@6;Ul>iO)f^0i_zp_^tE97^bG{J5v(B~E2vjtxz~3RtRq-Y@C3nA0PO{7 zBOhNT*h%mX!Dj?t5KO_a(bEXX0%)%OdJSc=`v~qQc$(m~EI3w>zRyPiBEaqCV+3YV zfD>>DLjpvyTg1l*h@eO9!*oF^DhSGbMh_7wBSa&yoe4SMO~$=Nu!CSSWRnQ&fpAc5 z9;Y&48o_jeYeTS&Ap#dvRegc>S9=M*C76n)SMv!L5OAgV5i6=FNGJ*tih_jV>Y


    QR3I4RVP1e_V_c7jy^T?FYJe7uujHNjm3cN5%0a4!Mp zl3Gh}AHn?u4-l*)c#vQ{!9xI@Oq=pi1hGvFJxuTj!J`D52_7SOoZtz9CkaF%f106Z z2&ghp&jJ{v&+&09!Se(!5WGn65)wa|mV=%po|J z;5>r41oH@PA-J31K>|`L^$@@brcL>{kzf-6sh4`1;2DA~1kVyYNAL>4s|2qRyiTy4 z;9Y|E08SF5@AL5kf)5EkBKVl#D}ucQUlZ&j_=aFU$e&t3u#jL8!Eyp}K$U`&OpPK_ zqsYoAvNDQXj3O7K$iOHvFp3O}A_Jqisw=MQimSTfs;;=IE3WF#2vRQXic7oV(yq9) zE3WE_tGfD%U@yVf1p5fSA^4V{f!z9Jf_Dhs1t-PUZyf=- z%$E0JnQXZRpr~K)>yQ8JuN-_i7~6j}4zQ|QfxB%5cC!`uidL6l5p8t^!8HWe63h=l z4pUElzV!(FM&dWB!T#UIepYoG;B5n0pbfa#HbC13XxsG050z|#_qRC_KQPU0hTun~ zQ=0_@T(jG7&2Gar`)pG8wu7+aL4Khv`GvOBQne-1(3VU?J1+d~xbU~*!rzXXn091$ z3=pw`j88lAJng8M`3c*t-M4(4f>*SgNcdEx1WsawVy^nzNtOArS?}4kQHjr%C{#^ z)BbJ(cF{}@llJ%X@j-$O1l*-){}@3d0d>vow-azpXn!{W7l!s+7}|49XwT)q0ImrO z*o5sFYR}cd04@>j1#q2cFW^yz2o87;ZF9f}03FZ{9i}6y163OxsKMxP8NiChfmU^g z%lUW(z=8ZoQL7!uFFlYPVyC0<>wzCO$U61J52!lLLgr3XkQl(tsZQ4bJj{0NbS)pb zEOuH%a09`u1gi+{Ah?rY4Z&J~gCO%9bUJ=${e#BhHx7C_ymv)osa4$>FYSyW-5F!A zGy1VJ`mpmr{3`H+G}Rd_b7u%qozb72A+U8GiQlRC0cq#AF$nrWH(K3!CqkWf5quB= zDq=f-LO@+=XKGwKldI@VWoc*fcb&;vbf)62%V@CG`1XTOX|T68_O+_N_Yhj=dmBT* z{_Wl+_;tg-kKdvA9gg1-_#KH~cl>^a-!JgP2X@D{Pjz>+YwN(XBakaTx)`J683Fe>kMZ&wryOi);SrwHm+6Y{K@}0{_CATW4p$+COUt? zZjEc5>HHO&HAh%yIaS~%$f`S32{=^iI!_aD93P4=I2_aL-zYK3srJ8*|FfOZ{`c_z z59jaLrg5!*I;Ufo# zA~3~v{^{>SV5;r>kG~gzX}0rkY%zG&bQ?Y6??z~b?M$})j}e+_J5y}`Lxg78&P?0i zh0r;+Gt2hhMrgL}oMZcMAvDK!X50Q72%T#?=h^mu8^)b^i5=wjQs%Jv^Y=n~tx+V(dg zbgAuJWBVHry3BU2wf*%7U2Z!IZ2x|QuCSejw!apkD{W_y?ca;gRkpL(_U}gMYTH?A z`*$F8jqTiE`?n)>t?k@s`?n%=o$cIY`zsNekNptazaF6lwu7y-YY|##I}h0Yr3fvu zosBkjM?7n>?L1;*U&OPP*v@0NKNF$rZRa`L{})0_ZD*_P{}Z7bZ09B0KNF!F!Ao*) z)U$4~o!4!DEVgWx+0NVc3C;&LcAbi><+igEPaoPCKAv^6?d-PwlMz~BJJ?G*389s? zv)9HT_N-fM=W83o*t2f6oqaY2vS;09JKxwC%AR#Q`cz?$%(GUZPZc)FJnIhhsq!B{ z=uX?grr3Q5t+pNPf!%}9UFc`!-v#=3x2@0cjjYBK-q$k zjT+g`F(Sw`49Q@RCCw}ZNseJo;{m`LV-(04Jk)r&b&sv|mvs!S2bgBCa=XQBvOL1jW&+t&d6FU7OWDE@cTmi}iENoP^6_N?*&}(Kp*H|V z8?4+KF&iSg7CDU7Q9kV8LVzV8-B z>kZaWBvt>vNTc63SVNgqH7SlplIV8}p-&jB8z_NAQfQL`Xe4`z*hz^~iLfbhW+-A_ zVX*Fppc%@T>bu3uVFv4d%9mcaP5=6fV+Ldx(lS1fz%AYC}J=Yqn z%?qF+d&;Jr?AOUw-MOUla|zBTxRBstf=dBzF<6@wSJnSnQa#>arGnh->}_R;8ga9W zN5!|dA(l?B&Tep6uYs=AG=@$!?u& z)X5$lx96TQSY>}sw&rA4PB!FZ8%}oMWb;k--DJy6cH3m5P4?JiXH7QMWIv5tX&W1V zgLTX7rO7s$?4Zf!nQWQKZkcS9$sSoKaEq*c6Bvgz&@kFy9Ez;9Fl&L?(rZPE?8bdm zll!X>e?N8QK6Iywtkwfmn)|oFkYpWKT^~wRYEG3#+JjW1`^!;gJ$30m^r*^0{6kc# z`!^td12yX~jcR3+Io(JVyT2H?HrcS+@L|%WV9aHcnSGd=cYi)Yk5K&%M(!8Zqp-O_ zF463YDpwS^k=j=Dw4#%x{*_GcW^fTU%wjz2G3xLA^AUO+Ooi>wMd%3|ntcD<#%|V= z(6R&bI(*B zPeJHeG8V9>^Q`B%5#awXLR-mP`2T~@^H7Z2{yz|Uf%^jfB!ph%=76x7FL8%J*vv+5 z6Zo}A-NwBFe*!`;bHl(NhtMnBHSlX1yIZe9qc3#_=dqD$?JWdiA}0#zyP+(`*I-){ z#a@HH-}Xl%^g49$wm%A??NG?ueicG*K=W_Ikj8`Wx(4_BXN2BDVcY*BLOY;nw_(2I zS#R5Vtqq~fvv%4Vy!9Ut+69fi?N=c54%GUFw|&>v4;kL}J=D$i`yusxTW_-cGK4;W z%@pnJJnKVSKWal*^Q@0-4Q~86gg%B+-G&XAXMJMpCvAvsp0yj>1U7^>&-&EX&)Bg3 z@~qGB!8XjlJnM5?gMa@yLSNV#{5!euFKzvTErwrvZ2h9`AAz{9Yzl8358zF-__B%rKg+^!pq}-K-f(f0)H5{U(6D)fR7?sq{yQ zR3_BpZL^gA1PS-z@n?8EN9o66kpC$dXE`b zbCre=!qGHO>3tkc5b%`#mUf;H@RWuSvIC(Dm4@g+G4Ud$A$q)y(8Wqa^q`n{iP8`~ zC?;O2H0_VllRw5=YQu-R@uSVQrrLR+< zUl8z=p0E7d5V~IJg-XQ4rAjYS{>_NHLFpyRCnda5>FX7!6a+k_Z%{t%A(ttAqw*Ia zv|QPn?oD*pb**@QzEFYQTibzJ-t@x4a%R0viB*yNeKnHU+IUHP>=_depEqt^{jPDZ&onv1>IKq z2?dj0&sq=qt621m%jL>6BzoPts2tBU!tI9tSp(m7nU5UW^q|)1!-xqODDgCDM zOA&fn>9>?$g3vQce?a5UB5Mn#i}Ll7*6JU4dKS|IPYYYCf8yymg*{VWFK(?k-nU|g z&=|Cn^*knr~4+L-E@ny`K;PG`lzJjTP$E8Sp8IP}G{=jmSkAH-b>1&uec$|+%)VRU^A>v+F zdRjd0Fw|;0rjr)R@rKf~wCE__RCw zI%ydg?5Uu&gmSDeQ@ZUx>>WeUL#+H{(Oy{x}AW=rX+TAw7y^a z%MdzO>j$)dBSPnCyu0o(mCLo>qJ^wnq4jfS^jxX+R*s%l)>T^5 ztoc<`w>2KG*80WZu?RK2M(b@_n3Zd_epw5%a-G(%X<St3?wJ=Kw(Ua9poM|%1et!FyYzqe{V%aQ)QP3zeX z*j$ict>-xYod~Vc`aDN^^$xA)I-*IuQ|tE~;b&H(eva@nccFfckgmHmOdL>yBI_Ov zI|rDBx5mz0E9+jZKanTX`D?WP%n=&4R_o6lp<(yo(;VobJ?nmanggc-@X}iEbzt2N zTCDZg4k#RGF+S3PUK+Gm>u()sra_Cfp6vQ75Za*i6c-#eXfZz5m0`6>>*=n)6mbvZ z!(H&x;FtBS>Q(9l-3eWts))%|NGe4vCrLGXAEm~jZ!lWGhuGUw&LX@7<`YP9-iny&>U*if< zdS2^mUGTuItQWLi;Ih#g>=Yhf)Oum?=%B<)S}%5G-D=c&iR+UzZPR+GYdBx6Z*UFg ztMyH;tXr>Yz04I}9IR=v0A}%bT#J!t@UT zsoD+Vfj4oo=a8zC(G8!1pak7;AC}9{w0;7QAy&aR71Gz|AU8;8zJj6j^-oA9Uw|y3 zM9vo$kW4nCtG@*0a>1#0xAuT??N_mlsP0!m8AZR4mN$?qgSUZWKlh`Nu)`S6k~uSc1B`Ew3>rJ zjEFvAXa>AYND?MHdY>yaeTt*MafNA|>ga}){{d2`IeKymZYkJpa`cpx{|-Vk96dGV z??h;(qo<`HC_pT6^z@Xk*8uZ{NI1vQGgAI`gl0Q>X3BpJp*fD8mGWOf=v+silk&GA zbe^MUr~H=?n(OE}DUl%NIr`j`ND${c`n(hzk06madTt7yM``OqM=Z=T2wvofo!L+X zFE+s;2wvid;aPtKFLlKH>^KB3Gr?mKyxb9cv>pgvVS+~?c%>tLC_hB-Difrbc(tRK zc|vQianN6&rbX7Z4*D7z3lBS?*no0i&IU?ZWX+e5e#o=e;Aw#a3pXE6ic8Nz2Yn2h zSY#~%a>PIFN#iee(CuK+imW9P(yw^-R6JepU;tsrdFtONz0|?D06i8QwBDItAf8lq>Bb&CVjI&8$G6&ZqC(QrlnzY%|%gkWc9FUOR*-GSL1XSjk$3~C3x z$$Er07QuS7$XewfpRYF*VdEZhjswFyq0x6b@TUR`*w$JtA?vJ#49C%-0y=-gUDns=6b|Dz1PY< z0cnq#r}tag$2T5iZFZ2$hm#|S1Ae>A@Ar8BV-D;InF8%XEBiRS^>GKrg+B5~j0Og> z7*Ajhw+2_))_PJxdNveXb6VSf!n>X_F;iRHHlCgi)A!)%8S{jkU!WdaFzZ|U@Tr7) z5WiXGcPOwvi(w@x5dFy&b+DcTH9*X)))K>a-Hv)}#nf#LKC-R#yo4YTQ6LiS)C-PY z-5O$L+IkVg3{+%yV`u9n%o>ua&yeqP{JsFbS#7W}-N|Zn^pkkQXH5QrU>3+(3%q2T z0~!b3sjc<0gus`>?6S4}JEXnh=ucY1f3mIhs-t(K_~$_QRcjdVLp_GE(+2!YOY3#V z{Q-(3HqkM??ZDa1{~=O$ zI`CH$9n&rcu5Iw?goez47o2FD-gU4i=yyZhdk%cwMBDVfgWW-Bo1h_cu)PX@PH4y+ z?6Jb36Ec{CjaGPc9%g;)!2Z)e1k1z^u%sOJqXzp(?3Eme=k6!s2jl&JV2Xa?!2QZU z1SvmaDsuAI9i|Eyn3n8z;2P&2f<^4G!(zX~5zhVn5OMJz-p60zK<>wCk{(Obd7Y;UDVNL;F!+|53$Txc&Y`uzn^Ob|WYf+%=b>N{U zjOf=6cCo>TV)b_vWD5Km?7slPH}W_h8`0lN$fNzVN7HGK8|B_Z1dju>ppmy2uC<{_ zm{@(aYe1;oWCGf2i4~LBBhhK&+r}RQr`R5e=N=t6#1=>VDa4Ro4BZcgsn06drZu>% zm`AsZ7PL(fZ^Jg+q!zm}F^3ZCCUF6z2Z-47h|izc;ft~SHE`UV?5cC{iRa)GyQ81G zqep*&Sv*Ce#j59Lh=p;^a2V51l~@n$@4u=x(r@Ec)W1jl~ z4muV6v;&`G%(dQOh~BcDKPR9&WoKIAccukK=e-2Y^H?7POlR; z^(ltVa@9OX7{zm3b-p8v;%rx4;0U8Q$5q!kqBuU+h3&g&1zs7|vy=a22bzx91 znxN}km}dA3Fc9XuY89q5O-VeOlH|@VI&2t%Lx&ARb!5f~>A9P6GWYIfh!gNqjM@3F zaf^%Q;yNZr6H-Xl2F7h9*hKI!0Zng>`&`o3`Ed9M18eA0Cx(8x#(hoL^;ziF1+Kc+ z@h?MYp$j(x(LF43;TJ5rhs7?OgGITu#D%4bD7UV6;U+Aq(WNeYg+&W-gA0dY(L&tl z!j46hq&K;69Tt7WG8g{CSkJ-#y6_+NCnI#Tt2Q~{Wx@Np@FW&>=}H&w#G)>}#f49? z?48`|!umxPgxg$r7t4Zhy9;9&(M+sz;b$yr)jM1`8~fvd?@kvU$D&(b?ZQ+>bQE{F z@I4kC#oaC(kVVUWj|(qkQHR~@!jMMPVQXBq)e&vQS{HUTqOG{kg;TQV+wXVbnJoJD z2VA%(<17K_j9mCAi{9cv7mmuJw^;AO2*)3S)Q4QSEQ=y*gA1D+QDkj&;k+ywj7=^) zm_>u}unRY4@Y~QCxvTGvLDTjFgkE-G zK?M6taC$CWrD1{TS+BbAmlihbH5X3P!e+hh!gE^KtnDt`r~Lzw?+q8`Mt%o`-gMze z?YBqhEf>~Dep`fgxNxZ!Vowd@V=a^Yc(O+B!8F5ImBX$ZaR!q-}q z^zXT9hS7(;j}@ExFtB$nysm`}`4G#gD{RO|ppmZZ34iRu30oAdpMWSD;e59XcWe>P zKXu`gEt;{~oMuS9bBf0C{vp3HzlBKW$OM?r~uaCGyu-Em0i5aDR}#cvFDT&Tz>q=LD#3I z)FRhcw7jlIv1usM}O2+c{sdq{}vxhc31fylP9&Pyq1>D2ScOi^xbN`t^%bu;&tDbV*8WGK$bkQ*b{LVsu#wK1f20 zE>Gd(gcx0sLM??DU73P&k`SY-Qt(g`Vsv#1Zc0Lou1UdHNr=(4DL5<%F}f}VuO%Ty z^HXqL5@NI<1^*=>MhjDLViIDsCKeAB%Qo01>Yy>n*HwAYqSzXtp;BzG%zcvNOE9vH_eINxFELmOGrQnAptLuX)IAh7`x;_PuEEy3Gr4&?0*W$e!QtFbF?4)c=!BtCk zQZ}XFuO((852w`SDN%Vpl2X^DWMV&xA)k_oy%|G3B@_EG4EdBy?8hFMWFu+x*CegV@ZB|ZHjrb|kC`Xx-4l=O5Xrb|kC zdRq$qWTO0jIR&RO*^PT81?60QaUM7?MwG@2JL=FCW3XWzn4z^>KrDPnufmxQ4 zaquQ)SxUyiTbN}j83#Ks%Tl5ce;czb1=D=U!kA?#vG~}9S(Xxuk9RQ3QZh>3#Vkw7 zD0vUFEG47leay0y*nWI~S(Xypj}I}+QnE$z5oTFRwn#q4EKB)E;T@k~mZiiBWH)A6 zN~}OW#Vkv~m>+T>W?2g6{E!PV%ThRe334H3SxW3dzD&WRO=R^wm~SbO)xS!?w@qaA zy(u`jiDk&wDR{X-g#coS*_eWHKZs=t{%$bu2eC}S=}n~e1`nQZLN_LRaDNlJF~x%q zoUsh?;0PylW10tVIH4QUJ-EaP-I(FQFHY#jOb>>OLN{i4aE=qYagGNMIiVY~J-EpU z-I(LSS5D~0xgH$mgl?SY!D~*Kn7JNY=Y)xw=fQtYn3(fDIME3$xxj-boiH&MdT^%` zCgvhfeVh^|=3-BMnG!bT5)XcM!lqp6!P!pOl*>GL+zFdhlH%9S2` z?}Sac%2VH_giX2HQ!_j<`?$t~QyvbAf;GPf&pezI1!bxS_dFaG^tFu;T^~Cz6PF zz>OY`C6TSNn>?INB3ot4JRDFWd$G$soKhmx;$}}R@%*cSWre4%_hi#-rH4aHWYg>x zPu<`dV-HWQ^kjqVHV>YI!X(`8sari^5>`R~>j|~E!-GqqY>VCLse3$O16F$q%HuQf zj=Mbg8p_4&EI3~*6U+2L)QRe=G9$XY&c0Z2s?8)qY0%OvX`THcsq$l(D zDU3-^=I_%Olb+1qXD}u`nZH{wCOw(I&tgn^GJl`LnDj7zds|yQ^@-;n@G_*&170O~ zonSk`8w76>yhX5s;BA7P1Uy}%I~Hpn1i} zbZi~O z11o*>cB9Qd!K6;hfZmNsot6RpDJFGV2J~l`)M**epJP&|Wk7#{Nu8DfjV+O7X&KOa zJb25>fd0yZ%d8COy`EZ;mI3{>r|wA0g0#>^n}W~Xt0kt`r{(y(=w1?1c`jxv%3LS{4v&>@=oj0l6rRgN|eYxj2o}j${G3Bn`7^SwJpLGhGBw0YNNaGkJSwOB#<18duK(0!|##$DTtJ63YNfwZ6(rQOqq~L4Q>ix7VAlIeg zXe3Mb5oB4Nql}b62F{t}J`@ zE7R~<7CHBpG#r;j&b{^jBket!;@Z9~-xK3S#U*#3dJ&X ztWIu*Vi`JKC)Y!<44tTxJEB;II_u=3D3+m+*U8;igyD@kxd4kWyjdr=U=fD5>f|ac!ti#T+=oRN-l>yIu?WMvb#gNn zv-G_>xgLvI`hFcc63o(lb#g}*>*<3!xhRYEw7*Vn%OZXT>g38S;%Bfvf%6!9{evsgrxSh_1JF zav2wE@jJm!g0=X4om|T$wOC3+9j+$oy>%0#;I@g6iT5|WiR%WuiR%WuiR%Wu%@ZG6 zCO+CHKK|W&dC$b3+dJ_wF=<{rQ5x#J{S$xOG4XL=;)8cDP25lr-?MaL;-}7ukBNH; z;)|8KCVuLk_&781adzV4|DRgFiGS%{Mxc#q{@ zH!SU(sFhMX5^QxoN$p6m)%h&7Bf(bZi`0$;Tb-{`I}%Jo-=uaVn1;Sf?GOpbZ}}m$ zBf&H@F0~`UH1tzyM}leSm(-2~)6j3J9SPZ>l$JV41>TwIPA!3WL?g1Xd^v zR+|!7sW4b=PGFV7V6`QI)e3`Edje||2CJ2g1okRy zD2^qtPhkx`p1^*EHS|OR9SUn`X95Ql*3gp)98_3CPbF|jVGTW>3r&NB&|P*^$7CeW#{a-K`zq{7O1K7msTE9Zp-PAjaO7Zd1GSUE2x(56jsiw37l70IeQbhps;dYOW>ly%6UD3OA0IJjRY<$teiI!=usH) zZY6M4VZ^(gz%_;S@=gNR71qnU3EWUvFYhIAQ(?WlpTI4J^|CL4I|_r{g9Pp>+`#Bh z;GV(_jDZC1E8M^sOrTHU2FAk#`W05mM+uB5+>Ushz^KCQh@k|=6mCZhC-6++cEpne zo-5prcq(L3xE(PfWKp;sF)CzHxE(PjWKp;s@l42~a69680&f*=N4!Yjox<&imkGRA zxE=8-fe(sYBq3)<68NadRT6TRKY>q*TqYr#3kiHy>is?`5q z^3#U|zA19YgcJv%m%>vKpM+kD+%h3&_k~`HTr(l_vIKrAa)GnV%Y;h`Z=CohTvF=4 z$e;V3z#oNoPy7%6wFT6 z-8hD?cg2-{Yloiy$S}B zYzOx#c$g$1_AB6#L3x=YPcl89Qt%q@&E0E)j6WeTe6dam3u_!OBDma>A+kH>Li4>dd`wC8_*kbo7=uVNk4-}kB zv7PQ$a52RudO+4Z#nyRHL2rs&eW>6@iZp$s;C6}(eXQVKid(-!vid1*_zo)=OmUm{ ziL7smG<~W-&Ph&qdPLSTMRJbHx}{=XDtMJ5C7&sHn<5*Z%NnIf#1{%ar^vyV3cjUC zzgG&zQ)J$21wT_{-WyrB6q)x{!S58A_fEm2i4%&#O9gUfa$+a*g916-_&?>RkFu63 z`SwXjrLr=97E-CKj9+AZRkH1?tfk6|_f2S_vf_OgTBy|X4_RN86>nT?97VB*>g3Iwj{2pOz!KGkn^MekNlTzNaBXdk=Di}ZmM+8rX=pDbkF7_?y5}q zTavh^(nsw{+*f&=V`~x*RMxI-N%X5sKHHNRP?>yoBq2vpC$`gfCh;)V!LB5R;?>`s z#BjX&dy;q(um0X7MpXK3UlOA#M_T)n7*pxIjwGI`%sU5?c%hPJ2a|ZE(u0SRc&pNb zhm&}xl3_=Zc(2lpN0a!VGUXggLJq-BoC`iKE12g0?+IDKG)dhl>z1anPbSfsrm|1T zx~2L5ds@~lO@egEx~0kSZdtc9S#n0!ElrNgN$|62QstbiTbg6N^RjMf^5sGj7t$Q- zT}Y$;fS4%QV@3N7gb;w%<*nFHN@JlT}TV?e}Hf(mbHj zm&BtqdG#QP$7vo=>6f)klUxI`mT4x!L0QW*8TK%Vr)eg_N3yDE((JLUYMO~~NLDpX zt_{norkMzzB=I~=!abGsO*0XWB=Is$){V+ar%YrSZ}}IA&?AM~73Gt+5`-ts-+Y)}x~-%+vUEkEJkQa;ljiRv^GxIcwXjfxmZ;iN|I4~h~sdjDYxT^b4e zD1~l~+IXD88I9T)O5vPF3Jj-kULysbq;NqafuE*uStA8TQs~i0;L#MWY9#Pj3cVT$ z{49m*8qajdOE5PyW^Z}<<)+3#=gSmsYvk^$6z*u`?&}opYUJ*l6z*#rZ@x{TPvdy= zT?!90jyK<@FrbmPA5s|9NZXGoJk&_rPboasIMn={!jQ(V()yCZuvT9uJpC$c(wIBH z37a%_-QR^x8WZRbai~TrkBdV!Qu(JiR3nvti9~zG|$~Eh@fgr1x|cKQxkXhKg~G zB$QWmern98ttx(Ntj@Dk{LxsQXRG+Du{zIDFl47s%-(<`NaNb*9&)D(30zgqNw9ud@?gu3~}CPI!fi zg*rRol`0nL?1WdTSgf-XUaew@&Q5rZilsU`;k7E3>Ey;b70Y$z*ftd_bmrLgDpu<3 zgg2;Ir8CjWZ4#?>5@eH#H983*cS@|)Nf5btV!a;szbZE9asR7gqaOFaDmLjP$aWQ* zbrNKUiY+<`vQtI7&h6S=Dz@tE?slu#rjyxwRBYGT=j~OoLnll2so1HLCHqzE(#etz z6}xrzeg{eNt|ijz9CUbl)e zCtuE~=+>#G^D55j2_q|cy=L7nt@sN$i{ zZI(wW9_id>d932G&TW<<6+=3=S%y^%>*UZA6;E_>NG{!Ys*^(_Dn@i}vy7^ErgL*; zOvQ7Zn=8*$ywJ&^=PF+6VD~b zQ&?Wu`>pd$;qSr{omUF|5SHlmBl26uRZKFdrk_F(gBtp!Vwyn>{T7xO)X*Pci9rqh z6_ywz(xfzI8uCK0yuX}At0CV-DD%HGW*NL(XsUcKrNL8X)6$q@@RV6g8gmV@X?hy- z46rRJuw%pj%arLo)~ zrRJxx${?E-q_Nr{n--?A#vq#(rLoo^n--_B&LEqXq_N&$rdgWCCWA?4SsI%Sro-iF zY%#b)u_BFjgE?_!8ruwZ)~nLkZjeZ;)7W8L+jGmYmh^2Y3w(c zWY(wAVKB*TNaKLPB(pJ%!v_25O=%o4*iUax5>Z5&ABy1^OB!8C3d%rA%1xM`3thts%YkSa&gxNDFqN7J}xkSfR0 z=rhYRTvgAS<&keHVVj6!9y8BWZlT5DLJ} zOfk7`J!!Ob4lr3O9*YA^`g}-qZ_?evX>2g*?k8z%H0kcA;suj=V??}QavCry zUND(O$HWUJv*u)Jrm@T9TD}qom|VfvY3wtZK;MWLOs?fy z@q)>`lLlD@;xU zzNK-}afQh&`ZJBQCT9S@#2+SS0Kdf_CT9SD#2+SS0DsfC zXfl;f%HWF0E^u-NJtn)rDH&Wf>F%i+^qO?{v<$A9bazVz*G=vnPS4J3 z&&=SC$v&kugS#gClvx?vGufxi&ftN`Y3Q5``c0m-nVZ3Y$+_sf3YchCi((!9EcxTe_>oRz6GDoy!@WEt`Sf9aXlj&hY z24763hm9G0HJKhZW$?{pdf1%7ca!O1O9nqorib3-=4u= zlaAk!!6b|1-$$ub&xfaQPFoSs($$uz=`4+S2;S3g7WXX{X7EXL8teh{-V39?Z9Lr#-MV1`T zV3|dhoXB9gMV54Cu)-osPG+#uB1=wXu*xD!PRrLkTVzRB2J0-cq&tH)i!3>l!Fr1< zIh(--i!3>p!A6TLIiJBMi!8a2!DfprxtPIai>|#Sdba4=%c5tCuDv39wn*R}(XK_; zUd`Z^MX&aXPAxk0n&{M`L$7CW-{StljSPk?dhlij!xlYwOY~>agSSP07CXZ`qCbmn zyes;%=*D}ZKZ|a>FZ#3S#y-)XMK?ak;Dtpu_Gj?Yq8kT9lNNi#LD8he9`T`Q(&CQ9 zBhjSAJ=({jNsD_EL!wEGd$hx%NsHa$lMFsu>=vJ9@X2DgI3hZ=xL+|UI<>f8F(x{- zxL@&1bZT*r_POZPV&C{ebZT*r_ND05;vVg*41QYNqkWyhFN@y~@J6(2)xQyKycO+Q z^{?coccNX3-x=^;v}>~_e-Q23^y){^u1&9g67Aab>SxieO|O0t?b`I}SJAFbuYMEl z+N{psGni%5wLdbLZPT^mqGy|~{V963>DphSXPd75Eqb=;+CQRao38yUdbXMVCuOn7 z=1%M6EEe1BDyL+z#Aa7HHH)P-yUJ-)aMVn1e&&y)HO;69yVuMXjFUVq}O;0b( zVv|izFUq3brjr+EvDIc*xg?8iHa)#Gi|sZ&y)26zHa)#Oi=8$-y&{WUHa)#Ei`_Oo zy()`66W{bKmuY6P*JgjYCX0PG-Mu!8{WjgbE{hJE?rzKCfK7L=&*Gp>cW=nzkWF`Q z%;K<3cW=t#h|R3GIg6tW%>p2cySKHr+f37bCOmPMycpKs6Nq)ngi$l{bu zpYP1#w9QU)R~B71)5Gp8x^1S1Jz1QwnI86Lan@#f*q6mQo9SVH7UylIhmI^R*h~)x zvbbzBJsiy9ip}(JD2pDO>EUn|S8b+;BU$v?ObOz5n%&Lf zjZK=}%i^s~n%&RholTncW%1r7%^qa&!6wc6v-oI}W&>G#vPrYSEI!+$*~2Wp*reH` zEWX;L+2bs}*`(P}7T;~sY&eS_Hfi=Gi*cJYdz!^hn=~8A;+IXDjb`!NCe6mO_+yi1 z&$9SylV;DenB*{dyvSm*!{qTYizyD1$Ez%+I;7d_ET%ckAaAm0amcl|Sxk4xwRc&} zaLBdySL4FCF9A=Q;!Xbyrrsc5NA+K6;*y@l{({tG7kWw>p*zS;0GjrJCkW#HV>~=`0 zSvl-+NU7O5>~%<~IXUceNU6Cw9B{~{c{v<($fo%@9CFB}1vwmc$fkuk9CJvdML8UI zNTkI%oN!2_B{_6DB+}9xPCMk#vK+b`a%g!D-3~dlB8M{$IkYl|vkp15Du)XW>9abA ziw^0tCWlK7>9aP6%MR(YE{7`)>C=`&k3;&b&*7>=`fSLd*CBm2=5Wm+eKzHA-64H8 z=Wxp*bGGDg+u>xQJ%@V^nX@&A`wp42Er&jb%-Nnpf2@NYISj-)*qOs%tb<)SJdAa) zJBOiI2YYfDj&-m%hbOTP_T}(2*1`T9MjU3*jvPi~MI6XsELOz99G=CBIF!Q+hkQAl z!%K&JIg-O0hg3P5!&`?`IhMmahg3P9!$*fKIg!IBhb-yL;j=@QoXp{iLzbM%;j2TI zoX+8!LzZ;qFz%2b-8uYpn2gTk@XH}f&gSsjAxqBXFv(?~az2O2Zv5gw4pUtADHn5? z>atI{l*2Taeaht=T3q%iS8|x{vQO#BVTQ|j#MK;Ty6jkbb7*zhv0TexmdlRidJeN) zb}Tn?nB(#!$ITq(y6jzU<*?ADHg4yz$fY*!5>-xIjnL?i-8QYAy;T9=h+ zSX}F}GCdL3x~xo3b7*&2k4D6`F6+^#xYlJo8p~m)%PRCNhg~kK&~tIE%PRCjTqPn!gj5xm@%2;xdw)85#y%cCIruJakzzYj$2zk^!&HyeWv7N|9;?eP4J{t~+T9wad#p2iG|cc=XZC8C>9Nl2 z)6nX%&g|DP%VQeu&@kI$#W|p1j>n2~P{Ul073YwKc^)gyVGZ*=rr{$R7I>^ZM>Q<; zSbL6XSmd$x9M`beW9>PiVTs2y+^J!y$0~GE!!nOm=#++)9&68O4XZrXo-PfmJ!ar; z4Qo7Bp)(rRdaOccHLUYUnsXZ3Jd)pvb3wxfkEFS%VWUUVT+*<~V->orVYA07 zbVb7!k5#BgL%YWed{x6%kM*cm!#0og=$eM@9@Fr34LdwC=Z1!z9+`7f!!D1^xus#R zN7CHZu+JlD?r7NWF$3S#(BY9e_cR>v$ejBc4tiuxpN2yoGw=fqhdt7#U&9fP^cm1_ z)FXWcH5~IupNATbd!)}J4JSNi;Kv#|J#uJB!%2@dYFNW5k3@Q+;k3tU^;AQbM>dUU z==NBxMm3!An1RPM^mt^`GYwZgvgx^oUXN^gq2ZcGHoeqv-6NY`X}IB$O|LcF^vI?+ z8g6-H(_3MQM>f3^mUv{-dkuFzvgw0{dmh>JQTXDKO`n7>9@+F+_~MaGUxY6n+4NQT z;xXlZ6TWy%x!;8^9#ifQ;fu$VJ1%_jm~wv#Up%JVU&0rUDfhSV#be6-BYg3ga{mfn zJofC9bc}kW)MOoF9w{|N#|w|uYO0Qx9;?+f9j`oAs}>!vJyxsfI^KA!Rx@UigoO|3fKdt}or9UnZhX||4!9@#WU$0v^|cdm}l9w{|X#}|*3ny=%lM@lWw@y#Qp z7V7x!ky49v{P0Mr#X814Qfi5gpB^c-RL3umlv<|aw?|4X*YU?ArB>+p>yc6`bxiV^ zd{^n1?6YTItz(MM47^6iRG%4mt&V9vGw?bcGkkXHZ8~Q9WYc;btv)mG1|73}Qfi}) z**+}&ysA@vB>9HlI=Q{_+--#9ZP+( zX{U~5KH0QO#|od>XSa@(KC{mr9jkn1pS?QP_$1Ok9c?~2v|q=1pB(DYvB75=KA>Zx zPa+-EvB@Wq4(ZtJlSqekZ1G8?BRblB66vUpZ9XgAF&*1|R=VRlcKFoL2_3t9a;Q_s zZl4@Fsbh~%4xQ4m&!>h?>)7v8LtQ#Ld}^p$$3dU;IiurGs&)wWdI{JO?=04Uj z=#xG}Iv)C@&#;b1KI!vB$B@t6+^0H*eeULt=y>9DH+NLWh)?E>>3HUoG|zNA_eq-P z;(ec_c_H5SNt&19eV?RxCEoW*n%ClepQL#s-uFqGx8iu8JGbw|@jmZ;elL#qdGGTF z@wv~L;79Sf&+ifaBtG}~J))n*-99gR{vz)7dC~J%aktNlp1+BweZGhBUHt3weBBT6 zZ$PSyi+=-B<)`>JAXR>ee*;qGxA-?8RsQH`2}qT{I;IDt$|M6b1Mb{THqaVy=XQ#L zSpj!$ry7_O#PdG`bAx#PXJB3s&;JZ82zVxXhJl3v&qU8OuqfbH#k3k&5|ALX3@i`W zJI^+-A|OHL7+4vQAaf0@3P_N7237|o$b1890up3_fwch%ve3Y~fCO1&V12-M%N85h z5Rf2C3~UTYkfjDT2TV813~UKVkmUy20}^C~fo%c1rb+BY%*{zAO$uXxEL^l zY%y>pVDe};a4lf1*lOTryq4Px+=*9kyMexdp59?#AfS_X8h8{iJ?t_t956HNHZU5H z?RyM759rms23`ep=sp8)17^(q2EGM6QPE-Gd%zPF2MqiOc%tHqzX6?h)WD>WPxqLC$swQaaRXCAKHU=rriSEmr-7D`PxqvO=^>x)DFZV? z^7*u=E@W@oC8`VAn|6!pLiVO-49pJMo1PW@h3rkwiRwZ=`|}3oha~j{(O<|_xG4Gy zN$N`m7KiLfE{py`lKP5)r6Eb(V_;cGQePEKhOG9zqQsDEbWM~PlGN8lYa#i3!$4a| zKHn78g{<+nM0Fw8?Y5{cWR1ULU{gpp-WAn_B=tQ}T}V>jH?TD%sry8KAy@T*s4k=j z`$csj)8T-D-67X^(7>LM>F}W_G2}`=GO#~nJ%22k47uh*1`dR*=fegLhFtw829AVW z{imYSkiEu;fnyGQ8@Lsc**^^24$16s19!vt{GWk)VSN72!2OV?ZGMZ7 zLY}tyW1v4IssD>3-L$Nldnivk*uTC@ZBxELRG4V8HCY)|! zG-Nk1!^BufPtP>*EMzy)YT|jwdOpj<%UC6|O}vU#GRMU0kj$QI;!Q|q&ol8ZR>^!5 z?_-rLF!3Q|Jzr?zV@L`tGVwW#^Ph$dUT0!z#8cUACZs#N3F?-fCiA#MHOV#QcaSwYQsC z5b>n;4ik$bGJB_qWf57j%f!lv1let3O+;?&G0_&07JE%>j5xpAXJSjlsnvcH?Gfh| z9VWI$WW)gz+afaJpo#4f8F9$Oj);snY+_f$Gtcep5 zX>ra(XG9&GH*qqe4lbBD6_FbkO`ML%jY}rFBkJI?i8B#(aK*&gh}`HgaV{b^u9`R> zksG}xE=A0B*GycF$c^hJu0-U<4HG>PxpC9P)rj1k+we$Ha|@+_-Dv zW<+k>GjS_o!n<$ccEp6&XW~x8g!jP2y@=fCH*r5=of$CE7qQL^ns^Y!mqeN9kK#+B zObkRkx%XJS8nM3|GVv&4e>rU8am4=eiTF2SfB97W8<8L*;@^k_88tBy@x0!c_&4Ht zy=UUzhy-~q{*6eG7vkTD1bJ!VMMQ$U68}ad$ZPR$M1s5#|3>U8-^04Dhq~H{!R)e-ZyieEasRiSH3p-#77Z#Jifm zi+>~DJn%#O8}Um$#!dW=c!uw%I62}OzF*?xh-dhIi+}S>eSb_$$+P186({H8{a*{y z^6~z!g_eB0|7&4-KHmSeFf-3v;ig$=&GXux77MfTd?#+Yh1vNy|5=!mkMo~}x%oK% zS(u-X^PhzUd9q}-g@t*tWR8VJc_zWR78d831m{^;l4lZ}Z(&)UELmV-d7fwZ7Ft-5 z=NZ057FOnYhHtTjRe2`CB^FlanFNZmqG^O$&ITP-sj1U zUJD=d%p2D%e9H5j?{y2G^E~H!!@}1*^TtgJ-}1~Gw=8_mvq!vb;YXf5;vEa)dG?5R zE&R%p7WXXt&GSs}eG8N7Imhg?FtwiR`#@Y)&sFUgZ`E@x2gFD9tR#cto_gkphvJm_ zc>lw~(t1t<9*aNfnK6gN3-zoO!{UW{)`}+<*4DE^JQXk0vqFrB?(3N+M=flwXTLut z%C2WBcqYoOXDWCu>Z~X4Ux+&Exo$5lbkuX*UWrcYxo)pTllAN--iRja*-g9^P1Z9f zzO!(wo;mTosI#6q@q>kv^<1rw7P{)WMxQKn*OTp^MV<9z`xgsm>zNL}S~yqFbofma zThDa(-NJ=>uGS9=m+QGk;})*e^DOpHQE@%l{!3I`PqzQI&|6Qo|FLkbo^1bX;d(vU zKFP+7diD^LZQQPBCpX2$y?VNFs*T6-%1pB{RL^SPVq-X7qvpu<*=>v8)NnH{LjX-dOB~mjTiB{&9U*Sp8fe;8?Wo>!Fe{`)RWZnZM?51pBLEpP|vKl z(8kAlX1zr=KG(A&SZw1;n1RZewnN9pqLU^9!W%HX92Hr1Ewf3k#(34jYRK zOnp0TEH1Ev++|~FfmGgYV_AVz-eY5VfmGgWV`YI!aG#A;1yXsxjkN``xWmS}0$F^( zMq7a_K4@cofh;~`V?%+N@UV@I1!lq{HZ~QQ36I*?TwvdL%*K`idxPUP+6(LrPT1I5 zU~kZAV_Sh#K51infmA+aV@H8hK5b)Xf$6Zz#-0LI(rsgJfhsv;V_$)p@T`sf1(N!l zjgA8Ka^A*)0`+pi#=!#ha?!@20xSC^8;1*2&Se`%3RKP&8%GONPLGXa1*XHRHaZJr zd#{a?1+x8`jZ+1({ko0Q1uEx;jjjTfbJIq5fy%jM<4l3dxozWYfwZ_|<3fRqxNGBL zfsD9k<5GcdbKJLar9ig#+2|>d?GJ497RZQx8`lbC#DIEE@4+>0zPi+hoNc0gKg9XxJ)W*XCX)$KwQGv90 zChjhf=+AA86i9{_;^YE3{!*M=;9DB6Y&y9=E4eG*R>nEF23_*7u(`y%cxF!g;EcNh3p?Kg3Efm6Tl z;^_i!TKOTKF7U0|aq)D4?~?r#Cl~m>#xHSlf$wYl7XLO-5r1q!Mp}0yqON> zH!$I~I#|%agg48=x%ZSl&Qx%yqD$f!vtqU}Xb)#Q6?ZH;@|(9IR;| zHx@cr+dytCa{G;^0sN3DWN1a03al)xnVl5@ef$qYWg;b_d5A zNRS;4jyI4XI~|;CAUAe7=xQK0b~`xRKw9i^aG`;W*z4eO1Ie(@!PR*6_dB>AuX%@q zTMg_C4>-8nK<^)PaIb;hKjh$k1HFIPL0<#Cf5gFq273RfgZ>73|Cob;273RvgTV$S zg%b`QHjo0H4jwnKGd$^FsDTOZl!M_0QsA_MrwvRBT@FSXNP%t#qYb3M83$txq`+AR z&l*U9a}J(2FyWnd@T!3nxZvP*11WIP!J7tB;F5#44a^Le9lUE`X1L<6zp_|(9Du-C!o1}3~~4!$%n;azv|wShdi;ow^X6W&b+;|-ks-xAL>a#e3TnAXTu zy(8{vQhl{BUfug)Y-^28WnXm za*f7BosA^*Gf`(FN&Q@u*vK^ZLR8ntm3islL?c(`m4kDQeD<#$oNwf_e_0fT(nuD6bkNgC7JqWk+sJ4C*};uQKJhOOZZ`6Xe-)iJ zGE;wZaJ!Mu{=0)ajof$nA=+(ZFFr2XZ6uX{igp`G>zUN*84Pj&ISkvV&si#Ls&<+iwZ+sMQ{-NpNOJ!ZK0 z(8&5b)5XVlWm;W)Zsbg6mWwZq%-*wId~IZMo8#hJBUAWX7vCG1+~&FX(a1bL-^F+% z^Y{W6KO5O)Ep+j#kzLjz7rz_XWi56wsmR-AmbjQ)(OP6bz1qd>B4=}JT+Au*+{juNbBjDTvd+c4B4__?F6I}R z+}68TP~_}?gNubl5_qGFMMV;LlZ(Yg5_q$VB}I1DTU;zJGP$+8SW#qh+v;Lfk=)(p zVs(+pZM%y#MG|<2i*-d#{CB!&D>AL`aUM{%kDpD^OU33?zmrE|r6secXF3uOJk}EDQ z6xoaSxVTv4d626vE)}_7+w0N4{o}+RwT1;xwu{= z8E(6{S>$PvJ1%Y&d0OPIi`zx+0^D zb0aQBi%fH)F2;&Xb7L-^71^IZ6Ym$vjpyS1BGcRp7q5y;b1%j5Mef(Wa`CQ6ZoC%n z7dgXwBi=7^hWA#yUu2qlC*Cje`_|rz_lx|#wGZO`B4>CX#rs9h@IHz6i=5$o7RMKv z=DvvIi%fH0#qmYn4Dd}HU*ydI-(CDE^0t&8;{6hpGcMjQQ8_&^DCyu^ez$HR&eNi)~O$`VO4 z&%>$`Ni*NW>Jmw_z{A=S6W&4(>q_hq7kOwau}56&VSR}`;t~%VO6(Drde~Iryx5RnQdJp?boE2>Fu)oB~&PER%rFj3>!+{cKJexfnDv>l>JRB~OH0>Ualt`Mb z9*&ksnr$AAm6!^)dpJ?z{?QH(oh43yc6vBjB6D_m=qiykyFGN5Sef>CI8$O}+UwzL ziL;=69?q4xZ?NCPg%UGEhlh(L_5lYxTq-d=9Q1Ix#Ln=LhbtxKh{GPPmPnc-9(qe8 z%~226N+iuO57$fa{LjOUQau0jaI3_;(dprKiRtj9hdZTs{^#LtiOJ)%hkK=X{^y~u z6wm)WJSfHUKM(z-c>d>MpcK#lJPelN`JabJrFj15;c+RR|9KcH#q&Q8!=-rs=iy0- zS>=j{ky1SW^DtV9=YJl?O7Z;9!;2Dk3$A&1St4n!dw5kMX>NFUU5e*_9^RDV`Jab( zB~FxXdw5?WY3_LVP$FsWdiYq1=YJkPl}MWV9=?>AQ2IQ4Es-=2JbWvWH2ogFmq?lc z4?jxm8wWl7EU|BV=;2q1ed8k!zf0^JAA9&y;u(=44}VKMBQoq^a+x*iiH9j=)~Kf* zrk0r}M?6d`Gt-QEXel#Uj(M0-rgEMM1KDx`yG)sM)DU&qIe4H(lG|PRQ zE0Z)Ue4HbU1Nwd~RPnqdvosZr!r%`P_u9cZ? z*88|#X1dwn<5rm&c%zToWs+u-k2__OX0wmGWs+u#k9%d3rrk$hnU!g)j|XLvW}A=x zGD)-D$3U5++2LcbOw#Q1@u=V%szC# zkI^zo)8S*ROwt_i@vKbJ9Q5(LOwt_k@v_Wr=dh1gWs>HIkJn|A=BST1Ws>HYkGEx# z=D3gdW$rYb@bRHc(scUxSSD#s`uI}jH0qR(uVs?vw2yCPlBUbYk20rG-9E<4oJO7T z@w3d?^;sXk%j|{D`S@EVU(WlORAC0b;A3)y8Tg`)DHZDFl8>ns>gBSJmI^cQ6(7?p z%)mW9W>lDgulkr-pYd&UIIOD$VV@`$p5I20xt#HPD)5p9D^>WL{!U|P# z+sC2`RdUD2;tExA*T>QdRdUbAvI#u0oYO^wCyfJ$mG0Lxn1N>|D3ps^poE-Icii^|7Zys=N@NS4fqY;_eEy@k-oXVHJ8U?yit3Z^Ydd zYU8bVy28BsPCQ*<-hD5gu235vd>pS(8z05p6>8&?c)G&8`&m3)Vcz{Bp02P@{_3Nv z!an(%xVu7?d>2nwScQIwrz_06O0j|d?nHu0$tc_^_Zdb^XmH>AuWXbdZcPnJci~#p4Of545 z+^?_-wFc;`unNrzFi?s2KLQL^SbOFKco?f>Zh%LzO6CQ49IIr0fT0RIr3C?oE2PT8 z03)$V76llMRkAq1SgevI0iMMwSsLJZg;i)-fEN{3q2&QyR#=5r1b9_p6}_c!1OAoocjaJsB+5L5nyJO-S&Y1 ztyNa0g8^n$S(y$6m|JB%IvikLmG$UIfcaG>-=hH*RM~AG3$U=tZu@wEMOBjKM1aLr zlBP4jk}64aGQiR*NpmW|@+$W^PX}00C26_>tgMnW-2qlrNt!bOR#!=yvjNsrS((lS zSX(7?&IedmC37wWXsePr7Xxglk~x2tdc{+0Zvt!Zk`0_s!~l)19VrZrjY<=s#McxfU{MqX)M6GDm(CJ z0nS(1fjLsfPnEg&O@OOa66vk5q)H;a6P8p- zr1!#-Dv9(Vz>O+rcpn4YtddQigfCUH>9bI!%Cpm7gep~@o&G9Rsd9$*O{h}k4DY*8 zrOFxJj{pyLyT6Lkf((ht1=nLcFVzQgcJRuaZ*pLVT!_Qu9N6iq*6r#OGK|3qyQ~)wC$Y*H}%9 zLwt+Xv?Rp$Dk-%z#E)24%R-FDx>_FMXRNCgA%0g`)mDc1Q)O0O72MK!W%XNbi$rsiECmefe8 z-659NNU1#`meok9y&;y@NU41xR@6wT{UKJ?NU4qxt7@dwfe>qI?9UH|SX<-CnnNMh z)kvwsA=+xB)R7SDYoyfC5F2Ww)Ugm7Yoyfi5SwbG)QJ$AYot_Xi1r$5-pLSKYpi*v zLTsy%Ql~>~uaQz+A$HVAsqPRvYoyef5W8xm)Y%ZbYoye<5PNE*)cFwmYh=@f5FItD z>0*cjHLB@Sh=Vn%>2ioeHLB@Kh{HA3yq*w8YOHxzLmaI!N%w|0R%1rG7UD#WY`Pwz zvqm-D2ywDTO5F@`szyrP3URtdO5G08RU@VDgy^o3Qg=g~sgY9mLY%FUQujlgud(L! zg}6{-T6z%TVvUsQ4{@nRN)3d#TqC6hLtLqmQV&D))JUmEA+FX)smCFDYoydri0d_G z>fsPKYRuG6Lfov8QcpwNs*zG7A#T@5snHO3YNXUyh`TjX>RE_;HB#z%i2F5C>P3kD z8rk$R#6XR?=~alq8gtX@5D#nY-rt0HRAcx4HpJr^yZ3h?hH9J`z7H{6jWuspgg>#aW=HrN z>uOGfNlly`&W$j&iF?BHB1~`M-o*R}^P9NqyCA}XCidqGBP?uUf4(Tfk|s_97e`py z#7W?i2+Nw7hn7ZI-o!k#EW*krl4f~?RZS$#iU_NlNSc)q);2K(t%|U&i79Axgbhvc z{4c`hCQ@Z>g!U%(R_h{cZDMcL7GYZxd-3%Vb~KSC8zSs%V&d5tVOJ9q&!z~wo7h`z zjrjMSO{Bo#2)CO^fg=&_G?4;FBiw6Zr*tgB{U&xw$0PJLv8J4e@Suq`r8B}{6Z7uL z2#=fS_)`&vn&|k`5r&)S_^t>~n&|lM2v3{n_%jhkn&|km5k{Nn_;V4)n&|lR5uP?36A=c-h2G>2icuP3)(yM0nlAe!3^Zn!<~1|#z7P*KGw;3>4>r^Luf&7R^#1Dzi<;^EHxU*$)BA75m(5huJMm>R z)%0F`*-SNk5MMS^O&=qyXr`Jzi9?%NQ$CABn^{x7h(nuMQ@%!6)6AOkO}yI7n(|$| z+RU2rBSKp=bUrSIp>^n z&N=U`^Y$No&XlUBRrTKe-gEDJrB>rRr3E+D_)cxXEj7N=T5u;%T1;=j-8^YAqXqZ! zq{Yk@JW!)Ls|Anpq{ZwOJkHZ8%xS@sJh?Hq1<&&AtITV`b2Yy6TktB+ZpwldyvdUh z3tR9uPev?i!8qv<08k=r3zQ7mcI8yain~j{b@kbkjKcD_hV* zfaU&(wGA_v|xzFG2hsNp&I?< zrWOp-IQpAgFhb+#Z)w3ujibM{1*0^M{~6tijj_L{1yeM}{@xZ$(>VJ3S}F-c4{2`s}frpWB;1Omd4n>F0rLC_HRgRX^j1w5?h*j{zD>4qZ7Q{g2Nh};2nuA zjZW~cM3koX|Fz(_#%yq3B1&Tpcp!14DgW1kvzqdM5>cA+e=WG6F$X+p!9|TZ;Hkux zru?78md0Iw&n31r?)rNnv88d>-%E)tjjr#NM3lx|f3I6`TjM(M8;LEA>%?y*qBQRM zd)I>d8h8D@mpIbs@IFW!X?()tV+)>Ye8S_CM3lx|f9(-G*H}4piQt7s&(Jl3ml{1o zw+LQo^bFl2c&+9^j|kqVdC)V0w`v~rir}5b?rQG{-fQfx_KDz=#x=ga5wsV$52arO zT?$+s?jJ$d0#}CzM9{6k)!~5=bT4ox;GhV46j+B2j-Y3Ob?A@?dKFlQ4vnC9fpzGx z2>KOReGZSHe}QW@BO(}3U>!O#f`J9rp`#)gRA3!CI)b4EdcrXg3@gwRj*Vb=fu3+& z1S1NpKF3EevOqFSh+tHKWSAJi=z@CwH-a$*?ns#&!MFnR!juRm7S#T~2&NXeJ~J(X z83nce8^P=XDKH~~c?HJ)%m@}1SV7K;U`c`5es%=Q3ykwQ5v(dOv(JrSeStAOFM>@4 zX7TwEY%MT%FNk1Aff;*Y1iK52-$fDZD=<4Rj^JQ{IeAG0M+%J9r4gJgFzYUh;7oyW zxjcgN1xDkF2rdkVU75^gG zTvYsvU`vr}30ET6R#g0pU}urO_?pa!BFE!;1bd34-i-+M7CACEWtJ3K3Ezrfe^K!- zf&)dxzX%Q$)&A!QjuuJ1dl4Kjs`@vA6Gc`3%4{ks{zY)AsQ4Gb>7wGF%&?-Wf5nv- z75^f*SfulP7Qy8rsrNjBD@9W8h0MAl_d36f;98M?LFiQk*NcjOG82o6e-Yd&@(H)M z5!@}3dha5*Uu1>*K7t2D#Xp&yMa91e9u*b;B6wU>{EOmAQSmQ|XKM7jM)6XOdABHD zt1<5$#hW5?UXLi=s?qNm#k(R|*DH$mMXn_Ej^aa+)aw()CpG$gqv)=4r(M4&dg^Nb zOBB6ywf`lG-n!cV5=9?f?SF})udepLMA1(t;f6#pKv(-;q8O~R)*TkbP@P@1;ZY3J z$+Zzt4A;rEkx`7$$+b~YjMT}s(NT=j$+a<2jM3Ru8ym%Vojzw=6ccs&obgdi(&=+1 zL@`;X&zTs-6rEM?q$sB9B;4dErs-UPo)X0josMT}6ti{Ky3?YVtCMxpqnM|&Z#E-} z`8ugLGl~T|`)0GESg0%hMX^YyXkSGu^T%w(5-Y7?kIDE8h5bzn3^N*!}nr#bSe_|4|~!VE5xw6iW?uKiXqhX3)uWiD897C(|{C)drnR zw;0wMjQH*`tTPz#Jz`jIFyed0u)(0a=@r99gB5P?7&aO7IelW-Vla32jbWd`nC=(D zeuM6&e+&lfaa!m)H&69>b6lz21%(hL)HYcE&KQ zMAx?~hT$bLVs{K9O3MGmFtS8O?2TbeiM`T&F^ny-65b!fxDq|#ffy!~ICBohFtNm$ zb0~&MCC;3~F-$IT<{XJ(YKe?E8pE^_8F4IznI*b{<1x%C(G#ACVRnhG;A9MQN~Fc9 z80MBpi_;x z66eNciPaM4#ubUs5;MeAiO>==#5IY~5*cw_BDBN|aYN#=#2IljhOH&eh+8piD{)5L zj$wO=GvZDRyGoo9cVpOH;*7W#!=4gn#QhldmY5+PNOYH&As$L3m*@!}NhFu(2_H)& zm*@$fNYs{?A)dx?yrjPWAchkq_5BAD$tCsu2NJa<_57PeZAm@wundJXNFLD~@Ms^n1tgT#bI8I9{nS?;FQ! zHRk=|cvE7A=pV=15;MerI6jnE2MmnkV~Kr`L2-O4u_728M^}@ca7Y~8OnSnhadbE7 z35Uhe!(`PvJdWNbYuyoX^f6iMj*O$PNq0CZj(#TH;pjL9nri(cjzK0p;n+9^oAiX^ z;uvDG)*T8^=785kD`E`6eTN zejE!-M*M;}7MhIsg>fu08S#taSZvZ2ERJJ|$=F{K$5NBAzch|zCS!kD9Lr6P{_;3h zm~;v&;#g^N9;}RGmC1RqDvq@#V}ErV>rBS}nmE>*oCj;;*kF*CmGk^<}F*kqCd z8{*h(k^&p!*kY0bo8s7Nk^-CK*k*D@Y>8vL$r-UVjvXdF!?rkfnw%TkG&Gmd>G-NUXp_M3DMyW==u(mm{n*Dzj^acd=S{W$ zIgSga+W#EKMUxfe={PQ#Ttzt($7Pd#@@yPeOs=Awi{q+EXL&x3YbN)3T!`bk$@P?r zaojN3OS=@uO_R0c+=Z=XGph&TCs?bA5knfxx5XK}nY`CTf{g#sqOOXY=7z~pzS zyc7zUeA4z+9PJkCkJoW@vFJtL2pKH;lD9$zi@xNYkinuac`szJ=u1At(bJ+Y`4~qp ziy7yW(86NIX-}Y!#b>{|B+%F5Q~O;L=x6ci+inT;x3~`5J%K?MS6_Q1FxcV~89fsi zVzDCamB3Jo>#)5O7-q3H?UTT8i|ep`6BuD}Us}HeMq1pL)<1z!7WbtMNMN+ZeQ5&| z7-Mloc2ELiEw0E8PGFqHDs@N#<1Mbu4ozT!#d>vE0uwEI*5L_EvglAoBrw^cdmWj; z6pLPER02~idX>=$Ota`!#w0M^qE{K4zzmC(>$n7FT68Vr6PRVuwMl4^xkzpGW*lUqt8xz=Pkztz>*l&?xn-e%-ag}FF z0tYQs|0ZzABF(lXaM&WvwkL4RBExnhaNHupb|!GbBExniaMB{fb|-MkBE$A1aM~in z_9k$~BE$A2aMmKj_9t-8BEt?OaNZ)r4kmEHBEt?PaM9wL@Zkh5S)|#K1TI^o+0g{9 zSftsp1g=`7+3^IfS)|#C1g=}8*~tWMSftsh1a4ZS+35ssS)|#S1a4cT+1Ui{Sftsx z1nyd-+4%(SS)|#81nyg;*~J7NSftsd1Rh%48FD#+M;5tuC4t8lxpp;yCl z4;E?mAc2n-Y4$LIPZnwRD1mmHwbkPUy4b9(o+QxKWGmXs*yLK5B!=4LTGu3o+2mTcB!=7MTK6PI*`!&IBu3k$SGfk*y{O@BqrLVS^p#^+3NX^BqrOW*}x>G*reH@ zB&OP=+2ACm*`(Q!B&OS>+0Z0r*reI8Bxc&A+3+N0*`(QsBxc*B*~ld3*reI0B<9+r z+2|zZ*`(Q+B<99VUuP{lGtgJ zW=oUUWs_#hlGtsNX3LYFl1-ZJN#e3in(a;EicOmBOX8|c zn(a^GnoXJ=NaDIpnjK8yhE19sO5&zXnjKE!mQ9)+N#eFmnjKBzj!l{!OX99gnjKH# zo=uvaNaDUtnw?DIflZp7O5&kSnw?JKkxiPNN#e1s`hQ70u}QOYNj$Ylv-3$jvq`fH zNj$envx`Z*ut~E^NxZb_(k>_Q$|l#YB=OoN*RCe<#wORUCGplK*RCh=!6waaB=ONE z&2A>~$tKNiCDHD%-oKqh7l-x!og}(C>=fNiqMJjS-AkgoLz>-BqK8A8JxHRbLz+EI zqL)LOJxZdtLz+EKqK`wGJxQXkLz+EJqMt*WJxij$Lz+ELVt_-My+~r9Lz=xzVvs|c zy-H%RLz=x7UOA-M8{w5hn!OcXIi%S;;g!R_!22XdIP432NMfYJp3z5Pn8OaiCt;Yw z4ncbgV;pj=OA2Eha;<9$;~a9WTMFYHa;NS(rk1J%N){dObW{# z(rj!BD;&~nTnZ~4(rkPRs~pm7LJF%L(rjW1YaG&SQVMGwy0pnDtaHe~Ki4IVtRPNVB;q>~cu6 zc`596NVEAV>~To51u5)xNVA10>~l!7MJeoeNVCN$9B@dpB`F+qNVBCW9CAprWhoqX zNVDZB9C1jq6)7BbNVAnG9CJvsRVf^INVC-`oN!39H7T5QNVBymoN`FBbt#;7NVD}R zoN-9A4Jn*;NVAP8oO4LCO(~pr=+ZW)aKRzhwxn>;A=kF1aLFOpwxw{{A=kF2aLpmj zcBF9KA4yEwWA&}j->F|ALTqyPHD4GHG@%h5lvI?0yOZ%B0zY6b6<_vxg}RDwAf9QW#t& z%^s&Pq)eJUNnvPNt$(C2tW26cOJR7KG<%-Hh%#yRB88D<((GjlqspY&s}x3;Nwe3& zt1@Z!MtD^w&E5*H%B0yl;Z>Ra&i5%yD6`-BA%%%$wf|2TR%Yk(lQ68z&S!fXQ_AF8 zmo%o9$+fO&Oe>RX-O`v|CfB;BF{@0P^+;oOnKbK}#+))~)+>#lmNIEJDUGdVy0pn@Y%7y%Q_|R8CfBB>v7=0` zO-o~EnOvKm#-1{1HY1I_WzuYB8vDwm*{n47mr1kPX&fk%W^>XwSSHQprg5lDn$1h& zaG5llpT?0gX|^DZqh-=;VH(HEq}if0j+aTZ#c7- zl`?6zA&skL(rjZI*UF^XrZldX>C!f*aidJGZAs&1nOxhN#;r2Bwk?g@WpZtM8u!Yi z*^V^smr1joX*?*CX1mgOSSHPOr}3yvn(ayBahWvRo5qteX|^wor)AP?e;Uuqq}hQq zo|j3pgK4}dlV*p~cv&XR4yW;|Oqv}@<8_%dJDSFuGHG@!jkjge?06dQ%B0zeG~Sm< zvy*9jD3fNV()d^=%}%HBsZ5%kNu#~O_1d#(bg6K){#+VeD_prfpGLO|X?7uv?iJGP zVj4Xvq}io3dRFMtE~n9}Latp&qj!Z|yP8Iy3b}SIjlLCf?RpvmDx}$sGzL~kvzuuQ zs*q;4(imJJ&2FbLq(YkANn>b*G`pL|unK8*FOA_9((Ha3BPyiXgEU4~NVA7&jH-}k zkJ1=jA*Scr0s6v|c$Y61WH0znck_u_oD}$vK(yVs| z%POQb;nZcF{X*Mc@trgO2bOzfhq}iAZ zwpU2Au^H^BkY?jD*jXXX#%HjrLYhs;V0VQyo0!3#3TZYegS{2Hw8L@&CB3)g*2O=!I=tawjhJE71C^B2InfI*`f^2S4gwP8CgS!>dY-0xZDx}$_4DMIx(l%%CphB)~$>3pyT-%z#qYAmUErZ7u za&3DC&nl$ZjtrhxNVA<8yr__7yE1rLA)njOiYy~;faM>FVB<(`CN8Fa03Pr~sG zx>ZTD6B%@`l4d6}=usujPG!)uN}8R{pjVYNJCi~0Drt5$gFaQ#>|6$YtEAca4Ej|` zvkMvYuaagLGZ;`M%`Rmyuu7M9IfFq}a_ve6gRA7))eMGI$+c@446TxD*E1MVCCzSR zFtSRT-OONAl{CAR!RRV!b~}SHRnqKE24kzF+1(7rRY|jZ8H}%zX7@9gP$kVCWH7Nx znmx>5Qk67&l)>aGY4$jSDOJ+!Nd{A^q}kI9rd3I^XBkYdl4j2{m{BFoUSu${N}9dQ zU{;khdzHcLDrxpwcvU6M-UzR%q}f~HRh2Y*C%me1efoU{3#we7{*b}KD%Yn!3d5@0 zz4%EOR^>`{dlpNozT!xDrwd$ zi?vnKtaldcs-#(;EY?>^v%XnusFG&=ve;N9&H87tsY;p+$YOJqG#i-3mMUpBD2uIC z(rj=R+p475kSw-WNwc9@?5L7v!?M^}CC!Fsv8zg&jmTnml{6cf#hxl@HY$s~Rnly9 z7W=BC*_bT$S4p$6SsbX6X5+FrSS8KIXK|=XnoY>!aFsNhn8lGQX*MZ~qgA@J$ypq$ zl5114I9?^!re<-XO0G@I;$)Rvo1Vp)Drq(&i?dbIY-Secs-)ShEY4R+v)Nf(sFG%L zvbb0!&E{rtsY;s7%i?mCG@GBrl`3hrAd9P2(rjTC*Q%u1qAadgNwdXS+^CXfOR~6G zCC!#*ajQz2Ez9C|l{8zP#hof?wjztWRnlx_7Wb;8*{Uq=S4p$gSv;tcW^1x|SS8KY zX7Q*>nyt&?ag{V%pT(0ZX|^GYr&ZEyV;0Y%G8HfQmoO0I3m;$@Xw+nU9z zD!H~Ti`P|hZF?5)s-)SDEZ$d1vz=LdsFG&8viMjf&30$;sY;sd$)df+9aej@=u+bj zt9@B?t#OCd{w%uHNV5Z3bgz+S2ear=Bh3zF(X&RH9nPXxjWj!wMeiDEb~KAVHPY-@ z7JX}^+3_s;)kw1wS@f@wW+$^4P$SJwWihZunw`#KP>nP@lf~c~X?8Y?AvMzMToyxX zq}ll_hSf;33t0@Wk!BaO7*Qk5E@d&YMwfOui%~Ul?MfD-YvkJ1EXLHxwQE_7t&wZj zvzSmL&2D5du|}HR%wkfFG`p3>dk&jwq*;#~HrGhA zo;hr(k!HPe*jgjadgrjMMw<1>VS9}<>zl)l8fn%qhn+RjtbY!>YNXkK9Cp`8vw=D6 zsgY)ba@boV%?9VNuSS{;$zgwuG#i@3ff{KxEQfqxi%$-^EGm9Y7Q4_YNXk`9B$W0v-vsPsgY(2a=2R~%@*cxuSS|J%He*EG+Ug* zgBoeJB!`DJ(rjrCk7}gZvK$`QNVDZRJgJdpD{^>RBh6Ok@T^9ft;*qfjWk=G!;2be zwkC&{HPUQt4zFsY*}5EF*GRMVIlQTnW*c&NTO-Xj=J2jYnr+JAeT^<{a}FPBXm3@|zva-al{DLtL-$tFY-bKVT1m5AIrMBL&35O|tCcj{lSA)T z(rj-IeOgJgeL3`PCC&Ed(65y=JCH;FR?_TX4g*?AvqL!yY$eSO=P;<1G&_>R;8xP? zXbwYKNwZ@)3~eRNj^{9}l{7n%!|+zp>|_ojT1m50IgD&2%}(bqs+BZ5lf&p%((G&w zV_HeGb2*G{CC$#~Fs_v}yO6{9R?_TZ4ij2Qvr9QlY^6)PoWrD6a_veElUvEPt2s<* zCD*RyFtwFjyPm_mR`Tjb4)a^dtD8A2XeF<1<*=xgbLe&si(5H|?&Pqfm2>EB4oh1( zhwkODyp@!?pTmk)QtCktD_cpahdHcjC8Zwau)39$dMtctC8eGSUs_42r^1(3QtFxT zrInO=p2LP#QtE~9rIl=YDST<=?!Z^Vmsai$d@X!w<^J(E!k1R=6MQRtY2`k_cfyiZ z?hbq}ENSIV@(;q2R_+u0C@g8^KEY4Il2+~$Y|rCBE7{Z~kAtmbQ`bBWwUSNU@;KT` zB6ZK>L@PPeBahRqq)*R0&b5*`z4Ex&O49Vs;<8CXdGB}U>YNUtc@j#9A&^#Whksg-E<5p5-cpgt$NtF?K zJZ~jSM&|LNl`I*R$IDi-WON>%)cB6cqrJ{ue`E9LQs=I}ad~vD^9i@{d339*{eO9M zudDrkdGx5O{eOA%tn=xR$$9jub0^@GJbKr;6L4xCed_A@w>DXL%k|>g2(S zJf_ykgOzzqtCI(-@|a#H4_4I$zx`nJXo8@tU7tHE|1xD@?d=)bL!;5hCJrh z$%Bn~%&#-!Y|3L%o%3LG9*gVDGh6alR%dqEn#amIM}J!$tLn@t+w)jmXHMCX$C^5G z%FaC2*6EdZ<*}~Ld9XW=^>xmJJ$Y=XGrR1~V`H5&VqYGc>YNe#^VnSHj5v_TmO8V` z!92FsnOzR$v8~SRayXBjb@Jdy9=qz~!O=W+*U5updF-h(ryS2?Z=E^iL>~L<%qb`H z*k5N(IVDk6XHGet$Kg6N$(cNk)R{@nN|e=^NzO@>)tNueOGMR~7cS&+sm{D`QDUpk zyl_ckt4_arSz@bBzk4N*YjsxdS0&2otlqEXaih-a{kp_koxR8#5^r_2|3#v#&h?aA z5?ghyqTH6)s&jStjzm)DQC8=Ey@wKIb?(=D zl*g+&|1!qoJYLuN4a!gQcvI&$C_l~PZJpns{49@mb$$!V^E}?y`3=f1^7v5a_o2MZ z<71tF1?`nYZJpnY@>(LajpTnL5!y!bzm*7WBl+J+gtn3V?1@uA0IG1Q|rGPMz^W;Ukzj0)cUW6v2AMoSHrkAwf?JNe4AST)i9}z z75HEcliOH<5798Cjh)4z8m6|PjZR^#hUIPK!8i>o+Q@_P8dkQE{1Y^+YNHpOs9|**bHF4GYue~V zCu>;S#%wS}!@4$l(Wx5Nw=pkF)3Bk9UUa&Kjcv>jGc;^!Q|liZHn*wu4-H$|NQT)O zwzjGD4-MPe$cVWbwzrWH^EB*gBO~T(*xg14xNKab7Q53<85TbDh(&v$cWV%PPUN|Yc!l{ zBO}&oINe6~uuj97Hqv6fhO=#?#Rd)M+DMCy8qT+o7MnC&Xd^8)Yq;1(T5Qp9sg1PQ zs^M}QX|YYil{Pxi?HaDOksCWSTx%mYc51lZMsDoVaHEY5bhn0^Z6wGZ4UgJLki8ln zx2gW0h9_+#$bJn^+f@Hg!}B&eg@YPiw9zRX((tm4PT{bIH*I{5;E0CzZG5)$sD@8% ze0t!RhW5^!8^<+t>CCxtLPOWioEs-K^ythPaY{qa&YTgaHT3Gt8F5BK@6MbNXEpTc z%o%Y`L*LGv5$7c?J99={khtv38F5j=fXP@y$b&C$OZX4y$k;D%Juj>eG2~XiJkR%`WF0u zBG={f^eg!PR4&Ws>0j{wU-7a&&wzse&*YI8pJ!mf|L5XqeV#!D|6fXi^LYjr{6CVX zmwlcg1^<7@pJ(@Zh8Fz)DSw^a=NVS;|CoQeX?Vfk?&TNzk0|)Nc=^TtBMbg+UP()z zdqx%f-MwsmULs&q!GF<91Z*z&A9|Vew-o%3ybS2A1^;6&1A1G*|HR9H-d^xO^)jG$6#UP< z1pCf{|Am)e-&OFx^fKx1F8E)2Sq$ze_}_RLn#956MXE%@g_EfUMPf+qXCj4NoeFUYupCi|j{ zBzV^@$=HFV_T_?qF9eOBd#)7x`w+?fLc6yh_xftVzaKQ!*9!gvpsBuI@E-(C^^Jo6 z5NN7z7W{|7gn3Iw4NQNx3;r7*_U_1-fJy4E+)c2-c2DA~182~EiH{Dv(g$)!I>;6L zgy&(wzd$&$_gs_bk&?MsyZ5!c^SD6F>=OAz$(?f2Qzdh`cJF<8=b40&{P;GJ&z0ON z@`Z$y9NjGPrIMTEM_(zKE3|vB$~&(m+T^75BHt*vPUKr9*NS{6K`1Az7WrPuRU$tq zxl-guC0B_2Bw;G&E|Xu=UZl+F?cV<_?{q2pm&-f4ywg?5oYC(6hP>0Q=wBi4X!1^X zC39xG_iOS_kD`C2ypxr8dMcT-+PzAwd1C{)rA_o=yYvqLhE^@Gv|4rl&CBG0kwCG{7LypBb9VRIV10kD*D&UkA_5!Rx&7ZjFQbF#}@q?_mJR@?elBY#(Q}UF^?M44SIroIf9ZDV-xl_qwB6k)2`{jfqB6ll! zSmd6f|9~7lC~~io2V_p{Q_`iC`;qn+{Ricwy&?}NxkuzdC3lNFRP-N`6LyL`tmF=n zN0i(y@@Ub2SWeg~@|coaL>^aiv-p=2#Rjoa4PQux@_9}c8(O8-^?6Pe8{AUY=Q&+$ zXp>6U=Q&es_=>m$pXY3`;g`iE_&n!|4POHvEcM1fSL)Bad46JeP|Nzbj8#_&isN4ZkN3TKGIyiw*xrp0n_It`!@8UmhRxd9D{5 z{y_F6`#d*_4Sy)xl6{_=#fCqUs?_JXRc!cU*_7<_+%7hJTdGr^=T5QVJ5rqbJa>x? z-<8_b=ebvG_@0!eKF|GP!=H%d@Od5-8~#)rhtKn{*zkYFaQHlriVc4ze#7T^Tx|Gr zu^T?mlVZbPh}-aao)#PaQp|?W^Q_qLSK>8%p6A7ezZR?E^SmfF{EavbpXX(<;cvxg z_&l$Q4Sy#-!{>QjZ1}#|44>ysvEc{eGJKx5#fHC^s#H8_vEd)2DD`>X7aM*kiNWXj zP;B@|aTY$$$6~`j$$E;<^QqYI&ypv7o_4+AU!?l*dAjHg|0-=tpQo$d@NZIui09NB z{#_ns7SE|S{79-1pQnf3@E`I}v-nND;XkD+5x=Q7{5Y~j@>_4cL7d-uQGN7=!Cq-T z2q*Q18QylUEwZ29FjJ%{vcHlgkpuLGS#netIZ(->$U%C;Y&oil9IRwsTX zZ!C*V|J*ZGZG*x^UTp3|A-!ZuHN{^^x*UK#&6Su&(|BjBOcu6S)ez5SN?jc&$Cc({A;=U zKF=b(@rN|fi}gksnqe|DOZ3LBUOvseRBse}K1hx&(;LN}4-mCnZ|vdabKNWSMltDq z4u%f9Y9y-|k$U*+BPdgBl; z`??$S#-U#JbvNpb!Yo5bs@b|$=f1#>5VJos0-=cO1hBVqc^UUqt`_4Rnmp@KD}|39CgXOU&%`% z59p1n<*19ngL>l{k>^An(i_)`ba8xGNf*aQ^u~2^^rXn6O1d~crZ=vaqb`GwD|uAp z3B7TH9CaCdQprOiPw9;t<>&#CrLOKVQJ1LNL|xWD|CM%ctEemb=U;30Rz+QJ2csW;iuJQNJ-O%>@F3I_G2I!Sv+Z~A$8mN)3Rt2g~( zq-hl7r$@`nm*k{-deb)u*86(XZ_4BmAnHxOB?X!QQE&PtdHP6i`j*Tg0ixdYJ2Hg? zhP`QL7=5NU{XQ}JTyOdVV)TXH^oPXgOTFojW%39R^`;+?daw1SzbEzH z=uQ7X>b=#Qen{%Q)0=)wv;SUil0x+>a^)ZNCW(pvCF-NzBr)+NQJ?fCi3#_fwi`_n z6B|TzF`6VM)`{wBG)YXX5!KCTl9*T}s=Lu7h3g7YJ&YzPT$hRJX*5aUxT5Jf?936>&uEg^nI)>f(Il}mL(~AHNn&T3sDVb4#Lg5^ zgN&wOUVeMwV53Q*Xo4IYVl<8L@>{-!8ch;UW8~N{qiM94Pf`yznxs_yM>#gaXp&O( zA4H8bnxs_yfv8bN({@$Jjy9U4xcn12HpXb$sS4S#M$=(0*FVM?O-H<3{}^vH9aV+t z1f%JgDoiIDO;S3#<>Vxz>5`Xa(`2LRvX?6yQ;ep&ZaFF@Q9hr{50})_49=H?$mvSD zq@JOqOX`_&1#)ggi3EO3zW!CG}h-T~|HNXqq4=xTbl&lCEi9pyW@A zTxc{+loP@t7bzJMxmZcpFfTEhCdml_kxP~AByyS2G+B;*E^@h&u3288WP`|+O1i#z zmC-as&h?30t>kAS*C^@w=CwxCR5<}6*D2{0xn4=vH*YYSrpXDeS>CAR2a%hUbba$? zC0*aV#b}x?=e`lSRms;9%-f7k63m^xkS2l8v)$@+%6<$(^L zXP42bCMyv>&u*hrt1LwLJbR2zb$Lq7=hE~$C4j7$& zo)+z((didx(GD4%eo@vUe4fKbr!Ps*$LBd>bowP(iST)j8lC zanA^RiPrPJ5%@A4=K~|~RT|BQM&Rr8mye9VZ;*bEjllmF6B+b8F#^9G35*k`92hSz zKPCU;QzP)lbcoN4!1w9wo*MzhxEDr1G47=i_>t^O5d0Z||B!77;s=eue{xsC8zUf0 za`VAkBOpw2v%oteAWU+zz9z62nadyqCOdcQC_w&+Dn0{Ub*2y zz*0b3ZDU1sEd`{_Hd<7-QecK6O!rb?v6tV$(4!Ps;^otQJxhV5UOwH|s}zuC*pK8V zdY1yy4Er}xeM$johW(4EzNLUP!v0BAzfwS&U_TVqzZBT#Wy@zkDX`zmme0Ua;DDDc zpFyR7G`xOS&Kq0`NW<$}qK1?L((wAGsG+5RG`xOG)UZ-O+FaidHM|s%7T2$d8c_-e zr@k&~WGNt=`V~>5N&(^2FN+#o3S3bX8&e8gRTLXr3S3hZ8&?Wk_i~+fd?|3l%XQib zrNB)u*J&q~0=K+er=3&^-1c&vc5*3j$IErvDW!lA(30OVwG_DLWeaIqDR5tn!t_$$ zff|JwrNBcq3NuRqX}o3SCuWrbkGS7i%J1$!TppRTU-iA3+^XHEhz=01s4{zv=opQ zTu{`qQs9GX9SLwUkdpbOY|U0n)v1sktxN`Y>mPh49H zbO(Lnx>BGA=o8nM0zE;WxS!672JQAzU@*Aqze8rCYUJ&dnW!3hyJRMUS$=mZunf%ddrE=jV3yxo3akJl zWnU?<5{#7nrNAmMQVx^?tHGA)!BSuiB!~Guhe`oy2il?z%ghE>RF25Z23J&$%FG7a zsmEkytH$7Qnc30=l%F_J3P_7EBkE)+umxOEIaLa51^0WME(NxMYb$3;f$iXG+u2fJ zhucaN-&YFk1Xo$kmjb&~8}ULZuv@heFO~v(R2%V9DIm>9cT_J+9H}=OI(8MG7ls!!CgBKB`(1gnn$I8v^1Z|?|3W`3hvr@A`uF; zRwEG#wN@h$3hvr@E)fc@+Psjs1XtT$N;HD2Hm_ucbr7E+&Bjt-tnkxqO}tUk?Q6a* z5v^`(;+>LiYvR3<+eCgS5xZ_{;-iwAMSdy;CdhxbQDnPG*(S1!l68??&A>!Cp(e7M zl2wu2m2^9VJ(P5PPfs&2NzQeP;9g2vB6}<8*28_wz+^eW5ZPBrw;t|i2Byf-g2?_# zy7lk?GcZ+-=0pxu(yfOFnSp6?G%a$llCH}dVg{zmQP*V+RWdG_ZkX9DnXdT@wiSk( z&F&-mKFAugOjcpJ$@k{Oeptnq)TrrtFT864`84 zRqYhB`FF&R1U*yD=HH7nPm(IAd9u8?4U1`J^PkaLOgEeVoYrE7+58u@7BkJ}zofO8 zWj6m6t;KA!`LAg$=9tZYLu)bDZ2ntXi+N`A-!XB|H=DmtYq7v={sFDULbLhrX)P9+ z&Hq4avDj?>A+5y{v-uyH)0djf|3quC%xwN=CimrL^S`jKw8CuuS7!N@X7j&G`Rwzo zGMoQ{RnKa(`9CEQit96*C&~qN5V_Xm1-e#moszEATW|7;U8}c2N!RLaG@GZ$kGcMC zlag*+bCKK4=IL_usmL8ly2bTQv)OIOxW)A@ zB_GNF?lyxmA%b6sDG>i>2Ho!~5dUWe9U8%XX0S{nxZey`Xaoskbzk1OFYn!#5AI73nUKMr?n^)SrN8?!Kwh56uRLT1Re$fW z8C3nfBW6(b_l}xD)!#d227g<=q0Z+yZU(<4UQb-48T=jTXh;ju41R~byHjTHyX@Va zHiO@z+d5+g|CV*+Su^-|tRv5v!SAzEl$qfFG?YPTk z@E_Ucxnc(Ygt^uZ>D6wS!5^_6y=eyjgZ1bwGx(pZM{k?K zAJekjF@sXvxJKo!8I&^gH$>etgHne6x~ThRP|DC>74^UjN*Ve!Q4h_al%Zc0^~elL z8S0j>kIkTzp>7HL#0-k%b4%E#W>74jTf#mwgJSty8~EG|N*U_fz!zpv%23w^zBGeU zhPuswS7uPkP&c`~HiJ@zy2{rtYDK~_*q=ii7LYy~%~wcR0BaH}$%L#^O;RR|BWf>H>7N6s5= z1$VpaxMCr#;9f7c368XaVoqHnI?4(jRK@XVD<}oCJE~)>pcKsRsE)OQN7bl~vx3K! z{Ty!vPpYw;Uu_Gziy4bTcNvw~tV z-0N5__XWI;6>?wHYU)ZWD8|B_VXNf6xTZ#og;FClCwo_w1Us%=uDBDtl)Ez(?xE!$f&6zwQ&zBD z`1(oYX)D-8q?=*RSi!C$-3)V9NjJlsQ_^iFoVSAAu!d*ViE3chPkTbLy_04U?2H0cVX?i73?eWw#XY6bHGiJH!Ws@>mqMi%m-IR z-d6I8Uu80Q zY=wT6{l+I&=$k@^py#O-`c@<~P%>g@u)HMYzkX(g{!lg(%LSju40*=eq5JYbZ*c$T&GPc^ z^1n>5LsIa@L`}3qZ@nz5CfOk=cz;%oO}0bA%l{#2iXG|>el^=vJ0zv*U^zC;4h>Lc z?sPjeRF$+d?2zmo)C~Ae=HC0fqv_n!txmUi*4oL|W5w%+Gl`0R{$h}hK;aWTN04(~~*`e2n zbd>Yf%UuIES#FTK25z$4DEFlUbLl2K)UyK%^38UrR|gj4TjUOPV2fs}9U9hwd2^c` z8s34sa<Y$2rxmO){<$LVV!VYY>?3Fvzfw^y= z+@TI^pX|3o>pHNBbwK7{2j;$mcIZ$C=DtIA=u8LhLON`Ru61DfdPJ_W12=&lwL`Bu zu*f`Shq`p+Cp~V5x_0CzJzt%fCuK%-By0}ATy#PN9Lj(TG5f?amfy??8x!BEHk1bXW|u^5gj=b zugdjyRQrVFdONCpLUO$w)jlCRw6|l#Cu4L|M!zHX1l^J`@5nttx9!mFj@%P;#|}O1 z$Ze>1WsY~`_R@PYZlCef-7o z*rAc1(FZ=22>6W6!e@e@&)BAVE(rRJj_`%V!e`Qwl6^sPMG}N=0)D0BG?B06>g1@K zfZr%NS>#)}QaL(Nf?aSJKVJ9|S^j)J?!2l^iYdlg(gv6L7mj>Gt@$IE19z zgOzl1@en25#{N(zv_npCbMY`G z-CR7}3GI}lZZ007q??OJD(Mz}qm*>h@@OZtOU`u*zcEU>X?d)Yk427iLc8SzH!Y7> z(%l6!LCO0fCpw`$a)O(zCn*a`m{*Tk1N;a}&P z_);hQ4Oypa^el72zYz(4uifizTV3vie~T@J6;AjMq`lwZS?PrTFp~ROxSfYpPWao> z;cxJ)cEaD2-;Zy|rrb47_)jC@OX8`*m*piVn}OY}wQHU5->~*v=Y;=O7SliXtarkH z7YW~zbDHG+4Nmw6bRip^@Q;}_HaTIb{Qg z-LU!Gv&{*MQE>k?RnFS(grx#>>y{l(SSrB361CF_O9l8BqINl9u@ZkKYPS=X3h+-w z?Qz0V0e(-^UMDQ}!mVZYIpO|Zl5W2fmJ09><=6oyESAH~*9V=jRDi!H>W~u_%keEy zhn?^+wd8li35%7e$+4qOc!9Do$DFWKXKsyh+zBsIHOdJmyx2=lpLD`vIo!pDQ%-oP zsv}Q3;bp4LeZ~n(?dJN9vrc%0swmGnVX5Mha_qblUZvXH7o4!TlBgWJ=!C_UxNYuB zPI#?qb6UjpKDH7sy(;*x$cC;z5EwZH=MB4eIZdd zo$wYfTcfv}usE7da_qJf-sWX%^o|pjTChQm-F3p^a@^MFJtr(x;b)@mJKZKDt;bj~2l@pel@s1pO?Sy3s zy}1bHPX$$Yb73J(26gi0!a|w|>g>(!ZsjC(7jJHr*iT)(xx>YN>gLTIVP(I*(whql ziOkXN-dy;gm7pHpT=<|}K|Q^>@IgC+dUUb%wG{BoX-pXmEf!^E+R`&k~d2?Zpkrg}Gn+q$9lHNnSxvQ=0 zxexW`BD_v(e3&;EcGhbUV^!YVL)g3rfWrm%14nps598@x;7Bivf!)ASg1b;XS1njl z^smxLFN=vC=rl%6Ily_|+%tHwS-|;%Gl2^PX8;#^bI+m!IrobMrveuXP600Q z=AJ_ba_*N3P6RF!oB&+z%{`9}b-)#Z5_vT(g2eLRe2v$L3Z1ieSVw#CW8*<=YjqaL84&19f%c<`zUd_ikWUE&T zax{9ISBr2Edb?MPbL@GCS4$$~+{&`ktEG#y!FIgf5Hw!AP`y`sg~OM-yxLDWN4(ps zz0SH~k5_wxlf`?z+Rr$kxzDTpit7vad$kX^Fy??)`;Y^g4PNbc?64m6YG1I!ddRE& z9*O|jaIYqT$Rl1&0+C0(8U-RDDZLuB1*Jlddo^f_=Ru8L4cdY{uM=KvfW!+=dNrho zDPDNWs|^y*>$F!JEb+oKUTuiP3(tBrxS-_7p7UzMByxD(t5wO_f(u@4xSTDx=+#C@ z4DpgzgWfRk8<)Kr^o9<);?|kqLR$K>(wApNoF>CHTahepnF~o@^L@t zzE?Y%g>x`)(!JWTEI!=*(5u1wtjDu*pVlZ*z4ks0F*=IXcJOH@C05(fry)j1vDyls z1}~LjwViz08Hv?)_G$1}DOTIXr=62XUss<7&y~EpZa(dzB$X?D+GQE>?mi7NxE4R{ z;nN_4sT8QEPlF5|4eI67AcIGNdiyjaRH+oGk5B7jjOM&|NG$cy<;ivt5 zT5pld1AH1%roHfNpik>7a(R$XgNI9Ud9Y9GFLHT^Pa7a|d8kjrnG2H3!+aXfT##I@ z@@epdNiGlfX+uOVkML+qhIM+Y+a*9o2nt`{WRe*-299mwF{D0mvUNsw&+%|2};I#A4Ri(n&g zt00B%wqcUd;V5vs;1S>s!Nb6vKCK!Z4g%{18-Tk6NdxcpX`|6$A8?N#Y2dwrdw~0V z+8A`$1>7%K4?G~a6WAa~iuj;Ut3lswz(azhhz|>rB0l2N#-hU};88(R#K(MEEuO9i z9v37<+$czj_=F%S;*&mY9Qu+XJ|#$s__W{(;2ED*hYqBO&kB+vJ}0;YcpeKG9Y_&h z5F|x>QE&n964p05kRrY;NQ(H1ASvRjK5Zg8kRrY&NQ(HnASvP-K5Y^@kRrY*NQ$^g zkQDJPY#ekTMSNS36!9HFQp9($pU{C6akC&P;(I=ADxQ)ezAs3M_<esrXLjc%K&=0Ki zYkl$byTI;(lxpuG_#I$Rzcv^ho(A?3d+?tZ^Iqcm{4xH#w^5gh zM7lrk=O{}>!MQ*09aN>lBlqXM%SEZ<{CQu}c_!qDn7p9z{=BcKRw2hSfr)ZX6a9H# z)9~e3CNWXOak4+}kL6huah&4M`xDjbqs+*k_h%|ifJ|j-htECTpO4R-ZzA69u*~r1 z2l;Kz^yi28ZO-!N)8S_L~x z?hF0-FSE_H$e;g1PW&(S=fA?n*AjpJo6v<0%Tj;-TTq1#%QAod+sHvWEX)1*AF|1{ z!k_;Un_MgX`5&{%waTCW37cH2{rSI!nuE;r=eI|6yajNrKfeRe0bD0Y0igB%{Em2P z18xws0yp~eEAZ3;+$2a!V6#8J6P}Xf-y%p+pRNA<&Ui|af1BVP;C4Y$0z3TqUC@Cf z|4x5?S0G9LdO?!>yZrgx@boHhx8N0w{T{!LvDZyFxG1gk>)%1yF-j}_`hRk9<9@&X zT`q1s;Mc#$$7ve;`ZKUIP+IBNpM{z6h~5s|2+&e6jS>3KX4%Gx?lei<{45ue*G)X&D`|sUvnb8$*;o!rEtM5zYYhK!Uebe zIvh|67u@mda6l!>v&=l{N6N3GdI&;!3dOX{K?`t{jX z4$_tfbkv%W8Pq=1Ux7LWbff{^2XzkUa8KU@ zbqVN51H1$38qkrDeH+v*pd%qmhE8QbM;d_4((VBrm02%>dIa>na?rJBK;I|zalHaM zDzm7Bpm#t&APL?+0UcFXWQ_I==rFpXpnd`UnAF1c59qh7aE0Jz2XrI}C>S#^pd&Rv zX_P?$9R}7XpuqthVf&A;a)t!-X)vLjxUX9O8hgxAk;xkj-7iua4`X)&f)ZjBqqF^jO zvzTCbn;{bLYKC_Jj*yHh;#kiY*&urtc)5L&&#Kxa=Qb50Icme&Ujqj|O9?+X?9H5_pF|%U}NWIK|p_KETAKe@eycwK<{GbHMSz4_p$TZ zSsBp#+Sxf=70~m)8XJ0d}63wE=ygo#$m;Kp$l1)wVvM54Q7a+Yr!) z*x3o%7|@5>*$LVd(2+Eu)wVgHBWXfT(3XIXqzR4O)_^|3&g*VlKp$!6b+g6!@sH9$wV2|3Rwh}AX&MV_s zK(DuRjpOlvj&#gTyj~-Ap`B|SPhdsbxyJD%R-~PSd#A7>?Ht@YjTLEUNA(O=q@5kr zvjM%q&W`H2fPPR?Ip?uT?Og46A)p_%<0=Of24O|oal;S{Ld+$^GugeD1A12=8M{{m zDe81Jpm)PlGIp;8^hzN8+I2xPc5ei9GMXsVbW@Ow-KK!v15e4qy(LH%?rp)96C|7SKBgN_$>w~3`391q`A~2&uso=b#M5@b_JU-LbqMOC z@RTgDj)ERwMNqHCQ?kH136cfYS@20JUc7SzY%sg7t}r638X7x0tr zL46v2@))p(;G@8vL47)&wgmPP{06XhP@jRPIlw-GWDfKV>ND}w4(umL=0N`-YtAg- z06{Vb1_t%n=u3{^AVD$*1`CooFeIqYK?gDih6>)ndmbi80*9>Es-Qj>oya5@E=Y-> z5rSkLj120OF}nyHC3pc?EqER{I;c~o{48*c;2B_z;A!C4piadGCxNwsCxGLEI%VyT z1M38j0mlb*%D9t*H$jjbyoo`b@@VAXO%fyrZ*owlWf(4(DFMym)u;A13EK-qcf(4(^!BXUG zm?&SdE?DsE@+`_%tYN%>7H*EEp2-2)6)b=UUf2;PSEgi@l8X}2(ev#Fla79aDEKi>qAAC(9SIs`h~D5_cF=f^PXrzd8ZU8S&hen}Lq1R47&Lyw7UPMa@e|lb ztt=;l#v4V(d3vD>XsGDsRM2>f%QR01jkmc>^Gwiqha;b7gT{MoU!DsZzhtxWe9-s^ z87`dA4jP}LW~Y_qV$k?ak#U(`@d}#n;b)hE#$TbGa8^5L{0+(pM-zj_-&r?Z4H{h} zxpggQAaqL3(Dk5!&?yC{ZUhaa$Y>GV3>pZX(jsUI8VH@zBDfVaMo9|lcF?Gn6x5xd zFqWU_b_N6IC>3K9x@OdCC%SH zWFSHHD^Q1!f#B%-ppGE}!BMgrD?$c>qhvL93K<)+*lO$?GB#$h=I;_RkhFROKkXVa zHcQg4TgX8A>c@Ci88VQ*`Vpvm$k-;~&mJKI=_|4`dxi|8ugK2q6*3TZ{Q;LY2EwkS`TK?pgk4jhejx*iEYke_L&jbSe+~#4NMw=4IWT1Gm(cT|ka0i)p@Tz4 zLl$fPAt3`PEpk(bhKxfJdL9-s5OyVvUKKJBI;9aG9x|>-fzODLaa9U@Muv=QSzJ~z zDrDT3vn|yj1L-i@Frz~T(qXh=#)J%{!@7WKLPn(oGslJuq`4@VSsOBXh!sCBWFRE^ zTRf`^83>8~8Z~ znHn;tTKSyPw2%QWgM#zZLk7Hz=Rq?<2E2?i(9DnlFCz__6*AyukTpCzWWdWHYj{q` zfR_;i%?%mwG9sXPAp>4U2sA%rz{{Wn?t+l9K#DULhKz+$oVf_ANs2QUV=k?nQeA?% zv~o&yDdtjqq-7xk{sE2J@{n=F%A>X-WE{1!{kt+`oD<(?RmecGQ8W6j4jCvmx&vAh zGH%LQkF_DANzQt#3mNb&C}6)nWWcvL3)&De?pWCl+88q6Wl+F=Q^;tRQy-f{#yxA% zF+AIXxwNuHv=wt{#nA(ZLCmF<1N+-CmlF8h5i;6~udy>^bP!*oK4c(}Oe=d=$iOL* zS3tW%213fTviF1x6gkn#-WxJdL>AfM?=O68z(o8VGoM^e;j*I?EgmWL9+i5VhkCL zkWv2xo(!=#{X6iK;NO6!Lo8qa0z4!5XW&_E4gA_4f#(Fj2A&TYr}6Yl;03`y0567& zGkE$1@KVS)3;Y~-S@5^OD}uiPUd0rn!)L&2f}aAfW4iJ5W8e+JkAOEZ^?3RLuu1S& zz*`~XBA&hvyd5$w0pA1O5quYT7ke2`e-3OGd>eQV`x;N*1l||?8Snx2IG(-^e27gB z{0Xo;Y+MIY5V*Y{*~J~g#tl5(2J9F%ZUVOeD+I|d?i4nf@RTCIodwA*?h-a`;psYH zS3$CiyM>M0cuK}_rQj-H_posXPsteWA-EjaGi=<&QwsO?5?li89X6Wrl)}Az1Q!DP zhK+l8Iv?0ikixzF!^V9)r5Nu3!P&rpVdDXwlD$1hknHWjVdEj5lD$1dkYc<;!$vvc ztKS9=6D)zguL_&c_oj*UieO{ddg37chXjg1YPFL9`@Hf+9vIAkl!xUl(Zkx7>enRGu89V)5|n{Tic zHa={=$hpWpyNE6dcd`B{;TSNjR-6+yQENl0 zbZ*$}BMNk0*z79`bbi?ECkk{y*hDV#HS}8;Hj&FDA-*VVj+Dcui^Jx4QFBYe<^)l5 zOT*?wQFF_}=4`2zSspg$h&iz$Y|a&PVrAG|F7^DY!sZGwCsv2em10h;37b&O6rx%i zHldoyE?gHjp_<7qTpu=}n!g3w5H_Kj$u8U&HldoyF5DD0p_(57Z4R4I&14O337b&O zWDRZ&o5*E0fwqNB1V>PXmx%6$gUj)qOB-0y;pg-rzP$n-iMHlbe0^lA*72-uM!a3X9%snS@T44Y7@ zG*+j=CX_0T)#qR4JwW<-(Q44cS)?nS?* zu!-#FZqTi;iI7}9=yupVZN(XW1S7-d87mIWAs87p&suScKgZIH`LJ?T&pphCm8*L0 zV?L~?R6sB?Y(gd5mD8W&nju8_|kTS{@5fe(V z3e+iLLJ1B9b&i-&f`dU_A|{mJKv36+iAvvYpl%U!pk!w&Bjz9*9}VsvF>x1NNBp!$ z#2jMdec3Z&4z=+Ko?a1in2nDH_l}rVHm;KE6ETO|_-Jt7h&jT>`?p`jL}r&XP5+2V z_my1(4iLNw92jBgav3;C@DgyaAi2RqA}lP(_Z=#D4meDZ+~BGRizf1YhYOwpj)<^$ zA>VhTU?Xr;#H35g$oH)lJPI5wNN(_$h)I`}9Rk(}k{di$klf(fh)MUAksCZta38Qv zkUZk?g5(iTh?r~9mptN$f)wwWBuFZ5vLLCrDG_rW`jU#9DoCN9X@aEfrbo>6=&%Vm zLy)xH%!o-hlTqkrmLO@n*@C3)=0r@onT)jETtU)y^8_ghG(Tc)LI=`z3j~(|7YdT% zTNE+rIwWg<+BlZ+AdEH)rcGDg(* z`EH555#{IH)xL-dVW;6fjEIVH3g$pWC6IY(Wod}09~7xkE$}jRXfC4D!H9Yl`v^B< zMAVP4jgYyCsGp$n0`7N2y#a*>_dBBAX7~A6M7_(08;?iS`|LG0M%0HW5yiD=5%not z#5R_b5%rrQRZV|mG&N(Wsi9^(8cJZEil{GPH{+t9i254N3oZ(Zs6Ruf-npL^R~MHANJ3H0i)w z5rx{K>!8~a1uc9DbSI+VKA!^JjVNeWaxI!83Qp+`(7lLi%t9^`X`hI?l*JbWJ&34g zImGi2?_Lh+mq%5#RL-=IDkPaY;5Rx%6?9fPsAE(?XZ-_I5mnGxRMFTes%pjA>>O37 za-@_|m#Bin_ywqIR4ul$Q{OGBmPjh7GOCtJDyVx@AwBde`t^t^q=$Y8>KRo?54{BH z6;+!=_x6se&7ynzL>06WIp%$%3c84#$bL};z4Lug|EPkiM;doPRKeBzE@)s>!PWZ? zXi!wa!7Bz0jw(2KZpQy^=HuNsDgX-N6?t4f{r1FyC$ljW60qi8&%LTkA7PGx>nowIT1X8}gn#-X2u7+o7z6)(c*+SsLD992jp(K=lc zRY)RT044kWY$L2zY;R*qUv7>ne|bHlP$CkHbfN?D6|eXM%5%cr`9%Mo!U9Iwi%;q z=X0uCFs71T*@}_0%LyH?P515MwWimP1(2 zl4v;`RmUXJawMu6?I_HEr5RP%<@C(4sJdZ?-vdiCs&3l(n)b%1YO=!xf~6T%x9ltr zPDa&jJG>!SnwTRysvBTwVvg)6Z-AwVIkKa^0hVS|;atuV&^hb{J4=xB*b8>}O{gx% zUa<2OV;7^UJe!kTm!hhDHrK^nj;apXyb`ZORmW^ziC3elBAb(3*D(9p91^>Z+0W)# zxPe`f%|V-+*cI6vv}wYw$mS8h1?iK`Nz2=iKG{6tcOZSTdBpEVRb4iZcym;Z&*p^X zJ*_dPyVhbmd(|yLu2ZCHm3`R z#ng>#-uqQCbu*h2hr?s4DVxuzjfklS*<4LHGNvjWEa67QRCfngN>;~I4+oFm=$Pv1 z;PD$1Q-d8GQml!oAr21vj*Y3I4i5X)##D`iuWcI_Q)3-`-mosFY8~vgj>p(Lc+@6f z>>WI66EXG<9<@m^waCE%!pSkU*unnSl$cuLU~Moprj|N*)TYJMMh9!+=`pp*!T#5b znA+@M|7#{@%fbHFEXYXFR)>-w1LpTj}d4KXz! zhxO&gm>QVFhRvp!8kECYV>9L`hqcC*n5xU+-MBTT#^>;E+!j+4a(Mi<$JE3e9={zi zH7SS3Z)Z%+%VGPaKBng9u-CdPrWWL|*Sb5VR^{+s-4j!*b9k@rjj1&`yjSF@jHka%;E7ngc;1?@jHwe%whla2xc&c{nw+I!5sEq zk6{LLSmPXzsY5yJ>o>;KsT}rIPheN%uuMFO5zk>+cPggtZRM!@~I-6puTMMjC#3N&BB#c6` z^luB2rGF>JW_1nlt{_?Z&4Og<-;1$LJPLSUkSzTNf@JAGjIq631uTyy9l+j#*}y)6c3|H)dlpt;Kfx?u|2P}}4}k*&9{>l&*@V9b93;9=ktL3016#?=h;C7*wq-~r(DxSENl{&K;Uz!lPgaAjOAKnHU4R|zf!t`=MZToYFd(SaQOwepm3U0f}~Q*!jz z3zDP1L2xc`qagYGo8oFQ`jVr+S#TzBiy-;@TjOd8I#95Cn;`l8+Xczz-w{_!(P0vB zry%+K^>MWfPs!2WC0GaCEgcB=#MN?iAV+_%AW4FKf@6UD<7x#ukfVPEk|gLZNRpsOsoIGS4Zxm) zBnf&6?g#cRRrTmVlAwB&Zf#0UTYb z_M-y{g)xF86lw%XD2y#t2hf2eL9O6I;5fkrz`9b^fDR-S#tV{Am>@_(VWQw{;G|M@ z5PeA~Oco@eFhy`WaH=55hiRqi5c-l(m@YUOI75)+!%RVv53@?uVe}>WFk6s>!W_YI zz`3RB2s)5_m?uc`VZI>AhXtkTC_0dQSSU#HVUZxohsCAp7&?%ASRzRBVX5FS;IdM6 z934nLEEgpCutJdJ!^%?Chz=wlRtb`PSS?8MVNIzzfes`e)(Vn*SSLvGVSTAOi4G(m zHVBe@*eFQyVNsVQZ;6jSeIqwh5Aa*e*!&VMnPtgAODgb_$Yw zs23#pu&Y#^MF)}(y9G%;>=FD6aBrzPhYlnk_6d@F*e^)(;XtW6j}9as8U#r`926w^ zaHv#WKnIc!hXqMK91$e>aI{oiM2BAkj|qMTJTCYtu(4EKLWhrmCj>tNo)r8Lc&b!g zMu%SkPYeDMct-Gj;Mr1j1s&c4o)df*c)nC!#nYbyF9^O3yjZHP;pv;eOM*WGUM^MF z@$_}z6~UhZua>GCc=}`DHNn?_*Gtt+Jbe{-L+};g%~I8br!NDW1YZK)5_}POyHwpm zhaUj%2tE(IEBG9+xm4XohYawZU>bN|Fa>;2s_vje0{Bp{6j+|%r^^uZZl7=>==M7&rk#N!%hvUm863#G^i}zi^PVL_C|Kx>X71FuBKJ zc*2R;^(S~XBH=`S`6JNCgcJGY4?v?5PGpsT2C7at5wU(9G&3>p;Y3#12O6Jnu9A%OgoJaoWTYo1oX9Fa zjh{|RI1%@zc>Cmp6Io@-vQ9}j5dk+rQxi^)EvN*1{ zAmO~7#c{ob3FjTT9br+zc{hvw{ly6Diy-vupC zI6GT;Bv&MyedMUb%7nA89FCYVZJ^x=C*u5BpgjpE;`|RmdlOE?`R{}FC7j4K zQ*M8M!infU<@OIGoVz6>-H>qZv9d>hFyY*5MGP5oGU24t@+3VE3zGCalHe^y((|Yw zNzY?~Bt4HOc>9s`Y!oEvc_P6(>l5HfL6V-Q1W9_HPVlb#0C+}_q~}?z6TAl!ndbz5 z0X#2A((?kA4?4U9yeLT0^O7J*&&z^u0k2?zp)X0#tAcL;uL+VMy)HGD*vuG$N(1a=T4>#AeYNf)bS7#vaUKOoz3V#)>Rk5g}|;!C*3bN zAJ|QB98`wi|7O-d1NtX(eN!3emI{kldc*hld7-aWMDtR zNx=R|XE}19PXh-CJ_Q^o*cLb_>7;83-N3w1FRB!0ysSB zq{|9h14jrtfg=SKa8%M+fer?+TCe~(T2Kd$Njf{BLmse3Py>z?%mvmaot@F46>yy3 zZvw|Bon6r3QQ!o@M}QLrTLLE~on6tP1#q%p4seQ~12{G5q+1g0z-fXu;B-MN z^yZ9YYv|3^CK5`hfKRp#;?@?2Wmd8^eGfD$;FGPxxU`J^LA-@1i*_@twZ zOLHzJtykixv_nBt(t0h% z(t0nB)1NIZHH(M;V93FH9T&)%~XP$#!G%F=ZEhk zpU5fC3ZvIurVw7RIoSp;*oNweahYbaO-nv$a6j4R5iW;#kZki98)OfYZNABM5#^~i zkE4Xa(NdzuRBoGQXQn2fGn zQct4mlT^*!($Y2M!mV8{jWYn(tz(rW+)pt3Nd( zsM$cx9%|?oAs6W`S0%Q(s~FPlZT@m3LLro1eW2qTOO&vAkshNnTLSA(y{d+z&E2-H+&3tBJ&c-aYQ|AR-_PcrL(N8NHc>-Ynz}Dj(;GwU9zqR$ z2akIan%DWAy64ir=TWnOnuXLXr)DiRTdCPa4c(dKrWtaR&T&^$LuEql!_?5(Ha8uc zYTppVT)8*XzmHIJlbSB{#)nZupWi*4ni15Dq^6ph(P&=7n(Cf%x$&tz$UnSd>5+1M zA1eue^?#dqo+6$Y9@{JU11@fOl*{otGSq#DsBz<~K>0JxYj_ziDIf2Dd@}xc7wDsK z(+jih=7v6$o2FAfNz;FQoUVA~a_rZhDOWh|iWIra;_m0zChwJUCCjru#J=gBa%IS1 zd(qMdRP_I`DqXxD7tmr`Ma@=f4p4K9nlosg#U}2Xa=p%%7W7NG-rzG_{Zp=YxK?;T z%JnWQkAVcW=sYOpdJm+qs))UjA>}_rJF$ZNuqUXn0NDg1pgqXYr=GL!aq?Y%1PLymfd|c|Lh6 z|Ie-CY-mTX`v2TOw0E9tiT@sv>oKcR{E^5|87@eM$_PO+R7R%wQXL}$fJRCQY@EA)6Pxt^pZxLmtq-R0i2&= zNqrr-AjR_f3~*tJrS>7E#! zKL%WpV)?!gxH833emiiLNclCG+tnB`{F*e?v`)C$Ohk?QY5C8OUt5DQMPIV)*QQuI z)B@L~SVs&8uE*O!hd%)~q*z~k4&0bxtw{cwFx;I z+fuAk$kEs?%X%?z2i64M7P%BVQ>`So@Y7g9xdBf}e8F(PY`sj;>M=cF0)=IRv>CYTYv3`07KRJ}*4Mj_zT!6zV z)>rfqj-*&?Ey4mhijRB4Db|Iw z1~18mrq{iURgVrdPghc`9X|kGO|gz7U-lYSF*=ZcdOgMZ@)h6>tYSP(0B@#PcSe9s zcsqC+!soe_dJ;jn0O&T8A9N@64-Q%~Y+5~;N7 z0n>kg9y0wqs674TV-#sa@i@~2PzR>*WMid^vHgna`vY29D$?%9v3y&hVCNZ2r?k6u zk(*2s_Y7*5P_vGjgVda&rh?QCol$p_^)av^-_kklE-Z2n#Hx1BrH1OD8zAGmq}@*x zxzE!h(qDySrlsAuf6@IU2dcWI-A|G6qb!wa_bWyJQ&W>x+Y7zWJ?(y*^-2!{`og-N z1XJK}^djK5`Vt=ZPP^aXlfr!n=mOo-1awk%AVD=c z4kF+W`Uu8saN7L=eIF;3Q`#-p$PP`rKj(|thNazqlY_%mX*XOK+R?+)Y!E$;UmcNl zca^VB9hqhW=`MagD(xmSiKJO|nvJCkz|m+^fuusCDz;TTKGPZt;H#?c1 zeGeU{r1>XXfm73LjBUp6OiR0QD)GO~vR~kLrt`CJqvMP;|70C-W}3}5degJgY~3sc z&Q7xlNBeG0nhm+Bz`1EQ=jwp-(rnZX#LLc4yRXp!L&*Cy8+o083)5`s-2g61^GZ7k zT#V7g;@SmVl6KbtH=|y8Y1%y=r}!q)vZFIv?%`N_$I)jQJ{tZ_qIo&q5Ri8NiZt7f zwEI`4*@El?T$Sc^+X1*b&8wGm&6+gtjpe|#Xd{ zAJk)rvbmaR7Zdx+OaXM>!^AuG4&Kq;H2;x$;J!4!#Ae|BGDuJe_8{{bS&nG~2wd0?%TPK{C(|IES4DoB%wJ zHw>i3bRo@FeJ$`}nr-_U;H5NM_@q)UW8I)HP5BjU5g>hO<<)d?4wv>{OBc7`(*En| z;%{(H;YPZ+B}Y1Lri&k8@3tvj{3v_3x6;Lr@qzl=>EdtlJ=1s6#gF4;J-+KZU7U-w zgTvCCF4l1J2F`K1IKQYf;C{MTFRB1MNEe$(NZ`A^)5VJO5#^a;+$K#9eS0R_6CIdH z1$N97ICY+Q~~PA)DhH+iR$5dGqnfxVWP_TzL{bVDPB~gGyNUZpXqO)0Ze}d4P^QY zXi%oOEtx(LtW19d4Pp8kG?eKp&@iSiK~+qD01eL+Ls@(Q8o~5C&`74wL8F*RlvOkR z1~fWT48!a*&={sqK{ZUDfW~Hu+m&a11gd2sA88!Z2cSBpUxCJFic83Ef|1NbqHiM8 zd!R{7?}8>XQ9bt*rk{hRW{SUEp7j=J8WUA^PtO$p8-0HojAW+QK{GSO|4v6@abTS3 z$DrAn;_sGc{SY*V>1EK|O!4>R?8Q7LGWO?Zik~UZdLFcZ={acGg&7aDjK_+CZ--@3 z#?z87r(2xyJi>=Umt;JT^5t|(GoHuzbm+2-=bMm94$Jb4=W$NVt;l#j7R4aq-!&t0>12RUB+XeHV{F=jK}0F?KWgQioL^) z8IO~-_@<1fkRzU(GoB}kC>yvX<7va{dTYk>B)f^*G9DM)M0{Co##77+dPm0N=H0n7 z=>Qa3m+=@nLs5EJrgQKi_|GEaM6C zv7O@?PY4CU4ohRk6G!bYj^t!Kr6`@ochqJ)2~3BGk?x~I=#S|N=oZsu(Cv)pB|51Di!|eTnTm2? zkuseFHD^3Oq>D#kkusgeqPw4Ii$&MgT66~gc#vred0vvo#rO|1Z6Ra-ts&P^UPe?B zC@Ogc|9hXJ`N%bwwM9g)y?l-#~&6)?`_`mdMXJEd9#bJ%Z9(7?Ne}9!2FX49T)~k0Ut; zL$a)09)Antpt5!*jwj$I$+C7&@XhW+%GyCD{~mvOXjwZ*U6NqK%GyDOlH95)YuA=) z8zAY*+CkEhv>H*?4ifBR(8#i^Z&C59(=w{8L@z3FTT49FlD5{8r>rGUTT9wmOG@m2 zM+B(4tfYXxB>~@wP*P++kFQ7=T}HzlMzuh$WlUMg3mAG^$!l39uUSiej1hU%Qd3s) zVo}MDttCH2!25B_*s_wBib`I#mb{!*^0KWheyg^u1mC>yzOCegtdb9`B_AR*{HSGI pS;;#^B_CQ#KF)d+=9d}k%v z_6u8zU43xh#?wr>e><_{uHLxL3QFU|#I8AV;INt6<4-Ik2NEl>drvH}12}6KK*fHam2n%ITEq6JJ6xK!M%~r+D7t}@YxbgRH_uk-pRxqG)p~EG9sSql z0~GOGB915Z(PU*fopk%{!OA3ht0~h}GC$dTl#+RH;mBUY5Lhwp4wk3=dUrWmJyGuQ zN+XV*`v1V4MAOY*P?lU0wq(?dzOnf*#d~3pH~I<}zr8&;V&q?cxH27%+T-@}B>J7r z`zp<6O{dGN-6oLkVA|+T#?gy5FH+d~)9LE^p{oubosMtZm>k%DZ4=$)foq~4Y@Qa) zKZvqs5=-aT||D)3{_sPOap>(?DVdSidz zp?%k^U$>rf9N9cS=QzD_e514P_(3Im2P{>xXRd5O$iPm5+X~w?UTy9>cu=PI>COA+ z^s`&*S02BnfB4XWV{k)QLxnw;8p6Hts-%A$!BX_ol)n;q%;q^caLU?RYf(}^f^w$V zcMexul6an>ds6SCluLSSFpnlpNjx8wNNG5=)2ok{B>9g`-lpPxgu&b1JL&G0ye}+~ zV@ZBNiJVCCpOna{BtO4I&LsJdQO}fl=d}9uc-nm0zC(xB52`d??SWNVw|Zce=Bqrg zO8b=_xFSt^g$J%m_~jnBCgGQHwWZgJer@vt6nrYyXBMqjuQgrmMf*9Cek(e_iS&iY zl}1shx0>-(1?GrRSysl4>C$l8tS`sY$==+z3-hp}v209x3LouNdHyt`t_aD|UX>+( zRYu0mwp998M%kv~voKYW{H`H_7BrqVMth{lD-98Wpp6yv=T4(`31Bi>oHhr2iFV6k zc?tdxqZUC-MdM30Rh5n}+Ei62?lx3+6GXJFYVH{hFp|ccV*`nnINbr1#Mws5<6&0? z*0cvyW&7Pm4zG;S3n}i$mg$Orp-fla&Z7{iigpHNPF$JBDz9H`WDnYn`oVoiuamA_ zYzU#4tnIsYedUOR{>BhOr00t~eW~HLK=M5OXFE^lr&gXe%3^t*e%FW=%DD39WP{on z_f-q_X@fd$p|cT%=~D(37O7HsmqA6mmEOCIc4`ITR>k6vN@S(ud4>*XR!zefY^rJz zK5sV|NvWwTwPhMs`C4krG_1^iCD%qQi8kVz&7!WOiPe%>UOi{f7hE8kq*Ewd)5(oT z)*~tuaYJA+a5x zJi-(x2!SGg~mkg`#Pz-RzB{%S_`a0?Xs5 zv3Z8d*&UeRn4cbtZiTrrujfFCs~{b+NNEDn5sQR~9m6PD3m#Xx9)T34uAM{@%6@Fq zgtnj9G@X%L+rT;I1L?7Kf&0ZBhy(}m)1Fo4khO$HE2e6;|`ydsT1Lkwja zXB2=)WP?LQD#tlQBy$8UgVeT*Qn^|=@&~qqL>5V`xpa}hXqY_9*Tl6N`* z>cCV4wSY+BOAH{A_&k!3LlS(LZ5;UZ^}|7o^& zFXJ;cq5|<`22$Z@Fpvt$6ZoXy#$iTC`SL^tQVwxeD6bw@NKst0TS)7I;`^_FRAOJ{ zFqPWZIZP$@6%=Awf=;K@Iy#0Quw5oVh43a9Q4xH;i>LtpA)5?*dcP~8JbIpsD1R6O zlsA7+$cP9jcaY9{DXh6afHDSBDODLrB^4KC5`h~|Mxyq-$fY6$`m&Qj-bH2!W{@9i zF{4rl6|Zxt;C+p)LNJ4TX+eh8R=3j;I`%VUaPKR^Gwv=<>ytqrlL%Dnuj3KOTwAmU zv;|1PB0sC-dc)iMoy89G)Op&ekGpEjfaME@u$bD*G1 zG^3AMBxF%D`h-P7)-(7X?~XCYb`%*YC{O+5NvF^>&}g;Y+6}i&#wHkl7o{d=+&Pkbadei&Hy)0nYdD1o zLTf1m;|&~R8hzAatT#r{|3GgiQoj2n!^SLXZ=Npc-vRyP?l5{{&iE(i8jKZ8Ya#7Z z;Pni=9#6WX=$#0T>~c>L(_CTz{Q*8=XDZpxoiy7Vu5??7Y_9He2x4E!s)p~yNF|Hh#|G1WxPa5P0gg59Z>$KNm(Mw zJ55T9DDN>9_4}Rr2>puTMT00Jim+ttZqOVI8g@p=9K(ke2&b5YdTSJ&L29Xl zor&NerBQS&r<_aS!Uu7*ff6sHzjNGd$gh_RHXo#l@BN4-B0cT)hrM z{(38>{>HV@hw=3!E5dn&rq%kWTSxOiTD}uvAPqkj^U~D2->1+p#HZ!*KqyE9ILSY@ zm?|ygNA1LFGsT{v*o2h4$|>TAIBuO!>jG)gz_g>vug_;(sK^u^{73W3>tN;gHUOE zRgi;pyq+7914q$bMO`f__b7S>!F zW+5#{?R=A3up+ZK8eoQwLh}3|2kCezXYTm&F?IEmQTsBX=1;d`B2BN_e28jSA3(WN zLHgki#}VVH%qtl3$LUUfQduMU=}4hbE1hZso1R~d$0yFF~- zkI?Yb5Cdu0W}7K&APs}%_TH{6Gfxb&ke0SxH!vK)GUT3mue-P`%vcQIB)@E%N%D=( zQU_gzQgBX)fi&FDWoUI*r@JxfD^4tm!Eh7B z6$@u7TmNed9?~(D#ogz(@K% zZI?t9yUX#F(cFVpQIxTJx8NZ?Ke8)^)I;`+S93Lc!Yrg^#HG|9EO*fr=W4#Y1rO=@ z4=yQLB62mWVHVQzD_r5rW1Z{yi>;VQ)4MsQyj10y-nkVMX}XPL%F9!(DOk0Li8TGK z9RT_k(@g^YN!{~&n1!@FiDAhdQ(B%7W+5#th9!4OX;})hkd}enz|*%RmMR)6i|tie zkiQ#ZAPxUv57C5%&S2D3O~}oDn51vD`#2#@LjsH;MK~(~oa7&Gn@3;1Q>>h}N9crv zg0F=bNW;ChfkFe?!AWyT$iLJNlk_WX`-F6BZ890vWe58308a9cDOSa(?G*BjJ?gvU zK|YWqe}OScMEC(US(f$*7VH z3u$?~%R-T#j@sgX)X2Ow%tBiJ(q%zzO`9vD5hhoJOTQUrAuYe>vWP6kuxiwnpJ3C0jO_=iCAP4C%yC+Kr#$tW>dG%VKv66+fyqPcdm^Qs%Y1(v* zxz&qjF{yRZ&$gX>d>%_!DEFu1_qLyHn>ij=@fDF*1R|tKbPrVong;vrlYY8w`w*+) z(Wmm+$=|;JPq!IUtxwgmKixKi#tPdj)s*bx4Zb+~pv8v?)H^u71oOhVEu;_Ail5K< zjv4w=WT(N`T^nKdrb!r$qC0hkhY#I8RNa#M@E34P`;cLkz!2?WimwO=jObx1@zc2x z7Z`$-=q@vfVYihTbEy=#ZmSZ#tHe_^CO9QeEqX_ZXEz4gdHW@KVq>CIQW8vy+B_+0 zia}|1F%$lGB}$Br-{wg${AbUYZz^^2Y(m#a@2UD-7}*awp2Ba51tOHRhaqw5>{_Z?gpHoq~* zK|0=6Y|zMcjMoPFH`8rilw?2XqUcX^*$;bBlKoiG=jn7WUvB2YNBuBK-{^(~QeG%=41#pu8#S%Uu`BA&xx}29caVf7i z3Q^3c%F_m%_Ts2Mp>5FA-F(03`&b^*^PhHbQU9ln8;`Bm_wN@f?)JkZ{Z%_gBn`>+ zjSV6EC@)H~iL08*EA1#I<6q{7N%}Q>kAUV_EQ`GFWZmTL#W-pq$# zSDY|6>E6$0Zoa~H`^mE{vBLH{dJIdX<_MkF4J8uRxqjawwW)LbLo9L2Wvw%sIO-<0 zn9EE)R*XCgM5H!tH5T*v>9=jkMQ*%j^WiE}FDmOAV^~P*DPuXLyX1s8N#`Sq+~;&+ z#gqN39VPS1+Hq!P)f3(L_ z`ZyBGp1UO%>H3q92O~6}E!j(d@dWrt-`D&>#^%Q5`VgxTJ^4vHdt$7l^)!EZz#a{Z zLQt>d;CXmLoTPKjA0JpcQCaf)TXK=En?hVVM{e1Yi*&uZI3rUoD@`@0A-l5=p9mvq z{1}@qH4mtDi))AEjL-U(T%_w@kZatQS$p%AT%_w(mWvuBOx)|?&O5f`B3HA@E0?=r&^4zAq{Kd-X-<%*X>HWK6d)c@-p3?ePw6~zq7+%oUiVb>2`U3d~KKkYC zp*{d7=!Y?&l61L=N)XQ|RMS+WpdB#wW||{lEcNLfZD5YRg)x;>IH#rx@wK6Mwb4c` zEW~LESdOU@ZGtvB>IxHR3J071aV7=l3$P{dbftP0+xEwOY%bOtn`z5Gjj}N$FwPRJ zAELvG*d0!14i6lCdUQqc?J%8Qbzq|ef6Gi^c`%I5GYM;*ZuCH#&=%83(q9;bb?fLp zCP#PNh#qPZS|B{qBJ>;4Zj*pLMo3m~bev8{IJ${>BE!{QYt-J`z*Kpewq$OboK6Mb zTJ&&}Z;WqA$UfAeEnx??p-=FwMQ0*&&b)9t?LeGPuUW?z*m#I>^ZC)EPeJC)oN?^% zk-^ot_hJ9|*uMSOMsyfbvu`N&UpI-QqYoX=E$Qg*J8($qc(Tb(I*9#Q2+^ZYN0QrS zuitm@_&O$n&QvMk7ztvA2|U`^_UK&(&ut~1@e(#5>EelU)k7?>v+%rVM!1NR&}1H! zcTDQwi{boem-rTZ+YI*TA6>tuv2SC2c=Q0a0U9D?VlG0bnjbAh-Z3+GrQ)t=J?|*# zIc(|?(H(VZ5EosoMc%DMkSra(MUz!Z8kP!?r|6{LGc$KYabKkMyr-n+a%@_bUY{ww z7E8`T(?4MzO8R}<3{LOBZ*eeJB>y|67Mmgx-n z-yAGYMuQ&eX&(B&QFh~e^0A|b527%a{Le*(+W!yE%;EA6!F`X`^TCpyhhhpu`hQ=s zdvv^h3?V*z^uVzj7mpr3e&oQRYhc9%%A*g@oNl2wzH@FgCo=lOGp8UzQ&}npXnk_> zS(e1)x+BOtJIzHVO*#T9?K(r))fP<{PKb#{;n5Fz5GJs1pOJ^NpIKyv;BCnUjhJbj zM>2m*G2aN&q~db~GbN5A((se`k7)i+DE=Et{1l*q|0>P@NyUF0^Hx&-eT4odP8S_D zBwnv2KBXk++>hxhEUNE6cHsK;=#!fFpA_%YQHmt*Swg#!U1FA4`uZ=5`!M!7%cA%% zGdociM7Cmn#MWViU(5$f9iLG;4x+1&DV{4*Y#-Wx_$sRXQrYu$+4yX^Z0yC zGiPGvYW=z+x@<+yLHW(WUE||dYK2eIMd!0KZqaFD)l(L%&(54%(%Cq0Yy%U^_tOk# z8hQmt^QfjTt#!+nTXeYYn%SuhdYbm|uCj-h!PZA#fTB2a*UVW*O6K4e2Xqe#J?)5L z3l{G4>H)btAyM6^dOT74co*;E4(;PzGmeiRE=p6rMyc*JxEyW14Ea}QW{=^ngAJTG zw2J~HaKX?BlZ?lrzd<)5`!MwAS8ZI0Ig9&5XU?HtnK_L{TBBz)j$eKC`cWK<)I$wH z-;4RO4t6=yHq^_bU67J77gA%?9h|a18a)rAA!*IGW=`J!G(<}`#6rvZ{&iFV!P*1s z+#H4ZUcq`v(e@E*^J(k2w}EsTi|QDJVB<==j}Lcwrw4B7z&FDM(V3#dK2v&11Fh!4 z!|1WUjJ%iLo+_a(?o+@f?F$w4ypq7mk*oF{TgM@hU22|eW&=xQ4>o?HC%$C!RE3_r zF^>%`r>S4tH}-@11LkjVzuyqvKaUZlX1|_v|GD`a>~AjEuZQ+cWS5+=o4sDB?^px~ zv`hs^;CP{cmiaC*euDd=!gj0@4hz}iWc&Ng-{5|qAq>^`6!7(=`_1NWu)ncjzaH8@ zYnUq3w=4n#8m0myumOe#h*QI};!^?*_bx@4!L(s?DzZ~X4Q& z+N_UjKqT!B)C#F-4wJ~Vo{g3NGZbkD);frCDGH7hJhOBB5E|#hhxQ#L1?yM})%y`} z4!N_kjBUmP+N2>q7^8nJ48>OzPE#Bx(i^Wdo7h4deFmMV)V`~I^yuNE%CcW6>J@H* z0rBWDoPVDjxNd!L{210(^yh-OI7W;H>42pAj9D7vW*9-d5k%(n43>dK$Nh@!Cu3Up zw_s=fd!{*x(dk=+1if}Xz5I&pv*Z2{Jbzv$C1_C$u1g0UaJ|1wN>Hy#Tq#OWiIhcu zWty;rRf)_b^g!5+oXV}0I^i@#qExszc zIfkzqJ6^!AAfs;{pAZ(`0(Ryzd<&S%LT0KsZ%3SW<2)G7YAMR8 z)XLCtGSKPdeomjol@(Ynq4U-`sbGz9dIse|sW=&YbPH7eyWmTr1=C168ucJzq&*j> zylZ>Gh+FkaR>t@;jZgb8@J2{<6jKJHR3(*|QnPC5;#fend z$R}wz@<@e^e3F$TpHL&i_?}eCkw+?QBoFGM@I)G^E`m3gGXMm|l;kw+?Q!B8Qqv{U%=X{5Zo{R@V>KqBzr<( zkf6k)=p<99i_M2mGzo2JDaMaTr-2YwsgP1Pd-t|mXZ2ueHzqa}efO=ir*7yh!|9Uq zCI7{@&YremL^FCOjVeeJB($O!AB1_>kYcAllFeRjcBc=sXGu~~v}6+fw&`(a4919K zOfhoL2hO+7&UQL=aDJTQ%%b14R1)Laxz+GTr(KDD2@?#$nIpH(p1FZ*jE$@nwYr}hIw>LYBBb=+s1M=S4nE`fJK13S@7P`C<)*CF8Z4WRBG&;J_ zBuw_U#QKDcA+(M_xB!mjMz)KAH%;RQK7~Fsdol*?Vx%f|$bM*crVGMDDN2f6kmQHZpW|?u+iq3b4xN7i$j&ut%5P5O9 zeRg|m0BgQbq9kI6ugbYry$F}*lPS0GGqXFot>&QBMg_~m{}~a&3978rcLw$+^_wfY zZF(@wW(q@I_%>%}XlQ?`u3nq7v(05{cxlpC=E^2YH4f9`d)B1%LHPit1!S`4;@Y$P zwl$sh7VYBQD0nF6_iD9w&u;H_V9k4r!bECm?_Hqs5f)E`b2MznNanLP#a zt36y}psE)&opT`P-&wmc)UdfnYnWCXMHiRI!~TStga;G3tRzO`YR3Sa(~@Ofw95A@ zxm(|j82r#7A_m_r6Jv1xz#)S3J7r=5&hI-!aNb)crr`XZLj>oy^M2{oCmFFy#QkV_ zWM})hWPXG#f@W5um&F)jXNg9GnjKa;#D{piuSCS{f^>t13h}&=c8aa`=qpvOo{F?5 zi=8nUKsSEn^j(tP7r={hJ?9#FGR(@DrAz36mfy&kA7L<8pxi7Ru)5Q1gIj#t>k>xf zI+4W`0u>HZNj3UnS;^uG)v<@?LB8!2Bh4C)H5+weh>MBn;uG3tn|nD2;&_ahzM@2& zjFF)(5gB^3>9o+fv@$|UMkoZe2Ws8XirV+OGLdTU%N-(;`qSL4&z)tsH6PvAEEH%| z8p!I4O$DG$hN#kX9k6y4#1Rp1H%%pCi;hhEL5VsM)MB408YJ+dGX82Q@c|M)r$nQn z+$CmKLA2j#3=n-W$3+?Y5W}Sflnx_);6|GUQ_Ds*adet?x*8=(@;2bXqC*}LxeK!D zopAJ8x4-|1&;+`Y*YB923iL~Q*aAWu1Tps^itFolY#-4$_v5<72c<)l&*&EH^*d(A zYZQ#<>Mri}J5ChJ-78Wb;6kKFYlo5g8g4Ja z0Tg|Opu93V@8k}6-4P$Nx9yl2wT2ihqAON}?X(L_-aMozv#ou{_U*fWZr$P1g2;3$wyq2^GpJPhQ0K-59^c-tXNrT5|w@7Ug;<4wPXDSw%h z=ZI@%8~YAji+ht*FMo4T$pbzDB^V+iXY|mcP}0^~F7s*;h2Wz*whx;a68@XcsgLfM z8H4aZT@XLIV|IuWxe2c9$a_~J)hCk#C$aMC^wAwgXTI0uY@>Tf&~m!ICfdqB4O@AK zurfta&CAmrWMvwis}s6ITA3Q#+ld4#Q`xHsckeK*9Gb#pWr_ycwKCOKzBFv*XN8p+ z_S@!GewM7H>7G1rpOsc-*x6%}U}c6yE|d>pB`N9-GK|1nYjC5iDjzT5t;y5AYX=r~ zdbmr{A}ry%(jd_HPH~wRLcg`12#>b% zExeVvt6$r(y}gR6@LKIWDE&GbhSyTRK-J~UukF}D4IQ}tmo9E!Gc$5t2lHz?F!UXw zxE(6Ysdo%>XsE+C-J;33mx2~Y+bJDIFp9Nk(F?u=7j-avF-}A0&BVPsw&Sap4)8II z2~IuPjC8J#VNB6(<|_;L?x2s>8poDJkD`3a4ICrgA98#Zu@}$aOE9EmlC9!H(a=Yu zyzg^-HJrl88`yhy%;K{Z8#RmdqkD_2nin4hsz=3*=em?Ukk6L94|?|8$tYs4)O`+q zqlDb7OXaiYW=0tEESU`Gv|dsaf-XICkk_2Ig;RU(+{tkDR;~THb2IeKLH9{2(}y_T zmMi;GSlLZN*~@kDzG+U*jGUs?-vsp-MGkcjdehv_`mm9Vuo+SGFS1dP)L2kIt;b9^ z&F!c!HQLJ~?90fz@tfx6NS=s~FA-xRKEX7mfpbDw`^wt{G6ueO3SURqhnoB9nZ?Kp z$t@5bEg4Iex6B!}=Q)&!D4c??XDl5Wd~x(_T`6vv!xT|(35QDZ(rGXzxYseSJ(979 zXG0jqRNkVfQr?c6ftHMNY-r5nES$mE!^awT^S;Chh!&sG*aJfb>_OQ`| zVXUD;Ff`VC2;+}A#(8vRHe-)>WZ3)hSLEdegeIPknAhd)?Q?S&1`dh%BU2L*V^n1$Jt8IeU@DPP zeAtvo8ID2b-??v}+tI>@DlDy2L`28=_POn?UV9mPmkhy{xB}w&mY}$*0b^mqd~D#r z&H@)GqC)19IJ z>n39{4gE8Yw+2rQTfqxkf1Bf^4N)3-(Q^v0s^y_JJ5i>PlDU zqkSL--*8NqDCcY1cg__%6lfoa!C1#w_opl)ZN)Gcsqp@UWu%=LmM;j;r&&(giD7dl za=J}qmF>KB>`WIFw?ZmJ-GkisHp3_bYgR?<9v=PHl ziRl(9l3e1n5kuE7wCcKs(F810!}9X`?48tN(W6naCOvznZVGmzyE53&V!eiAi{&s< zg!tJzXXxW*!0{!RQOlhMAGN!OIldJ4R$6@YEy9?WVRUNorP$NO@KtblBah*;cWz&t zppp6!$5_P)BR!QOUhmOCq&vC!Ad0T-MLTJ{`(iRj{hn!J>YeuC<^+oJbC7d#JaL+M zG%W9=UX6jP+=Zwf{SqgqK7};Z-o){!u1;$0g5i?53+LA8y*$CY0nL(pn&efduO5uW z97#VTXIBVK<0(aA(gU|N(CM&!*tjXlXJP~#=RyQsV?l`t(XkVi493zX^4h`)6v{*< zLJLWf{S**WNi<%305OxqODxWcB+_JSAzqb4;~5Bu*Cg@6BCsIFD*5l&RF(d{HdPt$ zZS-7DjI6+jLk1L`= zyFvuxRRxVc?gVYApwZf-pxs!|ummA#*B6P1xdy>#WV4v16~yg@=QK%Dm-2?^L{&xn zA8cNgmhlJ(@wTLfkK4R$N&T2j?MUiJZR(<=-fs9nZ@UR|I~GwzkJd$0NU2mxPUCG8 zlnO<(>jYlyq8xc(sZ1!|XBJw;yIX>{RhUXisUq<$o2qKiH*Kn_LiZGEpe&9<5!FEKWO4fEnqsmR&5sfN0ZAUb!-27ZoEor_& zg#183!?#6F(>;w`Z5T=V{V*_*pi6hN8yO_(LDjT~+W))yNN4GJeNe(VCV48!A44CC0O$14ccB%ao z!ZBKtlH~2ER|!sdn7`BL4c6}r3qdAc!M%;chygOT#?5O-XTxNgE|P zGJH^4go-#wqvAx}7l!jXRqDAgXxG1~(~3T1{Z4R=n05+X6(+*;PxMmJKNLUFLBSl2 zqHn?nj@C`xk{NUAk+80)jTN1dX}#!&V7WIv@o-UkbJE8O*tLCsrXG@OQ~qhV^nWvON@tgOpWv|i#CBYR>XTIM%k(2IFZFs z!_Z! zRsTf8j-NU!M4OJ;qEl7lbn>8qO`n<@Z8oNei?0=W%2TYlVk%iTb4J^WNduQT!E~}q zO)+!iQZq48EQ{I>*?!{7T@N0pTWaApGg?p6=@Svla`Xog(cKl1aWM`ptxv@Il+?P5 zMysIrhOIGN)mjvJ*aDf3-q_qtY_7ugScg1rbWlIbWIP7lHXr25b>kt(-zW?$sMFoi z*I9au2249-@F$qC)t_J{eU;9k@kkmy#e-znz0Av0u#K5Vs+a}kks2mGd1M}QojkID zxlLUdls~P;5MTUuXmJ4(WyC{VGG)Z$O0fbra$iT`&IJ(Z1gEs~ zRAu~bQ0bXsn@T?2?NG@ndSch+C9mjtT$@U6ecqvxU!QZRRzByhbo8v`7zPVnIZ~t2MEhXO^ zFH-W&@d6LaFq~x39MM}Q8UXX8}Df^a@Z;lrk`R3$B zM!tQn=ryTSi_?R69KDAjiSAAfpgF*e47y1vfckjQ#w;R_jL|(>Wt^^08@BQ2jc#m6 zlb|ByNr{Zsqd94#k+Zo4xr@~l-PQ;tAWw$fHpapZ`=s4L&+C%A9Sj?_7Wz7aDLAe? zSjMcejzU4ljf1#JS^HW5*jLauhZ_Y#5v56OSx?X*e*&F#>iGX?uriEuJs@>4m{jf1^z6)!3f+K4|dNA|s)iNq34 zi{N9y^@#vjSo1+K#zh{f1gFkCP>S)9p6SqziL|hTAjXG|A5HMp<45VvaX&hby%+k5 z0XN+$Zrbw0)eL?6166k1$Cbvh%ew-2QmLXL^UGK8A^s(%APkWMF}4S~87dHD&dOeXa^P!8k4;oni16fakH?$45e@T}4;xRwB&eQibgllS?`S zC4^YK+YiQAdvp_3lJGb|7aGE8^JECG;&#ChK97ybu2X26#`xlVC}TIEy;z%TV`hNK z#9ptzf_Cknn2HZU!VnJQ5?0>l5sx zX3Bu@7d&kYd-U6+rV8P+VECotwo#Trrt)+?bQFOEyMpxer>TO#6#Ij`V1}JSUa*2a zLte0oMPe^l!z7^>oX2{w7hJ$1us1(&r^LYk8l$iE%O>b={b(w#Y?s5JbIKu%Gn`@c z%T};N>PM@%S;MUlE8_+g`G+vWi9QCi4`5nI&{5Rs9z<#88QM%jVjSDxkpzz^yA_sX za0x11$&L96uSFQnp2EnB-X}W4IV??!;NirOuCqe!HJ;O zf5Gk^Du({XAYy3fR#f9IccB| zQ*xWGPHCb@&v9CYs)@U&7>HChan8?yq$M6mNic!Thl`EgvtJwY?%)!!ogW)F@Yk+uZm)pK4RIBg`xz?sKsLY(k7 zdvKa^C){`~g(|F$k60TK9Fa!@B7`R}CulBt3xIbBf2ki|B>W{F93IRQ{#p-?2&9C6 z%)!ZQe9vP2if}gq8W-|!^2pQb63PEj@t%x|kd&9JN5tVqNOI815aFNkq(Cb}gn!s> z;An>n$XFfRGbH#M9vBml1RF23SoXpHjPN&lQm551iC?7J$n!0E;h%`me|t30N*8JP zw8ud7A_SMdJhXc-utNA7JnDg033scg3=i-c;eY0lr{zAW-x}fQ^u^L1F^ugYki{S@ z9C;kX;vC8Uw>@Bx`}U`_`hzXYpJYMW4h8U)cF(LNJH76t1N3sc*;ObO41oP7tCm)v z0R96D(gFy;H?knDZ2_dyT*fd1p`haiqO}BioJXmx1X>#24*`=#WWlHEPG^@BN*%9teG{`%ORSP{Y3`C zTsmGG5qHE>|h?dfDQPHNHj2IBfQTSNgA)~A#Pybu}nS3Bq!tZ&xbm`wXi zJ5sQ6(3|$@+LsR${#w9p48ycK8$o&ai5H7;=v9ArT5>V2F6K4H(D)x-EXJBXuQ9=1 zBwi!U5B}JT#n|`FYfSMy&1+1d@kd^a&WG|EGkk~h8Z&78p%;sBl9bn2!S_3_u>y@h z@M1BJxA7XQIAy|XtU}}Wy;zLPR(OpyoM-1X)}ZlwUM$AxKmA#$OHXsTgNaqQ0E508 zD}%ZsnF70!PS*#;IN-{vi?J}us-q&hhRa$T35m1FRPAxo=jDOI13`N0@#5FVwpZ^@&S zD$z&%V2nFqX`_`#DOIbF_`w+K zGUcXpX-ZA$*-ViJovxF2tsnpixy^ylHILTCZ4Lyqz%&OEfI7E1P!Kf-ZoPsLD6(&L zx(y*DO6>i-Sd7!4yv8{C3y%~P*ZX?07`G(y8tJita~T$&-ZAgM*lpI#tdUY-bN~==XtRh>*c(S73?hLHBu41j~9z^>5SdDs@X)G|0sX`W5z$BF&OXWFA`RhDL zjComJhOPwSkrdmlc_hQF96VCN=e=z-ZnBx;4|NMHKwSb0(9$vsq-bJUfEJrspn|53 z1!(!11!~v<#sah;%>oO!6~~T=@*KJHryeB6Y&$QLV4j^vQfz7GkqjqKd8C5r8rx{P zPH5T~Q^&#r)TyvQ;zUfTN}Y%)Aaf$7fC?hUrcpJwV2Nf+Nz}~k`X(@sFHu(20v^<{ zW1>_cSIW`Kkr>h9Ws>Lx9wfyJzPwC^4LLkg!3Gu1Xw;Q*0hgxXtTUfoxM+#bE?lKm zF5pU4=E<&6#gkp5swcZfHBWYp<~`XpT5u)~atC)ir8`GrPk!MdUQd3Fa6F06uMyVZ z`TU|c6P{lh`QR-2w1G@9PLav7C+Kl>f0jSNB^ve!O6o~5HsI(PdU%drK|jsWtLSYx zdJTOhN1sQ3$}Mg*3j){Q~X6! zOFTkTL_9)MJv>5FHatR8FFZn1C_F+_Av{7;8ay(O1N}U*fGe2nA$1-DG+y+Aq8!+r zDGH;8VvPAcP=eDH9w^1mV-J+!e1!+9U>h@U`yTO1rJ5rZr?KgJIhxu;gRHe#07iR{ z^g*#XEp1CBxb@7VFvT@z`t!$@8t&bVJE6Q_j2Ut-nBcgL7ff+slNZdQU-yF*to3*$ zt61vsf;Fs~c)@wBU3kF-bLpZSA(XN`#nOd?#^(N62Td@4rdM(tG{tn7AI&hk*HRGhM+z<8ijJkOhXTkBaVi#m76~%$fI>iqQaow9> zKdE>e+r!?$R!GVFMK0u6_{&3TY}hGu6*ycymkXG|5u<~Cs51Y7td88xhiyJm@jZy; zvz+`3E_z0?g^PdWaWT*FH+URSI9xnu3yv7GO1z7?j@-qEZazx6_+ZP$oX>PIMw@x! z+zA>{raU1cx$Yt&&+|kiFX6BE_*<0kv$x=&o#cE(avga@9^%RLoX?C1rh|AFbLPUu zKlHeW8wo@mF?M+t8G*e43jSWPM~8t?B&J~odeGy+DyQ$yX%JS#I7YEGSAtE`TXUu6 z#-}31VQY6@l|RX~Nhlwc=2AB8%CNkM%Qf2gGHp*ri{0f*ReTnMe53ZF;=9ztmz4B% zf_#O(ZmDCDJ;d6jQ{2yo@rPb1F9I-@AhPWLgy0w>`G9nS@w{H=ca_WI)X(FxDNlcS za4DXx!1k@*-+Y)V7#F&VE}hgD^9M!0w)r5%ct4jhXF9Ju(hxTsBfIeb-8j-$8iyEY zj56#;6BJ-Snqs7)cex4UC_P+eCex*n#jk}K8t5W}8k*=IgA6SUUV;p53}Au`9SmZE z42u}Z_!(kyGvoyr8bL3>&bu{tBQJABJE91i)Z9Huo=IG#|!!XApwgm?`Ftn0!SL@8`(2m8#!9E*5|CBPv@qI~I9c7UT1_5~cx zurJ_fg?#}>JM0TMI$Qd(hz=s)ZAN*^*F@zlI2vJJz|jo*0*+SL7jU%0zJQ~%r7w%< z?*iUp=v5E<0**%57jQJgzJQ|@_5~d6urJ`~Z0XA)*0pr4AK$n!Ik5j)+yjK|_3h<) zqu0g;QhngXf-zaJr;Dd8?kIv~;W%kM9<1Q#8SZ1z;j}phE6WpH)VGLt0~`~2gL(@y zQ1m~nwm9%=y*F*HjBuJ~g4JmU#yvn?Ji^vq?vHWhfgTy@B^m>ruj0G$cJF)mgLNGG_DDFCN fUCGD zDFD}S6KepT$89(PcmY?$_~B%CFf2(N3`>#(!;+-Iuq0V9EJ-C8mZTaCOHvDl1veK3 z!?Ivr737q)bayZ;X^gOxYCN7CnKrT3h8q9xkwJvvPtKFJMQNUm7(&6c*I@P*_moLt#OU z4}}FaJ`@(z_)u6-<3nLVjW_ymCoHJ(!LTftH=#MwsPUn&pvFI-Sdo&_c>am{c$_0{ zVG*R1AqI##|F0pK9*zx2(<`z8n4Xjkz!`Ri2jB|!hX>#)c8Lez8isWNcpf{(1Mq@* z#e@^mDQdrQ0|SG{*hH=eoeZ9sS9~ydiVfu<`3&32LwE(7%R_h-Tg*dv4c9b;@Ohj^ z4&e*tB{HsmXa|DvK|^3%fx^hshWkMJXbOVyL0b@v4;q7De9#&MukJt27Bymdy#+;nUKTX{=G&V@#+ZAV`&kH8BI z4T3YaH_+G}+Z$-&j_nOJb;tGwnz>_p1Fg7YdjqYyV|xRwnHy_mRX5Oib7QT8E?{GA zsSPq@(F{0aH4~<>T0lB+hp?t}>JDK|ICF=vCR}lcuqIq}hp;AGbBC}dJns%+O?UxY zH2r>~@`u8Ly6=qa4dtl%&dA<`>9j~7Z8|g(fa&Z=0Hz}(0hmsb1YkN)5`gJki62Il z4}}Fa{(i--ep!x(BP@@Nx~S5|F##L0jtSV1bxgp9Xz4|tAjlys`5>(f>na|og6lRt zP}RII(N%LX=rQ>E}+8nNQX(3>>E3P;C#X@U=(gx$@0WPuA^I!$mJbY;5*uF!@FgvFY zG!*D+eblXE3E{cL(tiPV`@>!vm+npQ=J2FwNr<6Kmm00Mn-etv_>P^lfJg1gWFX#1 zs}(~JOPIbUy330=6rr0bjd#c5V}oF0+-d-3Tck~z#}j<8m{a;%SfZHW zz>=;!&-K0x(_E6o3;nwgEWBeJTMsGrwG2*DB_hs|#1nFIN|? znP092OckKM+#Zjy0%TRsB4hWoFUM&|%kD9X#JJaP4+qQbz1;~W;VfAVx4?q@a6ueZ zTBdS}{pQ8eBsDfrygXQ@f;d?k;UdX8dSCt7KxPxi3f2I@&=(qBYMUnTWh^f)E>9<; zA*S%G)CtC&_0!z~Jm!Lp&Qb@JXmQ!R+aphSJlP{O<3c%o{)(_M9-|OV^0Ij`iH*>4 z4&CkB5IqXufl|~}y(vmcQOnnF_dE5K9<_ehTE;LmR>qp)QjTF|yr>!4b_mByl*D)y zYq&j1;9ffiB-|e?chRB{Zm!^pV34?Ig;ojv3MY={fYz@G|AXR8Md4s>9;s>5Hg$b# ze!-ImLGj$c@#Jw(JO}OKW_qeP&fI|0amLnQH6bwlf)zNSjO+t`o1gKg-@jQ z6O1Hons3rV{0Muu?Aj@O=@Udu12D|DCS%BCNa&2)AUFQq#pB!Rl!s?_|a-tE=0itmWdSXn{TeV(bodI@i&~7!$1p&3%jg`grDpfd3u0=YR>b(i%s$CpRwAzvP$ zmwb7Ip7Q09Dz@44NDcezd1M|N>v?1WJL>J=bn@K)GajJDXI6q%omqgEn^}O?nOT4q zm|1{UmRW$7lv#k*l39Qjk?oi$&yo92_aHIezvg8UJcP|7sreqIC^30DS#+I8rh<2m zcx_eleL+iG4O=mInRy)H4d@r45|)_imWy1!Gv~1rr$Q1yk7R1v8lH z1uG$ItM~}<*@-YjurxF63qwD)Z8EIq??)hV;!_& z?vHiQs`*@_gVxObu?{+K?vHiQ1q_SztEK`KpWSp%Gef33ni+C}1u%x3;vA^~lUctl#N3UYmf}__kWx>(saRoO=U%=bcnvUmCu*G{cUF>#Z>{-?gYfhgu z2{0b>&4Hx}0sqQKvkjAM2h=$xg;{2LU1%u5*ciA07@b=hn8j%86wCfQNe^mF#0H|#Jo7J z&?gJ=6&|lrJOs?>Bd_Qp3kIU3Qu87@JE;^0Dfs|qctV5GM@eNEOfnE9m6;dY*-2%H zEuT~cS3)!TD5(nUV<1YZVqTPICsjdg`J}3tPiFK{QdK_hDXFS?@t&Pj6|v=$s^Jo8 zPf|5L?vGojkOJ{ z#tK!f?g)p6T!ALmr0_b23*c_SCYwZ`fbZJz5=jil-KVt8cSW>&0>N^V@vcY-v)&ca zSYK!~-W|3PXf)m(E@AZUup8)MFZylHS$e4UTRae(E73(F?S6u(Z0tWMCxWB+%b18S zM>Ls=-25H`h}?8jhXm#3cbwd$2Z~1+&ALg5-24#(h}`6o5V`psCpWPhLd4#9(?z+i z5X8%P)1`!2Z@Oqq=H^YsT&9gcqw!L735)T{jT>m>rtx-=78z1*ev^wr4{Msn{s%3A zoD{iviIWJ9k}qS)t{m!A=H_=9K;)*IIwUAJ?{#uB6}h>kLk1AJ$t59j^Ij)6 zu@6P$rtzMRa$O;am+_uX3A5hQ(U{Cl<6R;ffkxw9q7p{$5|wikmh^Cks2gaJoA>ZQ zZ0`0b5>dH%v6Bdn@Gj%Vt8yZl%+2pGfXGcZbx2Tde%r~-OyuS~qeg%uRQ&Q=N+3bW?`}<>oh? z+^mY+G?w+0Rn@7;O}A^tzA?&8E(wvF-*j>l5+XN^H@tKr0ztftH@r$%j9n|`x>;3q z(`~yI0*!9lonzE?mva*~_Hc)5IX8(6UB+ePg>{sh#{M`BC^zqMaqlS@M6<~>gAAt7?pct1_Kt`Nk_*!Ee% z=y*&yH)|?4-L_jH(CD_^IYw=FIX7WR5BFe~bCbx>W!xZNSVy^O>}b?Lo}0!4_X1mP zP4JC^zoVN<4iSs+VJXr@rqG2% zHa~Wb#M6Eq6POM?A-XYxDfECpCHj+Ge)P!o=!q^JZF@a>f=fp$QI8()(oxl+foS(^FS$7i~5pFP+)-k zr5zgbb&UIdF}tmsj9db$#*003T`os1t*=Z5(U)8iT*pdJt{O8kT0}wnTsH|>Ug=}g zm0n@Vr4)pC|Fs{C&4-H1k_paCIe~4h)O&cp57R?#iV{MK=7sU9R46$#W4HSy6Z4ff zZH`i#;)NF{(3c|8h}v7&+ywBWa-JpFg@b2mTQ0phz((xEF6K?NJJ<(^mHJZ3xDgxs zn}OWo3ZTlH3-!_uq)VGJ@r6|iX)?VOs}uBsaJ?KD4I!j&^Mf%8O(`=9$;8~qnVUi> zPO#w^!)M1YWsLF7pG!#uwiw_1C5*oL^#HPjCHNk3e9sM8aK$biuVKp?njYhY(p+T@ znGauxf`$p0@hUFPp?ia@#Kzc_hx*zdVj*e29WDccb9eZ`7`sBOK%0_@xu1>fEWj8W z6g+bDQl3|7jN0;#e#rz|PCPy)*!bW{kzUgCDov2$C;gHM_Of_VOtGQDlOnye=T%Bi z?frvaGQpNBPl_3q6Fe!>OMG6X8B+X&Uoyd7E>DUTtSWd?q?h`wo)qb&SFh3MzsfY z+JaAwYN1afRl@)F$|V?D@u{WQy2YnPHPEM#D&Wt(atU^H@~LIm55}iPwa=%KD&K#3 zfC>Ne5>IV zJU%t5aXyVy;YuB`wx8`nnWvpWUk%0r19D6F4JVA$bukawTx!YTn6)BV8C={

    78iPrFWuD$Ee74g8``<3`pHz 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%0AG_r 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


    ^D*KfR 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ଋ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ዣ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

    R6lj`R|?>a1>VDxN`SvoK&RvER|*((oc&7y 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 Gv;Q9<9`|Jc literal 0 HcmV?d00001 diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/bsp_timer4.crf b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/bsp_timer4.crf new file mode 100644 index 0000000000000000000000000000000000000000..7369dd2a8a7e1cefce49ce737f4d7c80cf15fa36 GIT binary patch literal 341201 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

    H!E04%5m!cg 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%0A*bICN{%`i$Yp%=X=62i)-f+g7U9725l_atLtOj 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 IQh)aU0q0%FbN~PV literal 0 HcmV?d00001 diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/bsp_timer8.crf b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/bsp_timer8.crf new file mode 100644 index 0000000000000000000000000000000000000000..c620ab02f4708502d6719bc5f94f2d6807c33eee GIT binary patch literal 341484 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�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 literal 0 HcmV?d00001 diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/bsp_iic.crf b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/bsp_iic.crf new file mode 100644 index 0000000000000000000000000000000000000000..22f687d953debd71021daf45af6fd6369e257823 GIT binary patch literal 347250 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 literal 0 HcmV?d00001 diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/bsp_nvic.crf b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/bsp_nvic.crf new file mode 100644 index 0000000000000000000000000000000000000000..563332ad2e443204ceb32c2accda3da79dbe798b GIT binary patch literal 339100 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 z zK^~bn9g`rBO`MC#jVC59#^gqyiOVr*@zlh%n2dO4;$}=TJU4MCCJ$Z+Z^fiQzi?E{ z$#6jUD5m#c3LnMv{wottV|xF!a8yk14+=-c^!|{E7css6MtCcx_umR{#Y~NN!do#Z zFl^#=%*k*>cq?YZdv9VWX2bhn;%&^mx6Q)iN;+AXT6j^(Ick@M z{z}eKyDhv-&S;N?!AiPpuZ7V{I%=PVkCjZ~{T4n~vacPmFjmRQ`k;j`mE6vBSs1UR z%MMxiR>}N5Y~gz){dUB{&r0rOj#~It$){b9S(vC~bL+P7yOPcAxP?EJY;GqkOjfeF zowP7j$t~R}3x6v)Wu3P0uaZ;N84J^uoU+bZm{Z03{c{%PR`GuSyoJUpp6Ue)O;tSA zix%crvAOkFSXjmUy<}lg73b;8LZ?-nr>_WgRxy9C3UyX7f3FF3R&ghD-NK40_VybV znyaXTn?kWw)WIzaE32r3+ZI+;Q3rQ~imRxDyB5||Q3v-dv{mu+do8T1VspE1VSN?3 z`@q76D(c{&(0CPf@W{gEDrWLyq4p|f@)HYNtC-1sLibfX{ihbTSMl_pS=doUhdvix zsG>t(Sm>;xL;Ef4sv>s>EbOkLS6^D#Q^n@?%EI0%D&n<;eO2V{pzu)@xjST`tBRTY zMmVa9o0zx4QB~Z;yc3S9qF#nAbXSqZBNmQVv9G-s-m0QrK3F(a#U0+La9I_1cprt! zs;HMw7S2{tFP|-(tD;`UES#^RUcOkkP({6bwQ#YDdKtISQ$@Xevv8@3digFKT1A!o z5Du;4EdEnCw2DtJ{t^zY;(hIeaA+0pYkv!0R`IJ>e=OXo;$6|CaA;NX{VNOis>tlW z7J945?0>?mReTb9T6ndJ&oRyjuU7Fn#@RL=S23~Y*mzRK#GY&8X`+{THl8JVX|(Y? z(Myw!7l~fx+vrd9vcSg6Dkk?jg}nm0}k6*l_P16*jSxok{q?MCdaOK%tl*|Nz!d&U5=zVZlgU%(wwldK1b4= zw6P&a(wwrfDaVF)+Q#M_XT&o$w&XY?p0%+x#~JaQjcqy3i05r=&oO5%*w~RHX)fB> znIma>Y;@*0BVMwxE5{ANWgB~PB+V5Ydvi>jt2XxKm^jyL?9VZAuG=_}W8&Pf(Us#( z|4kc*a@-Z%vT-=a#JO$bNG`emwQ)4Z#JOvuJ4e#ovvE8}()8Lmkt1pD+c=pcX&%@( zmE(-~(8ie@mGj8P*&LPg*v7dWne)WP#T-e~XQL;_WO{1jQjW>=%*N#$=YZ!nuH-le zys&XC$7JfaaXrV$aKOfm96RAl8#i;D3}4x}m18@6ZR1Xkq#3kvH%HP8*|?V@Y2MiA z%_aLk8~1a`{?Eq49NXcrjYm1Q!x2G&T(bWY6v!p}KO23yWdA29kW2P|f&#f@|0gJr zOZI<)0=Z=WXJa6j?EeG>a>@QrP#~A={{#hc$^K7JAeZd_Y`n>_C;ku=$R+zfL4jPd z{}U9*CHp_&{T#ni^;>v9$9DKfct6K>IBDZ^F4_Ot7|SL5KS6;UzZ?2bP$0+ehE59# z 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 literal 0 HcmV?d00001 diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/bsp_spi.crf b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/bsp_spi.crf new file mode 100644 index 0000000000000000000000000000000000000000..e27a5b20fb2bfa581df2d02b6d6f3d03105030f3 GIT binary patch literal 338277 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

    M)s^EgZQ+WN+G0JN&DhRL6i1H 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 Yf5R{3SNt8nm5=tZy(WVp-%$F00j+*PCjbBd literal 0 HcmV?d00001 diff --git a/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/bluetooth.crf b/Hardware/Firmware/GeekRobotTinyFirmware v1.0/Output/bluetooth.crf new file mode 100644 index 0000000000000000000000000000000000000000..bc2c054f767701b0a51820a1ec47d8137cad10ff GIT binary patch literal 360139 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 R8cG{j*$b%M>_QyFT_hHz9P5>!0Id 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